From 385347607fd5bb0bf707027f985869d48e403bc5 Mon Sep 17 00:00:00 2001 From: Irish Medina Date: Fri, 17 Jul 2015 22:17:23 -0500 Subject: [PATCH 01/55] Experimenting with Bootstrap forms --- infohub/static/infohub/bootstrap/config.json | 434 ++ .../infohub/bootstrap/css/bootstrap-theme.css | 455 +- .../bootstrap/css/bootstrap-theme.css.map | 1 - .../bootstrap/css/bootstrap-theme.min.css | 13 +- .../infohub/bootstrap/css/bootstrap.css | 6583 ++++++++++------- .../infohub/bootstrap/css/bootstrap.css.map | 1 - .../infohub/bootstrap/css/bootstrap.min.css | 13 +- .../fonts/glyphicons-halflings-regular.eot | Bin 20335 -> 20127 bytes .../fonts/glyphicons-halflings-regular.svg | 485 +- .../fonts/glyphicons-halflings-regular.ttf | Bin 41280 -> 45404 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 23320 -> 23424 bytes .../fonts/glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes .../static/infohub/bootstrap/js/bootstrap.js | 1883 +++-- .../infohub/bootstrap/js/bootstrap.min.js | 12 +- malaria/templates/malaria/create_post.html | 87 +- 15 files changed, 6071 insertions(+), 3896 deletions(-) create mode 100644 infohub/static/infohub/bootstrap/config.json delete mode 100644 infohub/static/infohub/bootstrap/css/bootstrap-theme.css.map delete mode 100644 infohub/static/infohub/bootstrap/css/bootstrap.css.map create mode 100644 infohub/static/infohub/bootstrap/fonts/glyphicons-halflings-regular.woff2 diff --git a/infohub/static/infohub/bootstrap/config.json b/infohub/static/infohub/bootstrap/config.json new file mode 100644 index 00000000..fb1de3dd --- /dev/null +++ b/infohub/static/infohub/bootstrap/config.json @@ -0,0 +1,434 @@ +{ + "vars": { + "@gray-base": "#000", + "@gray-darker": "lighten(@gray-base, 13.5%)", + "@gray-dark": "lighten(@gray-base, 20%)", + "@gray": "lighten(@gray-base, 33.5%)", + "@gray-light": "lighten(@gray-base, 46.7%)", + "@gray-lighter": "lighten(@gray-base, 93.5%)", + "@brand-primary": "darken(#428bca, 6.5%)", + "@brand-success": "#5cb85c", + "@brand-info": "#5bc0de", + "@brand-warning": "#f0ad4e", + "@brand-danger": "#d9534f", + "@body-bg": "#fff", + "@text-color": "@gray-dark", + "@link-color": "@brand-primary", + "@link-hover-color": "darken(@link-color, 15%)", + "@link-hover-decoration": "underline", + "@font-family-sans-serif": "\"Helvetica Neue\", Helvetica, Arial, sans-serif", + "@font-family-serif": "Georgia, \"Times New Roman\", Times, serif", + "@font-family-monospace": "Menlo, Monaco, Consolas, \"Courier New\", monospace", + "@font-family-base": "@font-family-sans-serif", + "@font-size-base": "14px", + "@font-size-large": "ceil((@font-size-base * 1.25))", + "@font-size-small": "ceil((@font-size-base * 0.85))", + "@font-size-h1": "floor((@font-size-base * 2.6))", + "@font-size-h2": "floor((@font-size-base * 2.15))", + "@font-size-h3": "ceil((@font-size-base * 1.7))", + "@font-size-h4": "ceil((@font-size-base * 1.25))", + "@font-size-h5": "@font-size-base", + "@font-size-h6": "ceil((@font-size-base * 0.85))", + "@line-height-base": "1.428571429", + "@line-height-computed": "floor((@font-size-base * @line-height-base))", + "@headings-font-family": "inherit", + "@headings-font-weight": "500", + "@headings-line-height": "1.1", + "@headings-color": "inherit", + "@icon-font-path": "\"../fonts/\"", + "@icon-font-name": "\"glyphicons-halflings-regular\"", + "@icon-font-svg-id": "\"glyphicons_halflingsregular\"", + "@padding-base-vertical": "6px", + "@padding-base-horizontal": "12px", + "@padding-large-vertical": "10px", + "@padding-large-horizontal": "16px", + "@padding-small-vertical": "5px", + "@padding-small-horizontal": "10px", + "@padding-xs-vertical": "1px", + "@padding-xs-horizontal": "5px", + "@line-height-large": "1.3333333", + "@line-height-small": "1.5", + "@border-radius-base": "4px", + "@border-radius-large": "6px", + "@border-radius-small": "3px", + "@component-active-color": "#fff", + "@component-active-bg": "@brand-primary", + "@caret-width-base": "4px", + "@caret-width-large": "5px", + "@table-cell-padding": "8px", + "@table-condensed-cell-padding": "5px", + "@table-bg": "transparent", + "@table-bg-accent": "#f9f9f9", + "@table-bg-hover": "#f5f5f5", + "@table-bg-active": "@table-bg-hover", + "@table-border-color": "#ddd", + "@btn-font-weight": "normal", + "@btn-default-color": "#333", + "@btn-default-bg": "#fff", + "@btn-default-border": "#ccc", + "@btn-primary-color": "#fff", + "@btn-primary-bg": "@brand-primary", + "@btn-primary-border": "darken(@btn-primary-bg, 5%)", + "@btn-success-color": "#fff", + "@btn-success-bg": "@brand-success", + "@btn-success-border": "darken(@btn-success-bg, 5%)", + "@btn-info-color": "#fff", + "@btn-info-bg": "@brand-info", + "@btn-info-border": "darken(@btn-info-bg, 5%)", + "@btn-warning-color": "#fff", + "@btn-warning-bg": "@brand-warning", + "@btn-warning-border": "darken(@btn-warning-bg, 5%)", + "@btn-danger-color": "#fff", + "@btn-danger-bg": "@brand-danger", + "@btn-danger-border": "darken(@btn-danger-bg, 5%)", + "@btn-link-disabled-color": "@gray-light", + "@btn-border-radius-base": "@border-radius-base", + "@btn-border-radius-large": "@border-radius-large", + "@btn-border-radius-small": "@border-radius-small", + "@input-bg": "#fff", + "@input-bg-disabled": "@gray-lighter", + "@input-color": "@gray", + "@input-border": "#ccc", + "@input-border-radius": "@border-radius-base", + "@input-border-radius-large": "@border-radius-large", + "@input-border-radius-small": "@border-radius-small", + "@input-border-focus": "#66afe9", + "@input-color-placeholder": "#999", + "@input-height-base": "(@line-height-computed + (@padding-base-vertical * 2) + 2)", + "@input-height-large": "(ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2)", + "@input-height-small": "(floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2)", + "@form-group-margin-bottom": "15px", + "@legend-color": "@gray-dark", + "@legend-border-color": "#e5e5e5", + "@input-group-addon-bg": "@gray-lighter", + "@input-group-addon-border-color": "@input-border", + "@cursor-disabled": "not-allowed", + "@dropdown-bg": "#fff", + "@dropdown-border": "rgba(0,0,0,.15)", + "@dropdown-fallback-border": "#ccc", + "@dropdown-divider-bg": "#e5e5e5", + "@dropdown-link-color": "@gray-dark", + "@dropdown-link-hover-color": "darken(@gray-dark, 5%)", + "@dropdown-link-hover-bg": "#f5f5f5", + "@dropdown-link-active-color": "@component-active-color", + "@dropdown-link-active-bg": "@component-active-bg", + "@dropdown-link-disabled-color": "@gray-light", + "@dropdown-header-color": "@gray-light", + "@dropdown-caret-color": "#000", + "@screen-xs": "480px", + "@screen-xs-min": "@screen-xs", + "@screen-phone": "@screen-xs-min", + "@screen-sm": "768px", + "@screen-sm-min": "@screen-sm", + "@screen-tablet": "@screen-sm-min", + "@screen-md": "992px", + "@screen-md-min": "@screen-md", + "@screen-desktop": "@screen-md-min", + "@screen-lg": "1200px", + "@screen-lg-min": "@screen-lg", + "@screen-lg-desktop": "@screen-lg-min", + "@screen-xs-max": "(@screen-sm-min - 1)", + "@screen-sm-max": "(@screen-md-min - 1)", + "@screen-md-max": "(@screen-lg-min - 1)", + "@grid-columns": "12", + "@grid-gutter-width": "30px", + "@grid-float-breakpoint": "@screen-sm-min", + "@grid-float-breakpoint-max": "(@grid-float-breakpoint - 1)", + "@container-tablet": "(720px + @grid-gutter-width)", + "@container-sm": "@container-tablet", + "@container-desktop": "(940px + @grid-gutter-width)", + "@container-md": "@container-desktop", + "@container-large-desktop": "(1140px + @grid-gutter-width)", + "@container-lg": "@container-large-desktop", + "@navbar-height": "50px", + "@navbar-margin-bottom": "@line-height-computed", + "@navbar-border-radius": "@border-radius-base", + "@navbar-padding-horizontal": "floor((@grid-gutter-width / 2))", + "@navbar-padding-vertical": "((@navbar-height - @line-height-computed) / 2)", + "@navbar-collapse-max-height": "340px", + "@navbar-default-color": "#777", + "@navbar-default-bg": "#f8f8f8", + "@navbar-default-border": "darken(@navbar-default-bg, 6.5%)", + "@navbar-default-link-color": "#777", + "@navbar-default-link-hover-color": "#333", + "@navbar-default-link-hover-bg": "transparent", + "@navbar-default-link-active-color": "#555", + "@navbar-default-link-active-bg": "darken(@navbar-default-bg, 6.5%)", + "@navbar-default-link-disabled-color": "#ccc", + "@navbar-default-link-disabled-bg": "transparent", + "@navbar-default-brand-color": "@navbar-default-link-color", + "@navbar-default-brand-hover-color": "darken(@navbar-default-brand-color, 10%)", + "@navbar-default-brand-hover-bg": "transparent", + "@navbar-default-toggle-hover-bg": "#ddd", + "@navbar-default-toggle-icon-bar-bg": "#888", + "@navbar-default-toggle-border-color": "#ddd", + "@navbar-inverse-color": "lighten(@gray-light, 15%)", + "@navbar-inverse-bg": "#222", + "@navbar-inverse-border": "darken(@navbar-inverse-bg, 10%)", + "@navbar-inverse-link-color": "lighten(@gray-light, 15%)", + "@navbar-inverse-link-hover-color": "#fff", + "@navbar-inverse-link-hover-bg": "transparent", + "@navbar-inverse-link-active-color": "@navbar-inverse-link-hover-color", + "@navbar-inverse-link-active-bg": "darken(@navbar-inverse-bg, 10%)", + "@navbar-inverse-link-disabled-color": "#444", + "@navbar-inverse-link-disabled-bg": "transparent", + "@navbar-inverse-brand-color": "@navbar-inverse-link-color", + "@navbar-inverse-brand-hover-color": "#fff", + "@navbar-inverse-brand-hover-bg": "transparent", + "@navbar-inverse-toggle-hover-bg": "#333", + "@navbar-inverse-toggle-icon-bar-bg": "#fff", + "@navbar-inverse-toggle-border-color": "#333", + "@nav-link-padding": "10px 15px", + "@nav-link-hover-bg": "@gray-lighter", + "@nav-disabled-link-color": "@gray-light", + "@nav-disabled-link-hover-color": "@gray-light", + "@nav-tabs-border-color": "#ddd", + "@nav-tabs-link-hover-border-color": "@gray-lighter", + "@nav-tabs-active-link-hover-bg": "@body-bg", + "@nav-tabs-active-link-hover-color": "@gray", + "@nav-tabs-active-link-hover-border-color": "#ddd", + "@nav-tabs-justified-link-border-color": "#ddd", + "@nav-tabs-justified-active-link-border-color": "@body-bg", + "@nav-pills-border-radius": "@border-radius-base", + "@nav-pills-active-link-hover-bg": "@component-active-bg", + "@nav-pills-active-link-hover-color": "@component-active-color", + "@pagination-color": "@link-color", + "@pagination-bg": "#fff", + "@pagination-border": "#ddd", + "@pagination-hover-color": "@link-hover-color", + "@pagination-hover-bg": "@gray-lighter", + "@pagination-hover-border": "#ddd", + "@pagination-active-color": "#fff", + "@pagination-active-bg": "@brand-primary", + "@pagination-active-border": "@brand-primary", + "@pagination-disabled-color": "@gray-light", + "@pagination-disabled-bg": "#fff", + "@pagination-disabled-border": "#ddd", + "@pager-bg": "@pagination-bg", + "@pager-border": "@pagination-border", + "@pager-border-radius": "15px", + "@pager-hover-bg": "@pagination-hover-bg", + "@pager-active-bg": "@pagination-active-bg", + "@pager-active-color": "@pagination-active-color", + "@pager-disabled-color": "@pagination-disabled-color", + "@jumbotron-padding": "30px", + "@jumbotron-color": "inherit", + "@jumbotron-bg": "@gray-lighter", + "@jumbotron-heading-color": "inherit", + "@jumbotron-font-size": "ceil((@font-size-base * 1.5))", + "@jumbotron-heading-font-size": "ceil((@font-size-base * 4.5))", + "@state-success-text": "#3c763d", + "@state-success-bg": "#dff0d8", + "@state-success-border": "darken(spin(@state-success-bg, -10), 5%)", + "@state-info-text": "#31708f", + "@state-info-bg": "#d9edf7", + "@state-info-border": "darken(spin(@state-info-bg, -10), 7%)", + "@state-warning-text": "#8a6d3b", + "@state-warning-bg": "#fcf8e3", + "@state-warning-border": "darken(spin(@state-warning-bg, -10), 5%)", + "@state-danger-text": "#a94442", + "@state-danger-bg": "#f2dede", + "@state-danger-border": "darken(spin(@state-danger-bg, -10), 5%)", + "@tooltip-max-width": "200px", + "@tooltip-color": "#fff", + "@tooltip-bg": "#000", + "@tooltip-opacity": ".9", + "@tooltip-arrow-width": "5px", + "@tooltip-arrow-color": "@tooltip-bg", + "@popover-bg": "#fff", + "@popover-max-width": "276px", + "@popover-border-color": "rgba(0,0,0,.2)", + "@popover-fallback-border-color": "#ccc", + "@popover-title-bg": "darken(@popover-bg, 3%)", + "@popover-arrow-width": "10px", + "@popover-arrow-color": "@popover-bg", + "@popover-arrow-outer-width": "(@popover-arrow-width + 1)", + "@popover-arrow-outer-color": "fadein(@popover-border-color, 5%)", + "@popover-arrow-outer-fallback-color": "darken(@popover-fallback-border-color, 20%)", + "@label-default-bg": "@gray-light", + "@label-primary-bg": "@brand-primary", + "@label-success-bg": "@brand-success", + "@label-info-bg": "@brand-info", + "@label-warning-bg": "@brand-warning", + "@label-danger-bg": "@brand-danger", + "@label-color": "#fff", + "@label-link-hover-color": "#fff", + "@modal-inner-padding": "15px", + "@modal-title-padding": "15px", + "@modal-title-line-height": "@line-height-base", + "@modal-content-bg": "#fff", + "@modal-content-border-color": "rgba(0,0,0,.2)", + "@modal-content-fallback-border-color": "#999", + "@modal-backdrop-bg": "#000", + "@modal-backdrop-opacity": ".5", + "@modal-header-border-color": "#e5e5e5", + "@modal-footer-border-color": "@modal-header-border-color", + "@modal-lg": "900px", + "@modal-md": "600px", + "@modal-sm": "300px", + "@alert-padding": "15px", + "@alert-border-radius": "@border-radius-base", + "@alert-link-font-weight": "bold", + "@alert-success-bg": "@state-success-bg", + "@alert-success-text": "@state-success-text", + "@alert-success-border": "@state-success-border", + "@alert-info-bg": "@state-info-bg", + "@alert-info-text": "@state-info-text", + "@alert-info-border": "@state-info-border", + "@alert-warning-bg": "@state-warning-bg", + "@alert-warning-text": "@state-warning-text", + "@alert-warning-border": "@state-warning-border", + "@alert-danger-bg": "@state-danger-bg", + "@alert-danger-text": "@state-danger-text", + "@alert-danger-border": "@state-danger-border", + "@progress-bg": "#f5f5f5", + "@progress-bar-color": "#fff", + "@progress-border-radius": "@border-radius-base", + "@progress-bar-bg": "@brand-primary", + "@progress-bar-success-bg": "@brand-success", + "@progress-bar-warning-bg": "@brand-warning", + "@progress-bar-danger-bg": "@brand-danger", + "@progress-bar-info-bg": "@brand-info", + "@list-group-bg": "#fff", + "@list-group-border": "#ddd", + "@list-group-border-radius": "@border-radius-base", + "@list-group-hover-bg": "#f5f5f5", + "@list-group-active-color": "@component-active-color", + "@list-group-active-bg": "@component-active-bg", + "@list-group-active-border": "@list-group-active-bg", + "@list-group-active-text-color": "lighten(@list-group-active-bg, 40%)", + "@list-group-disabled-color": "@gray-light", + "@list-group-disabled-bg": "@gray-lighter", + "@list-group-disabled-text-color": "@list-group-disabled-color", + "@list-group-link-color": "#555", + "@list-group-link-hover-color": "@list-group-link-color", + "@list-group-link-heading-color": "#333", + "@panel-bg": "#fff", + "@panel-body-padding": "15px", + "@panel-heading-padding": "10px 15px", + "@panel-footer-padding": "@panel-heading-padding", + "@panel-border-radius": "@border-radius-base", + "@panel-inner-border": "#ddd", + "@panel-footer-bg": "#f5f5f5", + "@panel-default-text": "@gray-dark", + "@panel-default-border": "#ddd", + "@panel-default-heading-bg": "#f5f5f5", + "@panel-primary-text": "#fff", + "@panel-primary-border": "@brand-primary", + "@panel-primary-heading-bg": "@brand-primary", + "@panel-success-text": "@state-success-text", + "@panel-success-border": "@state-success-border", + "@panel-success-heading-bg": "@state-success-bg", + "@panel-info-text": "@state-info-text", + "@panel-info-border": "@state-info-border", + "@panel-info-heading-bg": "@state-info-bg", + "@panel-warning-text": "@state-warning-text", + "@panel-warning-border": "@state-warning-border", + "@panel-warning-heading-bg": "@state-warning-bg", + "@panel-danger-text": "@state-danger-text", + "@panel-danger-border": "@state-danger-border", + "@panel-danger-heading-bg": "@state-danger-bg", + "@thumbnail-padding": "4px", + "@thumbnail-bg": "@body-bg", + "@thumbnail-border": "#ddd", + "@thumbnail-border-radius": "@border-radius-base", + "@thumbnail-caption-color": "@text-color", + "@thumbnail-caption-padding": "9px", + "@well-bg": "#0d8b97", + "@well-border": "darken(@well-bg, 7%)", + "@badge-color": "#fff", + "@badge-link-hover-color": "#fff", + "@badge-bg": "@gray-light", + "@badge-active-color": "@link-color", + "@badge-active-bg": "#fff", + "@badge-font-weight": "bold", + "@badge-line-height": "1", + "@badge-border-radius": "10px", + "@breadcrumb-padding-vertical": "8px", + "@breadcrumb-padding-horizontal": "15px", + "@breadcrumb-bg": "#f5f5f5", + "@breadcrumb-color": "#ccc", + "@breadcrumb-active-color": "@gray-light", + "@breadcrumb-separator": "\"/\"", + "@carousel-text-shadow": "0 1px 2px rgba(0,0,0,.6)", + "@carousel-control-color": "#fff", + "@carousel-control-width": "15%", + "@carousel-control-opacity": ".5", + "@carousel-control-font-size": "20px", + "@carousel-indicator-active-bg": "#fff", + "@carousel-indicator-border-color": "#fff", + "@carousel-caption-color": "#fff", + "@close-font-weight": "bold", + "@close-color": "#000", + "@close-text-shadow": "0 1px 0 #fff", + "@code-color": "#c7254e", + "@code-bg": "#f9f2f4", + "@kbd-color": "#fff", + "@kbd-bg": "#333", + "@pre-bg": "#f5f5f5", + "@pre-color": "@gray-dark", + "@pre-border-color": "#ccc", + "@pre-scrollable-max-height": "340px", + "@component-offset-horizontal": "180px", + "@text-muted": "@gray-light", + "@abbr-border-color": "@gray-light", + "@headings-small-color": "@gray-light", + "@blockquote-small-color": "@gray-light", + "@blockquote-font-size": "(@font-size-base * 1.25)", + "@blockquote-border-color": "@gray-lighter", + "@page-header-border-color": "@gray-lighter", + "@dl-horizontal-offset": "@component-offset-horizontal", + "@hr-border": "@gray-lighter" + }, + "css": [ + "print.less", + "type.less", + "code.less", + "grid.less", + "tables.less", + "forms.less", + "buttons.less", + "responsive-utilities.less", + "glyphicons.less", + "button-groups.less", + "input-groups.less", + "navs.less", + "navbar.less", + "breadcrumbs.less", + "pagination.less", + "pager.less", + "labels.less", + "badges.less", + "jumbotron.less", + "thumbnails.less", + "alerts.less", + "progress-bars.less", + "media.less", + "list-group.less", + "panels.less", + "responsive-embed.less", + "wells.less", + "close.less", + "component-animations.less", + "dropdowns.less", + "tooltip.less", + "popovers.less", + "modals.less", + "carousel.less" + ], + "js": [ + "alert.js", + "button.js", + "carousel.js", + "dropdown.js", + "modal.js", + "tooltip.js", + "popover.js", + "tab.js", + "affix.js", + "collapse.js", + "scrollspy.js", + "transition.js" + ], + "customizerUrl": "http://getbootstrap.com/customize/?id=6f1bbee09ea7b5ebb0bb" +} \ No newline at end of file diff --git a/infohub/static/infohub/bootstrap/css/bootstrap-theme.css b/infohub/static/infohub/bootstrap/css/bootstrap-theme.css index a4069929..105efb67 100644 --- a/infohub/static/infohub/bootstrap/css/bootstrap-theme.css +++ b/infohub/static/infohub/bootstrap/css/bootstrap-theme.css @@ -1,18 +1,27 @@ /*! - * Bootstrap v3.1.1 (http://getbootstrap.com) - * Copyright 2011-2014 Twitter, Inc. + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ +/*! + * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=6f1bbee09ea7b5ebb0bb) + * Config saved to config.json and https://gist.github.com/6f1bbee09ea7b5ebb0bb + */ +/*! + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ .btn-default, .btn-primary, .btn-success, .btn-info, .btn-warning, .btn-danger { - text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); } .btn-default:active, .btn-primary:active, @@ -26,21 +35,52 @@ .btn-info.active, .btn-warning.active, .btn-danger.active { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn-default.disabled, +.btn-primary.disabled, +.btn-success.disabled, +.btn-info.disabled, +.btn-warning.disabled, +.btn-danger.disabled, +.btn-default[disabled], +.btn-primary[disabled], +.btn-success[disabled], +.btn-info[disabled], +.btn-warning[disabled], +.btn-danger[disabled], +fieldset[disabled] .btn-default, +fieldset[disabled] .btn-primary, +fieldset[disabled] .btn-success, +fieldset[disabled] .btn-info, +fieldset[disabled] .btn-warning, +fieldset[disabled] .btn-danger { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-default .badge, +.btn-primary .badge, +.btn-success .badge, +.btn-info .badge, +.btn-warning .badge, +.btn-danger .badge { + text-shadow: none; } .btn:active, .btn.active { background-image: none; } .btn-default { - text-shadow: 0 1px 0 #fff; - background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); - background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); + background-image: -webkit-linear-gradient(top, #ffffff 0%, #e0e0e0 100%); + background-image: -o-linear-gradient(top, #ffffff 0%, #e0e0e0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#e0e0e0)); + background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); background-repeat: repeat-x; border-color: #dbdbdb; + text-shadow: 0 1px 0 #fff; border-color: #ccc; } .btn-default:hover, @@ -53,27 +93,73 @@ background-color: #e0e0e0; border-color: #dbdbdb; } +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #e0e0e0; + background-image: none; +} .btn-primary { - background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0); + background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88)); + background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); background-repeat: repeat-x; - border-color: #2b669a; + border-color: #245580; } .btn-primary:hover, .btn-primary:focus { - background-color: #2d6ca2; + background-color: #265a88; background-position: 0 -15px; } .btn-primary:active, .btn-primary.active { - background-color: #2d6ca2; - border-color: #2b669a; + background-color: #265a88; + border-color: #245580; +} +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #265a88; + background-image: none; } .btn-success { background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); - background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); background-repeat: repeat-x; @@ -89,9 +175,32 @@ background-color: #419641; border-color: #3e8f3e; } +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #419641; + background-image: none; +} .btn-info { background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); - background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); background-repeat: repeat-x; @@ -107,9 +216,32 @@ background-color: #2aabd2; border-color: #28a4c9; } +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #2aabd2; + background-image: none; +} .btn-warning { background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); - background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); background-repeat: repeat-x; @@ -125,9 +257,32 @@ background-color: #eb9316; border-color: #e38d13; } +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #eb9316; + background-image: none; +} .btn-danger { background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); - background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); background-repeat: repeat-x; @@ -143,205 +298,299 @@ background-color: #c12e2a; border-color: #b92c28; } +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #c12e2a; + background-image: none; +} .thumbnail, .img-thumbnail { - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); - box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); } .dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { - background-color: #e8e8e8; background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-color: #e8e8e8; } .dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus { - background-color: #357ebd; - background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-color: #2e6da4; } .navbar-default { - background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); - background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); + background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%); + background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#f8f8f8)); + background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%); + background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; border-radius: 4px; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); } +.navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .active > a { - background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%); - background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0); + background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); + background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2)); + background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%); background-repeat: repeat-x; - -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); - box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0); + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075); } .navbar-brand, .navbar-nav > li > a { - text-shadow: 0 1px 0 rgba(255, 255, 255, .25); + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); } .navbar-inverse { - background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); - background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); + background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%); + background-image: -o-linear-gradient(top, #3c3c3c 0%, #222222 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222222)); + background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%); + background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; + border-radius: 4px; } +.navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .active > a { - background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%); - background-image: linear-gradient(to bottom, #222 0%, #282828 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0); + background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%); + background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f)); + background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); background-repeat: repeat-x; - -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); - box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0); + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25); } .navbar-inverse .navbar-brand, .navbar-inverse .navbar-nav > li > a { - text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); } .navbar-static-top, .navbar-fixed-top, .navbar-fixed-bottom { border-radius: 0; } +@media (max-width: 767px) { + .navbar .navbar-nav .open .dropdown-menu > .active > a, + .navbar .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + } +} .alert { - text-shadow: 0 1px 0 rgba(255, 255, 255, .2); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); } .alert-success { background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); - background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); + background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); border-color: #b2dba1; } .alert-info { background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); - background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); + background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); border-color: #9acfea; } .alert-warning { background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); - background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); border-color: #f5e79e; } .alert-danger { background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); - background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); + background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3)); + background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); border-color: #dca7a7; } .progress { background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); - background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); + background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); } .progress-bar { - background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); + background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090)); + background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%); background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0); } .progress-bar-success { background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); - background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); + background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); } .progress-bar-info { background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); - background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); + 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%); background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); } .progress-bar-warning { background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); - background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); } .progress-bar-danger { background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); - background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); + background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); +} +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } .list-group { border-radius: 4px; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); - box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); } .list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus { - text-shadow: 0 -1px 0 #3071a9; - background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0); + text-shadow: 0 -1px 0 #286090; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%); background-repeat: repeat-x; - border-color: #3278b3; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0); + border-color: #2b669a; +} +.list-group-item.active .badge, +.list-group-item.active:hover .badge, +.list-group-item.active:focus .badge { + text-shadow: none; } .panel { - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); - box-shadow: 0 1px 2px rgba(0, 0, 0, .05); + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); } .panel-default > .panel-heading { background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); } .panel-primary > .panel-heading { - background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); } .panel-success > .panel-heading { background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); - background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); + background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); } .panel-info > .panel-heading { background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); - background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); + background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); } .panel-warning > .panel-heading { background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); - background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); } .panel-danger > .panel-heading { background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); - background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); + background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc)); + background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); } .well { - background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); - background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); + background-image: -webkit-linear-gradient(top, #0b7580 0%, #0d8b97 100%); + background-image: -o-linear-gradient(top, #0b7580 0%, #0d8b97 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#0b7580), to(#0d8b97)); + background-image: linear-gradient(to bottom, #0b7580 0%, #0d8b97 100%); background-repeat: repeat-x; - border-color: #dcdcdc; - -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); - box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0b7580', endColorstr='#ff0d8b97', GradientType=0); + border-color: #096068; + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); } -/*# sourceMappingURL=bootstrap-theme.css.map */ diff --git a/infohub/static/infohub/bootstrap/css/bootstrap-theme.css.map b/infohub/static/infohub/bootstrap/css/bootstrap-theme.css.map deleted file mode 100644 index b36fc9a4..00000000 --- a/infohub/static/infohub/bootstrap/css/bootstrap-theme.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["less/theme.less","less/mixins.less"],"names":[],"mappings":"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","sourcesContent":["\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-bg, 5%); @end-color: darken(@navbar-default-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-bg; @end-color: lighten(@navbar-inverse-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n}\n\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","//\n// Mixins\n// --------------------------------------------------\n\n\n// Utilities\n// -------------------------\n\n// Clearfix\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n// contenteditable attribute is included anywhere else in the document.\n// Otherwise it causes space to appear at the top and bottom of elements\n// that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n// `:before` to contain the top-margins of child elements.\n.clearfix() {\n &:before,\n &:after {\n content: \" \"; // 1\n display: table; // 2\n }\n &:after {\n clear: both;\n }\n}\n\n// WebKit-style focus\n.tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n\n// Center-align a block level element\n.center-block() {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n\n// Sizing shortcuts\n.size(@width; @height) {\n width: @width;\n height: @height;\n}\n.square(@size) {\n .size(@size; @size);\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n &::-moz-placeholder { color: @color; // Firefox\n opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Text overflow\n// Requires inline-block or block for proper styling\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n// CSS image replacement\n//\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. Note\n// that we cannot chain the mixins together in Less, so they are repeated.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (will be removed in v4)\n.hide-text() {\n font: ~\"0/0\" a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n// New mixin to use as of v3.0.1\n.text-hide() {\n .hide-text();\n}\n\n\n\n// CSS3 PROPERTIES\n// --------------------------------------------------\n\n// Single side border-radius\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support the\n// standard `box-shadow` property.\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Transitions\n.transition(@transition) {\n -webkit-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n// Transformations\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n transform: rotate(@degrees);\n}\n.scale(@ratio; @ratio-y...) {\n -webkit-transform: scale(@ratio, @ratio-y);\n -ms-transform: scale(@ratio, @ratio-y); // IE9 only\n transform: scale(@ratio, @ratio-y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n transform: translate(@x, @y);\n}\n.skew(@x; @y) {\n -webkit-transform: skew(@x, @y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n transform: skew(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// User select\n// For selecting text on the page\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n\n// Resize anything\n.resizable(@direction) {\n resize: @direction; // Options: horizontal, vertical, both\n overflow: auto; // Safari fix\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Opacity\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n\n\n\n// GRADIENTS\n// --------------------------------------------------\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, color-stop(@start-color @start-percent), color-stop(@end-color @end-percent)); // Safari 5.1-6, Chrome 10+\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n\n// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n\n\n\n// Retina images\n//\n// Short retina mixin for setting background-image and -size\n\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// COMPONENT MIXINS\n// --------------------------------------------------\n\n// Horizontal dividers\n// -------------------------\n// Dividers (basically an hr) within dropdowns and nav lists\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n\n// Panels\n// -------------------------\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n border-color: @border;\n\n & > .panel-heading {\n color: @heading-text-color;\n background-color: @heading-bg-color;\n border-color: @heading-border;\n\n + .panel-collapse .panel-body {\n border-top-color: @border;\n }\n }\n & > .panel-footer {\n + .panel-collapse .panel-body {\n border-bottom-color: @border;\n }\n }\n}\n\n// Alerts\n// -------------------------\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\n }\n}\n\n// Tables\n// -------------------------\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n\n// List Groups\n// -------------------------\n.list-group-item-variant(@state; @background; @color) {\n .list-group-item-@{state} {\n color: @color;\n background-color: @background;\n\n a& {\n color: @color;\n\n .list-group-item-heading { color: inherit; }\n\n &:hover,\n &:focus {\n color: @color;\n background-color: darken(@background, 5%);\n }\n &.active,\n &.active:hover,\n &.active:focus {\n color: #fff;\n background-color: @color;\n border-color: @color;\n }\n }\n }\n}\n\n// Button variants\n// -------------------------\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:hover,\n &:focus,\n &:active,\n &.active,\n .open .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 8%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &:active,\n &.active {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n// -------------------------\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n\n// Pagination\n// -------------------------\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n\n// Labels\n// -------------------------\n.label-variant(@color) {\n background-color: @color;\n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\n}\n\n// Contextual backgrounds\n// -------------------------\n.bg-variant(@color) {\n background-color: @color;\n a&:hover {\n background-color: darken(@color, 10%);\n }\n}\n\n// Typography\n// -------------------------\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover {\n color: darken(@color, 10%);\n }\n}\n\n// Navbar vertical align\n// -------------------------\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n\n// Progress bars\n// -------------------------\n.progress-bar-variant(@color) {\n background-color: @color;\n .progress-striped & {\n #gradient > .striped();\n }\n}\n\n// Responsive utilities\n// -------------------------\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n display: block !important;\n table& { display: table; }\n tr& { display: table-row !important; }\n th&,\n td& { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n display: none !important;\n}\n\n\n// Grid System\n// -----------\n\n// Centered container element\n.container-fixed() {\n margin-right: auto;\n margin-left: auto;\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: (@gutter / -2);\n margin-right: (@gutter / -2);\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n @media (min-width: @screen-xs-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-xs-column-push(@columns) {\n @media (min-width: @screen-xs-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-xs-column-pull(@columns) {\n @media (min-width: @screen-xs-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n\n// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n // Color the label and help text\n .help-block,\n .control-label,\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline {\n color: @text-color;\n }\n // Set the border and box shadow on specific inputs to match\n .form-control {\n border-color: @border-color;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n &:focus {\n border-color: darken(@border-color, 10%);\n @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\n .box-shadow(@shadow);\n }\n }\n // Set validation states also for addons\n .input-group-addon {\n color: @text-color;\n border-color: @border-color;\n background-color: @background-color;\n }\n // Optional feedback icon\n .form-control-feedback {\n color: @text-color;\n }\n}\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-focus-border` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n\n.form-control-focus(@color: @input-border-focus) {\n @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n &:focus {\n border-color: @color;\n outline: 0;\n .box-shadow(~\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\");\n }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. ``\n// element gets special love because it's special, and that's a fact!\n\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n height: @input-height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n\n select& {\n height: @input-height;\n line-height: @input-height;\n }\n\n textarea&,\n select[multiple]& {\n height: auto;\n }\n}\n","//\n// Variables\n// --------------------------------------------------\n\n\n//== Colors\n//\n//## Gray and brand colors for use across Bootstrap.\n\n@gray-darker: lighten(#000, 13.5%); // #222\n@gray-dark: lighten(#000, 20%); // #333\n@gray: lighten(#000, 33.5%); // #555\n@gray-light: lighten(#000, 60%); // #999\n@gray-lighter: lighten(#000, 93.5%); // #eee\n\n@brand-primary: #428bca;\n@brand-success: #5cb85c;\n@brand-info: #5bc0de;\n@brand-warning: #f0ad4e;\n@brand-danger: #d9534f;\n\n\n//== Scaffolding\n//\n// ## Settings for some of the most global styles.\n\n//** Background color for ``.\n@body-bg: #fff;\n//** Global text color on ``.\n@text-color: @gray-dark;\n\n//** Global textual link color.\n@link-color: @brand-primary;\n//** Link hover color set via `darken()` function.\n@link-hover-color: darken(@link-color, 15%);\n\n\n//== Typography\n//\n//## Font, line-height, and color for body text, headings, and more.\n\n@font-family-sans-serif: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n@font-family-serif: Georgia, \"Times New Roman\", Times, serif;\n//** Default monospace fonts for ``, ``, and `
`.\n@font-family-monospace:   Menlo, Monaco, Consolas, \"Courier New\", monospace;\n@font-family-base:        @font-family-sans-serif;\n\n@font-size-base:          14px;\n@font-size-large:         ceil((@font-size-base * 1.25)); // ~18px\n@font-size-small:         ceil((@font-size-base * 0.85)); // ~12px\n\n@font-size-h1:            floor((@font-size-base * 2.6)); // ~36px\n@font-size-h2:            floor((@font-size-base * 2.15)); // ~30px\n@font-size-h3:            ceil((@font-size-base * 1.7)); // ~24px\n@font-size-h4:            ceil((@font-size-base * 1.25)); // ~18px\n@font-size-h5:            @font-size-base;\n@font-size-h6:            ceil((@font-size-base * 0.85)); // ~12px\n\n//** Unit-less `line-height` for use in components like buttons.\n@line-height-base:        1.428571429; // 20/14\n//** Computed \"line-height\" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.\n@line-height-computed:    floor((@font-size-base * @line-height-base)); // ~20px\n\n//** By default, this inherits from the ``.\n@headings-font-family:    inherit;\n@headings-font-weight:    500;\n@headings-line-height:    1.1;\n@headings-color:          inherit;\n\n\n//-- Iconography\n//\n//## Specify custom locations of the include Glyphicons icon font. Useful for those including Bootstrap via Bower.\n\n@icon-font-path:          \"../fonts/\";\n@icon-font-name:          \"glyphicons-halflings-regular\";\n@icon-font-svg-id:        \"glyphicons_halflingsregular\";\n\n//== Components\n//\n//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).\n\n@padding-base-vertical:     6px;\n@padding-base-horizontal:   12px;\n\n@padding-large-vertical:    10px;\n@padding-large-horizontal:  16px;\n\n@padding-small-vertical:    5px;\n@padding-small-horizontal:  10px;\n\n@padding-xs-vertical:       1px;\n@padding-xs-horizontal:     5px;\n\n@line-height-large:         1.33;\n@line-height-small:         1.5;\n\n@border-radius-base:        4px;\n@border-radius-large:       6px;\n@border-radius-small:       3px;\n\n//** Global color for active items (e.g., navs or dropdowns).\n@component-active-color:    #fff;\n//** Global background color for active items (e.g., navs or dropdowns).\n@component-active-bg:       @brand-primary;\n\n//** Width of the `border` for generating carets that indicator dropdowns.\n@caret-width-base:          4px;\n//** Carets increase slightly in size for larger components.\n@caret-width-large:         5px;\n\n\n//== Tables\n//\n//## Customizes the `.table` component with basic values, each used across all table variations.\n\n//** Padding for ``s and ``s.\n@table-cell-padding:            8px;\n//** Padding for cells in `.table-condensed`.\n@table-condensed-cell-padding:  5px;\n\n//** Default background color used for all tables.\n@table-bg:                      transparent;\n//** Background color used for `.table-striped`.\n@table-bg-accent:               #f9f9f9;\n//** Background color used for `.table-hover`.\n@table-bg-hover:                #f5f5f5;\n@table-bg-active:               @table-bg-hover;\n\n//** Border color for table and cell borders.\n@table-border-color:            #ddd;\n\n\n//== Buttons\n//\n//## For each of Bootstrap's buttons, define text, background and border color.\n\n@btn-font-weight:                normal;\n\n@btn-default-color:              #333;\n@btn-default-bg:                 #fff;\n@btn-default-border:             #ccc;\n\n@btn-primary-color:              #fff;\n@btn-primary-bg:                 @brand-primary;\n@btn-primary-border:             darken(@btn-primary-bg, 5%);\n\n@btn-success-color:              #fff;\n@btn-success-bg:                 @brand-success;\n@btn-success-border:             darken(@btn-success-bg, 5%);\n\n@btn-info-color:                 #fff;\n@btn-info-bg:                    @brand-info;\n@btn-info-border:                darken(@btn-info-bg, 5%);\n\n@btn-warning-color:              #fff;\n@btn-warning-bg:                 @brand-warning;\n@btn-warning-border:             darken(@btn-warning-bg, 5%);\n\n@btn-danger-color:               #fff;\n@btn-danger-bg:                  @brand-danger;\n@btn-danger-border:              darken(@btn-danger-bg, 5%);\n\n@btn-link-disabled-color:        @gray-light;\n\n\n//== Forms\n//\n//##\n\n//** `` background color\n@input-bg:                       #fff;\n//** `` background color\n@input-bg-disabled:              @gray-lighter;\n\n//** Text color for ``s\n@input-color:                    @gray;\n//** `` border color\n@input-border:                   #ccc;\n//** `` border radius\n@input-border-radius:            @border-radius-base;\n//** Border color for inputs on focus\n@input-border-focus:             #66afe9;\n\n//** Placeholder text color\n@input-color-placeholder:        @gray-light;\n\n//** Default `.form-control` height\n@input-height-base:              (@line-height-computed + (@padding-base-vertical * 2) + 2);\n//** Large `.form-control` height\n@input-height-large:             (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);\n//** Small `.form-control` height\n@input-height-small:             (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);\n\n@legend-color:                   @gray-dark;\n@legend-border-color:            #e5e5e5;\n\n//** Background color for textual input addons\n@input-group-addon-bg:           @gray-lighter;\n//** Border color for textual input addons\n@input-group-addon-border-color: @input-border;\n\n\n//== Dropdowns\n//\n//## Dropdown menu container and contents.\n\n//** Background for the dropdown menu.\n@dropdown-bg:                    #fff;\n//** Dropdown menu `border-color`.\n@dropdown-border:                rgba(0,0,0,.15);\n//** Dropdown menu `border-color` **for IE8**.\n@dropdown-fallback-border:       #ccc;\n//** Divider color for between dropdown items.\n@dropdown-divider-bg:            #e5e5e5;\n\n//** Dropdown link text color.\n@dropdown-link-color:            @gray-dark;\n//** Hover color for dropdown links.\n@dropdown-link-hover-color:      darken(@gray-dark, 5%);\n//** Hover background for dropdown links.\n@dropdown-link-hover-bg:         #f5f5f5;\n\n//** Active dropdown menu item text color.\n@dropdown-link-active-color:     @component-active-color;\n//** Active dropdown menu item background color.\n@dropdown-link-active-bg:        @component-active-bg;\n\n//** Disabled dropdown menu item background color.\n@dropdown-link-disabled-color:   @gray-light;\n\n//** Text color for headers within dropdown menus.\n@dropdown-header-color:          @gray-light;\n\n// Note: Deprecated @dropdown-caret-color as of v3.1.0\n@dropdown-caret-color:           #000;\n\n\n//-- Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n//\n// Note: These variables are not generated into the Customizer.\n\n@zindex-navbar:            1000;\n@zindex-dropdown:          1000;\n@zindex-popover:           1010;\n@zindex-tooltip:           1030;\n@zindex-navbar-fixed:      1030;\n@zindex-modal-background:  1040;\n@zindex-modal:             1050;\n\n\n//== Media queries breakpoints\n//\n//## Define the breakpoints at which your layout will change, adapting to different screen sizes.\n\n// Extra small screen / phone\n// Note: Deprecated @screen-xs and @screen-phone as of v3.0.1\n@screen-xs:                  480px;\n@screen-xs-min:              @screen-xs;\n@screen-phone:               @screen-xs-min;\n\n// Small screen / tablet\n// Note: Deprecated @screen-sm and @screen-tablet as of v3.0.1\n@screen-sm:                  768px;\n@screen-sm-min:              @screen-sm;\n@screen-tablet:              @screen-sm-min;\n\n// Medium screen / desktop\n// Note: Deprecated @screen-md and @screen-desktop as of v3.0.1\n@screen-md:                  992px;\n@screen-md-min:              @screen-md;\n@screen-desktop:             @screen-md-min;\n\n// Large screen / wide desktop\n// Note: Deprecated @screen-lg and @screen-lg-desktop as of v3.0.1\n@screen-lg:                  1200px;\n@screen-lg-min:              @screen-lg;\n@screen-lg-desktop:          @screen-lg-min;\n\n// So media queries don't overlap when required, provide a maximum\n@screen-xs-max:              (@screen-sm-min - 1);\n@screen-sm-max:              (@screen-md-min - 1);\n@screen-md-max:              (@screen-lg-min - 1);\n\n\n//== Grid system\n//\n//## Define your custom responsive grid.\n\n//** Number of columns in the grid.\n@grid-columns:              12;\n//** Padding between columns. Gets divided in half for the left and right.\n@grid-gutter-width:         30px;\n// Navbar collapse\n//** Point at which the navbar becomes uncollapsed.\n@grid-float-breakpoint:     @screen-sm-min;\n//** Point at which the navbar begins collapsing.\n@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);\n\n\n//== Container sizes\n//\n//## Define the maximum width of `.container` for different screen sizes.\n\n// Small screen / tablet\n@container-tablet:             ((720px + @grid-gutter-width));\n//** For `@screen-sm-min` and up.\n@container-sm:                 @container-tablet;\n\n// Medium screen / desktop\n@container-desktop:            ((940px + @grid-gutter-width));\n//** For `@screen-md-min` and up.\n@container-md:                 @container-desktop;\n\n// Large screen / wide desktop\n@container-large-desktop:      ((1140px + @grid-gutter-width));\n//** For `@screen-lg-min` and up.\n@container-lg:                 @container-large-desktop;\n\n\n//== Navbar\n//\n//##\n\n// Basics of a navbar\n@navbar-height:                    50px;\n@navbar-margin-bottom:             @line-height-computed;\n@navbar-border-radius:             @border-radius-base;\n@navbar-padding-horizontal:        floor((@grid-gutter-width / 2));\n@navbar-padding-vertical:          ((@navbar-height - @line-height-computed) / 2);\n@navbar-collapse-max-height:       340px;\n\n@navbar-default-color:             #777;\n@navbar-default-bg:                #f8f8f8;\n@navbar-default-border:            darken(@navbar-default-bg, 6.5%);\n\n// Navbar links\n@navbar-default-link-color:                #777;\n@navbar-default-link-hover-color:          #333;\n@navbar-default-link-hover-bg:             transparent;\n@navbar-default-link-active-color:         #555;\n@navbar-default-link-active-bg:            darken(@navbar-default-bg, 6.5%);\n@navbar-default-link-disabled-color:       #ccc;\n@navbar-default-link-disabled-bg:          transparent;\n\n// Navbar brand label\n@navbar-default-brand-color:               @navbar-default-link-color;\n@navbar-default-brand-hover-color:         darken(@navbar-default-brand-color, 10%);\n@navbar-default-brand-hover-bg:            transparent;\n\n// Navbar toggle\n@navbar-default-toggle-hover-bg:           #ddd;\n@navbar-default-toggle-icon-bar-bg:        #888;\n@navbar-default-toggle-border-color:       #ddd;\n\n\n// Inverted navbar\n// Reset inverted navbar basics\n@navbar-inverse-color:                      @gray-light;\n@navbar-inverse-bg:                         #222;\n@navbar-inverse-border:                     darken(@navbar-inverse-bg, 10%);\n\n// Inverted navbar links\n@navbar-inverse-link-color:                 @gray-light;\n@navbar-inverse-link-hover-color:           #fff;\n@navbar-inverse-link-hover-bg:              transparent;\n@navbar-inverse-link-active-color:          @navbar-inverse-link-hover-color;\n@navbar-inverse-link-active-bg:             darken(@navbar-inverse-bg, 10%);\n@navbar-inverse-link-disabled-color:        #444;\n@navbar-inverse-link-disabled-bg:           transparent;\n\n// Inverted navbar brand label\n@navbar-inverse-brand-color:                @navbar-inverse-link-color;\n@navbar-inverse-brand-hover-color:          #fff;\n@navbar-inverse-brand-hover-bg:             transparent;\n\n// Inverted navbar toggle\n@navbar-inverse-toggle-hover-bg:            #333;\n@navbar-inverse-toggle-icon-bar-bg:         #fff;\n@navbar-inverse-toggle-border-color:        #333;\n\n\n//== Navs\n//\n//##\n\n//=== Shared nav styles\n@nav-link-padding:                          10px 15px;\n@nav-link-hover-bg:                         @gray-lighter;\n\n@nav-disabled-link-color:                   @gray-light;\n@nav-disabled-link-hover-color:             @gray-light;\n\n@nav-open-link-hover-color:                 #fff;\n\n//== Tabs\n@nav-tabs-border-color:                     #ddd;\n\n@nav-tabs-link-hover-border-color:          @gray-lighter;\n\n@nav-tabs-active-link-hover-bg:             @body-bg;\n@nav-tabs-active-link-hover-color:          @gray;\n@nav-tabs-active-link-hover-border-color:   #ddd;\n\n@nav-tabs-justified-link-border-color:            #ddd;\n@nav-tabs-justified-active-link-border-color:     @body-bg;\n\n//== Pills\n@nav-pills-border-radius:                   @border-radius-base;\n@nav-pills-active-link-hover-bg:            @component-active-bg;\n@nav-pills-active-link-hover-color:         @component-active-color;\n\n\n//== Pagination\n//\n//##\n\n@pagination-color:                     @link-color;\n@pagination-bg:                        #fff;\n@pagination-border:                    #ddd;\n\n@pagination-hover-color:               @link-hover-color;\n@pagination-hover-bg:                  @gray-lighter;\n@pagination-hover-border:              #ddd;\n\n@pagination-active-color:              #fff;\n@pagination-active-bg:                 @brand-primary;\n@pagination-active-border:             @brand-primary;\n\n@pagination-disabled-color:            @gray-light;\n@pagination-disabled-bg:               #fff;\n@pagination-disabled-border:           #ddd;\n\n\n//== Pager\n//\n//##\n\n@pager-bg:                             @pagination-bg;\n@pager-border:                         @pagination-border;\n@pager-border-radius:                  15px;\n\n@pager-hover-bg:                       @pagination-hover-bg;\n\n@pager-active-bg:                      @pagination-active-bg;\n@pager-active-color:                   @pagination-active-color;\n\n@pager-disabled-color:                 @pagination-disabled-color;\n\n\n//== Jumbotron\n//\n//##\n\n@jumbotron-padding:              30px;\n@jumbotron-color:                inherit;\n@jumbotron-bg:                   @gray-lighter;\n@jumbotron-heading-color:        inherit;\n@jumbotron-font-size:            ceil((@font-size-base * 1.5));\n\n\n//== Form states and alerts\n//\n//## Define colors for form feedback states and, by default, alerts.\n\n@state-success-text:             #3c763d;\n@state-success-bg:               #dff0d8;\n@state-success-border:           darken(spin(@state-success-bg, -10), 5%);\n\n@state-info-text:                #31708f;\n@state-info-bg:                  #d9edf7;\n@state-info-border:              darken(spin(@state-info-bg, -10), 7%);\n\n@state-warning-text:             #8a6d3b;\n@state-warning-bg:               #fcf8e3;\n@state-warning-border:           darken(spin(@state-warning-bg, -10), 5%);\n\n@state-danger-text:              #a94442;\n@state-danger-bg:                #f2dede;\n@state-danger-border:            darken(spin(@state-danger-bg, -10), 5%);\n\n\n//== Tooltips\n//\n//##\n\n//** Tooltip max width\n@tooltip-max-width:           200px;\n//** Tooltip text color\n@tooltip-color:               #fff;\n//** Tooltip background color\n@tooltip-bg:                  #000;\n@tooltip-opacity:             .9;\n\n//** Tooltip arrow width\n@tooltip-arrow-width:         5px;\n//** Tooltip arrow color\n@tooltip-arrow-color:         @tooltip-bg;\n\n\n//== Popovers\n//\n//##\n\n//** Popover body background color\n@popover-bg:                          #fff;\n//** Popover maximum width\n@popover-max-width:                   276px;\n//** Popover border color\n@popover-border-color:                rgba(0,0,0,.2);\n//** Popover fallback border color\n@popover-fallback-border-color:       #ccc;\n\n//** Popover title background color\n@popover-title-bg:                    darken(@popover-bg, 3%);\n\n//** Popover arrow width\n@popover-arrow-width:                 10px;\n//** Popover arrow color\n@popover-arrow-color:                 #fff;\n\n//** Popover outer arrow width\n@popover-arrow-outer-width:           (@popover-arrow-width + 1);\n//** Popover outer arrow color\n@popover-arrow-outer-color:           fadein(@popover-border-color, 5%);\n//** Popover outer arrow fallback color\n@popover-arrow-outer-fallback-color:  darken(@popover-fallback-border-color, 20%);\n\n\n//== Labels\n//\n//##\n\n//** Default label background color\n@label-default-bg:            @gray-light;\n//** Primary label background color\n@label-primary-bg:            @brand-primary;\n//** Success label background color\n@label-success-bg:            @brand-success;\n//** Info label background color\n@label-info-bg:               @brand-info;\n//** Warning label background color\n@label-warning-bg:            @brand-warning;\n//** Danger label background color\n@label-danger-bg:             @brand-danger;\n\n//** Default label text color\n@label-color:                 #fff;\n//** Default text color of a linked label\n@label-link-hover-color:      #fff;\n\n\n//== Modals\n//\n//##\n\n//** Padding applied to the modal body\n@modal-inner-padding:         20px;\n\n//** Padding applied to the modal title\n@modal-title-padding:         15px;\n//** Modal title line-height\n@modal-title-line-height:     @line-height-base;\n\n//** Background color of modal content area\n@modal-content-bg:                             #fff;\n//** Modal content border color\n@modal-content-border-color:                   rgba(0,0,0,.2);\n//** Modal content border color **for IE8**\n@modal-content-fallback-border-color:          #999;\n\n//** Modal backdrop background color\n@modal-backdrop-bg:           #000;\n//** Modal backdrop opacity\n@modal-backdrop-opacity:      .5;\n//** Modal header border color\n@modal-header-border-color:   #e5e5e5;\n//** Modal footer border color\n@modal-footer-border-color:   @modal-header-border-color;\n\n@modal-lg:                    900px;\n@modal-md:                    600px;\n@modal-sm:                    300px;\n\n\n//== Alerts\n//\n//## Define alert colors, border radius, and padding.\n\n@alert-padding:               15px;\n@alert-border-radius:         @border-radius-base;\n@alert-link-font-weight:      bold;\n\n@alert-success-bg:            @state-success-bg;\n@alert-success-text:          @state-success-text;\n@alert-success-border:        @state-success-border;\n\n@alert-info-bg:               @state-info-bg;\n@alert-info-text:             @state-info-text;\n@alert-info-border:           @state-info-border;\n\n@alert-warning-bg:            @state-warning-bg;\n@alert-warning-text:          @state-warning-text;\n@alert-warning-border:        @state-warning-border;\n\n@alert-danger-bg:             @state-danger-bg;\n@alert-danger-text:           @state-danger-text;\n@alert-danger-border:         @state-danger-border;\n\n\n//== Progress bars\n//\n//##\n\n//** Background color of the whole progress component\n@progress-bg:                 #f5f5f5;\n//** Progress bar text color\n@progress-bar-color:          #fff;\n\n//** Default progress bar color\n@progress-bar-bg:             @brand-primary;\n//** Success progress bar color\n@progress-bar-success-bg:     @brand-success;\n//** Warning progress bar color\n@progress-bar-warning-bg:     @brand-warning;\n//** Danger progress bar color\n@progress-bar-danger-bg:      @brand-danger;\n//** Info progress bar color\n@progress-bar-info-bg:        @brand-info;\n\n\n//== List group\n//\n//##\n\n//** Background color on `.list-group-item`\n@list-group-bg:                 #fff;\n//** `.list-group-item` border color\n@list-group-border:             #ddd;\n//** List group border radius\n@list-group-border-radius:      @border-radius-base;\n\n//** Background color of single list elements on hover\n@list-group-hover-bg:           #f5f5f5;\n//** Text color of active list elements\n@list-group-active-color:       @component-active-color;\n//** Background color of active list elements\n@list-group-active-bg:          @component-active-bg;\n//** Border color of active list elements\n@list-group-active-border:      @list-group-active-bg;\n@list-group-active-text-color:  lighten(@list-group-active-bg, 40%);\n\n@list-group-link-color:         #555;\n@list-group-link-heading-color: #333;\n\n\n//== Panels\n//\n//##\n\n@panel-bg:                    #fff;\n@panel-body-padding:          15px;\n@panel-border-radius:         @border-radius-base;\n\n//** Border color for elements within panels\n@panel-inner-border:          #ddd;\n@panel-footer-bg:             #f5f5f5;\n\n@panel-default-text:          @gray-dark;\n@panel-default-border:        #ddd;\n@panel-default-heading-bg:    #f5f5f5;\n\n@panel-primary-text:          #fff;\n@panel-primary-border:        @brand-primary;\n@panel-primary-heading-bg:    @brand-primary;\n\n@panel-success-text:          @state-success-text;\n@panel-success-border:        @state-success-border;\n@panel-success-heading-bg:    @state-success-bg;\n\n@panel-info-text:             @state-info-text;\n@panel-info-border:           @state-info-border;\n@panel-info-heading-bg:       @state-info-bg;\n\n@panel-warning-text:          @state-warning-text;\n@panel-warning-border:        @state-warning-border;\n@panel-warning-heading-bg:    @state-warning-bg;\n\n@panel-danger-text:           @state-danger-text;\n@panel-danger-border:         @state-danger-border;\n@panel-danger-heading-bg:     @state-danger-bg;\n\n\n//== Thumbnails\n//\n//##\n\n//** Padding around the thumbnail image\n@thumbnail-padding:           4px;\n//** Thumbnail background color\n@thumbnail-bg:                @body-bg;\n//** Thumbnail border color\n@thumbnail-border:            #ddd;\n//** Thumbnail border radius\n@thumbnail-border-radius:     @border-radius-base;\n\n//** Custom text color for thumbnail captions\n@thumbnail-caption-color:     @text-color;\n//** Padding around the thumbnail caption\n@thumbnail-caption-padding:   9px;\n\n\n//== Wells\n//\n//##\n\n@well-bg:                     #f5f5f5;\n@well-border:                 darken(@well-bg, 7%);\n\n\n//== Badges\n//\n//##\n\n@badge-color:                 #fff;\n//** Linked badge text color on hover\n@badge-link-hover-color:      #fff;\n@badge-bg:                    @gray-light;\n\n//** Badge text color in active nav link\n@badge-active-color:          @link-color;\n//** Badge background color in active nav link\n@badge-active-bg:             #fff;\n\n@badge-font-weight:           bold;\n@badge-line-height:           1;\n@badge-border-radius:         10px;\n\n\n//== Breadcrumbs\n//\n//##\n\n@breadcrumb-padding-vertical:   8px;\n@breadcrumb-padding-horizontal: 15px;\n//** Breadcrumb background color\n@breadcrumb-bg:                 #f5f5f5;\n//** Breadcrumb text color\n@breadcrumb-color:              #ccc;\n//** Text color of current page in the breadcrumb\n@breadcrumb-active-color:       @gray-light;\n//** Textual separator for between breadcrumb elements\n@breadcrumb-separator:          \"/\";\n\n\n//== Carousel\n//\n//##\n\n@carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6);\n\n@carousel-control-color:                      #fff;\n@carousel-control-width:                      15%;\n@carousel-control-opacity:                    .5;\n@carousel-control-font-size:                  20px;\n\n@carousel-indicator-active-bg:                #fff;\n@carousel-indicator-border-color:             #fff;\n\n@carousel-caption-color:                      #fff;\n\n\n//== Close\n//\n//##\n\n@close-font-weight:           bold;\n@close-color:                 #000;\n@close-text-shadow:           0 1px 0 #fff;\n\n\n//== Code\n//\n//##\n\n@code-color:                  #c7254e;\n@code-bg:                     #f9f2f4;\n\n@kbd-color:                   #fff;\n@kbd-bg:                      #333;\n\n@pre-bg:                      #f5f5f5;\n@pre-color:                   @gray-dark;\n@pre-border-color:            #ccc;\n@pre-scrollable-max-height:   340px;\n\n\n//== Type\n//\n//##\n\n//** Text muted color\n@text-muted:                  @gray-light;\n//** Abbreviations and acronyms border color\n@abbr-border-color:           @gray-light;\n//** Headings small color\n@headings-small-color:        @gray-light;\n//** Blockquote small color\n@blockquote-small-color:      @gray-light;\n//** Blockquote font size\n@blockquote-font-size:        (@font-size-base * 1.25);\n//** Blockquote border color\n@blockquote-border-color:     @gray-lighter;\n//** Page header border color\n@page-header-border-color:    @gray-lighter;\n\n\n//== Miscellaneous\n//\n//##\n\n//** Horizontal line color.\n@hr-border:                   @gray-lighter;\n\n//** Horizontal offset for forms and lists.\n@component-offset-horizontal: 180px;\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n  display: block;\n  padding: @thumbnail-padding;\n  margin-bottom: @line-height-computed;\n  line-height: @line-height-base;\n  background-color: @thumbnail-bg;\n  border: 1px solid @thumbnail-border;\n  border-radius: @thumbnail-border-radius;\n  .transition(all .2s ease-in-out);\n\n  > img,\n  a > img {\n    &:extend(.img-responsive);\n    margin-left: auto;\n    margin-right: auto;\n  }\n\n  // Add a hover state for linked versions only\n  a&:hover,\n  a&:focus,\n  a&.active {\n    border-color: @link-color;\n  }\n\n  // Image captions\n  .caption {\n    padding: @thumbnail-caption-padding;\n    color: @thumbnail-caption-color;\n  }\n}\n","//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n  position: relative;\n}\n\n.carousel-inner {\n  position: relative;\n  overflow: hidden;\n  width: 100%;\n\n  > .item {\n    display: none;\n    position: relative;\n    .transition(.6s ease-in-out left);\n\n    // Account for jankitude on images\n    > img,\n    > a > img {\n      &:extend(.img-responsive);\n      line-height: 1;\n    }\n  }\n\n  > .active,\n  > .next,\n  > .prev { display: block; }\n\n  > .active {\n    left: 0;\n  }\n\n  > .next,\n  > .prev {\n    position: absolute;\n    top: 0;\n    width: 100%;\n  }\n\n  > .next {\n    left: 100%;\n  }\n  > .prev {\n    left: -100%;\n  }\n  > .next.left,\n  > .prev.right {\n    left: 0;\n  }\n\n  > .active.left {\n    left: -100%;\n  }\n  > .active.right {\n    left: 100%;\n  }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  width: @carousel-control-width;\n  .opacity(@carousel-control-opacity);\n  font-size: @carousel-control-font-size;\n  color: @carousel-control-color;\n  text-align: center;\n  text-shadow: @carousel-text-shadow;\n  // We can't have this transition here because WebKit cancels the carousel\n  // animation if you trip this while in the middle of another animation.\n\n  // Set gradients for backgrounds\n  &.left {\n    #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));\n  }\n  &.right {\n    left: auto;\n    right: 0;\n    #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));\n  }\n\n  // Hover/focus state\n  &:hover,\n  &:focus {\n    outline: none;\n    color: @carousel-control-color;\n    text-decoration: none;\n    .opacity(.9);\n  }\n\n  // Toggles\n  .icon-prev,\n  .icon-next,\n  .glyphicon-chevron-left,\n  .glyphicon-chevron-right {\n    position: absolute;\n    top: 50%;\n    z-index: 5;\n    display: inline-block;\n  }\n  .icon-prev,\n  .glyphicon-chevron-left {\n    left: 50%;\n  }\n  .icon-next,\n  .glyphicon-chevron-right {\n    right: 50%;\n  }\n  .icon-prev,\n  .icon-next {\n    width:  20px;\n    height: 20px;\n    margin-top: -10px;\n    margin-left: -10px;\n    font-family: serif;\n  }\n\n  .icon-prev {\n    &:before {\n      content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n    }\n  }\n  .icon-next {\n    &:before {\n      content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n    }\n  }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  margin-left: -30%;\n  padding-left: 0;\n  list-style: none;\n  text-align: center;\n\n  li {\n    display: inline-block;\n    width:  10px;\n    height: 10px;\n    margin: 1px;\n    text-indent: -999px;\n    border: 1px solid @carousel-indicator-border-color;\n    border-radius: 10px;\n    cursor: pointer;\n\n    // IE8-9 hack for event handling\n    //\n    // Internet Explorer 8-9 does not support clicks on elements without a set\n    // `background-color`. We cannot use `filter` since that's not viewed as a\n    // background color by the browser. Thus, a hack is needed.\n    //\n    // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n    // set alpha transparency for the best results possible.\n    background-color: #000 \\9; // IE8\n    background-color: rgba(0,0,0,0); // IE9\n  }\n  .active {\n    margin: 0;\n    width:  12px;\n    height: 12px;\n    background-color: @carousel-indicator-active-bg;\n  }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n  position: absolute;\n  left: 15%;\n  right: 15%;\n  bottom: 20px;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: @carousel-caption-color;\n  text-align: center;\n  text-shadow: @carousel-text-shadow;\n  & .btn {\n    text-shadow: none; // No shadow for button elements in carousel-caption\n  }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n\n  // Scale up the controls a smidge\n  .carousel-control {\n    .glyphicon-chevron-left,\n    .glyphicon-chevron-right,\n    .icon-prev,\n    .icon-next {\n      width: 30px;\n      height: 30px;\n      margin-top: -15px;\n      margin-left: -15px;\n      font-size: 30px;\n    }\n  }\n\n  // Show and left align the captions\n  .carousel-caption {\n    left: 20%;\n    right: 20%;\n    padding-bottom: 30px;\n  }\n\n  // Move up the indicators\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  font-family: @headings-font-family;\n  font-weight: @headings-font-weight;\n  line-height: @headings-line-height;\n  color: @headings-color;\n\n  small,\n  .small {\n    font-weight: normal;\n    line-height: 1;\n    color: @headings-small-color;\n  }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n  margin-top: @line-height-computed;\n  margin-bottom: (@line-height-computed / 2);\n\n  small,\n  .small {\n    font-size: 65%;\n  }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n  margin-top: (@line-height-computed / 2);\n  margin-bottom: (@line-height-computed / 2);\n\n  small,\n  .small {\n    font-size: 75%;\n  }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n  margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n  margin-bottom: @line-height-computed;\n  font-size: floor((@font-size-base * 1.15));\n  font-weight: 200;\n  line-height: 1.4;\n\n  @media (min-width: @screen-sm-min) {\n    font-size: (@font-size-base * 1.5);\n  }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: 14px base font * 85% = about 12px\nsmall,\n.small  { font-size: 85%; }\n\n// Undo browser default styling\ncite    { font-style: normal; }\n\n// Alignment\n.text-left           { text-align: left; }\n.text-right          { text-align: right; }\n.text-center         { text-align: center; }\n.text-justify        { text-align: justify; }\n\n// Contextual colors\n.text-muted {\n  color: @text-muted;\n}\n.text-primary {\n  .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n  .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n  .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n  .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n  .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n  // Given the contrast here, this is the only class to have its color inverted\n  // automatically.\n  color: #fff;\n  .bg-variant(@brand-primary);\n}\n.bg-success {\n  .bg-variant(@state-success-bg);\n}\n.bg-info {\n  .bg-variant(@state-info-bg);\n}\n.bg-warning {\n  .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n  .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n  padding-bottom: ((@line-height-computed / 2) - 1);\n  margin: (@line-height-computed * 2) 0 @line-height-computed;\n  border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// --------------------------------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n  margin-top: 0;\n  margin-bottom: (@line-height-computed / 2);\n  ul,\n  ol {\n    margin-bottom: 0;\n  }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n  .list-unstyled();\n  margin-left: -5px;\n\n  > li {\n    display: inline-block;\n    padding-left: 5px;\n    padding-right: 5px;\n  }\n}\n\n// Description Lists\ndl {\n  margin-top: 0; // Remove browser default\n  margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n  line-height: @line-height-base;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n@media (min-width: @grid-float-breakpoint) {\n  .dl-horizontal {\n    dt {\n      float: left;\n      width: (@component-offset-horizontal - 20);\n      clear: left;\n      text-align: right;\n      .text-overflow();\n    }\n    dd {\n      margin-left: @component-offset-horizontal;\n      &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n    }\n  }\n}\n\n// MISC\n// ----\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\n\n// Blockquotes\nblockquote {\n  padding: (@line-height-computed / 2) @line-height-computed;\n  margin: 0 0 @line-height-computed;\n  font-size: @blockquote-font-size;\n  border-left: 5px solid @blockquote-border-color;\n\n  p,\n  ul,\n  ol {\n    &:last-child {\n      margin-bottom: 0;\n    }\n  }\n\n  // Note: Deprecated small and .small as of v3.1.0\n  // Context: https://github.com/twbs/bootstrap/issues/11660\n  footer,\n  small,\n  .small {\n    display: block;\n    font-size: 80%; // back to default font-size\n    line-height: @line-height-base;\n    color: @blockquote-small-color;\n\n    &:before {\n      content: '\\2014 \\00A0'; // em dash, nbsp\n    }\n  }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  border-right: 5px solid @blockquote-border-color;\n  border-left: 0;\n  text-align: right;\n\n  // Account for citation\n  footer,\n  small,\n  .small {\n    &:before { content: ''; }\n    &:after {\n      content: '\\00A0 \\2014'; // nbsp, em dash\n    }\n  }\n}\n\n// Quotes\nblockquote:before,\nblockquote:after {\n  content: \"\";\n}\n\n// Addresses\naddress {\n  margin-bottom: @line-height-computed;\n  font-style: normal;\n  line-height: @line-height-base;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n  font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: @code-color;\n  background-color: @code-bg;\n  white-space: nowrap;\n  border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: @kbd-color;\n  background-color: @kbd-bg;\n  border-radius: @border-radius-small;\n  box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n}\n\n// Blocks of code\npre {\n  display: block;\n  padding: ((@line-height-computed - 1) / 2);\n  margin: 0 0 (@line-height-computed / 2);\n  font-size: (@font-size-base - 1); // 14px to 13px\n  line-height: @line-height-base;\n  word-break: break-all;\n  word-wrap: break-word;\n  color: @pre-color;\n  background-color: @pre-bg;\n  border: 1px solid @pre-border-color;\n  border-radius: @border-radius-base;\n\n  // Account for some code outputs that place code tags in pre tags\n  code {\n    padding: 0;\n    font-size: inherit;\n    color: inherit;\n    white-space: pre-wrap;\n    background-color: transparent;\n    border-radius: 0;\n  }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n  max-height: @pre-scrollable-max-height;\n  overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n  .container-fixed();\n\n  @media (min-width: @screen-sm-min) {\n    width: @container-sm;\n  }\n  @media (min-width: @screen-md-min) {\n    width: @container-md;\n  }\n  @media (min-width: @screen-lg-min) {\n    width: @container-lg;\n  }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n  .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n  .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n  .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n  .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n  .make-grid(lg);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n  max-width: 100%;\n  background-color: @table-bg;\n}\nth {\n  text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n  width: 100%;\n  margin-bottom: @line-height-computed;\n  // Cells\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: @table-cell-padding;\n        line-height: @line-height-base;\n        vertical-align: top;\n        border-top: 1px solid @table-border-color;\n      }\n    }\n  }\n  // Bottom align for column headings\n  > thead > tr > th {\n    vertical-align: bottom;\n    border-bottom: 2px solid @table-border-color;\n  }\n  // Remove top border from thead by default\n  > caption + thead,\n  > colgroup + thead,\n  > thead:first-child {\n    > tr:first-child {\n      > th,\n      > td {\n        border-top: 0;\n      }\n    }\n  }\n  // Account for multiple tbody instances\n  > tbody + tbody {\n    border-top: 2px solid @table-border-color;\n  }\n\n  // Nesting\n  .table {\n    background-color: @body-bg;\n  }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: @table-condensed-cell-padding;\n      }\n    }\n  }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n  border: 1px solid @table-border-color;\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        border: 1px solid @table-border-color;\n      }\n    }\n  }\n  > thead > tr {\n    > th,\n    > td {\n      border-bottom-width: 2px;\n    }\n  }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n  > tbody > tr:nth-child(odd) {\n    > td,\n    > th {\n      background-color: @table-bg-accent;\n    }\n  }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n  > tbody > tr:hover {\n    > td,\n    > th {\n      background-color: @table-bg-hover;\n    }\n  }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n  position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n  float: none;\n  display: table-column;\n}\ntable {\n  td,\n  th {\n    &[class*=\"col-\"] {\n      position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n      float: none;\n      display: table-cell;\n    }\n  }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n@media (max-width: @screen-xs-max) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: (@line-height-computed * 0.75);\n    overflow-y: hidden;\n    overflow-x: scroll;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid @table-border-color;\n    -webkit-overflow-scrolling: touch;\n\n    // Tighten up spacing\n    > .table {\n      margin-bottom: 0;\n\n      // Ensure the content doesn't wrap\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th,\n          > td {\n            white-space: nowrap;\n          }\n        }\n      }\n    }\n\n    // Special overrides for the bordered tables\n    > .table-bordered {\n      border: 0;\n\n      // Nuke the appropriate borders so that the parent can handle them\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th:first-child,\n          > td:first-child {\n            border-left: 0;\n          }\n          > th:last-child,\n          > td:last-child {\n            border-right: 0;\n          }\n        }\n      }\n\n      // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n      // chances are there will be only one `tr` in a `thead` and that would\n      // remove the border altogether.\n      > tbody,\n      > tfoot {\n        > tr:last-child {\n          > th,\n          > td {\n            border-bottom: 0;\n          }\n        }\n      }\n\n    }\n  }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n  padding: 0;\n  margin: 0;\n  border: 0;\n  // Chrome and Firefox set a `min-width: -webkit-min-content;` on fieldsets,\n  // so we reset that to ensure it behaves more like a standard block element.\n  // See https://github.com/twbs/bootstrap/issues/12359.\n  min-width: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: @line-height-computed;\n  font-size: (@font-size-base * 1.5);\n  line-height: inherit;\n  color: @legend-color;\n  border: 0;\n  border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n  display: inline-block;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n  .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9; /* IE8-9 */\n  line-height: normal;\n}\n\n// Set the height of file controls to match text inputs\ninput[type=\"file\"] {\n  display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n  height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  .tab-focus();\n}\n\n// Adjust output element\noutput {\n  display: block;\n  padding-top: (@padding-base-vertical + 1);\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n  padding: @padding-base-vertical @padding-base-horizontal;\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @input-color;\n  background-color: @input-bg;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid @input-border;\n  border-radius: @input-border-radius;\n  .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n  .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n  // Customize the `:focus` state to imitate native WebKit styles.\n  .form-control-focus();\n\n  // Placeholder\n  .placeholder();\n\n  // Disabled and read-only inputs\n  //\n  // HTML5 says that controls under a fieldset > legend:first-child won't be\n  // disabled if the fieldset is disabled. Due to implementation difficulty, we\n  // don't honor that edge case; we style them as disabled anyway.\n  &[disabled],\n  &[readonly],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n    background-color: @input-bg-disabled;\n    opacity: 1; // iOS fix for unreadable disabled content\n  }\n\n  // Reset height for `textarea`s\n  textarea& {\n    height: auto;\n  }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\n\n\n// Special styles for iOS date input\n//\n// In Mobile Safari, date inputs require a pixel line-height that matches the\n// given height of the input.\n\ninput[type=\"date\"] {\n  line-height: @input-height-base;\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n  margin-bottom: 15px;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n  display: block;\n  min-height: @line-height-computed; // clear the floating input if there is no label text\n  margin-top: 10px;\n  margin-bottom: 10px;\n  padding-left: 20px;\n  label {\n    display: inline;\n    font-weight: normal;\n    cursor: pointer;\n  }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  float: left;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  vertical-align: middle;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n//\n// Note: Neither radios nor checkboxes can be readonly.\ninput[type=\"radio\"],\ninput[type=\"checkbox\"],\n.radio,\n.radio-inline,\n.checkbox,\n.checkbox-inline {\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n  }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n\n.input-sm {\n  .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n.input-lg {\n  .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n.has-feedback {\n  // Enable absolute positioning\n  position: relative;\n\n  // Ensure icons don't overlap text\n  .form-control {\n    padding-right: (@input-height-base * 1.25);\n  }\n\n  // Feedback icon (requires .glyphicon classes)\n  .form-control-feedback {\n    position: absolute;\n    top: (@line-height-computed + 5); // Height of the `label` and its margin\n    right: 0;\n    display: block;\n    width: @input-height-base;\n    height: @input-height-base;\n    line-height: @input-height-base;\n    text-align: center;\n  }\n}\n\n// Feedback states\n.has-success {\n  .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n.has-warning {\n  .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n.has-error {\n  .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n  margin-bottom: 0; // Remove default margin from `p`\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n  display: block; // account for any element using help-block\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: lighten(@text-color, 25%); // lighten the text some for contrast\n}\n\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n\n  // Kick in the inline\n  @media (min-width: @screen-sm-min) {\n    // Inline-block all the things for \"inline\"\n    .form-group {\n      display: inline-block;\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // In navbar-form, allow folks to *not* use `.form-group`\n    .form-control {\n      display: inline-block;\n      width: auto; // Prevent labels from stacking above inputs in `.form-group`\n      vertical-align: middle;\n    }\n    // Input groups need that 100% width though\n    .input-group > .form-control {\n      width: 100%;\n    }\n\n    .control-label {\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // Remove default margin on radios/checkboxes that were used for stacking, and\n    // then undo the floating of radios and checkboxes to match (which also avoids\n    // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).\n    .radio,\n    .checkbox {\n      display: inline-block;\n      margin-top: 0;\n      margin-bottom: 0;\n      padding-left: 0;\n      vertical-align: middle;\n    }\n    .radio input[type=\"radio\"],\n    .checkbox input[type=\"checkbox\"] {\n      float: none;\n      margin-left: 0;\n    }\n\n    // Validation states\n    //\n    // Reposition the icon because it's now within a grid column and columns have\n    // `position: relative;` on them. Also accounts for the grid gutter padding.\n    .has-feedback .form-control-feedback {\n      top: 0;\n    }\n  }\n}\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n  // Consistent vertical alignment of labels, radios, and checkboxes\n  .control-label,\n  .radio,\n  .checkbox,\n  .radio-inline,\n  .checkbox-inline {\n    margin-top: 0;\n    margin-bottom: 0;\n    padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n  }\n  // Account for padding we're adding to ensure the alignment and of help text\n  // and other content below items\n  .radio,\n  .checkbox {\n    min-height: (@line-height-computed + (@padding-base-vertical + 1));\n  }\n\n  // Make form groups behave like rows\n  .form-group {\n    .make-row();\n  }\n\n  .form-control-static {\n    padding-top: (@padding-base-vertical + 1);\n  }\n\n  // Only right align form labels here when the columns stop stacking\n  @media (min-width: @screen-sm-min) {\n    .control-label {\n      text-align: right;\n    }\n  }\n\n  // Validation states\n  //\n  // Reposition the icon because it's now within a grid column and columns have\n  // `position: relative;` on them. Also accounts for the grid gutter padding.\n  .has-feedback .form-control-feedback {\n    top: 0;\n    right: (@grid-gutter-width / 2);\n  }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n  display: inline-block;\n  margin-bottom: 0; // For input.btn\n  font-weight: @btn-font-weight;\n  text-align: center;\n  vertical-align: middle;\n  cursor: pointer;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  white-space: nowrap;\n  .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base);\n  .user-select(none);\n\n  &,\n  &:active,\n  &.active {\n    &:focus {\n      .tab-focus();\n    }\n  }\n\n  &:hover,\n  &:focus {\n    color: @btn-default-color;\n    text-decoration: none;\n  }\n\n  &:active,\n  &.active {\n    outline: 0;\n    background-image: none;\n    .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n  }\n\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n    pointer-events: none; // Future-proof disabling of clicks\n    .opacity(.65);\n    .box-shadow(none);\n  }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n  .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n  .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n  .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n  .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n  .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n  .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n  color: @link-color;\n  font-weight: normal;\n  cursor: pointer;\n  border-radius: 0;\n\n  &,\n  &:active,\n  &[disabled],\n  fieldset[disabled] & {\n    background-color: transparent;\n    .box-shadow(none);\n  }\n  &,\n  &:hover,\n  &:focus,\n  &:active {\n    border-color: transparent;\n  }\n  &:hover,\n  &:focus {\n    color: @link-hover-color;\n    text-decoration: underline;\n    background-color: transparent;\n  }\n  &[disabled],\n  fieldset[disabled] & {\n    &:hover,\n    &:focus {\n      color: @btn-link-disabled-color;\n      text-decoration: none;\n    }\n  }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n  // line-height: ensure even-numbered height of button next to large input\n  .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n.btn-sm {\n  // line-height: ensure proper height of button next to small input\n  .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n.btn-xs {\n  .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n  display: block;\n  width: 100%;\n  padding-left: 0;\n  padding-right: 0;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n  &.btn-block {\n    width: 100%;\n  }\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle; // match .btn alignment given font-size hack above\n  > .btn {\n    position: relative;\n    float: left;\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active,\n    &.active {\n      z-index: 2;\n    }\n    &:focus {\n      // Remove focus outline when dropdown JS adds it after closing the menu\n      outline: none;\n    }\n  }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n  .btn + .btn,\n  .btn + .btn-group,\n  .btn-group + .btn,\n  .btn-group + .btn-group {\n    margin-left: -1px;\n  }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n  margin-left: -5px; // Offset the first child's margin\n  &:extend(.clearfix all);\n\n  .btn-group,\n  .input-group {\n    float: left;\n  }\n  > .btn,\n  > .btn-group,\n  > .input-group {\n    margin-left: 5px;\n  }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n  margin-left: 0;\n  &:not(:last-child):not(.dropdown-toggle) {\n    .border-right-radius(0);\n  }\n}\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    .border-right-radius(0);\n  }\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n  .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n  padding-left: 8px;\n  padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-left: 12px;\n  padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n  .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n  // Show no shadow for `.btn-link` since it has no other button styles.\n  &.btn-link {\n    .box-shadow(none);\n  }\n}\n\n\n// Reposition the caret\n.btn .caret {\n  margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n  border-width: @caret-width-large @caret-width-large 0;\n  border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n  border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n  > .btn,\n  > .btn-group,\n  > .btn-group > .btn {\n    display: block;\n    float: none;\n    width: 100%;\n    max-width: 100%;\n  }\n\n  // Clear floats so dropdown menus can be properly placed\n  > .btn-group {\n    &:extend(.clearfix all);\n    > .btn {\n      float: none;\n    }\n  }\n\n  > .btn + .btn,\n  > .btn + .btn-group,\n  > .btn-group + .btn,\n  > .btn-group + .btn-group {\n    margin-top: -1px;\n    margin-left: 0;\n  }\n}\n\n.btn-group-vertical > .btn {\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n  &:first-child:not(:last-child) {\n    border-top-right-radius: @border-radius-base;\n    .border-bottom-radius(0);\n  }\n  &:last-child:not(:first-child) {\n    border-bottom-left-radius: @border-radius-base;\n    .border-top-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    .border-bottom-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  .border-top-radius(0);\n}\n\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n  > .btn,\n  > .btn-group {\n    float: none;\n    display: table-cell;\n    width: 1%;\n  }\n  > .btn-group .btn {\n    width: 100%;\n  }\n}\n\n\n// Checkbox and radio options\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  display: none;\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552.\n\n.fade {\n  opacity: 0;\n  .transition(opacity .15s linear);\n  &.in {\n    opacity: 1;\n  }\n}\n\n.collapse {\n  display: none;\n  &.in {\n    display: block;\n  }\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  .transition(height .35s ease);\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n//  Star\n\n// Import the fonts\n@font-face {\n  font-family: 'Glyphicons Halflings';\n  src: ~\"url('@{icon-font-path}@{icon-font-name}.eot')\";\n  src: ~\"url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype')\",\n       ~\"url('@{icon-font-path}@{icon-font-name}.woff') format('woff')\",\n       ~\"url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype')\",\n       ~\"url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg')\";\n}\n\n// Catchall baseclass\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk               { &:before { content: \"\\2a\"; } }\n.glyphicon-plus                   { &:before { content: \"\\2b\"; } }\n.glyphicon-euro                   { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus                  { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud                  { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope               { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil                 { &:before { content: \"\\270f\"; } }\n.glyphicon-glass                  { &:before { content: \"\\e001\"; } }\n.glyphicon-music                  { &:before { content: \"\\e002\"; } }\n.glyphicon-search                 { &:before { content: \"\\e003\"; } }\n.glyphicon-heart                  { &:before { content: \"\\e005\"; } }\n.glyphicon-star                   { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty             { &:before { content: \"\\e007\"; } }\n.glyphicon-user                   { &:before { content: \"\\e008\"; } }\n.glyphicon-film                   { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large               { &:before { content: \"\\e010\"; } }\n.glyphicon-th                     { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list                { &:before { content: \"\\e012\"; } }\n.glyphicon-ok                     { &:before { content: \"\\e013\"; } }\n.glyphicon-remove                 { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in                { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out               { &:before { content: \"\\e016\"; } }\n.glyphicon-off                    { &:before { content: \"\\e017\"; } }\n.glyphicon-signal                 { &:before { content: \"\\e018\"; } }\n.glyphicon-cog                    { &:before { content: \"\\e019\"; } }\n.glyphicon-trash                  { &:before { content: \"\\e020\"; } }\n.glyphicon-home                   { &:before { content: \"\\e021\"; } }\n.glyphicon-file                   { &:before { content: \"\\e022\"; } }\n.glyphicon-time                   { &:before { content: \"\\e023\"; } }\n.glyphicon-road                   { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt           { &:before { content: \"\\e025\"; } }\n.glyphicon-download               { &:before { content: \"\\e026\"; } }\n.glyphicon-upload                 { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox                  { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle            { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat                 { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh                { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt               { &:before { content: \"\\e032\"; } }\n.glyphicon-lock                   { &:before { content: \"\\e033\"; } }\n.glyphicon-flag                   { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones             { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off             { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down            { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up              { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode                 { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode                { &:before { content: \"\\e040\"; } }\n.glyphicon-tag                    { &:before { content: \"\\e041\"; } }\n.glyphicon-tags                   { &:before { content: \"\\e042\"; } }\n.glyphicon-book                   { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark               { &:before { content: \"\\e044\"; } }\n.glyphicon-print                  { &:before { content: \"\\e045\"; } }\n.glyphicon-camera                 { &:before { content: \"\\e046\"; } }\n.glyphicon-font                   { &:before { content: \"\\e047\"; } }\n.glyphicon-bold                   { &:before { content: \"\\e048\"; } }\n.glyphicon-italic                 { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height            { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width             { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left             { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center           { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right            { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify          { &:before { content: \"\\e055\"; } }\n.glyphicon-list                   { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left            { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right           { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video         { &:before { content: \"\\e059\"; } }\n.glyphicon-picture                { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker             { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust                 { &:before { content: \"\\e063\"; } }\n.glyphicon-tint                   { &:before { content: \"\\e064\"; } }\n.glyphicon-edit                   { &:before { content: \"\\e065\"; } }\n.glyphicon-share                  { &:before { content: \"\\e066\"; } }\n.glyphicon-check                  { &:before { content: \"\\e067\"; } }\n.glyphicon-move                   { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward          { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward          { &:before { content: \"\\e070\"; } }\n.glyphicon-backward               { &:before { content: \"\\e071\"; } }\n.glyphicon-play                   { &:before { content: \"\\e072\"; } }\n.glyphicon-pause                  { &:before { content: \"\\e073\"; } }\n.glyphicon-stop                   { &:before { content: \"\\e074\"; } }\n.glyphicon-forward                { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward           { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward           { &:before { content: \"\\e077\"; } }\n.glyphicon-eject                  { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left           { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right          { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign              { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign             { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign            { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign                { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign          { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign              { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot             { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle          { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle              { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle             { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left             { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right            { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up               { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down             { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt              { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full            { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small           { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign       { &:before { content: \"\\e101\"; } }\n.glyphicon-gift                   { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf                   { &:before { content: \"\\e103\"; } }\n.glyphicon-fire                   { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open               { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close              { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign           { &:before { content: \"\\e107\"; } }\n.glyphicon-plane                  { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar               { &:before { content: \"\\e109\"; } }\n.glyphicon-random                 { &:before { content: \"\\e110\"; } }\n.glyphicon-comment                { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet                 { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up             { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down           { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet                { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart          { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close           { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open            { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical        { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal      { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd                    { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn               { &:before { content: \"\\e122\"; } }\n.glyphicon-bell                   { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate            { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up              { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down            { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right             { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left              { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up                { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down              { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right     { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left      { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up        { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down      { &:before { content: \"\\e134\"; } }\n.glyphicon-globe                  { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench                 { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks                  { &:before { content: \"\\e137\"; } }\n.glyphicon-filter                 { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase              { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen             { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard              { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip              { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty            { &:before { content: \"\\e143\"; } }\n.glyphicon-link                   { &:before { content: \"\\e144\"; } }\n.glyphicon-phone                  { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin                { &:before { content: \"\\e146\"; } }\n.glyphicon-usd                    { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp                    { &:before { content: \"\\e149\"; } }\n.glyphicon-sort                   { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet       { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt   { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order          { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt      { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes     { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked              { &:before { content: \"\\e157\"; } }\n.glyphicon-expand                 { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down          { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up            { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in                 { &:before { content: \"\\e161\"; } }\n.glyphicon-flash                  { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out                { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window             { &:before { content: \"\\e164\"; } }\n.glyphicon-record                 { &:before { content: \"\\e165\"; } }\n.glyphicon-save                   { &:before { content: \"\\e166\"; } }\n.glyphicon-open                   { &:before { content: \"\\e167\"; } }\n.glyphicon-saved                  { &:before { content: \"\\e168\"; } }\n.glyphicon-import                 { &:before { content: \"\\e169\"; } }\n.glyphicon-export                 { &:before { content: \"\\e170\"; } }\n.glyphicon-send                   { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk            { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved           { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove          { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save            { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open            { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card            { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer               { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery                { &:before { content: \"\\e179\"; } }\n.glyphicon-header                 { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed             { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone               { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt              { &:before { content: \"\\e183\"; } }\n.glyphicon-tower                  { &:before { content: \"\\e184\"; } }\n.glyphicon-stats                  { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video               { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video               { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles              { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo           { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby            { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1              { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1              { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1              { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark         { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark      { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download         { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload           { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer           { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous         { &:before { content: \"\\e200\"; } }\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top:   @caret-width-base solid;\n  border-right: @caret-width-base solid transparent;\n  border-left:  @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropdown {\n  position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n  outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: @zindex-dropdown;\n  display: none; // none by default, but block on \"open\" of the menu\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0; // override default ul\n  list-style: none;\n  font-size: @font-size-base;\n  background-color: @dropdown-bg;\n  border: 1px solid @dropdown-fallback-border; // IE8 fallback\n  border: 1px solid @dropdown-border;\n  border-radius: @border-radius-base;\n  .box-shadow(0 6px 12px rgba(0,0,0,.175));\n  background-clip: padding-box;\n\n  // Aligns the dropdown menu to right\n  //\n  // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n  &.pull-right {\n    right: 0;\n    left: auto;\n  }\n\n  // Dividers (basically an hr) within the dropdown\n  .divider {\n    .nav-divider(@dropdown-divider-bg);\n  }\n\n  // Links within the dropdown menu\n  > li > a {\n    display: block;\n    padding: 3px 20px;\n    clear: both;\n    font-weight: normal;\n    line-height: @line-height-base;\n    color: @dropdown-link-color;\n    white-space: nowrap; // prevent links from randomly breaking onto new lines\n  }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    color: @dropdown-link-hover-color;\n    background-color: @dropdown-link-hover-bg;\n  }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n  &,\n  &:hover,\n  &:focus {\n    color: @dropdown-link-active-color;\n    text-decoration: none;\n    outline: 0;\n    background-color: @dropdown-link-active-bg;\n  }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n  &,\n  &:hover,\n  &:focus {\n    color: @dropdown-link-disabled-color;\n  }\n}\n// Nuke hover/focus effects\n.dropdown-menu > .disabled > a {\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    background-color: transparent;\n    background-image: none; // Remove CSS gradient\n    .reset-filter();\n    cursor: not-allowed;\n  }\n}\n\n// Open state for the dropdown\n.open {\n  // Show the menu\n  > .dropdown-menu {\n    display: block;\n  }\n\n  // Remove the outline when :focus is triggered\n  > a {\n    outline: 0;\n  }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n  left: auto; // Reset the default from `.dropdown-menu`\n  right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n  left: 0;\n  right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: @font-size-small;\n  line-height: @line-height-base;\n  color: @dropdown-header-color;\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  top: 0;\n  z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n  // Reverse the caret\n  .caret {\n    border-top: 0;\n    border-bottom: @caret-width-base solid;\n    content: \"\";\n  }\n  // Different positioning for bottom up menu\n  .dropdown-menu {\n    top: auto;\n    bottom: 100%;\n    margin-bottom: 1px;\n  }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-right {\n    .dropdown-menu {\n      .dropdown-menu-right();\n    }\n    // Necessary for overrides of the default right aligned menu.\n    // Will remove come v4 in all likelihood.\n    .dropdown-menu-left {\n      .dropdown-menu-left();\n    }\n  }\n}\n\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n  position: relative; // For dropdowns\n  display: table;\n  border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n  // Undo padding and float of grid classes\n  &[class*=\"col-\"] {\n    float: none;\n    padding-left: 0;\n    padding-right: 0;\n  }\n\n  .form-control {\n    // Ensure that the input is always above the *appended* addon button for\n    // proper border colors.\n    position: relative;\n    z-index: 2;\n\n    // IE9 fubars the placeholder attribute in text inputs and the arrows on\n    // select elements in input groups. To fix it, we float the input. Details:\n    // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n    float: left;\n\n    width: 100%;\n    margin-bottom: 0;\n  }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn { .input-lg(); }\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn { .input-sm(); }\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n  padding: @padding-base-vertical @padding-base-horizontal;\n  font-size: @font-size-base;\n  font-weight: normal;\n  line-height: 1;\n  color: @input-color;\n  text-align: center;\n  background-color: @input-group-addon-bg;\n  border: 1px solid @input-group-addon-border-color;\n  border-radius: @border-radius-base;\n\n  // Sizing\n  &.input-sm {\n    padding: @padding-small-vertical @padding-small-horizontal;\n    font-size: @font-size-small;\n    border-radius: @border-radius-small;\n  }\n  &.input-lg {\n    padding: @padding-large-vertical @padding-large-horizontal;\n    font-size: @font-size-large;\n    border-radius: @border-radius-large;\n  }\n\n  // Nuke default margins from checkboxes and radios to vertically center within.\n  input[type=\"radio\"],\n  input[type=\"checkbox\"] {\n    margin-top: 0;\n  }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  .border-right-radius(0);\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  .border-left-radius(0);\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n  position: relative;\n  // Jankily prevent input button groups from wrapping with `white-space` and\n  // `font-size` in combination with `inline-block` on buttons.\n  font-size: 0;\n  white-space: nowrap;\n\n  // Negative margin for spacing, position for bringing hovered/focused/actived\n  // element above the siblings.\n  > .btn {\n    position: relative;\n    + .btn {\n      margin-left: -1px;\n    }\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active {\n      z-index: 2;\n    }\n  }\n\n  // Negative margin to only have a 1px border between the two\n  &:first-child {\n    > .btn,\n    > .btn-group {\n      margin-right: -1px;\n    }\n  }\n  &:last-child {\n    > .btn,\n    > .btn-group {\n      margin-left: -1px;\n    }\n  }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n  margin-bottom: 0;\n  padding-left: 0; // Override default ul/ol\n  list-style: none;\n  &:extend(.clearfix all);\n\n  > li {\n    position: relative;\n    display: block;\n\n    > a {\n      position: relative;\n      display: block;\n      padding: @nav-link-padding;\n      &:hover,\n      &:focus {\n        text-decoration: none;\n        background-color: @nav-link-hover-bg;\n      }\n    }\n\n    // Disabled state sets text to gray and nukes hover/tab effects\n    &.disabled > a {\n      color: @nav-disabled-link-color;\n\n      &:hover,\n      &:focus {\n        color: @nav-disabled-link-hover-color;\n        text-decoration: none;\n        background-color: transparent;\n        cursor: not-allowed;\n      }\n    }\n  }\n\n  // Open dropdowns\n  .open > a {\n    &,\n    &:hover,\n    &:focus {\n      background-color: @nav-link-hover-bg;\n      border-color: @link-color;\n    }\n  }\n\n  // Nav dividers (deprecated with v3.0.1)\n  //\n  // This should have been removed in v3 with the dropping of `.nav-list`, but\n  // we missed it. We don't currently support this anywhere, but in the interest\n  // of maintaining backward compatibility in case you use it, it's deprecated.\n  .nav-divider {\n    .nav-divider();\n  }\n\n  // Prevent IE8 from misplacing imgs\n  //\n  // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n  > li > a > img {\n    max-width: none;\n  }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n  border-bottom: 1px solid @nav-tabs-border-color;\n  > li {\n    float: left;\n    // Make the list-items overlay the bottom border\n    margin-bottom: -1px;\n\n    // Actual tabs (as links)\n    > a {\n      margin-right: 2px;\n      line-height: @line-height-base;\n      border: 1px solid transparent;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n      &:hover {\n        border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n      }\n    }\n\n    // Active state, and its :hover to override normal :hover\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @nav-tabs-active-link-hover-color;\n        background-color: @nav-tabs-active-link-hover-bg;\n        border: 1px solid @nav-tabs-active-link-hover-border-color;\n        border-bottom-color: transparent;\n        cursor: default;\n      }\n    }\n  }\n  // pulling this in mainly for less shorthand\n  &.nav-justified {\n    .nav-justified();\n    .nav-tabs-justified();\n  }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n  > li {\n    float: left;\n\n    // Links rendered as pills\n    > a {\n      border-radius: @nav-pills-border-radius;\n    }\n    + li {\n      margin-left: 2px;\n    }\n\n    // Active state\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @nav-pills-active-link-hover-color;\n        background-color: @nav-pills-active-link-hover-bg;\n      }\n    }\n  }\n}\n\n\n// Stacked pills\n.nav-stacked {\n  > li {\n    float: none;\n    + li {\n      margin-top: 2px;\n      margin-left: 0; // no need for this gap between nav items\n    }\n  }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n  width: 100%;\n\n  > li {\n    float: none;\n     > a {\n      text-align: center;\n      margin-bottom: 5px;\n    }\n  }\n\n  > .dropdown .dropdown-menu {\n    top: auto;\n    left: auto;\n  }\n\n  @media (min-width: @screen-sm-min) {\n    > li {\n      display: table-cell;\n      width: 1%;\n      > a {\n        margin-bottom: 0;\n      }\n    }\n  }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n  border-bottom: 0;\n\n  > li > a {\n    // Override margin from .nav-tabs\n    margin-right: 0;\n    border-radius: @border-radius-base;\n  }\n\n  > .active > a,\n  > .active > a:hover,\n  > .active > a:focus {\n    border: 1px solid @nav-tabs-justified-link-border-color;\n  }\n\n  @media (min-width: @screen-sm-min) {\n    > li > a {\n      border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n    }\n    > .active > a,\n    > .active > a:hover,\n    > .active > a:focus {\n      border-bottom-color: @nav-tabs-justified-active-link-border-color;\n    }\n  }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n  > .tab-pane {\n    display: none;\n  }\n  > .active {\n    display: block;\n  }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n  // make dropdown border overlap tab border\n  margin-top: -1px;\n  // Remove the top rounded corners here since there is a hard edge above the menu\n  .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n  position: relative;\n  min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n  margin-bottom: @navbar-margin-bottom;\n  border: 1px solid transparent;\n\n  // Prevent floats from breaking the navbar\n  &:extend(.clearfix all);\n\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: @navbar-border-radius;\n  }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n  &:extend(.clearfix all);\n\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n  }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n  max-height: @navbar-collapse-max-height;\n  overflow-x: visible;\n  padding-right: @navbar-padding-horizontal;\n  padding-left:  @navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n  &:extend(.clearfix all);\n  -webkit-overflow-scrolling: touch;\n\n  &.in {\n    overflow-y: auto;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    width: auto;\n    border-top: 0;\n    box-shadow: none;\n\n    &.collapse {\n      display: block !important;\n      height: auto !important;\n      padding-bottom: 0; // Override default setting\n      overflow: visible !important;\n    }\n\n    &.in {\n      overflow-y: visible;\n    }\n\n    // Undo the collapse side padding for navbars with containers to ensure\n    // alignment of right-aligned contents.\n    .navbar-fixed-top &,\n    .navbar-static-top &,\n    .navbar-fixed-bottom & {\n      padding-left: 0;\n      padding-right: 0;\n    }\n  }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n  > .navbar-header,\n  > .navbar-collapse {\n    margin-right: -@navbar-padding-horizontal;\n    margin-left:  -@navbar-padding-horizontal;\n\n    @media (min-width: @grid-float-breakpoint) {\n      margin-right: 0;\n      margin-left:  0;\n    }\n  }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n  z-index: @zindex-navbar;\n  border-width: 0 0 1px;\n\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: @zindex-navbar-fixed;\n\n  // Undo the rounded corners\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0; // override .navbar defaults\n  border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n  float: left;\n  padding: @navbar-padding-vertical @navbar-padding-horizontal;\n  font-size: @font-size-large;\n  line-height: @line-height-computed;\n  height: @navbar-height;\n\n  &:hover,\n  &:focus {\n    text-decoration: none;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    .navbar > .container &,\n    .navbar > .container-fluid & {\n      margin-left: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n  position: relative;\n  float: right;\n  margin-right: @navbar-padding-horizontal;\n  padding: 9px 10px;\n  .navbar-vertical-align(34px);\n  background-color: transparent;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  border-radius: @border-radius-base;\n\n  // We remove the `outline` here, but later compensate by attaching `:hover`\n  // styles to `:focus`.\n  &:focus {\n    outline: none;\n  }\n\n  // Bars\n  .icon-bar {\n    display: block;\n    width: 22px;\n    height: 2px;\n    border-radius: 1px;\n  }\n  .icon-bar + .icon-bar {\n    margin-top: 4px;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    display: none;\n  }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n  margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n  > li > a {\n    padding-top:    10px;\n    padding-bottom: 10px;\n    line-height: @line-height-computed;\n  }\n\n  @media (max-width: @grid-float-breakpoint-max) {\n    // Dropdowns get custom display when collapsed\n    .open .dropdown-menu {\n      position: static;\n      float: none;\n      width: auto;\n      margin-top: 0;\n      background-color: transparent;\n      border: 0;\n      box-shadow: none;\n      > li > a,\n      .dropdown-header {\n        padding: 5px 15px 5px 25px;\n      }\n      > li > a {\n        line-height: @line-height-computed;\n        &:hover,\n        &:focus {\n          background-image: none;\n        }\n      }\n    }\n  }\n\n  // Uncollapse the nav\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n    margin: 0;\n\n    > li {\n      float: left;\n      > a {\n        padding-top:    @navbar-padding-vertical;\n        padding-bottom: @navbar-padding-vertical;\n      }\n    }\n\n    &.navbar-right:last-child {\n      margin-right: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-left  { .pull-left(); }\n  .navbar-right { .pull-right(); }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n  margin-left: -@navbar-padding-horizontal;\n  margin-right: -@navbar-padding-horizontal;\n  padding: 10px @navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n  .box-shadow(@shadow);\n\n  // Mixin behavior for optimum display\n  .form-inline();\n\n  .form-group {\n    @media (max-width: @grid-float-breakpoint-max) {\n      margin-bottom: 5px;\n    }\n  }\n\n  // Vertically center in expanded, horizontal navbar\n  .navbar-vertical-align(@input-height-base);\n\n  // Undo 100% width for pull classes\n  @media (min-width: @grid-float-breakpoint) {\n    width: auto;\n    border: 0;\n    margin-left: 0;\n    margin-right: 0;\n    padding-top: 0;\n    padding-bottom: 0;\n    .box-shadow(none);\n\n    // Outdent the form if last child to line up with content down the page\n    &.navbar-right:last-child {\n      margin-right: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n  .navbar-vertical-align(@input-height-base);\n\n  &.btn-sm {\n    .navbar-vertical-align(@input-height-small);\n  }\n  &.btn-xs {\n    .navbar-vertical-align(22);\n  }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n  .navbar-vertical-align(@line-height-computed);\n\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n    margin-left: @navbar-padding-horizontal;\n    margin-right: @navbar-padding-horizontal;\n\n    // Outdent the form if last child to line up with content down the page\n    &.navbar-right:last-child {\n      margin-right: 0;\n    }\n  }\n}\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n  background-color: @navbar-default-bg;\n  border-color: @navbar-default-border;\n\n  .navbar-brand {\n    color: @navbar-default-brand-color;\n    &:hover,\n    &:focus {\n      color: @navbar-default-brand-hover-color;\n      background-color: @navbar-default-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: @navbar-default-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: @navbar-default-link-color;\n\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-hover-color;\n        background-color: @navbar-default-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-active-color;\n        background-color: @navbar-default-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-disabled-color;\n        background-color: @navbar-default-link-disabled-bg;\n      }\n    }\n  }\n\n  .navbar-toggle {\n    border-color: @navbar-default-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: @navbar-default-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: @navbar-default-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: @navbar-default-border;\n  }\n\n  // Dropdown menu items\n  .navbar-nav {\n    // Remove background color from open dropdown\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: @navbar-default-link-active-bg;\n        color: @navbar-default-link-active-color;\n      }\n    }\n\n    @media (max-width: @grid-float-breakpoint-max) {\n      // Dropdowns get custom display when collapsed\n      .open .dropdown-menu {\n        > li > a {\n          color: @navbar-default-link-color;\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-hover-color;\n            background-color: @navbar-default-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-active-color;\n            background-color: @navbar-default-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-disabled-color;\n            background-color: @navbar-default-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n\n  // Links in navbars\n  //\n  // Add a class to ensure links outside the navbar nav are colored correctly.\n\n  .navbar-link {\n    color: @navbar-default-link-color;\n    &:hover {\n      color: @navbar-default-link-hover-color;\n    }\n  }\n\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n  background-color: @navbar-inverse-bg;\n  border-color: @navbar-inverse-border;\n\n  .navbar-brand {\n    color: @navbar-inverse-brand-color;\n    &:hover,\n    &:focus {\n      color: @navbar-inverse-brand-hover-color;\n      background-color: @navbar-inverse-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: @navbar-inverse-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: @navbar-inverse-link-color;\n\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-hover-color;\n        background-color: @navbar-inverse-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-active-color;\n        background-color: @navbar-inverse-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-disabled-color;\n        background-color: @navbar-inverse-link-disabled-bg;\n      }\n    }\n  }\n\n  // Darken the responsive nav toggle\n  .navbar-toggle {\n    border-color: @navbar-inverse-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: @navbar-inverse-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: @navbar-inverse-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: darken(@navbar-inverse-bg, 7%);\n  }\n\n  // Dropdowns\n  .navbar-nav {\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: @navbar-inverse-link-active-bg;\n        color: @navbar-inverse-link-active-color;\n      }\n    }\n\n    @media (max-width: @grid-float-breakpoint-max) {\n      // Dropdowns get custom display\n      .open .dropdown-menu {\n        > .dropdown-header {\n          border-color: @navbar-inverse-border;\n        }\n        .divider {\n          background-color: @navbar-inverse-border;\n        }\n        > li > a {\n          color: @navbar-inverse-link-color;\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-hover-color;\n            background-color: @navbar-inverse-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-active-color;\n            background-color: @navbar-inverse-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-disabled-color;\n            background-color: @navbar-inverse-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n  .navbar-link {\n    color: @navbar-inverse-link-color;\n    &:hover {\n      color: @navbar-inverse-link-hover-color;\n    }\n  }\n\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n  .clearfix();\n}\n.center-block {\n  .center-block();\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n  position: fixed;\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n  padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n  margin-bottom: @line-height-computed;\n  list-style: none;\n  background-color: @breadcrumb-bg;\n  border-radius: @border-radius-base;\n\n  > li {\n    display: inline-block;\n\n    + li:before {\n      content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n      padding: 0 5px;\n      color: @breadcrumb-color;\n    }\n  }\n\n  > .active {\n    color: @breadcrumb-active-color;\n  }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: @line-height-computed 0;\n  border-radius: @border-radius-base;\n\n  > li {\n    display: inline; // Remove list-style and block-level defaults\n    > a,\n    > span {\n      position: relative;\n      float: left; // Collapse white-space\n      padding: @padding-base-vertical @padding-base-horizontal;\n      line-height: @line-height-base;\n      text-decoration: none;\n      color: @pagination-color;\n      background-color: @pagination-bg;\n      border: 1px solid @pagination-border;\n      margin-left: -1px;\n    }\n    &:first-child {\n      > a,\n      > span {\n        margin-left: 0;\n        .border-left-radius(@border-radius-base);\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        .border-right-radius(@border-radius-base);\n      }\n    }\n  }\n\n  > li > a,\n  > li > span {\n    &:hover,\n    &:focus {\n      color: @pagination-hover-color;\n      background-color: @pagination-hover-bg;\n      border-color: @pagination-hover-border;\n    }\n  }\n\n  > .active > a,\n  > .active > span {\n    &,\n    &:hover,\n    &:focus {\n      z-index: 2;\n      color: @pagination-active-color;\n      background-color: @pagination-active-bg;\n      border-color: @pagination-active-border;\n      cursor: default;\n    }\n  }\n\n  > .disabled {\n    > span,\n    > span:hover,\n    > span:focus,\n    > a,\n    > a:hover,\n    > a:focus {\n      color: @pagination-disabled-color;\n      background-color: @pagination-disabled-bg;\n      border-color: @pagination-disabled-border;\n      cursor: not-allowed;\n    }\n  }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n  .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n  .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small);\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n  padding-left: 0;\n  margin: @line-height-computed 0;\n  list-style: none;\n  text-align: center;\n  &:extend(.clearfix all);\n  li {\n    display: inline;\n    > a,\n    > span {\n      display: inline-block;\n      padding: 5px 14px;\n      background-color: @pager-bg;\n      border: 1px solid @pager-border;\n      border-radius: @pager-border-radius;\n    }\n\n    > a:hover,\n    > a:focus {\n      text-decoration: none;\n      background-color: @pager-hover-bg;\n    }\n  }\n\n  .next {\n    > a,\n    > span {\n      float: right;\n    }\n  }\n\n  .previous {\n    > a,\n    > span {\n      float: left;\n    }\n  }\n\n  .disabled {\n    > a,\n    > a:hover,\n    > a:focus,\n    > span {\n      color: @pager-disabled-color;\n      background-color: @pager-bg;\n      cursor: not-allowed;\n    }\n  }\n\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: @label-color;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n\n  // Add hover effects, but only for links\n  &[href] {\n    &:hover,\n    &:focus {\n      color: @label-link-hover-color;\n      text-decoration: none;\n      cursor: pointer;\n    }\n  }\n\n  // Empty labels collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for labels in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n  .label-variant(@label-default-bg);\n}\n\n.label-primary {\n  .label-variant(@label-primary-bg);\n}\n\n.label-success {\n  .label-variant(@label-success-bg);\n}\n\n.label-info {\n  .label-variant(@label-info-bg);\n}\n\n.label-warning {\n  .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n  .label-variant(@label-danger-bg);\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base classes\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: @font-size-small;\n  font-weight: @badge-font-weight;\n  color: @badge-color;\n  line-height: @badge-line-height;\n  vertical-align: baseline;\n  white-space: nowrap;\n  text-align: center;\n  background-color: @badge-bg;\n  border-radius: @badge-border-radius;\n\n  // Empty badges collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for badges in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n  .btn-xs & {\n    top: 0;\n    padding: 1px 5px;\n  }\n}\n\n// Hover state, but only for links\na.badge {\n  &:hover,\n  &:focus {\n    color: @badge-link-hover-color;\n    text-decoration: none;\n    cursor: pointer;\n  }\n}\n\n// Account for counters in navs\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: @badge-active-color;\n  background-color: @badge-active-bg;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n  padding: @jumbotron-padding;\n  margin-bottom: @jumbotron-padding;\n  color: @jumbotron-color;\n  background-color: @jumbotron-bg;\n\n  h1,\n  .h1 {\n    color: @jumbotron-heading-color;\n  }\n  p {\n    margin-bottom: (@jumbotron-padding / 2);\n    font-size: @jumbotron-font-size;\n    font-weight: 200;\n  }\n\n  .container & {\n    border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n  }\n\n  .container {\n    max-width: 100%;\n  }\n\n  @media screen and (min-width: @screen-sm-min) {\n    padding-top:    (@jumbotron-padding * 1.6);\n    padding-bottom: (@jumbotron-padding * 1.6);\n\n    .container & {\n      padding-left:  (@jumbotron-padding * 2);\n      padding-right: (@jumbotron-padding * 2);\n    }\n\n    h1,\n    .h1 {\n      font-size: (@font-size-base * 4.5);\n    }\n  }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n  padding: @alert-padding;\n  margin-bottom: @line-height-computed;\n  border: 1px solid transparent;\n  border-radius: @alert-border-radius;\n\n  // Headings for larger alerts\n  h4 {\n    margin-top: 0;\n    // Specified for the h4 to prevent conflicts of changing @headings-color\n    color: inherit;\n  }\n  // Provide class for links that match alerts\n  .alert-link {\n    font-weight: @alert-link-font-weight;\n  }\n\n  // Improve alignment and spacing of inner content\n  > p,\n  > ul {\n    margin-bottom: 0;\n  }\n  > p + p {\n    margin-top: 5px;\n  }\n}\n\n// Dismissable alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable {\n padding-right: (@alert-padding + 20);\n\n  // Adjust close link position\n  .close {\n    position: relative;\n    top: -2px;\n    right: -21px;\n    color: inherit;\n  }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n  .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n.alert-info {\n  .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n.alert-warning {\n  .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n.alert-danger {\n  .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n  overflow: hidden;\n  height: @line-height-computed;\n  margin-bottom: @line-height-computed;\n  background-color: @progress-bg;\n  border-radius: @border-radius-base;\n  .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: @font-size-small;\n  line-height: @line-height-computed;\n  color: @progress-bar-color;\n  text-align: center;\n  background-color: @progress-bar-bg;\n  .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n  .transition(width .6s ease);\n}\n\n// Striped bars\n.progress-striped .progress-bar {\n  #gradient > .striped();\n  background-size: 40px 40px;\n}\n\n// Call animation for the active one\n.progress.active .progress-bar {\n  .animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n  .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n  .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n  .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n  .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Media objects\n// Source: http://stubbornella.org/content/?p=497\n// --------------------------------------------------\n\n\n// Common styles\n// -------------------------\n\n// Clear the floats\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n\n// Proper spacing between instances of .media\n.media,\n.media .media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n\n// For images and videos, set to block\n.media-object {\n  display: block;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n  margin: 0 0 5px;\n}\n\n\n// Media image alignment\n// -------------------------\n\n.media {\n  > .pull-left {\n    margin-right: 10px;\n  }\n  > .pull-right {\n    margin-left: 10px;\n  }\n}\n\n\n// Media list variation\n// -------------------------\n\n// Undo default ul/ol styles\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on 
    ,
      , or
      .\n\n.list-group {\n // No need to set list-style: none; since .list-group-item is block level\n margin-bottom: 20px;\n padding-left: 0; // reset padding because ul and ol\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n // Place the border on the list items and negative margin up for better styling\n margin-bottom: -1px;\n background-color: @list-group-bg;\n border: 1px solid @list-group-border;\n\n // Round the first and last items\n &:first-child {\n .border-top-radius(@list-group-border-radius);\n }\n &:last-child {\n margin-bottom: 0;\n .border-bottom-radius(@list-group-border-radius);\n }\n\n // Align badges within list items\n > .badge {\n float: right;\n }\n > .badge + .badge {\n margin-right: 5px;\n }\n}\n\n\n// Linked list items\n//\n// Use anchor elements instead of `li`s or `div`s to create linked list items.\n// Includes an extra `.active` modifier class for showing selected items.\n\na.list-group-item {\n color: @list-group-link-color;\n\n .list-group-item-heading {\n color: @list-group-link-heading-color;\n }\n\n // Hover state\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: @list-group-hover-bg;\n }\n\n // Active class on item itself, not parent\n &.active,\n &.active:hover,\n &.active:focus {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: @list-group-active-color;\n background-color: @list-group-active-bg;\n border-color: @list-group-active-border;\n\n // Force color to inherit for custom content\n .list-group-item-heading {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-active-text-color;\n }\n }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n.list-group-item-variant(success; @state-success-bg; @state-success-text);\n.list-group-item-variant(info; @state-info-bg; @state-info-text);\n.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);\n.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\n\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n","//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n margin-bottom: @line-height-computed;\n background-color: @panel-bg;\n border: 1px solid transparent;\n border-radius: @panel-border-radius;\n .box-shadow(0 1px 1px rgba(0,0,0,.05));\n}\n\n// Panel contents\n.panel-body {\n padding: @panel-body-padding;\n &:extend(.clearfix all);\n}\n\n// Optional heading\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n .border-top-radius((@panel-border-radius - 1));\n\n > .dropdown .dropdown-toggle {\n color: inherit;\n }\n}\n\n// Within heading, strip any `h*` tag of its default margins for spacing.\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: ceil((@font-size-base * 1.125));\n color: inherit;\n\n > a {\n color: inherit;\n }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n padding: 10px 15px;\n background-color: @panel-footer-bg;\n border-top: 1px solid @panel-inner-border;\n .border-bottom-radius((@panel-border-radius - 1));\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n > .list-group {\n margin-bottom: 0;\n\n .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n }\n\n // Add border top radius for first one\n &:first-child {\n .list-group-item:first-child {\n border-top: 0;\n .border-top-radius((@panel-border-radius - 1));\n }\n }\n // Add border bottom radius for last one\n &:last-child {\n .list-group-item:last-child {\n border-bottom: 0;\n .border-bottom-radius((@panel-border-radius - 1));\n }\n }\n }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n .list-group-item:first-child {\n border-top-width: 0;\n }\n}\n\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n > .table,\n > .table-responsive > .table {\n margin-bottom: 0;\n }\n // Add border top radius for first one\n > .table:first-child,\n > .table-responsive:first-child > .table:first-child {\n .border-top-radius((@panel-border-radius - 1));\n\n > thead:first-child,\n > tbody:first-child {\n > tr:first-child {\n td:first-child,\n th:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-top-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n // Add border bottom radius for last one\n > .table:last-child,\n > .table-responsive:last-child > .table:last-child {\n .border-bottom-radius((@panel-border-radius - 1));\n\n > tbody:last-child,\n > tfoot:last-child {\n > tr:last-child {\n td:first-child,\n th:first-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-bottom-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n > .panel-body + .table,\n > .panel-body + .table-responsive {\n border-top: 1px solid @table-border-color;\n }\n > .table > tbody:first-child > tr:first-child th,\n > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n }\n > .table-bordered,\n > .table-responsive > .table-bordered {\n border: 0;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n > thead,\n > tbody {\n > tr:first-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n > tbody,\n > tfoot {\n > tr:last-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n }\n > .table-responsive {\n border: 0;\n margin-bottom: 0;\n }\n}\n\n\n// Collapsable panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n margin-bottom: @line-height-computed;\n\n // Tighten up margin so it's only between panels\n .panel {\n margin-bottom: 0;\n border-radius: @panel-border-radius;\n overflow: hidden; // crop contents when collapsed\n + .panel {\n margin-top: 5px;\n }\n }\n\n .panel-heading {\n border-bottom: 0;\n + .panel-collapse .panel-body {\n border-top: 1px solid @panel-inner-border;\n }\n }\n .panel-footer {\n border-top: 0;\n + .panel-collapse .panel-body {\n border-bottom: 1px solid @panel-inner-border;\n }\n }\n}\n\n\n// Contextual variations\n.panel-default {\n .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);\n}\n.panel-primary {\n .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);\n}\n.panel-success {\n .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);\n}\n.panel-info {\n .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);\n}\n.panel-warning {\n .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);\n}\n.panel-danger {\n .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);\n}\n","//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: @well-bg;\n border: 1px solid @well-border;\n border-radius: @border-radius-base;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));\n blockquote {\n border-color: #ddd;\n border-color: rgba(0,0,0,.15);\n }\n}\n\n// Sizes\n.well-lg {\n padding: 24px;\n border-radius: @border-radius-large;\n}\n.well-sm {\n padding: 9px;\n border-radius: @border-radius-small;\n}\n","//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n float: right;\n font-size: (@font-size-base * 1.5);\n font-weight: @close-font-weight;\n line-height: 1;\n color: @close-color;\n text-shadow: @close-text-shadow;\n .opacity(.2);\n\n &:hover,\n &:focus {\n color: @close-color;\n text-decoration: none;\n cursor: pointer;\n .opacity(.5);\n }\n\n // Additional properties for button version\n // iOS requires the button element instead of an anchor tag.\n // If you want the anchor version, it requires `href=\"#\"`.\n button& {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n }\n}\n","//\n// Modals\n// --------------------------------------------------\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n display: none;\n overflow: auto;\n overflow-y: scroll;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal;\n -webkit-overflow-scrolling: touch;\n\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n\n // When fading in the modal, animate it to slide down\n &.fade .modal-dialog {\n .translate(0, -25%);\n .transition-transform(~\"0.3s ease-out\");\n }\n &.in .modal-dialog { .translate(0, 0)}\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n background-color: @modal-content-bg;\n border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n border: 1px solid @modal-content-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 3px 9px rgba(0,0,0,.5));\n background-clip: padding-box;\n // Remove focus outline from opened modal\n outline: none;\n}\n\n// Modal background\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal-background;\n background-color: @modal-backdrop-bg;\n // Fade for backdrop\n &.fade { .opacity(0); }\n &.in { .opacity(@modal-backdrop-opacity); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n padding: @modal-title-padding;\n border-bottom: 1px solid @modal-header-border-color;\n min-height: (@modal-title-padding + @modal-title-line-height);\n}\n// Close icon\n.modal-header .close {\n margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n margin: 0;\n line-height: @modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n padding: @modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n margin-top: 15px;\n padding: (@modal-inner-padding - 1) @modal-inner-padding @modal-inner-padding;\n text-align: right; // right align buttons\n border-top: 1px solid @modal-footer-border-color;\n &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons\n\n // Properly space out buttons\n .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n }\n // but override that for button groups\n .btn-group .btn + .btn {\n margin-left: -1px;\n }\n // and override it for block buttons as well\n .btn-block + .btn-block {\n margin-left: 0;\n }\n}\n\n// Scale up the modal\n@media (min-width: @screen-sm-min) {\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n width: @modal-md;\n margin: 30px auto;\n }\n .modal-content {\n .box-shadow(0 5px 15px rgba(0,0,0,.5));\n }\n\n // Modal sizes\n .modal-sm { width: @modal-sm; }\n}\n\n@media (min-width: @screen-md-min) {\n .modal-lg { width: @modal-lg; }\n}\n","//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n position: absolute;\n z-index: @zindex-tooltip;\n display: block;\n visibility: visible;\n font-size: @font-size-small;\n line-height: 1.4;\n .opacity(0);\n\n &.in { .opacity(@tooltip-opacity); }\n &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; }\n &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; }\n &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; }\n &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: @tooltip-max-width;\n padding: 3px 8px;\n color: @tooltip-color;\n text-align: center;\n text-decoration: none;\n background-color: @tooltip-bg;\n border-radius: @border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip {\n &.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-left .tooltip-arrow {\n bottom: 0;\n left: @tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-right .tooltip-arrow {\n bottom: 0;\n right: @tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;\n border-right-color: @tooltip-arrow-color;\n }\n &.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-left-color: @tooltip-arrow-color;\n }\n &.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-left .tooltip-arrow {\n top: 0;\n left: @tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-right .tooltip-arrow {\n top: 0;\n right: @tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n}\n","//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: @zindex-popover;\n display: none;\n max-width: @popover-max-width;\n padding: 1px;\n text-align: left; // Reset given new insertion method\n background-color: @popover-bg;\n background-clip: padding-box;\n border: 1px solid @popover-fallback-border-color;\n border: 1px solid @popover-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 5px 10px rgba(0,0,0,.2));\n\n // Overrides for proper insertion\n white-space: normal;\n\n // Offset the popover to account for the popover arrow\n &.top { margin-top: -@popover-arrow-width; }\n &.right { margin-left: @popover-arrow-width; }\n &.bottom { margin-top: @popover-arrow-width; }\n &.left { margin-left: -@popover-arrow-width; }\n}\n\n.popover-title {\n margin: 0; // reset heading margin\n padding: 8px 14px;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 18px;\n background-color: @popover-title-bg;\n border-bottom: 1px solid darken(@popover-title-bg, 5%);\n border-radius: 5px 5px 0 0;\n}\n\n.popover-content {\n padding: 9px 14px;\n}\n\n// Arrows\n//\n// .arrow is outer, .arrow:after is inner\n\n.popover > .arrow {\n &,\n &:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n }\n}\n.popover > .arrow {\n border-width: @popover-arrow-outer-width;\n}\n.popover > .arrow:after {\n border-width: @popover-arrow-width;\n content: \"\";\n}\n\n.popover {\n &.top > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-top-color: @popover-arrow-outer-color;\n bottom: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n bottom: 1px;\n margin-left: -@popover-arrow-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-color;\n }\n }\n &.right > .arrow {\n top: 50%;\n left: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-right-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n left: 1px;\n bottom: -@popover-arrow-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-color;\n }\n }\n &.bottom > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-bottom-color: @popover-arrow-outer-color;\n top: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n top: 1px;\n margin-left: -@popover-arrow-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-color;\n }\n }\n\n &.left > .arrow {\n top: 50%;\n right: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-right-width: 0;\n border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-left-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: @popover-arrow-color;\n bottom: -@popover-arrow-width;\n }\n }\n\n}\n","//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: http://getbootstrap.com/getting-started/#browsers\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@-ms-viewport {\n width: device-width;\n}\n\n\n// Visibility utilities\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n .responsive-invisibility();\n}\n\n.visible-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-visibility();\n }\n}\n.visible-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-visibility();\n }\n}\n.visible-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-visibility();\n }\n}\n.visible-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-visibility();\n }\n}\n\n.hidden-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-invisibility();\n }\n}\n.hidden-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-invisibility();\n }\n}\n.hidden-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-invisibility();\n }\n}\n.hidden-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-invisibility();\n }\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n.visible-print {\n .responsive-invisibility();\n\n @media print {\n .responsive-visibility();\n }\n}\n\n.hidden-print {\n @media print {\n .responsive-invisibility();\n }\n}\n"]} \ No newline at end of file diff --git a/infohub/static/infohub/bootstrap/css/bootstrap.min.css b/infohub/static/infohub/bootstrap/css/bootstrap.min.css index 679272d2..ae58853e 100644 --- a/infohub/static/infohub/bootstrap/css/bootstrap.min.css +++ b/infohub/static/infohub/bootstrap/css/bootstrap.min.css @@ -1,7 +1,14 @@ /*! - * Bootstrap v3.1.1 (http://getbootstrap.com) - * Copyright 2011-2014 Twitter, Inc. + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ -/*! normalize.css v3.0.0 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,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:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}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{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{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-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@media print{*{text-shadow:none!important;color:#000!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-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}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.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;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}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,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#999}h1,.h1,h2,.h2,h3,.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,.h4,h5,.h5,h6,.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:200;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-muted{color:#999}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}.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 p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#999}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}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;white-space:nowrap;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;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{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{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:0}.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:0}.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-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{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:0}.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:0}.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-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{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:0}.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:0}.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-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{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:0}.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:0}.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{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{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>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;overflow-x:scroll;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width: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;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=radio],input[type=checkbox]{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=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;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,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[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date]{line-height:34px}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:20px;margin-top:10px;margin-bottom:10px;padding-left:20px}.radio label,.checkbox label{display:inline;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.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}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.has-feedback .form-control-feedback{position:absolute;top:25px;right:0;display:block;width:34px;height:34px;line-height:34px;text-align:center}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{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;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{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;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{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;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.form-control-static{margin-bottom: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 .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{float:none;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-control-static{padding-top:7px}@media (min-width:768px){.form-horizontal .control-label{text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;border-color:#adadad}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{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:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{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:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{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:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#428bca;font-weight:400;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@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.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:"\2a"}.glyphicon-plus:before{content:"\2b"}.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"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{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;list-style:none;font-size:14px;background-color:#fff;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);background-clip:padding-box}.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:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#428bca}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#999}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.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-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-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-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>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right: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-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.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-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.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.33;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}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].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}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control: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=radio],.input-group-addon input[type=checkbox]{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:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-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:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-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:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{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{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.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:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.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:hover,.nav-tabs.nav-justified>.active>a:focus{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:hover,.nav-tabs.nav-justified>.active>a:focus{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:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.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{text-align:center;margin-bottom:5px}.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:hover,.nav-tabs-justified>.active>a:focus{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:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-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{max-height:340px;overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;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-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{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-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{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;padding:15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;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;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{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-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 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);margin-top:8px;margin-bottom:8px}@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 .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{float:none;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{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-left:15px;margin-right:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{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:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{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:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{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:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@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:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.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{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.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;line-height:1.42857143;text-decoration:none;color:#428bca;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.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:hover,.pager li>a:focus{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:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;background-color:#fff;cursor:not-allowed}.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}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#999}.label-default[href]:hover,.label-default[href]:focus{background-color:gray}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#999;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding: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}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-left:60px;padding-right: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:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.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{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.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}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;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:#428bca;-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;transition:width .6s ease}.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: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-size:40px 40px}.progress.active .progress-bar{-webkit-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: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: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: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: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,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.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-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}a.list-group-item.active .list-group-item-heading,a.list-group-item.active:hover .list-group-item-heading,a.list-group-item.active:focus .list-group-item-heading{color:inherit}a.list-group-item.active .list-group-item-text,a.list-group-item.active:hover .list-group-item-text,a.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{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-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>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{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.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 td:first-child,.panel>.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 td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th: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 th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.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 td:last-child,.panel>.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 td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th: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 th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.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 td:first-child,.panel>.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 td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.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 td:last-child,.panel>.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 td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.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{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px;overflow:hidden}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.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-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.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-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-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-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-footer+.panel-collapse .panel-body{border-bottom-color:#ebccd1}.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;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:auto;overflow-y:scroll;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:20px}.modal-footer{margin-top:15px;padding:19px 20px 20px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@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:1030;display:block;visibility:visible;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;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{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;right: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;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#fff;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);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:400;line-height:18px;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{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;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{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.5) 0),color-stop(rgba(0,0,0,.0001) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.0001) 0),color-stop(rgba(0,0,0,.5) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.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%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;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-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right: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;visibility:hidden!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!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}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}@media print{.hidden-print{display:none!important}} \ No newline at end of file +/*! + * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=6f1bbee09ea7b5ebb0bb) + * Config saved to config.json and https://gist.github.com/6f1bbee09ea7b5ebb0bb + *//*! + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 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;-ms-text-size-adjust:100%;-webkit-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:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}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{border:0;padding: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-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;-webkit-box-shadow:none !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{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 th,.table-bordered td{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:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before,.glyphicon-eur: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}*:before,*:after{-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}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{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;display:inline-block;max-width:100%;height:auto}.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;margin:-1px;padding:0;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,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.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,.h4,h5,.h5,h6,.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{background-color:#fcf8e3;padding:.2em}.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:hover,a.text-primary:focus{color:#286090}.text-success{color:#3c763d}a.text-success:hover,a.text-success:focus{color:#2b542c}.text-info{color:#31708f}a.text-info:hover,a.text-info:focus{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover,a.text-warning:focus{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover,a.text-danger:focus{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover,a.bg-primary:focus{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover,a.bg-success:focus{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover,a.bg-info:focus{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover,a.bg-warning:focus{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover,a.bg-danger:focus{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-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 p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small: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,0.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;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{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12{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-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12{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-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12{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-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12{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>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{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>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{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;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:0.01%}@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>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width: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:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{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="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;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,0.075);box-shadow:inset 0 1px 1px rgba(0,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, 0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.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[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[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm,.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"]{line-height:30px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg,.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"]{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right: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}textarea.input-sm,select[multiple].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 textarea.form-control,.form-group-sm select[multiple].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}textarea.input-lg,select[multiple].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 textarea.form-control,.form-group-lg select[multiple].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}.input-lg+.form-control-feedback,.input-group-lg+.form-control-feedback,.form-group-lg .form-control+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback,.input-group-sm+.form-control-feedback,.form-group-sm .form-control+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.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 .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.333333px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}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:hover,.btn-default.active:hover,.open>.dropdown-toggle.btn-default:hover,.btn-default:active:focus,.btn-default.active:focus,.open>.dropdown-toggle.btn-default:focus,.btn-default:active.focus,.btn-default.active.focus,.open>.dropdown-toggle.btn-default.focus{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,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{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:hover,.btn-primary.active:hover,.open>.dropdown-toggle.btn-primary:hover,.btn-primary:active:focus,.btn-primary.active:focus,.open>.dropdown-toggle.btn-primary:focus,.btn-primary:active.focus,.btn-primary.active.focus,.open>.dropdown-toggle.btn-primary.focus{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,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{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:hover,.btn-success.active:hover,.open>.dropdown-toggle.btn-success:hover,.btn-success:active:focus,.btn-success.active:focus,.open>.dropdown-toggle.btn-success:focus,.btn-success:active.focus,.btn-success.active.focus,.open>.dropdown-toggle.btn-success.focus{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,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{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:hover,.btn-info.active:hover,.open>.dropdown-toggle.btn-info:hover,.btn-info:active:focus,.btn-info.active:focus,.open>.dropdown-toggle.btn-info:focus,.btn-info:active.focus,.btn-info.active.focus,.open>.dropdown-toggle.btn-info.focus{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,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{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:hover,.btn-warning.active:hover,.open>.dropdown-toggle.btn-warning:hover,.btn-warning:active:focus,.btn-warning.active:focus,.open>.dropdown-toggle.btn-warning:focus,.btn-warning:active.focus,.btn-warning.active.focus,.open>.dropdown-toggle.btn-warning.focus{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,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{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:hover,.btn-danger.active:hover,.open>.dropdown-toggle.btn-danger:hover,.btn-danger:active:focus,.btn-danger.active:focus,.open>.dropdown-toggle.btn-danger:focus,.btn-danger:active.focus,.btn-danger.active.focus,.open>.dropdown-toggle.btn-danger.focus{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,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:normal;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:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.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-property:height, visibility;-o-transition-property:height, visibility;transition-property:height, visibility;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.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}.dropup,.dropdown{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;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);-webkit-background-clip:padding-box;background-clip:padding-box}.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:normal;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{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-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-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-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-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-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.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-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;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="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{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-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.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}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].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}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control: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:normal;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="radio"],.input-group-addon input[type="checkbox"]{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:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-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:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-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:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{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{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{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:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.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:hover,.nav-tabs.nav-justified>.active>a:focus{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:hover,.nav-tabs.nav-justified>.active>a:focus{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:hover,.nav-pills>li.active>a:focus{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{text-align:center;margin-bottom:5px}.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:hover,.nav-tabs-justified>.active>a:focus{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:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-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{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.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-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{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-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{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;padding:15px 15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{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;margin-right:15px;padding:9px 10px;margin-top:8px;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>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{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{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:8px;margin-bottom:8px}@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 .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{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;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-right-radius:4px;border-top-left-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-left:15px;margin-right: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:hover,.navbar-default .navbar-brand:focus{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:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{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:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{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:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{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:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{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:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@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:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{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:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{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{content:"/\00a0";padding:0 5px;color:#ccc}.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;line-height:1.42857143;text-decoration:none;color:#337ab7;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{z-index:3;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.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-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-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-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.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:hover,.pager li>a:focus{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:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{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]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;color:#fff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{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{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-left:60px;padding-right: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>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{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:bold}.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{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.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{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,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,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-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,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.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-left,.media-right,.media-body{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{margin-bottom:20px;padding-left:0}.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-right-radius:4px;border-top-left-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:hover,button.list-group-item:hover,a.list-group-item:focus,button.list-group-item:focus{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .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:hover,button.list-group-item-success:hover,a.list-group-item-success:focus,button.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,button.list-group-item-success.active,a.list-group-item-success.active:hover,button.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active:focus{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:hover,button.list-group-item-info:hover,a.list-group-item-info:focus,button.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,button.list-group-item-info.active,a.list-group-item-info.active:hover,button.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active:focus{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:hover,button.list-group-item-warning:hover,a.list-group-item-warning:focus,button.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,button.list-group-item-warning.active,a.list-group-item-warning.active:hover,button.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active:focus{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:hover,button.list-group-item-danger:hover,a.list-group-item-danger:focus,button.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,button.list-group-item-danger.active,a.list-group-item-danger.active:hover,button.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active:focus{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,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.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-right-radius:3px;border-top-left-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-right-radius:0;border-top-left-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead: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-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.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 td:first-child,.panel>.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 td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th: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 th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.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 td:last-child,.panel>.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 td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th: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 th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.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 td:first-child,.panel>.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 td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.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 td:last-child,.panel>.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 td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.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 th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom: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>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{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 iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width: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:#0d8b97;border:1px solid #0a6d76;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.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;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);-webkit-background-clip:padding-box;background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px}.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-left:5px;margin-bottom:0}.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,0.5);box-shadow:0 5px 15px rgba(0,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-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:12px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.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{bottom:0;right:5px;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-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:14px;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;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{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;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,0.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform 0.6s ease-in-out;-o-transition:-o-transform 0.6s ease-in-out;transition:transform 0.6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.next,.carousel-inner>.item.active.right{-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);left:0}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);left: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;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-webkit-gradient(linear, left top, right top, color-stop(0, rgba(0,0,0,0.5)), to(rgba(0,0,0,0.0001)));background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-webkit-gradient(linear, left top, right top, color-stop(0, rgba(0,0,0,0.0001)), to(rgba(0,0,0,0.5)));background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;line-height:1;font-family:serif}.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%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,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-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right: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-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-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}th.visible-xs,td.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}th.visible-sm,td.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}th.visible-md,td.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}th.visible-lg,td.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}th.visible-print,td.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}} \ No newline at end of file diff --git a/infohub/static/infohub/bootstrap/fonts/glyphicons-halflings-regular.eot b/infohub/static/infohub/bootstrap/fonts/glyphicons-halflings-regular.eot index 4a4ca865d67e86f961bc6e2ef00bffa4e34bb9ed..b93a4953fff68df523aa7656497ee339d6026d64 100644 GIT binary patch delta 19999 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%0Ai7v0G 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 diff --git a/infohub/static/infohub/bootstrap/fonts/glyphicons-halflings-regular.svg b/infohub/static/infohub/bootstrap/fonts/glyphicons-halflings-regular.svg index e3e2dc73..94fb5490 100644 --- a/infohub/static/infohub/bootstrap/fonts/glyphicons-halflings-regular.svg +++ b/infohub/static/infohub/bootstrap/fonts/glyphicons-halflings-regular.svg @@ -6,224 +6,283 @@ - - - + + - - + + - - - - - - - - - + + + + + + + + + + - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/infohub/static/infohub/bootstrap/fonts/glyphicons-halflings-regular.ttf b/infohub/static/infohub/bootstrap/fonts/glyphicons-halflings-regular.ttf index 67fa00bf83801d2fa568546b982c80d27f6ef74e..1413fc609ab6f21774de0cb7e01360095584f65b 100644 GIT binary patch literal 45404 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

      PBK;&Wcg|NX{>QR@W3{K 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 diff --git a/infohub/static/infohub/bootstrap/fonts/glyphicons-halflings-regular.woff b/infohub/static/infohub/bootstrap/fonts/glyphicons-halflings-regular.woff index 8c54182aa5d4d1ab3c9171976b615c1dcb1dc187..9e612858f802245ddcbf59788a0db942224bab35 100644 GIT binary patch literal 23424 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 G`u_lkUM?>H literal 23320 zcmY&6mA1(8T6a0V( z7zzkXUYUXEN9+9I!ap!DFOd#1wlTB=0s{G=z_>rwLFyJd-Ppy62nY!Dzg$rNAC#b> zW_IQ_KN{(eU)_(Nsd6JjiMgTUPb}E#|M~#|A(>mdoBe3JKtOVEKtTU^2nd*oEldqf zfPj=PfBaZ}zy@NZ@n!KN0s$!#{qXEt`TP45!w50c8!{TL10RAG)dniu*zrR^LTrn}O+tRb0xd~0E&>H($0brSGJ*iX z8bUAslphEzmTHiWB72`anLv4VuEY~_ za}WVZu^zT;R-~y&T~BYSiJ>00^O~gpl9q$zHI%Y>Lhsr-MaOrb%y%q|(42pX<4bce z&%S(EIYGx}q8~@4pX*EKdS?h=SI&tEv`GGM8)AScL0;U}brn10v;~p2;1NOn2Um$W z*U=i%VuwBRz@Z11qKr(qgO8vr*&X5{?12dd{6*l`Yp`?k3MDcih%qI+g!qV2n61L{ zS-80y9H-NmrN`sSUC*p$lut-w`?nyb*goYXni_zf3okCBA{zrCwXDq^$DQB5U?DQ* z61o2X9r4;yA!5sN`)f6pe9e8pguH(cK5%0-vMf9zrWWth^A{_9wXmH0nW$}wo9hf@Mt&V*5m2_W0Zac{Bwl*3N0W}7D6V5mO|AbT zMePe7b5d1qntWOB)2(kfH3+1h@`qdCj$7%?Ws`6C=E;z?vBmFy(ZuU>?ZKAjdKnE_$3iyZHlp%_ z77-FteGS2x>7s==RC=EgNc20pi}B5ZYP?<*;Yn$7M)<7;<>9ljc|Q@}q1HAXA>?XX z{-<=FYU*8Yx_bmPn*eq|(6}#S=KV{`|BZ*Xn#BSEOxT0n<2%3UJglMVh`FJxT)N*_o6m(8iH0h%=F{CzZaZ8j3d^x{KT0bRC__^79ko z=tr+cA_{hBgbop+gr}pTjdh4lR9OGJYID{f-h7TdFVsTYrJ)sVL)@`Nes|mRJSCBQ z1vY;D{cTS=MKu(Wy%|e~Iy~QIi?KJEB~oXKHbERbMSWb} zZ$4oLo6Q7!JY7E&nSn99sadal3PMV~{548>MpAHY2H1T`ZcmF;%7p*Gd@)Z2X$V%V z$1bYU`a7{N-&8b(7EKxaD_#{2yNI&{t3rygLIQh8i%wdtQ^A4QWPw@AUkIZjStyRy zt6gfVP}$xz$w}4TO!~910gWc?ujr|I`%rxo*~ZRJj0)|c2kf0tbH}jLi*?h7#a}r#3UcIh%=Rq+9Oy<}9gOY2vy$@K}ixTio-4X=M1@9qI z^=K!qz=h?boc7!Dn&OoiZq*aBh4h7*kXhO z>pcXk->0DSLp`H8gAy`9imj3RrTwYMLn%~ax2R;y6z$S#bv?dXh$n!f{I%|F6CUzH zNglJr&iX(OdhO|M-zijiorLRikL!4b&v<-I;cb2U*9AhJqg6Km0|C@3UPi3VuIeHB zEvJkk^d768V;-U<9n39OEzwHebV z^!;=ohVM{+SKmNmc(fHuOajOg)eZg4gP9Z?_0r_5C&wd<_hxoo_+<48kwZJ{Y3kdj z-euRxbNtS4ORoUDw~*0{d?YbybVf*Z&j3f0Df|p6wtg}#){z60vHIVDYyvXYiqtw5fLstI@;wPh+Bd5ldW?|#AJXDCfR%eUYew_;&(+g6-=ThC?S3>8w7??8cY@rx zXANRWBOACbA6cC_l4+aF!&NSKMmjmK4PZoF7UG%C5 zf)X%cLC&;>^$NdUhi>}OaeOh-03Qt>c;rBMl8FXlh6u#+T;)aNQAM7iYm9MwQAwQ$ zauN?iXC->xfF|9A>Yn3rfOkVpm+8&z?LmtUcZTECdVP6@K8N`=NVn%wvgYT?wv(~@ zRQi1syDn_w+iAw6*B2j_C#*4Oa=3>>HsxLFzfc-lqHiBWPsG=v_Rqfna_4v6=XxDj zbWvX=bCj4jf>-mGLa)^qT)yEMN*AOa6}Y=z5r^W#5+eB*=NMYFLlxp|l;Umkrykmm z>1Pb@=d7ZMXh-p<@vNTD{%C%$y%YYN-VTD)5%>5QvQPlpLYJRSmulc?J zubo~#6g|MIS#tM^y?0~C`jU2#a#T$VEGW;6HZHFWLEd6C6gfhTw6Hw56Q8*V+~VWN z4AL!NdF6?QxaUpsR*ZThZ22BrG(+5-Ud8j`|8n^?HPZ7*MH$Y-GdTEy_<}Ip%UH`% zC_ybkuvZT`(*5-7zTSgt1y-AX_=4Vq{_y1PK|t=n8Jsz8N`x^1R#L(Hf(SZ(R}et= z20=K0`i!{GTB{~I3$HZ!fZ7PE0K3mgrlOj^=HLjmlzB{Q!INjU2`4JhvkVArhWI3g z2BFDRMNusx)0QK>n-{_BPLkO*tH?}~b^*t2 zL|B8@3a#it1GzFLG>-jntCpno1TF0OMs-3&ICPgAm$awK{?_0%(W?W=|3Ym<2B399 z6?sOv=odFeFq-4ZH~dK}*A#W0I_F%hOcy3B(B=(oS9N?rZK6R)u8SFgYl67%j$Vzn zT2com)G;k5ej>5&f(ldAjf;DQ6!5hOSn{C{3@HGgJfyHHbCwb;JWINl)t_@@KmMH+bk8Q`tU&fRBnQ(#)4NSadxDOZI(w zdDV`IZHTev{l3e|YJOjG)!*{Qd3Bbc-oK>W2LbR{;`&r7v=uuYN}Q!j?bR6qQf6%Z zD|U^HaP=Duw&<9^4wcHPM`Vo0d8#?cwduvt)W!CY2}SzBBsBVDmS^qNq)C$4z-w!v zu|}GDNU(nCqGP?m2nGh>so7Y#2jSAF;UD3l zTWTJlAQB4XoWDz=q%Vn+jEY#AwT@9A52;uB*W>Xje?f=`^s2DJ+s}6b zZHctO--vJs(vA6u2D!C~MMV%ZF_OWKERqY*L7bn~pu>emnX~};w>xKsx+HmlModD* zRe7jxvS`Tr6uHz_O`!|yld+VyK0FQd$icoJ&6I5J_C@tYl{!GM>wg8ezB^sMFG{SP z+~tO=8DM|68>>8kL{vLa+9stZVE2&^q(j&WrimlxADG12>h3l$)MnnoG~F+Q9%u&_RYNWV-S zu8Zij1T3udO7yF++y7qK8?@Qy;j&>d29gBr(=CZ4lKGZq^?3#ajS1CkdX7~BF>3+> zYZVG#qpmz`T?l5}q@jYe4}&tAuC*{c-?JynbwY*R0wc+;hotR!1CBsHEV}H{pEV_Q zQbs{v@#pEsI<-g|xh#rQJeXH}di`N|kNqjL$UE~3So5Z0bsl-UTxtBvq=J|gu+RPErd8o zq%Cu)1CPBz7A=EEzAUR|YC=IU9%hvt-M5s$vP}yYbrS8_xEfnDFCI~k&{z?w$lx zkHl$$>l6w9E<=%h&m}p0DcU+fGPM`d($iGo+S3fJhaypcIE2yU{5H<0HCgoFK{GLe zCVD+P9e_etX_H9_t6xc?c?>7@pb;TOf6%r&2oND`VL682Y@H zo9cs|v@$?BZbm;;TeI&1a|hDjryghe`LAHHYtRh=V`G;8&hH=u_R(Y1pv%n=LH^3^ zFkvIs>V~3aP^2c9bjt$HI!&KIsHF;<6GGV<&cs3&h&!7&F_0TJrW*V^F`?h4z4b9P z)shrVOIq;gnBtPE8xy|c?B+5Qhe9v=A{q0$_8i?gn>U-#3cMhdDV#r)gg$jBSHuwk zk}gryawT5)H|i8gP1CW0tGr3sKVvSH=C;mKYmExi&<#lKQbxbVfh72pcQ7oRvXB%= zj1OXzBoz0nqSwe)?dUE|N0dA`Jm0((=&k$p`L1c)=>Mo*a}LJx~+>;2tcjSh+G1pg5Y6PO}pj8+;DLXc4La-kzxi{dPSiJ7 z8JC>pyci_t`xsI3_*zD$W!*$<4tXVP|Lyd;LAI{(?h2Cw%dD@_;lH-jHe9S+i*4E z4mm+=yxP3;fjmRcM+tj5WK$Q-9_(!w&4?Zu{~+v=o|o`vvKeY_m&uw>iUOhrn)3ws&_6vxHpM+hCYx}osCc0Y-Tyq0z_HH?lw9s=QM+-Q{gQx~FocK9j!8!mtbNX&zBR0Xt$l zvErya$XNJ@m2B@ie45(Z(19?S0|j@Eej=zw0gE??YVlwp4LSl7VHUHoo|LraFf00W znbw<}e@IUzes(fu}n<{VdSNo|T`)7axnJ2E3 zGN-K>ywjN_qvqSYS+3(Tift}Ac+Th~V)w~#F13j;D~$iUE^?zyrm7R;K!FVAfwf4+ zgEe5#q65&2_@2P9Xi0@IzKKB$Mr=t77zjDw^ry*`L~i%3hjv^6l}?gMTjnmHPNyRD!RE? zVzeC>gkFuW>V5P|ms&5GT4O@NM-mhCx+a!f0)LQsDAs{!i(cE9Ov8j9Ot~S$SX^Tu zbvv@~cen9fE3YI>r2~|YyQVnWpZ-X~m^M6OE$L`m&MG`G=33X8DprYlBgvrAjN>#) zf7F5}TO}Od#i%Pvr08HxB1L|F7Lms;vt;^z`LYoE^HAlcM$*80N!_Nc@Z0C)>z37! zB*8pC&7s#0b$L(fb6zzb_{hxyz+_iYonkQLn|M^r48oOlXXt>e7{zFo03wLhcxL@> zruxmZD;ZM5U?3RR7ni`br#{#)H87#K@FBbE7!;=-Y}c+8!h3d5JExlz2JatQJ+?rH zEiUGqC0jaoW>(Evnh`H^?>C|E?;wdM>7y!8D4dVkC<+|T0zP?LNZT4#$T22k5m50< zzoALNpZ84Yo=WEiK^k;g##y>nq*73%RqJFJOX%P{Sin)USV69lwgt`-QDJjC{IgNf zBW4`*siNB=F5h|FpHc}mY9&H}jGvvlX!|~~dIc_J`?;(WsSic(jU>39iqS|Q7u!DA zY&kA%G@cdsQv^FWgQ+Nx#A;({7tI>&nigS1N0T`xz+mg6@_{zT%;E%P(``j&bsETN zs(q(bWF8KI1M_eY6S%3}4I-pbgJgDL2EYIzPp(Kd(4_CqWI0N zt8t_kb+H2&h#4kT$#q>Ac%Z2bj@0N+O;y@sWv$8hU9Zv@p#uT7sP~{kG6820-K~jc zzx+zAW+=CEi%kufkYzrAXi1hFg5D^8VfWJSQx~1y>x~0bBV$33&FY`a087m+i@@r# zv~L(PphOgimWm81wL^lXk96(eK$#U=hQ}pu<-Srb@X)RzEK4@vVL9cwNBv&D7`P0@ zqV@&7+T19`yV}oc>o1R%dLPHOtgykfkQ$mBKeZU*==5=O;{`t7RV`&nOFus5HWa@{ zXbhx+TZxRv=(Ko|DZe>7Tjhggvxn2ed0umrYSl8cq1^h1GLxv~Ovi$ld?|yHWQbL0 z!Ivh5s&TPz0K^%VfE05%mJqQKs?A%Hu%Xt@^>Aoa$L6|fp<>G;+%>slePPEnR_yRL zj;yc0lCyoP$Ic|g#bX(o<$00nsg*!S33aGHMx(FL1IZKmm2(3;)8v{BEh zq+0};_3dYnO)g&8rn2p~Esgh&5iy4}Tc`s#l(NQVP*B`-s(Tsgb%=E*x!`vNJk-`k z+fm(7Qcae_0=zlj<0~2F)s}a7tknTT`cdo_)g;9@CX6}Sx(tZ-vBXh9eV`-C^l3uT_&kk_ zy!QGr?i9qmGaJ`03`VTK^)eYd43pD#6!NwJr0B=zjQz5pDVIxqPspfGxc527cKuN} zM+02tzw?((Ojfsh0mh)!EsE8yz$@B*zv5LC{@~DSWie_CKtd_%3$Mw8a()p(IDD|g zE`aGjSXm`BggX|S0Iz8=DQwWq7Y>nH=l2gF6&gHY9=4{U@)*&>a5Lg$i6r`O!H}dD zW;VLr?c@ISTZz-X^w-r)NsJz*7Ik*4Ly0i!Bq{Zd;rF?m8fkO1OM@>WW%j&Gv#v`$ zQmZ$kLeIBScr38Jb@l%c_PQ|;xB~H7qh?jaoofQxl!Mou$divTfpW_5t{jt5n6rPK z!vRqg8v?Nc`M^e6lM(@2!!NA&BnKun1vVjc1z9YJv06oEUF=G;UtEZ%aSas1z8-O2 z9BC#xzszD?1bF!myHOXw5=A=9o9-@Lhm!h0YZ-|@A8@Y(+_Z-DK5aN{$p1>cump2t zD5Y<$oDGvcGH&@I&=`_@&z9%lM_#_W8iyXJa<&`Ydn;~#brX*PwN-j%3hf05d z4E%>Bj9t_c-iGDTJ%p5oMe%gVzvc6bd`PTb9cQF~$q=bA787VjPi04Chi`i>W<+{G zV&FRA7KPur^W&w!IseMOaI{i>RU}bnWQwl$BQA-{N7}-t4=-KVk!vbXQ}zLtKK~Vb zh}Ni+HS~8TjiAhC5SP%}5)++t1N`_`^O*%;^P^`Rj#KY=G1%z*MAySF&MiUH~wJ&BDU^kXcQH6%9!xbzqRA z*C;FT!ttCmLLmGAVU95En90d_(qX5~%fa`pstx}K4cq`D|L4WUM|^?pXIDSM7j{_` z3G3~Fb+5YFcta__mAzP+vqYM1(W%@8)d!*dz-)tf@tMWp!rn*|T0x9DwQmg`{~HF^ z(&{06L_~x$VO)QgY!}xSiz9L|mX(gredtzS?t3cy_RjmTIU(u5dB$Pw+b^CLxKo!Kal-ql57+p#JJ3zg*_!Lh#CTQlhLZaSdUpir$y9?7cH^D{5SFz4E4#R}~cZf9Y7m zo;9Cm&MV)C>%p+!bv-*M+$WJVT;|RqRPchoQ_7BbK-|yWM-<~FecpFY< z*+V%yqBEN@TuW|VvPKxu;wzn6PE#vLx(^m2Npl0_=R`(f{eE#>@hhO=C}MNbxWW_v z>i*?56p5poIt)%$`T(F>Fbvwm_u72fIj{*&-QjYl(EG&}&x2XCp-|gm&6LNw(*^~r z(;e^7)q{$HCsydP(lnZ{CMFoZw`Di*O0teoyeuOUSTp1qVs*`Z9<21;EeAe2nsvN~ zRC6*s$3cgHx807}TdF!K-J0iGN^SO{w>QZ;&Y$k3Kg?6j$YHFGxQg*a{%}-aq4xqy z&jBywOH07(H!X%N)*9k*pouLg-u)|*fP*&bSExgq7b56vts%pZKc$!0Wz)kTr{n^c zH0~1dFP!u<3h8{HY$Lt50id%$jqN@8k8{VALlSz2UVh`a-#R#>zHXSNNR|{7e9pN> z7TX5KSq#wFmVO-1xo)>HN)vR#Rlnv;&}%R75X^KT9xE{?m|>iz_BH-9O;l0+ZPl<= zgateSH#Dy&8cL!Z-sT5hq(D<^FoqY@mUzl=C-x$j>?y7nvAexvXwZ#MsHgqBZp zatbN4V_H3K-L2vU@+EGATIm6Ap`GU7lnAV|6g`8C(61y*zDel%2}VNAy1~`blPHN= zu~bPszDZI*Nw!P&qvtzvpA@&tGdJu;DIn1jLdX; z)t`xZwPI`TdB?s+nt}J71mU}hawwEbPnX$OL8-5nO5zHu%kT?MIW=*XjkB-H;p1>i zcVuPz(G&BP?D09Rzm-PH5sJ;n5|jQEen*(AWy!9%8%FrobT2yz?d&1r2KSS&4>U<6 zI`!cdm9dC1Hqn|R>+xX&B?|~3hd5zh)13!mfVsLczdYF0Z^iL|oZ=M%0c8`h0j{;h z%1hkP*~06j7+rI@eA;#HV5_3yPVSKp^*V2eP_Sfgqg3u-*%?R0LP3RyTYh<}z$74T zm;u}KQ$iP(LarIp;*m~l_iNZU>-f~@+~!>SGMv8xF)qs2Y$b}ymmJp+*51+kk=cjL zmrRQpnwbhoGj^9~t(5N((?x;Acs$~9zAnWpC^CsfbL2PPH_JB*;3Rr>5>gypdKu}@ z_u^!zU-oM)A~Rv>w@^Qe=A>t8Iv^I5(_hL|C*0994Dztje1-tP3-Ei}#z%jPDdt{8 zyj~NQD-NaTJp#iw;$eW^b71W?UD@s5BzgyHwZ@1vXRIB(t^Jc6R_Dv)Hs|F8qoLtu zkC$6KPc3aY4^Z{pf-Y8+AhHwBfE}WYF<334Vo!l}AXb%trV`AC8!T6My>xRvk#pm3 zHHM+JX=1+RLngN;k-3IQ<#A5MJ7DB2=>^LqDb1%kc#Q5A6%d%>IN;UIK4n-`2>D{q z6jHM}#0~z-%3!K9@Y#+aN0N<0nV7!}Yjdma*li{=yZCa;H1McT5{GWCXe?F`+{8IZy5ljQQS zrTFrqEl5LQ6y%wNh;`4Sr5J9RFfaH9Na!?n-MFD%$2Vk4(|tbc=g}P52_RgNSWcn3t)I333gCka0q_DoXC$EE|u?la)3Hi z^Oqsl%8F|h!WfxtA3&}E0KOg)%}(*;8p7JP~oIr7x~qr5ZS zt}-eG#D;|kb-q_a=YwMke!SFlTUXIIIyhgBr@r1$`M=v573zGUZ&Z;ovB#T+9BM0n zr7D53GV;cMPnitw@6~l#XLgD-r1|n4y?bO!UcEc(qc7(MCKr0=6j!>Gfu7UOSM}Wr zrxrvQMB^yRGbu2{3OLrjP=6`>V`nK;{YAu2$`B8FPF$7gZq2ZawtwRV0kK!LeuHJz zBRuR2nG8L&T7&sF(BmF^9-`K%l-a6BxnQhEsSCcMv@ca`7C+N|8~^)`NY6R>9&v-F zrSt9am3)7()aGkIp=6JF|$3I0`=vgS2}W>J>gIe0La)`lZ1P z{l;udc}QmIM(7D`(wZl?Lb}i=W9(rVd}caMm3YX@2^XEe7&6ov>SA_Ul!YAv^tDYe z*R}KK;n3W|(DgTksHFp3@6t-fBvNI)YrjgMY^JK*K9SzP;OKf3rVT zZIRx%tWtOEFkX+LaNh*i3kxphn^$o6AR{?)Vf=48wJF#hmJAL{4=%^PHvR5{s~IP{ zw@K5SuH&}_b#waDN@Dr*1#;8 zj3>L`zy2mj!ymgpko;mUZsF9%+di@q6&^JI&CNM|2-W!Zeqx=@JCWw~Na&^Xr+cBx zD~Z_rhQn8JeQezgl~_%EHY<}DHhMelQ2W>38M}*g^5Ct4+hNyYc-PQrKYdKg5LHHH z5W7c4sF^;~J5~Mpel;s1wg&NA+sZYw=yb=+oocgx@pdsA=k7k;S&^0Ye2PKV+jA=J z%kv8!s;L>%L)sb~z5JD`X-KkMJ5d1~ffCHpybzHPuu8Wkh9i;1AKMAU1s;ZClWgMl z9P`0tCm%NxKJ+&MOk+0dFd)syx<+DEDBOC1G?twC@TmJP@Pf+(*wj=;G#0iQZJ(iJ zhG-xA3G|5*R@}e@#7hh_*PQ0J_Ka#hcc~Q+8mb_($57A2Z^ikOt#!vf@PA|k3?1E5 z^UZ$&A+KqZAMh0`O@?fzgWeM%dCVoQ%|~*CFOh+?GLu=z8cs0Doi&=R*WpzS47aux zHba&$jRt-gFb4(L@D#uGjmM|c$++VCtQCqFUas=KKW6lql}beIi}Ay+xI^LtKc@0l zdkQ#o-z()ZN*r?{x*<KqloOmbT5w&V zwbjn3a$Q(Enfrp$2j4p_eha~MoJ&}&iUWxSZ!8q_P97wWkI`RGWaL1RonK|Uak^P; z{w86F#atZuy~}Jq{ejUdkdpr)fS;-)D&h^{m;kRv&q0P&gY>_Wn_t;WSnIeQ`eb z%#)mE*~XX(4i>^EwvF2`&wtc>49nS`qmL5rVz_@uPo?s)>dW#p*sb5eNQ$qmB5fE7 zIKEk*|9H&Y!}-D4T&BI9rH|YQxZHIugY!WQFWiyQn?n9k3;PL8)U< z#A$~V3iae6z(8e(o%*Jz6x-yjLA3G>j@cDD{8TQFa@~$UQzl;@bJcoH%=3~W6|DQs z(HWs+Dv4k7d(U{^^k~iOA&FEyEHm?ov{QGSJr>~ zNBu!tDZKyZ{}g5cj*I*BSypu7bHuIB>1sJ{JNP717@@1r>7Y4r23)bUfoFRm^)9*) zCp9u|gQ?d{lA>+D7QCSr-=sytp!RCmlefdPbI3o?<*$WGQBXkp!Cmif{c*L*AGg&b z?7DWdx+ZbqK6&wh=w7UbYfJvH%6U0zyA-;}t7CBq?(%dq3th6bFl7)PLYI4xVL;II zyHxo?4$HrM`P6?8Tvl|24X-t54n_i-h0-n0Sl27fDZZL8HpAEcQr6*yVHCb~N7E27 zmK=cCh>pD6WTW;ikgkvgiM7ROCf}QC3cT(BH$oGu-0t^8PgZ6MX?z=8Lz0ne4T4^V z-thAcyiPMh&#zu3J_ES$FBkO~$SuMt-s!u@48@57H?*$e8Pwbi2Yrp3CQGtR8@!yj zUk8vkyy#dDr0sf^D6wod7j5Ylf6w`wCmvcUyN^|w?dyUD_KL31 zE~V1>J!2e)z`E#xwN&7d0=DYa2DB6pQ4$wj;@8aSM@4AZA{vjr3qxAHqrY=7T1`94 z_r7;6x{PXo9hdnJ!N8{tBM9uaKE8=KN-T_n=P(rOra}Vi)`j2v%gIZ{7+g3|lAtj* zB}}a4stt3~a*NENyqPR5c(%njgkzR6v4J&RA53RN_zXRj1VRWa@ngnMMCvLZvQ@+s}}=U?P|DLxeem<(Nuv7p63NlkA7!CE10D3wO$!ANw9 zObXX`YL=R6%2TeGd1?xrLK$VEwP`qN7HPlo`MM}dK3I_H9Mzu;W}$)%JINEGUpF90 z#}mTOLB17SWhL}ZMRGTaFgmU`2O4g(>;@kprlF*Cp)kpy38(i>~14$R3s?6^?3 z(HgVQFov4jM7QWqadph`*vm$aIIXJNNcy|m2$G|ntBgb!GwWC48iMztD|o=(>;15q z{$%3Oyvm9@O`4JoB64cJ6IF%XU*;BiuoJW(Z#j^UH$l#9HR{Mm7GhSUp-f9TbS(>+ z=TBhELjbeJW#KE%-tr3Zh`nd{*Z|1O0F`(MTCf5%G2HfRAaIr0SmvO)Tb5xAR`)IS zDJQ*_aT_PknaBS3@{3I7may&O+zm8(y_ea0+%G2M5N-*A7TFy3Ev_pPhhj93^hy2p zsf~STscg0VHv6)-suJJ_HvfhYQrC_Zn#OPKnOTJx| zt$bef1E2v24uA^CoX;uvbNr#<^;$Bn%#1V#=IB2G9-e7lqg49ji0~i?uStqONO;%fa+^ReCL3RZjio@nXo^g1nNPbwp1HNQV$> z1@gTfZyF)87$l6~%5yxJnEQ+ie9+G%;f-}&?6HbOe(kPIzzE$iqX`vfok4&ai`W-d zwC99WD{QBt=6MXVD;D962#XX?i!3ihIshIg{q>fXgAMys=@kLkS%9d+mfwd@#_C~~ zWK@5#ngAyP8WOs%@7M-tVjQG={`OIT#6O?~USMV}Aqz>h#^!wFb!x$Ak5eY`gw_Il z+T)(XzI$10nIxlz0YQ2v4bhDugbSQ_y@s>>rHp1+Svi2@-tSsqlpIzzPTyUJ4&6Wg z8t%*#w>(z0UiMXQELXctsZ9~k5wCOwHVp$8E;=11PHAtA3;??YDwCu|jO0#YA&u$Y zH5r8Whl=eb)AhDqcB?eTs5~8M?tF{1{8~NvkvAAqv1XpE@W8WAi4NlSL<2eyn*gM< z`9H|9_I|T^m{J0!3b3`LzciFAtd2LRu7s*s_Jsb0!7S+S7aJc*lt;`*gA-fKO8ArY zhA?VR7)jaRX;6nU@n|8Tf?%{mBM3tZ{xr8|dm^KZpSP}F*K>^y1+c#*N_x*PnQV4j zHXXs6C)_oV)=7T8wRg}#7y$*Oxzi|WxACj3t`$g+Hqob;^h}z0MYNO*)*)W%TP2K^ z8+E9AzoFgl+*G|4FIloWVp$TG!&6mGHAR&+;NTh5J^p6y6{5nltCkJrWQ|oU6qW*h zPfOY$qZTp;a(A%n4fddVdJyiB=7!MR^#1%L6Aw9d{;jcxYG!qJqe2pMrVyVhg_AWH zCaVB55F%KKa5^A)lmMTPG=x(hh32&U*SA$xDMyd3{ZPxizi!QSz5K)*82;WGBaTay zHDeWU8ME{rnLTO@q8U-xW(Oe4ST5z)w)yoW?X}$W+~i-yIXAq7T_olt03# zG2Gu}eml^<1&ha=qIj=`nCg>Wm_0+Cwd6oS*LRkQkSgAw;gvpLKW`3noP`D1=r5(` zPz>bAt@<5_%*bgTP#IghY!XJ=NFJ98zDt@(K^*}B$ts!PZjYpvq%tq5kYKLcJ@r)h zpjGeWgspjG$}U5I3;E(wFu-T*ttBj99nkVSJy04B*>3M>M=4CJBW{W+wr zmo8Lbm?dVE#ijL><;n9dCt|#Od|9HFF4#}Y<2rV})IKejs~q4`MWlQNc41Kjp$r;F zAUY8dDHmc{hLF%=Kik+j1W{WEZP4aaE0T_9G2k3)50J+n4@!F~;6Mm#3~zA2!(uNW zD?3~9!k5Ezu$*P; z0Z-5cF&^e2ZT=G7;H2(U6=DL_gI^{}SNj?dg8|^Sxt0p`cq^jwVM;7!Xjm8d4}Ns& zKcd#kpeC&YrVPU?^63<(P>{Ui+6jp;gFDhm^1pecu3C8b+kR_Tdy{IMWKB?1fmzJA zRrWbi2iAWJf`OWX5*Mgp>n7+MnqV+8M&DPEmPa?H%ZJ7^zBIqoh9?*U3kCchz3T<( z{o=DphBZPs)&O&+xL<}PTrSUw@BBJF-j`J7B@go*T)LO-j{0ZZpPSq}+fSEg4@}1L zZ8|B8jgb2gyHh2Popw{~EdhN#pk1m(0#ygca8F4f!i2@Brzr~+t!U)sEME!yD(7c} zHIM`C5Sn4OHuPfASSw^KEK{5G&ZKT-udhQ|yIrv`02n2nEE6 zJaaj=cYtkxDp%*vn;v7!mw#(ERHUI8&%?XwWWwd^?J-?@A*9kw-cvd2{8XJT$}8H$!5 z(CR70IjoaC>DD~Sdvbq8(GW$Ab&QVqs>5qM-s&(pM zPqqe9RFj;kYc-8w?^V+V%7{u54k`7Ve?+hh+r~`oRnKXVB3p_X{b-SP*}HtZ{G!PA zYJH&DPN4_-LI0Qq?XoMhMUDvc#~1H5z9hRdmx!A;m8^?6m~Y-#b1hlP<)Eq8U>?U? zbrG~tojEl{f3~|C?x{5NaaOUOJ;yJ2hOz;`4;z|OgBGHrpdB>_F3<8WI*%OHZMd3j zy2oRMzZ)xk)fy^F3L0R20hg0paZ$rdG{I|!)H%|BW%n4OCnFJO{@5hlKEt@{ZF)bo zm3&_P62l@ToZ9vsZl7rqgY|j&J=M}0aCXo$QWJ`uVjhB(*uS+H^UDM}9(ER4+JpW&Q9Bny4m*?YQ~L|5@IZr?xwVdan$7a%9{gv7nROdai@`14 zG+-^|Z})4_OtE~I#aE~AS0(LCtNXU(!?C{8pLWYD$$@TV2HsDljoVJZ)B}69$9)?5 ziNy=R_Yv5a^;THLpxNLO zy{q2MTR&jkfAcY;d3}8rjNG3Cyi-4GYlGzJkoOXtWoKd{@;N{&Tdn@M?Y}BW7UX`* zGLMt1)|BC45~;O zYEbYSZ2{~+yv)QlkAVg?M_pjZ-!GCpjqn>zMaydQ%*lyE0`=2E_1o>1!sJ380i_My zB})!KN8vNL^sR*WbvXhjt`v!TIljZl+nd*r_Ksa?e3=XQf1O-aR2;mzg<{2Bixzj6 z!AsHN?hb=%ahKw5#bL1GFgQgEgBN$VL0hCa#pd##a~|%x_wD3M@@21YV9+3{YvzBcTXYf<5#f zw@nazWj_=%=H(>O2QSy@P=u8`{8`_bk}x;!P%>I-jlqoScuG}=Yua=oBl+#ICF~F+ znS@$6yzx^4vw5R$n+4Gep@PYrOxf{U!b#0SW0W|~0Cd`pgH+d9 zHF2Y}rq%oV6;IeW|n{J_U0dOcSD`AWh!D^dDYCb*c8^ladlx6e8v=7}U zpGCJ-DErivDK7O9PLYZ!KW$fh`Bl7Ghke)_A2^fB_mP3$@dtVOu4PdD;J9^%pt#r7 z9aUCSF@MAA8f69~*msmp;gomRMsbEyIuir9mRT;mS7@#2U>)4Yq%WOoTL5&hULy8K z>kDnMX|3fn-RNuw(0Sen*8dtIY+Cz>5U7I^6VXeO{2jLdd$q><>Xl&1Vu0p7fs&1| z$PbIJ`zdYzEI~m!7&#%G%tX&h5*}N*sl~^UqaR>nhkNBS8AZM}wh=ZX zrjv;)`|w%_y2#qZAId_YsddV+wJ2*du<$W+5t&FUFZk{rEi3ntr&SUnt|%1C=Jd5_ ze_CF4u9zeMdmT+erqTwwyjqRMS zXmyK_a6D!#O9m>R+q5u*q)F~4F&iq;iKuj7YDjg=gR!K0M@3p&cI+#a>do7bc+EFf zp}{hAArKj;X%SHZ6D9Rz4`|SSmahv#VAGy11cXaX)Mt;d8M1&}1|-hAvZVNiXA6o< z6cfy5!JL;QBlt}Ru*oAMLs~|FY5`ga72TPzIc9tZFpU~37kdem-*}k9(J*PIpJJ^J zsSU)i+YsOesy~Wy%t%w6zMqz(_qC;@@v>^vIJuyqXhxU}irkNHR{VlcZHy_J-_{`! z{(i{Z^`o?+;-T}NH3_eik^=@7nJ{&KH>NC>I8$+d06Es1h|Pqo^o{1;)^}_EW(|57 zyJj+53*y)m6e5F~AR#?Ia_O;t0+cCf@_;lqd9@>cWM%$cNkbgsDZ7Cp`OsmBv5a=TQADA0^??l-fO1^j=fqzmv>$Ik zsF<+b%&B*pk!HX9Wifnau{En>S<+**we#g+tIq++C!fFshl@IZ%_AS&j%yNkj=w#j zV1zL4>BCBv?8m!_A8vU5w_+jRJAUa*K$Sh=>u;o)@%gZm(Hl#>>H9yA=VDeWW`zerl}&-1icy~%Cs2WRZT1JiK;)SUZQ>Vwq?HIZ#4y{7%`Ht@uU9-2mT?U8mz zC94OXy-c}dfYYZ@TnK!7OnYwUnU#=S)k-Tj1Py{Y_*g>!$igUn_8Hg?Yd`YAZ|zO)ET;+xY)CD|&4M8hSGJ5rwlLozN)`xJkphmTWhnkH7R zp|GN?86tSl;KdX2OoQGhRYBxMNYX@MpSn5D7F}DSPf1*q`Ib#*a4Jg@qHh z`7qyVkKaMCcRemWNY651aHvi)Dt;N!*0nRH%gv3csv7=?{>O*|2rMzztJ4FC53iHh~I24S*ZN8u3B45qTO2k zV#a%2-hio? zIFEIohf8EYWRDv0QIK6XdRv9JD+t>+-4?eH^&08HLs(EaIj}>ufdPG-&FK`ox(hP) zSX*Zqbos^?mzT7`kU=2R(_sFto#;e1-jS!3{wMk2OMcoJ>~6zIk%mvT-Jh7Kvbt$B z8|rO?J^g2Xr^H3M{Vu`P<)l*|Vr*E1X<+$j`p8kgt6ScMbN952xjmdzc;`UuBmU19zH1 zdQm<7)we%}!ruutZS5wmd;bx?EJ416t*z8Mi{3Jr!!9It;_W3U$&c}W?2NupfPAbz zaEvS>tF=;!K5Ao~-wL{`AaKW`2vX9W!v);+3Ne%UcVx zb;L=lm)%rYtA=x^cwa@f^IsmG_fHBMF!yLCJ+BFOHR>7stJd)?=Nxz%8iP-Ve6eSZD~t{%G|HvhpWj*; za3=~ov&HyCmD2vW$N+mUE$10$G3&6M?QY&iR^o`>Vh|lw=YCxOOE?w`X@(U<9Y7~6 z)Fcq!<`YOUk`P*#e17Azvnu6Onjf2;iYsll!t!`CbngkGOAaC^m4^RW((d+S-n)L~ zTM!mauKzQ?74*h_S1@6)A_2|}RmHj8#A&~vV*Vg@W*Y<^Q_2%(ZD@hdlKyCe zl)xetJ8!pZ#}qf;Cj>*iNq*>30qx?euIoKYV8uSrbVuX;KB~UnQ#KvGL+w`BNcSS1 z;U~2{1T}vKDOh?GjZqA^@8P+OEsh={qVYmQ$vY&4jYp=IpNGGesr;aBWx6o41JoSQ z(}BH4cv2?sB~?BFm6;E1bvk7aC#n*P%Oi?dG5L^1-hlm5(P&r2+cnG+!{_XV`;L8< zl|p)Pedy^d3gl4Zq{eg%;hsN&VW1 z*YjjpggMwY-|~3Adr8jW^cl@Ov{4xMvHHP;dHlW{U@^uuI}B#!zEBT+oebadmu;(T zo?I5REG^zcKLB?tC^&z^j$_l$2Lu>djULQa(#{(k8C0@jcH@Y5plQC>XSdZR<%2Fn zC1CnY9?x1zI@i^uFuX5uMtLaq!#%??TkQR2I!ifI;x}j8 zfr`BP^Q6sA8vDu}yITqBe`9jn(s4p+U@XAi4YXGwT!~ej6K_%!Fo)U1FJx5?IX7s? znI|z&$~=$$T+LNGw@LY9(K6|S?R%;K9(2@!slJPxmJQWG-*CpPI!DGkfnTM3=U`@k zo*N7*koGrw`pli4^pJpjgSMLFVm&}>!aSM4cPn7hzsL14QkK>UK(EW*q=T~B>6G2r z3kc0PU=Gmf_i1!^$IwY;XsZc*z39uQZd1T0?3v{XK|jR#Tw@inoudHrzw!~8x`ZUL zP>9mhb4GJ95$7l35USY0dK*R}JR4u>ysHdTTaV{r`q%*N4gv7}Dp8PMMD8}ve;U>< zz?5tAj*Jp>e1)7Dm#5|^+uIQ)R zX62|+|J^j_h#O};zES66?fadp5IKr-?2tmw=@pHfATcp)iM6Rfhw?q^hF;g%B>Ngy zio;8u$*OB7`R;LZ8jGhZ+?gbNu(sYscLxZv$G)#thMhWlfXW2Q$W_rJ(Q!NDXH0+x zQ3s->rPUy=JY3Vfy|$uMz(uPW}@g0hNlv$ z8ijAn!zVyZm6Y}Z3dOh3D#DU@xDFGReL@V#ku=QZMao^QT&DAIy!9xSy^UP-`SW&!tYS7JG zFuK6m-6-0VSp-+>X2;maXQ{4IlvcA2;7P8*nSegnv|P;nf$F9NvbhM?*;a6o)S^Gb z(#qjN-*PB$lw~&sFU;|DeLP1Jbw(%3@f$Qif%2~O;`X-ZWzTE(*kP+j%s0<2)Gc{o zZK-afhs+SDT!8Ina4zgiAp9*+$_7H7)cTEKJW8+e^gJKxMz$6cypGY^89fs|HazKi z9n3p~+HR|@$_yMOa9sUnF;{1K)uoFj5JlS{O;LE*{bHusUdI3Tf@H8^QTqikAog%~ zKpdW@gb&u4i17=8{|9yEsYL~NCnUb3#Jq@Qp#7zhik~?7U0OP-<_c7yiHiuw$`g5h z4Dk+W4~Sojj=p;}luTuL6Lg+6F>9i|YRt#X8cuo(eUrk>Z>~;aJ7ZEaCnWA`MdBc) zfcc&Z3TO&v%@gFl5^ijq;B^ zvz8RN(2l6Y91W9g(>MrZChD2F_&#rCv~!t_YmXK2dn;Sfp`KiR*b4t{fjQf3Q%`r#62E zj5SJx>6Fh)rVp`o2&;!MR!DuBI_q1wKrBVwev-|v@UfT;AjKp)rCR(I^k*jgDeg(( zdIc?W4ny#lvCc_WrNwMjR|zJNNMLrso)T%|FFxc4pSXieYJ+Job9`0RJB;*H!b0G7 zyjcJul}ATXgRQD@Yuqc@Nx`3oT8^GKT7Y2wB1^J~i?05JS~|{5gv0O!nY8;jhq0iY zVPoNDo!<0;UZgQ{97H7O8$7r_f}$GyC*2ad(Cb5O_SsS6e2xlbCFI@169mKacNBKf zncO?#D0m>Z?KHU#0TyrHUQLXd?I=E6L`*jy4f(hrAVIealGr`&NqObgCPsaV$ z8;05!V_^4BID!xGSMV_+$cnGE^*&HvV`wNmYWa_4B{2+)8oakTZumHz++1AiUv>v2 z#nF>*L#C+#6)*VlrjjSHLTcbM41+%nJ9?1D{^dNxjG)t8k0`ncWIu@OM^XynqfH0G z=WwG`Md9|NH0e)Y7u}|NWi1mh^%BJSW&Nd4yG7L! zA@u}#ogp?Nh4ArWVO%kyr}loh$H1|nzQ_RWz(EfYHvCCq4=quN)z(Gd%sNZ1qRFGv z^hc>BnG`qrT+|>4Uw)fXDcX!5DHZN5M4oHh9*!Q7CqcvjL}A1_)JxPVR25u2+)p?i^lS|4 zjQzB!bd8Ey${wkDsmttcR2Kpl#CSw_%6N}-o^&?yFDaL)RVk|sp31*snxmUTn+rX1 zuLX`#W=*Z`t%|L_j&!B*r;5=rQZLcp$!;nKg+9Uml|yqxGeC1j^F_la5N8H5Q>wdb z2p1WZcd5uoTc?ikYU3_oEdZ)=wYDl{Dm^PsHT{bw%L~eaR3K8cGL})_vJVJrMQa6D zNmp~5gOA&f#-}&RAC)+jT~aqW16dJJ!<{1SBRwNC-+@s#0J0xpc8U*({ev?ecGPiyM}y+{LPI^Pz?Ji3a8#5efn?b(KWc-fBU|^ znzO>c4x)cqC;rQm)MvF;V?w20k|d9a4=;gCLFjI~FAkIXegCKr4lG7?rbLS=Ln@|L z3$L)>=Fje6xLl#+7Nq=-S)MTw-AEsaotO9R?|`NzO}OzLB(ed{M5IYv+ZmE2)-yjn z2;LdNB6l201nn}Usb78XPvsv(=a!oOv=Mt%G*z0SZdP*I7d0QUxQDKO-T~4G=ztAc z@B5-Vu`Zg*ttfNbRp&NiZ?^jV+^pKthCKh^v*imA8R6#*MAthXKqK*C3<_ro+!3&|sV3VO#qfx35<~sF#wVm#wXr zv7ndFub0-Mm+PsQd81c|xtyG^oTa>+{`$UVUrwz(!b9^**P7>RzFx_3TK;;vTtKm$ zGI}yV@QugpOa4lP@k+wRO1RicT=z;;;7ZanAOryr9S->N5fBdngwX{r(}c7_!*5CkfA>g#46{`oCAdW=8fv-O$1Et7)?S0IJTuYb}cw|G&rE{b=#ln zcJ1qS4CYi+WlZDI*ue}(LFN#t^cb$&^Ceg#i;iA!~bT6jrXc!gwoNoab7xphgg zb%h{ti7#=5-h273_iFgwj`wgXy8!hHIC13FsTn2m{qdX#eajU}YW!4kITQvWO?tT;Vf8g(x{~xTU8MmMO%erSx?CP6!SO0-5{u$k4 zCf4#NV_{_?ECrJF}4UgOzZ`I+?ZFg9Uc||hEIS~1iw|&Yk-GO)NhbQ mX4Rts_`b}WQGgXi46R*CHJ}6r+;}OrvwA{_SY+o zK)H-vy{l!P`+NG*`*x6^PGgHH4!dsolgU4RKj@I8Xz~F6o?quCX&=VQ$Q{w01;M0? zKe|5r<_7CD z=eO3*x!r$aX2iFh3;}xNfx0v;SwBfGG+@Z;->HhvqfF4r__4$mU>Dl_1w;-9`~5rF~@!3;r~xP-hZvOfOx)A z#>8O3N{L{naf215f>m=bzbp7_(ssu&cx)Qo-{)!)Yz3A@Z0uZaM2yJ8#OGlzm?JO5gbrj~@)NB4@?>KE(K-$w}{};@dKY#K3+Vi64S<@!Z{(I{7l=!p9 z&kjG^P~0f46i13(w!hEDJga;*Eb z`!n|++@H8VaKG<9>VDh(y89J#=;Z$ei=GnD5TesW#|Wf)^D+9NKN4J3H5PF_t=V+Z zdeo8*h9+8&Zfc?>>1|E4B7MAx)^uy$L>szyXre7W|81fjy+RZ1>Gd}@@${~PCOXo) z$#HZd3)V3@lNGG%(3PyIbvyJTOJAWcN@Uh!FqUkx^&BuAvc)G}0~SKI`8ZZXw$*xP zum-ZdtPciTAUn$XWb6vrS=JX~f5?M%9S(=QsdYP?K%Odn0S0-Ad<-tBtS3W06I^FK z8}d2eR_n!(uK~APZ-#tl@SycxkRJ@5wmypdWV{MFtYBUY#g-Vv?5AEBj1 z`$T^tRKca*sn7gt%s@XUD-t>bij-4q-ilku9^;QJ3Mpc`HJ_EX4TGGQ-Og)`c~qm51<|gp7D@ zp#>Grssv^#A)&M8>ulnDM_5t#Al`#jaFpZ<#YJ@>!a$w@kEZ1<@PGs#L~kxOSz7jj zEhb?;W)eS}0IQQuk4~JT30>4rFJ3!b+77}>$_>v#2FFEnN^%(ls*o80pv0Q>#t#%H z@`Yy-FXQ9ULKh{Up&oA_A4B!(x^9&>i`+T|eD!&QOLVd(_avv-bFX~4^>o{%mzzrg_i~SBnr%DeE|i+^}|8?kaV(Z32{`vA^l!sp15>Z72z52FgXf z^8ZITvJ9eXBT1~iQjW|Q`Fac^ak$^N-vI^*geh5|*CdMz;n16gV_zk|Z7q8tFfCvU zJK^Pptnn0Rc~egGIAK}uv99VZm2WLPezQQ5K<`f zg{8Ll|GioPYfNheMj-7-S87=w4N0WxHP`1V6Y)0M&SkYzVrwp>yfsEF7wj&T0!}dB z)R~gGfP9pOR;GY_e0~K^^oJ-3AT+m~?Al!{>>5gNe17?OWz)$)sMH*xuQiB>FT2{i zQ>6U_8}Ay~r4li;jzG+$&?S12{)+<*k9 z<^SX#xY|jvlvTxt(m~C7{y{3g>7TX#o2q$xQO|fc<%8rE@A3=UW(o?gVg?gDV!0q6O!{MlX$6-Bu_m&0ms66 znWS&zr{O_4O&{2uCLQvA?xC5vGZ}KV1v6)#oTewgIMSnBur0PtM0&{R5t#UEy3I9) z`LVP?3f;o}sz*7g5qdTxJl^gk3>;8%SOPH@B)rmFOJ)m6?PlYa$y=RX%;}KId{m9R#2=LNwosF@OTivgMqxpRGe}5=LtAn?VVl6VWCFLD z7l#^^H8jY~42hR)OoVF#YDW(md!g(&pJ;yMj|UBAQa}UH?ED@%ci=*(q~Opn>kE2Q z_4Kgf|0kEA6ary41A;)^Ku(*nirvP!Y>{FZYBLXLP6QL~vRL+uMlZ?jWukMV*(dsn zL~~KA@jU)(UeoOz^4Gkw{fJsYQ%|UA7i79qO5=DOPBcWlv%pK!A+)*F`3WJ}t9FU3 zXhC4xMV7Z%5RjDs0=&vC4WdvD?Zi5tg4@xg8-GLUI>N$N&3aS4bHrp%3_1u9wqL)i z)XQLsI&{Hd&bQE!3m&D0vd!4D`l1$rt_{3NS?~lj#|$GN5RmvP(j3hzJOk=+0B*2v z)Bw133RMUM%wu_+$vbzOy?yk#kvR?xGsg-ipX4wKyXqd zROKp5))>tNy$HByaEHK%$mqd>-{Yoj`oSBK;w>+eZ&TVcj^DyXjo{DDbZ>vS2cCWB z(6&~GZ}kUdN(*2-nI!hvbnVy@z2E#F394OZD&Jb04}`Tgaj?MoY?1`{ejE2iud51% zQ~J0sijw(hqr_Ckbj@pm$FAVASKY(D4BS0GYPkSMqSDONRaFH+O2+jL{hIltJSJT~e)TNDr(}=Xt7|UhcU9eoXl&QZRR<9WomW%&m)FT~j zTgGd3-j}Uk%CRD;$@X)NNV9+RJbifYu>yr{FkO;p>_&njI> zyBHh_72bW;8}oGeY0gpHOxiV597j7mY<#?WMmkf5x~Kfk*re(&tG_mX<3&2cON*2u%V29tsXUv{#-ijs2>EuNH-x3) zPBpi+V6gI=wn}u164_j8xi-y(B?Au2o;UO=r6&)i5S3Mx*)*{_;u}~i4dh$`VgUS- zMG6t*?DXDYX0D2Oj31MI!HF>|aG8rjrOPnxHu4wZl;!=NGjjDoBpXf?ntrwt^dqxm zs(lE@*QB3NH)!`rH)5kks-D89g@UX&@DU9jvrsY)aI=9b4nPy3bfdX_U;#?zsan{G>DKob2LnhCJv8o}duQK)qP{7iaaf2=K`a-VNcfC582d4a z>sBJA*%S|NEazDxXcGPW_uZ&d7xG`~JB!U>U(}acUSn=FqOA~(pn^!aMXRnqiL0;? zebEZYouRv}-0r;Dq&z9>s#Rt1HL`0p4bB)A&sMyn|rE_9nh z?NO*RrjET8D4s(-`nS{MrdYtv*kyCnJKbsftG2D#ia@;42!8xd?a3P(&Y?vCf9na< zQ&Ni*1Qel&Xq{Z?=%f0SRqQt5m|Myg+8T=GDc)@^};=tM>9IDr7hdvE9-M@@<0pqv45xZTeNecbL- zWFQt4t`9>j8~X%lz}%We>Kzh_=`XO}!;4!OWH?=p*DOs#Nt({k^IvtBEL~Qafn)I^ zm*k{y7_bIs9YE}0B6%r`EIUH8US+MGY!KQA1fi-jCx9*}oz2k1nBsXp;4K<_&SN}}w<)!EylI_)v7}3&c)V;Cfuj*eJ2yc8LK=vugqTL><#65r6%#2e| zdYzZ)9Uq7)A$ol&ynM!|RDHc_7?FlWqjW>8TIHc`jExt)f5W|;D%GC#$u!%B*S%Z0 zsj&;bIU2jrt_7%$=!h4Q29n*A^^AI8R|stsW%O@?i+pN0YOU`z;TVuPy!N#~F8Z29 zzZh1`FU(q31wa>kmw{$q=MY>XBprL<1)Py~5TW4mgY%rg$S=4C^0qr+*A^T)Q)Q-U zGgRb9%MdE-&i#X3xW=I`%xDzAG95!RG9)s?v_5+qx`7NdkQ)If5}BoEp~h}XoeK>kweAMxJ8tehagx~;Nr_WP?jXa zJ&j7%Ef3w*XWf?V*nR)|IOMrX;$*$e23m?QN` zk>sC^GE=h6?*Cr~596s_QE@>Nnr?{EU+_^G=LZr#V&0fEXQ3IWtrM{=t^qJ62Sp=e zrrc>bzX^6yFV!^v7;>J9>j;`qHDQ4uc92eVe6nO@c>H=ouLQot``E~KLNqMqJ7(G+?GWO9Ol+q$w z!^kMv!n{vF?RqLnxVk{a_Ar;^sw0@=+~6!4&;SCh^utT=I zo&$CwvhNOjQpenw2`5*a6Gos6cs~*TD`8H9P4=#jOU_`%L!W;$57NjN%4 z39(61ZC#s7^tv`_4j}wMRT9rgDo*XtZwN-L;Qc$6v8kKkhmRrxSDkUAzGPgJ?}~_t zkwoGS4=6lsD`=RL|8L3O9L()N)lmEn-M15fRC{dhZ}7eYV%O-R^gsAp{q4 z!C1}_T8gy^v@SZ5R&Li5JMJy+K8iZw3LOGA0pN1~y@w7RRl#F()ii6Y5mr~Mdy@Kz z@FT4cm^I&#Fu_9IX(HAFP{XLbRALqm&)>m_we>a`hfv?eE|t z?YdDp2yAhj-~vuw^wzVDuj%w?exOcOT(ls(F*ceCe(C5HlN{lcQ;}|mRPqFDqLEzw zR7ldY+M6xe$$qLwekmk{Z&5cME$gpC?-8)f0m$rqaS|mj9ATNJvvyCgs(f2{r;2E!oy$k5{jik#(;S>do<#m0wVcU<}>)VtYmF9O0%(C>GDzPgh6X z9OkQLMR~y7=|MtaU!LDPPY7O)L{X#SC+M|v^X2CZ?$GS>U_|aC(VA(mIvCNk+biD| zSpj>gd(v>_Cbq>~-x^Y3o|?eHmuC?E&z>;Ij`%{$Pm$hI}bl0Kd`9KD~AchY+goL1?igDxf$qxL9< z4sW@sD)nwWr`T>e2B8MQN|p*DVTT8)3(%AZ&D|@Zh6`cJFT4G^y6`(UdPLY-&bJYJ z*L06f2~BX9qX}u)nrpmHPG#La#tiZ23<>`R@u8k;ueM6 znuSTY7>XEc+I-(VvL?Y>)adHo(cZ;1I7QP^q%hu#M{BEd8&mG_!EWR7ZV_&EGO;d(hGGJzX|tqyYEg2-m0zLT}a{COi$9!?9yK zGN7&yP$a|0gL`dPUt=4d^}?zrLN?HfKP0_gdRvb}1D73Hx!tXq>7{DWPV;^X{-)cm zFa^H5oBDL3uLkaFDWgFF@HL6Bt+_^g~*o*t`Hgy3M?nHhWvTp^|AQDc9_H< zg>IaSMzd7c(Sey;1SespO=8YUUArZaCc~}}tZZX80w%)fNpMExki-qB+;8xVX@dr; z#L52S6*aM-_$P9xFuIui;dN#qZ_MYy^C^hrY;YAMg;K`!ZpKKFc z9feHsool)`tFSS}Su|cL0%F;h!lpR+ym|P>kE-O`3QnHbJ%gJ$dQ_HPTT~>6WNX41 zoDEUpX-g&Hh&GP3koF4##?q*MX1K`@=W6(Gxm1=2Tb{hn8{sJyhQBoq}S>bZT zisRz-xDBYoYxt6--g2M1yh{#QWFCISux}4==r|7+fYdS$%DZ zXVQu{yPO<)Hn=TK`E@;l!09aY{!TMbT)H-l!(l{0j=SEj@JwW0a_h-2F0MZNpyucb zPPb+4&j?a!6ZnPTB>$t`(XSf-}`&+#rI#`GB> zl=$3HORwccTnA2%>$Nmz)u7j%_ywoGri1UXVNRxSf(<@vDLKKxFo;5pTI$R~a|-sQ zd5Rfwj+$k1t0{J`qOL^q>vZUHc7a^`cKKVa{66z?wMuQAfdZBaVVv@-wamPmes$d! z>gv^xx<0jXOz;7HIQS z4RBIFD?7{o^IQ=sNQ-k!ao*+V*|-^I2=UF?{d>bE9avsWbAs{sRE-y`7r zxVAKA9amvo4T}ZAHSF-{y1GqUHlDp4DO9I3mz5h8n|}P-9nKD|$r9AS3gbF1AX=2B zyaK3TbKYqv%~JHKQH8v+%zQ8UVEGDZY|mb>Oe3JD_Z{+Pq%HB+J1s*y6JOlk`6~H) zKt)YMZ*RkbU!GPHzJltmW-=6zqO=5;S)jz{ zFSx?ryqSMxgx|Nhv3z#kFBTuTBHsViaOHs5e&vXZ@l@mVI37<+^KvTE51!pB4Tggq zz!NlRY2ZLno0&6bA|KHPYOMY;;LZG&_lzuLy{@i$&B(}_*~Zk2 z>bkQ7u&Ww%CFh{aqkT{HCbPbRX&EvPRp=}WKmyHc>S_-qbwAr0<20vEoJ(!?-ucjE zKQ+nSlRL^VnOX0h+WcjGb6WI(8;7bsMaHXDb6ynPoOXMlf9nLKre;w*#E_whR#5!! z!^%_+X3eJVKc$fMZP;+xP$~e(CIP1R&{2m+iTQhDoC8Yl@kLM=Wily_cu>7C1wjVU z-^~I0P06ZSNVaN~A`#cSBH2L&tk6R%dU1(u1XdAx;g+5S^Hn9-L$v@p7CCF&PqV{Z?R$}4EJi36+u2JP7l(@fYfP!=e#76LGy^f>~vs0%s*x@X8`|5 zGd6JOHsQ=feES4Vo8%1P_7F5qjiIm#oRT0kO1(?Z_Dk6oX&j=Xd8Klk(;gk3S(ZFnc^8Gc=d;8O-R9tlGyp=2I@1teAZpGWUi;}`n zbJOS_Z2L16nVtDnPpMn{+wR9&yU9~C<-ncppPee`>@1k7hTl5Fn_3_KzQ)u{iJPp3 z)df?Xo%9ta%(dp@DhKuQj4D8=_!*ra#Ib&OXKrsYvAG%H7Kq|43WbayvsbeeimSa= z8~{7ya9ZUAIgLLPeuNmSB&#-`Je0Lja)M$}I41KHb7dQq$wgwX+EElNxBgyyLbA2* z=c1VJR%EPJEw(7!UE?4w@94{pI3E%(acEYd8*Wmr^R7|IM2RZ-RVXSkXy-8$!(iB* zQA`qh2Ze!EY6}Zs7vRz&nr|L60NlIgnO3L*Yz2k2Ivfen?drnVzzu3)1V&-t5S~S? zw#=Sdh>K@2vA25su*@>npw&7A%|Uh9T1jR$mV*H@)pU0&2#Se`7iJlOr$mp79`DKM z5vr*XLrg7w6lc4&S{So1KGKBqcuJ!E|HVFB?vTOjQHi)g+FwJqX@Y3q(qa#6T@3{q zhc@2T-W}XD9x4u+LCdce$*}x!Sc#+rH-sCz6j}0EE`Tk*irUq)y^za`}^1gFnF)C!yf_l_}I<6qfbT$Gc&Eyr?!QwJR~RE4!gKVmqjbI+I^*^ z&hz^7r-dgm@Mbfc#{JTH&^6sJCZt-NTpChB^fzQ}?etydyf~+)!d%V$0faN(f`rJb zm_YaJZ@>Fg>Ay2&bzTx3w^u-lsulc{mX4-nH*A(32O&b^EWmSuk{#HJk}_ULC}SB(L7`YAs>opp9o5UcnB^kVB*rmW6{s0&~_>J!_#+cEWib@v-Ms`?!&=3fDot`oH9v&$f<52>{n2l* z1FRzJ#yQbTHO}}wt0!y8Eh-0*|Um3vjX-nWH>`JN5tWB_gnW%; zUJ0V?_a#+!=>ahhrbGvmvObe8=v1uI8#gNHJ#>RwxL>E^pT05Br8+$@a9aDC1~$@* zicSQCbQcr=DCHM*?G7Hsovk|{$3oIwvymi#YoXeVfWj{Gd#XmnDgzQPRUKNAAI44y z{1WG&rhIR4ipmvBmq$BZ*5tmPIZmhhWgq|TcuR{6lA)+vhj(cH`0;+B^72{&a7ff* zkrIo|pd-Yxm+VVptC@QNCDk0=Re%Sz%ta7y{5Dn9(EapBS0r zLbDKeZepar5%cAcb<^;m>1{QhMzRmRem=+0I3ERot-)gb`i|sII^A#^Gz+x>TW5A& z3PQcpM$lDy`zb%1yf!e8&_>D02RN950KzW>GN6n@2so&Wu09x@PB=&IkIf|zZ1W}P zAKf*&Mo5@@G=w&290aG1@3=IMCB^|G4L7*xn;r3v&HBrD4D)Zg+)f~Ls$7*P-^i#B z4X7ac=0&58j^@2EBZCs}YPe3rqgLAA1L3Y}o?}$%u~)7Rk=LLFbAdSy@-Uw6lv?0K z&P@@M`o2Rll3GoYjotf@WNNjHbe|R?IKVn*?Rzf9v9QoFMq)ODF~>L}26@z`KA82t z43e!^z&WGqAk$Ww8j6bc3$I|;5^BHwt`?e)zf|&+l#!8uJV_Cwy-n1yS0^Q{W*a8B zTzTYL>tt&I&9vzGQUrO?YIm6C1r>eyh|qw~-&;7s7u1achP$K3VnXd8sV8J7ZTxTh z5+^*J5%_#X)XL2@>h(Gmv$@)fZ@ikR$v(2Rax89xscFEi!3_;ORI0dBxw)S{r50qf zg&_a*>2Xe{s@)7OX9O!C?^6fD8tc3bQTq9}fxhbx2@QeaO9Ej+2m!u~+u%Q6?Tgz{ zjYS}bleKcVhW~1$?t*AO^p!=Xkkgwx6OTik*R3~yg^L`wUU9Dq#$Z*iW%?s6pO_f8 zJ8w#u#Eaw7=8n{zJ}C>w{enA6XYHfUf7h)!Qaev)?V=yW{b@-z`hAz;I7^|DoFChP z1aYQnkGauh*ps6x*_S77@z1wwGmF8ky9fMbM$dr*`vsot4uvqWn)0vTRwJqH#&D%g zL3(0dP>%Oj&vm5Re%>*4x|h1J2X*mK5BH1?Nx_#7( zepgF`+n)rHXj!RiipusEq!X81;QQBXlTvLDj=Qub(ha&D=BDx3@-V*d!D9PeXUY?l zwZ0<4=iY!sUj4G>zTS+eYX7knN-8Oynl=NdwHS*nSz_5}*5LQ@=?Yr?uj$`C1m2OR zK`f5SD2|;=BhU#AmaTKe9QaSHQ_DUj1*cUPa*JICFt1<&S3P3zsrs^yUE;tx=x^cmW!Jq!+hohv_B> zPDMT0D&08dC4x@cTD$o1$x%So1Ir(G3_AVQMvQ13un~sP(cEWi$2%5q93E7t{3VJf%K? zuwSyDke~7KuB2?*#DV8YzJw z&}SCDexnUPD!%4|y~7}VzvJ4ch)WT4%sw@ItwoNt(C*RP)h?&~^g##vnhR0!HvIYx z0td2yz9=>t3JNySl*TszmfH6`Ir;ft@RdWs3}!J88UE|gj_GMQ6$ZYphUL2~4OY7} zB*33_bjkRf_@l;Y!7MIdb~bVe;-m78Pz|pdy=O*3kjak63UnLt!{^!!Ljg0rJD3a~ z1Q;y5Z^MF<=Hr}rdoz>yRczx+p3RxxgJE2GX&Si)14B@2t21j4hnnP#U?T3g#+{W+Zb z5s^@>->~-}4|_*!5pIzMCEp|3+i1XKcfUxW`8|ezAh>y{WiRcjSG*asw6;Ef(k#>V ztguN?EGkV_mGFdq!n#W)<7E}1#EZN8O$O|}qdoE|7K?F4zo1jL-v}E8v?9qz(d$&2 zMwyK&xlC9rXo_2xw7Qe0caC?o?Pc*-QAOE!+UvRuKjG+;dk|jQhDDBe?`XT7Y5lte zqSu0t5`;>Wv%|nhj|ZiE^IqA_lZu7OWh!2Y(627zb=r7Ends}wVk7Q5o09a@ojhH7 zU0m&h*8+j4e|OqWyJ&B`V`y=>MVO;K9=hk^6EsmVAGkLT{oUtR{JqSRY{Qi{kKw1k z6s;0SMPJOLp!som|A`*q3t0wIj-=bG8a#MC)MHcMSQU98Juv$?$CvYX)(n`P^!`5| zv3q@@|G@6wMqh;d;m4qvdibx2Yjml}vG9mDv&!0ne02M#D`Bo}xIB0VWh8>>WtNZQ z$&ISlJX;*ORQIO;k62qA{^6P%3!Z=Y1EbmY02{w^yB$`;%!{kur&XTGDiO2cjA)lr zsY^XZWy^DSAaz;kZ_VG?uWnJR7qdN18$~)>(kOoybY0~QYu9||K#|$Mby{3GduV~N zk9H7$7=RSo+?CUYF502`b76ytBy}sFak&|HIwRvB=0D|S`c#QCJPq zP)uOWI)#(n&{6|C4A^G~%B~BY21aOMoz9RuuM`Ip%oBz+NoAlb7?#`E^}7xXo!4S? zFg8I~G%!@nXi8&aJSGFcZAxQf;0m}942=i#p-&teLvE{AKm7Sl2f}Io?!IqbC|J;h z`=5LFOnU5?^w~SV@YwNZx$k_(kLNxZDE z3cf08^-rIT_>A$}B%IJBPcN^)4;90BQtiEi!gT#+EqyAUZ|}*b_}R>SGloq&6?opL zuT_+lwQMgg6!Cso$BwUA;k-1NcrzyE>(_X$B0HocjY~=Pk~Q08+N}(|%HjO_i+*=o z%G6C6A30Ch<0UlG;Zdj@ed!rfUY_i9mYwK8(aYuzcUzlTJ1yPz|Bb-9b33A9zRhGl>Ny-Q#JAq-+qtI@B@&w z$;PJbyiW=!py@g2hAi0)U1v=;avka`gd@8LC4=BEbNqL&K^UAQ5%r95#x%^qRB%KLaqMnG|6xKAm}sx!Qwo}J=2C;NROi$mfADui4)y(3wVA3k~{j^_5%H)C6K zlYAm1eY**HZOj($)xfKIQFtIVw$4&yvz9>(Crs>Gh{ zya6-FG7Dgi92#K)64=9Csj5?Zqe~_9TwSI!2quAwa1w-*uC5!}xY`?tltb0Hq740< zsq2QelPveZ4chr$=~U3!+c&>xyfvA1`)owOqj=i4wjY=A1577Gwg&Ko7;?il9r|_* z8P&IDV_g2D{in5OLFxsO!kx3AhO$5aKeoM|!q|VokqMlYM@HtsRuMtBY%I35#5$+G zpp|JOeoj^U=95HLemB04Yqv{a8X<^K9G2`&ShM_6&Bi1n?o?@MXsDj9Z*A3>#XK%J zRc*&SlFl>l)9DyRQ{*%Z+^e1XpH?0@vhpXrnPPU*d%vOhKkimm-u3c%Q^v3RKp9kx@A2dS?QfS=iigGr7m><)YkV=%LA5h@Uj@9=~ABPMJ z1UE;F&;Ttg5Kc^Qy!1SuvbNEqdgu3*l`=>s5_}dUv$B%BJbMiWrrMm7OXOdi=GOmh zZBvXXK7VqO&zojI2Om9};zCB5i|<210I{iwiGznGCx=FT89=Ef)5!lB1cZ6lbzgDn07*he}G&w7m!;|E(L-?+cz@0<9ZI~LqYQE7>HnPA436}oeN2Y(VfG6 zxNZuMK3Crm^Z_AFeHc~CVRrSl0W^?+Gbteu1g8NGYa3(8f*P{(ZT>%!jtSl6WbYVv zmE(37t0C8vJ6O-5+o*lL9XRcFbd~GSBGbGh3~R!67g&l)7n!kJlWd)~TUyXus#!&G6sR%(l(h1$xyrR5j_jM1zj#giA&@(Xl26@n<9>folx!92bQ z24h570+<)4!$!IQ(5yOU|4_E6aN@4v0+{Kx~Z z;q7fp%0cHziuI%!kB~w}g9@V+1wDz0wFlzX2UOvOy|&;e;t!lAR8tV2KQHgtfk8Uf zw;rs!(4JPODERk4ckd5I2Vq|0rd@@Mwd8MID%0^fITjYIQom^q;qhP8@|eJx{?5xX zc1@Fj*kDknlk{c-rnCloQ3hGh7OU+@efO3>fkRMcM>J?AeVP& zlfzX%cdp=N+4S#E*%^=BQ+N`A7C}|k%$|QUn0yI6S3$MS-NjO!4hm55uyju)Q6e!} z*OVO@A#-mfC9Pha6ng((Xl^V7{d+&u+yx)_B1{~t7d5e8L^i4J>;x<7@5;+l7-Gge zf#9diXJ$&v^rbN5V(ee%q0xBMEgS6%qZm7hNUP%G;^J44I!BmI@M*+FWz0!+s;+iQ zU4CuI+27bvNK8v>?7PZnVxB=heJ&_ymE0nN^W#-rqB%+JXkYGDuRw>JM_LdtLkiq* z6%%3&^BX$jnM@2bjiGc-DymKly)wVkA-pq;jSWL#7_*moZZ4I|-N}o8SK?sIv)p|c zu~9-B%tMc=!)YMFp*SiC0>kfnH8+X5>;+FFVN{~a9YVdIg1uGkZ~kegFy{^PU(4{( z`CbY`XmVA3esai686Yw8djCEyF7`bfB^F1)nwv+AqYLZ&Zy=eFhYT2uMd@{sP_qS4 zbJ&>PxajjZt?&c<1^!T|pLHfX=E^FJ>-l_XCZzvRV%x}@u(FtF(mS+Umw$e+IA74e>gCdTqi;6&=euAIpxd=Y3I5xWR zBhGoT+T`V1@91OlQ}2YO*~P4ukd*TBBdt?Plt)_ou6Y@Db`ss+Q~A-48s>?eaJYA2 zRGOa8^~Em}EFTmKIVVbMb|ob)hJJ7ITg>yHAn2i|{2ZJU!cwt9YNDT0=*WO7Bq#Xj zg@FjEaKoolrF8%c;49|`IT&25?O$dq8kp3#la9&6aH z6G|{>^C(>yP7#Dr$aeFyS0Ai_$ILhL43#*mgEl(c*4?Ae;tRL&S7Vc}Szl>B`mBuI zB9Y%xp%CZwlH!3V(`6W4-ZuETssvI&B~_O;CbULfl)X1V%(H7VSPf`_Ka9ak@8A=z z1l|B1QKT}NLI`WVTRd;2En5u{0CRqy9PTi$ja^inu){LJ&E&6W%JJPw#&PaTxpt?k zpC~gjN*22Q8tpGHR|tg~ye#9a8N<%odhZJnk7Oh=(PKfhYfzLAxdE36r<6a?A;rO&ELp_Y?8Pdw(PT^Fxn!eG_|LEbSYoBrsBA|6Fgr zt5LntyusI{Q2fdy=>ditS;}^B;I2MD4=(>7fWt0Jp~y=?VvfvzHvQhj6dyIef46J$ zl4Xu7U9v_NJV?uBBC0!kcTS0UcrV7+@~is?Fi+jrr@l3XwD|uG zr26jUWiv>Ju48Y^#qn7r9mwIH-Pv6Y|V|V-GZ&+&gQ?S?-`&ts{@5GXPqbmyZjUACC&oVXfNwUX0}ba(v978 zp8z!v9~8Zx8qB@7>oFPDm^iR@+yw`79YF)w^OHB_N;&&x7c3l^3!)IY#)}x)@D(iNaOm9 zC=^*!{`7={3*S=%iU=KsPXh=DDZcc``Ss>057i{pdW8M@4q+Ba@Tt%OytH!4>rbIbQw^-pR zGGYNPzw@n=PV@)b7yVbFr;glF*Qq3>F9oBN5PUXt!?2mdGcpv^o1?Thp`jP10G2Yi z(c93td3F3SW!Le5DUwdub!aDKoVLU6g!O?Ret21l$qOC;kdd@L#M&baVu&JZGt&<6 z!VCkvgRaav6QDW2x}tUy4~Y5(B+#Ej-8vM?DM-1?J_*&PntI3E96M!`WL#<&Z5n2u zo`P!~vBT$YOT~gU9#PB)%JZ zcd_u=m^LYzC!pH#W`yA1!(fA;D~b zG#73@l)NNd;n#XrKXZEfab;@kQRnOFU2Th-1m<4mJzlj9b3pv-GF$elX7ib9!uILM_$ke zHIGB*&=5=;ynQA{y7H93%i^d)T}y@(p>8vVhJ4L)M{0Q*@D^+SPp`EW+G6E%+`Z;u zS3goV@Dic7vc5`?!pCN44Ts@*{)zwy)9?B||AM{zKlN4T}qQRL2 zgv+{K8bv7w)#xge16;kI1fU87!W4pX)N&|cq8&i^1r`W|Hg4366r(?-ecEJ9u&Eaw zrhyikXQB>C9d>cpPGiu=VU3Z-u4|0V_iap!_J3o+K_R5EXk@sfu~zHwwYkpncVh!R zqNe7Cmf_|Wmeq4#(mIO&(wCK@b4(x0?W1Qtk(`$?+$uCJCGZm_%k?l32vuShgDFMa ztc`{$8DhB9)&?~(m&EUc=LzI1=qo#zjy#2{hLT_*aj<618qQ7mD#k2ZFGou&69;=2 z1j7=Su8k}{L*h&mfs7jg^PN&9C1Z@U!p6gXk&-7xM~{X`nqH#aGO`;Xy_zbz^rYacIq0AH%4!Oh93TzJ820%ur)8OyeS@K?sF1V(iFO z37Nnqj1z#1{|v7=_CX`lQA|$<1gtuNMHGNJYp1D_k;WQk-b+T6VmUK(x=bWviOZ~T z|4e%SpuaWLWD?qN2%`S*`P;BQBw(B__wTD6epvGdJ+>DBq2oVlf&F*lz+#avb4)3P1c^Mf#olQheVvZ|Z5 z>xXfgmv!5Z^SYn+_x}K5B%G^sRwiez&z9|f!E!#oJlT2kCOV0000$L_|bHBqAarB4TD{W@grX1CUr72@caw0faEd7-K|4L_|cawbojjHdpd6 zI6~Iv5J?-Q4*&oF000000FV;^004t70Z6Qk1Xl{X9oJ{sRC2(cs?- literal 0 HcmV?d00001 diff --git a/infohub/static/infohub/bootstrap/js/bootstrap.js b/infohub/static/infohub/bootstrap/js/bootstrap.js index 8ae571b6..75eaf2e5 100644 --- a/infohub/static/infohub/bootstrap/js/bootstrap.js +++ b/infohub/static/infohub/bootstrap/js/bootstrap.js @@ -1,65 +1,29 @@ /*! - * Bootstrap v3.1.1 (http://getbootstrap.com) - * Copyright 2011-2014 Twitter, Inc. + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ -if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript requires jQuery') } - -/* ======================================================================== - * Bootstrap: transition.js v3.1.1 - * http://getbootstrap.com/javascript/#transitions - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - +/*! + * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=6f1bbee09ea7b5ebb0bb) + * Config saved to config.json and https://gist.github.com/6f1bbee09ea7b5ebb0bb + */ +if (typeof jQuery === 'undefined') { + throw new Error('Bootstrap\'s JavaScript requires jQuery') +} +function ($) { 'use strict'; - - // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) - // ============================================================ - - function transitionEnd() { - var el = document.createElement('bootstrap') - - var transEndEventNames = { - 'WebkitTransition' : 'webkitTransitionEnd', - 'MozTransition' : 'transitionend', - 'OTransition' : 'oTransitionEnd otransitionend', - 'transition' : 'transitionend' - } - - for (var name in transEndEventNames) { - if (el.style[name] !== undefined) { - return { end: transEndEventNames[name] } - } - } - - return false // explicit for ie8 ( ._.) - } - - // http://blog.alexmaccaw.com/css-transitions - $.fn.emulateTransitionEnd = function (duration) { - var called = false, $el = this - $(this).one($.support.transition.end, function () { called = true }) - var callback = function () { if (!called) $($el).trigger($.support.transition.end) } - setTimeout(callback, duration) - return this + var version = $.fn.jquery.split(' ')[0].split('.') + if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) { + throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher') } - - $(function () { - $.support.transition = transitionEnd() - }) - }(jQuery); /* ======================================================================== - * Bootstrap: alert.js v3.1.1 + * Bootstrap: alert.js v3.3.5 * http://getbootstrap.com/javascript/#alerts * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. + * Copyright 2011-2015 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * ======================================================================== */ @@ -75,6 +39,10 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re $(el).on('click', dismiss, this.close) } + Alert.VERSION = '3.3.5' + + Alert.TRANSITION_DURATION = 150 + Alert.prototype.close = function (e) { var $this = $(this) var selector = $this.attr('data-target') @@ -89,7 +57,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re if (e) e.preventDefault() if (!$parent.length) { - $parent = $this.hasClass('alert') ? $this : $this.parent() + $parent = $this.closest('.alert') } $parent.trigger(e = $.Event('close.bs.alert')) @@ -99,13 +67,14 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re $parent.removeClass('in') function removeElement() { - $parent.trigger('closed.bs.alert').remove() + // detach from parent, fire event then clean up data + $parent.detach().trigger('closed.bs.alert').remove() } $.support.transition && $parent.hasClass('fade') ? $parent - .one($.support.transition.end, removeElement) - .emulateTransitionEnd(150) : + .one('bsTransitionEnd', removeElement) + .emulateTransitionEnd(Alert.TRANSITION_DURATION) : removeElement() } @@ -113,9 +82,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re // ALERT PLUGIN DEFINITION // ======================= - var old = $.fn.alert - - $.fn.alert = function (option) { + function Plugin(option) { return this.each(function () { var $this = $(this) var data = $this.data('bs.alert') @@ -125,6 +92,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re }) } + var old = $.fn.alert + + $.fn.alert = Plugin $.fn.alert.Constructor = Alert @@ -145,10 +115,10 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re }(jQuery); /* ======================================================================== - * Bootstrap: button.js v3.1.1 + * Bootstrap: button.js v3.3.5 * http://getbootstrap.com/javascript/#buttons * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. + * Copyright 2011-2015 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * ======================================================================== */ @@ -165,6 +135,8 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re this.isLoading = false } + Button.VERSION = '3.3.5' + Button.DEFAULTS = { loadingText: 'loading...' } @@ -175,14 +147,14 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re var val = $el.is('input') ? 'val' : 'html' var data = $el.data() - state = state + 'Text' + state += 'Text' - if (!data.resetText) $el.data('resetText', $el[val]()) - - $el[val](data[state] || this.options[state]) + if (data.resetText == null) $el.data('resetText', $el[val]()) // push to event loop to allow forms to submit setTimeout($.proxy(function () { + $el[val](data[state] == null ? this.options[state] : data[state]) + if (state == 'loadingText') { this.isLoading = true $el.addClass(d).attr(d, d) @@ -200,22 +172,26 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re if ($parent.length) { var $input = this.$element.find('input') if ($input.prop('type') == 'radio') { - if ($input.prop('checked') && this.$element.hasClass('active')) changed = false - else $parent.find('.active').removeClass('active') + if ($input.prop('checked')) changed = false + $parent.find('.active').removeClass('active') + this.$element.addClass('active') + } else if ($input.prop('type') == 'checkbox') { + if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false + this.$element.toggleClass('active') } - if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change') + $input.prop('checked', this.$element.hasClass('active')) + if (changed) $input.trigger('change') + } else { + this.$element.attr('aria-pressed', !this.$element.hasClass('active')) + this.$element.toggleClass('active') } - - if (changed) this.$element.toggleClass('active') } // BUTTON PLUGIN DEFINITION // ======================== - var old = $.fn.button - - $.fn.button = function (option) { + function Plugin(option) { return this.each(function () { var $this = $(this) var data = $this.data('bs.button') @@ -228,6 +204,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re }) } + var old = $.fn.button + + $.fn.button = Plugin $.fn.button.Constructor = Button @@ -243,20 +222,24 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re // BUTTON DATA-API // =============== - $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) { - var $btn = $(e.target) - if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') - $btn.button('toggle') - e.preventDefault() - }) + $(document) + .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + Plugin.call($btn, 'toggle') + if (!($(e.target).is('input[type="radio"]') || $(e.target).is('input[type="checkbox"]'))) e.preventDefault() + }) + .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) { + $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type)) + }) }(jQuery); /* ======================================================================== - * Bootstrap: carousel.js v3.1.1 + * Bootstrap: carousel.js v3.3.5 * http://getbootstrap.com/javascript/#carousel * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. + * Copyright 2011-2015 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * ======================================================================== */ @@ -271,24 +254,42 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re this.$element = $(element) this.$indicators = this.$element.find('.carousel-indicators') this.options = options - this.paused = - this.sliding = - this.interval = - this.$active = + this.paused = null + this.sliding = null + this.interval = null + this.$active = null this.$items = null - this.options.pause == 'hover' && this.$element - .on('mouseenter', $.proxy(this.pause, this)) - .on('mouseleave', $.proxy(this.cycle, this)) + this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this)) + + this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element + .on('mouseenter.bs.carousel', $.proxy(this.pause, this)) + .on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) } + Carousel.VERSION = '3.3.5' + + Carousel.TRANSITION_DURATION = 600 + Carousel.DEFAULTS = { interval: 5000, pause: 'hover', - wrap: true + wrap: true, + keyboard: true + } + + Carousel.prototype.keydown = function (e) { + if (/input|textarea/i.test(e.target.tagName)) return + switch (e.which) { + case 37: this.prev(); break + case 39: this.next(); break + default: return + } + + e.preventDefault() } - Carousel.prototype.cycle = function (e) { + Carousel.prototype.cycle = function (e) { e || (this.paused = false) this.interval && clearInterval(this.interval) @@ -300,23 +301,31 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re return this } - Carousel.prototype.getActiveIndex = function () { - this.$active = this.$element.find('.item.active') - this.$items = this.$active.parent().children() + Carousel.prototype.getItemIndex = function (item) { + this.$items = item.parent().children('.item') + return this.$items.index(item || this.$active) + } - return this.$items.index(this.$active) + Carousel.prototype.getItemForDirection = function (direction, active) { + var activeIndex = this.getItemIndex(active) + var willWrap = (direction == 'prev' && activeIndex === 0) + || (direction == 'next' && activeIndex == (this.$items.length - 1)) + if (willWrap && !this.options.wrap) return active + var delta = direction == 'prev' ? -1 : 1 + var itemIndex = (activeIndex + delta) % this.$items.length + return this.$items.eq(itemIndex) } Carousel.prototype.to = function (pos) { var that = this - var activeIndex = this.getActiveIndex() + var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active')) if (pos > (this.$items.length - 1) || pos < 0) return - if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) + if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid" if (activeIndex == pos) return this.pause().cycle() - return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) + return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos)) } Carousel.prototype.pause = function (e) { @@ -344,22 +353,20 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re Carousel.prototype.slide = function (type, next) { var $active = this.$element.find('.item.active') - var $next = next || $active[type]() + var $next = next || this.getItemForDirection(type, $active) var isCycling = this.interval var direction = type == 'next' ? 'left' : 'right' - var fallback = type == 'next' ? 'first' : 'last' var that = this - if (!$next.length) { - if (!this.options.wrap) return - $next = this.$element.find('.item')[fallback]() - } - - if ($next.hasClass('active')) return this.sliding = false + if ($next.hasClass('active')) return (this.sliding = false) - var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction }) - this.$element.trigger(e) - if (e.isDefaultPrevented()) return + var relatedTarget = $next[0] + var slideEvent = $.Event('slide.bs.carousel', { + relatedTarget: relatedTarget, + direction: direction + }) + this.$element.trigger(slideEvent) + if (slideEvent.isDefaultPrevented()) return this.sliding = true @@ -367,30 +374,31 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re if (this.$indicators.length) { this.$indicators.find('.active').removeClass('active') - this.$element.one('slid.bs.carousel', function () { - var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) - $nextIndicator && $nextIndicator.addClass('active') - }) + var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]) + $nextIndicator && $nextIndicator.addClass('active') } + var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" if ($.support.transition && this.$element.hasClass('slide')) { $next.addClass(type) $next[0].offsetWidth // force reflow $active.addClass(direction) $next.addClass(direction) $active - .one($.support.transition.end, function () { + .one('bsTransitionEnd', function () { $next.removeClass([type, direction].join(' ')).addClass('active') $active.removeClass(['active', direction].join(' ')) that.sliding = false - setTimeout(function () { that.$element.trigger('slid.bs.carousel') }, 0) + setTimeout(function () { + that.$element.trigger(slidEvent) + }, 0) }) - .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000) + .emulateTransitionEnd(Carousel.TRANSITION_DURATION) } else { $active.removeClass('active') $next.addClass('active') this.sliding = false - this.$element.trigger('slid.bs.carousel') + this.$element.trigger(slidEvent) } isCycling && this.cycle() @@ -402,9 +410,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re // CAROUSEL PLUGIN DEFINITION // ========================== - var old = $.fn.carousel - - $.fn.carousel = function (option) { + function Plugin(option) { return this.each(function () { var $this = $(this) var data = $this.data('bs.carousel') @@ -418,6 +424,9 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re }) } + var old = $.fn.carousel + + $.fn.carousel = Plugin $.fn.carousel.Constructor = Carousel @@ -433,36 +442,42 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re // CAROUSEL DATA-API // ================= - $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { - var $this = $(this), href - var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 + var clickHandler = function (e) { + var href + var $this = $(this) + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 + if (!$target.hasClass('carousel')) return var options = $.extend({}, $target.data(), $this.data()) var slideIndex = $this.attr('data-slide-to') if (slideIndex) options.interval = false - $target.carousel(options) + Plugin.call($target, options) - if (slideIndex = $this.attr('data-slide-to')) { + if (slideIndex) { $target.data('bs.carousel').to(slideIndex) } e.preventDefault() - }) + } + + $(document) + .on('click.bs.carousel.data-api', '[data-slide]', clickHandler) + .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler) $(window).on('load', function () { $('[data-ride="carousel"]').each(function () { var $carousel = $(this) - $carousel.carousel($carousel.data()) + Plugin.call($carousel, $carousel.data()) }) }) }(jQuery); /* ======================================================================== - * Bootstrap: collapse.js v3.1.1 - * http://getbootstrap.com/javascript/#collapse + * Bootstrap: dropdown.js v3.3.5 + * http://getbootstrap.com/javascript/#dropdowns * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. + * Copyright 2011-2015 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * ======================================================================== */ @@ -470,186 +485,51 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re +function ($) { 'use strict'; - // COLLAPSE PUBLIC CLASS DEFINITION - // ================================ - - var Collapse = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, Collapse.DEFAULTS, options) - this.transitioning = null - - if (this.options.parent) this.$parent = $(this.options.parent) - if (this.options.toggle) this.toggle() - } - - Collapse.DEFAULTS = { - toggle: true - } - - Collapse.prototype.dimension = function () { - var hasWidth = this.$element.hasClass('width') - return hasWidth ? 'width' : 'height' - } - - Collapse.prototype.show = function () { - if (this.transitioning || this.$element.hasClass('in')) return - - var startEvent = $.Event('show.bs.collapse') - this.$element.trigger(startEvent) - if (startEvent.isDefaultPrevented()) return - - var actives = this.$parent && this.$parent.find('> .panel > .in') - - if (actives && actives.length) { - var hasData = actives.data('bs.collapse') - if (hasData && hasData.transitioning) return - actives.collapse('hide') - hasData || actives.data('bs.collapse', null) - } - - var dimension = this.dimension() - - this.$element - .removeClass('collapse') - .addClass('collapsing') - [dimension](0) - - this.transitioning = 1 - - var complete = function () { - this.$element - .removeClass('collapsing') - .addClass('collapse in') - [dimension]('auto') - this.transitioning = 0 - this.$element.trigger('shown.bs.collapse') - } - - if (!$.support.transition) return complete.call(this) - - var scrollSize = $.camelCase(['scroll', dimension].join('-')) + // DROPDOWN CLASS DEFINITION + // ========================= - this.$element - .one($.support.transition.end, $.proxy(complete, this)) - .emulateTransitionEnd(350) - [dimension](this.$element[0][scrollSize]) + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle="dropdown"]' + var Dropdown = function (element) { + $(element).on('click.bs.dropdown', this.toggle) } - Collapse.prototype.hide = function () { - if (this.transitioning || !this.$element.hasClass('in')) return - - var startEvent = $.Event('hide.bs.collapse') - this.$element.trigger(startEvent) - if (startEvent.isDefaultPrevented()) return - - var dimension = this.dimension() - - this.$element - [dimension](this.$element[dimension]()) - [0].offsetHeight - - this.$element - .addClass('collapsing') - .removeClass('collapse') - .removeClass('in') + Dropdown.VERSION = '3.3.5' - this.transitioning = 1 + function getParent($this) { + var selector = $this.attr('data-target') - var complete = function () { - this.transitioning = 0 - this.$element - .trigger('hidden.bs.collapse') - .removeClass('collapsing') - .addClass('collapse') + if (!selector) { + selector = $this.attr('href') + selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 } - if (!$.support.transition) return complete.call(this) + var $parent = selector && $(selector) - this.$element - [dimension](0) - .one($.support.transition.end, $.proxy(complete, this)) - .emulateTransitionEnd(350) + return $parent && $parent.length ? $parent : $this.parent() } - Collapse.prototype.toggle = function () { - this[this.$element.hasClass('in') ? 'hide' : 'show']() - } + function clearMenus(e) { + if (e && e.which === 3) return + $(backdrop).remove() + $(toggle).each(function () { + var $this = $(this) + var $parent = getParent($this) + var relatedTarget = { relatedTarget: this } + if (!$parent.hasClass('open')) return - // COLLAPSE PLUGIN DEFINITION - // ========================== + if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return - var old = $.fn.collapse + $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget)) - $.fn.collapse = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.collapse') - var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) + if (e.isDefaultPrevented()) return - if (!data && options.toggle && option == 'show') option = !option - if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) - if (typeof option == 'string') data[option]() + $this.attr('aria-expanded', 'false') + $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget) }) } - $.fn.collapse.Constructor = Collapse - - - // COLLAPSE NO CONFLICT - // ==================== - - $.fn.collapse.noConflict = function () { - $.fn.collapse = old - return this - } - - - // COLLAPSE DATA-API - // ================= - - $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) { - var $this = $(this), href - var target = $this.attr('data-target') - || e.preventDefault() - || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 - var $target = $(target) - var data = $target.data('bs.collapse') - var option = data ? 'toggle' : $this.data() - var parent = $this.attr('data-parent') - var $parent = parent && $(parent) - - if (!data || !data.transitioning) { - if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed') - $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') - } - - $target.collapse(option) - }) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: dropdown.js v3.1.1 - * http://getbootstrap.com/javascript/#dropdowns - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // DROPDOWN CLASS DEFINITION - // ========================= - - var backdrop = '.dropdown-backdrop' - var toggle = '[data-toggle=dropdown]' - var Dropdown = function (element) { - $(element).on('click.bs.dropdown', this.toggle) - } - Dropdown.prototype.toggle = function (e) { var $this = $(this) @@ -663,7 +543,10 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re if (!isActive) { if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { // if mobile we use a backdrop because click events don't delegate - $('

      - -- -+
      -
      - -


      -diff --git a/ui/viewpost.html b/ui/viewpost.html -index dacbae5..40e2455 100644 ---- a/ui/viewpost.html -+++ b/ui/viewpost.html -@@ -43,6 +43,8 @@ email : ranihaileydesai@gmail.com -

      {{post.description_post}}

      - -
      -+ -+ {% if post.link_post %} -
      -
      -
      -@@ -53,6 +55,8 @@ email : ranihaileydesai@gmail.com -

      {{post.link_post}}

      -
      -
      -+ {% endif %} -+ -
      - -
      -diff --git a/webhub/models.py b/webhub/models.py -index 6c46594..a22d034 100644 ---- a/webhub/models.py -+++ b/webhub/models.py -@@ -72,7 +72,7 @@ class Post(models.Model): - updated = models.DateTimeField(auto_now=True) - - #path to default post image -- image_post = models.CharField(max_length=300, default="http://i.imgur.com/dnjclWV.png") -+ image_post = models.CharField(max_length=300, default="http://allfacebook.com/files/2012/03/bluepin.png") - #image of the post - imageobj_post = models.ImageField(upload_to=update_filename1) - -diff --git a/webhub/models.pyc b/webhub/models.pyc -index ac06547..4af9dd2 100644 -Binary files a/webhub/models.pyc and b/webhub/models.pyc differ -diff --git a/webhub/views.py b/webhub/views.py -index 4c6cb57..a965b5f 100644 ---- a/webhub/views.py -+++ b/webhub/views.py -@@ -353,8 +353,9 @@ def post_new(request): - title_post = request.REQUEST['title'] - description_post = request.REQUEST['description'] - link_post = request.REQUEST['link'] -- image_post = '/static/' + owner.user.username + "post.jpg" - imageobj_post = request.FILES['image_post'] -+ image_post = '/static/' + owner.user.username + "post.jpg" -+ - - entry = Post(owner=owner, - title_post=title_post, -@@ -404,7 +405,7 @@ def edit_post(request): - - #To remove post picture - if 'reset_image' in request.REQUEST.keys(): -- postobj.image_post = "http://vfcstatic.r.worldssl.net/assets/car_icon-e0df962a717a5db6ebc8b37e80b05713.png" -+ postobj.image_post = "http://allfacebook.com/files/2012/03/bluepin.png" - if str(postobj.imageobj_post) <> '': - path = '/vagrant/submit/media/propics/' + owner.user.username + "post.jpg" - if os.path.isfile(path): -@@ -422,10 +423,6 @@ def edit_post(request): - postobj.imageobj_post = request.FILES['image'] - postobj.image_post = '/static/' + owner.user.username + "post.jpg" - -- -- -- -- - if postobj.title_post <> title_post: - if postobj.description_post <> description_post: - if postobj.link_post <> link_post: -diff --git a/webhub/views.pyc b/webhub/views.pyc -index cb9e5ce..84e3031 100644 -Binary files a/webhub/views.pyc and b/webhub/views.pyc differ - -commit 23c946ac6c05aba2a8f8caee85d87f518ab5941c -Author: desaivaibhavi -Date: Tue Jun 24 02:09:02 2014 +0000 - - image field added in post - -diff --git a/ui/editpost.html b/ui/editpost.html -index d790a39..aa4e68c 100644 ---- a/ui/editpost.html -+++ b/ui/editpost.html -@@ -17,13 +17,13 @@ email : ranihaileydesai@gmail.com - -

      Malaria : infoHub

      - --
      -+
      -
      -

      Edit Post

      -
      - - --
      -+ - -
      -
      -@@ -43,7 +43,6 @@ email : ranihaileydesai@gmail.com -
      -
      - -- -
      -
      - -@@ -60,6 +59,25 @@ email : ranihaileydesai@gmail.com -
      -
      - -+ -+
      -+
      -+
      -+
      -+

      Change image

      -+
      -+
      -+ -+
      -+
      -+ -+ -+
      -+
      -+ -+
      -+
      -+ -
      - -
      -@@ -74,13 +92,14 @@ email : ranihaileydesai@gmail.com -
      -
      -
      -- -- -- - -+ -+
      - - - -+ -+ -

      - {% include "footer.html" %} - -diff --git a/ui/newpost.html b/ui/newpost.html -index 637eadf..8d62dc1 100644 ---- a/ui/newpost.html -+++ b/ui/newpost.html -@@ -20,7 +20,7 @@ email : ranihaileydesai@gmail.com -

      New Post

      -
      - --
      -+ - -
      -
      -@@ -57,6 +57,14 @@ email : ranihaileydesai@gmail.com - -
      - -+ -+
      -+ Add image ? -+
      -+ -+
      -+ -+ -
      -
      -
      -diff --git a/ui/viewpost.html b/ui/viewpost.html -index b612529..dacbae5 100644 ---- a/ui/viewpost.html -+++ b/ui/viewpost.html -@@ -16,7 +16,7 @@ email : ranihaileydesai@gmail.com -





      - -

      Malaria : infoHub

      --
      -+
      -
      - -

      View Post

      -@@ -54,10 +54,17 @@ email : ranihaileydesai@gmail.com -
      -

      -
      -+ -+
      -+ -+
      -+
      -      - -
      - -+ -+ -
      -
      -
      -diff --git a/webhub/models.py b/webhub/models.py -index b0ffc12..6c46594 100644 ---- a/webhub/models.py -+++ b/webhub/models.py -@@ -19,6 +19,11 @@ def update_filename(instance, filename): - format = instance.user.username + ".jpg" - return os.path.join(path, format) - -+#To update the filename of the newly uploaded photo of the post -+def update_filename1(instance, filename): -+ path = '/vagrant/submit/media/propics/' -+ format = instance.owner.user.username + "post.jpg" -+ return os.path.join(path, format) - - #Django provides a table called user that stores basic user information like username, password and email id. - -@@ -65,6 +70,11 @@ class Post(models.Model): - created = models.DateTimeField(auto_now_add=True) - #field to note the timestamp when the post was last updated - updated = models.DateTimeField(auto_now=True) -+ -+ #path to default post image -+ image_post = models.CharField(max_length=300, default="http://i.imgur.com/dnjclWV.png") -+ #image of the post -+ imageobj_post = models.ImageField(upload_to=update_filename1) - - def __unicode__(self): - return self.owner.user.username -@@ -82,6 +92,8 @@ class RevPost(models.Model): - description_post_rev = models.CharField(max_length=2000) - #revised link to important documents - link_post_rev = models.CharField(max_length=2000) -+ -+ - #field to note the timestamp when the revised version was created - created = models.DateTimeField(auto_now_add=True) - #change in title -@@ -89,7 +101,8 @@ class RevPost(models.Model): - #change in description - description_change = models.BooleanField(default=False) - #change in link to important documents -- link_change = models.CharField(max_length=2000) -+ link_change = models.BooleanField(default=False) -+ - - - def __unicode__(self): -diff --git a/webhub/models.pyc b/webhub/models.pyc -index 32bd348..ac06547 100644 -Binary files a/webhub/models.pyc and b/webhub/models.pyc differ -diff --git a/webhub/views.py b/webhub/views.py -index f6f6bc9..4c6cb57 100644 ---- a/webhub/views.py -+++ b/webhub/views.py -@@ -353,11 +353,15 @@ def post_new(request): - title_post = request.REQUEST['title'] - description_post = request.REQUEST['description'] - link_post = request.REQUEST['link'] -+ image_post = '/static/' + owner.user.username + "post.jpg" -+ imageobj_post = request.FILES['image_post'] - - entry = Post(owner=owner, - title_post=title_post, - description_post=description_post, - link_post=link_post, -+ imageobj_post=imageobj_post, -+ image_post=image_post, - ) - entry.save() - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, -@@ -397,6 +401,31 @@ def edit_post(request): - description_post = request.REQUEST['description'] - link_post = request.REQUEST['link'] - -+ -+ #To remove post picture -+ if 'reset_image' in request.REQUEST.keys(): -+ postobj.image_post = "http://vfcstatic.r.worldssl.net/assets/car_icon-e0df962a717a5db6ebc8b37e80b05713.png" -+ if str(postobj.imageobj_post) <> '': -+ path = '/vagrant/submit/media/propics/' + owner.user.username + "post.jpg" -+ if os.path.isfile(path): -+ os.remove(path) -+ postobj.save() -+ return edit_post(request) -+ -+ -+ if 'image' in request.FILES.keys(): -+ #delete old file -+ if str(postobj.imageobj_post) <> '': -+ path = '/vagrant/submit/media/propics/' + owner.user.username + "post.jpg" -+ if os.path.isfile(path): -+ os.remove(path) -+ postobj.imageobj_post = request.FILES['image'] -+ postobj.image_post = '/static/' + owner.user.username + "post.jpg" -+ -+ -+ -+ -+ - if postobj.title_post <> title_post: - if postobj.description_post <> description_post: - if postobj.link_post <> link_post: -diff --git a/webhub/views.pyc b/webhub/views.pyc -index b69e3fb..cb9e5ce 100644 -Binary files a/webhub/views.pyc and b/webhub/views.pyc differ - -commit f934eff8c2824d35450a236504edd966b75b1c14 -Author: desaivaibhavi -Date: Mon Jun 23 23:46:42 2014 +0000 - - small touching up in footer - -diff --git a/ui/aboutPC.html b/ui/aboutPC.html -new file mode 100644 -index 0000000..91cb4d5 ---- /dev/null -+++ b/ui/aboutPC.html -@@ -0,0 +1,23 @@ -+ -+ -+ -+ -+ -+ About PC -+ -+ -+ {% include "header.html" %} -+





      -+

      Here the information about PC would be shown

      -+ -+

















      -+ {% include "footer.html" %} -+ -+ -+ -+ -diff --git a/ui/details.html b/ui/details.html -new file mode 100644 -index 0000000..082a0d6 ---- /dev/null -+++ b/ui/details.html -@@ -0,0 +1,23 @@ -+ -+ -+ -+ -+ -+ About PC -+ -+ -+ {% include "header.html" %} -+





      -+

      Here the details would be shown

      -+ -+

















      -+ {% include "footer.html" %} -+ -+ -+ -+ -diff --git a/ui/footer.html b/ui/footer.html -index c6738ed..b15b8db 100644 ---- a/ui/footer.html -+++ b/ui/footer.html -@@ -43,11 +43,11 @@ div{ -
      - - --
      -- About Peace Corps   |   -- Policies   |   -- Important Details   |   -- Help   -+
      -+ About Peace Corps  |   -+ Policies  |   -+ Important Details  |   -+ Help   -

      -
      -
      -diff --git a/ui/helpPC.html b/ui/helpPC.html -new file mode 100644 -index 0000000..4161404 ---- /dev/null -+++ b/ui/helpPC.html -@@ -0,0 +1,23 @@ -+ -+ -+ -+ -+ -+ Help PC -+ -+ -+ {% include "header.html" %} -+





      -+

      Here the help information about PC would be shown

      -+ -+

















      -+ {% include "footer.html" %} -+ -+ -+ -+ -diff --git a/ui/policies.html b/ui/policies.html -new file mode 100644 -index 0000000..203cb8b ---- /dev/null -+++ b/ui/policies.html -@@ -0,0 +1,23 @@ -+ -+ -+ -+ -+ -+ About PC -+ -+ -+ {% include "header.html" %} -+





      -+

      Here the information about policies would be shown

      -+ -+

















      -+ {% include "footer.html" %} -+ -+ -+ -+ -diff --git a/ui/viewpost.html b/ui/viewpost.html -index 01aeca5..b612529 100644 ---- a/ui/viewpost.html -+++ b/ui/viewpost.html -@@ -61,7 +61,7 @@ email : ranihaileydesai@gmail.com -
      -
      -
      --

      -+

      -

      Revision History of this Post


      - -
      -@@ -72,7 +72,7 @@ email : ranihaileydesai@gmail.com - - - {% for rev in revpostobj %} --
    1. The post was updated by {{rev.owner_rev.user.first_name}} on {{rev.created}}
    2. -+
    3. The post was updated by {{rev.owner_rev.user.first_name}} on {{rev.created}}
    4. - -
      - {% if rev.title_change %} -@@ -81,6 +81,10 @@ email : ranihaileydesai@gmail.com - {% if rev.description_change %} - The description has been changed from "{{rev.description_post_rev}}" to "{{post.description_post}}" - {% endif %} -+ {% if rev.link_change %} -+ The link has been changed from "{{rev.link_post_rev}}" to "{{post.link_post}}" -+ {% endif %} -+ -
      - - {% endfor %} -diff --git a/webhub/urls.py b/webhub/urls.py -index 633f3c2..d9c9dd1 100644 ---- a/webhub/urls.py -+++ b/webhub/urls.py -@@ -45,9 +45,13 @@ urlpatterns = patterns('', - url(r'^post/(?P[0-9]+)/$', views.post_detail, name='post_detail'), - url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), - url(r'^api/', include(router.urls)), -- -+ url(r'^aboutPC/$', views.aboutPC, name='aboutPC'), -+ url(r'^policies/$', views.policies, name='policies'), -+ url(r'^details/$', views.details, name='details'), -+ url(r'^helpPC/$', views.helpPC, name='helpPC'), - ) - - - - -+ -diff --git a/webhub/urls.pyc b/webhub/urls.pyc -index 973ce4e..73b49f9 100644 -Binary files a/webhub/urls.pyc and b/webhub/urls.pyc differ -diff --git a/webhub/views.py b/webhub/views.py -index f09d960..f6f6bc9 100644 ---- a/webhub/views.py -+++ b/webhub/views.py -@@ -726,3 +726,20 @@ def change_pass_page(request): - def peacetrack(request): - return HttpResponse(jinja_environ.get_template('peacetrack.html').render({"pcuser":None})) - -+#called when user wishes to go to the Peacetrack from dashboard -+def aboutPC(request): -+ return HttpResponse(jinja_environ.get_template('aboutPC.html').render({"pcuser":None})) -+ -+#called when user wishes to go to the Peacetrack from dashboard -+def policies(request): -+ return HttpResponse(jinja_environ.get_template('policies.html').render({"pcuser":None})) -+ -+#called when user wishes to go to the Peacetrack from dashboard -+def details(request): -+ return HttpResponse(jinja_environ.get_template('details.html').render({"pcuser":None})) -+ -+#called when user wishes to go to the Peacetrack from dashboard -+def helpPC(request): -+ return HttpResponse(jinja_environ.get_template('helpPC.html').render({"pcuser":None})) -+ -+ -diff --git a/webhub/views.pyc b/webhub/views.pyc -index 71b0bce..b69e3fb 100644 -Binary files a/webhub/views.pyc and b/webhub/views.pyc differ - -commit 8cf1b621e0fc3d5a1ce1498c661b1387e07c6860 -Author: desaivaibhavi -Date: Mon Jun 23 21:15:59 2014 +0000 - - link added along with the post - -diff --git a/infohub/settings.py b/infohub/settings.py -index 93cefd3..c3ad798 100644 ---- a/infohub/settings.py -+++ b/infohub/settings.py -@@ -30,7 +30,6 @@ INSTALLED_APPS = ( - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.messages', -- 'django.contrib.sites', - 'django.contrib.staticfiles', - 'webhub', - 'rest_framework', -diff --git a/infohub/settings.pyc b/infohub/settings.pyc -index 7dd8b85..7ab205b 100644 -Binary files a/infohub/settings.pyc and b/infohub/settings.pyc differ -diff --git a/ui/editpost.html b/ui/editpost.html -index 643f706..d790a39 100644 ---- a/ui/editpost.html -+++ b/ui/editpost.html -@@ -17,7 +17,7 @@ email : ranihaileydesai@gmail.com - -

      Malaria : infoHub

      - --
      -+
      -
      -

      Edit Post

      -
      -@@ -46,6 +46,20 @@ email : ranihaileydesai@gmail.com - -
      -
      -+ -+
      -+
      -+
      -+
      -+
      -+

      Link

      -+
      -+
      -+ -+ -+
      -+
      -+ -
      - -
      -diff --git a/ui/newpost.html b/ui/newpost.html -index 1a09c6a..637eadf 100644 ---- a/ui/newpost.html -+++ b/ui/newpost.html -@@ -15,7 +15,7 @@ email : ranihaileydesai@gmail.com -





      -

      Malaria : infoHub

      - --
      -+
      -
      -

      New Post

      -
      -@@ -43,13 +43,25 @@ email : ranihaileydesai@gmail.com - -
      -
      -+
      -+
      -+
      -+
      -+
      -+

      Link

      -+
      -+
      -+ -+
      -+
      -+ -
      - -
      -
      -
      -
      -- -+ -
      -
      -diff --git a/ui/viewpost.html b/ui/viewpost.html -index 0ed988a..01aeca5 100644 ---- a/ui/viewpost.html -+++ b/ui/viewpost.html -@@ -16,7 +16,7 @@ email : ranihaileydesai@gmail.com -





      - -

      Malaria : infoHub

      --
      -+
      -
      - -

      View Post

      -@@ -43,6 +43,16 @@ email : ranihaileydesai@gmail.com -

      {{post.description_post}}

      -
      -

      -+
      -+
      -+
      -+
      -+

      Link :

      -+
      -+ -+

      -
      -      - -diff --git a/webhub/models.py b/webhub/models.py -index fd96783..b0ffc12 100644 ---- a/webhub/models.py -+++ b/webhub/models.py -@@ -35,6 +35,7 @@ class Pcuser(models.Model): - #for reset_password - reset_pass = models.CharField(default="",max_length=320) - -+ - #path to default user image - image = models.CharField(max_length=300, default="http://i.imgur.com/dnjclWV.png") - #image -@@ -58,6 +59,8 @@ class Post(models.Model): - title_post = models.CharField(max_length=300) - #description - description_post = models.CharField(max_length=2000) -+ #link to important documents -+ link_post = models.CharField(max_length=2000) - #field to note the timestamp when the post was created - created = models.DateTimeField(auto_now_add=True) - #field to note the timestamp when the post was last updated -@@ -77,12 +80,16 @@ class RevPost(models.Model): - title_post_rev = models.CharField(max_length=300) - #revised description - description_post_rev = models.CharField(max_length=2000) -+ #revised link to important documents -+ link_post_rev = models.CharField(max_length=2000) - #field to note the timestamp when the revised version was created - created = models.DateTimeField(auto_now_add=True) - #change in title - title_change = models.BooleanField(default=False) - #change in description - description_change = models.BooleanField(default=False) -+ #change in link to important documents -+ link_change = models.CharField(max_length=2000) - - - def __unicode__(self): -diff --git a/webhub/models.pyc b/webhub/models.pyc -index e18c7be..32bd348 100644 -Binary files a/webhub/models.pyc and b/webhub/models.pyc differ -diff --git a/webhub/views.py b/webhub/views.py -index 4e15556..f09d960 100644 ---- a/webhub/views.py -+++ b/webhub/views.py -@@ -352,10 +352,12 @@ def post_new(request): - owner = request.user.pcuser - title_post = request.REQUEST['title'] - description_post = request.REQUEST['description'] -+ link_post = request.REQUEST['link'] - - entry = Post(owner=owner, - title_post=title_post, - description_post=description_post, -+ link_post=link_post, - ) - entry.save() - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, -@@ -393,52 +395,113 @@ def edit_post(request): - - title_post = request.REQUEST['title'] - description_post = request.REQUEST['description'] -+ link_post = request.REQUEST['link'] - - if postobj.title_post <> title_post: - if postobj.description_post <> description_post: -- entry = RevPost(owner_rev=owner, -- owner_rev_post=postobj, -- title_post_rev=postobj.title_post, -- description_post_rev=postobj.description_post, -- title_change=True, -- description_change=True, -- ) -- entry.save() -+ if postobj.link_post <> link_post: -+ entry = RevPost(owner_rev=owner, -+ owner_rev_post=postobj, -+ title_post_rev=postobj.title_post, -+ description_post_rev=postobj.description_post, -+ link_post_rev=postobj.link_post, -+ title_change=True, -+ description_change=True, -+ link_change=True, -+ ) -+ entry.save() -+ else: -+ entry = RevPost(owner_rev=owner, -+ owner_rev_post=postobj, -+ title_post_rev=postobj.title_post, -+ description_post_rev=postobj.description_post, -+ link_post_rev=postobj.link_post, -+ title_change=True, -+ description_change=True, -+ link_change=False, -+ ) -+ entry.save() - else: -- entry = RevPost(owner_rev=owner, -- owner_rev_post=postobj, -- title_post_rev=postobj.title_post, -- description_post_rev=postobj.description_post, -- title_change=True, -- description_change=False, -- ) -- entry.save() -+ if postobj.link_post <> link_post: -+ entry = RevPost(owner_rev=owner, -+ owner_rev_post=postobj, -+ title_post_rev=postobj.title_post, -+ description_post_rev=postobj.description_post, -+ link_post_rev=postobj.link_post, -+ title_change=True, -+ description_change=False, -+ link_change=True, -+ ) -+ entry.save() -+ else: -+ entry = RevPost(owner_rev=owner, -+ owner_rev_post=postobj, -+ title_post_rev=postobj.title_post, -+ description_post_rev=postobj.description_post, -+ link_post_rev=postobj.link_post, -+ title_change=True, -+ description_change=False, -+ link_change=False, -+ ) -+ entry.save() -+ -+ - else: - if postobj.description_post <> description_post: -- entry = RevPost(owner_rev=owner, -- owner_rev_post=postobj, -- title_post_rev=postobj.title_post, -- description_post_rev=postobj.description_post, -- title_change=False, -- description_change=True, -- ) -- entry.save() -+ if postobj.link_post <> link_post: -+ entry = RevPost(owner_rev=owner, -+ owner_rev_post=postobj, -+ title_post_rev=postobj.title_post, -+ description_post_rev=postobj.description_post, -+ link_post_rev=postobj.link_post, -+ title_change=False, -+ description_change=True, -+ link_change=True, -+ ) -+ entry.save() -+ else: -+ entry = RevPost(owner_rev=owner, -+ owner_rev_post=postobj, -+ title_post_rev=postobj.title_post, -+ description_post_rev=postobj.description_post, -+ link_post_rev=postobj.link_post, -+ title_change=False, -+ description_change=True, -+ link_change=False, -+ ) -+ entry.save() -+ -+ - else: -- entry = RevPost(owner_rev=owner, -- owner_rev_post=postobj, -- title_post_rev=postobj.title_post, -- description_post_rev=postobj.description_post, -- title_change=False, -- description_change=False, -- ) -- entry.save() -- -- -+ if postobj.link_post <> link_post: -+ entry = RevPost(owner_rev=owner, -+ owner_rev_post=postobj, -+ title_post_rev=postobj.title_post, -+ description_post_rev=postobj.description_post, -+ link_post_rev=postobj.link_post, -+ title_change=False, -+ description_change=False, -+ link_change=True, -+ ) -+ entry.save() -+ else: -+ entry = RevPost(owner_rev=owner, -+ owner_rev_post=postobj, -+ title_post_rev=postobj.title_post, -+ description_post_rev=postobj.description_post, -+ link_post_rev=postobj.link_post, -+ title_change=False, -+ description_change=False, -+ link_change=False, -+ ) -+ entry.save() -+ - - - - postobj.title_post = title_post - postobj.description_post = description_post -+ postobj.link_post = link_post - - postobj.save() - -diff --git a/webhub/views.pyc b/webhub/views.pyc -index 0fe6bef..71b0bce 100644 -Binary files a/webhub/views.pyc and b/webhub/views.pyc differ - -commit e9a52568c739109b89e8d57f9cc3d2b8dff7b11d -Author: desaivaibhavi -Date: Mon Jun 23 12:35:54 2014 +0000 - - user profile icon working in static manner, small suggestions incorporated - -diff --git a/infohub/settings.py b/infohub/settings.py -index ce5237e..93cefd3 100644 ---- a/infohub/settings.py -+++ b/infohub/settings.py -@@ -19,7 +19,7 @@ DEBUG = True - - TEMPLATE_DEBUG = True - --ALLOWED_HOSTS = [] -+ALLOWED_HOSTS = ['localhost','192.168.33.10','192.168.33.10:8000'] - - - # Application definition -@@ -30,7 +30,8 @@ INSTALLED_APPS = ( - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.messages', -- 'django.contrib.staticfiles', -+ 'django.contrib.sites', -+ 'django.contrib.staticfiles', - 'webhub', - 'rest_framework', - ) -@@ -79,8 +80,21 @@ USE_TZ = True - - # Static files (CSS, JavaScript, Images) - # https://docs.djangoproject.com/en/1.6/howto/static-files/ -- -+MEDIA_ROOT='/vagrant/submit/media/propics/' - STATIC_URL = '/static/' -+STATIC_ROOT = '' -+ -+# Additional locations of static files -+STATICFILES_DIRS = ( -+ '/vagrant/submit/media/propics/', -+ '/vagrant/submit/app-web-server/ui/bootstrap/fonts', -+ 'lol', -+) -+STATICFILES_FINDERS = ( -+ 'django.contrib.staticfiles.finders.FileSystemFinder', -+ 'django.contrib.staticfiles.finders.AppDirectoriesFinder', -+) -+ - - REST_FRAMEWORK = { - 'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',), -diff --git a/infohub/settings.pyc b/infohub/settings.pyc -index 3a8eb23..7dd8b85 100644 -Binary files a/infohub/settings.pyc and b/infohub/settings.pyc differ -diff --git a/paths.py b/paths.py -new file mode 100644 -index 0000000..dd053eb ---- /dev/null -+++ b/paths.py -@@ -0,0 +1 @@ -+cpspath='/home/rani/gsoc/DevEnvironments/pc-web/submit/' -diff --git a/paths.pyc b/paths.pyc -new file mode 100644 -index 0000000..b57516b -Binary files /dev/null and b/paths.pyc differ -diff --git a/ui/edit_profile.html b/ui/edit_profile.html -index 193c4e2..0fd7171 100644 ---- a/ui/edit_profile.html -+++ b/ui/edit_profile.html -@@ -17,7 +17,7 @@ email : ranihaileydesai@gmail.com -





      - - --
      -+
      -
      -

      Edit Profile

      -
      -@@ -27,7 +27,7 @@ email : ranihaileydesai@gmail.com -
      -
      -
      -- -+ - - - -@@ -56,11 +56,16 @@ email : ranihaileydesai@gmail.com - -
      - -+
      -+ Change Profile Photo: -+
      -+ -+
      - -
      -
      -
      -- -+ -

      User {{pcuser.user}}

      -
      -
      -@@ -79,5 +84,8 @@ email : ranihaileydesai@gmail.com - -

      - {% include "footer.html" %} -+ -+ -+ - - -\ No newline at end of file -diff --git a/ui/profile.html b/ui/profile.html -index 07cdbcd..c31bde5 100644 ---- a/ui/profile.html -+++ b/ui/profile.html -@@ -34,7 +34,7 @@ email : ranihaileydesai@gmail.com -
      -
      -
      -- -+ -

      User {{profiler.user}}

      -
      -
      -@@ -43,7 +43,7 @@ email : ranihaileydesai@gmail.com -
      -

      -
      -- {% if profiler.user.username == pcuser .user.username %} -+ {% if profiler.user.username == pcuser.user.username %} - - {% endif %} - -diff --git a/ui/signup.html b/ui/signup.html -index 3f6eea4..9155bc4 100644 ---- a/ui/signup.html -+++ b/ui/signup.html -@@ -29,10 +29,10 @@ email : ranihaileydesai@gmail.com - -
      - - -
      - -diff --git a/webhub/models.py b/webhub/models.py -index d78b033..fd96783 100644 ---- a/webhub/models.py -+++ b/webhub/models.py -@@ -9,9 +9,20 @@ from django.utils import timezone - from django.contrib.auth.models import User - import os - from uuid import uuid4 -+from paths import cpspath -+ -+ -+ -+#To update the filename of the newly uploaded photo -+def update_filename(instance, filename): -+ path = '/vagrant/submit/media/propics/' -+ format = instance.user.username + ".jpg" -+ return os.path.join(path, format) -+ - - #Django provides a table called user that stores basic user information like username, password and email id. - -+ - class Pcuser(models.Model): - #username - user = models.OneToOneField(User) -@@ -24,6 +35,11 @@ class Pcuser(models.Model): - #for reset_password - reset_pass = models.CharField(default="",max_length=320) - -+ #path to default user image -+ image = models.CharField(max_length=300, default="http://i.imgur.com/dnjclWV.png") -+ #image -+ imageobj = models.ImageField(upload_to=update_filename) -+ - #verification status - #1 - unverified - #any other number = verification code -@@ -31,8 +47,8 @@ class Pcuser(models.Model): - - def __unicode__(self): - return self.user.username -- -- -+ -+ - #Post table stores details about posts - - class Post(models.Model): -diff --git a/webhub/models.pyc b/webhub/models.pyc -index c58fd53..e18c7be 100644 -Binary files a/webhub/models.pyc and b/webhub/models.pyc differ -diff --git a/webhub/views.py b/webhub/views.py -index 193ea51..4e15556 100644 ---- a/webhub/views.py -+++ b/webhub/views.py -@@ -26,6 +26,7 @@ from rest_framework import permissions - from rest_framework import status - from rest_framework.decorators import api_view - from rest_framework.response import Response -+from paths import cpspath - - import smtplib - -@@ -358,8 +359,7 @@ def post_new(request): - ) - entry.save() - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, -- "text":'Post successful.',"text1":'Click here to go to home.', -- "link": '/'})) -+ "text":'Post created successfully.',"text1":'Click here to view post.', "link": '/view_post/?key=' + str(entry.id)})) - - #Calls the edit post page. Also, sends the autofill form data. - def edit_post_page(request): -@@ -496,6 +496,29 @@ def edit_profile(request): - return HttpResponse(jinja_environ.get_template('index.html').render({"pcuser":None})) - - -+ #To remove profile picture -+ if 'reset_image' in request.REQUEST.keys(): -+ request.user.pcuser.image = "http://vfcstatic.r.worldssl.net/assets/car_icon-e0df962a717a5db6ebc8b37e80b05713.png" -+ if str(request.user.pcuser.imageobj) <> '': -+ path = '/vagrant/submit/media/propics/' + request.user.username + request.user.pcuser.imageobj.url[request.user.pcuser.imageobj.url.rfind('.'):] -+ if os.path.isfile(path): -+ os.remove(path) -+ request.user.pcuser.save() -+ return edit_profile_page(request) -+ -+ -+ if 'image' in request.FILES.keys(): -+ #delete old file -+ if str(request.user.pcuser.imageobj) <> '': -+ path = '/vagrant/submit/media/propics/' + request.user.username + ".jpg" -+ if os.path.isfile(path): -+ os.remove(path) -+ request.user.pcuser.imageobj = request.FILES['image'] -+ request.user.pcuser.image = '/static/' + request.user.username + ".jpg" -+ -+ -+ -+ - - - request.user.pcuser.gender = request.REQUEST['gender'] -diff --git a/webhub/views.pyc b/webhub/views.pyc -index a9bfc6e..0fe6bef 100644 -Binary files a/webhub/views.pyc and b/webhub/views.pyc differ - -commit 68c70b64f36942f773fbef4cb96396b08f9df011 -Author: desaivaibhavi -Date: Mon Jun 16 15:56:53 2014 +0000 - - user can edit only his own profile - -diff --git a/ui/profile.html b/ui/profile.html -index 59b7397..07cdbcd 100644 ---- a/ui/profile.html -+++ b/ui/profile.html -@@ -9,7 +9,7 @@ email : ranihaileydesai@gmail.com - - - -- User Profile | {{profiler.first_name}} -+ User Profile | {{profiler.user.first_name}} - - - {% include "header.html" %} -@@ -43,7 +43,9 @@ email : ranihaileydesai@gmail.com -
      -

      -
      -+ {% if profiler.user.username == pcuser .user.username %} - -+ {% endif %} - -
      - -diff --git a/ui/viewpost.html b/ui/viewpost.html -index 2fda4ff..0ed988a 100644 ---- a/ui/viewpost.html -+++ b/ui/viewpost.html -@@ -64,14 +64,14 @@ email : ranihaileydesai@gmail.com - {% for rev in revpostobj %} -
    5. The post was updated by {{rev.owner_rev.user.first_name}} on {{rev.created}}
    6. - --
      -+
      - {% if rev.title_change %} - The title has been changed from "{{rev.title_post_rev}}" to "{{post.title_post}}" - {% endif %} - {% if rev.description_change %} - The description has been changed from "{{rev.description_post_rev}}" to "{{post.description_post}}" - {% endif %} --
      -+
      - - {% endfor %} -
      - -commit 6aac759435604a98ededabd77893e2f04f82fd3e -Author: desaivaibhavi -Date: Mon Jun 16 15:46:54 2014 +0000 - - revision history module completed - -diff --git a/ui/viewpost.html b/ui/viewpost.html -index b888635..2fda4ff 100644 ---- a/ui/viewpost.html -+++ b/ui/viewpost.html -@@ -62,11 +62,17 @@ email : ranihaileydesai@gmail.com - - - {% for rev in revpostobj %} --
      The post was updated by {{rev.owner_rev.user.first_name}} on {{rev.created}}
      --
      -- -- --
      -+
    7. The post was updated by {{rev.owner_rev.user.first_name}} on {{rev.created}}
    8. -+ -+
      -+ {% if rev.title_change %} -+ The title has been changed from "{{rev.title_post_rev}}" to "{{post.title_post}}" -+ {% endif %} -+ {% if rev.description_change %} -+ The description has been changed from "{{rev.description_post_rev}}" to "{{post.description_post}}" -+ {% endif %} -+
      -+ - {% endfor %} -
      -
      -diff --git a/webhub/models.py b/webhub/models.py -index 88a752d..d78b033 100644 ---- a/webhub/models.py -+++ b/webhub/models.py -@@ -63,6 +63,10 @@ class RevPost(models.Model): - description_post_rev = models.CharField(max_length=2000) - #field to note the timestamp when the revised version was created - created = models.DateTimeField(auto_now_add=True) -+ #change in title -+ title_change = models.BooleanField(default=False) -+ #change in description -+ description_change = models.BooleanField(default=False) - - - def __unicode__(self): -diff --git a/webhub/models.pyc b/webhub/models.pyc -index feb1297..c58fd53 100644 -Binary files a/webhub/models.pyc and b/webhub/models.pyc differ -diff --git a/webhub/views.py b/webhub/views.py -index 9980509..193ea51 100644 ---- a/webhub/views.py -+++ b/webhub/views.py -@@ -391,15 +391,50 @@ def edit_post(request): - except Exception as e: - return HttpResponse(e) - -- entry = RevPost(owner_rev=owner, -- owner_rev_post=postobj, -+ title_post = request.REQUEST['title'] -+ description_post = request.REQUEST['description'] -+ -+ if postobj.title_post <> title_post: -+ if postobj.description_post <> description_post: -+ entry = RevPost(owner_rev=owner, -+ owner_rev_post=postobj, - title_post_rev=postobj.title_post, - description_post_rev=postobj.description_post, -+ title_change=True, -+ description_change=True, - ) -- entry.save() -+ entry.save() -+ else: -+ entry = RevPost(owner_rev=owner, -+ owner_rev_post=postobj, -+ title_post_rev=postobj.title_post, -+ description_post_rev=postobj.description_post, -+ title_change=True, -+ description_change=False, -+ ) -+ entry.save() -+ else: -+ if postobj.description_post <> description_post: -+ entry = RevPost(owner_rev=owner, -+ owner_rev_post=postobj, -+ title_post_rev=postobj.title_post, -+ description_post_rev=postobj.description_post, -+ title_change=False, -+ description_change=True, -+ ) -+ entry.save() -+ else: -+ entry = RevPost(owner_rev=owner, -+ owner_rev_post=postobj, -+ title_post_rev=postobj.title_post, -+ description_post_rev=postobj.description_post, -+ title_change=False, -+ description_change=False, -+ ) -+ entry.save() - -- title_post = request.REQUEST['title'] -- description_post = request.REQUEST['description'] -+ -+ - - - postobj.title_post = title_post -diff --git a/webhub/views.pyc b/webhub/views.pyc -index 70fb5f2..a9bfc6e 100644 -Binary files a/webhub/views.pyc and b/webhub/views.pyc differ - -commit 7ab3f85e23af078b68ec621a25923589ef0a8c8c -Author: desaivaibhavi -Date: Mon Jun 16 14:00:37 2014 +0000 - - post and pcuser json format api done with authentication - -diff --git a/webhub/serializers.py b/webhub/serializers.py -index 4856677..4dddc6a 100644 ---- a/webhub/serializers.py -+++ b/webhub/serializers.py -@@ -12,4 +12,9 @@ class UserSerializer(serializers.HyperlinkedModelSerializer): - class PcuserSerializer(serializers.ModelSerializer): - class Meta: - model = Pcuser -- fields = ('user', 'location', 'phone', 'gender','id') -\ No newline at end of file -+ fields = ('user', 'location', 'phone', 'gender','id') -+ -+class PostSerializer(serializers.ModelSerializer): -+ class Meta: -+ model = Post -+ fields = ('owner', 'title_post', 'description_post', 'created','updated','id') -\ No newline at end of file -diff --git a/webhub/serializers.pyc b/webhub/serializers.pyc -index 91146b2..c8f09ba 100644 -Binary files a/webhub/serializers.pyc and b/webhub/serializers.pyc differ -diff --git a/webhub/urls.py b/webhub/urls.py -index f31c044..633f3c2 100644 ---- a/webhub/urls.py -+++ b/webhub/urls.py -@@ -6,6 +6,8 @@ - from django.conf.urls import patterns, url, include - from rest_framework import routers - from webhub import views -+ -+ - router = routers.DefaultRouter() - router.register(r'users', views.UserViewSet) - -@@ -38,13 +40,12 @@ urlpatterns = patterns('', - url(r'^change_pass/$', views.change_pass, name='change_pass'), - url(r'^change_pass_page/$', views.change_pass_page, name='change_pass_page'), - url(r'^pcuser/$', views.pcuser_list, name='pcuser_list'), -+ url(r'^post/$', views.post_list, name='post_list'), - url(r'^pcuser/(?P[0-9]+)/$', views.pcuser_detail, name='pcuser_detail'), -+ url(r'^post/(?P[0-9]+)/$', views.post_detail, name='post_detail'), - url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), - url(r'^api/', include(router.urls)), - -- -- -- - ) - - -diff --git a/webhub/urls.pyc b/webhub/urls.pyc -index 5357bae..973ce4e 100644 -Binary files a/webhub/urls.pyc and b/webhub/urls.pyc differ -diff --git a/webhub/views.py b/webhub/views.py -index 6961e84..9980509 100644 ---- a/webhub/views.py -+++ b/webhub/views.py -@@ -22,6 +22,11 @@ from rest_framework import viewsets - from webhub.serializers import * - from rest_framework.renderers import JSONRenderer - from rest_framework.parsers import JSONParser -+from rest_framework import permissions -+from rest_framework import status -+from rest_framework.decorators import api_view -+from rest_framework.response import Response -+ - import smtplib - - #SMTP port for sending emails -@@ -40,67 +45,86 @@ class UserViewSet(viewsets.ModelViewSet): - queryset = User.objects.all() - serializer_class = UserSerializer - -- - --class JSONResponse(HttpResponse): -- """ -- An HttpResponse that renders its content into JSON. -- """ -- def __init__(self, data, **kwargs): -- content = JSONRenderer().render(data) -- kwargs['content_type'] = 'application/json' -- super(JSONResponse, self).__init__(content, **kwargs) -- -- -- --@csrf_exempt -+#List all pcusers, or create a new pcuser. -+@api_view(['GET', 'POST']) - def pcuser_list(request): -- """ -- List all code snippets, or create a new snippet. -- """ - if request.method == 'GET': - pcuser = Pcuser.objects.all() - serializer = PcuserSerializer(pcuser, many=True) -- return JSONResponse(serializer.data) -+ return Response(serializer.data) - - elif request.method == 'POST': -- data = JSONParser().parse(request) -- serializer = PcuserSerializer(data=data) -+ serializer = PcuserSerializer(data=request.DATA) - if serializer.is_valid(): - serializer.save() -- return JSONResponse(serializer.data, status=201) -- return JSONResponse(serializer.errors, status=400) -- -- --@csrf_exempt -+ return Response(serializer.data, status=status.HTTP_201_CREATED) -+ return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) -+ -+#Retrieve, update or delete a pcuser instance. -+@api_view(['GET', 'PUT', 'DELETE']) - def pcuser_detail(request, pk): -- """ -- Retrieve, update or delete a code snippet. -- """ - try: - pcuser = Pcuser.objects.get(pk=pk) - except Pcuser.DoesNotExist: -- return HttpResponse(status=404) -+ return Response(status=status.HTTP_404_NOT_FOUND) - - if request.method == 'GET': - serializer = PcuserSerializer(pcuser) -- return JSONResponse(serializer.data) -+ return Response(serializer.data) - - elif request.method == 'PUT': -- data = JSONParser().parse(request) -- serializer = PcuserSerializer(pcuser, data=data) -+ serializer = PcuserSerializer(pcuser, data=request.DATA) - if serializer.is_valid(): - serializer.save() -- return JSONResponse(serializer.data) -- return JSONResponse(serializer.errors, status=400) -+ return Response(serializer.data) -+ return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) - - elif request.method == 'DELETE': - pcuser.delete() -- return HttpResponse(status=204) -- -+ return Response(status=status.HTTP_204_NO_CONTENT) - - -+#List all posts, or create a new post. -+@api_view(['GET', 'POST']) -+def post_list(request): -+ if request.method == 'GET': -+ post = Post.objects.all() -+ serializer = PostSerializer(post, many=True) -+ return Response(serializer.data) - -+ elif request.method == 'POST': -+ serializer = PostSerializer(data=request.DATA) -+ if serializer.is_valid(): -+ serializer.save() -+ return Response(serializer.data, status=status.HTTP_201_CREATED) -+ return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) -+ -+#Retrieve, update or delete a post instance. -+@api_view(['GET', 'PUT', 'DELETE']) -+def post_detail(request, pk): -+ try: -+ post = Post.objects.get(pk=pk) -+ except Pcuser.DoesNotExist: -+ return Response(status=status.HTTP_404_NOT_FOUND) -+ -+ if request.method == 'GET': -+ serializer = PostSerializer(post) -+ return Response(serializer.data) -+ -+ elif request.method == 'PUT': -+ serializer = PostSerializer(post, data=request.DATA) -+ if serializer.is_valid(): -+ serializer.save() -+ return Response(serializer.data) -+ return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) -+ -+ elif request.method == 'DELETE': -+ post.delete() -+ return Response(status=status.HTTP_204_NO_CONTENT) -+ -+ -+ - #Calls index page - def index(request): - return HttpResponse(jinja_environ.get_template('index.html').render({"pcuser":None})) -diff --git a/webhub/views.pyc b/webhub/views.pyc -index 95bd05c..70fb5f2 100644 -Binary files a/webhub/views.pyc and b/webhub/views.pyc differ - -commit 4df79fcca33fc73a7020cd9b7ed323f0ec3bc625 -Author: desaivaibhavi -Date: Mon Jun 16 02:43:06 2014 +0000 - - minor changes required to the code - -diff --git a/ui/index.html b/ui/index.html -index e408276..5346f56 100644 ---- a/ui/index.html -+++ b/ui/index.html -@@ -26,7 +26,7 @@ email : ranihaileydesai@gmail.com -

      Username :

      - -

      Password :

      -- -+ -
      - Forgot Password ? -

      -diff --git a/ui/viewpost.html b/ui/viewpost.html -index 4d30cce..b888635 100644 ---- a/ui/viewpost.html -+++ b/ui/viewpost.html -@@ -59,7 +59,7 @@ email : ranihaileydesai@gmail.com -
      -
      -
      The post was created by {{post.owner}} on {{post.created}}
      --
      -+ - - {% for rev in revpostobj %} -
      The post was updated by {{rev.owner_rev.user.first_name}} on {{rev.created}}
      -diff --git a/webhub/models.py b/webhub/models.py -index 7bde5b8..88a752d 100644 ---- a/webhub/models.py -+++ b/webhub/models.py -@@ -66,4 +66,4 @@ class RevPost(models.Model): - - - def __unicode__(self): -- return self.owner.user.username -+ return self.owner_rev.user.username -diff --git a/webhub/models.pyc b/webhub/models.pyc -index 4c93dc0..feb1297 100644 -Binary files a/webhub/models.pyc and b/webhub/models.pyc differ -diff --git a/webhub/views.py b/webhub/views.py -index cd74bc4..6961e84 100644 ---- a/webhub/views.py -+++ b/webhub/views.py -@@ -181,7 +181,7 @@ def signup_do(request): - send_verification_email(request) - - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -- "text":'

      Username already exists. Please enter some other username.

      Go Back or click OK to go to signup page.

      ',"link":'/signup_page/'})) -+ "text":'

      Verification email sent. check your inbox and verify the account.

      ',"text1":'

      Go Back or click OK to go to signup page.

      ',"link":'/signup_page/'})) - - - -@@ -227,7 +227,7 @@ def send_email(msg, email): - def verify(request): - if not request.user.is_authenticated(): - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -- "text":'Verification Successful. Go to homepage' , "link": '/'})) -+ "text":'Verification Successful.',"text1":'Go to homepage' , "link": '/'})) - # return HttpResponse(jinja_environ.get_template('index.html').render({"pcuser":Non, - # "code":request.REQUEST['code']})) - # index(request) -@@ -235,21 +235,21 @@ def verify(request): - request.user.pcuser - except: - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -- "text":'

      No Pcuser associated.

      Please go back or click OK to go to the homepage

      ',"link":'/'})) -+ "text":'

      No Pcuser associated.

      ',"text1":'

      Please click here to go to the homepage

      ',"link":'/'})) - - code = request.REQUEST['code'] - pcuser = request.user.pcuser - if pcuser.verified == '1': - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, -- "text":'

      Verification successful.

      Click OK to go to the homepage

      ',"link":'/'})) -+ "text":'

      Verification successful.

      ',"text1":'

      Click here to go to the homepage

      ',"link":'/'})) - elif code == pcuser.verified: - pcuser.verified = '1' - pcuser.save() - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, -- "text":'

      Verification successful.

      Click OK to go to the homepage

      ',"link":'/'})) -+ "text":'

      Verification successful.

      ',"text1":'

      Click here to go to the homepage

      ',"link":'/'})) - - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, -- "text":'

      Verification Failed.

      Please go back or click OK to go to the homepage

      ',"link":'/'})) -+ "text":'

      Verification Failed.

      ',"text1":'

      Please go back or click here to go to the homepage

      ',"link":'/'})) - - - -diff --git a/webhub/views.pyc b/webhub/views.pyc -index e13f0ee..95bd05c 100644 -Binary files a/webhub/views.pyc and b/webhub/views.pyc differ - -commit 30c93ae20443df7ec3e3531334fb4e533f97e79f -Author: desaivaibhavi -Date: Sat Jun 14 12:59:51 2014 +0000 - - user json api created - -diff --git a/webhub/serializers.py b/webhub/serializers.py -index 91f54a2..4856677 100644 ---- a/webhub/serializers.py -+++ b/webhub/serializers.py -@@ -9,3 +9,7 @@ class UserSerializer(serializers.HyperlinkedModelSerializer): - fields = ('url', 'username', 'email') - - -+class PcuserSerializer(serializers.ModelSerializer): -+ class Meta: -+ model = Pcuser -+ fields = ('user', 'location', 'phone', 'gender','id') -\ No newline at end of file -diff --git a/webhub/serializers.pyc b/webhub/serializers.pyc -index 3259576..91146b2 100644 -Binary files a/webhub/serializers.pyc and b/webhub/serializers.pyc differ -diff --git a/webhub/urls.py b/webhub/urls.py -index 00dbd68..f31c044 100644 ---- a/webhub/urls.py -+++ b/webhub/urls.py -@@ -37,9 +37,11 @@ urlpatterns = patterns('', - url(r'^reset_pass_page/$', views.reset_pass_page, name='reset_pass_page'), - url(r'^change_pass/$', views.change_pass, name='change_pass'), - url(r'^change_pass_page/$', views.change_pass_page, name='change_pass_page'), -+ url(r'^pcuser/$', views.pcuser_list, name='pcuser_list'), -+ url(r'^pcuser/(?P[0-9]+)/$', views.pcuser_detail, name='pcuser_detail'), - url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), - url(r'^api/', include(router.urls)), -- -+ - - - -diff --git a/webhub/urls.pyc b/webhub/urls.pyc -index 24dc1f9..5357bae 100644 -Binary files a/webhub/urls.pyc and b/webhub/urls.pyc differ -diff --git a/webhub/views.py b/webhub/views.py -index f5eaf55..cd74bc4 100644 ---- a/webhub/views.py -+++ b/webhub/views.py -@@ -19,7 +19,9 @@ from jinja2.ext import loopcontrols - from webhub.checker import check - from webhub.models import * - from rest_framework import viewsets --from webhub.serializers import UserSerializer -+from webhub.serializers import * -+from rest_framework.renderers import JSONRenderer -+from rest_framework.parsers import JSONParser - import smtplib - - #SMTP port for sending emails -@@ -38,6 +40,63 @@ class UserViewSet(viewsets.ModelViewSet): - queryset = User.objects.all() - serializer_class = UserSerializer - -+ -+ -+class JSONResponse(HttpResponse): -+ """ -+ An HttpResponse that renders its content into JSON. -+ """ -+ def __init__(self, data, **kwargs): -+ content = JSONRenderer().render(data) -+ kwargs['content_type'] = 'application/json' -+ super(JSONResponse, self).__init__(content, **kwargs) -+ -+ -+ -+@csrf_exempt -+def pcuser_list(request): -+ """ -+ List all code snippets, or create a new snippet. -+ """ -+ if request.method == 'GET': -+ pcuser = Pcuser.objects.all() -+ serializer = PcuserSerializer(pcuser, many=True) -+ return JSONResponse(serializer.data) -+ -+ elif request.method == 'POST': -+ data = JSONParser().parse(request) -+ serializer = PcuserSerializer(data=data) -+ if serializer.is_valid(): -+ serializer.save() -+ return JSONResponse(serializer.data, status=201) -+ return JSONResponse(serializer.errors, status=400) -+ -+ -+@csrf_exempt -+def pcuser_detail(request, pk): -+ """ -+ Retrieve, update or delete a code snippet. -+ """ -+ try: -+ pcuser = Pcuser.objects.get(pk=pk) -+ except Pcuser.DoesNotExist: -+ return HttpResponse(status=404) -+ -+ if request.method == 'GET': -+ serializer = PcuserSerializer(pcuser) -+ return JSONResponse(serializer.data) -+ -+ elif request.method == 'PUT': -+ data = JSONParser().parse(request) -+ serializer = PcuserSerializer(pcuser, data=data) -+ if serializer.is_valid(): -+ serializer.save() -+ return JSONResponse(serializer.data) -+ return JSONResponse(serializer.errors, status=400) -+ -+ elif request.method == 'DELETE': -+ pcuser.delete() -+ return HttpResponse(status=204) - - - -diff --git a/webhub/views.pyc b/webhub/views.pyc -index 169c0f7..e13f0ee 100644 -Binary files a/webhub/views.pyc and b/webhub/views.pyc differ - -commit a8ec9535e065630cd9e6f2f046ffb1d4fea851a5 -Author: desaivaibhavi -Date: Fri Jun 13 12:03:02 2014 +0000 - - basic api created - -diff --git a/infohub/settings.py b/infohub/settings.py -index 6dba49a..ce5237e 100644 ---- a/infohub/settings.py -+++ b/infohub/settings.py -@@ -32,6 +32,7 @@ INSTALLED_APPS = ( - 'django.contrib.messages', - 'django.contrib.staticfiles', - 'webhub', -+ 'rest_framework', - ) - - MIDDLEWARE_CLASSES = ( -@@ -80,3 +81,8 @@ USE_TZ = True - # https://docs.djangoproject.com/en/1.6/howto/static-files/ - - STATIC_URL = '/static/' -+ -+REST_FRAMEWORK = { -+ 'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',), -+ 'PAGINATE_BY': 10 -+} -diff --git a/infohub/settings.pyc b/infohub/settings.pyc -index 8a1fa8f..3a8eb23 100644 -Binary files a/infohub/settings.pyc and b/infohub/settings.pyc differ -diff --git a/webhub/serializers.py b/webhub/serializers.py -new file mode 100644 -index 0000000..91f54a2 ---- /dev/null -+++ b/webhub/serializers.py -@@ -0,0 +1,11 @@ -+from django.contrib.auth.models import User -+from webhub.models import * -+ -+from rest_framework import serializers -+ -+class UserSerializer(serializers.HyperlinkedModelSerializer): -+ class Meta: -+ model = User -+ fields = ('url', 'username', 'email') -+ -+ -diff --git a/webhub/serializers.pyc b/webhub/serializers.pyc -new file mode 100644 -index 0000000..3259576 -Binary files /dev/null and b/webhub/serializers.pyc differ -diff --git a/webhub/urls.py b/webhub/urls.py -index b48a5c3..00dbd68 100644 ---- a/webhub/urls.py -+++ b/webhub/urls.py -@@ -3,9 +3,13 @@ - #Github username : desaivaibhavi - #email : ranihaileydesai@gmail.com - --from django.conf.urls import patterns, url -- -+from django.conf.urls import patterns, url, include -+from rest_framework import routers - from webhub import views -+router = routers.DefaultRouter() -+router.register(r'users', views.UserViewSet) -+ -+ - - urlpatterns = patterns('', - url(r'^index/$', views.index, name='index'), -@@ -33,6 +37,10 @@ urlpatterns = patterns('', - url(r'^reset_pass_page/$', views.reset_pass_page, name='reset_pass_page'), - url(r'^change_pass/$', views.change_pass, name='change_pass'), - url(r'^change_pass_page/$', views.change_pass_page, name='change_pass_page'), -+ url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), -+ url(r'^api/', include(router.urls)), -+ -+ - - - ) -diff --git a/webhub/urls.pyc b/webhub/urls.pyc -index 9a084e7..24dc1f9 100644 -Binary files a/webhub/urls.pyc and b/webhub/urls.pyc differ -diff --git a/webhub/views.py b/webhub/views.py -index dc634f9..f5eaf55 100644 ---- a/webhub/views.py -+++ b/webhub/views.py -@@ -18,6 +18,8 @@ import uuid - from jinja2.ext import loopcontrols - from webhub.checker import check - from webhub.models import * -+from rest_framework import viewsets -+from webhub.serializers import UserSerializer - import smtplib - - #SMTP port for sending emails -@@ -28,6 +30,18 @@ website = "http://192.168.33.10:8000" - - jinja_environ = jinja2.Environment(loader=jinja2.FileSystemLoader(['ui']), extensions=[loopcontrols]) - -+ -+class UserViewSet(viewsets.ModelViewSet): -+ """ -+ API endpoint that allows users to be viewed or edited. -+ """ -+ queryset = User.objects.all() -+ serializer_class = UserSerializer -+ -+ -+ -+ -+ - #Calls index page - def index(request): - return HttpResponse(jinja_environ.get_template('index.html').render({"pcuser":None})) -diff --git a/webhub/views.pyc b/webhub/views.pyc -index 50e707a..169c0f7 100644 -Binary files a/webhub/views.pyc and b/webhub/views.pyc differ - -commit fd3caa08d69ef3c01cdf186e20b778be5417348b -Author: desaivaibhavi -Date: Wed Jun 11 22:31:55 2014 +0000 - - redirection pages - -diff --git a/ui/loginverify.html b/ui/loginverify.html -deleted file mode 100644 -index e69de29..0000000 -diff --git a/ui/viewpost.html b/ui/viewpost.html -index 5962859..4d30cce 100644 ---- a/ui/viewpost.html -+++ b/ui/viewpost.html -@@ -51,16 +51,22 @@ email : ranihaileydesai@gmail.com -
      -
      -
      --

      -+

      -

      Revision History of this Post


      - -
      -
      -
      -
      --

      The post was created by {{post.owner}} on {{post.created}}


      -+
      The post was created by {{post.owner}} on {{post.created}}
      -+
      -+ - {% for rev in revpostobj %} --

      The post was updated by {{rev.owner_rev.user.first_name}} on {{rev.created}}

      -+
      The post was updated by {{rev.owner_rev.user.first_name}} on {{rev.created}}
      -+
      -+ -+ -+
      - {% endfor %} -
      -
      -diff --git a/webhub/views.py b/webhub/views.py -index 7e6c0c1..dc634f9 100644 ---- a/webhub/views.py -+++ b/webhub/views.py -@@ -397,18 +397,18 @@ def forgot_pass(request): - if request.user.is_authenticated(): - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, - "text":'

      Please log out in order to request for a password reset.

      \ --

      Please go back or click OK to go to the homepage

      ',"link":'/'})) -+

      Please go back or click here to go to the homepage

      ',"link":'/'})) - if 'username' not in request.REQUEST.keys() or 'email' not in request.REQUEST.keys(): - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -- "text":'Invalid Request. Please go back or click OK to go to the homepage',"link":'/'})) -+ "text":'Invalid Request. Please go back or',"text1":'click here to go to the homepage',"link":'/'})) - user = User.objects.filter(username=request.REQUEST['username']) - if len(user) == 0: - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -- "text":'User Does not exist. Please go back or click OK to go to the homepage',"link":'/'})) -+ "text":'User Does not exist. Please go back or',"text1":'click here to go to the homepage',"link":'/'})) - user = user[0] - if user.email <> request.REQUEST['email']: - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -- "text":'Invalid email. Please go back or click OK to go to the homepage',"link":'/'})) -+ "text":'Invalid email. Please go back or',"text1":'click here to go to the homepage',"link":'/'})) - user.pcuser.reset_pass = uuid.uuid4().hex - user.pcuser.save() - -@@ -421,12 +421,11 @@ def forgot_pass(request): - x = send_email(msg, user.email) - if x[0] == 0: - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -- "text":'Could not process request, please try again later by going back or clicking OK to go to the homepage', "link":'/'})) -+ "text":'Could not process request, please try again later by going back or',"text1":'clicking here to go to the homepage', "link":'/'})) - else: - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, - "text":'

      An email has been sent to your regestered email address.

      \ --

      Check your email and click on the link to reset your password.

      \ --

      Click OK to go to the homepage

      ',"link":'/'})) -+

      Check your email and click on the link to reset your password.

      ',"text1":'

      Click here to go to the homepage

      ',"link":'/'})) - - - -@@ -435,27 +434,24 @@ def forgot_pass(request): - def reset_pass_page(request): - if request.user.is_authenticated(): - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, -- "text":'

      Please log out before requesting reset in password.

      \ --

      Click OK to go to the homepage

      ',"link":'/'})) -+ "text":'

      Please log out before requesting reset in password.

      ',"text1":'

      Click here to go to the homepage

      ',"link":'/'})) - if "reset_pass" not in request.REQUEST.keys() or 'email' not in request.REQUEST.keys(): - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -- "text":'

      Invalid Request

      \ -- Click OK to go to the homepage

      ', "link":'/'})) -+ "text":'

      Invalid Request

      ',"text1":'Click here to go to the homepage

      ', "link":'/'})) - reset_pass = request.REQUEST['reset_pass'] - if reset_pass == "": - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -- "text":'

      Invalid Request

      \ --

      click OK to go to the homepage

      ', "link":'/'})) -+ "text":'

      Invalid Request

      ',"text1":'

      click here to go to the homepage

      ', "link":'/'})) - user = Pcuser.objects.filter(reset_pass=reset_pass) - if len(user)==0: - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -- "text":'Invalid Request. Please go back or click OK to go to the homepage',"link":'/'})) -+ "text":'Invalid Request.',"text1":'Please go back or click here to go to the homepage',"link":'/'})) - - user = user[0].user - - if user.email <> request.REQUEST['email']: - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -- "text":'Invalid Email. Please go back or click OK to go to the homepage',"link":'/'})) -+ "text":'Invalid Email.',"text1":'Please go back or click here to go to the homepage',"link":'/'})) - return HttpResponse(jinja_environ.get_template('reset_password.html').render({'pcuser':None, 'reset_pass':reset_pass})) - - -@@ -467,12 +463,11 @@ def change_pass(request): - reset_pass = request.REQUEST['reset_pass'] - if reset_pass == "": - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -- "text":'

      Invalid Request

      \ --

      click OK to go to the homepage

      ',"link":'/'})) -+ "text":'

      Invalid Request

      ', "text1":'

      click here to go to the homepage

      ',"link":'/'})) - user = Pcuser.objects.filter(reset_pass=reset_pass) - if len(user)==0 or 'pass' not in request.REQUEST.keys(): - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -- "text":'Invalid Request. Please go back or click OK to go to the homepage',"link":'/'})) -+ "text":'Invalid Request.',"text1":'Please go back or click here to go to the homepage',"link":'/'})) - user = user[0].user - user.set_password(request.REQUEST['pass']) - user.save() -@@ -480,22 +475,22 @@ def change_pass(request): - user.pcuser.save() - logout(request) - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -- "text":'Password Changed. Please click OK to go to the homepage and log in again.',"link":'/logout_do/'})) -+ "text":'Password Changed.',"text1":'Please click here to go to the homepage and log in again.',"link":'/logout_do/'})) - else: - retval = check(request) - if retval <> None: - return retval - if "pass" not in request.REQUEST.keys() or "oldpass" not in request.REQUEST.keys(): - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, -- "text":'Invalid Request. Please go back or click OK to go to the homepage',"link":'/'})) -+ "text":'Invalid Request.', "text1":'Please go back or click here to go to the homepage',"link":'/'})) - if not request.user.check_password(request.REQUEST['oldpass']): - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, -- "text":'Invalid Old Password. Click OK to go to the homepage',"link":'/'})) -+ "text":'Invalid Old Password.',"text1":'Click here to go to the homepage',"link":'/'})) - request.user.set_password(request.REQUEST['pass']) - request.user.save() - logout(request) - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -- "text":'Password Changed. Please click OK to go to the homepage and log in again.',"link":'/logout_do/'})) -+ "text":'Password Changed.',"text1":'Please click here to go to the homepage and log in again.',"link":'/logout_do/'})) - - - - -commit 7150442d5003a6b5c29e17159b5c15cb60a374ec -Author: desaivaibhavi -Date: Wed Jun 11 12:30:59 2014 +0000 - - forget password, change password, verify account complete - -diff --git a/ui/change_password.html b/ui/change_password.html -new file mode 100644 -index 0000000..914c56c ---- /dev/null -+++ b/ui/change_password.html -@@ -0,0 +1,67 @@ -+ -+ -+ -+ -+ -+ -+ Change Password -+ -+ -+ -+ {% include "header.html" %} -+





      -+ -+
      -+ -+ -+
      -+
      -+ -+ -+

      Change your password


      -+
      -+ -+
      -+ -+
      -+
      -+ -+
      -+ -+
      -+ -+
      -+
      -+ -+ -+
      -+ -+
      -+ -+
      -+
      -+

      -+ -+
      -+
      -+
      -+ -+
      -+
      -+ -+ -+
      -+ -+ -+

      -+ {% include "footer.html" %} -+ -+ -+ -+ -+ -diff --git a/ui/profile.html b/ui/profile.html -index cb717ee..59b7397 100644 ---- a/ui/profile.html -+++ b/ui/profile.html -@@ -42,7 +42,10 @@ email : ranihaileydesai@gmail.com -
      -
      -

      --
      -+
      -+ -+ -+
      - - -
      -diff --git a/ui/reset_password.html b/ui/reset_password.html -new file mode 100644 -index 0000000..f154ca2 ---- /dev/null -+++ b/ui/reset_password.html -@@ -0,0 +1,68 @@ -+ -+ -+ -+ -+ -+ -+ Reset Password -+ -+ -+ -+ {% include "header.html" %} -+





      -+ -+
      -+
      -+
      -+
      -+ -+
      -+

      Reset your password


      -+ -+
      -+
      -+
      -+
      -+ -+
      -+
      -+
      -+
      -+ -+ -+
      -+
      -+
      -+
      -+
      -+
      -+
      -+
      -+
      -+
      -+ -+ -+ -+ -+ -+ -+
      -+ -+
      -+ -+ -+
      -+ -+



      -+ {% include "footer.html" %} -+ -+ -+ -+ -+ -diff --git a/webhub/urls.py b/webhub/urls.py -index d65e333..b48a5c3 100644 ---- a/webhub/urls.py -+++ b/webhub/urls.py -@@ -30,6 +30,10 @@ urlpatterns = patterns('', - url(r'^forgot_pass_page/$', views.forgot_pass_page, name='forgot_pass_page'), - url(r'^forgot_pass/$', views.forgot_pass, name='forgot_pass'), - url(r'^verify/$', views.verify, name='verify'), -+ url(r'^reset_pass_page/$', views.reset_pass_page, name='reset_pass_page'), -+ url(r'^change_pass/$', views.change_pass, name='change_pass'), -+ url(r'^change_pass_page/$', views.change_pass_page, name='change_pass_page'), -+ - - ) - -diff --git a/webhub/urls.pyc b/webhub/urls.pyc -index b1d9b7d..9a084e7 100644 -Binary files a/webhub/urls.pyc and b/webhub/urls.pyc differ -diff --git a/webhub/views.py b/webhub/views.py -index 8107072..7e6c0c1 100644 ---- a/webhub/views.py -+++ b/webhub/views.py -@@ -383,7 +383,7 @@ def edit_profile(request): - #Forgot Password page call function. - def forgot_pass_page(request): - if request.user.is_authenticated(): -- return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.rider, -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, - "text":'

      Please log out before requesting reset in password.

      \ -

      Click OK to go to the homepage

      ',"link":'/'})) - return HttpResponse(jinja_environ.get_template('forgot_password.html').render({"pcuser":None})) -@@ -409,14 +409,14 @@ def forgot_pass(request): - if user.email <> request.REQUEST['email']: - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, - "text":'Invalid email. Please go back or click OK to go to the homepage',"link":'/'})) -- user.rider.reset_pass = uuid.uuid4().hex -- user.rider.save() -+ user.pcuser.reset_pass = uuid.uuid4().hex -+ user.pcuser.save() - - subject = "Password Reset Request" -- msg = 'Subject: %s \n\nYou have requested for a password reset on RideBuddy\n\ -+ msg = 'Subject: %s \n\nYou have requested for a password reset on Mobile App Control Center\n\ - Please click on the following link (or copy paste in your browser) to reset your password.\n\n\ - %s/reset_pass_page/?reset_pass=%s&email=%s\n\n\ -- If you have not requested for a reset of password, please ignore.' % (subject, website, user.rider.reset_pass, user.email) -+ If you have not requested for a reset of password, please ignore.' % (subject, website, user.pcuser.reset_pass, user.email) - - x = send_email(msg, user.email) - if x[0] == 0: -@@ -429,6 +429,84 @@ def forgot_pass(request): -

      Click OK to go to the homepage

      ',"link":'/'})) - - -+ -+#Reset Password page call function. -+@csrf_exempt -+def reset_pass_page(request): -+ if request.user.is_authenticated(): -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, -+ "text":'

      Please log out before requesting reset in password.

      \ -+

      Click OK to go to the homepage

      ',"link":'/'})) -+ if "reset_pass" not in request.REQUEST.keys() or 'email' not in request.REQUEST.keys(): -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -+ "text":'

      Invalid Request

      \ -+ Click OK to go to the homepage

      ', "link":'/'})) -+ reset_pass = request.REQUEST['reset_pass'] -+ if reset_pass == "": -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -+ "text":'

      Invalid Request

      \ -+

      click OK to go to the homepage

      ', "link":'/'})) -+ user = Pcuser.objects.filter(reset_pass=reset_pass) -+ if len(user)==0: -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -+ "text":'Invalid Request. Please go back or click OK to go to the homepage',"link":'/'})) -+ -+ user = user[0].user -+ -+ if user.email <> request.REQUEST['email']: -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -+ "text":'Invalid Email. Please go back or click OK to go to the homepage',"link":'/'})) -+ return HttpResponse(jinja_environ.get_template('reset_password.html').render({'pcuser':None, 'reset_pass':reset_pass})) -+ -+ -+ -+#Called when the user clicks change password button. Checks if the previous password is valid or not. -+@csrf_exempt -+def change_pass(request): -+ if "reset_pass" in request.REQUEST.keys(): -+ reset_pass = request.REQUEST['reset_pass'] -+ if reset_pass == "": -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -+ "text":'

      Invalid Request

      \ -+

      click OK to go to the homepage

      ',"link":'/'})) -+ user = Pcuser.objects.filter(reset_pass=reset_pass) -+ if len(user)==0 or 'pass' not in request.REQUEST.keys(): -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -+ "text":'Invalid Request. Please go back or click OK to go to the homepage',"link":'/'})) -+ user = user[0].user -+ user.set_password(request.REQUEST['pass']) -+ user.save() -+ user.pcuser.reset_pass = "" -+ user.pcuser.save() -+ logout(request) -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -+ "text":'Password Changed. Please click OK to go to the homepage and log in again.',"link":'/logout_do/'})) -+ else: -+ retval = check(request) -+ if retval <> None: -+ return retval -+ if "pass" not in request.REQUEST.keys() or "oldpass" not in request.REQUEST.keys(): -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, -+ "text":'Invalid Request. Please go back or click OK to go to the homepage',"link":'/'})) -+ if not request.user.check_password(request.REQUEST['oldpass']): -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, -+ "text":'Invalid Old Password. Click OK to go to the homepage',"link":'/'})) -+ request.user.set_password(request.REQUEST['pass']) -+ request.user.save() -+ logout(request) -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -+ "text":'Password Changed. Please click OK to go to the homepage and log in again.',"link":'/logout_do/'})) -+ -+ -+ -+#Change password page call function -+def change_pass_page(request): -+ retval = check(request) -+ if retval <> None: -+ return retval -+ return HttpResponse(jinja_environ.get_template('change_password.html').render({"pcuser":request.user.pcuser})) -+ -+ - - - #called when user wishes to go to the Peacetrack from dashboard -diff --git a/webhub/views.pyc b/webhub/views.pyc -index 1ebf80a..50e707a 100644 -Binary files a/webhub/views.pyc and b/webhub/views.pyc differ - -commit 7b284e6da683432a36d0cf5f37f20ed3c38bb3b5 -Author: desaivaibhavi -Date: Wed Jun 11 08:41:34 2014 +0000 - - sign up and verification via email working - -diff --git a/ui/forgot_password.html b/ui/forgot_password.html -index e69de29..d7d913f 100644 ---- a/ui/forgot_password.html -+++ b/ui/forgot_password.html -@@ -0,0 +1,70 @@ -+ -+ -+ -+ -+ -+ -+ Forget Password -+ -+ -+ -+ {% include "header.html" %} -+





      -+ -+
      -+ -+
      -+ -+ -+
      -+
      -+

      Forgot Password

      -+

      -+ -+
      -+
      -+
      -+
      -+ -+
      -+
      -+
      -+
      -+ -+
      -+
      -+
      -+
      -+
      -+ -+
      -+
      -+
      -+
      -+
      -+
      -+
      -+ -+
      -+ -+
      -+
      -+ -+
      -+ -+ -+
      -+ -+ -+


      -+ {% include "footer.html" %} -+ -+ -+ -+ -+ -diff --git a/ui/index.html b/ui/index.html -index a970dd9..e408276 100644 ---- a/ui/index.html -+++ b/ui/index.html -@@ -28,7 +28,7 @@ email : ranihaileydesai@gmail.com -

      Password :

      - -
      -- Forgot Password ? -+ Forgot Password ? -

      -

      -

      New User ? Click here to Sign Up !

      -diff --git a/ui/loginverify.html b/ui/loginverify.html -new file mode 100644 -index 0000000..e69de29 -diff --git a/ui/signup.html b/ui/signup.html -index bf94488..3f6eea4 100644 ---- a/ui/signup.html -+++ b/ui/signup.html -@@ -20,7 +20,7 @@ email : ranihaileydesai@gmail.com - -
      -
      --
      -+ -

      Sign Up Form

      -
      - -@@ -37,27 +37,27 @@ email : ranihaileydesai@gmail.com -
      - -

      Username :

      -- -+ -

      Email id :

      -- -+ - - - -

      First name :

      -- -+ -

      Last name :

      -- -+ - - -

      Set Password :

      -- -+ -

      Confirm Password :

      -- -+ - -

      Phone :

      -- -+ -

      Location :

      -- -+ - - - -diff --git a/var.pyc b/var.pyc -new file mode 100644 -index 0000000..f664c9e -Binary files /dev/null and b/var.pyc differ -diff --git a/var.py~ b/var.py~ -new file mode 100644 -index 0000000..e69de29 -diff --git a/webhub/models.py b/webhub/models.py -index 1cb7f65..7bde5b8 100644 ---- a/webhub/models.py -+++ b/webhub/models.py -@@ -24,6 +24,11 @@ class Pcuser(models.Model): - #for reset_password - reset_pass = models.CharField(default="",max_length=320) - -+ #verification status -+ #1 - unverified -+ #any other number = verification code -+ verified = models.CharField(max_length=100) -+ - def __unicode__(self): - return self.user.username - -diff --git a/webhub/models.pyc b/webhub/models.pyc -index 3ac3f74..4c93dc0 100644 -Binary files a/webhub/models.pyc and b/webhub/models.pyc differ -diff --git a/webhub/urls.py b/webhub/urls.py -index d648fe5..d65e333 100644 ---- a/webhub/urls.py -+++ b/webhub/urls.py -@@ -27,7 +27,10 @@ urlpatterns = patterns('', - url(r'^profile/$', views.profile, name='profile'), - url(r'^edit_profile/$', views.edit_profile, name='edit_profile'), - url(r'^edit_profile_page/$', views.edit_profile_page, name='edit_profile_page'), -- -+ url(r'^forgot_pass_page/$', views.forgot_pass_page, name='forgot_pass_page'), -+ url(r'^forgot_pass/$', views.forgot_pass, name='forgot_pass'), -+ url(r'^verify/$', views.verify, name='verify'), -+ - ) - - -diff --git a/webhub/urls.pyc b/webhub/urls.pyc -index 9c773b1..b1d9b7d 100644 -Binary files a/webhub/urls.pyc and b/webhub/urls.pyc differ -diff --git a/webhub/views.py b/webhub/views.py -index eacd5d5..8107072 100644 ---- a/webhub/views.py -+++ b/webhub/views.py -@@ -12,10 +12,19 @@ from django.contrib import auth - from django.contrib.auth import authenticate, login, logout - from django.core.context_processors import csrf - from django.views.decorators.csrf import csrf_exempt -+from django.contrib.auth.models import User - import jinja2 -+import uuid - from jinja2.ext import loopcontrols - from webhub.checker import check - from webhub.models import * -+import smtplib -+ -+#SMTP port for sending emails -+SMTP_PORT = 465 -+ -+#link for the localhost -+website = "http://192.168.33.10:8000" - - jinja_environ = jinja2.Environment(loader=jinja2.FileSystemLoader(['ui']), extensions=[loopcontrols]) - -@@ -87,19 +96,18 @@ def signup_do(request): - if first_name == "": - first_name = username - -- try: -- user = User.objects.create_user(username, email, password) -- user.first_name = first_name -- user.last_name = last_name -- user.save() -- entry = Pcuser(user=user, phone=phone, gender=gender, location=location, verified = uuid.uuid4().hex) -+ user = User.objects.create_user(username, email, password) -+ user.first_name = first_name -+ user.last_name = last_name -+ user.save() -+ entry = Pcuser(user=user, phone=phone, gender=gender, location=location, verified = uuid.uuid4().hex) - -- entry.save() -- #send email to user -- login_do(request) -- return send_verification_email(request) -- except Exception as e: -- return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -+ entry.save() -+ #send email to user -+ login_do(request) -+ send_verification_email(request) -+ -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, - "text":'

      Username already exists. Please enter some other username.

      Go Back or click OK to go to signup page.

      ',"link":'/signup_page/'})) - - -@@ -113,7 +121,7 @@ def send_verification_email(request): - request.user.pcuser - except: - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -- "text":'No Rider associated!. Please go back or click to go to the homepage' , "link": '/'})) -+ "text":'No Pcuser associated!. Please go back or click to go to the homepage' , "link": '/'})) - entry=request.user - subject = 'Peace Corps Verification Email' - msg = 'Subject: %s \n\nYour email has been registered on pchub.com.\nPlease\ -@@ -128,7 +136,7 @@ def send_verification_email(request): - - - --#Function to send emails using google smtplib. Takes email id and message as input. -+#Function to send emails using google smtplib. Takes email id and message as input. - def send_email(msg, email): - gmailLogin = 'ranipc93' - gmailPas = 'ranipc1993' -@@ -142,9 +150,35 @@ def send_email(msg, email): - return (1,1) - - -- -- -+#Called when a user enters verification code and clicks on submit. Checks the verification code with database. -+def verify(request): -+ if not request.user.is_authenticated(): -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -+ "text":'Verification Successful. Go to homepage' , "link": '/'})) -+# return HttpResponse(jinja_environ.get_template('index.html').render({"pcuser":Non, -+# "code":request.REQUEST['code']})) -+# index(request) -+ try: -+ request.user.pcuser -+ except: -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -+ "text":'

      No Pcuser associated.

      Please go back or click OK to go to the homepage

      ',"link":'/'})) -+ -+ code = request.REQUEST['code'] -+ pcuser = request.user.pcuser -+ if pcuser.verified == '1': -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, -+ "text":'

      Verification successful.

      Click OK to go to the homepage

      ',"link":'/'})) -+ elif code == pcuser.verified: -+ pcuser.verified = '1' -+ pcuser.save() -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, -+ "text":'

      Verification successful.

      Click OK to go to the homepage

      ',"link":'/'})) - -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, -+ "text":'

      Verification Failed.

      Please go back or click OK to go to the homepage

      ',"link":'/'})) -+ -+ - - - #Called when a user clicks login button. -@@ -346,6 +380,56 @@ def edit_profile(request): - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, - "text":'Profile edit successful.',"text1":'Click here to view the profile.',"link":'/profile/?id='+ str(request.user.pcuser.id)})) - -+#Forgot Password page call function. -+def forgot_pass_page(request): -+ if request.user.is_authenticated(): -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.rider, -+ "text":'

      Please log out before requesting reset in password.

      \ -+

      Click OK to go to the homepage

      ',"link":'/'})) -+ return HttpResponse(jinja_environ.get_template('forgot_password.html').render({"pcuser":None})) -+ -+ -+ -+ -+#Called when the user clicks forgot password after the data is validated. This sends a verification mail to the user. -+@csrf_exempt -+def forgot_pass(request): -+ if request.user.is_authenticated(): -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -+ "text":'

      Please log out in order to request for a password reset.

      \ -+

      Please go back or click OK to go to the homepage

      ',"link":'/'})) -+ if 'username' not in request.REQUEST.keys() or 'email' not in request.REQUEST.keys(): -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -+ "text":'Invalid Request. Please go back or click OK to go to the homepage',"link":'/'})) -+ user = User.objects.filter(username=request.REQUEST['username']) -+ if len(user) == 0: -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -+ "text":'User Does not exist. Please go back or click OK to go to the homepage',"link":'/'})) -+ user = user[0] -+ if user.email <> request.REQUEST['email']: -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -+ "text":'Invalid email. Please go back or click OK to go to the homepage',"link":'/'})) -+ user.rider.reset_pass = uuid.uuid4().hex -+ user.rider.save() -+ -+ subject = "Password Reset Request" -+ msg = 'Subject: %s \n\nYou have requested for a password reset on RideBuddy\n\ -+ Please click on the following link (or copy paste in your browser) to reset your password.\n\n\ -+ %s/reset_pass_page/?reset_pass=%s&email=%s\n\n\ -+ If you have not requested for a reset of password, please ignore.' % (subject, website, user.rider.reset_pass, user.email) -+ -+ x = send_email(msg, user.email) -+ if x[0] == 0: -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -+ "text":'Could not process request, please try again later by going back or clicking OK to go to the homepage', "link":'/'})) -+ else: -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -+ "text":'

      An email has been sent to your regestered email address.

      \ -+

      Check your email and click on the link to reset your password.

      \ -+

      Click OK to go to the homepage

      ',"link":'/'})) -+ -+ -+ - - #called when user wishes to go to the Peacetrack from dashboard - def peacetrack(request): -diff --git a/webhub/views.pyc b/webhub/views.pyc -index 8fce999..1ebf80a 100644 -Binary files a/webhub/views.pyc and b/webhub/views.pyc differ - -commit da115ac70e371bed075e302d18c42bd3f148e4c2 -Author: desaivaibhavi -Date: Mon Jun 9 20:29:51 2014 +0530 - - forgot password, sign up added - -diff --git a/ui/forgot_password.html b/ui/forgot_password.html -new file mode 100644 -index 0000000..e69de29 -diff --git a/ui/index.html b/ui/index.html -index 5c0209b..a970dd9 100644 ---- a/ui/index.html -+++ b/ui/index.html -@@ -18,7 +18,7 @@ email : ranihaileydesai@gmail.com - -
      - --
      -+
      -
      - -

      Log in

      -@@ -27,8 +27,11 @@ email : ranihaileydesai@gmail.com - -

      Password :

      - -+
      -+ Forgot Password ? -

      -- -+

      -+

      New User ? Click here to Sign Up !

      - -

      -
      -diff --git a/ui/signup.html b/ui/signup.html -new file mode 100644 -index 0000000..bf94488 ---- /dev/null -+++ b/ui/signup.html -@@ -0,0 +1,79 @@ -+ -+ -+ -+ -+ -+ -+ Sign Up -+ -+ -+ -+ {% include "header.html" %} -+





      -+ -+
      -+ -+
      -+
      -+
      -+

      Sign Up Form

      -+
      -+ -+ -+ -+
      -+ -+ -+
      -+ -+

      Username :

      -+ -+

      Email id :

      -+ -+ -+ -+ -+

      First name :

      -+ -+

      Last name :

      -+ -+ -+ -+

      Set Password :

      -+ -+

      Confirm Password :

      -+ -+ -+

      Phone :

      -+ -+

      Location :

      -+ -+ -+ -+ -+

      -+

      -+ -+
      -+

      -+
      -+ -+
      -+ -+





      -+ {% include "footer.html" %} -+ -+ -+ -+ -+ -diff --git a/webhub/models.pyc b/webhub/models.pyc -index 4481dbc..3ac3f74 100644 -Binary files a/webhub/models.pyc and b/webhub/models.pyc differ -diff --git a/webhub/urls.py b/webhub/urls.py -index 483c89c..d648fe5 100644 ---- a/webhub/urls.py -+++ b/webhub/urls.py -@@ -10,6 +10,10 @@ from webhub import views - urlpatterns = patterns('', - url(r'^index/$', views.index, name='index'), - url(r'^$', views.dashboard, name='dashboard'), -+ url(r'^signup_page/$', views.signup_page, name='signup_page'), -+ url(r'^signup_do/$', views.signup_do, name='signup_do'), -+ url(r'^send_verification_email/$', views.send_verification_email, name='send_verification_email'), -+ url(r'^send_email/$', views.send_email, name='send_email'), - url(r'^login_do/$', views.login_do, name='login_do'), - url(r'^logout_do/$', views.logout_do, name='logout_do'), - url(r'^malaria/$', views.malaria, name='malaria'), -diff --git a/webhub/urls.pyc b/webhub/urls.pyc -index 49ebb98..9c773b1 100644 -Binary files a/webhub/urls.pyc and b/webhub/urls.pyc differ -diff --git a/webhub/views.py b/webhub/views.py -index f22fd6c..eacd5d5 100644 ---- a/webhub/views.py -+++ b/webhub/views.py -@@ -35,6 +35,118 @@ def dashboard(request): - return HttpResponse(jinja_environ.get_template('dashboard.html').render(template_values)) - - -+#Calls the signup page. If the user us already logged in, s/he will be redirected to dashboard. -+def signup_page(request): -+ if request.user.is_authenticated(): -+ redirect_url = "/" -+ if 'redirect_url' in request.REQUEST.keys(): -+ redirect_url = request.REQUEST['redirect_url'] -+ return HttpResponse(jinja_environ.get_template('redirect.html').render({"pcuser":None,"redirect_url":redirect_url})) -+ -+ else: -+ return HttpResponse(jinja_environ.get_template('signup.html').render({"pcuser":None})) -+ -+ -+#Called when a user clicks submit button in signup. Here a verification mail is also sent to the user. -+@csrf_exempt -+def signup_do(request): -+ if request.user.is_authenticated(): -+ logout(request) -+ redirect_url = "/" -+ if 'redirect_url' in request.REQUEST.keys(): -+ redirect_url = request.REQUEST['redirect_url'] -+ return HttpResponse(jinja_environ.get_template('redirect.html').render({"pcuser":None,"redirect_url":redirect_url})) -+ -+ username = request.REQUEST['username'] -+ password = request.REQUEST['password'] -+ confirmpassword = request.REQUEST['confirmpassword'] -+ -+ if password <> confirmpassword: -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -+ "text":'

      Passwords don\'t match. Please Enter again.

      Click OK to go back to signup page.

      ',"link":'/signup_page/'})) -+ -+ first_name = request.REQUEST['first_name'] -+ last_name = request.REQUEST['last_name'] -+ phone = request.REQUEST['phone'] -+ email = request.REQUEST['email'] -+ gender = request.REQUEST['gender'] -+ location = request.REQUEST['location'] -+ -+ try: -+ if len(User.objects.filter(email=email))<>0: -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -+ "text":'

      Someone has already registered using this email.

      If you have forgotten your password, click

      Click here to go back to signup page.

      ',"link":'0'})) -+ except: -+ pass -+ -+ if '@' not in email or '.' not in email: -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -+ "text":'

      Invalid email, please Enter again.

      Go Back or click OK to go to signup page.

      ',"link":"/signup_page/"})) -+ -+ -+ if first_name == "": -+ first_name = username -+ -+ try: -+ user = User.objects.create_user(username, email, password) -+ user.first_name = first_name -+ user.last_name = last_name -+ user.save() -+ entry = Pcuser(user=user, phone=phone, gender=gender, location=location, verified = uuid.uuid4().hex) -+ -+ entry.save() -+ #send email to user -+ login_do(request) -+ return send_verification_email(request) -+ except Exception as e: -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -+ "text":'

      Username already exists. Please enter some other username.

      Go Back or click OK to go to signup page.

      ',"link":'/signup_page/'})) -+ -+ -+ -+#Function to send verification mail to user's email after he signs up. -+def send_verification_email(request): -+ if not request.user.is_authenticated(): -+ return HttpResponse(jinja_environ.get_template('index.html').render({"pcuser":None})) -+ -+ try: -+ request.user.pcuser -+ except: -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -+ "text":'No Rider associated!. Please go back or click to go to the homepage' , "link": '/'})) -+ entry=request.user -+ subject = 'Peace Corps Verification Email' -+ msg = 'Subject: %s \n\nYour email has been registered on pchub.com.\nPlease\ -+ click on the following link to verify (or copy paste it in your browser if needed)\n\n\ -+ %s/verify?code=%s\n\nIf you have not registered on our website, please ignore.' % (subject, website, entry.pcuser.verified) -+ -+ x = send_email(msg, entry.email) -+ if x[0]==0: -+ return x[1] -+ -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, "text":'

      Verification Email sent! Please Check your email inbox.

      To re-send verification email, click here.

      Click here to go to the homepage and log-in again

      ', "link":'0'})) -+ -+ -+ -+#Function to send emails using google smtplib. Takes email id and message as input. -+def send_email(msg, email): -+ gmailLogin = 'ranipc93' -+ gmailPas = 'ranipc1993' -+ fro = gmailLogin + "@gmail.com" -+ -+ to = email -+ -+ server = smtplib.SMTP_SSL('smtp.googlemail.com',SMTP_PORT) -+ a = server.login( gmailLogin, gmailPas) -+ server.sendmail(fro, to,msg) -+ return (1,1) -+ -+ -+ -+ -+ -+ -+ - #Called when a user clicks login button. - @csrf_exempt - def login_do(request): -diff --git a/webhub/views.pyc b/webhub/views.pyc -index d4598c2..8fce999 100644 -Binary files a/webhub/views.pyc and b/webhub/views.pyc differ - -commit 3172c62867a94f17298fee28d8bc76a212882bc0 -Author: desaivaibhavi -Date: Fri Jun 6 22:24:43 2014 +0000 - - rev history - -diff --git a/ui/viewpost.html b/ui/viewpost.html -index ff9a121..5962859 100644 ---- a/ui/viewpost.html -+++ b/ui/viewpost.html -@@ -51,13 +51,21 @@ email : ranihaileydesai@gmail.com -
      -
      -
      --


      --

      Revision History

      --

      The post was created by {{post.owner}} on {{post.created}}

      -- {% for rev in revpostobj %} --

      The post was updated by {{rev.owner_rev.user.first_name}} on {{rev.created}}

      -- {% endfor %} -+

      -+

      Revision History of this Post


      - -+
      -+
      -+
      -+
      -+

      The post was created by {{post.owner}} on {{post.created}}


      -+ {% for rev in revpostobj %} -+

      The post was updated by {{rev.owner_rev.user.first_name}} on {{rev.created}}

      -+ {% endfor %} -+
      -+
      -+
      -+
      -
      - - -diff --git a/webhub/models.pyc b/webhub/models.pyc -index 1f63bca..4481dbc 100644 -Binary files a/webhub/models.pyc and b/webhub/models.pyc differ -diff --git a/webhub/views.pyc b/webhub/views.pyc -index 6f25890..d4598c2 100644 -Binary files a/webhub/views.pyc and b/webhub/views.pyc differ - -commit a94429012a0c428603f097c1f0953c0e589252bb -Author: desaivaibhavi -Date: Fri Jun 6 21:05:17 2014 +0000 - - comment and code cleaning - -diff --git a/webhub/models.py b/webhub/models.py -index 0305e60..1cb7f65 100644 ---- a/webhub/models.py -+++ b/webhub/models.py -@@ -37,26 +37,28 @@ class Post(models.Model): - title_post = models.CharField(max_length=300) - #description - description_post = models.CharField(max_length=2000) -- -+ #field to note the timestamp when the post was created - created = models.DateTimeField(auto_now_add=True) -+ #field to note the timestamp when the post was last updated - updated = models.DateTimeField(auto_now=True) - - def __unicode__(self): - return self.owner.user.username - --#Post table stores details about revision history posts -+#Post table stores details about revision history of edit of the posts - - class RevPost(models.Model): -- #The owner of the post -+ #The post which is being edited - owner_rev_post = models.ForeignKey(Post, null=False, related_name='owner_rev_post') -+ #The user who is editing the post - owner_rev = models.ForeignKey(Pcuser, null=False, related_name='owner_rev') - #revised title - title_post_rev = models.CharField(max_length=300) - #revised description - description_post_rev = models.CharField(max_length=2000) -- -+ #field to note the timestamp when the revised version was created - created = models.DateTimeField(auto_now_add=True) -- updated = models.DateTimeField(auto_now=True) -+ - - def __unicode__(self): - return self.owner.user.username -diff --git a/webhub/views.py b/webhub/views.py -index 49c967c..f22fd6c 100644 ---- a/webhub/views.py -+++ b/webhub/views.py -@@ -73,7 +73,7 @@ def malaria(request): - all_posts = Post.objects.all() - return HttpResponse(jinja_environ.get_template('malaria.html').render({"all_posts":all_posts, "pcuser":request.user.pcuser})) - --#called when a user wants to view a particular post. -+#called when a user wants to view a particular post. Also shows up the revision history - def view_post(request): - retval = check(request) - if retval <> None: -@@ -85,6 +85,7 @@ def view_post(request): - postobj=Post.objects.get(id=key) - - revpostobj = RevPost.objects.filter(owner_rev_post_id=key) -+ - return HttpResponse(jinja_environ.get_template('viewpost.html').render({"pcuser":request.user.pcuser, 'post':postobj, 'revpostobj':revpostobj})) - except Exception as e: - return HttpResponse(e) -@@ -131,7 +132,7 @@ def edit_post_page(request): - except Exception as e: - return HttpResponse(e) - --#Called when a user edits his/her post. -+#Called when a user edits his/her post and also saves the revision history - @csrf_exempt - def edit_post(request): - retval = check(request) - -commit d6413796756050efc16490cf0c0e81f4d2a9f370 -Author: desaivaibhavi -Date: Fri Jun 6 20:58:26 2014 +0000 - - revision history added - -diff --git a/ui/viewpost.html b/ui/viewpost.html -index a2d6079..ff9a121 100644 ---- a/ui/viewpost.html -+++ b/ui/viewpost.html -@@ -54,9 +54,9 @@ email : ranihaileydesai@gmail.com -


      -

      Revision History

      -

      The post was created by {{post.owner}} on {{post.created}}

      --

      The post was updated by {{post.owner}} on {{post.updated}}

      -- See the edits -- abcd changed to -> cdef -+ {% for rev in revpostobj %} -+

      The post was updated by {{rev.owner_rev.user.first_name}} on {{rev.created}}

      -+ {% endfor %} - -
      - -diff --git a/webhub/models.py b/webhub/models.py -index 73b78c2..0305e60 100644 ---- a/webhub/models.py -+++ b/webhub/models.py -@@ -42,4 +42,21 @@ class Post(models.Model): - updated = models.DateTimeField(auto_now=True) - - def __unicode__(self): -- return self.owner.user.username -\ No newline at end of file -+ return self.owner.user.username -+ -+#Post table stores details about revision history posts -+ -+class RevPost(models.Model): -+ #The owner of the post -+ owner_rev_post = models.ForeignKey(Post, null=False, related_name='owner_rev_post') -+ owner_rev = models.ForeignKey(Pcuser, null=False, related_name='owner_rev') -+ #revised title -+ title_post_rev = models.CharField(max_length=300) -+ #revised description -+ description_post_rev = models.CharField(max_length=2000) -+ -+ created = models.DateTimeField(auto_now_add=True) -+ updated = models.DateTimeField(auto_now=True) -+ -+ def __unicode__(self): -+ return self.owner.user.username -diff --git a/webhub/models.pyc b/webhub/models.pyc -index 4ac70d1..1f63bca 100644 -Binary files a/webhub/models.pyc and b/webhub/models.pyc differ -diff --git a/webhub/urls.py b/webhub/urls.py -index b04ff07..483c89c 100644 ---- a/webhub/urls.py -+++ b/webhub/urls.py -@@ -23,6 +23,7 @@ urlpatterns = patterns('', - url(r'^profile/$', views.profile, name='profile'), - url(r'^edit_profile/$', views.edit_profile, name='edit_profile'), - url(r'^edit_profile_page/$', views.edit_profile_page, name='edit_profile_page'), -+ - ) - - -diff --git a/webhub/urls.pyc b/webhub/urls.pyc -index f3ecc38..49ebb98 100644 -Binary files a/webhub/urls.pyc and b/webhub/urls.pyc differ -diff --git a/webhub/views.py b/webhub/views.py -index 0dd5695..49c967c 100644 ---- a/webhub/views.py -+++ b/webhub/views.py -@@ -83,7 +83,9 @@ def view_post(request): - pcuser=request.user.pcuser - key=request.REQUEST['key'] - postobj=Post.objects.get(id=key) -- return HttpResponse(jinja_environ.get_template('viewpost.html').render({"pcuser":request.user.pcuser, 'post':postobj})) -+ -+ revpostobj = RevPost.objects.filter(owner_rev_post_id=key) -+ return HttpResponse(jinja_environ.get_template('viewpost.html').render({"pcuser":request.user.pcuser, 'post':postobj, 'revpostobj':revpostobj})) - except Exception as e: - return HttpResponse(e) - -@@ -139,11 +141,19 @@ def edit_post(request): - owner = request.user.pcuser - postid = request.REQUEST['postid'] - postobj = None -+ revpostobj = None - try: - postobj = Post.objects.get(pk=postid) - except Exception as e: - return HttpResponse(e) - -+ entry = RevPost(owner_rev=owner, -+ owner_rev_post=postobj, -+ title_post_rev=postobj.title_post, -+ description_post_rev=postobj.description_post, -+ ) -+ entry.save() -+ - title_post = request.REQUEST['title'] - description_post = request.REQUEST['description'] - -@@ -157,6 +167,8 @@ def edit_post(request): - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, - "text":'Post edited successfully.',"text1":'Click here to view post.', "link": '/view_post/?key=' + str(postobj.id)})) - -+ -+ - #Called when a user cancels his post. - @csrf_exempt - def delete_post(request): -@@ -221,6 +233,7 @@ def edit_profile(request): - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, - "text":'Profile edit successful.',"text1":'Click here to view the profile.',"link":'/profile/?id='+ str(request.user.pcuser.id)})) - -+ - #called when user wishes to go to the Peacetrack from dashboard - def peacetrack(request): - return HttpResponse(jinja_environ.get_template('peacetrack.html').render({"pcuser":None})) -diff --git a/webhub/views.pyc b/webhub/views.pyc -index 0fae71a..6f25890 100644 -Binary files a/webhub/views.pyc and b/webhub/views.pyc differ - -commit 1f0425bad6c2dadb9048c53b9ef4e582f7aa0b84 -Author: desaivaibhavi -Date: Fri Jun 6 09:22:01 2014 +0000 - - revision history module started - -diff --git a/ui/viewpost.html b/ui/viewpost.html -index c85ab3c..a2d6079 100644 ---- a/ui/viewpost.html -+++ b/ui/viewpost.html -@@ -50,6 +50,15 @@ email : ranihaileydesai@gmail.com - -
      -
      -+
      -+


      -+

      Revision History

      -+

      The post was created by {{post.owner}} on {{post.created}}

      -+

      The post was updated by {{post.owner}} on {{post.updated}}

      -+ See the edits -+ abcd changed to -> cdef -+ -+
      - - - -diff --git a/webhub/views.py b/webhub/views.py -index b952a54..0dd5695 100644 ---- a/webhub/views.py -+++ b/webhub/views.py -@@ -223,4 +223,5 @@ def edit_profile(request): - - #called when user wishes to go to the Peacetrack from dashboard - def peacetrack(request): -- return HttpResponse(jinja_environ.get_template('peacetrack.html').render({"pcuser":None})) -\ No newline at end of file -+ return HttpResponse(jinja_environ.get_template('peacetrack.html').render({"pcuser":None})) -+ -diff --git a/webhub/views.pyc b/webhub/views.pyc -index ada3218..0fae71a 100644 -Binary files a/webhub/views.pyc and b/webhub/views.pyc differ - -commit 94edc2b6765f77548a8e1d0df8190e0692436237 -Author: desaivaibhavi -Date: Thu Jun 5 20:59:36 2014 +0000 - - model updated for implementing the revision history - -diff --git a/infohub/settings.pyc b/infohub/settings.pyc -index 4d2a608..8a1fa8f 100644 -Binary files a/infohub/settings.pyc and b/infohub/settings.pyc differ -diff --git a/infohub/urls.pyc b/infohub/urls.pyc -index 41b429f..5d9e22c 100644 -Binary files a/infohub/urls.pyc and b/infohub/urls.pyc differ -diff --git a/infohub/wsgi.pyc b/infohub/wsgi.pyc -index af5136b..44f17e1 100644 -Binary files a/infohub/wsgi.pyc and b/infohub/wsgi.pyc differ -diff --git a/ui/viewpost.html b/ui/viewpost.html -index 5951d47..c85ab3c 100644 ---- a/ui/viewpost.html -+++ b/ui/viewpost.html -@@ -16,9 +16,9 @@ email : ranihaileydesai@gmail.com -





      - -

      Malaria : infoHub

      -- -
      -
      -+ -

      View Post

      -
      - -diff --git a/webhub/models.py b/webhub/models.py -index b1e78c1..73b78c2 100644 ---- a/webhub/models.py -+++ b/webhub/models.py -@@ -38,5 +38,8 @@ class Post(models.Model): - #description - description_post = models.CharField(max_length=2000) - -+ created = models.DateTimeField(auto_now_add=True) -+ updated = models.DateTimeField(auto_now=True) -+ - def __unicode__(self): - return self.owner.user.username -\ No newline at end of file -diff --git a/webhub/models.pyc b/webhub/models.pyc -index 4af902e..4ac70d1 100644 -Binary files a/webhub/models.pyc and b/webhub/models.pyc differ - -commit 2ed39792000156db7a6a77a0c730c5a25110872f -Author: desaivaibhavi -Date: Thu Jun 5 11:45:37 2014 +0000 - - time zone updated - -diff --git a/infohub/settings.py b/infohub/settings.py -index 5a9778b..6dba49a 100644 ---- a/infohub/settings.py -+++ b/infohub/settings.py -@@ -67,7 +67,7 @@ DATABASES = { - - LANGUAGE_CODE = 'en-us' - --TIME_ZONE = 'Asia/Kolkata' -+TIME_ZONE = 'America/Chicago' - - USE_I18N = True - - -commit 038d5b76d3f2a8b4e0ae286744738eba1e53b9a2 -Author: desaivaibhavi -Date: Thu Jun 5 11:34:09 2014 +0000 - - updated readme file - -diff --git a/readmeForCode b/readmeForCode -index 9acc923..4e28fe7 100644 ---- a/readmeForCode -+++ b/readmeForCode -@@ -29,9 +29,9 @@ To run the application, - 4. You might be asked to create a super user. Create one. - 5. Runnning the server : run the following command from the terminal - python manage.py runserver 0.0.0.0:8000 --6. Open the web-browser and go to http://192.168.33.10:8000/admin. Log in. -+6. Open the web-browser and go to http://192.168.33.10:8000/admin. Log in (with the superuser credentials). - 7. You will have to create one user from the admin panel.Create one user and add it to the new pcuser. Log out. --8. Now go to http://192.168.33.10:8000/ -+8. Now go to http://192.168.33.10:8000/. Login with the credential of the pcuser that you created from the admin panel. - 9. Done ! - - -diff --git a/readmeForCode~ b/readmeForCode~ -index 1a2c8df..4e28fe7 100644 ---- a/readmeForCode~ -+++ b/readmeForCode~ -@@ -3,6 +3,7 @@ Readme file : - Details about the folders - - infohub : contains the python environment setup, it contains 4 files - init.py, settings.py, urls.py and wsgi.py -+settings.py has the main configuration settings like dependencies, database, timezone etc. - - ui : contains the ui page templates of the site, it conains the html,css, js page templates with applied jinja integration. Also, I have used bootstrap for responsiveness and better UI design. - -@@ -28,9 +29,9 @@ To run the application, - 4. You might be asked to create a super user. Create one. - 5. Runnning the server : run the following command from the terminal - python manage.py runserver 0.0.0.0:8000 --6. Open the web-browser and go to http://192.168.33.10:8000/admin. Log in. -+6. Open the web-browser and go to http://192.168.33.10:8000/admin. Log in (with the superuser credentials). - 7. You will have to create one user from the admin panel.Create one user and add it to the new pcuser. Log out. --8. Now go to http://192.168.33.10:8000/ -+8. Now go to http://192.168.33.10:8000/. Login with the credential of the pcuser that you created from the admin panel. - 9. Done ! - - - -commit c97680a14315e7288aa0969dbc99c27f1bba3af4 -Author: desaivaibhavi -Date: Thu Jun 5 11:28:40 2014 +0000 - - readme file added for the code - -diff --git a/readmeForCode b/readmeForCode -new file mode 100644 -index 0000000..9acc923 ---- /dev/null -+++ b/readmeForCode -@@ -0,0 +1,37 @@ -+Readme file : -+ -+Details about the folders -+ -+infohub : contains the python environment setup, it contains 4 files - init.py, settings.py, urls.py and wsgi.py -+settings.py has the main configuration settings like dependencies, database, timezone etc. -+ -+ui : contains the ui page templates of the site, it conains the html,css, js page templates with applied jinja integration. Also, I have used bootstrap for responsiveness and better UI design. -+ -+webhub : contains the python-django backend of the site, it conains 7 files - init.py, admin.py, checker.py, models.py, tests.py, urls.py and views.py -+admin.py contains the models that are to be added in the admin panel -+checker.py has a check function that redirects the user to the home page depending upon his current status (i.e. login/logout) -+models.py has all the information about the models we are going to have in the database -+urls.py has the urls of the pages created connected with the respective views -+views.py has all the views, ie function to call different views and render the respective values from the backend -+ -+manage.py : is the file that is used to run the application -+ -+ -+Guidelines to run the application : -+ -+I had to reinstall postgres and python on the VM provided. Also, I had to install python-psycopg2 and jinja on the VM. Make sure the internet is working as I have used some online resources right now. -+ -+To run the application, -+1. Start the VM. Install the mentioned dependencies if required -+2. Go to the directory which has manage.py file -+3. Syncing with the database : run the following command from the terminal -+ python manage.py syncdb -+4. You might be asked to create a super user. Create one. -+5. Runnning the server : run the following command from the terminal -+ python manage.py runserver 0.0.0.0:8000 -+6. Open the web-browser and go to http://192.168.33.10:8000/admin. Log in. -+7. You will have to create one user from the admin panel.Create one user and add it to the new pcuser. Log out. -+8. Now go to http://192.168.33.10:8000/ -+9. Done ! -+ -+ -diff --git a/readmeForCode~ b/readmeForCode~ -new file mode 100644 -index 0000000..1a2c8df ---- /dev/null -+++ b/readmeForCode~ -@@ -0,0 +1,36 @@ -+Readme file : -+ -+Details about the folders -+ -+infohub : contains the python environment setup, it contains 4 files - init.py, settings.py, urls.py and wsgi.py -+ -+ui : contains the ui page templates of the site, it conains the html,css, js page templates with applied jinja integration. Also, I have used bootstrap for responsiveness and better UI design. -+ -+webhub : contains the python-django backend of the site, it conains 7 files - init.py, admin.py, checker.py, models.py, tests.py, urls.py and views.py -+admin.py contains the models that are to be added in the admin panel -+checker.py has a check function that redirects the user to the home page depending upon his current status (i.e. login/logout) -+models.py has all the information about the models we are going to have in the database -+urls.py has the urls of the pages created connected with the respective views -+views.py has all the views, ie function to call different views and render the respective values from the backend -+ -+manage.py : is the file that is used to run the application -+ -+ -+Guidelines to run the application : -+ -+I had to reinstall postgres and python on the VM provided. Also, I had to install python-psycopg2 and jinja on the VM. Make sure the internet is working as I have used some online resources right now. -+ -+To run the application, -+1. Start the VM. Install the mentioned dependencies if required -+2. Go to the directory which has manage.py file -+3. Syncing with the database : run the following command from the terminal -+ python manage.py syncdb -+4. You might be asked to create a super user. Create one. -+5. Runnning the server : run the following command from the terminal -+ python manage.py runserver 0.0.0.0:8000 -+6. Open the web-browser and go to http://192.168.33.10:8000/admin. Log in. -+7. You will have to create one user from the admin panel.Create one user and add it to the new pcuser. Log out. -+8. Now go to http://192.168.33.10:8000/ -+9. Done ! -+ -+ - -commit 56334a5fd0488d8569d59fce510d62021fe57a59 -Author: desaivaibhavi -Date: Thu Jun 5 11:07:24 2014 +0000 - - author details added - -diff --git a/infohub/settings.py b/infohub/settings.py -index 8d4e795..5a9778b 100644 ---- a/infohub/settings.py -+++ b/infohub/settings.py -@@ -1,12 +1,7 @@ --""" --Django settings for infohub project. -- --For more information on this file, see --https://docs.djangoproject.com/en/1.6/topics/settings/ -- --For the full list of settings and their values, see --https://docs.djangoproject.com/en/1.6/ref/settings/ --""" -+#Version : Phython/Django 2.7.6, PostgreSQL 9.3.4 -+#Author : Vaibhavi Desai -+#Github username : desaivaibhavi -+#email : ranihaileydesai@gmail.com - - # Build paths inside the project like this: os.path.join(BASE_DIR, ...) - import os -diff --git a/infohub/urls.py b/infohub/urls.py -index 8a0bde5..3de6cd4 100644 ---- a/infohub/urls.py -+++ b/infohub/urls.py -@@ -1,3 +1,8 @@ -+#Version : Phython/Django 2.7.6, PostgreSQL 9.3.4 -+#Author : Vaibhavi Desai -+#Github username : desaivaibhavi -+#email : ranihaileydesai@gmail.com -+ - from django.conf.urls import patterns, include, url - - from django.contrib import admin -diff --git a/infohub/wsgi.py b/infohub/wsgi.py -index 8d0bb50..eb69fe2 100644 ---- a/infohub/wsgi.py -+++ b/infohub/wsgi.py -@@ -1,11 +1,7 @@ --""" --WSGI config for infohub project. -- --It exposes the WSGI callable as a module-level variable named ``application``. -- --For more information on this file, see --https://docs.djangoproject.com/en/1.6/howto/deployment/wsgi/ --""" -+#Version : Phython/Django 2.7.6, PostgreSQL 9.3.4 -+#Author : Vaibhavi Desai -+#Github username : desaivaibhavi -+#email : ranihaileydesai@gmail.com - - import os - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "infohub.settings") - -commit 7f3186347a390b94c34feb32eab10276fa47f86b -Author: desaivaibhavi -Date: Thu Jun 5 11:01:51 2014 +0000 - - initial commit - -diff --git a/infohub/__init__.py b/infohub/__init__.py -new file mode 100644 -index 0000000..e69de29 -diff --git a/infohub/__init__.pyc b/infohub/__init__.pyc -new file mode 100644 -index 0000000..5a0a487 -Binary files /dev/null and b/infohub/__init__.pyc differ -diff --git a/infohub/settings.py b/infohub/settings.py -new file mode 100644 -index 0000000..8d4e795 ---- /dev/null -+++ b/infohub/settings.py -@@ -0,0 +1,87 @@ -+""" -+Django settings for infohub project. -+ -+For more information on this file, see -+https://docs.djangoproject.com/en/1.6/topics/settings/ -+ -+For the full list of settings and their values, see -+https://docs.djangoproject.com/en/1.6/ref/settings/ -+""" -+ -+# Build paths inside the project like this: os.path.join(BASE_DIR, ...) -+import os -+BASE_DIR = os.path.dirname(os.path.dirname(__file__)) -+ -+ -+# Quick-start development settings - unsuitable for production -+# See https://docs.djangoproject.com/en/1.6/howto/deployment/checklist/ -+ -+# SECURITY WARNING: keep the secret key used in production secret! -+SECRET_KEY = '@0kjw@u5rv7mf!s2j8ix7lq@n%w&v$6p8ku%8hkmmxxj$w44ys' -+ -+# SECURITY WARNING: don't run with debug turned on in production! -+DEBUG = True -+ -+TEMPLATE_DEBUG = True -+ -+ALLOWED_HOSTS = [] -+ -+ -+# Application definition -+ -+INSTALLED_APPS = ( -+ 'django.contrib.admin', -+ 'django.contrib.auth', -+ 'django.contrib.contenttypes', -+ 'django.contrib.sessions', -+ 'django.contrib.messages', -+ 'django.contrib.staticfiles', -+ 'webhub', -+) -+ -+MIDDLEWARE_CLASSES = ( -+ 'django.contrib.sessions.middleware.SessionMiddleware', -+ 'django.middleware.common.CommonMiddleware', -+ 'django.middleware.csrf.CsrfViewMiddleware', -+ 'django.contrib.auth.middleware.AuthenticationMiddleware', -+ 'django.contrib.messages.middleware.MessageMiddleware', -+ 'django.middleware.clickjacking.XFrameOptionsMiddleware', -+) -+ -+ROOT_URLCONF = 'infohub.urls' -+ -+WSGI_APPLICATION = 'infohub.wsgi.application' -+ -+ -+# Database -+# https://docs.djangoproject.com/en/1.6/ref/settings/#databases -+ -+DATABASES = { -+ 'default': { -+ 'ENGINE': 'django.db.backends.postgresql_psycopg2', -+ 'NAME': 'postgres', -+ 'USER': 'postgres', -+ 'PASSWORD': 'rani', -+ 'HOST': '0.0.0.0', -+ 'PORT': '5432', -+ } -+} -+ -+# Internationalization -+# https://docs.djangoproject.com/en/1.6/topics/i18n/ -+ -+LANGUAGE_CODE = 'en-us' -+ -+TIME_ZONE = 'Asia/Kolkata' -+ -+USE_I18N = True -+ -+USE_L10N = True -+ -+USE_TZ = True -+ -+ -+# Static files (CSS, JavaScript, Images) -+# https://docs.djangoproject.com/en/1.6/howto/static-files/ -+ -+STATIC_URL = '/static/' -diff --git a/infohub/settings.pyc b/infohub/settings.pyc -new file mode 100644 -index 0000000..4d2a608 -Binary files /dev/null and b/infohub/settings.pyc differ -diff --git a/infohub/urls.py b/infohub/urls.py -new file mode 100644 -index 0000000..8a0bde5 ---- /dev/null -+++ b/infohub/urls.py -@@ -0,0 +1,16 @@ -+from django.conf.urls import patterns, include, url -+ -+from django.contrib import admin -+admin.autodiscover() -+ -+urlpatterns = patterns('', -+ # Examples: -+ # url(r'^$', 'infohub.views.home', name='home'), -+ # url(r'^blog/', include('blog.urls')), -+ -+ url(r'^admin/', include(admin.site.urls)), -+ url(r'^', include('webhub.urls')), -+ -+ -+ -+) -diff --git a/infohub/urls.pyc b/infohub/urls.pyc -new file mode 100644 -index 0000000..41b429f -Binary files /dev/null and b/infohub/urls.pyc differ -diff --git a/infohub/wsgi.py b/infohub/wsgi.py -new file mode 100644 -index 0000000..8d0bb50 ---- /dev/null -+++ b/infohub/wsgi.py -@@ -0,0 +1,14 @@ -+""" -+WSGI config for infohub project. -+ -+It exposes the WSGI callable as a module-level variable named ``application``. -+ -+For more information on this file, see -+https://docs.djangoproject.com/en/1.6/howto/deployment/wsgi/ -+""" -+ -+import os -+os.environ.setdefault("DJANGO_SETTINGS_MODULE", "infohub.settings") -+ -+from django.core.wsgi import get_wsgi_application -+application = get_wsgi_application() -diff --git a/infohub/wsgi.pyc b/infohub/wsgi.pyc -new file mode 100644 -index 0000000..af5136b -Binary files /dev/null and b/infohub/wsgi.pyc differ -diff --git a/manage.py b/manage.py -new file mode 100644 -index 0000000..c44b755 ---- /dev/null -+++ b/manage.py -@@ -0,0 +1,18 @@ -+#Version : Phython/Django 2.7.6, PostgreSQL 9.3.4 -+#Author : Vaibhavi Desai -+#Github username : desaivaibhavi -+#email : ranihaileydesai@gmail.com -+ -+#!/usr/bin/env python -+import os -+import sys -+ -+if __name__ == "__main__": -+ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "infohub.settings") -+ -+ from django.core.management import execute_from_command_line -+ -+ execute_from_command_line(sys.argv) -+ -+ -+ -diff --git a/ui/bootstrap/css/bootstrap-theme.css b/ui/bootstrap/css/bootstrap-theme.css -new file mode 100644 -index 0000000..a406992 ---- /dev/null -+++ b/ui/bootstrap/css/bootstrap-theme.css -@@ -0,0 +1,347 @@ -+/*! -+ * Bootstrap v3.1.1 (http://getbootstrap.com) -+ * Copyright 2011-2014 Twitter, Inc. -+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) -+ */ -+ -+.btn-default, -+.btn-primary, -+.btn-success, -+.btn-info, -+.btn-warning, -+.btn-danger { -+ text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); -+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); -+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); -+} -+.btn-default:active, -+.btn-primary:active, -+.btn-success:active, -+.btn-info:active, -+.btn-warning:active, -+.btn-danger:active, -+.btn-default.active, -+.btn-primary.active, -+.btn-success.active, -+.btn-info.active, -+.btn-warning.active, -+.btn-danger.active { -+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); -+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); -+} -+.btn:active, -+.btn.active { -+ background-image: none; -+} -+.btn-default { -+ text-shadow: 0 1px 0 #fff; -+ background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); -+ background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); -+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); -+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -+ background-repeat: repeat-x; -+ border-color: #dbdbdb; -+ border-color: #ccc; -+} -+.btn-default:hover, -+.btn-default:focus { -+ background-color: #e0e0e0; -+ background-position: 0 -15px; -+} -+.btn-default:active, -+.btn-default.active { -+ background-color: #e0e0e0; -+ border-color: #dbdbdb; -+} -+.btn-primary { -+ background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%); -+ background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%); -+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0); -+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -+ background-repeat: repeat-x; -+ border-color: #2b669a; -+} -+.btn-primary:hover, -+.btn-primary:focus { -+ background-color: #2d6ca2; -+ background-position: 0 -15px; -+} -+.btn-primary:active, -+.btn-primary.active { -+ background-color: #2d6ca2; -+ border-color: #2b669a; -+} -+.btn-success { -+ background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); -+ background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); -+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); -+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -+ background-repeat: repeat-x; -+ border-color: #3e8f3e; -+} -+.btn-success:hover, -+.btn-success:focus { -+ background-color: #419641; -+ background-position: 0 -15px; -+} -+.btn-success:active, -+.btn-success.active { -+ background-color: #419641; -+ border-color: #3e8f3e; -+} -+.btn-info { -+ background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); -+ background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); -+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); -+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -+ background-repeat: repeat-x; -+ border-color: #28a4c9; -+} -+.btn-info:hover, -+.btn-info:focus { -+ background-color: #2aabd2; -+ background-position: 0 -15px; -+} -+.btn-info:active, -+.btn-info.active { -+ background-color: #2aabd2; -+ border-color: #28a4c9; -+} -+.btn-warning { -+ background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); -+ background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); -+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); -+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -+ background-repeat: repeat-x; -+ border-color: #e38d13; -+} -+.btn-warning:hover, -+.btn-warning:focus { -+ background-color: #eb9316; -+ background-position: 0 -15px; -+} -+.btn-warning:active, -+.btn-warning.active { -+ background-color: #eb9316; -+ border-color: #e38d13; -+} -+.btn-danger { -+ background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); -+ background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); -+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); -+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -+ background-repeat: repeat-x; -+ border-color: #b92c28; -+} -+.btn-danger:hover, -+.btn-danger:focus { -+ background-color: #c12e2a; -+ background-position: 0 -15px; -+} -+.btn-danger:active, -+.btn-danger.active { -+ background-color: #c12e2a; -+ border-color: #b92c28; -+} -+.thumbnail, -+.img-thumbnail { -+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); -+ box-shadow: 0 1px 2px rgba(0, 0, 0, .075); -+} -+.dropdown-menu > li > a:hover, -+.dropdown-menu > li > a:focus { -+ background-color: #e8e8e8; -+ background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); -+ background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); -+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); -+ background-repeat: repeat-x; -+} -+.dropdown-menu > .active > a, -+.dropdown-menu > .active > a:hover, -+.dropdown-menu > .active > a:focus { -+ background-color: #357ebd; -+ background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); -+ background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); -+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); -+ background-repeat: repeat-x; -+} -+.navbar-default { -+ background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); -+ background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); -+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); -+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -+ background-repeat: repeat-x; -+ border-radius: 4px; -+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); -+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); -+} -+.navbar-default .navbar-nav > .active > a { -+ background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%); -+ background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%); -+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0); -+ background-repeat: repeat-x; -+ -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); -+ box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); -+} -+.navbar-brand, -+.navbar-nav > li > a { -+ text-shadow: 0 1px 0 rgba(255, 255, 255, .25); -+} -+.navbar-inverse { -+ background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); -+ background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); -+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); -+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -+ background-repeat: repeat-x; -+} -+.navbar-inverse .navbar-nav > .active > a { -+ background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%); -+ background-image: linear-gradient(to bottom, #222 0%, #282828 100%); -+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0); -+ background-repeat: repeat-x; -+ -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); -+ box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); -+} -+.navbar-inverse .navbar-brand, -+.navbar-inverse .navbar-nav > li > a { -+ text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); -+} -+.navbar-static-top, -+.navbar-fixed-top, -+.navbar-fixed-bottom { -+ border-radius: 0; -+} -+.alert { -+ text-shadow: 0 1px 0 rgba(255, 255, 255, .2); -+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); -+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); -+} -+.alert-success { -+ background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); -+ background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); -+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); -+ background-repeat: repeat-x; -+ border-color: #b2dba1; -+} -+.alert-info { -+ background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); -+ background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); -+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); -+ background-repeat: repeat-x; -+ border-color: #9acfea; -+} -+.alert-warning { -+ background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); -+ background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); -+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); -+ background-repeat: repeat-x; -+ border-color: #f5e79e; -+} -+.alert-danger { -+ background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); -+ background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); -+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); -+ background-repeat: repeat-x; -+ border-color: #dca7a7; -+} -+.progress { -+ background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); -+ background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); -+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); -+ background-repeat: repeat-x; -+} -+.progress-bar { -+ background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%); -+ background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); -+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); -+ background-repeat: repeat-x; -+} -+.progress-bar-success { -+ background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); -+ background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); -+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); -+ background-repeat: repeat-x; -+} -+.progress-bar-info { -+ background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); -+ background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); -+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); -+ background-repeat: repeat-x; -+} -+.progress-bar-warning { -+ background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); -+ background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); -+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); -+ background-repeat: repeat-x; -+} -+.progress-bar-danger { -+ background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); -+ background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); -+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); -+ background-repeat: repeat-x; -+} -+.list-group { -+ border-radius: 4px; -+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); -+ box-shadow: 0 1px 2px rgba(0, 0, 0, .075); -+} -+.list-group-item.active, -+.list-group-item.active:hover, -+.list-group-item.active:focus { -+ text-shadow: 0 -1px 0 #3071a9; -+ background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%); -+ background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%); -+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0); -+ background-repeat: repeat-x; -+ border-color: #3278b3; -+} -+.panel { -+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); -+ box-shadow: 0 1px 2px rgba(0, 0, 0, .05); -+} -+.panel-default > .panel-heading { -+ background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); -+ background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); -+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); -+ background-repeat: repeat-x; -+} -+.panel-primary > .panel-heading { -+ background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); -+ background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); -+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); -+ background-repeat: repeat-x; -+} -+.panel-success > .panel-heading { -+ background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); -+ background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); -+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); -+ background-repeat: repeat-x; -+} -+.panel-info > .panel-heading { -+ background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); -+ background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); -+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); -+ background-repeat: repeat-x; -+} -+.panel-warning > .panel-heading { -+ background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); -+ background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); -+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); -+ background-repeat: repeat-x; -+} -+.panel-danger > .panel-heading { -+ background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); -+ background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); -+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); -+ background-repeat: repeat-x; -+} -+.well { -+ background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); -+ background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); -+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); -+ background-repeat: repeat-x; -+ border-color: #dcdcdc; -+ -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); -+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); -+} -+/*# sourceMappingURL=bootstrap-theme.css.map */ -diff --git a/ui/bootstrap/css/bootstrap-theme.css.map b/ui/bootstrap/css/bootstrap-theme.css.map -new file mode 100644 -index 0000000..b36fc9a ---- /dev/null -+++ b/ui/bootstrap/css/bootstrap-theme.css.map -@@ -0,0 +1 @@ -+{"version":3,"sources":["less/theme.less","less/mixins.less"],"names":[],"mappings":"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","sourcesContent":["\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-bg, 5%); @end-color: darken(@navbar-default-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-bg; @end-color: lighten(@navbar-inverse-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n}\n\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","//\n// Mixins\n// --------------------------------------------------\n\n\n// Utilities\n// -------------------------\n\n// Clearfix\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n// contenteditable attribute is included anywhere else in the document.\n// Otherwise it causes space to appear at the top and bottom of elements\n// that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n// `:before` to contain the top-margins of child elements.\n.clearfix() {\n &:before,\n &:after {\n content: \" \"; // 1\n display: table; // 2\n }\n &:after {\n clear: both;\n }\n}\n\n// WebKit-style focus\n.tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n\n// Center-align a block level element\n.center-block() {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n\n// Sizing shortcuts\n.size(@width; @height) {\n width: @width;\n height: @height;\n}\n.square(@size) {\n .size(@size; @size);\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n &::-moz-placeholder { color: @color; // Firefox\n opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Text overflow\n// Requires inline-block or block for proper styling\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n// CSS image replacement\n//\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. Note\n// that we cannot chain the mixins together in Less, so they are repeated.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (will be removed in v4)\n.hide-text() {\n font: ~\"0/0\" a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n// New mixin to use as of v3.0.1\n.text-hide() {\n .hide-text();\n}\n\n\n\n// CSS3 PROPERTIES\n// --------------------------------------------------\n\n// Single side border-radius\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support the\n// standard `box-shadow` property.\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Transitions\n.transition(@transition) {\n -webkit-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n// Transformations\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n transform: rotate(@degrees);\n}\n.scale(@ratio; @ratio-y...) {\n -webkit-transform: scale(@ratio, @ratio-y);\n -ms-transform: scale(@ratio, @ratio-y); // IE9 only\n transform: scale(@ratio, @ratio-y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n transform: translate(@x, @y);\n}\n.skew(@x; @y) {\n -webkit-transform: skew(@x, @y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n transform: skew(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// User select\n// For selecting text on the page\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n\n// Resize anything\n.resizable(@direction) {\n resize: @direction; // Options: horizontal, vertical, both\n overflow: auto; // Safari fix\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Opacity\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n\n\n\n// GRADIENTS\n// --------------------------------------------------\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, color-stop(@start-color @start-percent), color-stop(@end-color @end-percent)); // Safari 5.1-6, Chrome 10+\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n\n// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n\n\n\n// Retina images\n//\n// Short retina mixin for setting background-image and -size\n\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// COMPONENT MIXINS\n// --------------------------------------------------\n\n// Horizontal dividers\n// -------------------------\n// Dividers (basically an hr) within dropdowns and nav lists\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n\n// Panels\n// -------------------------\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n border-color: @border;\n\n & > .panel-heading {\n color: @heading-text-color;\n background-color: @heading-bg-color;\n border-color: @heading-border;\n\n + .panel-collapse .panel-body {\n border-top-color: @border;\n }\n }\n & > .panel-footer {\n + .panel-collapse .panel-body {\n border-bottom-color: @border;\n }\n }\n}\n\n// Alerts\n// -------------------------\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\n }\n}\n\n// Tables\n// -------------------------\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n\n// List Groups\n// -------------------------\n.list-group-item-variant(@state; @background; @color) {\n .list-group-item-@{state} {\n color: @color;\n background-color: @background;\n\n a& {\n color: @color;\n\n .list-group-item-heading { color: inherit; }\n\n &:hover,\n &:focus {\n color: @color;\n background-color: darken(@background, 5%);\n }\n &.active,\n &.active:hover,\n &.active:focus {\n color: #fff;\n background-color: @color;\n border-color: @color;\n }\n }\n }\n}\n\n// Button variants\n// -------------------------\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:hover,\n &:focus,\n &:active,\n &.active,\n .open .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 8%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &:active,\n &.active {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n// -------------------------\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n\n// Pagination\n// -------------------------\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n\n// Labels\n// -------------------------\n.label-variant(@color) {\n background-color: @color;\n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\n}\n\n// Contextual backgrounds\n// -------------------------\n.bg-variant(@color) {\n background-color: @color;\n a&:hover {\n background-color: darken(@color, 10%);\n }\n}\n\n// Typography\n// -------------------------\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover {\n color: darken(@color, 10%);\n }\n}\n\n// Navbar vertical align\n// -------------------------\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n\n// Progress bars\n// -------------------------\n.progress-bar-variant(@color) {\n background-color: @color;\n .progress-striped & {\n #gradient > .striped();\n }\n}\n\n// Responsive utilities\n// -------------------------\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n display: block !important;\n table& { display: table; }\n tr& { display: table-row !important; }\n th&,\n td& { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n display: none !important;\n}\n\n\n// Grid System\n// -----------\n\n// Centered container element\n.container-fixed() {\n margin-right: auto;\n margin-left: auto;\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: (@gutter / -2);\n margin-right: (@gutter / -2);\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n @media (min-width: @screen-xs-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-xs-column-push(@columns) {\n @media (min-width: @screen-xs-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-xs-column-pull(@columns) {\n @media (min-width: @screen-xs-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n\n// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n // Color the label and help text\n .help-block,\n .control-label,\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline {\n color: @text-color;\n }\n // Set the border and box shadow on specific inputs to match\n .form-control {\n border-color: @border-color;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n &:focus {\n border-color: darken(@border-color, 10%);\n @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\n .box-shadow(@shadow);\n }\n }\n // Set validation states also for addons\n .input-group-addon {\n color: @text-color;\n border-color: @border-color;\n background-color: @background-color;\n }\n // Optional feedback icon\n .form-control-feedback {\n color: @text-color;\n }\n}\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-focus-border` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n\n.form-control-focus(@color: @input-border-focus) {\n @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n &:focus {\n border-color: @color;\n outline: 0;\n .box-shadow(~\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\");\n }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. ``\n// element gets special love because it's special, and that's a fact!\n\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n height: @input-height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n\n select& {\n height: @input-height;\n line-height: @input-height;\n }\n\n textarea&,\n select[multiple]& {\n height: auto;\n }\n}\n","//\n// Variables\n// --------------------------------------------------\n\n\n//== Colors\n//\n//## Gray and brand colors for use across Bootstrap.\n\n@gray-darker: lighten(#000, 13.5%); // #222\n@gray-dark: lighten(#000, 20%); // #333\n@gray: lighten(#000, 33.5%); // #555\n@gray-light: lighten(#000, 60%); // #999\n@gray-lighter: lighten(#000, 93.5%); // #eee\n\n@brand-primary: #428bca;\n@brand-success: #5cb85c;\n@brand-info: #5bc0de;\n@brand-warning: #f0ad4e;\n@brand-danger: #d9534f;\n\n\n//== Scaffolding\n//\n// ## Settings for some of the most global styles.\n\n//** Background color for ``.\n@body-bg: #fff;\n//** Global text color on ``.\n@text-color: @gray-dark;\n\n//** Global textual link color.\n@link-color: @brand-primary;\n//** Link hover color set via `darken()` function.\n@link-hover-color: darken(@link-color, 15%);\n\n\n//== Typography\n//\n//## Font, line-height, and color for body text, headings, and more.\n\n@font-family-sans-serif: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n@font-family-serif: Georgia, \"Times New Roman\", Times, serif;\n//** Default monospace fonts for ``, ``, and `
      `.\n@font-family-monospace:   Menlo, Monaco, Consolas, \"Courier New\", monospace;\n@font-family-base:        @font-family-sans-serif;\n\n@font-size-base:          14px;\n@font-size-large:         ceil((@font-size-base * 1.25)); // ~18px\n@font-size-small:         ceil((@font-size-base * 0.85)); // ~12px\n\n@font-size-h1:            floor((@font-size-base * 2.6)); // ~36px\n@font-size-h2:            floor((@font-size-base * 2.15)); // ~30px\n@font-size-h3:            ceil((@font-size-base * 1.7)); // ~24px\n@font-size-h4:            ceil((@font-size-base * 1.25)); // ~18px\n@font-size-h5:            @font-size-base;\n@font-size-h6:            ceil((@font-size-base * 0.85)); // ~12px\n\n//** Unit-less `line-height` for use in components like buttons.\n@line-height-base:        1.428571429; // 20/14\n//** Computed \"line-height\" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.\n@line-height-computed:    floor((@font-size-base * @line-height-base)); // ~20px\n\n//** By default, this inherits from the ``.\n@headings-font-family:    inherit;\n@headings-font-weight:    500;\n@headings-line-height:    1.1;\n@headings-color:          inherit;\n\n\n//-- Iconography\n//\n//## Specify custom locations of the include Glyphicons icon font. Useful for those including Bootstrap via Bower.\n\n@icon-font-path:          \"../fonts/\";\n@icon-font-name:          \"glyphicons-halflings-regular\";\n@icon-font-svg-id:        \"glyphicons_halflingsregular\";\n\n//== Components\n//\n//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).\n\n@padding-base-vertical:     6px;\n@padding-base-horizontal:   12px;\n\n@padding-large-vertical:    10px;\n@padding-large-horizontal:  16px;\n\n@padding-small-vertical:    5px;\n@padding-small-horizontal:  10px;\n\n@padding-xs-vertical:       1px;\n@padding-xs-horizontal:     5px;\n\n@line-height-large:         1.33;\n@line-height-small:         1.5;\n\n@border-radius-base:        4px;\n@border-radius-large:       6px;\n@border-radius-small:       3px;\n\n//** Global color for active items (e.g., navs or dropdowns).\n@component-active-color:    #fff;\n//** Global background color for active items (e.g., navs or dropdowns).\n@component-active-bg:       @brand-primary;\n\n//** Width of the `border` for generating carets that indicator dropdowns.\n@caret-width-base:          4px;\n//** Carets increase slightly in size for larger components.\n@caret-width-large:         5px;\n\n\n//== Tables\n//\n//## Customizes the `.table` component with basic values, each used across all table variations.\n\n//** Padding for ``s and ``s.\n@table-cell-padding:            8px;\n//** Padding for cells in `.table-condensed`.\n@table-condensed-cell-padding:  5px;\n\n//** Default background color used for all tables.\n@table-bg:                      transparent;\n//** Background color used for `.table-striped`.\n@table-bg-accent:               #f9f9f9;\n//** Background color used for `.table-hover`.\n@table-bg-hover:                #f5f5f5;\n@table-bg-active:               @table-bg-hover;\n\n//** Border color for table and cell borders.\n@table-border-color:            #ddd;\n\n\n//== Buttons\n//\n//## For each of Bootstrap's buttons, define text, background and border color.\n\n@btn-font-weight:                normal;\n\n@btn-default-color:              #333;\n@btn-default-bg:                 #fff;\n@btn-default-border:             #ccc;\n\n@btn-primary-color:              #fff;\n@btn-primary-bg:                 @brand-primary;\n@btn-primary-border:             darken(@btn-primary-bg, 5%);\n\n@btn-success-color:              #fff;\n@btn-success-bg:                 @brand-success;\n@btn-success-border:             darken(@btn-success-bg, 5%);\n\n@btn-info-color:                 #fff;\n@btn-info-bg:                    @brand-info;\n@btn-info-border:                darken(@btn-info-bg, 5%);\n\n@btn-warning-color:              #fff;\n@btn-warning-bg:                 @brand-warning;\n@btn-warning-border:             darken(@btn-warning-bg, 5%);\n\n@btn-danger-color:               #fff;\n@btn-danger-bg:                  @brand-danger;\n@btn-danger-border:              darken(@btn-danger-bg, 5%);\n\n@btn-link-disabled-color:        @gray-light;\n\n\n//== Forms\n//\n//##\n\n//** `` background color\n@input-bg:                       #fff;\n//** `` background color\n@input-bg-disabled:              @gray-lighter;\n\n//** Text color for ``s\n@input-color:                    @gray;\n//** `` border color\n@input-border:                   #ccc;\n//** `` border radius\n@input-border-radius:            @border-radius-base;\n//** Border color for inputs on focus\n@input-border-focus:             #66afe9;\n\n//** Placeholder text color\n@input-color-placeholder:        @gray-light;\n\n//** Default `.form-control` height\n@input-height-base:              (@line-height-computed + (@padding-base-vertical * 2) + 2);\n//** Large `.form-control` height\n@input-height-large:             (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);\n//** Small `.form-control` height\n@input-height-small:             (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);\n\n@legend-color:                   @gray-dark;\n@legend-border-color:            #e5e5e5;\n\n//** Background color for textual input addons\n@input-group-addon-bg:           @gray-lighter;\n//** Border color for textual input addons\n@input-group-addon-border-color: @input-border;\n\n\n//== Dropdowns\n//\n//## Dropdown menu container and contents.\n\n//** Background for the dropdown menu.\n@dropdown-bg:                    #fff;\n//** Dropdown menu `border-color`.\n@dropdown-border:                rgba(0,0,0,.15);\n//** Dropdown menu `border-color` **for IE8**.\n@dropdown-fallback-border:       #ccc;\n//** Divider color for between dropdown items.\n@dropdown-divider-bg:            #e5e5e5;\n\n//** Dropdown link text color.\n@dropdown-link-color:            @gray-dark;\n//** Hover color for dropdown links.\n@dropdown-link-hover-color:      darken(@gray-dark, 5%);\n//** Hover background for dropdown links.\n@dropdown-link-hover-bg:         #f5f5f5;\n\n//** Active dropdown menu item text color.\n@dropdown-link-active-color:     @component-active-color;\n//** Active dropdown menu item background color.\n@dropdown-link-active-bg:        @component-active-bg;\n\n//** Disabled dropdown menu item background color.\n@dropdown-link-disabled-color:   @gray-light;\n\n//** Text color for headers within dropdown menus.\n@dropdown-header-color:          @gray-light;\n\n// Note: Deprecated @dropdown-caret-color as of v3.1.0\n@dropdown-caret-color:           #000;\n\n\n//-- Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n//\n// Note: These variables are not generated into the Customizer.\n\n@zindex-navbar:            1000;\n@zindex-dropdown:          1000;\n@zindex-popover:           1010;\n@zindex-tooltip:           1030;\n@zindex-navbar-fixed:      1030;\n@zindex-modal-background:  1040;\n@zindex-modal:             1050;\n\n\n//== Media queries breakpoints\n//\n//## Define the breakpoints at which your layout will change, adapting to different screen sizes.\n\n// Extra small screen / phone\n// Note: Deprecated @screen-xs and @screen-phone as of v3.0.1\n@screen-xs:                  480px;\n@screen-xs-min:              @screen-xs;\n@screen-phone:               @screen-xs-min;\n\n// Small screen / tablet\n// Note: Deprecated @screen-sm and @screen-tablet as of v3.0.1\n@screen-sm:                  768px;\n@screen-sm-min:              @screen-sm;\n@screen-tablet:              @screen-sm-min;\n\n// Medium screen / desktop\n// Note: Deprecated @screen-md and @screen-desktop as of v3.0.1\n@screen-md:                  992px;\n@screen-md-min:              @screen-md;\n@screen-desktop:             @screen-md-min;\n\n// Large screen / wide desktop\n// Note: Deprecated @screen-lg and @screen-lg-desktop as of v3.0.1\n@screen-lg:                  1200px;\n@screen-lg-min:              @screen-lg;\n@screen-lg-desktop:          @screen-lg-min;\n\n// So media queries don't overlap when required, provide a maximum\n@screen-xs-max:              (@screen-sm-min - 1);\n@screen-sm-max:              (@screen-md-min - 1);\n@screen-md-max:              (@screen-lg-min - 1);\n\n\n//== Grid system\n//\n//## Define your custom responsive grid.\n\n//** Number of columns in the grid.\n@grid-columns:              12;\n//** Padding between columns. Gets divided in half for the left and right.\n@grid-gutter-width:         30px;\n// Navbar collapse\n//** Point at which the navbar becomes uncollapsed.\n@grid-float-breakpoint:     @screen-sm-min;\n//** Point at which the navbar begins collapsing.\n@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);\n\n\n//== Container sizes\n//\n//## Define the maximum width of `.container` for different screen sizes.\n\n// Small screen / tablet\n@container-tablet:             ((720px + @grid-gutter-width));\n//** For `@screen-sm-min` and up.\n@container-sm:                 @container-tablet;\n\n// Medium screen / desktop\n@container-desktop:            ((940px + @grid-gutter-width));\n//** For `@screen-md-min` and up.\n@container-md:                 @container-desktop;\n\n// Large screen / wide desktop\n@container-large-desktop:      ((1140px + @grid-gutter-width));\n//** For `@screen-lg-min` and up.\n@container-lg:                 @container-large-desktop;\n\n\n//== Navbar\n//\n//##\n\n// Basics of a navbar\n@navbar-height:                    50px;\n@navbar-margin-bottom:             @line-height-computed;\n@navbar-border-radius:             @border-radius-base;\n@navbar-padding-horizontal:        floor((@grid-gutter-width / 2));\n@navbar-padding-vertical:          ((@navbar-height - @line-height-computed) / 2);\n@navbar-collapse-max-height:       340px;\n\n@navbar-default-color:             #777;\n@navbar-default-bg:                #f8f8f8;\n@navbar-default-border:            darken(@navbar-default-bg, 6.5%);\n\n// Navbar links\n@navbar-default-link-color:                #777;\n@navbar-default-link-hover-color:          #333;\n@navbar-default-link-hover-bg:             transparent;\n@navbar-default-link-active-color:         #555;\n@navbar-default-link-active-bg:            darken(@navbar-default-bg, 6.5%);\n@navbar-default-link-disabled-color:       #ccc;\n@navbar-default-link-disabled-bg:          transparent;\n\n// Navbar brand label\n@navbar-default-brand-color:               @navbar-default-link-color;\n@navbar-default-brand-hover-color:         darken(@navbar-default-brand-color, 10%);\n@navbar-default-brand-hover-bg:            transparent;\n\n// Navbar toggle\n@navbar-default-toggle-hover-bg:           #ddd;\n@navbar-default-toggle-icon-bar-bg:        #888;\n@navbar-default-toggle-border-color:       #ddd;\n\n\n// Inverted navbar\n// Reset inverted navbar basics\n@navbar-inverse-color:                      @gray-light;\n@navbar-inverse-bg:                         #222;\n@navbar-inverse-border:                     darken(@navbar-inverse-bg, 10%);\n\n// Inverted navbar links\n@navbar-inverse-link-color:                 @gray-light;\n@navbar-inverse-link-hover-color:           #fff;\n@navbar-inverse-link-hover-bg:              transparent;\n@navbar-inverse-link-active-color:          @navbar-inverse-link-hover-color;\n@navbar-inverse-link-active-bg:             darken(@navbar-inverse-bg, 10%);\n@navbar-inverse-link-disabled-color:        #444;\n@navbar-inverse-link-disabled-bg:           transparent;\n\n// Inverted navbar brand label\n@navbar-inverse-brand-color:                @navbar-inverse-link-color;\n@navbar-inverse-brand-hover-color:          #fff;\n@navbar-inverse-brand-hover-bg:             transparent;\n\n// Inverted navbar toggle\n@navbar-inverse-toggle-hover-bg:            #333;\n@navbar-inverse-toggle-icon-bar-bg:         #fff;\n@navbar-inverse-toggle-border-color:        #333;\n\n\n//== Navs\n//\n//##\n\n//=== Shared nav styles\n@nav-link-padding:                          10px 15px;\n@nav-link-hover-bg:                         @gray-lighter;\n\n@nav-disabled-link-color:                   @gray-light;\n@nav-disabled-link-hover-color:             @gray-light;\n\n@nav-open-link-hover-color:                 #fff;\n\n//== Tabs\n@nav-tabs-border-color:                     #ddd;\n\n@nav-tabs-link-hover-border-color:          @gray-lighter;\n\n@nav-tabs-active-link-hover-bg:             @body-bg;\n@nav-tabs-active-link-hover-color:          @gray;\n@nav-tabs-active-link-hover-border-color:   #ddd;\n\n@nav-tabs-justified-link-border-color:            #ddd;\n@nav-tabs-justified-active-link-border-color:     @body-bg;\n\n//== Pills\n@nav-pills-border-radius:                   @border-radius-base;\n@nav-pills-active-link-hover-bg:            @component-active-bg;\n@nav-pills-active-link-hover-color:         @component-active-color;\n\n\n//== Pagination\n//\n//##\n\n@pagination-color:                     @link-color;\n@pagination-bg:                        #fff;\n@pagination-border:                    #ddd;\n\n@pagination-hover-color:               @link-hover-color;\n@pagination-hover-bg:                  @gray-lighter;\n@pagination-hover-border:              #ddd;\n\n@pagination-active-color:              #fff;\n@pagination-active-bg:                 @brand-primary;\n@pagination-active-border:             @brand-primary;\n\n@pagination-disabled-color:            @gray-light;\n@pagination-disabled-bg:               #fff;\n@pagination-disabled-border:           #ddd;\n\n\n//== Pager\n//\n//##\n\n@pager-bg:                             @pagination-bg;\n@pager-border:                         @pagination-border;\n@pager-border-radius:                  15px;\n\n@pager-hover-bg:                       @pagination-hover-bg;\n\n@pager-active-bg:                      @pagination-active-bg;\n@pager-active-color:                   @pagination-active-color;\n\n@pager-disabled-color:                 @pagination-disabled-color;\n\n\n//== Jumbotron\n//\n//##\n\n@jumbotron-padding:              30px;\n@jumbotron-color:                inherit;\n@jumbotron-bg:                   @gray-lighter;\n@jumbotron-heading-color:        inherit;\n@jumbotron-font-size:            ceil((@font-size-base * 1.5));\n\n\n//== Form states and alerts\n//\n//## Define colors for form feedback states and, by default, alerts.\n\n@state-success-text:             #3c763d;\n@state-success-bg:               #dff0d8;\n@state-success-border:           darken(spin(@state-success-bg, -10), 5%);\n\n@state-info-text:                #31708f;\n@state-info-bg:                  #d9edf7;\n@state-info-border:              darken(spin(@state-info-bg, -10), 7%);\n\n@state-warning-text:             #8a6d3b;\n@state-warning-bg:               #fcf8e3;\n@state-warning-border:           darken(spin(@state-warning-bg, -10), 5%);\n\n@state-danger-text:              #a94442;\n@state-danger-bg:                #f2dede;\n@state-danger-border:            darken(spin(@state-danger-bg, -10), 5%);\n\n\n//== Tooltips\n//\n//##\n\n//** Tooltip max width\n@tooltip-max-width:           200px;\n//** Tooltip text color\n@tooltip-color:               #fff;\n//** Tooltip background color\n@tooltip-bg:                  #000;\n@tooltip-opacity:             .9;\n\n//** Tooltip arrow width\n@tooltip-arrow-width:         5px;\n//** Tooltip arrow color\n@tooltip-arrow-color:         @tooltip-bg;\n\n\n//== Popovers\n//\n//##\n\n//** Popover body background color\n@popover-bg:                          #fff;\n//** Popover maximum width\n@popover-max-width:                   276px;\n//** Popover border color\n@popover-border-color:                rgba(0,0,0,.2);\n//** Popover fallback border color\n@popover-fallback-border-color:       #ccc;\n\n//** Popover title background color\n@popover-title-bg:                    darken(@popover-bg, 3%);\n\n//** Popover arrow width\n@popover-arrow-width:                 10px;\n//** Popover arrow color\n@popover-arrow-color:                 #fff;\n\n//** Popover outer arrow width\n@popover-arrow-outer-width:           (@popover-arrow-width + 1);\n//** Popover outer arrow color\n@popover-arrow-outer-color:           fadein(@popover-border-color, 5%);\n//** Popover outer arrow fallback color\n@popover-arrow-outer-fallback-color:  darken(@popover-fallback-border-color, 20%);\n\n\n//== Labels\n//\n//##\n\n//** Default label background color\n@label-default-bg:            @gray-light;\n//** Primary label background color\n@label-primary-bg:            @brand-primary;\n//** Success label background color\n@label-success-bg:            @brand-success;\n//** Info label background color\n@label-info-bg:               @brand-info;\n//** Warning label background color\n@label-warning-bg:            @brand-warning;\n//** Danger label background color\n@label-danger-bg:             @brand-danger;\n\n//** Default label text color\n@label-color:                 #fff;\n//** Default text color of a linked label\n@label-link-hover-color:      #fff;\n\n\n//== Modals\n//\n//##\n\n//** Padding applied to the modal body\n@modal-inner-padding:         20px;\n\n//** Padding applied to the modal title\n@modal-title-padding:         15px;\n//** Modal title line-height\n@modal-title-line-height:     @line-height-base;\n\n//** Background color of modal content area\n@modal-content-bg:                             #fff;\n//** Modal content border color\n@modal-content-border-color:                   rgba(0,0,0,.2);\n//** Modal content border color **for IE8**\n@modal-content-fallback-border-color:          #999;\n\n//** Modal backdrop background color\n@modal-backdrop-bg:           #000;\n//** Modal backdrop opacity\n@modal-backdrop-opacity:      .5;\n//** Modal header border color\n@modal-header-border-color:   #e5e5e5;\n//** Modal footer border color\n@modal-footer-border-color:   @modal-header-border-color;\n\n@modal-lg:                    900px;\n@modal-md:                    600px;\n@modal-sm:                    300px;\n\n\n//== Alerts\n//\n//## Define alert colors, border radius, and padding.\n\n@alert-padding:               15px;\n@alert-border-radius:         @border-radius-base;\n@alert-link-font-weight:      bold;\n\n@alert-success-bg:            @state-success-bg;\n@alert-success-text:          @state-success-text;\n@alert-success-border:        @state-success-border;\n\n@alert-info-bg:               @state-info-bg;\n@alert-info-text:             @state-info-text;\n@alert-info-border:           @state-info-border;\n\n@alert-warning-bg:            @state-warning-bg;\n@alert-warning-text:          @state-warning-text;\n@alert-warning-border:        @state-warning-border;\n\n@alert-danger-bg:             @state-danger-bg;\n@alert-danger-text:           @state-danger-text;\n@alert-danger-border:         @state-danger-border;\n\n\n//== Progress bars\n//\n//##\n\n//** Background color of the whole progress component\n@progress-bg:                 #f5f5f5;\n//** Progress bar text color\n@progress-bar-color:          #fff;\n\n//** Default progress bar color\n@progress-bar-bg:             @brand-primary;\n//** Success progress bar color\n@progress-bar-success-bg:     @brand-success;\n//** Warning progress bar color\n@progress-bar-warning-bg:     @brand-warning;\n//** Danger progress bar color\n@progress-bar-danger-bg:      @brand-danger;\n//** Info progress bar color\n@progress-bar-info-bg:        @brand-info;\n\n\n//== List group\n//\n//##\n\n//** Background color on `.list-group-item`\n@list-group-bg:                 #fff;\n//** `.list-group-item` border color\n@list-group-border:             #ddd;\n//** List group border radius\n@list-group-border-radius:      @border-radius-base;\n\n//** Background color of single list elements on hover\n@list-group-hover-bg:           #f5f5f5;\n//** Text color of active list elements\n@list-group-active-color:       @component-active-color;\n//** Background color of active list elements\n@list-group-active-bg:          @component-active-bg;\n//** Border color of active list elements\n@list-group-active-border:      @list-group-active-bg;\n@list-group-active-text-color:  lighten(@list-group-active-bg, 40%);\n\n@list-group-link-color:         #555;\n@list-group-link-heading-color: #333;\n\n\n//== Panels\n//\n//##\n\n@panel-bg:                    #fff;\n@panel-body-padding:          15px;\n@panel-border-radius:         @border-radius-base;\n\n//** Border color for elements within panels\n@panel-inner-border:          #ddd;\n@panel-footer-bg:             #f5f5f5;\n\n@panel-default-text:          @gray-dark;\n@panel-default-border:        #ddd;\n@panel-default-heading-bg:    #f5f5f5;\n\n@panel-primary-text:          #fff;\n@panel-primary-border:        @brand-primary;\n@panel-primary-heading-bg:    @brand-primary;\n\n@panel-success-text:          @state-success-text;\n@panel-success-border:        @state-success-border;\n@panel-success-heading-bg:    @state-success-bg;\n\n@panel-info-text:             @state-info-text;\n@panel-info-border:           @state-info-border;\n@panel-info-heading-bg:       @state-info-bg;\n\n@panel-warning-text:          @state-warning-text;\n@panel-warning-border:        @state-warning-border;\n@panel-warning-heading-bg:    @state-warning-bg;\n\n@panel-danger-text:           @state-danger-text;\n@panel-danger-border:         @state-danger-border;\n@panel-danger-heading-bg:     @state-danger-bg;\n\n\n//== Thumbnails\n//\n//##\n\n//** Padding around the thumbnail image\n@thumbnail-padding:           4px;\n//** Thumbnail background color\n@thumbnail-bg:                @body-bg;\n//** Thumbnail border color\n@thumbnail-border:            #ddd;\n//** Thumbnail border radius\n@thumbnail-border-radius:     @border-radius-base;\n\n//** Custom text color for thumbnail captions\n@thumbnail-caption-color:     @text-color;\n//** Padding around the thumbnail caption\n@thumbnail-caption-padding:   9px;\n\n\n//== Wells\n//\n//##\n\n@well-bg:                     #f5f5f5;\n@well-border:                 darken(@well-bg, 7%);\n\n\n//== Badges\n//\n//##\n\n@badge-color:                 #fff;\n//** Linked badge text color on hover\n@badge-link-hover-color:      #fff;\n@badge-bg:                    @gray-light;\n\n//** Badge text color in active nav link\n@badge-active-color:          @link-color;\n//** Badge background color in active nav link\n@badge-active-bg:             #fff;\n\n@badge-font-weight:           bold;\n@badge-line-height:           1;\n@badge-border-radius:         10px;\n\n\n//== Breadcrumbs\n//\n//##\n\n@breadcrumb-padding-vertical:   8px;\n@breadcrumb-padding-horizontal: 15px;\n//** Breadcrumb background color\n@breadcrumb-bg:                 #f5f5f5;\n//** Breadcrumb text color\n@breadcrumb-color:              #ccc;\n//** Text color of current page in the breadcrumb\n@breadcrumb-active-color:       @gray-light;\n//** Textual separator for between breadcrumb elements\n@breadcrumb-separator:          \"/\";\n\n\n//== Carousel\n//\n//##\n\n@carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6);\n\n@carousel-control-color:                      #fff;\n@carousel-control-width:                      15%;\n@carousel-control-opacity:                    .5;\n@carousel-control-font-size:                  20px;\n\n@carousel-indicator-active-bg:                #fff;\n@carousel-indicator-border-color:             #fff;\n\n@carousel-caption-color:                      #fff;\n\n\n//== Close\n//\n//##\n\n@close-font-weight:           bold;\n@close-color:                 #000;\n@close-text-shadow:           0 1px 0 #fff;\n\n\n//== Code\n//\n//##\n\n@code-color:                  #c7254e;\n@code-bg:                     #f9f2f4;\n\n@kbd-color:                   #fff;\n@kbd-bg:                      #333;\n\n@pre-bg:                      #f5f5f5;\n@pre-color:                   @gray-dark;\n@pre-border-color:            #ccc;\n@pre-scrollable-max-height:   340px;\n\n\n//== Type\n//\n//##\n\n//** Text muted color\n@text-muted:                  @gray-light;\n//** Abbreviations and acronyms border color\n@abbr-border-color:           @gray-light;\n//** Headings small color\n@headings-small-color:        @gray-light;\n//** Blockquote small color\n@blockquote-small-color:      @gray-light;\n//** Blockquote font size\n@blockquote-font-size:        (@font-size-base * 1.25);\n//** Blockquote border color\n@blockquote-border-color:     @gray-lighter;\n//** Page header border color\n@page-header-border-color:    @gray-lighter;\n\n\n//== Miscellaneous\n//\n//##\n\n//** Horizontal line color.\n@hr-border:                   @gray-lighter;\n\n//** Horizontal offset for forms and lists.\n@component-offset-horizontal: 180px;\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n  display: block;\n  padding: @thumbnail-padding;\n  margin-bottom: @line-height-computed;\n  line-height: @line-height-base;\n  background-color: @thumbnail-bg;\n  border: 1px solid @thumbnail-border;\n  border-radius: @thumbnail-border-radius;\n  .transition(all .2s ease-in-out);\n\n  > img,\n  a > img {\n    &:extend(.img-responsive);\n    margin-left: auto;\n    margin-right: auto;\n  }\n\n  // Add a hover state for linked versions only\n  a&:hover,\n  a&:focus,\n  a&.active {\n    border-color: @link-color;\n  }\n\n  // Image captions\n  .caption {\n    padding: @thumbnail-caption-padding;\n    color: @thumbnail-caption-color;\n  }\n}\n","//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n  position: relative;\n}\n\n.carousel-inner {\n  position: relative;\n  overflow: hidden;\n  width: 100%;\n\n  > .item {\n    display: none;\n    position: relative;\n    .transition(.6s ease-in-out left);\n\n    // Account for jankitude on images\n    > img,\n    > a > img {\n      &:extend(.img-responsive);\n      line-height: 1;\n    }\n  }\n\n  > .active,\n  > .next,\n  > .prev { display: block; }\n\n  > .active {\n    left: 0;\n  }\n\n  > .next,\n  > .prev {\n    position: absolute;\n    top: 0;\n    width: 100%;\n  }\n\n  > .next {\n    left: 100%;\n  }\n  > .prev {\n    left: -100%;\n  }\n  > .next.left,\n  > .prev.right {\n    left: 0;\n  }\n\n  > .active.left {\n    left: -100%;\n  }\n  > .active.right {\n    left: 100%;\n  }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  width: @carousel-control-width;\n  .opacity(@carousel-control-opacity);\n  font-size: @carousel-control-font-size;\n  color: @carousel-control-color;\n  text-align: center;\n  text-shadow: @carousel-text-shadow;\n  // We can't have this transition here because WebKit cancels the carousel\n  // animation if you trip this while in the middle of another animation.\n\n  // Set gradients for backgrounds\n  &.left {\n    #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));\n  }\n  &.right {\n    left: auto;\n    right: 0;\n    #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));\n  }\n\n  // Hover/focus state\n  &:hover,\n  &:focus {\n    outline: none;\n    color: @carousel-control-color;\n    text-decoration: none;\n    .opacity(.9);\n  }\n\n  // Toggles\n  .icon-prev,\n  .icon-next,\n  .glyphicon-chevron-left,\n  .glyphicon-chevron-right {\n    position: absolute;\n    top: 50%;\n    z-index: 5;\n    display: inline-block;\n  }\n  .icon-prev,\n  .glyphicon-chevron-left {\n    left: 50%;\n  }\n  .icon-next,\n  .glyphicon-chevron-right {\n    right: 50%;\n  }\n  .icon-prev,\n  .icon-next {\n    width:  20px;\n    height: 20px;\n    margin-top: -10px;\n    margin-left: -10px;\n    font-family: serif;\n  }\n\n  .icon-prev {\n    &:before {\n      content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n    }\n  }\n  .icon-next {\n    &:before {\n      content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n    }\n  }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  margin-left: -30%;\n  padding-left: 0;\n  list-style: none;\n  text-align: center;\n\n  li {\n    display: inline-block;\n    width:  10px;\n    height: 10px;\n    margin: 1px;\n    text-indent: -999px;\n    border: 1px solid @carousel-indicator-border-color;\n    border-radius: 10px;\n    cursor: pointer;\n\n    // IE8-9 hack for event handling\n    //\n    // Internet Explorer 8-9 does not support clicks on elements without a set\n    // `background-color`. We cannot use `filter` since that's not viewed as a\n    // background color by the browser. Thus, a hack is needed.\n    //\n    // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n    // set alpha transparency for the best results possible.\n    background-color: #000 \\9; // IE8\n    background-color: rgba(0,0,0,0); // IE9\n  }\n  .active {\n    margin: 0;\n    width:  12px;\n    height: 12px;\n    background-color: @carousel-indicator-active-bg;\n  }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n  position: absolute;\n  left: 15%;\n  right: 15%;\n  bottom: 20px;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: @carousel-caption-color;\n  text-align: center;\n  text-shadow: @carousel-text-shadow;\n  & .btn {\n    text-shadow: none; // No shadow for button elements in carousel-caption\n  }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n\n  // Scale up the controls a smidge\n  .carousel-control {\n    .glyphicon-chevron-left,\n    .glyphicon-chevron-right,\n    .icon-prev,\n    .icon-next {\n      width: 30px;\n      height: 30px;\n      margin-top: -15px;\n      margin-left: -15px;\n      font-size: 30px;\n    }\n  }\n\n  // Show and left align the captions\n  .carousel-caption {\n    left: 20%;\n    right: 20%;\n    padding-bottom: 30px;\n  }\n\n  // Move up the indicators\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  font-family: @headings-font-family;\n  font-weight: @headings-font-weight;\n  line-height: @headings-line-height;\n  color: @headings-color;\n\n  small,\n  .small {\n    font-weight: normal;\n    line-height: 1;\n    color: @headings-small-color;\n  }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n  margin-top: @line-height-computed;\n  margin-bottom: (@line-height-computed / 2);\n\n  small,\n  .small {\n    font-size: 65%;\n  }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n  margin-top: (@line-height-computed / 2);\n  margin-bottom: (@line-height-computed / 2);\n\n  small,\n  .small {\n    font-size: 75%;\n  }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n  margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n  margin-bottom: @line-height-computed;\n  font-size: floor((@font-size-base * 1.15));\n  font-weight: 200;\n  line-height: 1.4;\n\n  @media (min-width: @screen-sm-min) {\n    font-size: (@font-size-base * 1.5);\n  }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: 14px base font * 85% = about 12px\nsmall,\n.small  { font-size: 85%; }\n\n// Undo browser default styling\ncite    { font-style: normal; }\n\n// Alignment\n.text-left           { text-align: left; }\n.text-right          { text-align: right; }\n.text-center         { text-align: center; }\n.text-justify        { text-align: justify; }\n\n// Contextual colors\n.text-muted {\n  color: @text-muted;\n}\n.text-primary {\n  .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n  .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n  .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n  .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n  .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n  // Given the contrast here, this is the only class to have its color inverted\n  // automatically.\n  color: #fff;\n  .bg-variant(@brand-primary);\n}\n.bg-success {\n  .bg-variant(@state-success-bg);\n}\n.bg-info {\n  .bg-variant(@state-info-bg);\n}\n.bg-warning {\n  .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n  .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n  padding-bottom: ((@line-height-computed / 2) - 1);\n  margin: (@line-height-computed * 2) 0 @line-height-computed;\n  border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// --------------------------------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n  margin-top: 0;\n  margin-bottom: (@line-height-computed / 2);\n  ul,\n  ol {\n    margin-bottom: 0;\n  }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n  .list-unstyled();\n  margin-left: -5px;\n\n  > li {\n    display: inline-block;\n    padding-left: 5px;\n    padding-right: 5px;\n  }\n}\n\n// Description Lists\ndl {\n  margin-top: 0; // Remove browser default\n  margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n  line-height: @line-height-base;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n@media (min-width: @grid-float-breakpoint) {\n  .dl-horizontal {\n    dt {\n      float: left;\n      width: (@component-offset-horizontal - 20);\n      clear: left;\n      text-align: right;\n      .text-overflow();\n    }\n    dd {\n      margin-left: @component-offset-horizontal;\n      &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n    }\n  }\n}\n\n// MISC\n// ----\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\n\n// Blockquotes\nblockquote {\n  padding: (@line-height-computed / 2) @line-height-computed;\n  margin: 0 0 @line-height-computed;\n  font-size: @blockquote-font-size;\n  border-left: 5px solid @blockquote-border-color;\n\n  p,\n  ul,\n  ol {\n    &:last-child {\n      margin-bottom: 0;\n    }\n  }\n\n  // Note: Deprecated small and .small as of v3.1.0\n  // Context: https://github.com/twbs/bootstrap/issues/11660\n  footer,\n  small,\n  .small {\n    display: block;\n    font-size: 80%; // back to default font-size\n    line-height: @line-height-base;\n    color: @blockquote-small-color;\n\n    &:before {\n      content: '\\2014 \\00A0'; // em dash, nbsp\n    }\n  }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  border-right: 5px solid @blockquote-border-color;\n  border-left: 0;\n  text-align: right;\n\n  // Account for citation\n  footer,\n  small,\n  .small {\n    &:before { content: ''; }\n    &:after {\n      content: '\\00A0 \\2014'; // nbsp, em dash\n    }\n  }\n}\n\n// Quotes\nblockquote:before,\nblockquote:after {\n  content: \"\";\n}\n\n// Addresses\naddress {\n  margin-bottom: @line-height-computed;\n  font-style: normal;\n  line-height: @line-height-base;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n  font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: @code-color;\n  background-color: @code-bg;\n  white-space: nowrap;\n  border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: @kbd-color;\n  background-color: @kbd-bg;\n  border-radius: @border-radius-small;\n  box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n}\n\n// Blocks of code\npre {\n  display: block;\n  padding: ((@line-height-computed - 1) / 2);\n  margin: 0 0 (@line-height-computed / 2);\n  font-size: (@font-size-base - 1); // 14px to 13px\n  line-height: @line-height-base;\n  word-break: break-all;\n  word-wrap: break-word;\n  color: @pre-color;\n  background-color: @pre-bg;\n  border: 1px solid @pre-border-color;\n  border-radius: @border-radius-base;\n\n  // Account for some code outputs that place code tags in pre tags\n  code {\n    padding: 0;\n    font-size: inherit;\n    color: inherit;\n    white-space: pre-wrap;\n    background-color: transparent;\n    border-radius: 0;\n  }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n  max-height: @pre-scrollable-max-height;\n  overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n  .container-fixed();\n\n  @media (min-width: @screen-sm-min) {\n    width: @container-sm;\n  }\n  @media (min-width: @screen-md-min) {\n    width: @container-md;\n  }\n  @media (min-width: @screen-lg-min) {\n    width: @container-lg;\n  }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n  .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n  .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n  .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n  .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n  .make-grid(lg);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n  max-width: 100%;\n  background-color: @table-bg;\n}\nth {\n  text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n  width: 100%;\n  margin-bottom: @line-height-computed;\n  // Cells\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: @table-cell-padding;\n        line-height: @line-height-base;\n        vertical-align: top;\n        border-top: 1px solid @table-border-color;\n      }\n    }\n  }\n  // Bottom align for column headings\n  > thead > tr > th {\n    vertical-align: bottom;\n    border-bottom: 2px solid @table-border-color;\n  }\n  // Remove top border from thead by default\n  > caption + thead,\n  > colgroup + thead,\n  > thead:first-child {\n    > tr:first-child {\n      > th,\n      > td {\n        border-top: 0;\n      }\n    }\n  }\n  // Account for multiple tbody instances\n  > tbody + tbody {\n    border-top: 2px solid @table-border-color;\n  }\n\n  // Nesting\n  .table {\n    background-color: @body-bg;\n  }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: @table-condensed-cell-padding;\n      }\n    }\n  }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n  border: 1px solid @table-border-color;\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        border: 1px solid @table-border-color;\n      }\n    }\n  }\n  > thead > tr {\n    > th,\n    > td {\n      border-bottom-width: 2px;\n    }\n  }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n  > tbody > tr:nth-child(odd) {\n    > td,\n    > th {\n      background-color: @table-bg-accent;\n    }\n  }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n  > tbody > tr:hover {\n    > td,\n    > th {\n      background-color: @table-bg-hover;\n    }\n  }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n  position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n  float: none;\n  display: table-column;\n}\ntable {\n  td,\n  th {\n    &[class*=\"col-\"] {\n      position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n      float: none;\n      display: table-cell;\n    }\n  }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n@media (max-width: @screen-xs-max) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: (@line-height-computed * 0.75);\n    overflow-y: hidden;\n    overflow-x: scroll;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid @table-border-color;\n    -webkit-overflow-scrolling: touch;\n\n    // Tighten up spacing\n    > .table {\n      margin-bottom: 0;\n\n      // Ensure the content doesn't wrap\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th,\n          > td {\n            white-space: nowrap;\n          }\n        }\n      }\n    }\n\n    // Special overrides for the bordered tables\n    > .table-bordered {\n      border: 0;\n\n      // Nuke the appropriate borders so that the parent can handle them\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th:first-child,\n          > td:first-child {\n            border-left: 0;\n          }\n          > th:last-child,\n          > td:last-child {\n            border-right: 0;\n          }\n        }\n      }\n\n      // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n      // chances are there will be only one `tr` in a `thead` and that would\n      // remove the border altogether.\n      > tbody,\n      > tfoot {\n        > tr:last-child {\n          > th,\n          > td {\n            border-bottom: 0;\n          }\n        }\n      }\n\n    }\n  }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n  padding: 0;\n  margin: 0;\n  border: 0;\n  // Chrome and Firefox set a `min-width: -webkit-min-content;` on fieldsets,\n  // so we reset that to ensure it behaves more like a standard block element.\n  // See https://github.com/twbs/bootstrap/issues/12359.\n  min-width: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: @line-height-computed;\n  font-size: (@font-size-base * 1.5);\n  line-height: inherit;\n  color: @legend-color;\n  border: 0;\n  border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n  display: inline-block;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n  .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9; /* IE8-9 */\n  line-height: normal;\n}\n\n// Set the height of file controls to match text inputs\ninput[type=\"file\"] {\n  display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n  height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  .tab-focus();\n}\n\n// Adjust output element\noutput {\n  display: block;\n  padding-top: (@padding-base-vertical + 1);\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n  padding: @padding-base-vertical @padding-base-horizontal;\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @input-color;\n  background-color: @input-bg;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid @input-border;\n  border-radius: @input-border-radius;\n  .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n  .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n  // Customize the `:focus` state to imitate native WebKit styles.\n  .form-control-focus();\n\n  // Placeholder\n  .placeholder();\n\n  // Disabled and read-only inputs\n  //\n  // HTML5 says that controls under a fieldset > legend:first-child won't be\n  // disabled if the fieldset is disabled. Due to implementation difficulty, we\n  // don't honor that edge case; we style them as disabled anyway.\n  &[disabled],\n  &[readonly],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n    background-color: @input-bg-disabled;\n    opacity: 1; // iOS fix for unreadable disabled content\n  }\n\n  // Reset height for `textarea`s\n  textarea& {\n    height: auto;\n  }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\n\n\n// Special styles for iOS date input\n//\n// In Mobile Safari, date inputs require a pixel line-height that matches the\n// given height of the input.\n\ninput[type=\"date\"] {\n  line-height: @input-height-base;\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n  margin-bottom: 15px;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n  display: block;\n  min-height: @line-height-computed; // clear the floating input if there is no label text\n  margin-top: 10px;\n  margin-bottom: 10px;\n  padding-left: 20px;\n  label {\n    display: inline;\n    font-weight: normal;\n    cursor: pointer;\n  }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  float: left;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  vertical-align: middle;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n//\n// Note: Neither radios nor checkboxes can be readonly.\ninput[type=\"radio\"],\ninput[type=\"checkbox\"],\n.radio,\n.radio-inline,\n.checkbox,\n.checkbox-inline {\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n  }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n\n.input-sm {\n  .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n.input-lg {\n  .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n.has-feedback {\n  // Enable absolute positioning\n  position: relative;\n\n  // Ensure icons don't overlap text\n  .form-control {\n    padding-right: (@input-height-base * 1.25);\n  }\n\n  // Feedback icon (requires .glyphicon classes)\n  .form-control-feedback {\n    position: absolute;\n    top: (@line-height-computed + 5); // Height of the `label` and its margin\n    right: 0;\n    display: block;\n    width: @input-height-base;\n    height: @input-height-base;\n    line-height: @input-height-base;\n    text-align: center;\n  }\n}\n\n// Feedback states\n.has-success {\n  .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n.has-warning {\n  .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n.has-error {\n  .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n  margin-bottom: 0; // Remove default margin from `p`\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n  display: block; // account for any element using help-block\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: lighten(@text-color, 25%); // lighten the text some for contrast\n}\n\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n\n  // Kick in the inline\n  @media (min-width: @screen-sm-min) {\n    // Inline-block all the things for \"inline\"\n    .form-group {\n      display: inline-block;\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // In navbar-form, allow folks to *not* use `.form-group`\n    .form-control {\n      display: inline-block;\n      width: auto; // Prevent labels from stacking above inputs in `.form-group`\n      vertical-align: middle;\n    }\n    // Input groups need that 100% width though\n    .input-group > .form-control {\n      width: 100%;\n    }\n\n    .control-label {\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // Remove default margin on radios/checkboxes that were used for stacking, and\n    // then undo the floating of radios and checkboxes to match (which also avoids\n    // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).\n    .radio,\n    .checkbox {\n      display: inline-block;\n      margin-top: 0;\n      margin-bottom: 0;\n      padding-left: 0;\n      vertical-align: middle;\n    }\n    .radio input[type=\"radio\"],\n    .checkbox input[type=\"checkbox\"] {\n      float: none;\n      margin-left: 0;\n    }\n\n    // Validation states\n    //\n    // Reposition the icon because it's now within a grid column and columns have\n    // `position: relative;` on them. Also accounts for the grid gutter padding.\n    .has-feedback .form-control-feedback {\n      top: 0;\n    }\n  }\n}\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n  // Consistent vertical alignment of labels, radios, and checkboxes\n  .control-label,\n  .radio,\n  .checkbox,\n  .radio-inline,\n  .checkbox-inline {\n    margin-top: 0;\n    margin-bottom: 0;\n    padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n  }\n  // Account for padding we're adding to ensure the alignment and of help text\n  // and other content below items\n  .radio,\n  .checkbox {\n    min-height: (@line-height-computed + (@padding-base-vertical + 1));\n  }\n\n  // Make form groups behave like rows\n  .form-group {\n    .make-row();\n  }\n\n  .form-control-static {\n    padding-top: (@padding-base-vertical + 1);\n  }\n\n  // Only right align form labels here when the columns stop stacking\n  @media (min-width: @screen-sm-min) {\n    .control-label {\n      text-align: right;\n    }\n  }\n\n  // Validation states\n  //\n  // Reposition the icon because it's now within a grid column and columns have\n  // `position: relative;` on them. Also accounts for the grid gutter padding.\n  .has-feedback .form-control-feedback {\n    top: 0;\n    right: (@grid-gutter-width / 2);\n  }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n  display: inline-block;\n  margin-bottom: 0; // For input.btn\n  font-weight: @btn-font-weight;\n  text-align: center;\n  vertical-align: middle;\n  cursor: pointer;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  white-space: nowrap;\n  .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base);\n  .user-select(none);\n\n  &,\n  &:active,\n  &.active {\n    &:focus {\n      .tab-focus();\n    }\n  }\n\n  &:hover,\n  &:focus {\n    color: @btn-default-color;\n    text-decoration: none;\n  }\n\n  &:active,\n  &.active {\n    outline: 0;\n    background-image: none;\n    .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n  }\n\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n    pointer-events: none; // Future-proof disabling of clicks\n    .opacity(.65);\n    .box-shadow(none);\n  }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n  .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n  .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n  .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n  .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n  .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n  .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n  color: @link-color;\n  font-weight: normal;\n  cursor: pointer;\n  border-radius: 0;\n\n  &,\n  &:active,\n  &[disabled],\n  fieldset[disabled] & {\n    background-color: transparent;\n    .box-shadow(none);\n  }\n  &,\n  &:hover,\n  &:focus,\n  &:active {\n    border-color: transparent;\n  }\n  &:hover,\n  &:focus {\n    color: @link-hover-color;\n    text-decoration: underline;\n    background-color: transparent;\n  }\n  &[disabled],\n  fieldset[disabled] & {\n    &:hover,\n    &:focus {\n      color: @btn-link-disabled-color;\n      text-decoration: none;\n    }\n  }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n  // line-height: ensure even-numbered height of button next to large input\n  .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n.btn-sm {\n  // line-height: ensure proper height of button next to small input\n  .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n.btn-xs {\n  .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n  display: block;\n  width: 100%;\n  padding-left: 0;\n  padding-right: 0;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n  &.btn-block {\n    width: 100%;\n  }\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle; // match .btn alignment given font-size hack above\n  > .btn {\n    position: relative;\n    float: left;\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active,\n    &.active {\n      z-index: 2;\n    }\n    &:focus {\n      // Remove focus outline when dropdown JS adds it after closing the menu\n      outline: none;\n    }\n  }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n  .btn + .btn,\n  .btn + .btn-group,\n  .btn-group + .btn,\n  .btn-group + .btn-group {\n    margin-left: -1px;\n  }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n  margin-left: -5px; // Offset the first child's margin\n  &:extend(.clearfix all);\n\n  .btn-group,\n  .input-group {\n    float: left;\n  }\n  > .btn,\n  > .btn-group,\n  > .input-group {\n    margin-left: 5px;\n  }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n  margin-left: 0;\n  &:not(:last-child):not(.dropdown-toggle) {\n    .border-right-radius(0);\n  }\n}\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    .border-right-radius(0);\n  }\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n  .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n  padding-left: 8px;\n  padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-left: 12px;\n  padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n  .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n  // Show no shadow for `.btn-link` since it has no other button styles.\n  &.btn-link {\n    .box-shadow(none);\n  }\n}\n\n\n// Reposition the caret\n.btn .caret {\n  margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n  border-width: @caret-width-large @caret-width-large 0;\n  border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n  border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n  > .btn,\n  > .btn-group,\n  > .btn-group > .btn {\n    display: block;\n    float: none;\n    width: 100%;\n    max-width: 100%;\n  }\n\n  // Clear floats so dropdown menus can be properly placed\n  > .btn-group {\n    &:extend(.clearfix all);\n    > .btn {\n      float: none;\n    }\n  }\n\n  > .btn + .btn,\n  > .btn + .btn-group,\n  > .btn-group + .btn,\n  > .btn-group + .btn-group {\n    margin-top: -1px;\n    margin-left: 0;\n  }\n}\n\n.btn-group-vertical > .btn {\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n  &:first-child:not(:last-child) {\n    border-top-right-radius: @border-radius-base;\n    .border-bottom-radius(0);\n  }\n  &:last-child:not(:first-child) {\n    border-bottom-left-radius: @border-radius-base;\n    .border-top-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    .border-bottom-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  .border-top-radius(0);\n}\n\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n  > .btn,\n  > .btn-group {\n    float: none;\n    display: table-cell;\n    width: 1%;\n  }\n  > .btn-group .btn {\n    width: 100%;\n  }\n}\n\n\n// Checkbox and radio options\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  display: none;\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552.\n\n.fade {\n  opacity: 0;\n  .transition(opacity .15s linear);\n  &.in {\n    opacity: 1;\n  }\n}\n\n.collapse {\n  display: none;\n  &.in {\n    display: block;\n  }\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  .transition(height .35s ease);\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n//  Star\n\n// Import the fonts\n@font-face {\n  font-family: 'Glyphicons Halflings';\n  src: ~\"url('@{icon-font-path}@{icon-font-name}.eot')\";\n  src: ~\"url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype')\",\n       ~\"url('@{icon-font-path}@{icon-font-name}.woff') format('woff')\",\n       ~\"url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype')\",\n       ~\"url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg')\";\n}\n\n// Catchall baseclass\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk               { &:before { content: \"\\2a\"; } }\n.glyphicon-plus                   { &:before { content: \"\\2b\"; } }\n.glyphicon-euro                   { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus                  { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud                  { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope               { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil                 { &:before { content: \"\\270f\"; } }\n.glyphicon-glass                  { &:before { content: \"\\e001\"; } }\n.glyphicon-music                  { &:before { content: \"\\e002\"; } }\n.glyphicon-search                 { &:before { content: \"\\e003\"; } }\n.glyphicon-heart                  { &:before { content: \"\\e005\"; } }\n.glyphicon-star                   { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty             { &:before { content: \"\\e007\"; } }\n.glyphicon-user                   { &:before { content: \"\\e008\"; } }\n.glyphicon-film                   { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large               { &:before { content: \"\\e010\"; } }\n.glyphicon-th                     { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list                { &:before { content: \"\\e012\"; } }\n.glyphicon-ok                     { &:before { content: \"\\e013\"; } }\n.glyphicon-remove                 { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in                { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out               { &:before { content: \"\\e016\"; } }\n.glyphicon-off                    { &:before { content: \"\\e017\"; } }\n.glyphicon-signal                 { &:before { content: \"\\e018\"; } }\n.glyphicon-cog                    { &:before { content: \"\\e019\"; } }\n.glyphicon-trash                  { &:before { content: \"\\e020\"; } }\n.glyphicon-home                   { &:before { content: \"\\e021\"; } }\n.glyphicon-file                   { &:before { content: \"\\e022\"; } }\n.glyphicon-time                   { &:before { content: \"\\e023\"; } }\n.glyphicon-road                   { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt           { &:before { content: \"\\e025\"; } }\n.glyphicon-download               { &:before { content: \"\\e026\"; } }\n.glyphicon-upload                 { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox                  { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle            { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat                 { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh                { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt               { &:before { content: \"\\e032\"; } }\n.glyphicon-lock                   { &:before { content: \"\\e033\"; } }\n.glyphicon-flag                   { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones             { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off             { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down            { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up              { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode                 { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode                { &:before { content: \"\\e040\"; } }\n.glyphicon-tag                    { &:before { content: \"\\e041\"; } }\n.glyphicon-tags                   { &:before { content: \"\\e042\"; } }\n.glyphicon-book                   { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark               { &:before { content: \"\\e044\"; } }\n.glyphicon-print                  { &:before { content: \"\\e045\"; } }\n.glyphicon-camera                 { &:before { content: \"\\e046\"; } }\n.glyphicon-font                   { &:before { content: \"\\e047\"; } }\n.glyphicon-bold                   { &:before { content: \"\\e048\"; } }\n.glyphicon-italic                 { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height            { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width             { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left             { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center           { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right            { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify          { &:before { content: \"\\e055\"; } }\n.glyphicon-list                   { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left            { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right           { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video         { &:before { content: \"\\e059\"; } }\n.glyphicon-picture                { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker             { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust                 { &:before { content: \"\\e063\"; } }\n.glyphicon-tint                   { &:before { content: \"\\e064\"; } }\n.glyphicon-edit                   { &:before { content: \"\\e065\"; } }\n.glyphicon-share                  { &:before { content: \"\\e066\"; } }\n.glyphicon-check                  { &:before { content: \"\\e067\"; } }\n.glyphicon-move                   { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward          { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward          { &:before { content: \"\\e070\"; } }\n.glyphicon-backward               { &:before { content: \"\\e071\"; } }\n.glyphicon-play                   { &:before { content: \"\\e072\"; } }\n.glyphicon-pause                  { &:before { content: \"\\e073\"; } }\n.glyphicon-stop                   { &:before { content: \"\\e074\"; } }\n.glyphicon-forward                { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward           { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward           { &:before { content: \"\\e077\"; } }\n.glyphicon-eject                  { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left           { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right          { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign              { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign             { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign            { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign                { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign          { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign              { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot             { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle          { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle              { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle             { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left             { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right            { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up               { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down             { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt              { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full            { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small           { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign       { &:before { content: \"\\e101\"; } }\n.glyphicon-gift                   { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf                   { &:before { content: \"\\e103\"; } }\n.glyphicon-fire                   { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open               { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close              { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign           { &:before { content: \"\\e107\"; } }\n.glyphicon-plane                  { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar               { &:before { content: \"\\e109\"; } }\n.glyphicon-random                 { &:before { content: \"\\e110\"; } }\n.glyphicon-comment                { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet                 { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up             { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down           { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet                { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart          { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close           { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open            { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical        { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal      { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd                    { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn               { &:before { content: \"\\e122\"; } }\n.glyphicon-bell                   { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate            { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up              { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down            { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right             { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left              { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up                { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down              { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right     { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left      { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up        { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down      { &:before { content: \"\\e134\"; } }\n.glyphicon-globe                  { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench                 { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks                  { &:before { content: \"\\e137\"; } }\n.glyphicon-filter                 { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase              { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen             { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard              { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip              { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty            { &:before { content: \"\\e143\"; } }\n.glyphicon-link                   { &:before { content: \"\\e144\"; } }\n.glyphicon-phone                  { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin                { &:before { content: \"\\e146\"; } }\n.glyphicon-usd                    { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp                    { &:before { content: \"\\e149\"; } }\n.glyphicon-sort                   { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet       { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt   { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order          { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt      { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes     { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked              { &:before { content: \"\\e157\"; } }\n.glyphicon-expand                 { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down          { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up            { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in                 { &:before { content: \"\\e161\"; } }\n.glyphicon-flash                  { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out                { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window             { &:before { content: \"\\e164\"; } }\n.glyphicon-record                 { &:before { content: \"\\e165\"; } }\n.glyphicon-save                   { &:before { content: \"\\e166\"; } }\n.glyphicon-open                   { &:before { content: \"\\e167\"; } }\n.glyphicon-saved                  { &:before { content: \"\\e168\"; } }\n.glyphicon-import                 { &:before { content: \"\\e169\"; } }\n.glyphicon-export                 { &:before { content: \"\\e170\"; } }\n.glyphicon-send                   { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk            { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved           { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove          { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save            { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open            { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card            { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer               { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery                { &:before { content: \"\\e179\"; } }\n.glyphicon-header                 { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed             { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone               { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt              { &:before { content: \"\\e183\"; } }\n.glyphicon-tower                  { &:before { content: \"\\e184\"; } }\n.glyphicon-stats                  { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video               { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video               { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles              { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo           { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby            { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1              { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1              { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1              { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark         { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark      { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download         { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload           { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer           { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous         { &:before { content: \"\\e200\"; } }\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top:   @caret-width-base solid;\n  border-right: @caret-width-base solid transparent;\n  border-left:  @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropdown {\n  position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n  outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: @zindex-dropdown;\n  display: none; // none by default, but block on \"open\" of the menu\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0; // override default ul\n  list-style: none;\n  font-size: @font-size-base;\n  background-color: @dropdown-bg;\n  border: 1px solid @dropdown-fallback-border; // IE8 fallback\n  border: 1px solid @dropdown-border;\n  border-radius: @border-radius-base;\n  .box-shadow(0 6px 12px rgba(0,0,0,.175));\n  background-clip: padding-box;\n\n  // Aligns the dropdown menu to right\n  //\n  // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n  &.pull-right {\n    right: 0;\n    left: auto;\n  }\n\n  // Dividers (basically an hr) within the dropdown\n  .divider {\n    .nav-divider(@dropdown-divider-bg);\n  }\n\n  // Links within the dropdown menu\n  > li > a {\n    display: block;\n    padding: 3px 20px;\n    clear: both;\n    font-weight: normal;\n    line-height: @line-height-base;\n    color: @dropdown-link-color;\n    white-space: nowrap; // prevent links from randomly breaking onto new lines\n  }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    color: @dropdown-link-hover-color;\n    background-color: @dropdown-link-hover-bg;\n  }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n  &,\n  &:hover,\n  &:focus {\n    color: @dropdown-link-active-color;\n    text-decoration: none;\n    outline: 0;\n    background-color: @dropdown-link-active-bg;\n  }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n  &,\n  &:hover,\n  &:focus {\n    color: @dropdown-link-disabled-color;\n  }\n}\n// Nuke hover/focus effects\n.dropdown-menu > .disabled > a {\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    background-color: transparent;\n    background-image: none; // Remove CSS gradient\n    .reset-filter();\n    cursor: not-allowed;\n  }\n}\n\n// Open state for the dropdown\n.open {\n  // Show the menu\n  > .dropdown-menu {\n    display: block;\n  }\n\n  // Remove the outline when :focus is triggered\n  > a {\n    outline: 0;\n  }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n  left: auto; // Reset the default from `.dropdown-menu`\n  right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n  left: 0;\n  right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: @font-size-small;\n  line-height: @line-height-base;\n  color: @dropdown-header-color;\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  top: 0;\n  z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n  // Reverse the caret\n  .caret {\n    border-top: 0;\n    border-bottom: @caret-width-base solid;\n    content: \"\";\n  }\n  // Different positioning for bottom up menu\n  .dropdown-menu {\n    top: auto;\n    bottom: 100%;\n    margin-bottom: 1px;\n  }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-right {\n    .dropdown-menu {\n      .dropdown-menu-right();\n    }\n    // Necessary for overrides of the default right aligned menu.\n    // Will remove come v4 in all likelihood.\n    .dropdown-menu-left {\n      .dropdown-menu-left();\n    }\n  }\n}\n\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n  position: relative; // For dropdowns\n  display: table;\n  border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n  // Undo padding and float of grid classes\n  &[class*=\"col-\"] {\n    float: none;\n    padding-left: 0;\n    padding-right: 0;\n  }\n\n  .form-control {\n    // Ensure that the input is always above the *appended* addon button for\n    // proper border colors.\n    position: relative;\n    z-index: 2;\n\n    // IE9 fubars the placeholder attribute in text inputs and the arrows on\n    // select elements in input groups. To fix it, we float the input. Details:\n    // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n    float: left;\n\n    width: 100%;\n    margin-bottom: 0;\n  }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn { .input-lg(); }\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn { .input-sm(); }\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n  padding: @padding-base-vertical @padding-base-horizontal;\n  font-size: @font-size-base;\n  font-weight: normal;\n  line-height: 1;\n  color: @input-color;\n  text-align: center;\n  background-color: @input-group-addon-bg;\n  border: 1px solid @input-group-addon-border-color;\n  border-radius: @border-radius-base;\n\n  // Sizing\n  &.input-sm {\n    padding: @padding-small-vertical @padding-small-horizontal;\n    font-size: @font-size-small;\n    border-radius: @border-radius-small;\n  }\n  &.input-lg {\n    padding: @padding-large-vertical @padding-large-horizontal;\n    font-size: @font-size-large;\n    border-radius: @border-radius-large;\n  }\n\n  // Nuke default margins from checkboxes and radios to vertically center within.\n  input[type=\"radio\"],\n  input[type=\"checkbox\"] {\n    margin-top: 0;\n  }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  .border-right-radius(0);\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  .border-left-radius(0);\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n  position: relative;\n  // Jankily prevent input button groups from wrapping with `white-space` and\n  // `font-size` in combination with `inline-block` on buttons.\n  font-size: 0;\n  white-space: nowrap;\n\n  // Negative margin for spacing, position for bringing hovered/focused/actived\n  // element above the siblings.\n  > .btn {\n    position: relative;\n    + .btn {\n      margin-left: -1px;\n    }\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active {\n      z-index: 2;\n    }\n  }\n\n  // Negative margin to only have a 1px border between the two\n  &:first-child {\n    > .btn,\n    > .btn-group {\n      margin-right: -1px;\n    }\n  }\n  &:last-child {\n    > .btn,\n    > .btn-group {\n      margin-left: -1px;\n    }\n  }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n  margin-bottom: 0;\n  padding-left: 0; // Override default ul/ol\n  list-style: none;\n  &:extend(.clearfix all);\n\n  > li {\n    position: relative;\n    display: block;\n\n    > a {\n      position: relative;\n      display: block;\n      padding: @nav-link-padding;\n      &:hover,\n      &:focus {\n        text-decoration: none;\n        background-color: @nav-link-hover-bg;\n      }\n    }\n\n    // Disabled state sets text to gray and nukes hover/tab effects\n    &.disabled > a {\n      color: @nav-disabled-link-color;\n\n      &:hover,\n      &:focus {\n        color: @nav-disabled-link-hover-color;\n        text-decoration: none;\n        background-color: transparent;\n        cursor: not-allowed;\n      }\n    }\n  }\n\n  // Open dropdowns\n  .open > a {\n    &,\n    &:hover,\n    &:focus {\n      background-color: @nav-link-hover-bg;\n      border-color: @link-color;\n    }\n  }\n\n  // Nav dividers (deprecated with v3.0.1)\n  //\n  // This should have been removed in v3 with the dropping of `.nav-list`, but\n  // we missed it. We don't currently support this anywhere, but in the interest\n  // of maintaining backward compatibility in case you use it, it's deprecated.\n  .nav-divider {\n    .nav-divider();\n  }\n\n  // Prevent IE8 from misplacing imgs\n  //\n  // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n  > li > a > img {\n    max-width: none;\n  }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n  border-bottom: 1px solid @nav-tabs-border-color;\n  > li {\n    float: left;\n    // Make the list-items overlay the bottom border\n    margin-bottom: -1px;\n\n    // Actual tabs (as links)\n    > a {\n      margin-right: 2px;\n      line-height: @line-height-base;\n      border: 1px solid transparent;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n      &:hover {\n        border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n      }\n    }\n\n    // Active state, and its :hover to override normal :hover\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @nav-tabs-active-link-hover-color;\n        background-color: @nav-tabs-active-link-hover-bg;\n        border: 1px solid @nav-tabs-active-link-hover-border-color;\n        border-bottom-color: transparent;\n        cursor: default;\n      }\n    }\n  }\n  // pulling this in mainly for less shorthand\n  &.nav-justified {\n    .nav-justified();\n    .nav-tabs-justified();\n  }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n  > li {\n    float: left;\n\n    // Links rendered as pills\n    > a {\n      border-radius: @nav-pills-border-radius;\n    }\n    + li {\n      margin-left: 2px;\n    }\n\n    // Active state\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @nav-pills-active-link-hover-color;\n        background-color: @nav-pills-active-link-hover-bg;\n      }\n    }\n  }\n}\n\n\n// Stacked pills\n.nav-stacked {\n  > li {\n    float: none;\n    + li {\n      margin-top: 2px;\n      margin-left: 0; // no need for this gap between nav items\n    }\n  }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n  width: 100%;\n\n  > li {\n    float: none;\n     > a {\n      text-align: center;\n      margin-bottom: 5px;\n    }\n  }\n\n  > .dropdown .dropdown-menu {\n    top: auto;\n    left: auto;\n  }\n\n  @media (min-width: @screen-sm-min) {\n    > li {\n      display: table-cell;\n      width: 1%;\n      > a {\n        margin-bottom: 0;\n      }\n    }\n  }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n  border-bottom: 0;\n\n  > li > a {\n    // Override margin from .nav-tabs\n    margin-right: 0;\n    border-radius: @border-radius-base;\n  }\n\n  > .active > a,\n  > .active > a:hover,\n  > .active > a:focus {\n    border: 1px solid @nav-tabs-justified-link-border-color;\n  }\n\n  @media (min-width: @screen-sm-min) {\n    > li > a {\n      border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n    }\n    > .active > a,\n    > .active > a:hover,\n    > .active > a:focus {\n      border-bottom-color: @nav-tabs-justified-active-link-border-color;\n    }\n  }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n  > .tab-pane {\n    display: none;\n  }\n  > .active {\n    display: block;\n  }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n  // make dropdown border overlap tab border\n  margin-top: -1px;\n  // Remove the top rounded corners here since there is a hard edge above the menu\n  .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n  position: relative;\n  min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n  margin-bottom: @navbar-margin-bottom;\n  border: 1px solid transparent;\n\n  // Prevent floats from breaking the navbar\n  &:extend(.clearfix all);\n\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: @navbar-border-radius;\n  }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n  &:extend(.clearfix all);\n\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n  }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n  max-height: @navbar-collapse-max-height;\n  overflow-x: visible;\n  padding-right: @navbar-padding-horizontal;\n  padding-left:  @navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n  &:extend(.clearfix all);\n  -webkit-overflow-scrolling: touch;\n\n  &.in {\n    overflow-y: auto;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    width: auto;\n    border-top: 0;\n    box-shadow: none;\n\n    &.collapse {\n      display: block !important;\n      height: auto !important;\n      padding-bottom: 0; // Override default setting\n      overflow: visible !important;\n    }\n\n    &.in {\n      overflow-y: visible;\n    }\n\n    // Undo the collapse side padding for navbars with containers to ensure\n    // alignment of right-aligned contents.\n    .navbar-fixed-top &,\n    .navbar-static-top &,\n    .navbar-fixed-bottom & {\n      padding-left: 0;\n      padding-right: 0;\n    }\n  }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n  > .navbar-header,\n  > .navbar-collapse {\n    margin-right: -@navbar-padding-horizontal;\n    margin-left:  -@navbar-padding-horizontal;\n\n    @media (min-width: @grid-float-breakpoint) {\n      margin-right: 0;\n      margin-left:  0;\n    }\n  }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n  z-index: @zindex-navbar;\n  border-width: 0 0 1px;\n\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: @zindex-navbar-fixed;\n\n  // Undo the rounded corners\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0; // override .navbar defaults\n  border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n  float: left;\n  padding: @navbar-padding-vertical @navbar-padding-horizontal;\n  font-size: @font-size-large;\n  line-height: @line-height-computed;\n  height: @navbar-height;\n\n  &:hover,\n  &:focus {\n    text-decoration: none;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    .navbar > .container &,\n    .navbar > .container-fluid & {\n      margin-left: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n  position: relative;\n  float: right;\n  margin-right: @navbar-padding-horizontal;\n  padding: 9px 10px;\n  .navbar-vertical-align(34px);\n  background-color: transparent;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  border-radius: @border-radius-base;\n\n  // We remove the `outline` here, but later compensate by attaching `:hover`\n  // styles to `:focus`.\n  &:focus {\n    outline: none;\n  }\n\n  // Bars\n  .icon-bar {\n    display: block;\n    width: 22px;\n    height: 2px;\n    border-radius: 1px;\n  }\n  .icon-bar + .icon-bar {\n    margin-top: 4px;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    display: none;\n  }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n  margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n  > li > a {\n    padding-top:    10px;\n    padding-bottom: 10px;\n    line-height: @line-height-computed;\n  }\n\n  @media (max-width: @grid-float-breakpoint-max) {\n    // Dropdowns get custom display when collapsed\n    .open .dropdown-menu {\n      position: static;\n      float: none;\n      width: auto;\n      margin-top: 0;\n      background-color: transparent;\n      border: 0;\n      box-shadow: none;\n      > li > a,\n      .dropdown-header {\n        padding: 5px 15px 5px 25px;\n      }\n      > li > a {\n        line-height: @line-height-computed;\n        &:hover,\n        &:focus {\n          background-image: none;\n        }\n      }\n    }\n  }\n\n  // Uncollapse the nav\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n    margin: 0;\n\n    > li {\n      float: left;\n      > a {\n        padding-top:    @navbar-padding-vertical;\n        padding-bottom: @navbar-padding-vertical;\n      }\n    }\n\n    &.navbar-right:last-child {\n      margin-right: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-left  { .pull-left(); }\n  .navbar-right { .pull-right(); }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n  margin-left: -@navbar-padding-horizontal;\n  margin-right: -@navbar-padding-horizontal;\n  padding: 10px @navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n  .box-shadow(@shadow);\n\n  // Mixin behavior for optimum display\n  .form-inline();\n\n  .form-group {\n    @media (max-width: @grid-float-breakpoint-max) {\n      margin-bottom: 5px;\n    }\n  }\n\n  // Vertically center in expanded, horizontal navbar\n  .navbar-vertical-align(@input-height-base);\n\n  // Undo 100% width for pull classes\n  @media (min-width: @grid-float-breakpoint) {\n    width: auto;\n    border: 0;\n    margin-left: 0;\n    margin-right: 0;\n    padding-top: 0;\n    padding-bottom: 0;\n    .box-shadow(none);\n\n    // Outdent the form if last child to line up with content down the page\n    &.navbar-right:last-child {\n      margin-right: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n  .navbar-vertical-align(@input-height-base);\n\n  &.btn-sm {\n    .navbar-vertical-align(@input-height-small);\n  }\n  &.btn-xs {\n    .navbar-vertical-align(22);\n  }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n  .navbar-vertical-align(@line-height-computed);\n\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n    margin-left: @navbar-padding-horizontal;\n    margin-right: @navbar-padding-horizontal;\n\n    // Outdent the form if last child to line up with content down the page\n    &.navbar-right:last-child {\n      margin-right: 0;\n    }\n  }\n}\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n  background-color: @navbar-default-bg;\n  border-color: @navbar-default-border;\n\n  .navbar-brand {\n    color: @navbar-default-brand-color;\n    &:hover,\n    &:focus {\n      color: @navbar-default-brand-hover-color;\n      background-color: @navbar-default-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: @navbar-default-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: @navbar-default-link-color;\n\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-hover-color;\n        background-color: @navbar-default-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-active-color;\n        background-color: @navbar-default-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-disabled-color;\n        background-color: @navbar-default-link-disabled-bg;\n      }\n    }\n  }\n\n  .navbar-toggle {\n    border-color: @navbar-default-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: @navbar-default-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: @navbar-default-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: @navbar-default-border;\n  }\n\n  // Dropdown menu items\n  .navbar-nav {\n    // Remove background color from open dropdown\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: @navbar-default-link-active-bg;\n        color: @navbar-default-link-active-color;\n      }\n    }\n\n    @media (max-width: @grid-float-breakpoint-max) {\n      // Dropdowns get custom display when collapsed\n      .open .dropdown-menu {\n        > li > a {\n          color: @navbar-default-link-color;\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-hover-color;\n            background-color: @navbar-default-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-active-color;\n            background-color: @navbar-default-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-disabled-color;\n            background-color: @navbar-default-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n\n  // Links in navbars\n  //\n  // Add a class to ensure links outside the navbar nav are colored correctly.\n\n  .navbar-link {\n    color: @navbar-default-link-color;\n    &:hover {\n      color: @navbar-default-link-hover-color;\n    }\n  }\n\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n  background-color: @navbar-inverse-bg;\n  border-color: @navbar-inverse-border;\n\n  .navbar-brand {\n    color: @navbar-inverse-brand-color;\n    &:hover,\n    &:focus {\n      color: @navbar-inverse-brand-hover-color;\n      background-color: @navbar-inverse-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: @navbar-inverse-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: @navbar-inverse-link-color;\n\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-hover-color;\n        background-color: @navbar-inverse-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-active-color;\n        background-color: @navbar-inverse-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-disabled-color;\n        background-color: @navbar-inverse-link-disabled-bg;\n      }\n    }\n  }\n\n  // Darken the responsive nav toggle\n  .navbar-toggle {\n    border-color: @navbar-inverse-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: @navbar-inverse-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: @navbar-inverse-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: darken(@navbar-inverse-bg, 7%);\n  }\n\n  // Dropdowns\n  .navbar-nav {\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: @navbar-inverse-link-active-bg;\n        color: @navbar-inverse-link-active-color;\n      }\n    }\n\n    @media (max-width: @grid-float-breakpoint-max) {\n      // Dropdowns get custom display\n      .open .dropdown-menu {\n        > .dropdown-header {\n          border-color: @navbar-inverse-border;\n        }\n        .divider {\n          background-color: @navbar-inverse-border;\n        }\n        > li > a {\n          color: @navbar-inverse-link-color;\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-hover-color;\n            background-color: @navbar-inverse-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-active-color;\n            background-color: @navbar-inverse-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-disabled-color;\n            background-color: @navbar-inverse-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n  .navbar-link {\n    color: @navbar-inverse-link-color;\n    &:hover {\n      color: @navbar-inverse-link-hover-color;\n    }\n  }\n\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n  .clearfix();\n}\n.center-block {\n  .center-block();\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n  position: fixed;\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n  padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n  margin-bottom: @line-height-computed;\n  list-style: none;\n  background-color: @breadcrumb-bg;\n  border-radius: @border-radius-base;\n\n  > li {\n    display: inline-block;\n\n    + li:before {\n      content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n      padding: 0 5px;\n      color: @breadcrumb-color;\n    }\n  }\n\n  > .active {\n    color: @breadcrumb-active-color;\n  }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: @line-height-computed 0;\n  border-radius: @border-radius-base;\n\n  > li {\n    display: inline; // Remove list-style and block-level defaults\n    > a,\n    > span {\n      position: relative;\n      float: left; // Collapse white-space\n      padding: @padding-base-vertical @padding-base-horizontal;\n      line-height: @line-height-base;\n      text-decoration: none;\n      color: @pagination-color;\n      background-color: @pagination-bg;\n      border: 1px solid @pagination-border;\n      margin-left: -1px;\n    }\n    &:first-child {\n      > a,\n      > span {\n        margin-left: 0;\n        .border-left-radius(@border-radius-base);\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        .border-right-radius(@border-radius-base);\n      }\n    }\n  }\n\n  > li > a,\n  > li > span {\n    &:hover,\n    &:focus {\n      color: @pagination-hover-color;\n      background-color: @pagination-hover-bg;\n      border-color: @pagination-hover-border;\n    }\n  }\n\n  > .active > a,\n  > .active > span {\n    &,\n    &:hover,\n    &:focus {\n      z-index: 2;\n      color: @pagination-active-color;\n      background-color: @pagination-active-bg;\n      border-color: @pagination-active-border;\n      cursor: default;\n    }\n  }\n\n  > .disabled {\n    > span,\n    > span:hover,\n    > span:focus,\n    > a,\n    > a:hover,\n    > a:focus {\n      color: @pagination-disabled-color;\n      background-color: @pagination-disabled-bg;\n      border-color: @pagination-disabled-border;\n      cursor: not-allowed;\n    }\n  }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n  .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n  .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small);\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n  padding-left: 0;\n  margin: @line-height-computed 0;\n  list-style: none;\n  text-align: center;\n  &:extend(.clearfix all);\n  li {\n    display: inline;\n    > a,\n    > span {\n      display: inline-block;\n      padding: 5px 14px;\n      background-color: @pager-bg;\n      border: 1px solid @pager-border;\n      border-radius: @pager-border-radius;\n    }\n\n    > a:hover,\n    > a:focus {\n      text-decoration: none;\n      background-color: @pager-hover-bg;\n    }\n  }\n\n  .next {\n    > a,\n    > span {\n      float: right;\n    }\n  }\n\n  .previous {\n    > a,\n    > span {\n      float: left;\n    }\n  }\n\n  .disabled {\n    > a,\n    > a:hover,\n    > a:focus,\n    > span {\n      color: @pager-disabled-color;\n      background-color: @pager-bg;\n      cursor: not-allowed;\n    }\n  }\n\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: @label-color;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n\n  // Add hover effects, but only for links\n  &[href] {\n    &:hover,\n    &:focus {\n      color: @label-link-hover-color;\n      text-decoration: none;\n      cursor: pointer;\n    }\n  }\n\n  // Empty labels collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for labels in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n  .label-variant(@label-default-bg);\n}\n\n.label-primary {\n  .label-variant(@label-primary-bg);\n}\n\n.label-success {\n  .label-variant(@label-success-bg);\n}\n\n.label-info {\n  .label-variant(@label-info-bg);\n}\n\n.label-warning {\n  .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n  .label-variant(@label-danger-bg);\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base classes\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: @font-size-small;\n  font-weight: @badge-font-weight;\n  color: @badge-color;\n  line-height: @badge-line-height;\n  vertical-align: baseline;\n  white-space: nowrap;\n  text-align: center;\n  background-color: @badge-bg;\n  border-radius: @badge-border-radius;\n\n  // Empty badges collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for badges in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n  .btn-xs & {\n    top: 0;\n    padding: 1px 5px;\n  }\n}\n\n// Hover state, but only for links\na.badge {\n  &:hover,\n  &:focus {\n    color: @badge-link-hover-color;\n    text-decoration: none;\n    cursor: pointer;\n  }\n}\n\n// Account for counters in navs\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: @badge-active-color;\n  background-color: @badge-active-bg;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n  padding: @jumbotron-padding;\n  margin-bottom: @jumbotron-padding;\n  color: @jumbotron-color;\n  background-color: @jumbotron-bg;\n\n  h1,\n  .h1 {\n    color: @jumbotron-heading-color;\n  }\n  p {\n    margin-bottom: (@jumbotron-padding / 2);\n    font-size: @jumbotron-font-size;\n    font-weight: 200;\n  }\n\n  .container & {\n    border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n  }\n\n  .container {\n    max-width: 100%;\n  }\n\n  @media screen and (min-width: @screen-sm-min) {\n    padding-top:    (@jumbotron-padding * 1.6);\n    padding-bottom: (@jumbotron-padding * 1.6);\n\n    .container & {\n      padding-left:  (@jumbotron-padding * 2);\n      padding-right: (@jumbotron-padding * 2);\n    }\n\n    h1,\n    .h1 {\n      font-size: (@font-size-base * 4.5);\n    }\n  }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n  padding: @alert-padding;\n  margin-bottom: @line-height-computed;\n  border: 1px solid transparent;\n  border-radius: @alert-border-radius;\n\n  // Headings for larger alerts\n  h4 {\n    margin-top: 0;\n    // Specified for the h4 to prevent conflicts of changing @headings-color\n    color: inherit;\n  }\n  // Provide class for links that match alerts\n  .alert-link {\n    font-weight: @alert-link-font-weight;\n  }\n\n  // Improve alignment and spacing of inner content\n  > p,\n  > ul {\n    margin-bottom: 0;\n  }\n  > p + p {\n    margin-top: 5px;\n  }\n}\n\n// Dismissable alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable {\n padding-right: (@alert-padding + 20);\n\n  // Adjust close link position\n  .close {\n    position: relative;\n    top: -2px;\n    right: -21px;\n    color: inherit;\n  }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n  .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n.alert-info {\n  .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n.alert-warning {\n  .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n.alert-danger {\n  .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n  overflow: hidden;\n  height: @line-height-computed;\n  margin-bottom: @line-height-computed;\n  background-color: @progress-bg;\n  border-radius: @border-radius-base;\n  .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: @font-size-small;\n  line-height: @line-height-computed;\n  color: @progress-bar-color;\n  text-align: center;\n  background-color: @progress-bar-bg;\n  .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n  .transition(width .6s ease);\n}\n\n// Striped bars\n.progress-striped .progress-bar {\n  #gradient > .striped();\n  background-size: 40px 40px;\n}\n\n// Call animation for the active one\n.progress.active .progress-bar {\n  .animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n  .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n  .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n  .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n  .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Media objects\n// Source: http://stubbornella.org/content/?p=497\n// --------------------------------------------------\n\n\n// Common styles\n// -------------------------\n\n// Clear the floats\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n\n// Proper spacing between instances of .media\n.media,\n.media .media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n\n// For images and videos, set to block\n.media-object {\n  display: block;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n  margin: 0 0 5px;\n}\n\n\n// Media image alignment\n// -------------------------\n\n.media {\n  > .pull-left {\n    margin-right: 10px;\n  }\n  > .pull-right {\n    margin-left: 10px;\n  }\n}\n\n\n// Media list variation\n// -------------------------\n\n// Undo default ul/ol styles\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on 
        ,
          , or
          .\n\n.list-group {\n // No need to set list-style: none; since .list-group-item is block level\n margin-bottom: 20px;\n padding-left: 0; // reset padding because ul and ol\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n // Place the border on the list items and negative margin up for better styling\n margin-bottom: -1px;\n background-color: @list-group-bg;\n border: 1px solid @list-group-border;\n\n // Round the first and last items\n &:first-child {\n .border-top-radius(@list-group-border-radius);\n }\n &:last-child {\n margin-bottom: 0;\n .border-bottom-radius(@list-group-border-radius);\n }\n\n // Align badges within list items\n > .badge {\n float: right;\n }\n > .badge + .badge {\n margin-right: 5px;\n }\n}\n\n\n// Linked list items\n//\n// Use anchor elements instead of `li`s or `div`s to create linked list items.\n// Includes an extra `.active` modifier class for showing selected items.\n\na.list-group-item {\n color: @list-group-link-color;\n\n .list-group-item-heading {\n color: @list-group-link-heading-color;\n }\n\n // Hover state\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: @list-group-hover-bg;\n }\n\n // Active class on item itself, not parent\n &.active,\n &.active:hover,\n &.active:focus {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: @list-group-active-color;\n background-color: @list-group-active-bg;\n border-color: @list-group-active-border;\n\n // Force color to inherit for custom content\n .list-group-item-heading {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-active-text-color;\n }\n }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n.list-group-item-variant(success; @state-success-bg; @state-success-text);\n.list-group-item-variant(info; @state-info-bg; @state-info-text);\n.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);\n.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\n\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n","//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n margin-bottom: @line-height-computed;\n background-color: @panel-bg;\n border: 1px solid transparent;\n border-radius: @panel-border-radius;\n .box-shadow(0 1px 1px rgba(0,0,0,.05));\n}\n\n// Panel contents\n.panel-body {\n padding: @panel-body-padding;\n &:extend(.clearfix all);\n}\n\n// Optional heading\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n .border-top-radius((@panel-border-radius - 1));\n\n > .dropdown .dropdown-toggle {\n color: inherit;\n }\n}\n\n// Within heading, strip any `h*` tag of its default margins for spacing.\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: ceil((@font-size-base * 1.125));\n color: inherit;\n\n > a {\n color: inherit;\n }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n padding: 10px 15px;\n background-color: @panel-footer-bg;\n border-top: 1px solid @panel-inner-border;\n .border-bottom-radius((@panel-border-radius - 1));\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n > .list-group {\n margin-bottom: 0;\n\n .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n }\n\n // Add border top radius for first one\n &:first-child {\n .list-group-item:first-child {\n border-top: 0;\n .border-top-radius((@panel-border-radius - 1));\n }\n }\n // Add border bottom radius for last one\n &:last-child {\n .list-group-item:last-child {\n border-bottom: 0;\n .border-bottom-radius((@panel-border-radius - 1));\n }\n }\n }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n .list-group-item:first-child {\n border-top-width: 0;\n }\n}\n\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n > .table,\n > .table-responsive > .table {\n margin-bottom: 0;\n }\n // Add border top radius for first one\n > .table:first-child,\n > .table-responsive:first-child > .table:first-child {\n .border-top-radius((@panel-border-radius - 1));\n\n > thead:first-child,\n > tbody:first-child {\n > tr:first-child {\n td:first-child,\n th:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-top-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n // Add border bottom radius for last one\n > .table:last-child,\n > .table-responsive:last-child > .table:last-child {\n .border-bottom-radius((@panel-border-radius - 1));\n\n > tbody:last-child,\n > tfoot:last-child {\n > tr:last-child {\n td:first-child,\n th:first-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-bottom-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n > .panel-body + .table,\n > .panel-body + .table-responsive {\n border-top: 1px solid @table-border-color;\n }\n > .table > tbody:first-child > tr:first-child th,\n > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n }\n > .table-bordered,\n > .table-responsive > .table-bordered {\n border: 0;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n > thead,\n > tbody {\n > tr:first-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n > tbody,\n > tfoot {\n > tr:last-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n }\n > .table-responsive {\n border: 0;\n margin-bottom: 0;\n }\n}\n\n\n// Collapsable panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n margin-bottom: @line-height-computed;\n\n // Tighten up margin so it's only between panels\n .panel {\n margin-bottom: 0;\n border-radius: @panel-border-radius;\n overflow: hidden; // crop contents when collapsed\n + .panel {\n margin-top: 5px;\n }\n }\n\n .panel-heading {\n border-bottom: 0;\n + .panel-collapse .panel-body {\n border-top: 1px solid @panel-inner-border;\n }\n }\n .panel-footer {\n border-top: 0;\n + .panel-collapse .panel-body {\n border-bottom: 1px solid @panel-inner-border;\n }\n }\n}\n\n\n// Contextual variations\n.panel-default {\n .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);\n}\n.panel-primary {\n .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);\n}\n.panel-success {\n .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);\n}\n.panel-info {\n .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);\n}\n.panel-warning {\n .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);\n}\n.panel-danger {\n .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);\n}\n","//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: @well-bg;\n border: 1px solid @well-border;\n border-radius: @border-radius-base;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));\n blockquote {\n border-color: #ddd;\n border-color: rgba(0,0,0,.15);\n }\n}\n\n// Sizes\n.well-lg {\n padding: 24px;\n border-radius: @border-radius-large;\n}\n.well-sm {\n padding: 9px;\n border-radius: @border-radius-small;\n}\n","//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n float: right;\n font-size: (@font-size-base * 1.5);\n font-weight: @close-font-weight;\n line-height: 1;\n color: @close-color;\n text-shadow: @close-text-shadow;\n .opacity(.2);\n\n &:hover,\n &:focus {\n color: @close-color;\n text-decoration: none;\n cursor: pointer;\n .opacity(.5);\n }\n\n // Additional properties for button version\n // iOS requires the button element instead of an anchor tag.\n // If you want the anchor version, it requires `href=\"#\"`.\n button& {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n }\n}\n","//\n// Modals\n// --------------------------------------------------\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n display: none;\n overflow: auto;\n overflow-y: scroll;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal;\n -webkit-overflow-scrolling: touch;\n\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n\n // When fading in the modal, animate it to slide down\n &.fade .modal-dialog {\n .translate(0, -25%);\n .transition-transform(~\"0.3s ease-out\");\n }\n &.in .modal-dialog { .translate(0, 0)}\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n background-color: @modal-content-bg;\n border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n border: 1px solid @modal-content-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 3px 9px rgba(0,0,0,.5));\n background-clip: padding-box;\n // Remove focus outline from opened modal\n outline: none;\n}\n\n// Modal background\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal-background;\n background-color: @modal-backdrop-bg;\n // Fade for backdrop\n &.fade { .opacity(0); }\n &.in { .opacity(@modal-backdrop-opacity); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n padding: @modal-title-padding;\n border-bottom: 1px solid @modal-header-border-color;\n min-height: (@modal-title-padding + @modal-title-line-height);\n}\n// Close icon\n.modal-header .close {\n margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n margin: 0;\n line-height: @modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n padding: @modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n margin-top: 15px;\n padding: (@modal-inner-padding - 1) @modal-inner-padding @modal-inner-padding;\n text-align: right; // right align buttons\n border-top: 1px solid @modal-footer-border-color;\n &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons\n\n // Properly space out buttons\n .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n }\n // but override that for button groups\n .btn-group .btn + .btn {\n margin-left: -1px;\n }\n // and override it for block buttons as well\n .btn-block + .btn-block {\n margin-left: 0;\n }\n}\n\n// Scale up the modal\n@media (min-width: @screen-sm-min) {\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n width: @modal-md;\n margin: 30px auto;\n }\n .modal-content {\n .box-shadow(0 5px 15px rgba(0,0,0,.5));\n }\n\n // Modal sizes\n .modal-sm { width: @modal-sm; }\n}\n\n@media (min-width: @screen-md-min) {\n .modal-lg { width: @modal-lg; }\n}\n","//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n position: absolute;\n z-index: @zindex-tooltip;\n display: block;\n visibility: visible;\n font-size: @font-size-small;\n line-height: 1.4;\n .opacity(0);\n\n &.in { .opacity(@tooltip-opacity); }\n &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; }\n &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; }\n &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; }\n &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: @tooltip-max-width;\n padding: 3px 8px;\n color: @tooltip-color;\n text-align: center;\n text-decoration: none;\n background-color: @tooltip-bg;\n border-radius: @border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip {\n &.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-left .tooltip-arrow {\n bottom: 0;\n left: @tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-right .tooltip-arrow {\n bottom: 0;\n right: @tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;\n border-right-color: @tooltip-arrow-color;\n }\n &.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-left-color: @tooltip-arrow-color;\n }\n &.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-left .tooltip-arrow {\n top: 0;\n left: @tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-right .tooltip-arrow {\n top: 0;\n right: @tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n}\n","//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: @zindex-popover;\n display: none;\n max-width: @popover-max-width;\n padding: 1px;\n text-align: left; // Reset given new insertion method\n background-color: @popover-bg;\n background-clip: padding-box;\n border: 1px solid @popover-fallback-border-color;\n border: 1px solid @popover-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 5px 10px rgba(0,0,0,.2));\n\n // Overrides for proper insertion\n white-space: normal;\n\n // Offset the popover to account for the popover arrow\n &.top { margin-top: -@popover-arrow-width; }\n &.right { margin-left: @popover-arrow-width; }\n &.bottom { margin-top: @popover-arrow-width; }\n &.left { margin-left: -@popover-arrow-width; }\n}\n\n.popover-title {\n margin: 0; // reset heading margin\n padding: 8px 14px;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 18px;\n background-color: @popover-title-bg;\n border-bottom: 1px solid darken(@popover-title-bg, 5%);\n border-radius: 5px 5px 0 0;\n}\n\n.popover-content {\n padding: 9px 14px;\n}\n\n// Arrows\n//\n// .arrow is outer, .arrow:after is inner\n\n.popover > .arrow {\n &,\n &:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n }\n}\n.popover > .arrow {\n border-width: @popover-arrow-outer-width;\n}\n.popover > .arrow:after {\n border-width: @popover-arrow-width;\n content: \"\";\n}\n\n.popover {\n &.top > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-top-color: @popover-arrow-outer-color;\n bottom: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n bottom: 1px;\n margin-left: -@popover-arrow-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-color;\n }\n }\n &.right > .arrow {\n top: 50%;\n left: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-right-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n left: 1px;\n bottom: -@popover-arrow-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-color;\n }\n }\n &.bottom > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-bottom-color: @popover-arrow-outer-color;\n top: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n top: 1px;\n margin-left: -@popover-arrow-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-color;\n }\n }\n\n &.left > .arrow {\n top: 50%;\n right: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-right-width: 0;\n border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-left-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: @popover-arrow-color;\n bottom: -@popover-arrow-width;\n }\n }\n\n}\n","//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: http://getbootstrap.com/getting-started/#browsers\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@-ms-viewport {\n width: device-width;\n}\n\n\n// Visibility utilities\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n .responsive-invisibility();\n}\n\n.visible-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-visibility();\n }\n}\n.visible-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-visibility();\n }\n}\n.visible-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-visibility();\n }\n}\n.visible-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-visibility();\n }\n}\n\n.hidden-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-invisibility();\n }\n}\n.hidden-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-invisibility();\n }\n}\n.hidden-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-invisibility();\n }\n}\n.hidden-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-invisibility();\n }\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n.visible-print {\n .responsive-invisibility();\n\n @media print {\n .responsive-visibility();\n }\n}\n\n.hidden-print {\n @media print {\n .responsive-invisibility();\n }\n}\n"]} -\ No newline at end of file -diff --git a/ui/bootstrap/css/bootstrap.min.css b/ui/bootstrap/css/bootstrap.min.css -new file mode 100644 -index 0000000..679272d ---- /dev/null -+++ b/ui/bootstrap/css/bootstrap.min.css -@@ -0,0 +1,7 @@ -+/*! -+ * Bootstrap v3.1.1 (http://getbootstrap.com) -+ * Copyright 2011-2014 Twitter, Inc. -+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) -+ */ -+ -+/*! normalize.css v3.0.0 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,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:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}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{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{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-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@media print{*{text-shadow:none!important;color:#000!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-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}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.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;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}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,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#999}h1,.h1,h2,.h2,h3,.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,.h4,h5,.h5,h6,.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:200;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-muted{color:#999}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}.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 p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#999}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}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;white-space:nowrap;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;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{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{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:0}.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:0}.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-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{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:0}.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:0}.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-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{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:0}.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:0}.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-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{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:0}.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:0}.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{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{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>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;overflow-x:scroll;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width: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;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=radio],input[type=checkbox]{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=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;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,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[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date]{line-height:34px}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:20px;margin-top:10px;margin-bottom:10px;padding-left:20px}.radio label,.checkbox label{display:inline;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.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}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.has-feedback .form-control-feedback{position:absolute;top:25px;right:0;display:block;width:34px;height:34px;line-height:34px;text-align:center}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{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;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{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;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{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;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.form-control-static{margin-bottom: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 .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{float:none;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-control-static{padding-top:7px}@media (min-width:768px){.form-horizontal .control-label{text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;border-color:#adadad}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{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:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{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:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{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:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#428bca;font-weight:400;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@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.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:"\2a"}.glyphicon-plus:before{content:"\2b"}.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"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{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;list-style:none;font-size:14px;background-color:#fff;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);background-clip:padding-box}.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:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#428bca}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#999}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.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-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-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-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>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right: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-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.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-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.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.33;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}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].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}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control: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=radio],.input-group-addon input[type=checkbox]{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:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-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:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-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:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{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{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.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:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.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:hover,.nav-tabs.nav-justified>.active>a:focus{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:hover,.nav-tabs.nav-justified>.active>a:focus{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:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.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{text-align:center;margin-bottom:5px}.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:hover,.nav-tabs-justified>.active>a:focus{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:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-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{max-height:340px;overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;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-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{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-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{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;padding:15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;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;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{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-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 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);margin-top:8px;margin-bottom:8px}@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 .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{float:none;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{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-left:15px;margin-right:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{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:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{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:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{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:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@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:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.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{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.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;line-height:1.42857143;text-decoration:none;color:#428bca;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.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:hover,.pager li>a:focus{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:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;background-color:#fff;cursor:not-allowed}.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}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#999}.label-default[href]:hover,.label-default[href]:focus{background-color:gray}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#999;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding: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}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-left:60px;padding-right: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:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.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{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.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}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;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:#428bca;-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;transition:width .6s ease}.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: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-size:40px 40px}.progress.active .progress-bar{-webkit-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: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: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: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: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,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.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-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}a.list-group-item.active .list-group-item-heading,a.list-group-item.active:hover .list-group-item-heading,a.list-group-item.active:focus .list-group-item-heading{color:inherit}a.list-group-item.active .list-group-item-text,a.list-group-item.active:hover .list-group-item-text,a.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{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-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>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{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.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 td:first-child,.panel>.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 td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th: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 th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.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 td:last-child,.panel>.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 td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th: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 th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.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 td:first-child,.panel>.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 td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.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 td:last-child,.panel>.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 td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.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{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px;overflow:hidden}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.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-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.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-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-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-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-footer+.panel-collapse .panel-body{border-bottom-color:#ebccd1}.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;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:auto;overflow-y:scroll;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:20px}.modal-footer{margin-top:15px;padding:19px 20px 20px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@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:1030;display:block;visibility:visible;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;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{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;right: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;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#fff;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);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:400;line-height:18px;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{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;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{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.5) 0),color-stop(rgba(0,0,0,.0001) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.0001) 0),color-stop(rgba(0,0,0,.5) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.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%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;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-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right: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;visibility:hidden!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!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}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}@media print{.hidden-print{display:none!important}} -\ No newline at end of file -diff --git a/ui/bootstrap/fonts/glyphicons-halflings-regular.eot b/ui/bootstrap/fonts/glyphicons-halflings-regular.eot -new file mode 100644 -index 0000000..4a4ca86 -Binary files /dev/null and b/ui/bootstrap/fonts/glyphicons-halflings-regular.eot differ -diff --git a/ui/bootstrap/fonts/glyphicons-halflings-regular.svg b/ui/bootstrap/fonts/glyphicons-halflings-regular.svg -new file mode 100644 -index 0000000..e3e2dc7 ---- /dev/null -+++ b/ui/bootstrap/fonts/glyphicons-halflings-regular.svg -@@ -0,0 +1,229 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -\ No newline at end of file -diff --git a/ui/bootstrap/fonts/glyphicons-halflings-regular.ttf b/ui/bootstrap/fonts/glyphicons-halflings-regular.ttf -new file mode 100644 -index 0000000..67fa00b -Binary files /dev/null and b/ui/bootstrap/fonts/glyphicons-halflings-regular.ttf differ -diff --git a/ui/bootstrap/fonts/glyphicons-halflings-regular.woff b/ui/bootstrap/fonts/glyphicons-halflings-regular.woff -new file mode 100644 -index 0000000..8c54182 -Binary files /dev/null and b/ui/bootstrap/fonts/glyphicons-halflings-regular.woff differ -diff --git a/ui/bootstrap/js/bootstrap.js b/ui/bootstrap/js/bootstrap.js -new file mode 100644 -index 0000000..8ae571b ---- /dev/null -+++ b/ui/bootstrap/js/bootstrap.js -@@ -0,0 +1,1951 @@ -+/*! -+ * Bootstrap v3.1.1 (http://getbootstrap.com) -+ * Copyright 2011-2014 Twitter, Inc. -+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) -+ */ -+ -+if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript requires jQuery') } -+ -+/* ======================================================================== -+ * Bootstrap: transition.js v3.1.1 -+ * http://getbootstrap.com/javascript/#transitions -+ * ======================================================================== -+ * Copyright 2011-2014 Twitter, Inc. -+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) -+ * ======================================================================== */ -+ -+ -++function ($) { -+ 'use strict'; -+ -+ // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) -+ // ============================================================ -+ -+ function transitionEnd() { -+ var el = document.createElement('bootstrap') -+ -+ var transEndEventNames = { -+ 'WebkitTransition' : 'webkitTransitionEnd', -+ 'MozTransition' : 'transitionend', -+ 'OTransition' : 'oTransitionEnd otransitionend', -+ 'transition' : 'transitionend' -+ } -+ -+ for (var name in transEndEventNames) { -+ if (el.style[name] !== undefined) { -+ return { end: transEndEventNames[name] } -+ } -+ } -+ -+ return false // explicit for ie8 ( ._.) -+ } -+ -+ // http://blog.alexmaccaw.com/css-transitions -+ $.fn.emulateTransitionEnd = function (duration) { -+ var called = false, $el = this -+ $(this).one($.support.transition.end, function () { called = true }) -+ var callback = function () { if (!called) $($el).trigger($.support.transition.end) } -+ setTimeout(callback, duration) -+ return this -+ } -+ -+ $(function () { -+ $.support.transition = transitionEnd() -+ }) -+ -+}(jQuery); -+ -+/* ======================================================================== -+ * Bootstrap: alert.js v3.1.1 -+ * http://getbootstrap.com/javascript/#alerts -+ * ======================================================================== -+ * Copyright 2011-2014 Twitter, Inc. -+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) -+ * ======================================================================== */ -+ -+ -++function ($) { -+ 'use strict'; -+ -+ // ALERT CLASS DEFINITION -+ // ====================== -+ -+ var dismiss = '[data-dismiss="alert"]' -+ var Alert = function (el) { -+ $(el).on('click', dismiss, this.close) -+ } -+ -+ Alert.prototype.close = function (e) { -+ var $this = $(this) -+ var selector = $this.attr('data-target') -+ -+ if (!selector) { -+ selector = $this.attr('href') -+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 -+ } -+ -+ var $parent = $(selector) -+ -+ if (e) e.preventDefault() -+ -+ if (!$parent.length) { -+ $parent = $this.hasClass('alert') ? $this : $this.parent() -+ } -+ -+ $parent.trigger(e = $.Event('close.bs.alert')) -+ -+ if (e.isDefaultPrevented()) return -+ -+ $parent.removeClass('in') -+ -+ function removeElement() { -+ $parent.trigger('closed.bs.alert').remove() -+ } -+ -+ $.support.transition && $parent.hasClass('fade') ? -+ $parent -+ .one($.support.transition.end, removeElement) -+ .emulateTransitionEnd(150) : -+ removeElement() -+ } -+ -+ -+ // ALERT PLUGIN DEFINITION -+ // ======================= -+ -+ var old = $.fn.alert -+ -+ $.fn.alert = function (option) { -+ return this.each(function () { -+ var $this = $(this) -+ var data = $this.data('bs.alert') -+ -+ if (!data) $this.data('bs.alert', (data = new Alert(this))) -+ if (typeof option == 'string') data[option].call($this) -+ }) -+ } -+ -+ $.fn.alert.Constructor = Alert -+ -+ -+ // ALERT NO CONFLICT -+ // ================= -+ -+ $.fn.alert.noConflict = function () { -+ $.fn.alert = old -+ return this -+ } -+ -+ -+ // ALERT DATA-API -+ // ============== -+ -+ $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) -+ -+}(jQuery); -+ -+/* ======================================================================== -+ * Bootstrap: button.js v3.1.1 -+ * http://getbootstrap.com/javascript/#buttons -+ * ======================================================================== -+ * Copyright 2011-2014 Twitter, Inc. -+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) -+ * ======================================================================== */ -+ -+ -++function ($) { -+ 'use strict'; -+ -+ // BUTTON PUBLIC CLASS DEFINITION -+ // ============================== -+ -+ var Button = function (element, options) { -+ this.$element = $(element) -+ this.options = $.extend({}, Button.DEFAULTS, options) -+ this.isLoading = false -+ } -+ -+ Button.DEFAULTS = { -+ loadingText: 'loading...' -+ } -+ -+ Button.prototype.setState = function (state) { -+ var d = 'disabled' -+ var $el = this.$element -+ var val = $el.is('input') ? 'val' : 'html' -+ var data = $el.data() -+ -+ state = state + 'Text' -+ -+ if (!data.resetText) $el.data('resetText', $el[val]()) -+ -+ $el[val](data[state] || this.options[state]) -+ -+ // push to event loop to allow forms to submit -+ setTimeout($.proxy(function () { -+ if (state == 'loadingText') { -+ this.isLoading = true -+ $el.addClass(d).attr(d, d) -+ } else if (this.isLoading) { -+ this.isLoading = false -+ $el.removeClass(d).removeAttr(d) -+ } -+ }, this), 0) -+ } -+ -+ Button.prototype.toggle = function () { -+ var changed = true -+ var $parent = this.$element.closest('[data-toggle="buttons"]') -+ -+ if ($parent.length) { -+ var $input = this.$element.find('input') -+ if ($input.prop('type') == 'radio') { -+ if ($input.prop('checked') && this.$element.hasClass('active')) changed = false -+ else $parent.find('.active').removeClass('active') -+ } -+ if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change') -+ } -+ -+ if (changed) this.$element.toggleClass('active') -+ } -+ -+ -+ // BUTTON PLUGIN DEFINITION -+ // ======================== -+ -+ var old = $.fn.button -+ -+ $.fn.button = function (option) { -+ return this.each(function () { -+ var $this = $(this) -+ var data = $this.data('bs.button') -+ var options = typeof option == 'object' && option -+ -+ if (!data) $this.data('bs.button', (data = new Button(this, options))) -+ -+ if (option == 'toggle') data.toggle() -+ else if (option) data.setState(option) -+ }) -+ } -+ -+ $.fn.button.Constructor = Button -+ -+ -+ // BUTTON NO CONFLICT -+ // ================== -+ -+ $.fn.button.noConflict = function () { -+ $.fn.button = old -+ return this -+ } -+ -+ -+ // BUTTON DATA-API -+ // =============== -+ -+ $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) { -+ var $btn = $(e.target) -+ if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') -+ $btn.button('toggle') -+ e.preventDefault() -+ }) -+ -+}(jQuery); -+ -+/* ======================================================================== -+ * Bootstrap: carousel.js v3.1.1 -+ * http://getbootstrap.com/javascript/#carousel -+ * ======================================================================== -+ * Copyright 2011-2014 Twitter, Inc. -+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) -+ * ======================================================================== */ -+ -+ -++function ($) { -+ 'use strict'; -+ -+ // CAROUSEL CLASS DEFINITION -+ // ========================= -+ -+ var Carousel = function (element, options) { -+ this.$element = $(element) -+ this.$indicators = this.$element.find('.carousel-indicators') -+ this.options = options -+ this.paused = -+ this.sliding = -+ this.interval = -+ this.$active = -+ this.$items = null -+ -+ this.options.pause == 'hover' && this.$element -+ .on('mouseenter', $.proxy(this.pause, this)) -+ .on('mouseleave', $.proxy(this.cycle, this)) -+ } -+ -+ Carousel.DEFAULTS = { -+ interval: 5000, -+ pause: 'hover', -+ wrap: true -+ } -+ -+ Carousel.prototype.cycle = function (e) { -+ e || (this.paused = false) -+ -+ this.interval && clearInterval(this.interval) -+ -+ this.options.interval -+ && !this.paused -+ && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) -+ -+ return this -+ } -+ -+ Carousel.prototype.getActiveIndex = function () { -+ this.$active = this.$element.find('.item.active') -+ this.$items = this.$active.parent().children() -+ -+ return this.$items.index(this.$active) -+ } -+ -+ Carousel.prototype.to = function (pos) { -+ var that = this -+ var activeIndex = this.getActiveIndex() -+ -+ if (pos > (this.$items.length - 1) || pos < 0) return -+ -+ if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) -+ if (activeIndex == pos) return this.pause().cycle() -+ -+ return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) -+ } -+ -+ Carousel.prototype.pause = function (e) { -+ e || (this.paused = true) -+ -+ if (this.$element.find('.next, .prev').length && $.support.transition) { -+ this.$element.trigger($.support.transition.end) -+ this.cycle(true) -+ } -+ -+ this.interval = clearInterval(this.interval) -+ -+ return this -+ } -+ -+ Carousel.prototype.next = function () { -+ if (this.sliding) return -+ return this.slide('next') -+ } -+ -+ Carousel.prototype.prev = function () { -+ if (this.sliding) return -+ return this.slide('prev') -+ } -+ -+ Carousel.prototype.slide = function (type, next) { -+ var $active = this.$element.find('.item.active') -+ var $next = next || $active[type]() -+ var isCycling = this.interval -+ var direction = type == 'next' ? 'left' : 'right' -+ var fallback = type == 'next' ? 'first' : 'last' -+ var that = this -+ -+ if (!$next.length) { -+ if (!this.options.wrap) return -+ $next = this.$element.find('.item')[fallback]() -+ } -+ -+ if ($next.hasClass('active')) return this.sliding = false -+ -+ var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction }) -+ this.$element.trigger(e) -+ if (e.isDefaultPrevented()) return -+ -+ this.sliding = true -+ -+ isCycling && this.pause() -+ -+ if (this.$indicators.length) { -+ this.$indicators.find('.active').removeClass('active') -+ this.$element.one('slid.bs.carousel', function () { -+ var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) -+ $nextIndicator && $nextIndicator.addClass('active') -+ }) -+ } -+ -+ if ($.support.transition && this.$element.hasClass('slide')) { -+ $next.addClass(type) -+ $next[0].offsetWidth // force reflow -+ $active.addClass(direction) -+ $next.addClass(direction) -+ $active -+ .one($.support.transition.end, function () { -+ $next.removeClass([type, direction].join(' ')).addClass('active') -+ $active.removeClass(['active', direction].join(' ')) -+ that.sliding = false -+ setTimeout(function () { that.$element.trigger('slid.bs.carousel') }, 0) -+ }) -+ .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000) -+ } else { -+ $active.removeClass('active') -+ $next.addClass('active') -+ this.sliding = false -+ this.$element.trigger('slid.bs.carousel') -+ } -+ -+ isCycling && this.cycle() -+ -+ return this -+ } -+ -+ -+ // CAROUSEL PLUGIN DEFINITION -+ // ========================== -+ -+ var old = $.fn.carousel -+ -+ $.fn.carousel = function (option) { -+ return this.each(function () { -+ var $this = $(this) -+ var data = $this.data('bs.carousel') -+ var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) -+ var action = typeof option == 'string' ? option : options.slide -+ -+ if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) -+ if (typeof option == 'number') data.to(option) -+ else if (action) data[action]() -+ else if (options.interval) data.pause().cycle() -+ }) -+ } -+ -+ $.fn.carousel.Constructor = Carousel -+ -+ -+ // CAROUSEL NO CONFLICT -+ // ==================== -+ -+ $.fn.carousel.noConflict = function () { -+ $.fn.carousel = old -+ return this -+ } -+ -+ -+ // CAROUSEL DATA-API -+ // ================= -+ -+ $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { -+ var $this = $(this), href -+ var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 -+ var options = $.extend({}, $target.data(), $this.data()) -+ var slideIndex = $this.attr('data-slide-to') -+ if (slideIndex) options.interval = false -+ -+ $target.carousel(options) -+ -+ if (slideIndex = $this.attr('data-slide-to')) { -+ $target.data('bs.carousel').to(slideIndex) -+ } -+ -+ e.preventDefault() -+ }) -+ -+ $(window).on('load', function () { -+ $('[data-ride="carousel"]').each(function () { -+ var $carousel = $(this) -+ $carousel.carousel($carousel.data()) -+ }) -+ }) -+ -+}(jQuery); -+ -+/* ======================================================================== -+ * Bootstrap: collapse.js v3.1.1 -+ * http://getbootstrap.com/javascript/#collapse -+ * ======================================================================== -+ * Copyright 2011-2014 Twitter, Inc. -+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) -+ * ======================================================================== */ -+ -+ -++function ($) { -+ 'use strict'; -+ -+ // COLLAPSE PUBLIC CLASS DEFINITION -+ // ================================ -+ -+ var Collapse = function (element, options) { -+ this.$element = $(element) -+ this.options = $.extend({}, Collapse.DEFAULTS, options) -+ this.transitioning = null -+ -+ if (this.options.parent) this.$parent = $(this.options.parent) -+ if (this.options.toggle) this.toggle() -+ } -+ -+ Collapse.DEFAULTS = { -+ toggle: true -+ } -+ -+ Collapse.prototype.dimension = function () { -+ var hasWidth = this.$element.hasClass('width') -+ return hasWidth ? 'width' : 'height' -+ } -+ -+ Collapse.prototype.show = function () { -+ if (this.transitioning || this.$element.hasClass('in')) return -+ -+ var startEvent = $.Event('show.bs.collapse') -+ this.$element.trigger(startEvent) -+ if (startEvent.isDefaultPrevented()) return -+ -+ var actives = this.$parent && this.$parent.find('> .panel > .in') -+ -+ if (actives && actives.length) { -+ var hasData = actives.data('bs.collapse') -+ if (hasData && hasData.transitioning) return -+ actives.collapse('hide') -+ hasData || actives.data('bs.collapse', null) -+ } -+ -+ var dimension = this.dimension() -+ -+ this.$element -+ .removeClass('collapse') -+ .addClass('collapsing') -+ [dimension](0) -+ -+ this.transitioning = 1 -+ -+ var complete = function () { -+ this.$element -+ .removeClass('collapsing') -+ .addClass('collapse in') -+ [dimension]('auto') -+ this.transitioning = 0 -+ this.$element.trigger('shown.bs.collapse') -+ } -+ -+ if (!$.support.transition) return complete.call(this) -+ -+ var scrollSize = $.camelCase(['scroll', dimension].join('-')) -+ -+ this.$element -+ .one($.support.transition.end, $.proxy(complete, this)) -+ .emulateTransitionEnd(350) -+ [dimension](this.$element[0][scrollSize]) -+ } -+ -+ Collapse.prototype.hide = function () { -+ if (this.transitioning || !this.$element.hasClass('in')) return -+ -+ var startEvent = $.Event('hide.bs.collapse') -+ this.$element.trigger(startEvent) -+ if (startEvent.isDefaultPrevented()) return -+ -+ var dimension = this.dimension() -+ -+ this.$element -+ [dimension](this.$element[dimension]()) -+ [0].offsetHeight -+ -+ this.$element -+ .addClass('collapsing') -+ .removeClass('collapse') -+ .removeClass('in') -+ -+ this.transitioning = 1 -+ -+ var complete = function () { -+ this.transitioning = 0 -+ this.$element -+ .trigger('hidden.bs.collapse') -+ .removeClass('collapsing') -+ .addClass('collapse') -+ } -+ -+ if (!$.support.transition) return complete.call(this) -+ -+ this.$element -+ [dimension](0) -+ .one($.support.transition.end, $.proxy(complete, this)) -+ .emulateTransitionEnd(350) -+ } -+ -+ Collapse.prototype.toggle = function () { -+ this[this.$element.hasClass('in') ? 'hide' : 'show']() -+ } -+ -+ -+ // COLLAPSE PLUGIN DEFINITION -+ // ========================== -+ -+ var old = $.fn.collapse -+ -+ $.fn.collapse = function (option) { -+ return this.each(function () { -+ var $this = $(this) -+ var data = $this.data('bs.collapse') -+ var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) -+ -+ if (!data && options.toggle && option == 'show') option = !option -+ if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) -+ if (typeof option == 'string') data[option]() -+ }) -+ } -+ -+ $.fn.collapse.Constructor = Collapse -+ -+ -+ // COLLAPSE NO CONFLICT -+ // ==================== -+ -+ $.fn.collapse.noConflict = function () { -+ $.fn.collapse = old -+ return this -+ } -+ -+ -+ // COLLAPSE DATA-API -+ // ================= -+ -+ $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) { -+ var $this = $(this), href -+ var target = $this.attr('data-target') -+ || e.preventDefault() -+ || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 -+ var $target = $(target) -+ var data = $target.data('bs.collapse') -+ var option = data ? 'toggle' : $this.data() -+ var parent = $this.attr('data-parent') -+ var $parent = parent && $(parent) -+ -+ if (!data || !data.transitioning) { -+ if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed') -+ $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') -+ } -+ -+ $target.collapse(option) -+ }) -+ -+}(jQuery); -+ -+/* ======================================================================== -+ * Bootstrap: dropdown.js v3.1.1 -+ * http://getbootstrap.com/javascript/#dropdowns -+ * ======================================================================== -+ * Copyright 2011-2014 Twitter, Inc. -+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) -+ * ======================================================================== */ -+ -+ -++function ($) { -+ 'use strict'; -+ -+ // DROPDOWN CLASS DEFINITION -+ // ========================= -+ -+ var backdrop = '.dropdown-backdrop' -+ var toggle = '[data-toggle=dropdown]' -+ var Dropdown = function (element) { -+ $(element).on('click.bs.dropdown', this.toggle) -+ } -+ -+ Dropdown.prototype.toggle = function (e) { -+ var $this = $(this) -+ -+ if ($this.is('.disabled, :disabled')) return -+ -+ var $parent = getParent($this) -+ var isActive = $parent.hasClass('open') -+ -+ clearMenus() -+ -+ if (!isActive) { -+ if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { -+ // if mobile we use a backdrop because click events don't delegate -+ $('
      -+
      -+ -+ -+ -+ -+

      -+ {% include "footer.html" %} -+ -+ -\ No newline at end of file -diff --git a/ui/editpost.html b/ui/editpost.html -new file mode 100644 -index 0000000..643f706 ---- /dev/null -+++ b/ui/editpost.html -@@ -0,0 +1,74 @@ -+ -+ -+ -+ -+ -+ -+ Edit Post -+ -+ -+ {% include "header.html" %} -+





      -+ -+

      Malaria : infoHub

      -+ -+
      -+
      -+

      Edit Post

      -+
      -+ -+ -+
      -+ -+
      -+
      -+
      -+
      -+

      Title

      -+
      -+
      -+ -+
      -+
      -+
      -+
      -+
      -+
      -+

      Descrpition

      -+
      -+
      -+ -+ -+
      -+
      -+
      -+ -+
      -+
      -+
      -+
      -+ -+
      -+
      -+
      -+
      -+
      -+
      -+ -+ -+ -+ -+ -+ -+ -+ -+

      -+ {% include "footer.html" %} -+ -+ -+ -\ No newline at end of file -diff --git a/ui/footer.html b/ui/footer.html -new file mode 100644 -index 0000000..c6738ed ---- /dev/null -+++ b/ui/footer.html -@@ -0,0 +1,65 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+
      -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+

      ©2014 PeaceCrops

      -+ -+ Return to Top -+
      -\ No newline at end of file -diff --git a/ui/header.html b/ui/header.html -new file mode 100644 -index 0000000..a0b464f ---- /dev/null -+++ b/ui/header.html -@@ -0,0 +1,45 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -\ No newline at end of file -diff --git a/ui/index.html b/ui/index.html -new file mode 100644 -index 0000000..5c0209b ---- /dev/null -+++ b/ui/index.html -@@ -0,0 +1,44 @@ -+ -+ -+ -+ -+ -+ -+ Welcome ! -+ -+ -+ -+ {% include "header.html" %} -+





      -+ -+
      -+ -+
      -+
      -+
      -+

      Log in

      -+
      -+

      Username :

      -+ -+

      Password :

      -+ -+

      -+ -+
      -+

      -+
      -+ -+
      -+ -+

      -+ {% include "footer.html" %} -+ -+ -+ -+ -+ -diff --git a/ui/index.html~ b/ui/index.html~ -new file mode 100644 -index 0000000..933c11c ---- /dev/null -+++ b/ui/index.html~ -@@ -0,0 +1,9 @@ -+ -+ -+ Welcome ! Dashboard -+ -+ -+

      Yes Vaibhavi, you have done it

      -+ -+ -+ -diff --git a/ui/malaria.html b/ui/malaria.html -new file mode 100644 -index 0000000..3556ec0 ---- /dev/null -+++ b/ui/malaria.html -@@ -0,0 +1,59 @@ -+ -+ -+ -+ -+ -+ -+ -+ Malaria | infoHub -+ -+ -+ {% include "header.html" %} -+





      -+

      Malaria : infoHub

      -+
      -+

      -+ -+ -+ -+ {%if all_posts|length ==0 %} -+

      There are No Posts right now.











      -+ {% else %} -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ {% for post in all_posts %} -+ -+ -+ -+ {% endfor %} -+ -+ -+ -+ -+

      Post

      Action

      {{post.title_post}}     -+
      -+ {% endif %} -+ -+ -+
      -+ -+

      -+ {% include "footer.html" %} -+ -+ -+ -+ -diff --git a/ui/newpost.html b/ui/newpost.html -new file mode 100644 -index 0000000..1a09c6a ---- /dev/null -+++ b/ui/newpost.html -@@ -0,0 +1,68 @@ -+ -+ -+ -+ -+ -+ Add New Post -+ -+ -+ {% include "header.html" %} -+





      -+

      Malaria : infoHub

      -+ -+
      -+
      -+

      New Post

      -+
      -+ -+
      -+ -+
      -+
      -+
      -+
      -+

      Title

      -+
      -+
      -+ -+
      -+
      -+
      -+
      -+
      -+
      -+

      Descrpition

      -+
      -+
      -+ -+ -+
      -+
      -+
      -+ -+
      -+
      -+
      -+
      -+ -+
      -+
      -+
      -+
      -+
      -+
      -+ -+ -+ -+ -+ -+


      -+ {% include "footer.html" %} -+ -+ -+ -\ No newline at end of file -diff --git a/ui/notice.html b/ui/notice.html -new file mode 100644 -index 0000000..d0fccd8 ---- /dev/null -+++ b/ui/notice.html -@@ -0,0 +1,23 @@ -+ -+ -+ -+ -+ -+ Notice -+ -+ -+ {% include "header.html" %} -+







      -+

      {{text}}

      -+

      {{text1}}

      -+












      -+ {% include "footer.html" %} -+ -+ -+ -+ -diff --git a/ui/peacetrack.html b/ui/peacetrack.html -new file mode 100644 -index 0000000..f561a87 ---- /dev/null -+++ b/ui/peacetrack.html -@@ -0,0 +1,22 @@ -+ -+ -+ -+ -+ -+ PeaceTrack -+ -+ -+ {% include "header.html" %} -+





      -+

      Here the information about peacetrack would be shown

      -+ -+

















      -+ {% include "footer.html" %} -+ -+ -+ -diff --git a/ui/profile.html b/ui/profile.html -new file mode 100644 -index 0000000..cb717ee ---- /dev/null -+++ b/ui/profile.html -@@ -0,0 +1,52 @@ -+ -+ -+ -+ -+ -+ -+ User Profile | {{profiler.first_name}} -+ -+ -+ {% include "header.html" %} -+





      -+ -+
      -+
      -+

      User Profile

      -+
      -+
      -+
      -+
      -+
      -+
      -+

      First Name : {{profiler.user.first_name}}

      -+

      Last Name : {{profiler.user.last_name}}

      -+

      Email Address : {{profiler.user.email}}

      -+

      Mobile : {{profiler.phone}}

      -+

      Gender : {{profiler.gender}}

      -+

      Location : {{profiler.location}}

      -+ -+
      -+
      -+
      -+ -+

      User {{profiler.user}}

      -+
      -+
      -+ -+
      -+
      -+

      -+
      -+ -+ -+
      -+

      -+ {% include "footer.html" %} -+ -+ -\ No newline at end of file -diff --git a/ui/redirect.html b/ui/redirect.html -new file mode 100755 -index 0000000..59eeb19 ---- /dev/null -+++ b/ui/redirect.html -@@ -0,0 +1,29 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -\ No newline at end of file -diff --git a/ui/viewpost.html b/ui/viewpost.html -new file mode 100644 -index 0000000..5951d47 ---- /dev/null -+++ b/ui/viewpost.html -@@ -0,0 +1,60 @@ -+ -+ -+ -+ -+ -+ -+ Post | {{post.title_post }} -+ -+ -+ {% include "header.html" %} -+





      -+ -+

      Malaria : infoHub

      -+ -+
      -+
      -+

      View Post

      -+
      -+ -+ -+
      -+
      -+
      -+
      -+

      Title :

      -+
      -+
      -+

      {{post.title_post}}

      -+
      -+
      -+
      -+
      -+
      -+
      -+

      Descrpition :

      -+
      -+
      -+

      {{post.description_post}}

      -+
      -+

      -+
      -+      -+ -+
      -+ -+
      -+
      -+ -+ -+ -+ -+

      -+ {% include "footer.html" %} -+ -+ -\ No newline at end of file -diff --git a/webhub/__init__.py b/webhub/__init__.py -new file mode 100644 -index 0000000..e69de29 -diff --git a/webhub/__init__.pyc b/webhub/__init__.pyc -new file mode 100644 -index 0000000..0a6fa88 -Binary files /dev/null and b/webhub/__init__.pyc differ -diff --git a/webhub/admin.py b/webhub/admin.py -new file mode 100644 -index 0000000..6163a44 ---- /dev/null -+++ b/webhub/admin.py -@@ -0,0 +1,14 @@ -+#Version : Phython/Django 2.7.6, PostgreSQL 9.3.4 -+#Author : Vaibhavi Desai -+#Github username : desaivaibhavi -+#email : ranihaileydesai@gmail.com -+ -+ -+from django.contrib import admin -+from webhub.models import Pcuser -+from webhub.models import Post -+ -+admin.site.register(Pcuser) -+admin.site.register(Post) -+ -+# Register your models here. -diff --git a/webhub/admin.pyc b/webhub/admin.pyc -new file mode 100644 -index 0000000..95dc157 -Binary files /dev/null and b/webhub/admin.pyc differ -diff --git a/webhub/checker.py b/webhub/checker.py -new file mode 100755 -index 0000000..531d428 ---- /dev/null -+++ b/webhub/checker.py -@@ -0,0 +1,36 @@ -+#Version : Phython/Django 2.7.6, PostgreSQL 9.3.4 -+#Author : Vaibhavi Desai -+#Github username : desaivaibhavi -+#email : ranihaileydesai@gmail.com -+ -+from django.http import HttpResponse -+from django.utils import timezone -+from webhub.models import * -+from django.views.decorators.csrf import csrf_exempt -+import datetime -+from django.contrib.auth import authenticate, login, logout -+from django.contrib.auth.models import User -+from django.shortcuts import redirect -+from django.db.models import Count, Min, Sum, Avg -+import uuid -+import jinja2 -+from jinja2.ext import loopcontrols -+ -+jinja_environ = jinja2.Environment(loader=jinja2.FileSystemLoader(['ui']), extensions=[loopcontrols]) -+ -+#Checker function used to see if user is logged in and verified etc. Made separately instead of writing repeatedly -+def check(request): -+ -+ #Check if user is logged in -+ if not request.user.is_authenticated(): -+ return HttpResponse(jinja_environ.get_template('index.html').render({"pcuser":None})) -+ -+ #Check if user has an associated rider -+ #(This will be false if the admin logs in) -+ try: -+ request.user.pcuser -+ except: -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -+ "text":'

      No Pcuser associated! Add a pcuser from admin

      '})) -+ -+ return None -diff --git a/webhub/checker.pyc b/webhub/checker.pyc -new file mode 100644 -index 0000000..1f0d17d -Binary files /dev/null and b/webhub/checker.pyc differ -diff --git a/webhub/models.py b/webhub/models.py -new file mode 100644 -index 0000000..b1e78c1 ---- /dev/null -+++ b/webhub/models.py -@@ -0,0 +1,42 @@ -+#Version : Phython/Django 2.7.6, PostgreSQL 9.3.4 -+#Author : Vaibhavi Desai -+#Github username : desaivaibhavi -+#email : ranihaileydesai@gmail.com -+ -+from django.db import models -+from django import forms -+from django.utils import timezone -+from django.contrib.auth.models import User -+import os -+from uuid import uuid4 -+ -+#Django provides a table called user that stores basic user information like username, password and email id. -+ -+class Pcuser(models.Model): -+ #username -+ user = models.OneToOneField(User) -+ #location -+ location = models.CharField(max_length=300) -+ #phone number -+ phone = models.CharField(max_length=150) -+ #gender -+ gender = models.CharField(max_length=10) -+ #for reset_password -+ reset_pass = models.CharField(default="",max_length=320) -+ -+ def __unicode__(self): -+ return self.user.username -+ -+ -+#Post table stores details about posts -+ -+class Post(models.Model): -+ #The owner of the post -+ owner = models.ForeignKey(Pcuser, null=False, related_name='owner') -+ #title -+ title_post = models.CharField(max_length=300) -+ #description -+ description_post = models.CharField(max_length=2000) -+ -+ def __unicode__(self): -+ return self.owner.user.username -\ No newline at end of file -diff --git a/webhub/models.pyc b/webhub/models.pyc -new file mode 100644 -index 0000000..4af902e -Binary files /dev/null and b/webhub/models.pyc differ -diff --git a/webhub/tests.py b/webhub/tests.py -new file mode 100644 -index 0000000..8cece82 ---- /dev/null -+++ b/webhub/tests.py -@@ -0,0 +1,8 @@ -+#Version : Phython/Django 2.7.6, PostgreSQL 9.3.4 -+#Author : Vaibhavi Desai -+#Github username : desaivaibhavi -+#email : ranihaileydesai@gmail.com -+ -+from django.test import TestCase -+ -+# Create your tests here. -diff --git a/webhub/urls.py b/webhub/urls.py -new file mode 100644 -index 0000000..b04ff07 ---- /dev/null -+++ b/webhub/urls.py -@@ -0,0 +1,30 @@ -+#Version : Phython/Django 2.7.6, PostgreSQL 9.3.4 -+#Author : Vaibhavi Desai -+#Github username : desaivaibhavi -+#email : ranihaileydesai@gmail.com -+ -+from django.conf.urls import patterns, url -+ -+from webhub import views -+ -+urlpatterns = patterns('', -+ url(r'^index/$', views.index, name='index'), -+ url(r'^$', views.dashboard, name='dashboard'), -+ url(r'^login_do/$', views.login_do, name='login_do'), -+ url(r'^logout_do/$', views.logout_do, name='logout_do'), -+ url(r'^malaria/$', views.malaria, name='malaria'), -+ url(r'^peacetrack/$', views.peacetrack, name='peacetrack'), -+ url(r'^post_form/$', views.post_form, name='post_form'), -+ url(r'^post_new/$', views.post_new, name='post_new'), -+ url(r'^edit_post/$', views.edit_post, name='edit_post'), -+ url(r'^edit_post_page/$', views.edit_post_page, name='edit_post_page'), -+ url(r'^view_post/$', views.view_post, name='view_post'), -+ url(r'^delete_post/$', views.delete_post, name='delete_post'), -+ url(r'^profile/$', views.profile, name='profile'), -+ url(r'^edit_profile/$', views.edit_profile, name='edit_profile'), -+ url(r'^edit_profile_page/$', views.edit_profile_page, name='edit_profile_page'), -+) -+ -+ -+ -+ -diff --git a/webhub/urls.pyc b/webhub/urls.pyc -new file mode 100644 -index 0000000..f3ecc38 -Binary files /dev/null and b/webhub/urls.pyc differ -diff --git a/webhub/views.py b/webhub/views.py -new file mode 100644 -index 0000000..b952a54 ---- /dev/null -+++ b/webhub/views.py -@@ -0,0 +1,226 @@ -+#Version : Phython/Django 2.7.6, PostgreSQL 9.3.4 -+#Author : Vaibhavi Desai -+#Github username : desaivaibhavi -+#email : ranihaileydesai@gmail.com -+ -+from django.shortcuts import render -+from django.shortcuts import render_to_response -+from django.db import IntegrityError -+from django.http import HttpResponse -+from django.http import HttpResponseRedirect -+from django.contrib import auth -+from django.contrib.auth import authenticate, login, logout -+from django.core.context_processors import csrf -+from django.views.decorators.csrf import csrf_exempt -+import jinja2 -+from jinja2.ext import loopcontrols -+from webhub.checker import check -+from webhub.models import * -+ -+jinja_environ = jinja2.Environment(loader=jinja2.FileSystemLoader(['ui']), extensions=[loopcontrols]) -+ -+#Calls index page -+def index(request): -+ return HttpResponse(jinja_environ.get_template('index.html').render({"pcuser":None})) -+ -+#Calls dashboard wish is shown after a user is logged in -+def dashboard(request): -+ -+ retval = check(request) -+ if retval <> None: -+ return retval -+ -+ template_values = {'pcuser' : request.user.pcuser, -+ } -+ return HttpResponse(jinja_environ.get_template('dashboard.html').render(template_values)) -+ -+ -+#Called when a user clicks login button. -+@csrf_exempt -+def login_do(request): -+ username = request.REQUEST['username'] -+ password = request.REQUEST['password'] -+ user = authenticate(username=username, password=password) -+ -+ if user is not None: -+ if user.is_active: -+ login(request, user) -+ if 'redirect' in request.REQUEST.keys(): -+ return HttpResponse(jinja_environ.get_template('redirect.html').render({"pcuser":None,"redirect_url":request.REQUEST['redirect'].replace("!!__!!","&")})) -+ return HttpResponse(jinja_environ.get_template('redirect.html').render({"pcuser":None,"redirect_url":"/"})) -+ -+ else: -+ # Return an 'invalid login' error message. -+ if "js" in request.REQUEST.keys(): -+ if len(User.objects.filter(username=request.REQUEST['username'])) == 0: -+ return HttpResponse("inv_user") -+ return HttpResponse("inv_pass") -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, -+ "text":'Invalid Login.', "text1":'Click here to go to home page.',"link":'/'})) -+ -+ -+#Called when a user clicks logout button. -+def logout_do(request): -+ logout(request) -+ redirect_url = "/" -+ if 'redirect_url' in request.REQUEST.keys(): -+ redirect_url = request.REQUEST['redirect_url'] -+ return HttpResponse(jinja_environ.get_template('redirect.html').render({"pcuser":None,"redirect_url":redirect_url})) -+ -+ -+#Called when a user goes to malaria track. -+def malaria(request): -+ all_posts = Post.objects.all() -+ return HttpResponse(jinja_environ.get_template('malaria.html').render({"all_posts":all_posts, "pcuser":request.user.pcuser})) -+ -+#called when a user wants to view a particular post. -+def view_post(request): -+ retval = check(request) -+ if retval <> None: -+ return retval -+ -+ try: -+ pcuser=request.user.pcuser -+ key=request.REQUEST['key'] -+ postobj=Post.objects.get(id=key) -+ return HttpResponse(jinja_environ.get_template('viewpost.html').render({"pcuser":request.user.pcuser, 'post':postobj})) -+ except Exception as e: -+ return HttpResponse(e) -+ -+ -+#The call function for new post form. -+def post_form(request): -+ retval = check(request) -+ if retval <> None: -+ return retval -+ return HttpResponse(jinja_environ.get_template('newpost.html').render({"pcuser":request.user.pcuser, 'owner':request.user.pcuser})) -+ -+#Called when a user clicks submit on new post form. -+@csrf_exempt -+def post_new(request): -+ #check for user login -+ retval = check(request) -+ if retval <> None: -+ return retval -+ owner = request.user.pcuser -+ title_post = request.REQUEST['title'] -+ description_post = request.REQUEST['description'] -+ -+ entry = Post(owner=owner, -+ title_post=title_post, -+ description_post=description_post, -+ ) -+ entry.save() -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, -+ "text":'Post successful.',"text1":'Click here to go to home.', -+ "link": '/'})) -+ -+#Calls the edit post page. Also, sends the autofill form data. -+def edit_post_page(request): -+ retval = check(request) -+ if retval <> None: -+ return retval -+ -+ try: -+ pcuser=request.user.pcuser -+ key=request.REQUEST['key'] -+ postobj=Post.objects.get(id=key) -+ return HttpResponse(jinja_environ.get_template('editpost.html').render({"pcuser":request.user.pcuser, 'post':postobj})) -+ except Exception as e: -+ return HttpResponse(e) -+ -+#Called when a user edits his/her post. -+@csrf_exempt -+def edit_post(request): -+ retval = check(request) -+ if retval <> None: -+ return retval -+ -+ owner = request.user.pcuser -+ postid = request.REQUEST['postid'] -+ postobj = None -+ try: -+ postobj = Post.objects.get(pk=postid) -+ except Exception as e: -+ return HttpResponse(e) -+ -+ title_post = request.REQUEST['title'] -+ description_post = request.REQUEST['description'] -+ -+ -+ postobj.title_post = title_post -+ postobj.description_post = description_post -+ -+ postobj.save() -+ -+ postobj.owner.save() -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, -+ "text":'Post edited successfully.',"text1":'Click here to view post.', "link": '/view_post/?key=' + str(postobj.id)})) -+ -+#Called when a user cancels his post. -+@csrf_exempt -+def delete_post(request): -+ retval = check(request) -+ if retval <> None: -+ return retval -+ user = request.user -+ -+ postid = request.REQUEST['postid'] -+ -+ postobj = None -+ try: -+ postobj = Post.objects.get(pk=postid) -+ except Exception as e: -+ return HttpResponse(e) -+ -+ postobj.delete() -+ -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, -+ "text":'Post Deleted successfully.', "text1":'Click here to go to home page.',"link":'/'})) -+ -+#Call to open user's profile page.Sends data to be displayed. -+def profile(request): -+ -+ try: -+ pcuserid = request.REQUEST['id'] -+ if pcuserid == request.user.pcuser.pk: -+ return HttpResponse(jinja_environ.get_template('profile.html').render({"pcuser":request.user.pcuser, "profiler":request.user.pcuser})) -+ else: -+ return HttpResponse(jinja_environ.get_template('profile.html').render({"pcuser":request.user.pcuser, "profiler":Pcuser.objects.get(pk=pcuserid)})) -+ except: -+ return HttpResponse(jinja_environ.get_template('profile.html').render({"pcuser":request.user.pcuser, "profiler":request.user.pcuser})) -+ -+ -+#Calls the edit profile page. The autofill data is sent too. -+def edit_profile_page(request): -+ if not request.user.is_authenticated(): -+ return HttpResponse(jinja_environ.get_template('index.html').render({"pcuser":None})) -+ pcuserid = request.REQUEST['id'] -+ return HttpResponse(jinja_environ.get_template('edit_profile.html').render({"pcuser":Pcuser.objects.get(pk=pcuserid)})) -+ -+#Edit profile function. Called after a user presses done in edit profile. New data is requested from frontend and stored. -+@csrf_exempt -+def edit_profile(request): -+ if not request.user.is_authenticated(): -+ return HttpResponse(jinja_environ.get_template('index.html').render({"pcuser":None})) -+ -+ -+ -+ -+ request.user.pcuser.gender = request.REQUEST['gender'] -+ request.user.pcuser.phone = request.REQUEST['phone'] -+ request.user.pcuser.phone = request.REQUEST['email'] -+ request.user.pcuser.gender = request.REQUEST['location'] -+ request.user.first_name = request.REQUEST['first_name'] -+ request.user.last_name = request.REQUEST['last_name'] -+ -+ request.user.pcuser.save() -+ -+ request.user.save() -+ -+ return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, -+ "text":'Profile edit successful.',"text1":'Click here to view the profile.',"link":'/profile/?id='+ str(request.user.pcuser.id)})) -+ -+#called when user wishes to go to the Peacetrack from dashboard -+def peacetrack(request): -+ return HttpResponse(jinja_environ.get_template('peacetrack.html').render({"pcuser":None})) -\ No newline at end of file -diff --git a/webhub/views.pyc b/webhub/views.pyc -new file mode 100644 -index 0000000..ada3218 -Binary files /dev/null and b/webhub/views.pyc differ diff --git a/make.bat b/make.bat deleted file mode 100644 index db50cfe1..00000000 --- a/make.bat +++ /dev/null @@ -1,242 +0,0 @@ -@ECHO OFF - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set BUILDDIR=_build -set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . -set I18NSPHINXOPTS=%SPHINXOPTS% . -if NOT "%PAPER%" == "" ( - set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% - set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% -) - -if "%1" == "" goto help - -if "%1" == "help" ( - :help - echo.Please use `make ^` where ^ is one of - echo. html to make standalone HTML files - echo. dirhtml to make HTML files named index.html in directories - echo. singlehtml to make a single large HTML file - echo. pickle to make pickle files - echo. json to make JSON files - echo. htmlhelp to make HTML files and a HTML help project - echo. qthelp to make HTML files and a qthelp project - echo. devhelp to make HTML files and a Devhelp project - echo. epub to make an epub - echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter - echo. text to make text files - echo. man to make manual pages - echo. texinfo to make Texinfo files - echo. gettext to make PO message catalogs - echo. changes to make an overview over all changed/added/deprecated items - echo. xml to make Docutils-native XML files - echo. pseudoxml to make pseudoxml-XML files for display purposes - echo. linkcheck to check all external links for integrity - echo. doctest to run all doctests embedded in the documentation if enabled - goto end -) - -if "%1" == "clean" ( - for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i - del /q /s %BUILDDIR%\* - goto end -) - - -%SPHINXBUILD% 2> nul -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx-doc.org/ - exit /b 1 -) - -if "%1" == "html" ( - %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/html. - goto end -) - -if "%1" == "dirhtml" ( - %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. - goto end -) - -if "%1" == "singlehtml" ( - %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. - goto end -) - -if "%1" == "pickle" ( - %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the pickle files. - goto end -) - -if "%1" == "json" ( - %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the JSON files. - goto end -) - -if "%1" == "htmlhelp" ( - %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run HTML Help Workshop with the ^ -.hhp project file in %BUILDDIR%/htmlhelp. - goto end -) - -if "%1" == "qthelp" ( - %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run "qcollectiongenerator" with the ^ -.qhcp project file in %BUILDDIR%/qthelp, like this: - echo.^> qcollectiongenerator %BUILDDIR%\qthelp\systerspcweb.qhcp - echo.To view the help file: - echo.^> assistant -collectionFile %BUILDDIR%\qthelp\systerspcweb.ghc - goto end -) - -if "%1" == "devhelp" ( - %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. - goto end -) - -if "%1" == "epub" ( - %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The epub file is in %BUILDDIR%/epub. - goto end -) - -if "%1" == "latex" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "latexpdf" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - cd %BUILDDIR%/latex - make all-pdf - cd %BUILDDIR%/.. - echo. - echo.Build finished; the PDF files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "latexpdfja" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - cd %BUILDDIR%/latex - make all-pdf-ja - cd %BUILDDIR%/.. - echo. - echo.Build finished; the PDF files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "text" ( - %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The text files are in %BUILDDIR%/text. - goto end -) - -if "%1" == "man" ( - %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The manual pages are in %BUILDDIR%/man. - goto end -) - -if "%1" == "texinfo" ( - %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. - goto end -) - -if "%1" == "gettext" ( - %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The message catalogs are in %BUILDDIR%/locale. - goto end -) - -if "%1" == "changes" ( - %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes - if errorlevel 1 exit /b 1 - echo. - echo.The overview file is in %BUILDDIR%/changes. - goto end -) - -if "%1" == "linkcheck" ( - %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck - if errorlevel 1 exit /b 1 - echo. - echo.Link check complete; look for any errors in the above output ^ -or in %BUILDDIR%/linkcheck/output.txt. - goto end -) - -if "%1" == "doctest" ( - %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest - if errorlevel 1 exit /b 1 - echo. - echo.Testing of doctests in the sources finished, look at the ^ -results in %BUILDDIR%/doctest/output.txt. - goto end -) - -if "%1" == "xml" ( - %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The XML files are in %BUILDDIR%/xml. - goto end -) - -if "%1" == "pseudoxml" ( - %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. - goto end -) - -:end diff --git a/malaria/serializers.py b/malaria/serializers.py new file mode 100644 index 00000000..8c78a081 --- /dev/null +++ b/malaria/serializers.py @@ -0,0 +1,13 @@ +from rest_framework import serializers +from malaria.models import Post + + +class PostSerializer(serializers.ModelSerializer): + class Meta: + model = Post + fields = ('owner', + 'title_post', + 'description_post', + 'created', + 'updated', + 'id') diff --git a/malaria/templates/malaria/create_post.html b/malaria/templates/malaria/create_post.html index fa3873b7..80667cf5 100644 --- a/malaria/templates/malaria/create_post.html +++ b/malaria/templates/malaria/create_post.html @@ -30,7 +30,7 @@
      - +

      {% if form.description_post.errors %} @@ -43,12 +43,11 @@

      -
      +
      Cancel
      -



      diff --git a/malaria/templates/malaria/edit_post.html b/malaria/templates/malaria/edit_post.html index ff8d01ab..bf0b6582 100644 --- a/malaria/templates/malaria/edit_post.html +++ b/malaria/templates/malaria/edit_post.html @@ -7,62 +7,47 @@





      Malaria : infoHub

      -
      +

      Edit Post


      -
      + {% csrf_token %} -
      -
      -
      -
      -

      Title

      -
      -
      - - {% if form.title_post.errors %} -

      - +

      + +
      + +

      + + {% if form.title_post.errors %} {% for error in form.title_post.errors %} {{ error }} {% endfor %} - -

      - {% endif %} + {% endif %} +
      +

      -
      -
      -
      -
      -

      Description

      -
      -
      - - {% if form.description_post.errors %} -

      - +

      + +
      + +

      + + {% if form.description_post.errors %} {% for error in form.description_post.errors %} {{ error }} {% endfor %} - -

      - {% endif %} + {% endif %} +
      +

      -
      -
      -
      -
      -
      +
      +
      -
      - -
      -

      diff --git a/malaria/tests.py b/malaria/tests.py index 39341b80..f869bbef 100644 --- a/malaria/tests.py +++ b/malaria/tests.py @@ -7,8 +7,8 @@ from rest_framework.renderers import JSONRenderer from rest_framework.test import APITestCase from malaria.models import Post +from malaria.serializers import PostSerializer from webhub.models import Pcuser -from webhub.serializers import PostSerializer class PostAPITestCase(APITestCase): diff --git a/malaria/urls.py b/malaria/urls.py index 1016d7c7..3fb3d1ff 100644 --- a/malaria/urls.py +++ b/malaria/urls.py @@ -15,12 +15,6 @@ url(r'^list_posts/$', views.list_posts, name='list_posts'), - url(r'^revpost/$', - views.revpost_list, - name='revpost_list'), - url(r'^revpost/(?P[0-9]+)/$', - views.revpost_detail, - name='revpost_detail'), url(r'^view_post/(?P\d+)$', views.view_post, name='view_post'), diff --git a/malaria/views.py b/malaria/views.py index c9cbf175..4e1888bb 100644 --- a/malaria/views.py +++ b/malaria/views.py @@ -1,16 +1,12 @@ from django.shortcuts import render from django.http import Http404, HttpResponseRedirect from django.core.urlresolvers import reverse -from rest_framework import status from rest_framework import viewsets -from rest_framework.decorators import api_view -from rest_framework.response import Response from malaria.forms import PostForm from malaria.models import Post, RevPost +from malaria.serializers import PostSerializer from malaria.services import delete_post_by_id, get_post_by_id, get_revpost_of_owner from webhub.checker import check -from webhub.models import Pcuser -from webhub.serializers import PostSerializer, RevPostSerializer def list_posts(request): @@ -156,50 +152,3 @@ class PostViewSet(viewsets.ReadOnlyModelViewSet): """ queryset = Post.objects.all() serializer_class = PostSerializer - - -@api_view(['GET', 'POST']) -def revpost_list(request): - if request.method == 'GET': - revpost = RevPost.objects.all() - serializer = RevPostSerializer(revpost, many=True) - return Response(serializer.data) - - elif request.method == 'POST': - serializer = RevPostSerializer(data=request.DATA) - if serializer.is_valid(): - serializer.save() - return Response(serializer.data, status=status.HTTP_201_CREATED) - return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) - - -@api_view(['GET', 'PUT', 'DELETE']) -def revpost_detail(request, pk): - try: - revpost = RevPost.objects.get(pk=pk) - except Pcuser.DoesNotExist: - return Response(status=status.HTTP_404_NOT_FOUND) - - if request.method == 'GET': - # to do: the post below is undefined, fix it - serializer = RevPostSerializer(post) - return Response(serializer.data) - - elif request.method == 'PUT': - serializer = RevPostSerializer(post, data=request.DATA) - if serializer.is_valid(): - serializer.save() - return Response(serializer.data) - return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) - - elif request.method == 'DELETE': - revpost.delete() - return Response(status=status.HTTP_204_NO_CONTENT) - - -class RevPostViewSet(viewsets.ModelViewSet): - """ - API endpoint that allows users to be viewed or edited. - """ - queryset = RevPost.objects.all() - serializer_class = RevPostSerializer diff --git a/peacetrack/setup.py b/peacetrack/setup.py deleted file mode 100644 index c563faf5..00000000 --- a/peacetrack/setup.py +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/env python - -from os import path -import sys -python_version = sys.version_info[:2] - -if python_version < (2, 6): - raise Exception("This version of xlrd requires Python 2.6 or above. " - "For older versions of Python, you can use the 0.8 series.") - -av = sys.argv -if len(av) > 1 and av[1].lower() == "--egg": - del av[1] - from setuptools import setup -else: - from distutils.core import setup - -from xlrd.info import __VERSION__ - -setup( - name = 'xlrd', - version = __VERSION__, - author = 'John Machin', - author_email = 'sjmachin@lexicon.net', - url = 'http://www.python-excel.org/', - packages = ['xlrd'], - scripts = [ - 'scripts/runxlrd.py', - ], - package_data={ - 'xlrd': [ - 'doc/*.htm*', - # 'doc/*.txt', - 'examples/*.*', - ], - - }, - description = 'Library for developers to extract data from Microsoft Excel (tm) spreadsheet files', - long_description = \ - "Extract data from Excel spreadsheets (.xls and .xlsx, versions 2.0 onwards) on any platform. " \ - "Pure Python (2.6, 2.7, 3.2+). Strong support for Excel dates. Unicode-aware.", - platforms = ["Any platform -- don't need Windows"], - license = 'BSD', - keywords = ['xls', 'excel', 'spreadsheet', 'workbook'], - classifiers = [ - 'Development Status :: 5 - Production/Stable', - 'Intended Audience :: Developers', - 'License :: OSI Approved :: BSD License', - 'Programming Language :: Python', - 'Programming Language :: Python :: 2', - 'Programming Language :: Python :: 3', - 'Operating System :: OS Independent', - 'Topic :: Database', - 'Topic :: Office/Business', - 'Topic :: Software Development :: Libraries :: Python Modules', - ], - ) diff --git a/peacetrack/views.py b/peacetrack/views.py index 430a6da6..1ece03d2 100644 --- a/peacetrack/views.py +++ b/peacetrack/views.py @@ -27,7 +27,6 @@ from rest_framework.decorators import api_view from rest_framework.response import Response from paths import cpspath -from webhub import xlrd import smtplib diff --git a/webhub/PKG-INFO b/webhub/PKG-INFO deleted file mode 100644 index 513bf98a..00000000 --- a/webhub/PKG-INFO +++ /dev/null @@ -1,21 +0,0 @@ -Metadata-Version: 1.0 -Name: xlrd -Version: 0.9.3 -Summary: Library for developers to extract data from Microsoft Excel (tm) spreadsheet files -Home-page: http://www.python-excel.org/ -Author: John Machin -Author-email: sjmachin@lexicon.net -License: BSD -Description: Extract data from Excel spreadsheets (.xls and .xlsx, versions 2.0 onwards) on any platform. Pure Python (2.6, 2.7, 3.2+). Strong support for Excel dates. Unicode-aware. -Keywords: xls,excel,spreadsheet,workbook -Platform: Any platform -- don't need Windows -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: BSD License -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 3 -Classifier: Operating System :: OS Independent -Classifier: Topic :: Database -Classifier: Topic :: Office/Business -Classifier: Topic :: Software Development :: Libraries :: Python Modules diff --git a/webhub/README.html b/webhub/README.html deleted file mode 100644 index bbc3675f..00000000 --- a/webhub/README.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - -The xlrd Module -- README - - - -

      Python package "xlrd"

      - -

      Purpose: Provide a library for developers to use to extract data - from Microsoft Excel (tm) spreadsheet files. - It is not an end-user tool. -

      -

      Author: John Machin, Lingfo Pty Ltd (sjmachin@lexicon.net) -

      -

      Licence: BSD-style (see licences.py) -

      -

      Version of xlrd: 0.7.1 -- 2009-05-31 -

      -

      Versions of Python supported: 2.6-2.7. -

      -

      External modules required: -

      -
      The package itself is pure Python with no dependencies on modules or packages - outside the standard Python distribution. -
      -
      -

      Versions of Excel supported: - 2004, 2003, XP, 2000, 97, 95, 5.0, 4.0, 3.0, 2.1, 2.0. - Support for Excel 2007 .xlsx files scheduled for version 0.7.1. -

      -

      Outside the current scope: xlrd will safely and reliably ignore any of these -if present in the file: -

      -
        -
      • Charts, Macros, Pictures, any other embedded object. WARNING: currently - this includes embedded worksheets. -
      • -
      • VBA modules -
      • -
      • Formulas (results of formula calculations are extracted, of course). -
      • -
      • Comments -
      • -
      • Hyperlinks -
      • -
      • Autofilters, advanced filters, pivot tables, conditional formatting, data validation -
      • -
      -

      Unlikely to be done: -

      -
      • Handling password-protected (encrypted) files. -
      • -
      -

      Particular emphasis (refer docs for details): -

      -
      • Operability across OS, regions, platforms -
      • -
      • Handling Excel's date problems, including the Windows / Macintosh - four-year differential. -
      • -
      • Providing access to named constants and named groups of cells (from version 0.6.0) -
      • -
      • Providing access to "visual" information: font, "number format", background, border, - alignment and protection for cells, height/width etc for rows/columns (from version 0.6.1) -
      • -
      -

      Quick start: -

      -
          import xlrd
      -    book = xlrd.open_workbook("myfile.xls")
      -    print "The number of worksheets is", book.nsheets
      -    print "Worksheet name(s):", book.sheet_names()
      -    sh = book.sheet_by_index(0)
      -    print sh.name, sh.nrows, sh.ncols
      -    print "Cell D30 is", sh.cell_value(rowx=29, colx=3)
      -    for rx in range(sh.nrows):
      -        print sh.row(rx)
      -    # Refer to docs for more details.
      -    # Feedback on API is welcomed.
      -

      -

      -

      Another quick start: This will show the first, second and last rows of each - sheet in each file: -

      - -
          OS-prompt>python PYDIR/scripts/runxlrd.py 3rows *blah*.xls
      - -

      Installation: -

      -
      • On Windows: use the installer. -
      • -
      • Any OS: Unzip the .zip file into a suitable directory, - chdir to that directory, then do "python setup.py install". -
      • -
      • If PYDIR is your Python installation directory: - the main files are in PYDIR/Lib/site-packages/xlrd - the docs are in the doc subdirectory, - and there's a sample script: PYDIR/Scripts/runxlrd.py -
      • -
      • If os.sep != "/": make the appropriate adjustments. -
      • -
      -

      Download URLs: -

      -
      • http://pypi.python.org/pypi/xlrd -
      • -
      • http://www.lexicon.net/sjmachin/xlrd.htm -
      • -
      -

      Acknowledgements: -

      -
      • This package started life as a translation from C into Python -of parts of a utility called "xlreader" developed by David Giffin. -"This product includes software developed by David Giffin <david@giffin.org>." -
      • -
      • OpenOffice.org has truly excellent documentation of the Microsoft Excel file formats -and Compound Document file format, authored by Daniel Rentz. See http://sc.openoffice.org -
      • -
      • U+5F20 U+654F: over a decade of inspiration, support, and interesting decoding opportunities. -
      • -
      • Ksenia Marasanova: sample Macintosh and non-Latin1 files, alpha testing -
      • -
      • Backporting to Python 2.1 was partially funded by Journyx - provider of -timesheet and project accounting solutions (http://journyx.com/). -
      • -
      • Provision of formatting information in version 0.6.1 was funded by Simplistix Ltd - (http://www.simplistix.co.uk/) -
      • -
      • << a growing list of names; see HISTORY.html >>: feedback, testing, test files, ... -
      - - - diff --git a/webhub/Updated Project Framework Indicator List PeaceTrack.xlsx b/webhub/Updated Project Framework Indicator List PeaceTrack.xlsx deleted file mode 100644 index a227790a60d58d354ac32b5b9ef234d1ab81bc4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 435923 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

      Copyright (c) 2005-2012 Stephen John Machin, Lingfo Pty Ltd

      -#

      This module is part of the xlrd package, which is released under a -# BSD-style licence.

      - -from . import licences - -## -#

      A Python module for extracting data from MS Excel (TM) spreadsheet files. -#

      -# Version 0.7.4 -- April 2012 -#

      -# -#

      General information

      -# -#

      Acknowledgements

      -# -#

      -# Development of this module would not have been possible without the document -# "OpenOffice.org's Documentation of the Microsoft Excel File Format" -# ("OOo docs" for short). -# The latest version is available from OpenOffice.org in -# PDF format -# and -# ODT format. -# Small portions of the OOo docs are reproduced in this -# document. A study of the OOo docs is recommended for those who wish a -# deeper understanding of the Excel file layout than the xlrd docs can provide. -#

      -# -#

      Backporting to Python 2.1 was partially funded by -# -# Journyx - provider of timesheet and project accounting solutions. -# -#

      -# -#

      Provision of formatting information in version 0.6.1 was funded by -# -# Simplistix Ltd. -# -#

      -# -#

      Unicode

      -# -#

      This module presents all text strings as Python unicode objects. -# From Excel 97 onwards, text in Excel spreadsheets has been stored as Unicode. -# Older files (Excel 95 and earlier) don't keep strings in Unicode; -# a CODEPAGE record provides a codepage number (for example, 1252) which is -# used by xlrd to derive the encoding (for same example: "cp1252") which is -# used to translate to Unicode.

      -# -#

      If the CODEPAGE record is missing (possible if the file was created -# by third-party software), xlrd will assume that the encoding is ascii, and keep going. -# If the actual encoding is not ascii, a UnicodeDecodeError exception will be raised and -# you will need to determine the encoding yourself, and tell xlrd: -#

      -#     book = xlrd.open_workbook(..., encoding_override="cp1252")
      -# 

      -#

      If the CODEPAGE record exists but is wrong (for example, the codepage -# number is 1251, but the strings are actually encoded in koi8_r), -# it can be overridden using the same mechanism. -# The supplied runxlrd.py has a corresponding command-line argument, which -# may be used for experimentation: -#

      -#     runxlrd.py -e koi8_r 3rows myfile.xls
      -# 

      -#

      The first place to look for an encoding ("codec name") is -# -# the Python documentation. -#

      -#
      -# -#

      Dates in Excel spreadsheets

      -# -#

      In reality, there are no such things. What you have are floating point -# numbers and pious hope. -# There are several problems with Excel dates:

      -# -#

      (1) Dates are not stored as a separate data type; they are stored as -# floating point numbers and you have to rely on -# (a) the "number format" applied to them in Excel and/or -# (b) knowing which cells are supposed to have dates in them. -# This module helps with (a) by inspecting the -# format that has been applied to each number cell; -# if it appears to be a date format, the cell -# is classified as a date rather than a number. Feedback on this feature, -# especially from non-English-speaking locales, would be appreciated.

      -# -#

      (2) Excel for Windows stores dates by default as the number of -# days (or fraction thereof) since 1899-12-31T00:00:00. Excel for -# Macintosh uses a default start date of 1904-01-01T00:00:00. The date -# system can be changed in Excel on a per-workbook basis (for example: -# Tools -> Options -> Calculation, tick the "1904 date system" box). -# This is of course a bad idea if there are already dates in the -# workbook. There is no good reason to change it even if there are no -# dates in the workbook. Which date system is in use is recorded in the -# workbook. A workbook transported from Windows to Macintosh (or vice -# versa) will work correctly with the host Excel. When using this -# module's xldate_as_tuple function to convert numbers from a workbook, -# you must use the datemode attribute of the Book object. If you guess, -# or make a judgement depending on where you believe the workbook was -# created, you run the risk of being 1462 days out of kilter.

      -# -#

      Reference: -# http://support.microsoft.com/default.aspx?scid=KB;EN-US;q180162

      -# -# -#

      (3) The Excel implementation of the Windows-default 1900-based date system works on the -# incorrect premise that 1900 was a leap year. It interprets the number 60 as meaning 1900-02-29, -# which is not a valid date. Consequently any number less than 61 is ambiguous. Example: is 59 the -# result of 1900-02-28 entered directly, or is it 1900-03-01 minus 2 days? The OpenOffice.org Calc -# program "corrects" the Microsoft problem; entering 1900-02-27 causes the number 59 to be stored. -# Save as an XLS file, then open the file with Excel -- you'll see 1900-02-28 displayed.

      -# -#

      Reference: http://support.microsoft.com/default.aspx?scid=kb;en-us;214326

      -# -#

      (4) The Macintosh-default 1904-based date system counts 1904-01-02 as day 1 and 1904-01-01 as day zero. -# Thus any number such that (0.0 <= number < 1.0) is ambiguous. Is 0.625 a time of day (15:00:00), -# independent of the calendar, -# or should it be interpreted as an instant on a particular day (1904-01-01T15:00:00)? -# The xldate_* functions in this module -# take the view that such a number is a calendar-independent time of day (like Python's datetime.time type) for both -# date systems. This is consistent with more recent Microsoft documentation -# (for example, the help file for Excel 2002 which says that the first day -# in the 1904 date system is 1904-01-02). -# -#

      (5) Usage of the Excel DATE() function may leave strange dates in a spreadsheet. Quoting the help file, -# in respect of the 1900 date system: "If year is between 0 (zero) and 1899 (inclusive), -# Excel adds that value to 1900 to calculate the year. For example, DATE(108,1,2) returns January 2, 2008 (1900+108)." -# This gimmick, semi-defensible only for arguments up to 99 and only in the pre-Y2K-awareness era, -# means that DATE(1899, 12, 31) is interpreted as 3799-12-31.

      -# -#

      For further information, please refer to the documentation for the xldate_* functions.

      -# -#

      Named references, constants, formulas, and macros

      -# -#

      -# A name is used to refer to a cell, a group of cells, a constant -# value, a formula, or a macro. Usually the scope of a name is global -# across the whole workbook. However it can be local to a worksheet. -# For example, if the sales figures are in different cells in -# different sheets, the user may define the name "Sales" in each -# sheet. There are built-in names, like "Print_Area" and -# "Print_Titles"; these two are naturally local to a sheet. -#

      -# To inspect the names with a user interface like MS Excel, OOo Calc, -# or Gnumeric, click on Insert/Names/Define. This will show the global -# names, plus those local to the currently selected sheet. -#

      -# A Book object provides two dictionaries (name_map and -# name_and_scope_map) and a list (name_obj_list) which allow various -# ways of accessing the Name objects. There is one Name object for -# each NAME record found in the workbook. Name objects have many -# attributes, several of which are relevant only when obj.macro is 1. -#

      -# In the examples directory you will find namesdemo.xls which -# showcases the many different ways that names can be used, and -# xlrdnamesAPIdemo.py which offers 3 different queries for inspecting -# the names in your files, and shows how to extract whatever a name is -# referring to. There is currently one "convenience method", -# Name.cell(), which extracts the value in the case where the name -# refers to a single cell. More convenience methods are planned. The -# source code for Name.cell (in __init__.py) is an extra source of -# information on how the Name attributes hang together. -#

      -# -#

      Name information is not extracted from files older than -# Excel 5.0 (Book.biff_version < 50)

      -# -#

      Formatting

      -# -#

      Introduction

      -# -#

      This collection of features, new in xlrd version 0.6.1, is intended -# to provide the information needed to (1) display/render spreadsheet contents -# (say) on a screen or in a PDF file, and (2) copy spreadsheet data to another -# file without losing the ability to display/render it.

      -# -#

      The Palette; Colour Indexes

      -# -#

      A colour is represented in Excel as a (red, green, blue) ("RGB") tuple -# with each component in range(256). However it is not possible to access an -# unlimited number of colours; each spreadsheet is limited to a palette of 64 different -# colours (24 in Excel 3.0 and 4.0, 8 in Excel 2.0). Colours are referenced by an index -# ("colour index") into this palette. -# -# Colour indexes 0 to 7 represent 8 fixed built-in colours: black, white, red, green, blue, -# yellow, magenta, and cyan.

      -# -# The remaining colours in the palette (8 to 63 in Excel 5.0 and later) -# can be changed by the user. In the Excel 2003 UI, Tools/Options/Color presents a palette -# of 7 rows of 8 colours. The last two rows are reserved for use in charts.
      -# The correspondence between this grid and the assigned -# colour indexes is NOT left-to-right top-to-bottom.
      -# Indexes 8 to 15 correspond to changeable -# parallels of the 8 fixed colours -- for example, index 7 is forever cyan; -# index 15 starts off being cyan but can be changed by the user.
      -# -# The default colour for each index depends on the file version; tables of the defaults -# are available in the source code. If the user changes one or more colours, -# a PALETTE record appears in the XLS file -- it gives the RGB values for *all* changeable -# indexes.
      -# Note that colours can be used in "number formats": "[CYAN]...." and "[COLOR8]...." refer -# to colour index 7; "[COLOR16]...." will produce cyan -# unless the user changes colour index 15 to something else.
      -# -#

      In addition, there are several "magic" colour indexes used by Excel:
      -# 0x18 (BIFF3-BIFF4), 0x40 (BIFF5-BIFF8): System window text colour for border lines -# (used in XF, CF, and WINDOW2 records)
      -# 0x19 (BIFF3-BIFF4), 0x41 (BIFF5-BIFF8): System window background colour for pattern background -# (used in XF and CF records )
      -# 0x43: System face colour (dialogue background colour)
      -# 0x4D: System window text colour for chart border lines
      -# 0x4E: System window background colour for chart areas
      -# 0x4F: Automatic colour for chart border lines (seems to be always Black)
      -# 0x50: System ToolTip background colour (used in note objects)
      -# 0x51: System ToolTip text colour (used in note objects)
      -# 0x7FFF: System window text colour for fonts (used in FONT and CF records)
      -# Note 0x7FFF appears to be the *default* colour index. It appears quite often in FONT -# records.
      -# -#

      Default Formatting

      -# -# Default formatting is applied to all empty cells (those not described by a cell record). -# Firstly row default information (ROW record, Rowinfo class) is used if available. -# Failing that, column default information (COLINFO record, Colinfo class) is used if available. -# As a last resort the worksheet/workbook default cell format will be used; this -# should always be present in an Excel file, -# described by the XF record with the fixed index 15 (0-based). By default, it uses the -# worksheet/workbook default cell style, described by the very first XF record (index 0). -# -#

      Formatting features not included in xlrd version 0.6.1

      -#
        -#
      • Rich text i.e. strings containing partial bold italic -# and underlined text, change of font inside a string, etc. -# See OOo docs s3.4 and s3.2. -# Rich text is included in version 0.7.2
      • -#
      • Asian phonetic text (known as "ruby"), used for Japanese furigana. See OOo docs -# s3.4.2 (p15)
      • -#
      • Conditional formatting. See OOo docs -# s5.12, s6.21 (CONDFMT record), s6.16 (CF record)
      • -#
      • Miscellaneous sheet-level and book-level items e.g. printing layout, screen panes.
      • -#
      • Modern Excel file versions don't keep most of the built-in -# "number formats" in the file; Excel loads formats according to the -# user's locale. Currently xlrd's emulation of this is limited to -# a hard-wired table that applies to the US English locale. This may mean -# that currency symbols, date order, thousands separator, decimals separator, etc -# are inappropriate. Note that this does not affect users who are copying XLS -# files, only those who are visually rendering cells.
      • -#
      -# -#

      Loading worksheets on demand

      -# -#

      This feature, new in version 0.7.1, is governed by the on_demand argument -# to the open_workbook() function and allows saving memory and time by loading -# only those sheets that the caller is interested in, and releasing sheets -# when no longer required.

      -# -#

      on_demand=False (default): No change. open_workbook() loads global data -# and all sheets, releases resources no longer required (principally the -# str or mmap object containing the Workbook stream), and returns.

      -# -#

      on_demand=True and BIFF version < 5.0: A warning message is emitted, -# on_demand is recorded as False, and the old process is followed.

      -# -#

      on_demand=True and BIFF version >= 5.0: open_workbook() loads global -# data and returns without releasing resources. At this stage, the only -# information available about sheets is Book.nsheets and Book.sheet_names().

      -# -#

      Book.sheet_by_name() and Book.sheet_by_index() will load the requested -# sheet if it is not already loaded.

      -# -#

      Book.sheets() will load all/any unloaded sheets.

      -# -#

      The caller may save memory by calling -# Book.unload_sheet(sheet_name_or_index) when finished with the sheet. -# This applies irrespective of the state of on_demand.

      -# -#

      The caller may re-load an unloaded sheet by calling Book.sheet_by_xxxx() -# -- except if those required resources have been released (which will -# have happened automatically when on_demand is false). This is the only -# case where an exception will be raised.

      -# -#

      The caller may query the state of a sheet: -# Book.sheet_loaded(sheet_name_or_index) -> a bool

      -# -#

      Book.release_resources() may used to save memory and close -# any memory-mapped file before proceding to examine already-loaded -# sheets. Once resources are released, no further sheets can be loaded.

      -# -#

      When using on-demand, it is advisable to ensure that -# Book.release_resources() is always called even if an exception -# is raised in your own code; otherwise if the input file has been -# memory-mapped, the mmap.mmap object will not be closed and you will -# not be able to access the physical file until your Python process -# terminates. This can be done by calling Book.release_resources() -# explicitly in the finally suite of a try/finally block. -# New in xlrd 0.7.2: the Book object is a "context manager", so if -# using Python 2.5 or later, you can wrap your code in a "with" -# statement.

      -## - -import sys, zipfile, pprint -from . import timemachine -from .biffh import ( - XLRDError, - biff_text_from_num, - error_text_from_code, - XL_CELL_BLANK, - XL_CELL_TEXT, - XL_CELL_BOOLEAN, - XL_CELL_ERROR, - XL_CELL_EMPTY, - XL_CELL_DATE, - XL_CELL_NUMBER - ) -from .formula import * # is constrained by __all__ -from .book import Book, colname #### TODO #### formula also has `colname` (restricted to 256 cols) -from .sheet import empty_cell -from .xldate import XLDateError, xldate_as_tuple - -if sys.version.startswith("IronPython"): - # print >> sys.stderr, "...importing encodings" - import encodings - -try: - import mmap - MMAP_AVAILABLE = 1 -except ImportError: - MMAP_AVAILABLE = 0 -USE_MMAP = MMAP_AVAILABLE - -## -# -# Open a spreadsheet file for data extraction. -# -# @param filename The path to the spreadsheet file to be opened. -# -# @param logfile An open file to which messages and diagnostics are written. -# -# @param verbosity Increases the volume of trace material written to the logfile. -# -# @param use_mmap Whether to use the mmap module is determined heuristically. -# Use this arg to override the result. Current heuristic: mmap is used if it exists. -# -# @param file_contents ... as a string or an mmap.mmap object or some other behave-alike object. -# If file_contents is supplied, filename will not be used, except (possibly) in messages. -# -# @param encoding_override Used to overcome missing or bad codepage information -# in older-version files. Refer to discussion in the Unicode section above. -#
      -- New in version 0.6.0 -# -# @param formatting_info Governs provision of a reference to an XF (eXtended Format) object -# for each cell in the worksheet. -#
      Default is False. This is backwards compatible and saves memory. -# "Blank" cells (those with their own formatting information but no data) are treated as empty -# (by ignoring the file's BLANK and MULBLANK records). -# It cuts off any bottom "margin" of rows of empty (and blank) cells and -# any right "margin" of columns of empty (and blank) cells. -# Only cell_value and cell_type are available. -#
      True provides all cells, including empty and blank cells. -# XF information is available for each cell. -#
      -- New in version 0.6.1 -# -# @param on_demand Governs whether sheets are all loaded initially or when demanded -# by the caller. Please refer back to the section "Loading worksheets on demand" for details. -#
      -- New in version 0.7.1 -# -# @param ragged_rows False (the default) means all rows are padded out with empty cells so that all -# rows have the same size (Sheet.ncols). True means that there are no empty cells at the ends of rows. -# This can result in substantial memory savings if rows are of widely varying sizes. See also the -# Sheet.row_len() method. -#
      -- New in version 0.7.2 -# -# @return An instance of the Book class. - -def open_workbook(filename=None, - logfile=sys.stdout, - verbosity=0, - use_mmap=USE_MMAP, - file_contents=None, - encoding_override=None, - formatting_info=False, - on_demand=False, - ragged_rows=False, - ): - peeksz = 4 - if file_contents: - peek = file_contents[:peeksz] - else: - f = open(filename, "rb") - peek = f.read(peeksz) - f.close() - if peek == b"PK\x03\x04": # a ZIP file - if file_contents: - zf = zipfile.ZipFile(timemachine.BYTES_IO(file_contents)) - else: - zf = zipfile.ZipFile(filename) - component_names = zf.namelist() - if verbosity: - logfile.write('ZIP component_names:\n') - pprint.pprint(component_names, logfile) - if 'xl/workbook.xml' in component_names: - from . import xlsx - bk = xlsx.open_workbook_2007_xml( - zf, - component_names, - logfile=logfile, - verbosity=verbosity, - use_mmap=use_mmap, - formatting_info=formatting_info, - on_demand=on_demand, - ragged_rows=ragged_rows, - ) - return bk - if 'xl/workbook.bin' in component_names: - raise XLRDError('Excel 2007 xlsb file; not supported') - if 'content.xml' in component_names: - raise XLRDError('Openoffice.org ODS file; not supported') - raise XLRDError('ZIP file contents not a known type of workbook') - - from . import book - bk = book.open_workbook_xls( - filename=filename, - logfile=logfile, - verbosity=verbosity, - use_mmap=use_mmap, - file_contents=file_contents, - encoding_override=encoding_override, - formatting_info=formatting_info, - on_demand=on_demand, - ragged_rows=ragged_rows, - ) - return bk - -## -# For debugging: dump an XLS file's BIFF records in char & hex. -# @param filename The path to the file to be dumped. -# @param outfile An open file, to which the dump is written. -# @param unnumbered If true, omit offsets (for meaningful diffs). - -def dump(filename, outfile=sys.stdout, unnumbered=False): - from .biffh import biff_dump - bk = Book() - bk.biff2_8_load(filename=filename, logfile=outfile, ) - biff_dump(bk.mem, bk.base, bk.stream_len, 0, outfile, unnumbered) - -## -# For debugging and analysis: summarise the file's BIFF records. -# I.e. produce a sorted file of (record_name, count). -# @param filename The path to the file to be summarised. -# @param outfile An open file, to which the summary is written. - -def count_records(filename, outfile=sys.stdout): - from .biffh import biff_count_records - bk = Book() - bk.biff2_8_load(filename=filename, logfile=outfile, ) - biff_count_records(bk.mem, bk.base, bk.stream_len, outfile) diff --git a/webhub/xlrd/__init__.pyc b/webhub/xlrd/__init__.pyc deleted file mode 100644 index 301274a9522c1a2f668257b9435eed7e10222d49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3249 zcmbVOYf>9W5bj+GfrLN;Z2XSbk2tbZ1uo~|XIutbt|G=jEsxmyXG_wKV8!l^YG-7? zCH};|K`xLRtc+1~nl{*ek)m0O&yaV9;|9{As4Y}ad32u}DBpBe&0 zIuFrp=$(*z+0ZyzzQ0v>*OyjTd_Nl;!(bG)MA8y!}$WB%GghOu|9=i!3sm;Eg1+sVOIN3>&wgj;_|}E3tb)>*{HwT z(3PQq#nsj2`ohYIWp&qGbx)4GT-$hk!qBsYjk=y3GPJV!aCTo%g-8GWSeJC_oD!PzoC5H>qbKJx}{VmYX^Eq zCLwy%V#qiuGkBijQNMHQSaevVexA~EEc-=r4oj5ONE7ujZPPoO4#%lKP92Mt(NN;Cf&EDB8@feuyB&ft%#JrAZAumD1I=mJQ^Jqq zM%Sc5Tc&YC>oD2&!=x>Zx=j24S(yZyDVa95w?*Kma!-Bs{$`k{YtX6hgT~IC+qdsJ zaG>e%n;$xf)Q;+PyGUdaD7Mv-iN=1|Z*>Fx)vicnyN$XqC(~_b_1XFtm(D?z0b#R1 z#n@2Be8bsITmb z4vX_FF0i-=k$E7*u6mnQax^s;u(l!P+qU7zCp^sDWYRWwjW;zk$q413HUFluoi-9Z zzbBeIz2^LWlm_!Y=oM<;pX(l&0Gx0hDNSmNt&|E@!J4ouR>dk=WwbA#&HoeD4F0QV z*PBtbgf0ZvL2q-F!$l*LQST{tJJ#9$IO1%Up zW>cgh$n4+2*nbTe^N#)hljFq1CPboW%~~yH0nhUL4YI3foIn=!{RmkAh!f-s$l7KC z$YL6RLgIh{>iHu~+4wM~|J({%vWMcBik3_Rbqub-)%^jh+@Dx5r0$O_?y|VY;yy&p z-eO_y3>;~7pxo;`a+3v* zWVK_M>$j>YHr53Myl0bsCUdkF{qi!@Y0+qd@FkSa$(J1*jiXxURYeNn?qy? zCt0eqdkuTMxnB2K%`9BOA!pvNbO7p_jCkINlyJXePad&&3~@|b(^3w`{Portions copyright © 2005-2010 Stephen John Machin, Lingfo Pty Ltd

      -#

      This module is part of the xlrd package, which is released under a BSD-style licence.

      -## - -# 2010-03-01 SJM Reading SCL record -# 2010-03-01 SJM Added more record IDs for biff_dump & biff_count -# 2008-02-10 SJM BIFF2 BLANK record -# 2008-02-08 SJM Preparation for Excel 2.0 support -# 2008-02-02 SJM Added suffixes (_B2, _B2_ONLY, etc) on record names for biff_dump & biff_count -# 2007-12-04 SJM Added support for Excel 2.x (BIFF2) files. -# 2007-09-08 SJM Avoid crash when zero-length Unicode string missing options byte. -# 2007-04-22 SJM Remove experimental "trimming" facility. - -from __future__ import print_function - -DEBUG = 0 - -from struct import unpack -import sys -from .timemachine import * - -class XLRDError(Exception): - pass - -## -# Parent of almost all other classes in the package. Defines a common "dump" method -# for debugging. - -class BaseObject(object): - - _repr_these = [] - - ## - # @param f open file object, to which the dump is written - # @param header text to write before the dump - # @param footer text to write after the dump - # @param indent number of leading spaces (for recursive calls) - - def dump(self, f=None, header=None, footer=None, indent=0): - if f is None: - f = sys.stderr - if hasattr(self, "__slots__"): - alist = [] - for attr in self.__slots__: - alist.append((attr, getattr(self, attr))) - else: - alist = self.__dict__.items() - alist = sorted(alist) - pad = " " * indent - if header is not None: print(header, file=f) - list_type = type([]) - dict_type = type({}) - for attr, value in alist: - if getattr(value, 'dump', None) and attr != 'book': - value.dump(f, - header="%s%s (%s object):" % (pad, attr, value.__class__.__name__), - indent=indent+4) - elif attr not in self._repr_these and ( - isinstance(value, list_type) or isinstance(value, dict_type) - ): - print("%s%s: %s, len = %d" % (pad, attr, type(value), len(value)), file=f) - else: - fprintf(f, "%s%s: %r\n", pad, attr, value) - if footer is not None: print(footer, file=f) - -FUN, FDT, FNU, FGE, FTX = range(5) # unknown, date, number, general, text -DATEFORMAT = FDT -NUMBERFORMAT = FNU - -( - XL_CELL_EMPTY, - XL_CELL_TEXT, - XL_CELL_NUMBER, - XL_CELL_DATE, - XL_CELL_BOOLEAN, - XL_CELL_ERROR, - XL_CELL_BLANK, # for use in debugging, gathering stats, etc -) = range(7) - -biff_text_from_num = { - 0: "(not BIFF)", - 20: "2.0", - 21: "2.1", - 30: "3", - 40: "4S", - 45: "4W", - 50: "5", - 70: "7", - 80: "8", - 85: "8X", - } - -## -#

      This dictionary can be used to produce a text version of the internal codes -# that Excel uses for error cells. Here are its contents: -#

      -# 0x00: '#NULL!',  # Intersection of two cell ranges is empty
      -# 0x07: '#DIV/0!', # Division by zero
      -# 0x0F: '#VALUE!', # Wrong type of operand
      -# 0x17: '#REF!',   # Illegal or deleted cell reference
      -# 0x1D: '#NAME?',  # Wrong function or range name
      -# 0x24: '#NUM!',   # Value range overflow
      -# 0x2A: '#N/A',    # Argument or function not available
      -# 

      - -error_text_from_code = { - 0x00: '#NULL!', # Intersection of two cell ranges is empty - 0x07: '#DIV/0!', # Division by zero - 0x0F: '#VALUE!', # Wrong type of operand - 0x17: '#REF!', # Illegal or deleted cell reference - 0x1D: '#NAME?', # Wrong function or range name - 0x24: '#NUM!', # Value range overflow - 0x2A: '#N/A', # Argument or function not available -} - -BIFF_FIRST_UNICODE = 80 - -XL_WORKBOOK_GLOBALS = WBKBLOBAL = 0x5 -XL_WORKBOOK_GLOBALS_4W = 0x100 -XL_WORKSHEET = WRKSHEET = 0x10 - -XL_BOUNDSHEET_WORKSHEET = 0x00 -XL_BOUNDSHEET_CHART = 0x02 -XL_BOUNDSHEET_VB_MODULE = 0x06 - -# XL_RK2 = 0x7e -XL_ARRAY = 0x0221 -XL_ARRAY2 = 0x0021 -XL_BLANK = 0x0201 -XL_BLANK_B2 = 0x01 -XL_BOF = 0x809 -XL_BOOLERR = 0x205 -XL_BOOLERR_B2 = 0x5 -XL_BOUNDSHEET = 0x85 -XL_BUILTINFMTCOUNT = 0x56 -XL_CF = 0x01B1 -XL_CODEPAGE = 0x42 -XL_COLINFO = 0x7D -XL_COLUMNDEFAULT = 0x20 # BIFF2 only -XL_COLWIDTH = 0x24 # BIFF2 only -XL_CONDFMT = 0x01B0 -XL_CONTINUE = 0x3c -XL_COUNTRY = 0x8C -XL_DATEMODE = 0x22 -XL_DEFAULTROWHEIGHT = 0x0225 -XL_DEFCOLWIDTH = 0x55 -XL_DIMENSION = 0x200 -XL_DIMENSION2 = 0x0 -XL_EFONT = 0x45 -XL_EOF = 0x0a -XL_EXTERNNAME = 0x23 -XL_EXTERNSHEET = 0x17 -XL_EXTSST = 0xff -XL_FEAT11 = 0x872 -XL_FILEPASS = 0x2f -XL_FONT = 0x31 -XL_FONT_B3B4 = 0x231 -XL_FORMAT = 0x41e -XL_FORMAT2 = 0x1E # BIFF2, BIFF3 -XL_FORMULA = 0x6 -XL_FORMULA3 = 0x206 -XL_FORMULA4 = 0x406 -XL_GCW = 0xab -XL_HLINK = 0x01B8 -XL_QUICKTIP = 0x0800 -XL_HORIZONTALPAGEBREAKS = 0x1b -XL_INDEX = 0x20b -XL_INTEGER = 0x2 # BIFF2 only -XL_IXFE = 0x44 # BIFF2 only -XL_LABEL = 0x204 -XL_LABEL_B2 = 0x04 -XL_LABELRANGES = 0x15f -XL_LABELSST = 0xfd -XL_LEFTMARGIN = 0x26 -XL_TOPMARGIN = 0x28 -XL_RIGHTMARGIN = 0x27 -XL_BOTTOMMARGIN = 0x29 -XL_HEADER = 0x14 -XL_FOOTER = 0x15 -XL_HCENTER = 0x83 -XL_VCENTER = 0x84 -XL_MERGEDCELLS = 0xE5 -XL_MSO_DRAWING = 0x00EC -XL_MSO_DRAWING_GROUP = 0x00EB -XL_MSO_DRAWING_SELECTION = 0x00ED -XL_MULRK = 0xbd -XL_MULBLANK = 0xbe -XL_NAME = 0x18 -XL_NOTE = 0x1c -XL_NUMBER = 0x203 -XL_NUMBER_B2 = 0x3 -XL_OBJ = 0x5D -XL_PAGESETUP = 0xA1 -XL_PALETTE = 0x92 -XL_PANE = 0x41 -XL_PRINTGRIDLINES = 0x2B -XL_PRINTHEADERS = 0x2A -XL_RK = 0x27e -XL_ROW = 0x208 -XL_ROW_B2 = 0x08 -XL_RSTRING = 0xd6 -XL_SCL = 0x00A0 -XL_SHEETHDR = 0x8F # BIFF4W only -XL_SHEETPR = 0x81 -XL_SHEETSOFFSET = 0x8E # BIFF4W only -XL_SHRFMLA = 0x04bc -XL_SST = 0xfc -XL_STANDARDWIDTH = 0x99 -XL_STRING = 0x207 -XL_STRING_B2 = 0x7 -XL_STYLE = 0x293 -XL_SUPBOOK = 0x1AE # aka EXTERNALBOOK in OOo docs -XL_TABLEOP = 0x236 -XL_TABLEOP2 = 0x37 -XL_TABLEOP_B2 = 0x36 -XL_TXO = 0x1b6 -XL_UNCALCED = 0x5e -XL_UNKNOWN = 0xffff -XL_VERTICALPAGEBREAKS = 0x1a -XL_WINDOW2 = 0x023E -XL_WINDOW2_B2 = 0x003E -XL_WRITEACCESS = 0x5C -XL_WSBOOL = XL_SHEETPR -XL_XF = 0xe0 -XL_XF2 = 0x0043 # BIFF2 version of XF record -XL_XF3 = 0x0243 # BIFF3 version of XF record -XL_XF4 = 0x0443 # BIFF4 version of XF record - -boflen = {0x0809: 8, 0x0409: 6, 0x0209: 6, 0x0009: 4} -bofcodes = (0x0809, 0x0409, 0x0209, 0x0009) - -XL_FORMULA_OPCODES = (0x0006, 0x0406, 0x0206) - -_cell_opcode_list = [ - XL_BOOLERR, - XL_FORMULA, - XL_FORMULA3, - XL_FORMULA4, - XL_LABEL, - XL_LABELSST, - XL_MULRK, - XL_NUMBER, - XL_RK, - XL_RSTRING, - ] -_cell_opcode_dict = {} -for _cell_opcode in _cell_opcode_list: - _cell_opcode_dict[_cell_opcode] = 1 - -def is_cell_opcode(c): - return c in _cell_opcode_dict - -def upkbits(tgt_obj, src, manifest, local_setattr=setattr): - for n, mask, attr in manifest: - local_setattr(tgt_obj, attr, (src & mask) >> n) - -def upkbitsL(tgt_obj, src, manifest, local_setattr=setattr, local_int=int): - for n, mask, attr in manifest: - local_setattr(tgt_obj, attr, local_int((src & mask) >> n)) - -def unpack_string(data, pos, encoding, lenlen=1): - nchars = unpack('<' + 'BH'[lenlen-1], data[pos:pos+lenlen])[0] - pos += lenlen - return unicode(data[pos:pos+nchars], encoding) - -def unpack_string_update_pos(data, pos, encoding, lenlen=1, known_len=None): - if known_len is not None: - # On a NAME record, the length byte is detached from the front of the string. - nchars = known_len - else: - nchars = unpack('<' + 'BH'[lenlen-1], data[pos:pos+lenlen])[0] - pos += lenlen - newpos = pos + nchars - return (unicode(data[pos:newpos], encoding), newpos) - -def unpack_unicode(data, pos, lenlen=2): - "Return unicode_strg" - nchars = unpack('<' + 'BH'[lenlen-1], data[pos:pos+lenlen])[0] - if not nchars: - # Ambiguous whether 0-length string should have an "options" byte. - # Avoid crash if missing. - return UNICODE_LITERAL("") - pos += lenlen - options = BYTES_ORD(data[pos]) - pos += 1 - # phonetic = options & 0x04 - # richtext = options & 0x08 - if options & 0x08: - # rt = unpack(' endpos=%d pos=%d endsub=%d substrg=%r\n', - ofs, dlen, base, endpos, pos, endsub, substrg) - break - hexd = ''.join(["%02x " % BYTES_ORD(c) for c in substrg]) - - chard = '' - for c in substrg: - c = chr(BYTES_ORD(c)) - if c == '\0': - c = '~' - elif not (' ' <= c <= '~'): - c = '?' - chard += c - if numbered: - num_prefix = "%5d: " % (base+pos-ofs) - - fprintf(fout, "%s %-48s %s\n", num_prefix, hexd, chard) - pos = endsub - -def biff_dump(mem, stream_offset, stream_len, base=0, fout=sys.stdout, unnumbered=False): - pos = stream_offset - stream_end = stream_offset + stream_len - adj = base - stream_offset - dummies = 0 - numbered = not unnumbered - num_prefix = '' - while stream_end - pos >= 4: - rc, length = unpack('') - if numbered: - num_prefix = "%5d: " % (adj + pos) - fprintf(fout, "%s%04x %s len = %04x (%d)\n", num_prefix, rc, recname, length, length) - pos += 4 - hex_char_dump(mem, pos, length, adj+pos, fout, unnumbered) - pos += length - if dummies: - if numbered: - num_prefix = "%5d: " % (adj + savpos) - fprintf(fout, "%s---- %d zero bytes skipped ----\n", num_prefix, dummies) - if pos < stream_end: - if numbered: - num_prefix = "%5d: " % (adj + pos) - fprintf(fout, "%s---- Misc bytes at end ----\n", num_prefix) - hex_char_dump(mem, pos, stream_end-pos, adj + pos, fout, unnumbered) - elif pos > stream_end: - fprintf(fout, "Last dumped record has length (%d) that is too large\n", length) - -def biff_count_records(mem, stream_offset, stream_len, fout=sys.stdout): - pos = stream_offset - stream_end = stream_offset + stream_len - tally = {} - while stream_end - pos >= 4: - rc, length = unpack('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 YvAaKRjbPXR#IsMldURyJq$tV%1BDH*1poj5 diff --git a/webhub/xlrd/book.py b/webhub/xlrd/book.py deleted file mode 100644 index 7bb01b4f..00000000 --- a/webhub/xlrd/book.py +++ /dev/null @@ -1,1420 +0,0 @@ -# Copyright (c) 2005-2012 Stephen John Machin, Lingfo Pty Ltd -# This module is part of the xlrd package, which is released under a -# BSD-style licence. - -from __future__ import print_function - -from .timemachine import * -from .biffh import * -import struct; unpack = struct.unpack -import sys -import time -from . import sheet -from . import compdoc -from .formula import * -from . import formatting -if sys.version.startswith("IronPython"): - # print >> sys.stderr, "...importing encodings" - import encodings - -empty_cell = sheet.empty_cell # for exposure to the world ... - -DEBUG = 0 - -USE_FANCY_CD = 1 - -TOGGLE_GC = 0 -import gc -# gc.set_debug(gc.DEBUG_STATS) - -try: - import mmap - MMAP_AVAILABLE = 1 -except ImportError: - MMAP_AVAILABLE = 0 -USE_MMAP = MMAP_AVAILABLE - -MY_EOF = 0xF00BAAA # not a 16-bit number - -SUPBOOK_UNK, SUPBOOK_INTERNAL, SUPBOOK_EXTERNAL, SUPBOOK_ADDIN, SUPBOOK_DDEOLE = range(5) - -SUPPORTED_VERSIONS = (80, 70, 50, 45, 40, 30, 21, 20) - -_code_from_builtin_name = { - "Consolidate_Area": "\x00", - "Auto_Open": "\x01", - "Auto_Close": "\x02", - "Extract": "\x03", - "Database": "\x04", - "Criteria": "\x05", - "Print_Area": "\x06", - "Print_Titles": "\x07", - "Recorder": "\x08", - "Data_Form": "\x09", - "Auto_Activate": "\x0A", - "Auto_Deactivate": "\x0B", - "Sheet_Title": "\x0C", - "_FilterDatabase": "\x0D", - } -builtin_name_from_code = {} -code_from_builtin_name = {} -for _bin, _bic in _code_from_builtin_name.items(): - _bin = UNICODE_LITERAL(_bin) - _bic = UNICODE_LITERAL(_bic) - code_from_builtin_name[_bin] = _bic - builtin_name_from_code[_bic] = _bin -del _bin, _bic, _code_from_builtin_name - -def open_workbook_xls(filename=None, - logfile=sys.stdout, verbosity=0, use_mmap=USE_MMAP, - file_contents=None, - encoding_override=None, - formatting_info=False, on_demand=False, ragged_rows=False, - ): - t0 = time.clock() - if TOGGLE_GC: - orig_gc_enabled = gc.isenabled() - if orig_gc_enabled: - gc.disable() - bk = Book() - try: - bk.biff2_8_load( - filename=filename, file_contents=file_contents, - logfile=logfile, verbosity=verbosity, use_mmap=use_mmap, - encoding_override=encoding_override, - formatting_info=formatting_info, - on_demand=on_demand, - ragged_rows=ragged_rows, - ) - t1 = time.clock() - bk.load_time_stage_1 = t1 - t0 - biff_version = bk.getbof(XL_WORKBOOK_GLOBALS) - if not biff_version: - raise XLRDError("Can't determine file's BIFF version") - if biff_version not in SUPPORTED_VERSIONS: - raise XLRDError( - "BIFF version %s is not supported" - % biff_text_from_num[biff_version] - ) - bk.biff_version = biff_version - if biff_version <= 40: - # no workbook globals, only 1 worksheet - if on_demand: - fprintf(bk.logfile, - "*** WARNING: on_demand is not supported for this Excel version.\n" - "*** Setting on_demand to False.\n") - bk.on_demand = on_demand = False - bk.fake_globals_get_sheet() - elif biff_version == 45: - # worksheet(s) embedded in global stream - bk.parse_globals() - if on_demand: - fprintf(bk.logfile, "*** WARNING: on_demand is not supported for this Excel version.\n" - "*** Setting on_demand to False.\n") - bk.on_demand = on_demand = False - else: - bk.parse_globals() - bk._sheet_list = [None for sh in bk._sheet_names] - if not on_demand: - bk.get_sheets() - bk.nsheets = len(bk._sheet_list) - if biff_version == 45 and bk.nsheets > 1: - fprintf(bk.logfile, - "*** WARNING: Excel 4.0 workbook (.XLW) file contains %d worksheets.\n" - "*** Book-level data will be that of the last worksheet.\n", - bk.nsheets - ) - if TOGGLE_GC: - if orig_gc_enabled: - gc.enable() - t2 = time.clock() - bk.load_time_stage_2 = t2 - t1 - except: - bk.release_resources() - raise - # normal exit - if not on_demand: - bk.release_resources() - return bk - -## -# For debugging: dump the file's BIFF records in char & hex. -# @param filename The path to the file to be dumped. -# @param outfile An open file, to which the dump is written. -# @param unnumbered If true, omit offsets (for meaningful diffs). - -def dump(filename, outfile=sys.stdout, unnumbered=False): - bk = Book() - bk.biff2_8_load(filename=filename, logfile=outfile, ) - biff_dump(bk.mem, bk.base, bk.stream_len, 0, outfile, unnumbered) - -## -# For debugging and analysis: summarise the file's BIFF records. -# I.e. produce a sorted file of (record_name, count). -# @param filename The path to the file to be summarised. -# @param outfile An open file, to which the summary is written. - -def count_records(filename, outfile=sys.stdout): - bk = Book() - bk.biff2_8_load(filename=filename, logfile=outfile, ) - biff_count_records(bk.mem, bk.base, bk.stream_len, outfile) - -## -# Information relating to a named reference, formula, macro, etc. -#
      -- New in version 0.6.0 -#
      -- Name information is not extracted from files older than -# Excel 5.0 (Book.biff_version < 50) - -class Name(BaseObject): - - _repr_these = ['stack'] - book = None # parent - - ## - # 0 = Visible; 1 = Hidden - hidden = 0 - - ## - # 0 = Command macro; 1 = Function macro. Relevant only if macro == 1 - func = 0 - - ## - # 0 = Sheet macro; 1 = VisualBasic macro. Relevant only if macro == 1 - vbasic = 0 - - ## - # 0 = Standard name; 1 = Macro name - macro = 0 - - ## - # 0 = Simple formula; 1 = Complex formula (array formula or user defined)
      - # No examples have been sighted. - complex = 0 - - ## - # 0 = User-defined name; 1 = Built-in name - # (common examples: Print_Area, Print_Titles; see OOo docs for full list) - builtin = 0 - - ## - # Function group. Relevant only if macro == 1; see OOo docs for values. - funcgroup = 0 - - ## - # 0 = Formula definition; 1 = Binary data
      No examples have been sighted. - binary = 0 - - ## - # The index of this object in book.name_obj_list - name_index = 0 - - ## - # A Unicode string. If builtin, decoded as per OOo docs. - name = UNICODE_LITERAL("") - - ## - # An 8-bit string. - raw_formula = b'' - - ## - # -1: The name is global (visible in all calculation sheets).
      - # -2: The name belongs to a macro sheet or VBA sheet.
      - # -3: The name is invalid.
      - # 0 <= scope < book.nsheets: The name is local to the sheet whose index is scope. - scope = -1 - - ## - # The result of evaluating the formula, if any. - # If no formula, or evaluation of the formula encountered problems, - # the result is None. Otherwise the result is a single instance of the - # Operand class. - # - result = None - - ## - # This is a convenience method for the frequent use case where the name - # refers to a single cell. - # @return An instance of the Cell class. - # @throws XLRDError The name is not a constant absolute reference - # to a single cell. - def cell(self): - res = self.result - if res: - # result should be an instance of the Operand class - kind = res.kind - value = res.value - if kind == oREF and len(value) == 1: - ref3d = value[0] - if (0 <= ref3d.shtxlo == ref3d.shtxhi - 1 - and ref3d.rowxlo == ref3d.rowxhi - 1 - and ref3d.colxlo == ref3d.colxhi - 1): - sh = self.book.sheet_by_index(ref3d.shtxlo) - return sh.cell(ref3d.rowxlo, ref3d.colxlo) - self.dump(self.book.logfile, - header="=== Dump of Name object ===", - footer="======= End of dump =======", - ) - raise XLRDError("Not a constant absolute reference to a single cell") - - ## - # This is a convenience method for the use case where the name - # refers to one rectangular area in one worksheet. - # @param clipped If true (the default), the returned rectangle is clipped - # to fit in (0, sheet.nrows, 0, sheet.ncols) -- it is guaranteed that - # 0 <= rowxlo <= rowxhi <= sheet.nrows and that the number of usable rows - # in the area (which may be zero) is rowxhi - rowxlo; likewise for columns. - # @return a tuple (sheet_object, rowxlo, rowxhi, colxlo, colxhi). - # @throws XLRDError The name is not a constant absolute reference - # to a single area in a single sheet. - def area2d(self, clipped=True): - res = self.result - if res: - # result should be an instance of the Operand class - kind = res.kind - value = res.value - if kind == oREF and len(value) == 1: # only 1 reference - ref3d = value[0] - if 0 <= ref3d.shtxlo == ref3d.shtxhi - 1: # only 1 usable sheet - sh = self.book.sheet_by_index(ref3d.shtxlo) - if not clipped: - return sh, ref3d.rowxlo, ref3d.rowxhi, ref3d.colxlo, ref3d.colxhi - rowxlo = min(ref3d.rowxlo, sh.nrows) - rowxhi = max(rowxlo, min(ref3d.rowxhi, sh.nrows)) - colxlo = min(ref3d.colxlo, sh.ncols) - colxhi = max(colxlo, min(ref3d.colxhi, sh.ncols)) - assert 0 <= rowxlo <= rowxhi <= sh.nrows - assert 0 <= colxlo <= colxhi <= sh.ncols - return sh, rowxlo, rowxhi, colxlo, colxhi - self.dump(self.book.logfile, - header="=== Dump of Name object ===", - footer="======= End of dump =======", - ) - raise XLRDError("Not a constant absolute reference to a single area in a single sheet") - -## -# Contents of a "workbook". -#

      WARNING: You don't call this class yourself. You use the Book object that -# was returned when you called xlrd.open_workbook("myfile.xls").

      - -class Book(BaseObject): - - ## - # The number of worksheets present in the workbook file. - # This information is available even when no sheets have yet been loaded. - nsheets = 0 - - ## - # Which date system was in force when this file was last saved.
      - # 0 => 1900 system (the Excel for Windows default).
      - # 1 => 1904 system (the Excel for Macintosh default).
      - datemode = 0 # In case it's not specified in the file. - - ## - # Version of BIFF (Binary Interchange File Format) used to create the file. - # Latest is 8.0 (represented here as 80), introduced with Excel 97. - # Earliest supported by this module: 2.0 (represented as 20). - biff_version = 0 - - ## - # List containing a Name object for each NAME record in the workbook. - #
      -- New in version 0.6.0 - name_obj_list = [] - - ## - # An integer denoting the character set used for strings in this file. - # For BIFF 8 and later, this will be 1200, meaning Unicode; more precisely, UTF_16_LE. - # For earlier versions, this is used to derive the appropriate Python encoding - # to be used to convert to Unicode. - # Examples: 1252 -> 'cp1252', 10000 -> 'mac_roman' - codepage = None - - ## - # The encoding that was derived from the codepage. - encoding = None - - ## - # A tuple containing the (telephone system) country code for:
      - # [0]: the user-interface setting when the file was created.
      - # [1]: the regional settings.
      - # Example: (1, 61) meaning (USA, Australia). - # This information may give a clue to the correct encoding for an unknown codepage. - # For a long list of observed values, refer to the OpenOffice.org documentation for - # the COUNTRY record. - countries = (0, 0) - - ## - # What (if anything) is recorded as the name of the last user to save the file. - user_name = UNICODE_LITERAL('') - - ## - # A list of Font class instances, each corresponding to a FONT record. - #
      -- New in version 0.6.1 - font_list = [] - - ## - # A list of XF class instances, each corresponding to an XF record. - #
      -- New in version 0.6.1 - xf_list = [] - - ## - # A list of Format objects, each corresponding to a FORMAT record, in - # the order that they appear in the input file. - # It does not contain builtin formats. - # If you are creating an output file using (for example) pyExcelerator, - # use this list. - # The collection to be used for all visual rendering purposes is format_map. - #
      -- New in version 0.6.1 - format_list = [] - - ## - # The mapping from XF.format_key to Format object. - #
      -- New in version 0.6.1 - format_map = {} - - ## - # This provides access via name to the extended format information for - # both built-in styles and user-defined styles.
      - # It maps name to (built_in, xf_index), where:
      - # name is either the name of a user-defined style, - # or the name of one of the built-in styles. Known built-in names are - # Normal, RowLevel_1 to RowLevel_7, - # ColLevel_1 to ColLevel_7, Comma, Currency, Percent, "Comma [0]", - # "Currency [0]", Hyperlink, and "Followed Hyperlink".
      - # built_in 1 = built-in style, 0 = user-defined
      - # xf_index is an index into Book.xf_list.
      - # References: OOo docs s6.99 (STYLE record); Excel UI Format/Style - #
      -- New in version 0.6.1; since 0.7.4, extracted only if - # open_workbook(..., formatting_info=True) - style_name_map = {} - - ## - # This provides definitions for colour indexes. Please refer to the - # above section "The Palette; Colour Indexes" for an explanation - # of how colours are represented in Excel.
      - # Colour indexes into the palette map into (red, green, blue) tuples. - # "Magic" indexes e.g. 0x7FFF map to None. - # colour_map is what you need if you want to render cells on screen or in a PDF - # file. If you are writing an output XLS file, use palette_record. - #
      -- New in version 0.6.1. Extracted only if open_workbook(..., formatting_info=True) - colour_map = {} - - ## - # If the user has changed any of the colours in the standard palette, the XLS - # file will contain a PALETTE record with 56 (16 for Excel 4.0 and earlier) - # RGB values in it, and this list will be e.g. [(r0, b0, g0), ..., (r55, b55, g55)]. - # Otherwise this list will be empty. This is what you need if you are - # writing an output XLS file. If you want to render cells on screen or in a PDF - # file, use colour_map. - #
      -- New in version 0.6.1. Extracted only if open_workbook(..., formatting_info=True) - palette_record = [] - - ## - # Time in seconds to extract the XLS image as a contiguous string (or mmap equivalent). - load_time_stage_1 = -1.0 - - ## - # Time in seconds to parse the data from the contiguous string (or mmap equivalent). - load_time_stage_2 = -1.0 - - ## - # @return A list of all sheets in the book. - # All sheets not already loaded will be loaded. - def sheets(self): - for sheetx in xrange(self.nsheets): - if not self._sheet_list[sheetx]: - self.get_sheet(sheetx) - return self._sheet_list[:] - - ## - # @param sheetx Sheet index in range(nsheets) - # @return An object of the Sheet class - def sheet_by_index(self, sheetx): - return self._sheet_list[sheetx] or self.get_sheet(sheetx) - - ## - # @param sheet_name Name of sheet required - # @return An object of the Sheet class - def sheet_by_name(self, sheet_name): - try: - sheetx = self._sheet_names.index(sheet_name) - except ValueError: - raise XLRDError('No sheet named <%r>' % sheet_name) - return self.sheet_by_index(sheetx) - - ## - # @return A list of the names of all the worksheets in the workbook file. - # This information is available even when no sheets have yet been loaded. - def sheet_names(self): - return self._sheet_names[:] - - ## - # @param sheet_name_or_index Name or index of sheet enquired upon - # @return true if sheet is loaded, false otherwise - #
      -- New in version 0.7.1 - def sheet_loaded(self, sheet_name_or_index): - if isinstance(sheet_name_or_index, int): - sheetx = sheet_name_or_index - else: - try: - sheetx = self._sheet_names.index(sheet_name_or_index) - except ValueError: - raise XLRDError('No sheet named <%r>' % sheet_name_or_index) - return bool(self._sheet_list[sheetx]) - - ## - # @param sheet_name_or_index Name or index of sheet to be unloaded. - #
      -- New in version 0.7.1 - def unload_sheet(self, sheet_name_or_index): - if isinstance(sheet_name_or_index, int): - sheetx = sheet_name_or_index - else: - try: - sheetx = self._sheet_names.index(sheet_name_or_index) - except ValueError: - raise XLRDError('No sheet named <%r>' % sheet_name_or_index) - self._sheet_list[sheetx] = None - - ## - # This method has a dual purpose. You can call it to release - # memory-consuming objects and (possibly) a memory-mapped file - # (mmap.mmap object) when you have finished loading sheets in - # on_demand mode, but still require the Book object to examine the - # loaded sheets. It is also called automatically (a) when open_workbook - # raises an exception and (b) if you are using a "with" statement, when - # the "with" block is exited. Calling this method multiple times on the - # same object has no ill effect. - def release_resources(self): - self._resources_released = 1 - if hasattr(self.mem, "close"): - # must be a mmap.mmap object - self.mem.close() - self.mem = None - if hasattr(self.filestr, "close"): - self.filestr.close() - self.filestr = None - self._sharedstrings = None - self._rich_text_runlist_map = None - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_value, exc_tb): - self.release_resources() - # return false - - ## - # A mapping from (lower_case_name, scope) to a single Name object. - #
      -- New in version 0.6.0 - name_and_scope_map = {} - - ## - # A mapping from lower_case_name to a list of Name objects. The list is - # sorted in scope order. Typically there will be one item (of global scope) - # in the list. - #
      -- New in version 0.6.0 - name_map = {} - - def __init__(self): - self._sheet_list = [] - self._sheet_names = [] - self._sheet_visibility = [] # from BOUNDSHEET record - self.nsheets = 0 - self._sh_abs_posn = [] # sheet's absolute position in the stream - self._sharedstrings = [] - self._rich_text_runlist_map = {} - self.raw_user_name = False - self._sheethdr_count = 0 # BIFF 4W only - self.builtinfmtcount = -1 # unknown as yet. BIFF 3, 4S, 4W - self.initialise_format_info() - self._all_sheets_count = 0 # includes macro & VBA sheets - self._supbook_count = 0 - self._supbook_locals_inx = None - self._supbook_addins_inx = None - self._all_sheets_map = [] # maps an all_sheets index to a calc-sheets index (or -1) - self._externsheet_info = [] - self._externsheet_type_b57 = [] - self._extnsht_name_from_num = {} - self._sheet_num_from_name = {} - self._extnsht_count = 0 - self._supbook_types = [] - self._resources_released = 0 - self.addin_func_names = [] - self.name_obj_list = [] - self.colour_map = {} - self.palette_record = [] - self.xf_list = [] - self.style_name_map = {} - self.mem = b'' - self.filestr = b'' - - def biff2_8_load(self, filename=None, file_contents=None, - logfile=sys.stdout, verbosity=0, use_mmap=USE_MMAP, - encoding_override=None, - formatting_info=False, - on_demand=False, - ragged_rows=False, - ): - # DEBUG = 0 - self.logfile = logfile - self.verbosity = verbosity - self.use_mmap = use_mmap and MMAP_AVAILABLE - self.encoding_override = encoding_override - self.formatting_info = formatting_info - self.on_demand = on_demand - self.ragged_rows = ragged_rows - - if not file_contents: - with open(filename, "rb") as f: - f.seek(0, 2) # EOF - size = f.tell() - f.seek(0, 0) # BOF - if size == 0: - raise XLRDError("File size is 0 bytes") - if self.use_mmap: - self.filestr = mmap.mmap(f.fileno(), size, access=mmap.ACCESS_READ) - self.stream_len = size - else: - self.filestr = f.read() - self.stream_len = len(self.filestr) - else: - self.filestr = file_contents - self.stream_len = len(file_contents) - - self.base = 0 - if self.filestr[:8] != compdoc.SIGNATURE: - # got this one at the antique store - self.mem = self.filestr - else: - cd = compdoc.CompDoc(self.filestr, logfile=self.logfile) - if USE_FANCY_CD: - for qname in ['Workbook', 'Book']: - self.mem, self.base, self.stream_len = \ - cd.locate_named_stream(UNICODE_LITERAL(qname)) - if self.mem: break - else: - raise XLRDError("Can't find workbook in OLE2 compound document") - else: - for qname in ['Workbook', 'Book']: - self.mem = cd.get_named_stream(UNICODE_LITERAL(qname)) - if self.mem: break - else: - raise XLRDError("Can't find workbook in OLE2 compound document") - self.stream_len = len(self.mem) - del cd - if self.mem is not self.filestr: - if hasattr(self.filestr, "close"): - self.filestr.close() - self.filestr = b'' - self._position = self.base - if DEBUG: - print("mem: %s, base: %d, len: %d" % (type(self.mem), self.base, self.stream_len), file=self.logfile) - - def initialise_format_info(self): - # needs to be done once per sheet for BIFF 4W :-( - self.format_map = {} - self.format_list = [] - self.xfcount = 0 - self.actualfmtcount = 0 # number of FORMAT records seen so far - self._xf_index_to_xl_type_map = {0: XL_CELL_NUMBER} - self._xf_epilogue_done = 0 - self.xf_list = [] - self.font_list = [] - - def get2bytes(self): - pos = self._position - buff_two = self.mem[pos:pos+2] - lenbuff = len(buff_two) - self._position += lenbuff - if lenbuff < 2: - return MY_EOF - lo, hi = buff_two - return (BYTES_ORD(hi) << 8) | BYTES_ORD(lo) - - def get_record_parts(self): - pos = self._position - mem = self.mem - code, length = unpack('= 2: - fprintf(self.logfile, - "BOUNDSHEET: inx=%d vis=%r sheet_name=%r abs_posn=%d sheet_type=0x%02x\n", - self._all_sheets_count, visibility, sheet_name, abs_posn, sheet_type) - self._all_sheets_count += 1 - if sheet_type != XL_BOUNDSHEET_WORKSHEET: - self._all_sheets_map.append(-1) - descr = { - 1: 'Macro sheet', - 2: 'Chart', - 6: 'Visual Basic module', - }.get(sheet_type, 'UNKNOWN') - - if DEBUG or self.verbosity >= 1: - fprintf(self.logfile, - "NOTE *** Ignoring non-worksheet data named %r (type 0x%02x = %s)\n", - sheet_name, sheet_type, descr) - else: - snum = len(self._sheet_names) - self._all_sheets_map.append(snum) - self._sheet_names.append(sheet_name) - self._sh_abs_posn.append(abs_posn) - self._sheet_visibility.append(visibility) - self._sheet_num_from_name[sheet_name] = snum - - def handle_builtinfmtcount(self, data): - ### N.B. This count appears to be utterly useless. - # DEBUG = 1 - builtinfmtcount = unpack('= 2: - fprintf(self.logfile, "*** No CODEPAGE record; assuming 1200 (utf_16_le)\n") - else: - codepage = self.codepage - if codepage in encoding_from_codepage: - encoding = encoding_from_codepage[codepage] - elif 300 <= codepage <= 1999: - encoding = 'cp' + str(codepage) - else: - encoding = 'unknown_codepage_' + str(codepage) - if DEBUG or (self.verbosity and encoding != self.encoding) : - fprintf(self.logfile, "CODEPAGE: codepage %r -> encoding %r\n", codepage, encoding) - self.encoding = encoding - if self.codepage != 1200: # utf_16_le - # If we don't have a codec that can decode ASCII into Unicode, - # we're well & truly stuffed -- let the punter know ASAP. - try: - _unused = unicode(b'trial', self.encoding) - except BaseException as e: - fprintf(self.logfile, - "ERROR *** codepage %r -> encoding %r -> %s: %s\n", - self.codepage, self.encoding, type(e).__name__.split(".")[-1], e) - raise - if self.raw_user_name: - strg = unpack_string(self.user_name, 0, self.encoding, lenlen=1) - strg = strg.rstrip() - # if DEBUG: - # print "CODEPAGE: user name decoded from %r to %r" % (self.user_name, strg) - self.user_name = strg - self.raw_user_name = False - return self.encoding - - def handle_codepage(self, data): - # DEBUG = 0 - codepage = unpack('= 2 - if self.biff_version >= 80: - option_flags, other_info =unpack("= 1 - blah2 = DEBUG or self.verbosity >= 2 - if self.biff_version >= 80: - num_refs = unpack("= 2: - logf = self.logfile - fprintf(logf, "FILEPASS:\n") - hex_char_dump(data, 0, len(data), base=0, fout=logf) - if self.biff_version >= 80: - kind1, = unpack('= 2 - bv = self.biff_version - if bv < 50: - return - self.derive_encoding() - # print - # hex_char_dump(data, 0, len(data), fout=self.logfile) - ( - option_flags, kb_shortcut, name_len, fmla_len, extsht_index, sheet_index, - menu_text_len, description_text_len, help_topic_text_len, status_bar_text_len, - ) = unpack("> nshift) - - macro_flag = " M"[nobj.macro] - if bv < 80: - internal_name, pos = unpack_string_update_pos(data, 14, self.encoding, known_len=name_len) - else: - internal_name, pos = unpack_unicode_update_pos(data, 14, known_len=name_len) - nobj.extn_sheet_num = extsht_index - nobj.excel_sheet_index = sheet_index - nobj.scope = None # patched up in the names_epilogue() method - if blah: - fprintf( - self.logfile, - "NAME[%d]:%s oflags=%d, name_len=%d, fmla_len=%d, extsht_index=%d, sheet_index=%d, name=%r\n", - name_index, macro_flag, option_flags, name_len, - fmla_len, extsht_index, sheet_index, internal_name) - name = internal_name - if nobj.builtin: - name = builtin_name_from_code.get(name, "??Unknown??") - if blah: print(" builtin: %s" % name, file=self.logfile) - nobj.name = name - nobj.raw_formula = data[pos:] - nobj.basic_formula_len = fmla_len - nobj.evaluated = 0 - if blah: - nobj.dump( - self.logfile, - header="--- handle_name: name[%d] ---" % name_index, - footer="-------------------", - ) - - def names_epilogue(self): - blah = self.verbosity >= 2 - f = self.logfile - if blah: - print("+++++ names_epilogue +++++", file=f) - print("_all_sheets_map", REPR(self._all_sheets_map), file=f) - print("_extnsht_name_from_num", REPR(self._extnsht_name_from_num), file=f) - print("_sheet_num_from_name", REPR(self._sheet_num_from_name), file=f) - num_names = len(self.name_obj_list) - for namex in range(num_names): - nobj = self.name_obj_list[namex] - # Convert from excel_sheet_index to scope. - # This is done here because in BIFF7 and earlier, the - # BOUNDSHEET records (from which _all_sheets_map is derived) - # come after the NAME records. - if self.biff_version >= 80: - sheet_index = nobj.excel_sheet_index - if sheet_index == 0: - intl_sheet_index = -1 # global - elif 1 <= sheet_index <= len(self._all_sheets_map): - intl_sheet_index = self._all_sheets_map[sheet_index-1] - if intl_sheet_index == -1: # maps to a macro or VBA sheet - intl_sheet_index = -2 # valid sheet reference but not useful - else: - # huh? - intl_sheet_index = -3 # invalid - elif 50 <= self.biff_version <= 70: - sheet_index = nobj.extn_sheet_num - if sheet_index == 0: - intl_sheet_index = -1 # global - else: - sheet_name = self._extnsht_name_from_num[sheet_index] - intl_sheet_index = self._sheet_num_from_name.get(sheet_name, -2) - nobj.scope = intl_sheet_index - - for namex in range(num_names): - nobj = self.name_obj_list[namex] - # Parse the formula ... - if nobj.macro or nobj.binary: continue - if nobj.evaluated: continue - evaluate_name_formula(self, nobj, namex, blah=blah) - - if self.verbosity >= 2: - print("---------- name object dump ----------", file=f) - for namex in range(num_names): - nobj = self.name_obj_list[namex] - nobj.dump(f, header="--- name[%d] ---" % namex) - print("--------------------------------------", file=f) - # - # Build some dicts for access to the name objects - # - name_and_scope_map = {} # (name.lower(), scope): Name_object - name_map = {} # name.lower() : list of Name_objects (sorted in scope order) - for namex in range(num_names): - nobj = self.name_obj_list[namex] - name_lcase = nobj.name.lower() - key = (name_lcase, nobj.scope) - if key in name_and_scope_map and self.verbosity: - fprintf(f, 'Duplicate entry %r in name_and_scope_map\n', key) - name_and_scope_map[key] = nobj - sort_data = (nobj.scope, namex, nobj) - # namex (a temp unique ID) ensures the Name objects will not - # be compared (fatal in py3) - if name_lcase in name_map: - name_map[name_lcase].append(sort_data) - else: - name_map[name_lcase] = [sort_data] - for key in name_map.keys(): - alist = name_map[key] - alist.sort() - name_map[key] = [x[2] for x in alist] - self.name_and_scope_map = name_and_scope_map - self.name_map = name_map - - def handle_obj(self, data): - # Not doing much handling at all. - # Worrying about embedded (BOF ... EOF) substreams is done elsewhere. - # DEBUG = 1 - obj_type, obj_id = unpack(' handle_obj type=%d id=0x%08x" % (obj_type, obj_id) - - def handle_supbook(self, data): - # aka EXTERNALBOOK in OOo docs - self._supbook_types.append(None) - blah = DEBUG or self.verbosity >= 2 - if blah: - print("SUPBOOK:", file=self.logfile) - hex_char_dump(data, 0, len(data), fout=self.logfile) - num_sheets = unpack("= 2: - fprintf(self.logfile, "SST: unique strings: %d\n", uniquestrings) - while 1: - code, nb, data = self.get_record_parts_conditional(XL_CONTINUE) - if code is None: - break - nbt += nb - if DEBUG >= 2: - fprintf(self.logfile, "CONTINUE: adding %d bytes to SST -> %d\n", nb, nbt) - strlist.append(data) - self._sharedstrings, rt_runlist = unpack_SST_table(strlist, uniquestrings) - if self.formatting_info: - self._rich_text_runlist_map = rt_runlist - if DEBUG: - t1 = time.time() - print("SST processing took %.2f seconds" % (t1 - t0, ), file=self.logfile) - - def handle_writeaccess(self, data): - DEBUG = 0 - if self.biff_version < 80: - if not self.encoding: - self.raw_user_name = True - self.user_name = data - return - strg = unpack_string(data, 0, self.encoding, lenlen=1) - else: - strg = unpack_unicode(data, 0, lenlen=2) - if DEBUG: fprintf(self.logfile, "WRITEACCESS: %d bytes; raw=%s %r\n", len(data), self.raw_user_name, strg) - strg = strg.rstrip() - self.user_name = strg - - def parse_globals(self): - # DEBUG = 0 - # no need to position, just start reading (after the BOF) - formatting.initialise_book(self) - while 1: - rc, length, data = self.get_record_parts() - if DEBUG: print("parse_globals: record code is 0x%04x" % rc, file=self.logfile) - if rc == XL_SST: - self.handle_sst(data) - elif rc == XL_FONT or rc == XL_FONT_B3B4: - self.handle_font(data) - elif rc == XL_FORMAT: # XL_FORMAT2 is BIFF <= 3.0, can't appear in globals - self.handle_format(data) - elif rc == XL_XF: - self.handle_xf(data) - elif rc == XL_BOUNDSHEET: - self.handle_boundsheet(data) - elif rc == XL_DATEMODE: - self.handle_datemode(data) - elif rc == XL_CODEPAGE: - self.handle_codepage(data) - elif rc == XL_COUNTRY: - self.handle_country(data) - elif rc == XL_EXTERNNAME: - self.handle_externname(data) - elif rc == XL_EXTERNSHEET: - self.handle_externsheet(data) - elif rc == XL_FILEPASS: - self.handle_filepass(data) - elif rc == XL_WRITEACCESS: - self.handle_writeaccess(data) - elif rc == XL_SHEETSOFFSET: - self.handle_sheetsoffset(data) - elif rc == XL_SHEETHDR: - self.handle_sheethdr(data) - elif rc == XL_SUPBOOK: - self.handle_supbook(data) - elif rc == XL_NAME: - self.handle_name(data) - elif rc == XL_PALETTE: - self.handle_palette(data) - elif rc == XL_STYLE: - self.handle_style(data) - elif rc & 0xff == 9 and self.verbosity: - fprintf(self.logfile, "*** Unexpected BOF at posn %d: 0x%04x len=%d data=%r\n", - self._position - length - 4, rc, length, data) - elif rc == XL_EOF: - self.xf_epilogue() - self.names_epilogue() - self.palette_epilogue() - if not self.encoding: - self.derive_encoding() - if self.biff_version == 45: - # DEBUG = 0 - if DEBUG: print("global EOF: position", self._position, file=self.logfile) - # if DEBUG: - # pos = self._position - 4 - # print repr(self.mem[pos:pos+40]) - return - else: - # if DEBUG: - # print >> self.logfile, "parse_globals: ignoring record code 0x%04x" % rc - pass - - def read(self, pos, length): - data = self.mem[pos:pos+length] - self._position = pos + len(data) - return data - - def getbof(self, rqd_stream): - # DEBUG = 1 - # if DEBUG: print >> self.logfile, "getbof(): position", self._position - if DEBUG: print("reqd: 0x%04x" % rqd_stream, file=self.logfile) - def bof_error(msg): - raise XLRDError('Unsupported format, or corrupt file: ' + msg) - savpos = self._position - opcode = self.get2bytes() - if opcode == MY_EOF: - bof_error('Expected BOF record; met end of file') - if opcode not in bofcodes: - bof_error('Expected BOF record; found %r' % self.mem[savpos:savpos+8]) - length = self.get2bytes() - if length == MY_EOF: - bof_error('Incomplete BOF record[1]; met end of file') - if not (4 <= length <= 20): - bof_error( - 'Invalid length (%d) for BOF record type 0x%04x' - % (length, opcode)) - padding = b'\0' * max(0, boflen[opcode] - length) - data = self.read(self._position, length); - if DEBUG: fprintf(self.logfile, "\ngetbof(): data=%r\n", data) - if len(data) < length: - bof_error('Incomplete BOF record[2]; met end of file') - data += padding - version1 = opcode >> 8 - version2, streamtype = unpack('= 2: - print("BOF: op=0x%04x vers=0x%04x stream=0x%04x buildid=%d buildyr=%d -> BIFF%d" \ - % (opcode, version2, streamtype, build, year, version), file=self.logfile) - got_globals = streamtype == XL_WORKBOOK_GLOBALS or ( - version == 45 and streamtype == XL_WORKBOOK_GLOBALS_4W) - if (rqd_stream == XL_WORKBOOK_GLOBALS and got_globals) or streamtype == rqd_stream: - return version - if version < 50 and streamtype == XL_WORKSHEET: - return version - if version >= 50 and streamtype == 0x0100: - bof_error("Workspace file -- no spreadsheet data") - bof_error( - 'BOF not workbook/worksheet: op=0x%04x vers=0x%04x strm=0x%04x build=%d year=%d -> BIFF%d' \ - % (opcode, version2, streamtype, build, year, version) - ) - -# === helper functions - -def expand_cell_address(inrow, incol): - # Ref : OOo docs, "4.3.4 Cell Addresses in BIFF8" - outrow = inrow - if incol & 0x8000: - if outrow >= 32768: - outrow -= 65536 - relrow = 1 - else: - relrow = 0 - outcol = incol & 0xFF - if incol & 0x4000: - if outcol >= 128: - outcol -= 256 - relcol = 1 - else: - relcol = 0 - return outrow, outcol, relrow, relcol - -def colname(colx, _A2Z="ABCDEFGHIJKLMNOPQRSTUVWXYZ"): - assert colx >= 0 - name = UNICODE_LITERAL('') - while 1: - quot, rem = divmod(colx, 26) - name = _A2Z[rem] + name - if not quot: - return name - colx = quot - 1 - -def display_cell_address(rowx, colx, relrow, relcol): - if relrow: - rowpart = "(*%s%d)" % ("+-"[rowx < 0], abs(rowx)) - else: - rowpart = "$%d" % (rowx+1,) - if relcol: - colpart = "(*%s%d)" % ("+-"[colx < 0], abs(colx)) - else: - colpart = "$" + colname(colx) - return colpart + rowpart - -def unpack_SST_table(datatab, nstrings): - "Return list of strings" - datainx = 0 - ndatas = len(datatab) - data = datatab[0] - datalen = len(data) - pos = 8 - strings = [] - strappend = strings.append - richtext_runs = {} - local_unpack = unpack - local_min = min - local_BYTES_ORD = BYTES_ORD - latin_1 = "latin_1" - for _unused_i in xrange(nstrings): - nchars = local_unpack('> 1, charsneed) - rawstrg = data[pos:pos+2*charsavail] - # if DEBUG: print "SST U16: nchars=%d pos=%d rawstrg=%r" % (nchars, pos, rawstrg) - try: - accstrg += unicode(rawstrg, "utf_16_le") - except: - # print "SST U16: nchars=%d pos=%d rawstrg=%r" % (nchars, pos, rawstrg) - # Probable cause: dodgy data e.g. unfinished surrogate pair. - # E.g. file unicode2.xls in pyExcelerator's examples has cells containing - # unichr(i) for i in range(0x100000) - # so this will include 0xD800 etc - raise - pos += 2*charsavail - else: - # Note: this is COMPRESSED (not ASCII!) encoding!!! - charsavail = local_min(datalen - pos, charsneed) - rawstrg = data[pos:pos+charsavail] - # if DEBUG: print "SST CMPRSD: nchars=%d pos=%d rawstrg=%r" % (nchars, pos, rawstrg) - accstrg += unicode(rawstrg, latin_1) - pos += charsavail - charsgot += charsavail - if charsgot == nchars: - break - datainx += 1 - data = datatab[datainx] - datalen = len(data) - options = local_BYTES_ORD(data[0]) - pos = 1 - - if rtcount: - runs = [] - for runindex in xrange(rtcount): - if pos == datalen: - pos = 0 - datainx += 1 - data = datatab[datainx] - datalen = len(data) - runs.append(local_unpack("= datalen: - # adjust to correct position in next record - pos = pos - datalen - datainx += 1 - if datainx < ndatas: - data = datatab[datainx] - datalen = len(data) - else: - assert _unused_i == nstrings - 1 - strappend(accstrg) - return strings, richtext_runs diff --git a/webhub/xlrd/book.pyc b/webhub/xlrd/book.pyc deleted file mode 100644 index bf220c9881c8e9b7efc392b503a4575c2d3d32c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35680 zcmcJY3vgW5dEd`2UIYlfpCBn|DTyMe2PIMzB~z3ok^m*zBuHP7qC`_!1K0(*BDf3e zU67znrmm&5&dY6`)=iy9V>@x2G?~~l?xaoRJep1$r<%5TxYK0fM#;o+J#{-tnl#f% z8~6ABpL=%!in2w|lmrgWJ@5OS?|iTGopZbX=Zb+tUwr<|RLK4f@b{Te2kifK@N!Q$*W-#L_J(u4dAu*2>kF#Z z6K0l$%l+Y8e{8VV&jaDyK)ZwGv4cM642E-qp-}A&FRutMuMCxC;gv#Y{!HHPs&H;q zsE1JP4==9{=T?UbO|MZ;=hiyDE-$%0oLe8RZOk7xgmW8QY-2cE-xRv5o5H1m&@2}C zr#3c*dLg_}-5Abo4i$zs6slW7Wx0Ak&r5C%=eC7&cZ73yhI4m?%3!Fh2o;96DpVK) z1EBYHVR~6OR|+-K*N4i6u)jk0oA^VML;Rt^t^C;*DtGYb&QQ6FKc!IF&Y!zORbbjtp)e@qP^df_s=LE?S&PaFthe0{1_Yt(B>kC}?yKNjOX#M6t_YAZhW@i^7EJX>i@#RM&h=|=PNM5|S+ zUufy^ShG<-b**)gHhBuQpZ256} zWn`i?F*%VH>T%MMX026i)?x>}ZtRrd)9$seHAvN%c)He_sitmmnX4z&sYbI>Z91vn z<5MT)qkzU~1FaSLm=6K(E4+}?m$z2s=_6G}*~uAfEhlGOurJ5{^zJKMzI?Pc!*KKW zm=Zh$u66t#5rH}Zfog^DazPk$qd&BYp}8-#y28udP8kT-S3=X>=chkxrpYp;XqX`lXl>nC5w5QY=@$ZT3n3xpLj?_lMBsg?FErn9*75)VNgUd^ zxQN~h~TPlsXH{kwrDJ?U298tr7ILPX$-xms0r;UYKphI`MI8=^4drM zNcb6yldui4zCJ+AHQ+m3{zJhuU86i!>?CV0mP0_+fLde5_37G7wLWpVYK+!Hd8$!w zRqL(P%WbA{L5W@iSE|j)Mp|oKbH(|zTE2XFVwTx}CDo@I6-Y+8L7`@?QZ-_CNJ+U? zpKiF3M!j6AUY@8|ydatr7cNvQEN6OESCgaCWj*UB6-IZI_ z1z1_Lak*TdzuX>0IYR)Cb=v%HI@v^1ep63JvQ3X038p75Rm&G<8k5XYnZcC}TqF7H zL=)7_^4xmNENdC0e*3XTy=wf-a%O62%Uq=0Qp(Z{fu-Zo)Z^3{5)q=e1l3-rHmftR zzG}HyO&jygscJebVxNd%`gM}ciVZ2yn9JU_uB5O2j7s?l=%K1!c zdM7W%5_^&d^U~?Xn6y_cIygwx-osZWE;J|Vt%t8xCoj%VKD;o~tUN4K-93BF!)?Hn z%Q^m*7iQ8CYNZg85PAm-y#@WQF7y|=_#G^)k=n)oHAV7^y_D)J zt|o7=I6&^|;yV7`MQjCix2m1u3QDQX!NMBq4NzXWQv$ecUDHshSL#;!I|;F^k4hI#7)$CYj1}y0e3$2rT73@$);>yO(%KYV7 z&;I4=Wn+tk4`WB#La4c11}og68#I12=3Azs5~$|uAoXOmS*;`odAyzJ&@k2eNBNs- zcma5AEKF(21s$z;L*{8B8Ds!J@vR_32B09c3;<-12VUvUV4?;W!Q^IeXbl@2Q;m59 z&!$DDG&xLiazw!h!LS;MaMfhp_6tkOTGIZHkg({@<6>pmPLb|^0>xp;OdljtMV2^ zf4VK5uM1UlpB~HZ8$vQZEL1ghf>cgjGFmY$2*#4#r^GZgi^2*|+g}s84vPn&!DA$# z*A;@+H<(2tMI(AqlAi>e*G23>X-35$V+xN9Z|DZ^X(5kE?e0RDYP>9w?`6O8W{TE} ztd8avort_gmLZ_5EEUO*RKp@qWoQT(2!B?7>GlRF(<5zFDY2P;iD=_vE z2HY4M;{y1|r3DrzK`ywi;aazkE})Tc_L^@>Vs(WsdIrF+#2!oq|YFcVWJI*DE~->R0H)oE5{ zeF{d~pg@X9GgB=g5X@L)ayQWJ`I(kc?@|ppMyu}1#LRqToQ-7kX!00IE(_INm}#`5 z7i+PF#??F($!8%;oodYFsfv=S^)6Cu1LQ-4n*8oWyL504s&iC>qj2 z2xAs?@+{>p%hPFv^wq9{QbZNPScPSiXQ>Jci?`^@R_DF~YF1pRMBOxt){8WKS_+Sr z2<7{;LX`pvLM%_z?Y7G|vhpO;KJ8MA(t5GE4@<)kVAeVWJlKqGUY5|XZ?-Ix6HIEp z%HC>0CS!{VY1!R!DUML+_LkxV9JW-ech;tt#ju5^leE^s^d!-vR$?-);Ix7l6`WIW zM#1w6&MJ6;ATo8#C|c2V=_D~_Vj-rmDpN1TLup!V%FJSM_U08Ryid-nJ(2&ZncD0u zy#6JnwwGb@9eUIXywyN%V^x}-2q=3iD_COb{WN*=+T4INbr-AiPX9hqc%(3tt<$k# zNtjmW$`*giWeYOp^5sTl9$l~;rQl|Dwpm8yNUMpcr@`o+FV-p*WMB~^o1R3muOJWA zrVO&n6I0Db1OsNK8OWAEGC7aE129XXQmqTk#{8_Co2=C*n%6u83F8^5lTGE!*s&ug zM@GxXkDVS(4jp%oR$B$_=ET*qbj|sh33r=LA+#n&2N5k7KHZ$JCI|$JNS?v`ErsCZ zT~zuEzv6{^@^ zvE=fa_xSPNQ1uU18<|UY$Y!ka_sIyN$WGah6~WZI#t|C1U*_ajdF2OWR8}sg-}R1Q zPu<`MR^W|}U`yTP2%11!rbb>&sn7v z!=2+c>6(}>+%EZv%I~K|ewNWlKonR} zSRd7rC9fwhk@yqPmao$0&^tBBh&ZN6Oq*w_)PBQ{rN7voOhL7a zU*Vf4^ZySxD-lBs&VxLRdzHR5`U{-N2NnEn1zHFWfVTDI@+0?eta= zkI*K;{=!raX8kpoyNLkfoZ73_x7D-xSQ)D)Du22B=NdvrQ`Ccg+g)m*X!!?Eh(WHr zxF_m2h~~QUBw7}(E=-kM*Jk6chaRGOFAnLf$=jiRLVm`%P-~UTf4OLw8iIZ`YC~ol zPsj!l0kcRUPXQAnZg%A<78_N#N3w+?z0x=ou_;Fp>{$p6M9^0O06Y5hnKfj~mh#wd zi}kV4#K`Kr4~vv4vo=pzmv^>4k04vdk!{S&AX~Qy9|?q{b{q*?wkWYIr+|CcBZpYBMS`+FyZqPu6DGud?)$Tl&iwd&;wo zw4QvAs(!D6-2`Tr(j?f}YMNczydE37SZT5^hN07GnF2F?xfRo-MAhoGR&9dCRJAHH z(TZDM9?!(gOl&628WBd8*{qUrCnm+kD}K>VXX{3r7q$9Aqyu^Ri3&SyFRm!t~6%ae~i9w`FlDcy=XV0-6fy@%sHYi!opjtp`{BrJKI2!kcB zq{h?a?^50S{vNS?6Wl>+P+P&nf>&;DuApDDAtGAj4rV9Vi^5YNnwCx27N%oqb(XfS zp`f}IYD6;l-K2ke)FiG_O=7v+!;(y;n~R>k`TxKz(%xJO+9yd%Bh_E8a5)-bpcQTt zL3kv>O6duWt=iJjBe|AU%H+nyjENN!4q2pQ$RT3BoAwo;RmeuHHQ3JI`;1IVn0YX2 zvF2GgB+5vHd5cAV1H)81&n!)Q#T1mi_s6{_Z)01wT@S733e7KT(_ZFYYO?drkg3w+ zL>a|oU@K$cqG=+l146S(u5n3cv7<-U%d4cv#4=}D$nSZfj!+k0cU4ds8`fiij9#tF zDx##8TI;n7e~AH|uuYFHX&s-X%>`w#74JS!V-3Yfp;1TEpN^+<>YeK}CvlojoH{0&7BapZn z6GB{h@kQXQ8&05}rx(m*Me=1srM5sgy`|-VU(s|6oa5Z^SAOme_Pt#G<(5 zpW(YH*V#`sMLBWe(5dpF=MNn_e(3P=(YVE`=5F3y6{FF%ryEPF)k}`FWNqI?mY?kU zAc;Vo;d>xE)S)9sM#sm?$>^bxM5M@jU@nb;t`cpLN0i=0U;$?Q*t27YPM=9eO}|Xz zj_~dyjVZIMGvlM>qldGL=du$*N8eQrx&nJ}|R0%MDcHzj?)iXzuX^46Qz z>B}RKp0;-618odZ5rPEEe7q=* zX)DYn?7h#)RzFU;^WHaNONjY^k3!ZM%RBX8c6K;du0*v=k)kQ)7kG>k!(+ruwNAWP z9zA)~5IOwf>Cy4>$z&w%d7oDi;Rx%;>cQl^d{nMR!#0aw&qjE5`qa@ydmp_`Yz&GlU)&@bfZ& z3dno&Ur~S_VJ!irN30hK z*@f0c(+c@E-3DoBles7pmT~22rPl;AEs7|vmDrD5BYzQ1g_cqqVpn+(${`L}`q0LD zmk>@61KW&w;7=Q3-QM5^4D7BWejJwcBdnv$<7y(W1DJpy@)>DFGYA@dNOOju1~Ik- zf~E&ihY?_-ViTVQt)vaxzo}gI-pK|Tcv+T!IxBp-?xj2 z+bAj?vKYAX2CSHCOw4>pfX?;&{zA#9nE_j`Ahy!BJbjRd2y9Gv*hqjet22`?5n%Q> z7l2_27Qni4xusi1Qi^J7*x0mGr-n=pw4196G{)q3nQIqULJQI^&lE%qE`)cercsgD@Rvyi(+IK59c%ZnfNSl=>^}LZ9z7j9iJ38HK5paBjgFp9 zglOiZ<5HEPdF%74V|$h$66Z{`KfNfQHr#*A1m2@>9V|rb?F!#=Iw$j$}Q%%9M zqo>P;@c4n`XLwGf#4bvVGg)txp0c$p`9-pm*A&>o=xLJxnrPui>1*khg5@ovL%neu z3nke{d!G=92Z@AYZ@3%Jhu*NG16G07VDmNJzQ~Y_C{kn~<1oiE$B({(%Y$S52KK z*siWuOmF<6ogEmrWyeax%(CX~fbC(r_>907i8U^O+5gp%SZmN)BL>`d3hG@K5o^6P z;A`#`J64`$u*k-qgO;GkZ4$Ab(f24j%1VFl`OQT$xz0w|yMSc-C{12@3YTj8P48%C9@-R)_>J_zPxLaA8(ykqaC0N`bHaNA2Me(T}%}92P{d&sHi7F7+g{)ssJ+iRlk-ZB8CS)h%1`#vO zCyro}Z>8(#WGxqMWlV``$LzEdid3v-YH}qo{>Nxwts_KpU zL-NRVckw-~_mvpVuzD}W-b+uRB<~s+HW3sT^a{qEu6Cu01o_!qfh8>X$+DeDYq( z*qJB4Tt0=Se{sB?r%E-QYFbWBVcNGr>g+gukwXqxC?{peaEG50?K{qBq$bJvd8jbh zC2h4A$DDON{l&ZB%!7qHiyMj?;M-l~OZ;C=tdIW#Xu2_d9UAZI?7zj_T>3KQJffFI zDTA{>P#}n1rcuO(q#)o{x?cd&x@F}q$O* z=GgJm$HtDHIDLd=cN)V>b0BI~n&F!;D)~pGE!x)81jRHWZ&x;z86pR0bRWv~;jaj) z5@SNw7ML*Z(2{MmmNoH)$k#~G>q3UHJUXKH#KErLGzb`laA{d+elVwI2>cXIOtUEu zwT?#9$W5p@x4j_H(Mp6QTX~TtZZC-M#5zzhjIb1~f5J&9VV)F_?ow}Pe$w<2ah7SR z<2qud5}o?~r6_Rj(bxPU?PQ$o4x{25= zBmlO=aB-l-iYYb%Hm*W;Cl$Z@4~0NuFCa~-{OZvBBe^Xq4r7YuSIV!EH;{NX!)Hs? zr@UgElI%($HY>sJKJN{lJnT0 z(QFe*wi->6lZiRSTh~z&J5m`>2cQHY?Dkfgmv{0jf}xm6 z(&iZ^)ZR#HL)3dnc^wmNn28C4`CCTe%_m@fRh^WYm2EQlf?A$ducANcEcbQg#&{l^yas&e z2`z-kfuNpBL=NOsdbXJ1L%rIdO3ypboGLzo8(0!DsATL)6Wy_}@DOaMvcJ<2ZQV9& z)if%SR%s$jQ@MyYhL?2as6tB4F}m3ftGdaQ%JR~gdE9)gk41DlaFpuPhNA{`ZJWR- zRwci={xDR$_ZFa(yYMYQ+2QHwt_(MtPcPDrZes2NXKzT~qqWt6pWRX7S(RI`dokXT zL#IbiK#&ed)~q6?Rz-axsbEpaW}Z_H%|bL-{i0%qXNOJ*f~F>UJ2!)~|2Dy?{izI` zd6V~a;JHN$6N|r5QzC-Mhb4l4t$|?CMb$7WA}pa?Wta(0vN4LT^(z9USU#MnJCxvo z=W{zM&(a+MFnEZT#E-arK?P70!Dgr5g<7Z{$nFb6$d^(tKjNf#G$ATFLU=OhFDgm+ z{YEu0){|yMPw02}<)h!t{fhXVDS+N+%uFeAJfY{o=Z;yI=@4`i`Sb{Rqc7k;JvMge z1e2L^Oi-!{ic4d9X5vC>rDfkjsiD)let2TRZj91%*zRvm5E+Q(vCj0G7ijfx{#nP{ zWCVudT7)lmEL_PaRAdDKM?ZZy^w7x2v9aWnq$F=BXyZvV=bTrX7MUgR$(f0ZHoY~> zC(0hMh4}`K>2j=_ZX~a(N~$Vi9v<=SEY3Al%CL#LI8aEdx?lJdZD||8ry->Etq}8d z{MTW|u83U{I@3SVPscNTKPHXqq;FvPhZ}38W8S^ymZ-|^rTjWIgWFZ$6I;c0Giaj7+#=C!UyK`4{Lja?s z^{7OAq{#4cB_jRdB6tH7)IVKdR{`LhR07VXBw~2k;XBiGomE+){Yl#L`4SYrlLtzX zl34LC)vI_I>KMB>u^ud4oVWsus0_fBLO4;w8vuFu$jLEu#xtXt<$ZDeD3eD^%yZ8@ zXC--2{_x}zyAG5t$(*ql$vu|NpQdYwfYH{Vq{rk7po8(zIO3FnxbbrMaHe^y6DsxA*QaY0yPsL-7%r`j}m^He6yH7uj&sL{u)7WidPxvk%#>-=2 zXA6@WuqqL7l01Fua@)5@8AaA^orALY3@Gp5xl}6cc(hWQ!d8T%gRMF>!+02*j?e8_ zDouWjvQgtUvu#u3Xz*^+)Z{-=&Rz=IJIArOrl#4(6CUTHi-3T=*NQ>h z8{F%zk^^)7D65rT7#g=Xn; zdckI*+u;*yskekr7z3UVqmZB$U=OP>>4;ryDXipgFKj};>oDMGPj@9x>&TNCM~0x7 zyQNFaWgTa=qQS=|pTa%VxPx-NVH?^-CTB~S(XWM>9SBWY(q8@I6&q~Tz~q{5r$bmE zD7G9!Yp^Suk4Pamf06JlBT&)xpw`GKZU%aonYs&+lzLkZDkP?a!19ygG!j*4sSxhU z1f(b$LD3MTAl>wZSsGKp+}eVw!c3^Tw$N$Zb_UzgX&(|yo3YRzip0T&>RX)%x1{F( zk}*Mv6oamFCNp*gxkWs}l0`pr8>B>lQIKk06Lw`9r-_Twk|pk=$BttY7#}|{UORC?iL0yU~$%f%%;u`g!vC=`29TLeobpUK$yL@8}m zykC?*aj(*a^e(coPh{ra(&*TcA5*pP?vh=`9EOHTLgk zn!brBFF7j8R8RvBjv;<(t#ny5V;z9W!d@ahaVuva+sA1OK!_g*F-R*>P61G_uqkC} z1=*wRb&Xg8rrm%y^FunAPe04NA8q58_ovBN9u}U}5i$;s#k+ zBmHE3xUoS?sx9_pxy4SdTuvD(k`1px1e+W*h6thvOYlbutqp!X&J*I8$P3duqqByR zoj7LGhimR6ZO|VA5yRXRntxcpSqcBk>(u0?B1S_NEt1Z;!#kC}k+XOLom?Udg}Fa; z8*ZS?TOi+T2zO~Hbc{Sm^p3dz;$*kBSo$4CeYZBAW=u#LNcS6=&%`na#=BLNhS0UY9$3) zHAzFUUjhH4UN);oUGY^D7F)X8ldksO9hH|3aLrMsrpez?s)=qI zL3?|!G<|tyqWysCB3Ewvf;rdRY0$j_rf+jmJTq)~8pbiFn`$}?9CcZUS2VS_ zMm$j*sj7%_tRcwyfN^IAVuoxG@*w5Bv1h{-J6YM=b*3j~^;4^T8o4uBF;lW{Je=H_ zx8V|rH%ne$QQB`Qc$b0~6+EWkQwru3yrEzvZ)kysy)hr-5h~e_Z^_=&SsZP1|ZSICvv7`u0lmoe1e2Qc6d_2aa(X6M6H|%QBK;TQHlp%z?Se=>0FLIVQSdz}! zzSewNoJ=eP}^VJyyVhLQOqZP-~bokWMFa^*q0*BPk%awj2Do$3)R6 z@5V9B>pIprCcO=>(aYQLQas=Ugu0LI!v_G=12e-YdUR>x+$X}>h3~NWFayacyT>g7 z2{2d{($BkNHr)Q8F!y=$R?^pm=KshZWssm{`bH*#vttjz20~FEG0*X!IbYOdV#tUS z$iy#T&hJdg{kQBNF@ah(pU^y~scCs%@vNHiMI;#x@oKOJ1TTdHVd1ljTmIxNTlOIl z31+q`X}(v6X~YYJCw`bGHeA126d;iUzgmO>Y9xp=gVq@YOkSDs4`OCHIr7qz9tXLDOeeA&^2tzO zu!ReByAlLO*0bP<7B!?>CMVqsLzz3&bylNd6N_^tv_OP=86>@IV2x(VjJE0?&_DCz zwC(C$a$@A+KSY_Rwaa0`(gx5aCMTH4jsHfm|EoaaQ0*vzNqBl6u?|CbC;8<|zFMi1 z7exh;5Ym=N2RAj+sq*HS%|;{h?EOu_T2OS@CeijMCKii52q0zO@ge{Af#Gc$XGi^c zjYm`KWb{-LJx6S;&}(;ivGtvJH^PI;ctot~VFh2;qnW07aw1_Zd6W!9UYJtG?=r3# zFCB?Dz=&PC)tScCYBO@&HF`5dD_#nCo`R8!{*qei zS3T?~s++nm#TJsMH0~!fMnN7Hv{VeZp;q3dGVfNI0kvYbJH^&(vQuelSwkz!=;D@j zma%2S%WYi0@lMRT+g z5k@0JDeMOt&=vJQXazs0P+D86k#8m*i-M=17LQ0syz878j$0IBm^#cTJDnv2J=Dq)*f6$K5FGM<>TRJiEPj zYb~1Yx^c(GK*Y`mw2QX*=?~j8^UjU}vQB&txY|L*TzWIHGE|#>w%eRf9Aexhg1)pj zFf}uRG3-fNZjFpOE^r+A9ehO@=Ez$fj_tSa(zR`0o(Z)w$JyMfUP zZ;q761ea|+SSJ<9v+$qF!e5EZs++nlROpV|n_6aBW7d~p7f}>1Jvzdk!F2khb|_*y zcD|IVd(-J@Z$a>02W*00(i(@DAA$k-nkx)nsdra>Y4MU`BO{{^bB3{fa#15j)z&up zl5+FSnJnwwWXVaXeM@oF087&owVC-Q$1CgE4ukh;^$w(DZRL9*y1iI7HTv@5%2KRi zuT_!yXecoE)L!mz9rdxqu>t1&(O-K7?ZRuymjWMTINbsT_Aju zx2G9o(_KZK!QxRx;#oA-)x6w}SW(@%UGDyI_8+VS!TSbV+WH^UMHb)zGgQ zz+T=VQVU6uaOpNXD~V2bL8qhbpPZsgnleG-q3$B#EZ2B|CdMu84?(!tzyRcO4iW8! z^4ozN+Cv4q%R?GyadVq(Y=*ADDw@zDOQ)z=VjI*Tq-&@X>mSmo7Lc_yT#Em`wwScH zKE8VL75p*IJk6}SVf#D3An+Kog8z)%^1k7JQ3(jx;z z=HpU}T%Cl_@smh*^5`wi=SC8(v1#c+uvR+VZH$mqtSrlL_0Q#y2-qSl`$$z03^DI~RqrNf2 zlB`C4J8Nc<)!%Q)RT>AiXzr!q&@)ijZ}uwz2PqHh+&&p&2rG5myutqxh=sx z%|ly)6S{Xin>iX11sw}3!W!@|!v?Q|TR1n@%yiNfwCed8KY8@%_~_}(RZP7`gP!4R zz?v9-jSL$HJA0qW6wC5?R z7r@FQ6BY5AUbx_Luzd6T^KG{g=m(XfQ}xe=Q(FFX)`u?#n~#V@u~~>fqyRLFs9hjf3c5`F!F0CQZsopGB7JAx=AWP(nh zUDMp-wgg@bkFn)ol18gZhPd`b<*z!HjHZa*Q_7A6UvKRSuMJdzzc) zS_B`Qkee+&5TYshhWmk%??SmC+TuNM-7~DtQf#O++wPkJT#T?|_ulDJisv#% z38H3r6E@yS#i-nxY*-sMP595sSO>Pm_5TKs=C+xcnZC<>K4qpFZ^PND(%(yPGmAZ- zdRm3`$yT&mx0+TEwQS;BXD{sosH{R470#kmX4gz5Pw{v=>qFIZew((=YFS8G=g1wz zL1!cS;k6ssFziBAv|*HR2-3lse`30v-b;syou%{7cz|89HbftY<8Q?%6F+i2F!wJ; zQsLzxq+*3IzpNOk6K0K4yUbA|JJtEEs4K;Ep{dy{;_*jwB*%1TRvD36ebWKtiPKVX zeW3hk%{sNytqFB@?a?WQ-r-ge_qLOEHsM;-L%w}NI2Tdt$r862J;kn3+h@;)4l|Q0 zYUl?P6oeY)GXG7F9X?{-QY7~#RX6gR9%WGB?JBoxDVojXRehW%UJ^2^85OPu=1L4e z|GRYp2C}z9vqv|+JV5Npgl{=W$oiHF5=DcBzp_;i$``zC>X{Xp!B=Wjv@eQA`HE+1 zG7$q;yy%ZP;hB%rN9H_xgTeSD4qelnL*1m)eYeX&Mwqltx#iCL3FkqimgI5tk9xoA zJj{Me^0?WBye~VC9+%{;ao+!S9%9duymiitE*_{`OY*oThc@?Esl&jzB#&=?kr%Jf z;S|i0ydme+Tn{tjlDw_Xi`Qwh<+>#A4(ENs_1Jt}l6RN$zTmvlO?lg$_q)!!`=-2m zocEW`yZ5HN9nM?h3BT{Ayq(T_$a%vzE4}|9T6>$%lo99{eNi*q(N5Z%AKvFOND&>z+E?ObbI~ zc0!l1mJqCs!t6u2{BDv`m6!HP||Odo<%Ku8BqM1N{JgZEZX|QfMHV* zk>2DF6vzQB5|7sulMrR?4u3SbP%^_(H)rAbDE?{Q1I*&(!;c=`w|HMnmzJ<9eH8KN z$>hYL)82f`C``Oe#rh%*yby2o$nqAZU6S<95ys>%G?wMDxslA-JsHq|vc&v2PSUGH zu_YSt*|+4yWSP>$2T6;{tM=@ZHAfz-7}m#Nvw`;^ufhv9J@SybrMq2r^cPmg+-8Gy2D*DUy})6*{=AN5>h z`M!5;kz>CUk$fI?gNh)w=(d?;T;0hmo!{q{t4UF<@rJn=Q-{r1cxX<2TbEcQkI>Y2 zimk9tI1;!5(Ll^(3(Q1fL4I}6xBplENSxzAOVNMrpswNufV;Z8yQg4HW>&&^Gph%P zXn_+#HcUCVD8zCF5^1ED)=v>Qbk7Q);#x{I<7-o*KqmlqfD;WFzoQ~wQUS?p zYgoAuIXf#-32_y-q?$6|xExRXkTW7_HQ(j!A+DRY>we|jSPt(y;6{z7il7_=( z0Ir2V;=bHU&AYG@7<~-sUMh*lLg`DC8%$|y~lo&2V1 zblJ^rXm{pnZ)sFO{YbGhDks_zlTk&Ne0Bk%t9q%3d6)*~UMn&-d6rZ8dHGu5`p)~O zBiaRJ$3wfMCyIEcsqps}aY>7{aD~FrjA888pKbBan?43AuXLKnQp6AjLw&dRykX$9 z`dU$U6_f-ze?s)`*aj`4{SB!!NCsp}9^04o5k0(sHO?;=as7$~fL8kF=D~2#yX_xv zXP5LtgpC~R@mK*(O>?05P4K5x3uv=Xcd0iEEDhp$Z`#U5XpBPK=`MWF()W2kH~Ozu zRBK!{5xbbW54vUqGVx9xo(n&rJRAk}4#dH)``Y-$!_K!DvQV%h>EM2r^_bmGRVxwP?n{i@h zEQo_Y#db99GUjdOV|e<@Rg8URNj|Z~_wIS=O^rs0XFUT+cM}||vlCpaNG{?stI{xr zbbmvz(@6B$&*UzV+#0{ZI}Zcc{CLA*PBr8L)i)W;-Zu}X?UXDTtJ7FxHup)+ZV%d< zKck#;SD=r3#Sx|AO`Vz=b_5P4&uE20k$ke0PF#uG1T`tpnb!a|vD$ASQq*P;!D=5J zB>3M7_R^%i2IALWC3Mtu%TW9xtPrgxJgA9DMn69bkk64u|9qZt$?%sBJ%5tdTBTNz zCDzevO+_)E$gi5cA)&NURj$%0XVI#0V?^Ev+`%!cn;30tGvw13V&CM&PbuntoQKV9$xVKPz|t5PBWXVS$l8RG zg;pfXWczuQwfb(k+h(AztBkgu5ae$DCS!Tu*(k+nN|N6t=(rqM!fkT9SVWuTdjP8Y zis;~IW7h71zoRZR)3edC)!7cuP;igOp5voi?jWNdwbrv+H`Gv8)Z)9R*k)%z*Rth> zMl1h#<82U?WG5~EnrO+ZL_(K0XnbZ{+c1M{yXZ0^o!{2h%NlIbk{We*bcN+S?sxJw z&Km#Ksg6O)M$dGNO~wAM{LF?U{=R~DsU!K0B%k5YcEA*W7GWR98aOoNIo55Zx?27ZmJM@UVivQ1F)uzM?={mendNVb-LqHd#$djwn}ZMe@7? zDLB@AtP@#}wAy4AOBbOKia>k|H=M$5#Qavfz%<=p6TzI68jUZyZN<{u8Cq)GGW>x`Al=KC0@II zGTTU})JI*K)Q;%g z0;d$o0Lc`(Z}1_v?!uHhSc1GCAc1!SO#xICu7L)U@DT6>*WB3DM0Rb=W-W^spMBGIQFq(zO7){sAC>OY zz4tN>ve;X2>KU{^=?#jeBsiUUyv-F##}Di2*%Jd#6J z-D3xDZk%FnxZSE;k7KKhh+Kn~?EuC2!%tLvmlwVH%0vjrHVLryZbpGPDVnP|DHH}e zb59mHZ`S<1qHtq#SZIlElj2FA4mUW(Mc>gh^MgeJkH>G(lctFSU@T0g2#B_!mrW6E z>wA{j{LH;nJWFv50zz0DTMnuP`dJ%aISv3#`EXYpjQmj+4Z_4!TK29k=*TTzeU6G? zFO-CtMa@nRcOlF`w$%?fBxe)$gf8-hHKwy)q-lH@WrvFy36g4SzF9A6Csf~=&9*>I zNvvX;0Pt19TD`m{^JwcFaI!`jQ)|BX*P3tp!l+!wGn0*`z&F&TC3~@&GwkrDwi5fRC0zfZTR{9iF@YPgd>}hMwQtx?J|~K)cJsS$;}>%4KKAZci1&S@ zj&p2CH~Cm-n7!CY-|tlR5*byzr_l9K5!|L9bT@(33_nd=!K*H|HNp2isbw;*(Jx~Z zyoS%s-3GBvU`*k05oXEDk|tyu*5VTC-57vii>XKyg!H zL$M2wn6BQw!kVsid^25M&1#J^KmNhz%PZ`D%Ts={_yt-hkJFRH67X~iMZyaD4^ zFZ1yg5S8zFCK{vls8)@yC`?RUtnsOP2^G3@_+rBMvNH_(xMFrII8LrFIgZ~g5Q@n5 z!`C)_#cc91&7t;0I8DX9mRDA|*IF1TH6*yAX12IytNC7Zupo@CC(W_VP`YzEv$AZd-iZE!jgU zE5_1c-<)rNuuFY8`s{NdbNm(rk*T=Wtcm@Q`r56LJ)_`R1;+>s3|(t>(jTafM*;6u z?x$2kB1H081wx$;syX(p1zO?h!FX5bJ2i1B3?;0Nb06gPpq&ok*=jz<#YYi}z50)5 zJ^BZ!(r1;jwRk7Eri&$S{eQrCrri$JS_$5%zOCopyright � 2005-2012 Stephen John Machin, Lingfo Pty Ltd

      -#

      This module is part of the xlrd package, which is released under a BSD-style licence.

      -## - -# No part of the content of this file was derived from the works of David Giffin. - -# 2008-11-04 SJM Avoid assertion error when -1 used instead of -2 for first_SID of empty SCSS [Frank Hoffsuemmer] -# 2007-09-08 SJM Warning message if sector sizes are extremely large. -# 2007-05-07 SJM Meaningful exception instead of IndexError if a SAT (sector allocation table) is corrupted. -# 2007-04-22 SJM Missing "<" in a struct.unpack call => can't open files on bigendian platforms. - -from __future__ import print_function -import sys -from struct import unpack -from .timemachine import * -import array - -## -# Magic cookie that should appear in the first 8 bytes of the file. -SIGNATURE = b"\xD0\xCF\x11\xE0\xA1\xB1\x1A\xE1" - -EOCSID = -2 -FREESID = -1 -SATSID = -3 -MSATSID = -4 -EVILSID = -5 - -class CompDocError(Exception): - pass - -class DirNode(object): - - def __init__(self, DID, dent, DEBUG=0, logfile=sys.stdout): - # dent is the 128-byte directory entry - self.DID = DID - self.logfile = logfile - (cbufsize, self.etype, self.colour, self.left_DID, self.right_DID, - self.root_DID) = \ - unpack(' 20: # allows for 2**20 bytes i.e. 1MB - print("WARNING: sector size (2**%d) is preposterous; assuming 512 and continuing ..." \ - % ssz, file=logfile) - ssz = 9 - if sssz > ssz: - print("WARNING: short stream sector size (2**%d) is preposterous; assuming 64 and continuing ..." \ - % sssz, file=logfile) - sssz = 6 - self.sec_size = sec_size = 1 << ssz - self.short_sec_size = 1 << sssz - if self.sec_size != 512 or self.short_sec_size != 64: - print("@@@@ sec_size=%d short_sec_size=%d" % (self.sec_size, self.short_sec_size), file=logfile) - ( - SAT_tot_secs, self.dir_first_sec_sid, _unused, self.min_size_std_stream, - SSAT_first_sec_sid, SSAT_tot_secs, - MSATX_first_sec_sid, MSATX_tot_secs, - # ) = unpack(' 1: - print('MSATX: sid=%d (0x%08X)' % (sid, sid), file=logfile) - if sid >= mem_data_secs: - msg = "MSAT extension: accessing sector %d but only %d in file" % (sid, mem_data_secs) - if DEBUG > 1: - print(msg, file=logfile) - break - raise CompDocError(msg) - elif sid < 0: - raise CompDocError("MSAT extension: invalid sector id: %d" % sid) - if seen[sid]: - raise CompDocError("MSAT corruption: seen[%d] == %d" % (sid, seen[sid])) - seen[sid] = 1 - actual_MSATX_sectors += 1 - if DEBUG and actual_MSATX_sectors > expected_MSATX_sectors: - print("[1]===>>>", mem_data_secs, nent, SAT_sectors_reqd, expected_MSATX_sectors, actual_MSATX_sectors, file=logfile) - offset = 512 + sec_size * sid - MSAT.extend(unpack(fmt, mem[offset:offset+sec_size])) - sid = MSAT.pop() # last sector id is sid of next sector in the chain - - if DEBUG and actual_MSATX_sectors != expected_MSATX_sectors: - print("[2]===>>>", mem_data_secs, nent, SAT_sectors_reqd, expected_MSATX_sectors, actual_MSATX_sectors, file=logfile) - if DEBUG: - print("MSAT: len =", len(MSAT), file=logfile) - dump_list(MSAT, 10, logfile) - # - # === build the SAT === - # - self.SAT = [] - actual_SAT_sectors = 0 - dump_again = 0 - for msidx in xrange(len(MSAT)): - msid = MSAT[msidx] - if msid in (FREESID, EOCSID): - # Specification: the MSAT array may be padded with trailing FREESID entries. - # Toleration: a FREESID or EOCSID entry anywhere in the MSAT array will be ignored. - continue - if msid >= mem_data_secs: - if not trunc_warned: - print("WARNING *** File is truncated, or OLE2 MSAT is corrupt!!", file=logfile) - print("INFO: Trying to access sector %d but only %d available" \ - % (msid, mem_data_secs), file=logfile) - trunc_warned = 1 - MSAT[msidx] = EVILSID - dump_again = 1 - continue - elif msid < -2: - raise CompDocError("MSAT: invalid sector id: %d" % msid) - if seen[msid]: - raise CompDocError("MSAT extension corruption: seen[%d] == %d" % (msid, seen[msid])) - seen[msid] = 2 - actual_SAT_sectors += 1 - if DEBUG and actual_SAT_sectors > SAT_sectors_reqd: - print("[3]===>>>", mem_data_secs, nent, SAT_sectors_reqd, expected_MSATX_sectors, actual_MSATX_sectors, actual_SAT_sectors, msid, file=logfile) - offset = 512 + sec_size * msid - self.SAT.extend(unpack(fmt, mem[offset:offset+sec_size])) - - if DEBUG: - print("SAT: len =", len(self.SAT), file=logfile) - dump_list(self.SAT, 10, logfile) - # print >> logfile, "SAT ", - # for i, s in enumerate(self.SAT): - # print >> logfile, "entry: %4d offset: %6d, next entry: %4d" % (i, 512 + sec_size * i, s) - # print >> logfile, "%d:%d " % (i, s), - print(file=logfile) - if DEBUG and dump_again: - print("MSAT: len =", len(MSAT), file=logfile) - dump_list(MSAT, 10, logfile) - for satx in xrange(mem_data_secs, len(self.SAT)): - self.SAT[satx] = EVILSID - print("SAT: len =", len(self.SAT), file=logfile) - dump_list(self.SAT, 10, logfile) - # - # === build the directory === - # - dbytes = self._get_stream( - self.mem, 512, self.SAT, self.sec_size, self.dir_first_sec_sid, - name="directory", seen_id=3) - dirlist = [] - did = -1 - for pos in xrange(0, len(dbytes), 128): - did += 1 - dirlist.append(DirNode(did, dbytes[pos:pos+128], 0, logfile)) - self.dirlist = dirlist - _build_family_tree(dirlist, 0, dirlist[0].root_DID) # and stand well back ... - if DEBUG: - for d in dirlist: - d.dump(DEBUG) - # - # === get the SSCS === - # - sscs_dir = self.dirlist[0] - assert sscs_dir.etype == 5 # root entry - if sscs_dir.first_SID < 0 or sscs_dir.tot_size == 0: - # Problem reported by Frank Hoffsuemmer: some software was - # writing -1 instead of -2 (EOCSID) for the first_SID - # when the SCCS was empty. Not having EOCSID caused assertion - # failure in _get_stream. - # Solution: avoid calling _get_stream in any case when the - # SCSS appears to be empty. - self.SSCS = "" - else: - self.SSCS = self._get_stream( - self.mem, 512, self.SAT, sec_size, sscs_dir.first_SID, - sscs_dir.tot_size, name="SSCS", seen_id=4) - # if DEBUG: print >> logfile, "SSCS", repr(self.SSCS) - # - # === build the SSAT === - # - self.SSAT = [] - if SSAT_tot_secs > 0 and sscs_dir.tot_size == 0: - print("WARNING *** OLE2 inconsistency: SSCS size is 0 but SSAT size is non-zero", file=logfile) - if sscs_dir.tot_size > 0: - sid = SSAT_first_sec_sid - nsecs = SSAT_tot_secs - while sid >= 0 and nsecs > 0: - if seen[sid]: - raise CompDocError("SSAT corruption: seen[%d] == %d" % (sid, seen[sid])) - seen[sid] = 5 - nsecs -= 1 - start_pos = 512 + sid * sec_size - news = list(unpack(fmt, mem[start_pos:start_pos+sec_size])) - self.SSAT.extend(news) - sid = self.SAT[sid] - if DEBUG: print("SSAT last sid %d; remaining sectors %d" % (sid, nsecs), file=logfile) - assert nsecs == 0 and sid == EOCSID - if DEBUG: - print("SSAT", file=logfile) - dump_list(self.SSAT, 10, logfile) - if DEBUG: - print("seen", file=logfile) - dump_list(seen, 20, logfile) - - def _get_stream(self, mem, base, sat, sec_size, start_sid, size=None, name='', seen_id=None): - # print >> self.logfile, "_get_stream", base, sec_size, start_sid, size - sectors = [] - s = start_sid - if size is None: - # nothing to check against - while s >= 0: - if seen_id is not None: - if self.seen[s]: - raise CompDocError("%s corruption: seen[%d] == %d" % (name, s, self.seen[s])) - self.seen[s] = seen_id - start_pos = base + s * sec_size - sectors.append(mem[start_pos:start_pos+sec_size]) - try: - s = sat[s] - except IndexError: - raise CompDocError( - "OLE2 stream %r: sector allocation table invalid entry (%d)" % - (name, s) - ) - assert s == EOCSID - else: - todo = size - while s >= 0: - if seen_id is not None: - if self.seen[s]: - raise CompDocError("%s corruption: seen[%d] == %d" % (name, s, self.seen[s])) - self.seen[s] = seen_id - start_pos = base + s * sec_size - grab = sec_size - if grab > todo: - grab = todo - todo -= grab - sectors.append(mem[start_pos:start_pos+grab]) - try: - s = sat[s] - except IndexError: - raise CompDocError( - "OLE2 stream %r: sector allocation table invalid entry (%d)" % - (name, s) - ) - assert s == EOCSID - if todo != 0: - fprintf(self.logfile, - "WARNING *** OLE2 stream %r: expected size %d, actual size %d\n", - name, size, size - todo) - - return b''.join(sectors) - - def _dir_search(self, path, storage_DID=0): - # Return matching DirNode instance, or None - head = path[0] - tail = path[1:] - dl = self.dirlist - for child in dl[storage_DID].children: - if dl[child].name.lower() == head.lower(): - et = dl[child].etype - if et == 2: - return dl[child] - if et == 1: - if not tail: - raise CompDocError("Requested component is a 'storage'") - return self._dir_search(tail, child) - dl[child].dump(1) - raise CompDocError("Requested stream is not a 'user stream'") - return None - - ## - # Interrogate the compound document's directory; return the stream as a string if found, otherwise - # return None. - # @param qname Name of the desired stream e.g. u'Workbook'. Should be in Unicode or convertible thereto. - - def get_named_stream(self, qname): - d = self._dir_search(qname.split("/")) - if d is None: - return None - if d.tot_size >= self.min_size_std_stream: - return self._get_stream( - self.mem, 512, self.SAT, self.sec_size, d.first_SID, - d.tot_size, name=qname, seen_id=d.DID+6) - else: - return self._get_stream( - self.SSCS, 0, self.SSAT, self.short_sec_size, d.first_SID, - d.tot_size, name=qname + " (from SSCS)", seen_id=None) - - ## - # Interrogate the compound document's directory. - # If the named stream is not found, (None, 0, 0) will be returned. - # If the named stream is found and is contiguous within the original byte sequence ("mem") - # used when the document was opened, - # then (mem, offset_to_start_of_stream, length_of_stream) is returned. - # Otherwise a new string is built from the fragments and (new_string, 0, length_of_stream) is returned. - # @param qname Name of the desired stream e.g. u'Workbook'. Should be in Unicode or convertible thereto. - - def locate_named_stream(self, qname): - d = self._dir_search(qname.split("/")) - if d is None: - return (None, 0, 0) - if d.tot_size > self.mem_data_len: - raise CompDocError("%r stream length (%d bytes) > file data size (%d bytes)" - % (qname, d.tot_size, self.mem_data_len)) - if d.tot_size >= self.min_size_std_stream: - result = self._locate_stream( - self.mem, 512, self.SAT, self.sec_size, d.first_SID, - d.tot_size, qname, d.DID+6) - if self.DEBUG: - print("\nseen", file=self.logfile) - dump_list(self.seen, 20, self.logfile) - return result - else: - return ( - self._get_stream( - self.SSCS, 0, self.SSAT, self.short_sec_size, d.first_SID, - d.tot_size, qname + " (from SSCS)", None), - 0, - d.tot_size - ) - - def _locate_stream(self, mem, base, sat, sec_size, start_sid, expected_stream_size, qname, seen_id): - # print >> self.logfile, "_locate_stream", base, sec_size, start_sid, expected_stream_size - s = start_sid - if s < 0: - raise CompDocError("_locate_stream: start_sid (%d) is -ve" % start_sid) - p = -99 # dummy previous SID - start_pos = -9999 - end_pos = -8888 - slices = [] - tot_found = 0 - found_limit = (expected_stream_size + sec_size - 1) // sec_size - while s >= 0: - if self.seen[s]: - print("_locate_stream(%s): seen" % qname, file=self.logfile); dump_list(self.seen, 20, self.logfile) - raise CompDocError("%s corruption: seen[%d] == %d" % (qname, s, self.seen[s])) - self.seen[s] = seen_id - tot_found += 1 - if tot_found > found_limit: - raise CompDocError( - "%s: size exceeds expected %d bytes; corrupt?" - % (qname, found_limit * sec_size) - ) # Note: expected size rounded up to higher sector - if s == p+1: - # contiguous sectors - end_pos += sec_size - else: - # start new slice - if p >= 0: - # not first time - slices.append((start_pos, end_pos)) - start_pos = base + s * sec_size - end_pos = start_pos + sec_size - p = s - s = sat[s] - assert s == EOCSID - assert tot_found == found_limit - # print >> self.logfile, "_locate_stream(%s): seen" % qname; dump_list(self.seen, 20, self.logfile) - if not slices: - # The stream is contiguous ... just what we like! - return (mem, start_pos, expected_stream_size) - slices.append((start_pos, end_pos)) - # print >> self.logfile, "+++>>> %d fragments" % len(slices) - return (b''.join([mem[start_pos:end_pos] for start_pos, end_pos in slices]), 0, expected_stream_size) - -# ========================================================================================== -def x_dump_line(alist, stride, f, dpos, equal=0): - print("%5d%s" % (dpos, " ="[equal]), end=' ', file=f) - for value in alist[dpos:dpos + stride]: - print(str(value), end=' ', file=f) - print(file=f) - -def dump_list(alist, stride, f=sys.stdout): - def _dump_line(dpos, equal=0): - print("%5d%s" % (dpos, " ="[equal]), end=' ', file=f) - for value in alist[dpos:dpos + stride]: - print(str(value), end=' ', file=f) - print(file=f) - pos = None - oldpos = None - for pos in xrange(0, len(alist), stride): - if oldpos is None: - _dump_line(pos) - oldpos = pos - elif alist[pos:pos+stride] != alist[oldpos:oldpos+stride]: - if pos - oldpos > stride: - _dump_line(pos - stride, equal=1) - _dump_line(pos) - oldpos = pos - if oldpos is not None and pos is not None and pos != oldpos: - _dump_line(pos, equal=1) diff --git a/webhub/xlrd/compdoc.pyc b/webhub/xlrd/compdoc.pyc deleted file mode 100644 index 0949ae7c03d5ca4fd0a78bd6bba06901ba4df42e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13137 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 V{6kGaVmLW$XM2Y~m1=k9e*rwo1xx?{ diff --git a/webhub/xlrd/formatting.py b/webhub/xlrd/formatting.py deleted file mode 100644 index f0449151..00000000 --- a/webhub/xlrd/formatting.py +++ /dev/null @@ -1,1262 +0,0 @@ -# -*- coding: cp1252 -*- - -## -# Module for formatting information. -# -#

      Copyright © 2005-2012 Stephen John Machin, Lingfo Pty Ltd

      -#

      This module is part of the xlrd package, which is released under -# a BSD-style licence.

      -## - -# No part of the content of this file was derived from the works of David Giffin. - -from __future__ import print_function - -DEBUG = 0 -import re -from struct import unpack -from .timemachine import * -from .biffh import BaseObject, unpack_unicode, unpack_string, \ - upkbits, upkbitsL, fprintf, \ - FUN, FDT, FNU, FGE, FTX, XL_CELL_NUMBER, XL_CELL_DATE, \ - XL_FORMAT, XL_FORMAT2, \ - XLRDError - -_cellty_from_fmtty = { - FNU: XL_CELL_NUMBER, - FUN: XL_CELL_NUMBER, - FGE: XL_CELL_NUMBER, - FDT: XL_CELL_DATE, - FTX: XL_CELL_NUMBER, # Yes, a number can be formatted as text. - } - -excel_default_palette_b5 = ( - ( 0, 0, 0), (255, 255, 255), (255, 0, 0), ( 0, 255, 0), - ( 0, 0, 255), (255, 255, 0), (255, 0, 255), ( 0, 255, 255), - (128, 0, 0), ( 0, 128, 0), ( 0, 0, 128), (128, 128, 0), - (128, 0, 128), ( 0, 128, 128), (192, 192, 192), (128, 128, 128), - (153, 153, 255), (153, 51, 102), (255, 255, 204), (204, 255, 255), - (102, 0, 102), (255, 128, 128), ( 0, 102, 204), (204, 204, 255), - ( 0, 0, 128), (255, 0, 255), (255, 255, 0), ( 0, 255, 255), - (128, 0, 128), (128, 0, 0), ( 0, 128, 128), ( 0, 0, 255), - ( 0, 204, 255), (204, 255, 255), (204, 255, 204), (255, 255, 153), - (153, 204, 255), (255, 153, 204), (204, 153, 255), (227, 227, 227), - ( 51, 102, 255), ( 51, 204, 204), (153, 204, 0), (255, 204, 0), - (255, 153, 0), (255, 102, 0), (102, 102, 153), (150, 150, 150), - ( 0, 51, 102), ( 51, 153, 102), ( 0, 51, 0), ( 51, 51, 0), - (153, 51, 0), (153, 51, 102), ( 51, 51, 153), ( 51, 51, 51), - ) - -excel_default_palette_b2 = excel_default_palette_b5[:16] - -# Following table borrowed from Gnumeric 1.4 source. -# Checked against OOo docs and MS docs. -excel_default_palette_b8 = ( # (red, green, blue) - ( 0, 0, 0), (255,255,255), (255, 0, 0), ( 0,255, 0), # 0 - ( 0, 0,255), (255,255, 0), (255, 0,255), ( 0,255,255), # 4 - (128, 0, 0), ( 0,128, 0), ( 0, 0,128), (128,128, 0), # 8 - (128, 0,128), ( 0,128,128), (192,192,192), (128,128,128), # 12 - (153,153,255), (153, 51,102), (255,255,204), (204,255,255), # 16 - (102, 0,102), (255,128,128), ( 0,102,204), (204,204,255), # 20 - ( 0, 0,128), (255, 0,255), (255,255, 0), ( 0,255,255), # 24 - (128, 0,128), (128, 0, 0), ( 0,128,128), ( 0, 0,255), # 28 - ( 0,204,255), (204,255,255), (204,255,204), (255,255,153), # 32 - (153,204,255), (255,153,204), (204,153,255), (255,204,153), # 36 - ( 51,102,255), ( 51,204,204), (153,204, 0), (255,204, 0), # 40 - (255,153, 0), (255,102, 0), (102,102,153), (150,150,150), # 44 - ( 0, 51,102), ( 51,153,102), ( 0, 51, 0), ( 51, 51, 0), # 48 - (153, 51, 0), (153, 51,102), ( 51, 51,153), ( 51, 51, 51), # 52 - ) - -default_palette = { - 80: excel_default_palette_b8, - 70: excel_default_palette_b5, - 50: excel_default_palette_b5, - 45: excel_default_palette_b2, - 40: excel_default_palette_b2, - 30: excel_default_palette_b2, - 21: excel_default_palette_b2, - 20: excel_default_palette_b2, - } - -""" -00H = Normal -01H = RowLevel_lv (see next field) -02H = ColLevel_lv (see next field) -03H = Comma -04H = Currency -05H = Percent -06H = Comma [0] (BIFF4-BIFF8) -07H = Currency [0] (BIFF4-BIFF8) -08H = Hyperlink (BIFF8) -09H = Followed Hyperlink (BIFF8) -""" -built_in_style_names = [ - "Normal", - "RowLevel_", - "ColLevel_", - "Comma", - "Currency", - "Percent", - "Comma [0]", - "Currency [0]", - "Hyperlink", - "Followed Hyperlink", - ] - -def initialise_colour_map(book): - book.colour_map = {} - book.colour_indexes_used = {} - if not book.formatting_info: - return - # Add the 8 invariant colours - for i in xrange(8): - book.colour_map[i] = excel_default_palette_b8[i] - # Add the default palette depending on the version - dpal = default_palette[book.biff_version] - ndpal = len(dpal) - for i in xrange(ndpal): - book.colour_map[i+8] = dpal[i] - # Add the specials -- None means the RGB value is not known - # System window text colour for border lines - book.colour_map[ndpal+8] = None - # System window background colour for pattern background - book.colour_map[ndpal+8+1] = None # - for ci in ( - 0x51, # System ToolTip text colour (used in note objects) - 0x7FFF, # 32767, system window text colour for fonts - ): - book.colour_map[ci] = None - -def nearest_colour_index(colour_map, rgb, debug=0): - # General purpose function. Uses Euclidean distance. - # So far used only for pre-BIFF8 WINDOW2 record. - # Doesn't have to be fast. - # Doesn't have to be fancy. - best_metric = 3 * 256 * 256 - best_colourx = 0 - for colourx, cand_rgb in colour_map.items(): - if cand_rgb is None: - continue - metric = 0 - for v1, v2 in zip(rgb, cand_rgb): - metric += (v1 - v2) * (v1 - v2) - if metric < best_metric: - best_metric = metric - best_colourx = colourx - if metric == 0: - break - if 0 and debug: - print("nearest_colour_index for %r is %r -> %r; best_metric is %d" \ - % (rgb, best_colourx, colour_map[best_colourx], best_metric)) - return best_colourx - -## -# This mixin class exists solely so that Format, Font, and XF.... objects -# can be compared by value of their attributes. -class EqNeAttrs(object): - - def __eq__(self, other): - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - return self.__dict__ != other.__dict__ - -## -# An Excel "font" contains the details of not only what is normally -# considered a font, but also several other display attributes. -# Items correspond to those in the Excel UI's Format/Cells/Font tab. -#
      -- New in version 0.6.1 -class Font(BaseObject, EqNeAttrs): - ## - # 1 = Characters are bold. Redundant; see "weight" attribute. - bold = 0 - ## - # Values: 0 = ANSI Latin, 1 = System default, 2 = Symbol, - # 77 = Apple Roman, - # 128 = ANSI Japanese Shift-JIS, - # 129 = ANSI Korean (Hangul), - # 130 = ANSI Korean (Johab), - # 134 = ANSI Chinese Simplified GBK, - # 136 = ANSI Chinese Traditional BIG5, - # 161 = ANSI Greek, - # 162 = ANSI Turkish, - # 163 = ANSI Vietnamese, - # 177 = ANSI Hebrew, - # 178 = ANSI Arabic, - # 186 = ANSI Baltic, - # 204 = ANSI Cyrillic, - # 222 = ANSI Thai, - # 238 = ANSI Latin II (Central European), - # 255 = OEM Latin I - character_set = 0 - ## - # An explanation of "colour index" is given in the Formatting - # section at the start of this document. - colour_index = 0 - ## - # 1 = Superscript, 2 = Subscript. - escapement = 0 - ## - # 0 = None (unknown or don't care)
      - # 1 = Roman (variable width, serifed)
      - # 2 = Swiss (variable width, sans-serifed)
      - # 3 = Modern (fixed width, serifed or sans-serifed)
      - # 4 = Script (cursive)
      - # 5 = Decorative (specialised, for example Old English, Fraktur) - family = 0 - ## - # The 0-based index used to refer to this Font() instance. - # Note that index 4 is never used; xlrd supplies a dummy place-holder. - font_index = 0 - ## - # Height of the font (in twips). A twip = 1/20 of a point. - height = 0 - ## - # 1 = Characters are italic. - italic = 0 - ## - # The name of the font. Example: u"Arial" - name = UNICODE_LITERAL("") - ## - # 1 = Characters are struck out. - struck_out = 0 - ## - # 0 = None
      - # 1 = Single; 0x21 (33) = Single accounting
      - # 2 = Double; 0x22 (34) = Double accounting - underline_type = 0 - ## - # 1 = Characters are underlined. Redundant; see "underline_type" attribute. - underlined = 0 - ## - # Font weight (100-1000). Standard values are 400 for normal text - # and 700 for bold text. - weight = 400 - ## - # 1 = Font is outline style (Macintosh only) - outline = 0 - ## - # 1 = Font is shadow style (Macintosh only) - shadow = 0 - - # No methods ... - -def handle_efont(book, data): # BIFF2 only - if not book.formatting_info: - return - book.font_list[-1].colour_index = unpack('= 2 - bv = book.biff_version - k = len(book.font_list) - if k == 4: - f = Font() - f.name = UNICODE_LITERAL('Dummy Font') - f.font_index = k - book.font_list.append(f) - k += 1 - f = Font() - f.font_index = k - book.font_list.append(f) - if bv >= 50: - ( - f.height, option_flags, f.colour_index, f.weight, - f.escapement, f.underline_type, f.family, - f.character_set, - ) = unpack('> 1 - f.underlined = (option_flags & 4) >> 2 - f.struck_out = (option_flags & 8) >> 3 - f.outline = (option_flags & 16) >> 4 - f.shadow = (option_flags & 32) >> 5 - if bv >= 80: - f.name = unpack_unicode(data, 14, lenlen=1) - else: - f.name = unpack_string(data, 14, book.encoding, lenlen=1) - elif bv >= 30: - f.height, option_flags, f.colour_index = unpack('> 1 - f.underlined = (option_flags & 4) >> 2 - f.struck_out = (option_flags & 8) >> 3 - f.outline = (option_flags & 16) >> 4 - f.shadow = (option_flags & 32) >> 5 - f.name = unpack_string(data, 6, book.encoding, lenlen=1) - # Now cook up the remaining attributes ... - f.weight = [400, 700][f.bold] - f.escapement = 0 # None - f.underline_type = f.underlined # None or Single - f.family = 0 # Unknown / don't care - f.character_set = 1 # System default (0 means "ANSI Latin") - else: # BIFF2 - f.height, option_flags = unpack('> 1 - f.underlined = (option_flags & 4) >> 2 - f.struck_out = (option_flags & 8) >> 3 - f.outline = 0 - f.shadow = 0 - f.name = unpack_string(data, 4, book.encoding, lenlen=1) - # Now cook up the remaining attributes ... - f.weight = [400, 700][f.bold] - f.escapement = 0 # None - f.underline_type = f.underlined # None or Single - f.family = 0 # Unknown / don't care - f.character_set = 1 # System default (0 means "ANSI Latin") - if blah: - f.dump( - book.logfile, - header="--- handle_font: font[%d] ---" % f.font_index, - footer="-------------------", - ) - -# === "Number formats" === - -## -# "Number format" information from a FORMAT record. -#
      -- New in version 0.6.1 -class Format(BaseObject, EqNeAttrs): - ## - # The key into Book.format_map - format_key = 0 - ## - # A classification that has been inferred from the format string. - # Currently, this is used only to distinguish between numbers and dates. - #
      Values: - #
      FUN = 0 # unknown - #
      FDT = 1 # date - #
      FNU = 2 # number - #
      FGE = 3 # general - #
      FTX = 4 # text - type = FUN - ## - # The format string - format_str = UNICODE_LITERAL('') - - def __init__(self, format_key, ty, format_str): - self.format_key = format_key - self.type = ty - self.format_str = format_str - -std_format_strings = { - # "std" == "standard for US English locale" - # #### TODO ... a lot of work to tailor these to the user's locale. - # See e.g. gnumeric-1.x.y/src/formats.c - 0x00: "General", - 0x01: "0", - 0x02: "0.00", - 0x03: "#,##0", - 0x04: "#,##0.00", - 0x05: "$#,##0_);($#,##0)", - 0x06: "$#,##0_);[Red]($#,##0)", - 0x07: "$#,##0.00_);($#,##0.00)", - 0x08: "$#,##0.00_);[Red]($#,##0.00)", - 0x09: "0%", - 0x0a: "0.00%", - 0x0b: "0.00E+00", - 0x0c: "# ?/?", - 0x0d: "# ??/??", - 0x0e: "m/d/yy", - 0x0f: "d-mmm-yy", - 0x10: "d-mmm", - 0x11: "mmm-yy", - 0x12: "h:mm AM/PM", - 0x13: "h:mm:ss AM/PM", - 0x14: "h:mm", - 0x15: "h:mm:ss", - 0x16: "m/d/yy h:mm", - 0x25: "#,##0_);(#,##0)", - 0x26: "#,##0_);[Red](#,##0)", - 0x27: "#,##0.00_);(#,##0.00)", - 0x28: "#,##0.00_);[Red](#,##0.00)", - 0x29: "_(* #,##0_);_(* (#,##0);_(* \"-\"_);_(@_)", - 0x2a: "_($* #,##0_);_($* (#,##0);_($* \"-\"_);_(@_)", - 0x2b: "_(* #,##0.00_);_(* (#,##0.00);_(* \"-\"??_);_(@_)", - 0x2c: "_($* #,##0.00_);_($* (#,##0.00);_($* \"-\"??_);_(@_)", - 0x2d: "mm:ss", - 0x2e: "[h]:mm:ss", - 0x2f: "mm:ss.0", - 0x30: "##0.0E+0", - 0x31: "@", - } - -fmt_code_ranges = [ # both-inclusive ranges of "standard" format codes - # Source: the openoffice.org doc't - # and the OOXML spec Part 4, section 3.8.30 - ( 0, 0, FGE), - ( 1, 13, FNU), - (14, 22, FDT), - (27, 36, FDT), # CJK date formats - (37, 44, FNU), - (45, 47, FDT), - (48, 48, FNU), - (49, 49, FTX), - # Gnumeric assumes (or assumed) that built-in formats finish at 49, not at 163 - (50, 58, FDT), # CJK date formats - (59, 62, FNU), # Thai number (currency?) formats - (67, 70, FNU), # Thai number (currency?) formats - (71, 81, FDT), # Thai date formats - ] - -std_format_code_types = {} -for lo, hi, ty in fmt_code_ranges: - for x in xrange(lo, hi+1): - std_format_code_types[x] = ty -del lo, hi, ty, x - -date_chars = UNICODE_LITERAL('ymdhs') # year, month/minute, day, hour, second -date_char_dict = {} -for _c in date_chars + date_chars.upper(): - date_char_dict[_c] = 5 -del _c, date_chars - -skip_char_dict = {} -for _c in UNICODE_LITERAL('$-+/(): '): - skip_char_dict[_c] = 1 - -num_char_dict = { - UNICODE_LITERAL('0'): 5, - UNICODE_LITERAL('#'): 5, - UNICODE_LITERAL('?'): 5, - } - -non_date_formats = { - UNICODE_LITERAL('0.00E+00'):1, - UNICODE_LITERAL('##0.0E+0'):1, - UNICODE_LITERAL('General') :1, - UNICODE_LITERAL('GENERAL') :1, # OOo Calc 1.1.4 does this. - UNICODE_LITERAL('general') :1, # pyExcelerator 0.6.3 does this. - UNICODE_LITERAL('@') :1, - } - -fmt_bracketed_sub = re.compile(r'\[[^]]*\]').sub - -# Boolean format strings (actual cases) -# u'"Yes";"Yes";"No"' -# u'"True";"True";"False"' -# u'"On";"On";"Off"' - -def is_date_format_string(book, fmt): - # Heuristics: - # Ignore "text" and [stuff in square brackets (aarrgghh -- see below)]. - # Handle backslashed-escaped chars properly. - # E.g. hh\hmm\mss\s should produce a display like 23h59m59s - # Date formats have one or more of ymdhs (caseless) in them. - # Numeric formats have # and 0. - # N.B. u'General"."' hence get rid of "text" first. - # TODO: Find where formats are interpreted in Gnumeric - # TODO: u'[h]\\ \\h\\o\\u\\r\\s' ([h] means don't care about hours > 23) - state = 0 - s = '' - - for c in fmt: - if state == 0: - if c == UNICODE_LITERAL('"'): - state = 1 - elif c in UNICODE_LITERAL(r"\_*"): - state = 2 - elif c in skip_char_dict: - pass - else: - s += c - elif state == 1: - if c == UNICODE_LITERAL('"'): - state = 0 - elif state == 2: - # Ignore char after backslash, underscore or asterisk - state = 0 - assert 0 <= state <= 2 - if book.verbosity >= 4: - print("is_date_format_string: reduced format is %s" % REPR(s), file=book.logfile) - s = fmt_bracketed_sub('', s) - if s in non_date_formats: - return False - state = 0 - separator = ";" - got_sep = 0 - date_count = num_count = 0 - for c in s: - if c in date_char_dict: - date_count += date_char_dict[c] - elif c in num_char_dict: - num_count += num_char_dict[c] - elif c == separator: - got_sep = 1 - # print num_count, date_count, repr(fmt) - if date_count and not num_count: - return True - if num_count and not date_count: - return False - if date_count: - if book.verbosity: - fprintf(book.logfile, - 'WARNING *** is_date_format: ambiguous d=%d n=%d fmt=%r\n', - date_count, num_count, fmt) - elif not got_sep: - if book.verbosity: - fprintf(book.logfile, - "WARNING *** format %r produces constant result\n", - fmt) - return date_count > num_count - -def handle_format(self, data, rectype=XL_FORMAT): - DEBUG = 0 - bv = self.biff_version - if rectype == XL_FORMAT2: - bv = min(bv, 30) - if not self.encoding: - self.derive_encoding() - strpos = 2 - if bv >= 50: - fmtkey = unpack('= 80: - unistrg = unpack_unicode(data, 2) - else: - unistrg = unpack_string(data, strpos, self.encoding, lenlen=1) - blah = DEBUG or self.verbosity >= 3 - if blah: - fprintf(self.logfile, - "FORMAT: count=%d fmtkey=0x%04x (%d) s=%r\n", - self.actualfmtcount, fmtkey, fmtkey, unistrg) - is_date_s = self.is_date_format_string(unistrg) - ty = [FGE, FDT][is_date_s] - if not(fmtkey > 163 or bv < 50): - # user_defined if fmtkey > 163 - # N.B. Gnumeric incorrectly starts these at 50 instead of 164 :-( - # if earlier than BIFF 5, standard info is useless - std_ty = std_format_code_types.get(fmtkey, FUN) - # print "std ty", std_ty - is_date_c = std_ty == FDT - if self.verbosity and 0 < fmtkey < 50 and (is_date_c ^ is_date_s): - DEBUG = 2 - fprintf(self.logfile, - "WARNING *** Conflict between " - "std format key %d and its format string %r\n", - fmtkey, unistrg) - if DEBUG == 2: - fprintf(self.logfile, - "ty: %d; is_date_c: %r; is_date_s: %r; fmt_strg: %r", - ty, is_date_c, is_date_s, unistrg) - fmtobj = Format(fmtkey, ty, unistrg) - if blah: - fmtobj.dump(self.logfile, - header="--- handle_format [%d] ---" % (self.actualfmtcount-1, )) - self.format_map[fmtkey] = fmtobj - self.format_list.append(fmtobj) - -# ============================================================================= - -def handle_palette(book, data): - if not book.formatting_info: - return - blah = DEBUG or book.verbosity >= 2 - n_colours, = unpack('= 50] - if ((DEBUG or book.verbosity >= 1) - and n_colours != expected_n_colours): - fprintf(book.logfile, - "NOTE *** Expected %d colours in PALETTE record, found %d\n", - expected_n_colours, n_colours) - elif blah: - fprintf(book.logfile, - "PALETTE record with %d colours\n", n_colours) - fmt = '> 8) & 0xff - blue = (c >> 16) & 0xff - old_rgb = book.colour_map[8+i] - new_rgb = (red, green, blue) - book.palette_record.append(new_rgb) - book.colour_map[8+i] = new_rgb - if blah: - if new_rgb != old_rgb: - print("%2d: %r -> %r" % (i, old_rgb, new_rgb), file=book.logfile) - -def palette_epilogue(book): - # Check colour indexes in fonts etc. - # This must be done here as FONT records - # come *before* the PALETTE record :-( - for font in book.font_list: - if font.font_index == 4: # the missing font record - continue - cx = font.colour_index - if cx == 0x7fff: # system window text colour - continue - if cx in book.colour_map: - book.colour_indexes_used[cx] = 1 - elif book.verbosity: - print("Size of colour table:", len(book.colour_map), file=book.logfile) - fprintf(book.logfile, "*** Font #%d (%r): colour index 0x%04x is unknown\n", - font.font_index, font.name, cx) - if book.verbosity >= 1: - used = sorted(book.colour_indexes_used.keys()) - print("\nColour indexes used:\n%r\n" % used, file=book.logfile) - -def handle_style(book, data): - if not book.formatting_info: - return - blah = DEBUG or book.verbosity >= 2 - bv = book.biff_version - flag_and_xfx, built_in_id, level = unpack('= 80: - try: - name = unpack_unicode(data, 2, lenlen=2) - except UnicodeDecodeError: - print("STYLE: built_in=%d xf_index=%d built_in_id=%d level=%d" \ - % (built_in, xf_index, built_in_id, level), file=book.logfile) - print("raw bytes:", repr(data[2:]), file=book.logfile) - raise - else: - name = unpack_string(data, 2, book.encoding, lenlen=1) - if blah and not name: - print("WARNING *** A user-defined style has a zero-length name", file=book.logfile) - book.style_name_map[name] = (built_in, xf_index) - if blah: - fprintf(book.logfile, "STYLE: built_in=%d xf_index=%d built_in_id=%d level=%d name=%r\n", - built_in, xf_index, built_in_id, level, name) - -def check_colour_indexes_in_obj(book, obj, orig_index): - alist = sorted(obj.__dict__.items()) - for attr, nobj in alist: - if hasattr(nobj, 'dump'): - check_colour_indexes_in_obj(book, nobj, orig_index) - elif attr.find('colour_index') >= 0: - if nobj in book.colour_map: - book.colour_indexes_used[nobj] = 1 - continue - oname = obj.__class__.__name__ - print("*** xf #%d : %s.%s = 0x%04x (unknown)" \ - % (orig_index, oname, attr, nobj), file=book.logfile) - -def fill_in_standard_formats(book): - for x in std_format_code_types.keys(): - if x not in book.format_map: - ty = std_format_code_types[x] - # Note: many standard format codes (mostly CJK date formats) have - # format strings that vary by locale; xlrd does not (yet) - # handle those; the type (date or numeric) is recorded but the fmt_str will be None. - fmt_str = std_format_strings.get(x) - fmtobj = Format(x, ty, fmt_str) - book.format_map[x] = fmtobj - -def handle_xf(self, data): - ### self is a Book instance - # DEBUG = 0 - blah = DEBUG or self.verbosity >= 3 - bv = self.biff_version - xf = XF() - xf.alignment = XFAlignment() - xf.alignment.indent_level = 0 - xf.alignment.shrink_to_fit = 0 - xf.alignment.text_direction = 0 - xf.border = XFBorder() - xf.border.diag_up = 0 - xf.border.diag_down = 0 - xf.border.diag_colour_index = 0 - xf.border.diag_line_style = 0 # no line - xf.background = XFBackground() - xf.protection = XFProtection() - # fill in the known standard formats - if bv >= 50 and not self.xfcount: - # i.e. do this once before we process the first XF record - fill_in_standard_formats(self) - if bv >= 80: - unpack_fmt = '> 2 - for attr_stem in \ - "format font alignment border background protection".split(): - attr = "_" + attr_stem + "_flag" - setattr(xf, attr, reg & 1) - reg >>= 1 - upkbitsL(xf.border, pkd_brdbkg1, ( - (0, 0x0000000f, 'left_line_style'), - (4, 0x000000f0, 'right_line_style'), - (8, 0x00000f00, 'top_line_style'), - (12, 0x0000f000, 'bottom_line_style'), - (16, 0x007f0000, 'left_colour_index'), - (23, 0x3f800000, 'right_colour_index'), - (30, 0x40000000, 'diag_down'), - (31, 0x80000000, 'diag_up'), - )) - upkbits(xf.border, pkd_brdbkg2, ( - (0, 0x0000007F, 'top_colour_index'), - (7, 0x00003F80, 'bottom_colour_index'), - (14, 0x001FC000, 'diag_colour_index'), - (21, 0x01E00000, 'diag_line_style'), - )) - upkbitsL(xf.background, pkd_brdbkg2, ( - (26, 0xFC000000, 'fill_pattern'), - )) - upkbits(xf.background, pkd_brdbkg3, ( - (0, 0x007F, 'pattern_colour_index'), - (7, 0x3F80, 'background_colour_index'), - )) - elif bv >= 50: - unpack_fmt = '> 2 - for attr_stem in \ - "format font alignment border background protection".split(): - attr = "_" + attr_stem + "_flag" - setattr(xf, attr, reg & 1) - reg >>= 1 - upkbitsL(xf.background, pkd_brdbkg1, ( - ( 0, 0x0000007F, 'pattern_colour_index'), - ( 7, 0x00003F80, 'background_colour_index'), - (16, 0x003F0000, 'fill_pattern'), - )) - upkbitsL(xf.border, pkd_brdbkg1, ( - (22, 0x01C00000, 'bottom_line_style'), - (25, 0xFE000000, 'bottom_colour_index'), - )) - upkbits(xf.border, pkd_brdbkg2, ( - ( 0, 0x00000007, 'top_line_style'), - ( 3, 0x00000038, 'left_line_style'), - ( 6, 0x000001C0, 'right_line_style'), - ( 9, 0x0000FE00, 'top_colour_index'), - (16, 0x007F0000, 'left_colour_index'), - (23, 0x3F800000, 'right_colour_index'), - )) - elif bv >= 40: - unpack_fmt = '> 6 - xf.alignment.rotation = [0, 255, 90, 180][orientation] - reg = pkd_used >> 2 - for attr_stem in \ - "format font alignment border background protection".split(): - attr = "_" + attr_stem + "_flag" - setattr(xf, attr, reg & 1) - reg >>= 1 - upkbits(xf.background, pkd_bkg_34, ( - ( 0, 0x003F, 'fill_pattern'), - ( 6, 0x07C0, 'pattern_colour_index'), - (11, 0xF800, 'background_colour_index'), - )) - upkbitsL(xf.border, pkd_brd_34, ( - ( 0, 0x00000007, 'top_line_style'), - ( 3, 0x000000F8, 'top_colour_index'), - ( 8, 0x00000700, 'left_line_style'), - (11, 0x0000F800, 'left_colour_index'), - (16, 0x00070000, 'bottom_line_style'), - (19, 0x00F80000, 'bottom_colour_index'), - (24, 0x07000000, 'right_line_style'), - (27, 0xF8000000, 'right_colour_index'), - )) - elif bv == 30: - unpack_fmt = '> 2 - for attr_stem in \ - "format font alignment border background protection".split(): - attr = "_" + attr_stem + "_flag" - setattr(xf, attr, reg & 1) - reg >>= 1 - upkbits(xf.background, pkd_bkg_34, ( - ( 0, 0x003F, 'fill_pattern'), - ( 6, 0x07C0, 'pattern_colour_index'), - (11, 0xF800, 'background_colour_index'), - )) - upkbitsL(xf.border, pkd_brd_34, ( - ( 0, 0x00000007, 'top_line_style'), - ( 3, 0x000000F8, 'top_colour_index'), - ( 8, 0x00000700, 'left_line_style'), - (11, 0x0000F800, 'left_colour_index'), - (16, 0x00070000, 'bottom_line_style'), - (19, 0x00F80000, 'bottom_colour_index'), - (24, 0x07000000, 'right_line_style'), - (27, 0xF8000000, 'right_colour_index'), - )) - xf.alignment.vert_align = 2 # bottom - xf.alignment.rotation = 0 - elif bv == 21: - #### Warning: incomplete treatment; formatting_info not fully supported. - #### Probably need to offset incoming BIFF2 XF[n] to BIFF8-like XF[n+16], - #### and create XF[0:16] like the standard ones in BIFF8 - #### *AND* add 16 to all XF references in cell records :-( - (xf.font_index, format_etc, halign_etc) = unpack('= 3 - blah1 = DEBUG or self.verbosity >= 1 - if blah: - fprintf(self.logfile, "xf_epilogue called ...\n") - - def check_same(book_arg, xf_arg, parent_arg, attr): - # the _arg caper is to avoid a Warning msg from Python 2.1 :-( - if getattr(xf_arg, attr) != getattr(parent_arg, attr): - fprintf(book_arg.logfile, - "NOTE !!! XF[%d] parent[%d] %s different\n", - xf_arg.xf_index, parent_arg.xf_index, attr) - - for xfx in xrange(num_xfs): - xf = self.xf_list[xfx] - if xf.format_key not in self.format_map: - msg = "ERROR *** XF[%d] unknown format key (%d, 0x%04x)\n" - fprintf(self.logfile, msg, - xf.xf_index, xf.format_key, xf.format_key) - xf.format_key = 0 - - fmt = self.format_map[xf.format_key] - cellty = _cellty_from_fmtty[fmt.type] - self._xf_index_to_xl_type_map[xf.xf_index] = cellty - # Now for some assertions etc - if not self.formatting_info: - continue - if xf.is_style: - continue - if not(0 <= xf.parent_style_index < num_xfs): - if blah1: - fprintf(self.logfile, - "WARNING *** XF[%d]: is_style=%d but parent_style_index=%d\n", - xf.xf_index, xf.is_style, xf.parent_style_index) - # make it conform - xf.parent_style_index = 0 - if self.biff_version >= 30: - if blah1: - if xf.parent_style_index == xf.xf_index: - fprintf(self.logfile, - "NOTE !!! XF[%d]: parent_style_index is also %d\n", - xf.xf_index, xf.parent_style_index) - elif not self.xf_list[xf.parent_style_index].is_style: - fprintf(self.logfile, - "NOTE !!! XF[%d]: parent_style_index is %d; style flag not set\n", - xf.xf_index, xf.parent_style_index) - if blah1 and xf.parent_style_index > xf.xf_index: - fprintf(self.logfile, - "NOTE !!! XF[%d]: parent_style_index is %d; out of order?\n", - xf.xf_index, xf.parent_style_index) - parent = self.xf_list[xf.parent_style_index] - if not xf._alignment_flag and not parent._alignment_flag: - if blah1: check_same(self, xf, parent, 'alignment') - if not xf._background_flag and not parent._background_flag: - if blah1: check_same(self, xf, parent, 'background') - if not xf._border_flag and not parent._border_flag: - if blah1: check_same(self, xf, parent, 'border') - if not xf._protection_flag and not parent._protection_flag: - if blah1: check_same(self, xf, parent, 'protection') - if not xf._format_flag and not parent._format_flag: - if blah1 and xf.format_key != parent.format_key: - fprintf(self.logfile, - "NOTE !!! XF[%d] fmtk=%d, parent[%d] fmtk=%r\n%r / %r\n", - xf.xf_index, xf.format_key, parent.xf_index, parent.format_key, - self.format_map[xf.format_key].format_str, - self.format_map[parent.format_key].format_str) - if not xf._font_flag and not parent._font_flag: - if blah1 and xf.font_index != parent.font_index: - fprintf(self.logfile, - "NOTE !!! XF[%d] fontx=%d, parent[%d] fontx=%r\n", - xf.xf_index, xf.font_index, parent.xf_index, parent.font_index) - -def initialise_book(book): - initialise_colour_map(book) - book._xf_epilogue_done = 0 - methods = ( - handle_font, - handle_efont, - handle_format, - is_date_format_string, - handle_palette, - palette_epilogue, - handle_style, - handle_xf, - xf_epilogue, - ) - for method in methods: - setattr(book.__class__, method.__name__, method) - -## -#

      A collection of the border-related attributes of an XF record. -# Items correspond to those in the Excel UI's Format/Cells/Border tab.

      -#

      An explanations of "colour index" is given in the Formatting -# section at the start of this document. -# There are five line style attributes; possible values and the -# associated meanings are: -# 0 = No line, -# 1 = Thin, -# 2 = Medium, -# 3 = Dashed, -# 4 = Dotted, -# 5 = Thick, -# 6 = Double, -# 7 = Hair, -# 8 = Medium dashed, -# 9 = Thin dash-dotted, -# 10 = Medium dash-dotted, -# 11 = Thin dash-dot-dotted, -# 12 = Medium dash-dot-dotted, -# 13 = Slanted medium dash-dotted. -# The line styles 8 to 13 appear in BIFF8 files (Excel 97 and later) only. -# For pictures of the line styles, refer to OOo docs s3.10 (p22) -# "Line Styles for Cell Borders (BIFF3-BIFF8)".

      -#
      -- New in version 0.6.1 -class XFBorder(BaseObject, EqNeAttrs): - - ## - # The colour index for the cell's top line - top_colour_index = 0 - ## - # The colour index for the cell's bottom line - bottom_colour_index = 0 - ## - # The colour index for the cell's left line - left_colour_index = 0 - ## - # The colour index for the cell's right line - right_colour_index = 0 - ## - # The colour index for the cell's diagonal lines, if any - diag_colour_index = 0 - ## - # The line style for the cell's top line - top_line_style = 0 - ## - # The line style for the cell's bottom line - bottom_line_style = 0 - ## - # The line style for the cell's left line - left_line_style = 0 - ## - # The line style for the cell's right line - right_line_style = 0 - ## - # The line style for the cell's diagonal lines, if any - diag_line_style = 0 - ## - # 1 = draw a diagonal from top left to bottom right - diag_down = 0 - ## - # 1 = draw a diagonal from bottom left to top right - diag_up = 0 - -## -# A collection of the background-related attributes of an XF record. -# Items correspond to those in the Excel UI's Format/Cells/Patterns tab. -# An explanation of "colour index" is given in the Formatting -# section at the start of this document. -#
      -- New in version 0.6.1 -class XFBackground(BaseObject, EqNeAttrs): - - ## - # See section 3.11 of the OOo docs. - fill_pattern = 0 - ## - # See section 3.11 of the OOo docs. - background_colour_index = 0 - ## - # See section 3.11 of the OOo docs. - pattern_colour_index = 0 - -## -# A collection of the alignment and similar attributes of an XF record. -# Items correspond to those in the Excel UI's Format/Cells/Alignment tab. -#
      -- New in version 0.6.1 - -class XFAlignment(BaseObject, EqNeAttrs): - - ## - # Values: section 6.115 (p 214) of OOo docs - hor_align = 0 - ## - # Values: section 6.115 (p 215) of OOo docs - vert_align = 0 - ## - # Values: section 6.115 (p 215) of OOo docs.
      - # Note: file versions BIFF7 and earlier use the documented - # "orientation" attribute; this will be mapped (without loss) - # into "rotation". - rotation = 0 - ## - # 1 = text is wrapped at right margin - text_wrapped = 0 - ## - # A number in range(15). - indent_level = 0 - ## - # 1 = shrink font size to fit text into cell. - shrink_to_fit = 0 - ## - # 0 = according to context; 1 = left-to-right; 2 = right-to-left - text_direction = 0 - -## -# A collection of the protection-related attributes of an XF record. -# Items correspond to those in the Excel UI's Format/Cells/Protection tab. -# Note the OOo docs include the "cell or style" bit -# in this bundle of attributes. -# This is incorrect; the bit is used in determining which bundles to use. -#
      -- New in version 0.6.1 - -class XFProtection(BaseObject, EqNeAttrs): - - ## - # 1 = Cell is prevented from being changed, moved, resized, or deleted - # (only if the sheet is protected). - cell_locked = 0 - ## - # 1 = Hide formula so that it doesn't appear in the formula bar when - # the cell is selected (only if the sheet is protected). - formula_hidden = 0 - -## -# eXtended Formatting information for cells, rows, columns and styles. -#
      -- New in version 0.6.1 -# -#

      Each of the 6 flags below describes the validity of -# a specific group of attributes. -#
      -# In cell XFs, flag==0 means the attributes of the parent style XF are used, -# (but only if the attributes are valid there); flag==1 means the attributes -# of this XF are used.
      -# In style XFs, flag==0 means the attribute setting is valid; flag==1 means -# the attribute should be ignored.
      -# Note that the API -# provides both "raw" XFs and "computed" XFs -- in the latter case, cell XFs -# have had the above inheritance mechanism applied. -#

      - -class XF(BaseObject): - - ## - # 0 = cell XF, 1 = style XF - is_style = 0 - ## - # cell XF: Index into Book.xf_list - # of this XF's style XF
      - # style XF: 0xFFF - parent_style_index = 0 - ## - # - _format_flag = 0 - ## - # - _font_flag = 0 - ## - # - _alignment_flag = 0 - ## - # - _border_flag = 0 - ## - # - _background_flag = 0 - ## - #   - _protection_flag = 0 - ## - # Index into Book.xf_list - xf_index = 0 - ## - # Index into Book.font_list - font_index = 0 - ## - # Key into Book.format_map - #

      - # Warning: OOo docs on the XF record call this "Index to FORMAT record". - # It is not an index in the Python sense. It is a key to a map. - # It is true only for Excel 4.0 and earlier files - # that the key into format_map from an XF instance - # is the same as the index into format_list, and only - # if the index is less than 164. - #

      - format_key = 0 - ## - # An instance of an XFProtection object. - protection = None - ## - # An instance of an XFBackground object. - background = None - ## - # An instance of an XFAlignment object. - alignment = None - ## - # An instance of an XFBorder object. - border = None diff --git a/webhub/xlrd/formatting.pyc b/webhub/xlrd/formatting.pyc deleted file mode 100644 index 4e2040bf31ccc4f288369f97c0aef9911f313b83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27981 zcmeHvd3apcb>De20}wL=Nsu53LX^m%DA)kST{0z6l(~WuZ3?0vDU$|CkAb-lz$0b> z<~@i5n~W4wN}G61oW_k4+qJW`P8!>(?bP)q$F`h0mhHw#n}7P%i4!+X+Q#44ul<_- z5%u>w=gk6uq)FLHzqY}0-(Ak#&b{|+_q><>Z!2<#|MlyiEK2gTAJ0SLN%V=Fh{K;J zC6Tfxqn>y!C8H_LO-m^)qiKz2q?D0zhm3XrqC;G#lse@MW6PwpOv+s{+9l02xmQMerMy-~ z*GhSvjINXNdKq0WtMJHd<{P}_8@$DH;`EPo4c_vXi^HGw zg-Ex!722lFWu?Yfw#{pWj;9HuO(o+&Q4?OPEFNe39IgE(PBfW}O^4lzH(}cQYT^)) zW?${&w78AO`dY4Y!5o|L$k!zMLS_>WtHkLa^A#Zpeh>$kwQ21%*ADs3IEtEaMHkya z1b;S$9&!4|e2l+|b3{Ay{eHExXSfAU{?7I*)fU<0qS$9jA8*<*t}`azTL6bC5OM&vGWo5XDvmlwB1+}+}~ z$|U#&^6!ynMMhDIg&L4&!HfX*3JLNu;fZ@CORtH%VHDK{CBS&L$OJ%#ngwWVo3^o4 z+`SsPN8I){&>c>HD<8fTvqj)?f?gSpM5%*d=PV&s}bB~J~!Q%;W zr|@{4I3JJG;(#l6MjSBbo)q_bJkE+chsPVljpA`$+yy)?iUX?M8^smyc$2s>JjTTp z@o?e-JSKEe+@!cEq(X6*@R$}?!lNv%f<<{nLS2H@N`%43A0>C?hCRW~!BiQqikoS~ z&$00YW*ys1U`lK_$*-{WV2##YD{i&{Qxg|8U}A2d1b$B3Qwhu@M1@yMh&?bU^@9?; zQjT4GKrTQ68IsX$GJ3Dn2PD9H4oR?$OV)QS1rP`lJ0!SQ0&I#Ma$xrJU1w*1q3i7V zAvwQI&fhENQHq7WEZ4B3c4_;&rGB>ryZCo$4>whxHiMOaK!V*8>_syj*|X>O%6Y4B zpVT*LD|NQg0ER?zp8@a9o(+L4)J9Lc2(vFq%(o}rtclV4CG6z*34FxLEiv7m*x8JSDC)_fQ(|x{+J$uha|viJ*_7S8~7Q`d|2F%YXp1wtr~em z+%=70TR*FjgW{gk2zK~SXymZCf1nX;_J7!Ruzr%6dN_}Y`>D2qw>1lJF5cc&@Q!A| zu()@&6}+oifFty77Vz}{bTju+acMa{_%o1T!dp5qlmxW6zN%?fK}iJDv_s+1gWM-qJ&7}N z#gl%5p{|F+zg^D89a^tb`md%0BfpYjjjL&?53zwOX=`938$j8D2GDxnf!VU0MTbeN z+GXE?#Tno~eFy4bjUAvWy>d0fF(y?q7|5r!jnjjQckp1$ijxjs$Ka)>v6oW|lSHd- zj$*Y`ovRhfV>59t@{(j&aX~$Z3Ug85;#J6>;9|xxc61@EOjLD&>$S1UWDsvaaZoQ} zbzLwqHdl%ZGh?M7j)TJZgIae{wr<(+aAKnHR8Wg>1a*6tu-F;2G*YbugIp+0jaRGF zvCc%34lM)WA{C8sPDR~+!c8dA-3WF)H8zQX#k(#C<5P3vyXvKy+tnKW&YAgG_h}`J z!?98r1%(z0rrAgyfp}T{&7^w0b*U9zx7X|Sr&p)ed1+|Axm1xSmgIoP`zW{6w-JG| zi-iZ>!TQwSldKQO-LZ?$$%T|$?U1XTas@P9WV%ag56Eo4R8S2SmP!3SiFJPfKpEEE zTBl2{X5|X@RhL}J%7)~z_5swGeO%76BrO)Be$$f~B+go?^6@=JL8EkE+9T{1V4eViD$T>a8366ki@tj~GaB6@e+65}XSS^U+ z2KIEvKrJ6e40pU5;lufHLX`uM!=e^I&Omc$C@q6rab3_b4$6_w_0!$(=5R){ zl|Bv<(f%EcvfAXhmbqYjZZcku?6w|kbG61*S7Kr-TvsYn9ILnj+u&KTVFB+VPwlbC zUfoK!wVz1xu7?gRz3oZq==3_herzK?@AU3SV%^?yjcxRlkPXj{1c&3e78OxZf4KFJ zaC>p~0Yo0~I3bUt<;BxTTKv;`x{I7e<6rkANp_Q3fo5SloK~im@H^6pLcxW_xKPk0 z^pHhCX+jZPji-Xz?PG&@Efj*;Lg9mmMI4cMw=g)eYtGjO=Rbg`4$6NJG5;YZ@qc?K z-NsT03WX1&YBCnvbvF6RSQ&*%2@8dC)y_iDtoW!BjZqwG#Gy1I%t`>Wkn$(k&zJ+H5g~L) zgexhw!+yp%EEWh?bD!Yg*%6Krk?`HX_aK?3e}KUw2okbeaw^Ldr^aey#W<)HB2aX4 z-*yI}XbYm^*i29c`PLIPF;)&s^I9^2`GQ-3lW56Q5Kc}RP#A;q7L_?XIdbCY6UT-N zCr_Li_79)b?zt%10%WMU;&h=p*ATXxGWwtpgXJs49GWNZ2bCO(MnU`+va^hK!;7&yB2u8Xv zr@_szXb=NHh4h zFoc@mC7|jvuhJ~+YEP!Yq`>R|ib$IBBICyZGY6M)JK9@|;1 z?fhzr6URJk;=ML;l_VBS93%PLomw(x;8OR{qA@$z3D(IZwoQjzT8EQ^sbbm?fDqBO zxCDeEzNV4c%K?zBZB$MhIWS}^Rf+({%x@u zYw<(Pi=y1Gr7_1#cPZ9j7Q@vBwheNY%X%}YUGq{rgGycQ#K9d2$$dgniHHaJ*j%|h zpC@}Vt%16oDqaU3H{Eb0VoGu$&*M+^Lgj*N3g!&J zk?Dk=#Rwv{f_zm_w9-^C267(Vh5Q{mcH|R6L^`w|qGcsMKj1FrQKG;T)hZZMM6Cr` zi+=_;BVXyIN`25PtB(3Ol^OIAJ_Q2T$m8&j4Ig>(QKhQTO2(^E7|;88HnD{P^e&gp%^=3~d~RiPG3)boJ^D~{s_&B{>l{_SWrN zx9(PrQtN7x0K|W^8o@o9RTz4B&|*VMU!wKxMd$s%U2K+ zbxq2<+^+fgkd#qda68K7@($#X6ln{ZW3X02EGT83+Fvf`4?n)^)Z-z=bjXl6k;vO0 zMM*ZvpCXyrI)J1+;sCAhJhMXLFJhlf^lD@%9AE);*hYaNCMkUdOKCCDv|(M@5vDM>Ew3ObXWW{w_}x41*4#sdp^(Qo+NKrmX|I7qs|phBbqF5q zYVX8`+3JVG&~8!f;K62R_p&0nU16}%S)*pNzoe>l*;aQu>vBKqYACxrKXuX8CfvzF z?glN~xjW?OY`bs84#EZscQc1)QfxVq@73|qp zf;lK9EtoHo1RlHi6*VX!7jiqqjmwn1p+A~5&YVM(vrujJQ;i}O#iu)^hPx;j#hOKE z0hyN+610?ZdRi(6Nnz0h+xk$W36=Gk^QmM|XuSfN8jzg|*~qWxsF9yZPkT~*QOiB4 zq$K4*Islb@t0%L)u$4iogwVT8h2G^Js5FFpSUNz}p*XC^tuG;9ee*n3S)c@f@S{+% zfe0iC4u2c1HK!9y<*1u54*udv24=adT~fcuddDt4sh9({a$0f5gINx7%)8$Vc+^&4 z!eXoM@L=0R+zPv3-D4r-IO5=Oj~MP`CjMyktNk|NyYT>{KaFVZciDP39vmGZ{)cBX zu5F@#Z*zm20*U~RmAwWRo!L#P${n;?wwF#L#XJJ%;N*WYe>=5GE{(LQPb46I|En5wQk@8Q9JKE~Q5lum75Bno0 zMjp*?+qMlr?M>~^kCn&6$+_xWly{E|xO|1dL^*zBpq5jz&|Wv`2jK^(Y3G&dgiAh!actPLBH+S`tgm0)FI=UUY2lDMwSmD>hEUU{ZA7x+B9 zgFMA56sqkMJ!*59QyeH4jx;Q)bQ=XTFzLkAno^0$Y7EQHjLI+8X>|^U95$#OGBt?A z?OEN_zP@0MDE(l$zd(WEO>8d*L#W!-*Fe_ef47%T(%p~-v)(HpQRY>)%&7d=>E$2+ zc0;1H{}q7FAcv)t7t^rNH)1P1wa*iiWXnq2jwi%TCAdqlDBx`2!p2D24mG{2)q#gy zO$T-wqN93npj(?A14Iw!9S4)-3Oaa=1Ox^I91|RWl+tK`SU(PHWm9tKX!X~|L7!^x zR%+2f>jb*UfZl+fJ&-CGj1i~L=}nTh$MGza%0?0&bOL%{0|V(oy=!R?rJyx4f1&y6 zxI*I!fI$-0d89TVYA_I51ijcFY%QH?nPD-Gx!GQ_)RM6Usbyy|2~@)PK%g=*b0RUV zOk)i{<3W+S1T#n{cR9xhy0V-#L9MQ$IW(G;+GjkV0x+P=Fv$HBi5MbEnNfBHa9KG_ zC}0)jwK-N4V3ZhA29)PBdKUr0ZTA`9Ynv0O8tP~>gtiIAuw|I5<`bk%GGL$nN^U?)&Tc!2vgvk4Uw`Ut*QV5VVu7 zqt(g;&8E0fi7y91B_G92x`}4;pn9;}<#E&8pr&@}a0`=DDJP!a51@ye^s|U0E@&F$ zG_oWq7Ak@^57hiK90)TaD@aprimY&+6<90bGrZVb z-b$*qbQEbL@_MzPVio128gBJrSoY5$?!OU%DxAQ@Of@o-Lpi2;M_AnW6G{F>f{|V} zvFJ~>YC4Q_L20qkPIdg!?GsiN|IIpU)B76|R3H6`62ERGr7IBc_U-}^HN_mcsf|$8 zNgmVQdJxqfZ$oBHs@vOTc_}FD2?0us};ey_V!{)`Rpn_^_?FWrTZSVr-nn(v~`W#6aNaZxHDW6l( z45c7IAaNkqki9}01xU+UP@p~#U@RKO1UV1% z5+x*%N@7fC{GO(|qz@F@1jmdAf=g*hq2NHqTTuv-=mIk&8CJ^18S;V_1IY>&9^^0D zP6`FkI>sm5v;qK0_{O6oupQ3ySUa-I@i~K6(kGr zNU105Rl{jkE+MB!=@T9tO0&uVqUs@!*{c+*f9~NRg8Gp>qBV8oTHhpvB!RPk?#({L zzq3m0xC6{y*r0BdUqT)n^8w-Ej(9sa^2C{870-t2GdM_)=|GU|x+uzrmHes0Cx_1f z1gET8bK60qaCrlm96T;W7MA8Ohw)Tf{hVsY2kP|!7n-49_mVpM^FgEID138(+S~I+ zaPmpo99~FfRFNLo>qz75p4!L4CSDTF2@Xv(U`;>&OP5ZY$#imCV_M3z{ZX zimN3UV=Bc!iB_^2{yix1-@;<@CWzoFFizIMR8)i=FU?tnYRT@(N%1PdW!{_LKGj-@ z%83~*`5S2{*6(aSI=sBS4#Rt{%2EJ}ek*G`!$ZSr?n7*?rTYMiDY`jv#SB zGb`{!GN~ft0aRuJKFu2~MakC_bAfq!icTP=oH2r8g6+r!1*eV7V!D;3 z%;Ft@T1|^}O|#$I-;X@sjWZg|gfOko1!uV9Mu1VO_ciIwE@)Iu7}uJ%z6 zjETEgcUd2{+yj80{is*@eeDFCu-PG+1BZu7fXzDV&G#pY37P{3Lx_Ekx@TwK?q#t3 zr*l#(W22HKl8u4w>L}0?J&nkTFuCQ}3{R)ijR!l$Wm~fmJ25s0uyn&Krmk%AFR0VlXmBywK2ktjTV~P)<$qG; zge7uQ9>4`za`eD2bYCJ@d|GDhK8;D^J@O1zn^ zeZt%(s3J7-3!&OJN_3+{z8zui#M;>9{P=tvMEjT6Ne=U1)^@=Ejt&w~7v@U=g!m{w zmVa|ltM0%B-6Ys7-7O+sgS@<#=kejC0V1-%uhvh(UR;B4H#@{R) z4r%^?-&m3dV+oid8RcDIk2y&9E0l#QLrkLwGQ%cA{0tJX*OK)p$Gg^GD)kTYEFZi0 zUiCCoGGwx?9%HG!hN#7fptK8)1p#{&!gq$m2>g=A(|8s#8?re0<&Tq$@gV6*KY%)r zt=M}Pg=EU&IF{NZg=>Iz7%ebDXS4v7@OPF3)m#u&u~U8$VmfxPBHm4qh1DmNfkB#! zb`C`ONAeBEHJGriArtRZrF=gssdt$_gqX@jI1_Mgt-+lFcY#v@T#k$j+A)M5Y*;Bk zVbhI82rPD^hM^7yMUF79di8BXDINiE9b@2>b`eAzey!cE*bYSUgjzV7`jMYao&Ltp6?f+tq`fv;uAgz<&%L2ghJ?bbV^Y!2p~2(9N6il>(lY z)a_AIowb8Onn4Xr{2MypUR)h~LqL%+dYtTr&CRTwr&2ht5IA6o;Yr8ASCw5Iq#(^= zBCwDlgqu8s5gdCP`39=l;K@*Yq47f1jp3MrA~n$AJs%hI%`DOtE1>wHFZ$pu9K2N2 zDgeQO*x>5o=Ec2vX&K~`w}`vKw_1{VVA-$)9E9<&j@zlbq^=+&^lR!C-)Wedy|H z-2q3%USpdC`c}gstFh{Y`q3bNQ@VkC;0MV6IdSh5_m3OHS+FoaFYbK{CzmY4FNpg^ zaqk!R0dXG`_fKSkhI4H3br~Y~2^D429eB%b@fIJr5rWs~w#JJXYZvb64~hHm!ZC19 z|B|?07WXU7QQIj1g5jz5tKxo5+&^uUF>9k7g5TD`AB5x|*$%&!Ih(9GkPM%>e`q9z|c-@`*h$OfNeofI)2Lb*)abFkrqPTC6LLIwU zP)V>~uENh0P4`2O{IgE?P0htCOpxS2q`uWk8tvpc!<)NP(syN}(KIEgNp^_rJ2iXu z`OdSPEoc+G6)});w0~q7-VnWVmlQTh1zQ@dOXGO^m66S=H6oHv&{No=Cf@7etUlaM z>F>D-rB`hc((K!oovnZ^-Yt0P6&p7(@y1(~Bi=(kNVEYgl-vs6k4>B~=eH=xkQVkqFW)5bHo3A%F5Qd7W;t8w zlT5r_73Ygx)QWcqvMZjPyJEKXok_cTIkih_-|jMjqxLx+!fr_-K-7%dd_UKP_iL}_ zCEk;a?n*vsf&<(lYE_5uvX{lkvSBNQ)HK~{A<_(~1UQg&H8#c^+-CM?uiq-FpzS_2 zb3ytyi3A&zamw`n24Yj=wIW2#luX4~-InMq3a`^6C&I_{eL_{ERY}8ZW~D-@itBWz z{sn4qRsX;5Qhu?n*uvF-A zD-PqQ!JBZdPGc(HPgQFLNa>Rm^{I>@w-+wg==JHs8TLh?9$urd0jXb?LQ=*@o2p3a z`;%(4jiw;fP8Z^8VFIt9(RD3+o~^88z_wk;izs*(sEICdSfJ@EuY=&L7Wr|Q(1Tij z9F7H(H8rHeogubrut341N%aTy{8XRUQZRv$zz&e0Bmonf4kK zfkQz(^=lZf#&NaWUM}*q6=_%P3RK7&La1%e98^?Wj|%{3d81x;Nb&7LsOETKqZ0CF z0N<9eAAP?P`-i1-GvU+7)fvPX=YrOrfiXkhW=saTppa+|<@wDvR&8uSxjHY1e23Pc zq_Z}((U#d5P#q#Yk)n#j43xK^R#B5i5??T=m^f%H*Mc(jbr;7^Ik~vYhwT)S#}ZgJXTyi7DM?P#HjyRn@5h|96feIoy|gE1zQculKL)&@;?#7 zKe}KZ4F;jwtOO+?H6pIaGIdOA^f;4lHjH*3JE0D62aeQX0XxJB&md4$mU}>Vpe}Zp zXFk^vYo&HxTNynM3s9klynR>kl0+|{vA^+NXSs}BAH{PM6FcT+U^RP+wy-mVA!6Dt zsp}K_VHRlIQTtC4gy$k3zJzs+Mi6bkTR(SPL1E|~OYCIlj>GmA=a^8wu+(Q*?n zqiP+U*ifAy3 zP|`;0XaQ|Bh$ewlFXkl#(ty|j&ehZA>b!(h8c>s7>ar}Qmj=}&n(EluB$`&Zh;phk zYC<^;0OJs)p*rWqG}K^dSP4l@^(~9*P*VeIl2o1e5|U~_O}eT+$O_b=s|K=&xayW@ zC$9Q>=q-ZkZg0(TEuz;W%hp;J{= zxSK1nP_S-0fD~nxk_TNvTO=&?57@5cuqp%Tiz7FX%-XvA!JCJ&)J<017zhV;!wuFN z6UCkzFo$IKEHe&r12)qXo-8jJ}o!?w;22Z zgFi%|S}Xml^z927koh-!b?i0}?KEJkmP2)K_QV-(W7)ZM$Klj>Q@J0l>SoH}-Ve%<4c1-1BW}5!QXcLN>mNP>aaL>ZzUL7Dy^#e|% z#Y~LX-1zk59^D76^xj43`&3b{1(RxvAzooJ3d;VcI5@H{R>d7QO&tm9J1>ZAH_+GKEbV<=6lifAiK_QYQ4Va z(wRAg(lnem;FO)=ld1M+4yhh^JFZnfNS3vJ8_)*7OzW;d*qPbWYIRX-bSqihqP5d% zjXm7Fot5gIa{YE%NmDFYjh1p=Pde*uLH=gA%+TGPHT%sUf(M0q>QR1j>5o8! zaoGt&cL5t;Bk+QN`JbPH!y7lS+QSB(p>5kP`k9GW87dvJ>Bq~{E?;7$i0jIYso2AAxhfy@K|Y6AwB zFb1h1{Y&XO*eP%zsKAb|^$nsQ*YY^@aB+i+DLn&mGsbdw)oD9=v#=68$D5tiy2xF{ zw}~ui&EgiveCKz082fbcT2D01d#hT(YmN?=B-ScJT(TpCuR2DDK_vt1X$%n8%6P?+ zj)lCAseR8gXsb_m$d9+Ri!tkHlNR}^5Gr6Az?^o{kM1J8F4VviUkF%QgSbIoccrY7 zLEwESIs8#-eJS5mt%cXicO#jJulv) zRgxI0Al+UCFCVeWdm2^NqRI}| zmG!6+r8$=*hAK#7$k>j^#ZqZb3r)B`ZlcLxfE9&Yu>Fz?B`lzp_4A&n3q42a1SK2L z^S89;B!+%o)Shv5jynC?^NZfJwGKM?ukTL_f@-FHdaQvL&AwqRkYmHfcDtIeaZK;Qdri9iml!!D~+{^Qc5| z0S)<-WUQQd{B&YrtTw5#8>Ysnid}Zmg`{%y+vj;~#GK?JIH$b`Dyer3lG+4Pn)aeS zC?EFyCwzSwB$-dc3ZC3%EwO*A?5f`tTxvq!4~x6qTA4%a^^Ec;$=SzdcA@)4*xY{u zD?Z-0t?COXufFv$S=b$c=)-5-`$gZq7cm%i$^^LiDlmAJm7re(r&mzGz()}sj9I0U$Y zs|4n$|DRFbrc|`{++8fdi87g4x1j%Dm<$;F6@xn&sPOwm#_|YMj5PU>iiq7((ymcx zDGioMvA1BCoo!Gp)u9b4kqx;l`bibt?RaM}XWdo_1G-rr+sFGQZT9==R_-Oyk* z0Ok&qTdIi3@#CCAxmJZBh(1c{%qcJthamspE*7_+c=ZKNf%6v_!jr~s_4`1a^+Oq8 zhl+9ITZ#NeV*9WErzl*C8&abi;by@sd1TwZbF@(Df0+a4kl+ht78e`1{~hEl9p+x- z-e{N(O9JO!gz*1E2=7&dT?-e9r>t%Gzr*C08T=;(Ut;hT1}`x9DuS0erSG8XC_hB9__Uc{&P%z9>L2TBggSRj*;!+i<%k#KOnMnWaG$P zIx+|3W)#KOLpn?0T841ZxxttI;SG!sUr zGw5ZohQV3}l*U>nEdOpM$=8j||1o3VMes7wMdW-6sIrfeX7m%J3yxOj^2QPmJ_cB0 zhWP4zJXhlvZjogST}>jjyS;wVL2#|6{q+a)efZj(e5cf&8q0yK2xXW zI5WI;F;Dk2MMR%1*h~Dh?)cn$K1rxgM(?j?u!aG}g`0gu{8cwA-0Sle+~3ULR~QhV z{;Loulg4`#@QKpz@!IG6IB{bu+*LG>`PX1Vs%z#<&-zLVeZ1 z-sAmOtlGqC^J6WMKgZ^XsW~`@)wE)v=vN8;6oZK6WJkqn8803NDrDfBFn*1t&oFow zgGD^p$9)TZtLICzq)^G|DFFElbd4Q diff --git a/webhub/xlrd/formula.py b/webhub/xlrd/formula.py deleted file mode 100644 index 7c56aa4f..00000000 --- a/webhub/xlrd/formula.py +++ /dev/null @@ -1,2179 +0,0 @@ -# -*- coding: cp1252 -*- - -## -# Module for parsing/evaluating Microsoft Excel formulas. -# -#

      Copyright © 2005-2012 Stephen John Machin, Lingfo Pty Ltd

      -#

      This module is part of the xlrd package, which is released under -# a BSD-style licence.

      -## - -# No part of the content of this file was derived from the works of David Giffin. - -from __future__ import print_function -import copy -from struct import unpack -from .timemachine import * -from .biffh import unpack_unicode_update_pos, unpack_string_update_pos, \ - XLRDError, hex_char_dump, error_text_from_code, BaseObject - -__all__ = [ - 'oBOOL', 'oERR', 'oNUM', 'oREF', 'oREL', 'oSTRG', 'oUNK', - 'decompile_formula', - 'dump_formula', - 'evaluate_name_formula', - 'okind_dict', - 'rangename3d', 'rangename3drel', 'cellname', 'cellnameabs', 'colname', - 'FMLA_TYPE_CELL', - 'FMLA_TYPE_SHARED', - 'FMLA_TYPE_ARRAY', - 'FMLA_TYPE_COND_FMT', - 'FMLA_TYPE_DATA_VAL', - 'FMLA_TYPE_NAME', - ] - -FMLA_TYPE_CELL = 1 -FMLA_TYPE_SHARED = 2 -FMLA_TYPE_ARRAY = 4 -FMLA_TYPE_COND_FMT = 8 -FMLA_TYPE_DATA_VAL = 16 -FMLA_TYPE_NAME = 32 -ALL_FMLA_TYPES = 63 - - -FMLA_TYPEDESCR_MAP = { - 1 : 'CELL', - 2 : 'SHARED', - 4 : 'ARRAY', - 8 : 'COND-FMT', - 16: 'DATA-VAL', - 32: 'NAME', - } - -_TOKEN_NOT_ALLOWED = { - 0x01: ALL_FMLA_TYPES - FMLA_TYPE_CELL, # tExp - 0x02: ALL_FMLA_TYPES - FMLA_TYPE_CELL, # tTbl - 0x0F: FMLA_TYPE_SHARED + FMLA_TYPE_COND_FMT + FMLA_TYPE_DATA_VAL, # tIsect - 0x10: FMLA_TYPE_SHARED + FMLA_TYPE_COND_FMT + FMLA_TYPE_DATA_VAL, # tUnion/List - 0x11: FMLA_TYPE_SHARED + FMLA_TYPE_COND_FMT + FMLA_TYPE_DATA_VAL, # tRange - 0x20: FMLA_TYPE_SHARED + FMLA_TYPE_COND_FMT + FMLA_TYPE_DATA_VAL, # tArray - 0x23: FMLA_TYPE_SHARED, # tName - 0x39: FMLA_TYPE_SHARED + FMLA_TYPE_COND_FMT + FMLA_TYPE_DATA_VAL, # tNameX - 0x3A: FMLA_TYPE_SHARED + FMLA_TYPE_COND_FMT + FMLA_TYPE_DATA_VAL, # tRef3d - 0x3B: FMLA_TYPE_SHARED + FMLA_TYPE_COND_FMT + FMLA_TYPE_DATA_VAL, # tArea3d - 0x2C: FMLA_TYPE_CELL + FMLA_TYPE_ARRAY, # tRefN - 0x2D: FMLA_TYPE_CELL + FMLA_TYPE_ARRAY, # tAreaN - # plus weird stuff like tMem* - }.get - -oBOOL = 3 -oERR = 4 -oMSNG = 5 # tMissArg -oNUM = 2 -oREF = -1 -oREL = -2 -oSTRG = 1 -oUNK = 0 - -okind_dict = { - -2: "oREL", - -1: "oREF", - 0 : "oUNK", - 1 : "oSTRG", - 2 : "oNUM", - 3 : "oBOOL", - 4 : "oERR", - 5 : "oMSNG", - } - -listsep = ',' #### probably should depend on locale - - -# sztabN[opcode] -> the number of bytes to consume. -# -1 means variable -# -2 means this opcode not implemented in this version. -# Which N to use? Depends on biff_version; see szdict. -sztab0 = [-2, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -2, -1, 8, 4, 2, 2, 3, 9, 8, 2, 3, 8, 4, 7, 5, 5, 5, 2, 4, 7, 4, 7, 2, 2, -2, -2, -2, -2, -2, -2, -2, -2, 3, -2, -2, -2, -2, -2, -2, -2] -sztab1 = [-2, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -2, -1, 11, 5, 2, 2, 3, 9, 9, 2, 3, 11, 4, 7, 7, 7, 7, 3, 4, 7, 4, 7, 3, 3, -2, -2, -2, -2, -2, -2, -2, -2, 3, -2, -2, -2, -2, -2, -2, -2] -sztab2 = [-2, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -2, -1, 11, 5, 2, 2, 3, 9, 9, 3, 4, 11, 4, 7, 7, 7, 7, 3, 4, 7, 4, 7, 3, 3, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2] -sztab3 = [-2, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -2, -1, -2, -2, 2, 2, 3, 9, 9, 3, 4, 15, 4, 7, 7, 7, 7, 3, 4, 7, 4, 7, 3, 3, -2, -2, -2, -2, -2, -2, -2, -2, -2, 25, 18, 21, 18, 21, -2, -2] -sztab4 = [-2, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -2, -2, 2, 2, 3, 9, 9, 3, 4, 5, 5, 9, 7, 7, 7, 3, 5, 9, 5, 9, 3, 3, -2, -2, -2, -2, -2, -2, -2, -2, -2, 7, 7, 11, 7, 11, -2, -2] - -szdict = { - 20 : sztab0, - 21 : sztab0, - 30 : sztab1, - 40 : sztab2, - 45 : sztab2, - 50 : sztab3, - 70 : sztab3, - 80 : sztab4, - } - -# For debugging purposes ... the name for each opcode -# (without the prefix "t" used on OOo docs) -onames = ['Unk00', 'Exp', 'Tbl', 'Add', 'Sub', 'Mul', 'Div', 'Power', 'Concat', 'LT', 'LE', 'EQ', 'GE', 'GT', 'NE', 'Isect', 'List', 'Range', 'Uplus', 'Uminus', 'Percent', 'Paren', 'MissArg', 'Str', 'Extended', 'Attr', 'Sheet', 'EndSheet', 'Err', 'Bool', 'Int', 'Num', 'Array', 'Func', 'FuncVar', 'Name', 'Ref', 'Area', 'MemArea', 'MemErr', 'MemNoMem', 'MemFunc', 'RefErr', 'AreaErr', 'RefN', 'AreaN', 'MemAreaN', 'MemNoMemN', '', '', '', '', '', '', '', '', 'FuncCE', 'NameX', 'Ref3d', 'Area3d', 'RefErr3d', 'AreaErr3d', '', ''] - -func_defs = { - # index: (name, min#args, max#args, flags, #known_args, return_type, kargs) - 0 : ('COUNT', 0, 30, 0x04, 1, 'V', 'R'), - 1 : ('IF', 2, 3, 0x04, 3, 'V', 'VRR'), - 2 : ('ISNA', 1, 1, 0x02, 1, 'V', 'V'), - 3 : ('ISERROR', 1, 1, 0x02, 1, 'V', 'V'), - 4 : ('SUM', 0, 30, 0x04, 1, 'V', 'R'), - 5 : ('AVERAGE', 1, 30, 0x04, 1, 'V', 'R'), - 6 : ('MIN', 1, 30, 0x04, 1, 'V', 'R'), - 7 : ('MAX', 1, 30, 0x04, 1, 'V', 'R'), - 8 : ('ROW', 0, 1, 0x04, 1, 'V', 'R'), - 9 : ('COLUMN', 0, 1, 0x04, 1, 'V', 'R'), - 10 : ('NA', 0, 0, 0x02, 0, 'V', ''), - 11 : ('NPV', 2, 30, 0x04, 2, 'V', 'VR'), - 12 : ('STDEV', 1, 30, 0x04, 1, 'V', 'R'), - 13 : ('DOLLAR', 1, 2, 0x04, 1, 'V', 'V'), - 14 : ('FIXED', 2, 3, 0x04, 3, 'V', 'VVV'), - 15 : ('SIN', 1, 1, 0x02, 1, 'V', 'V'), - 16 : ('COS', 1, 1, 0x02, 1, 'V', 'V'), - 17 : ('TAN', 1, 1, 0x02, 1, 'V', 'V'), - 18 : ('ATAN', 1, 1, 0x02, 1, 'V', 'V'), - 19 : ('PI', 0, 0, 0x02, 0, 'V', ''), - 20 : ('SQRT', 1, 1, 0x02, 1, 'V', 'V'), - 21 : ('EXP', 1, 1, 0x02, 1, 'V', 'V'), - 22 : ('LN', 1, 1, 0x02, 1, 'V', 'V'), - 23 : ('LOG10', 1, 1, 0x02, 1, 'V', 'V'), - 24 : ('ABS', 1, 1, 0x02, 1, 'V', 'V'), - 25 : ('INT', 1, 1, 0x02, 1, 'V', 'V'), - 26 : ('SIGN', 1, 1, 0x02, 1, 'V', 'V'), - 27 : ('ROUND', 2, 2, 0x02, 2, 'V', 'VV'), - 28 : ('LOOKUP', 2, 3, 0x04, 2, 'V', 'VR'), - 29 : ('INDEX', 2, 4, 0x0c, 4, 'R', 'RVVV'), - 30 : ('REPT', 2, 2, 0x02, 2, 'V', 'VV'), - 31 : ('MID', 3, 3, 0x02, 3, 'V', 'VVV'), - 32 : ('LEN', 1, 1, 0x02, 1, 'V', 'V'), - 33 : ('VALUE', 1, 1, 0x02, 1, 'V', 'V'), - 34 : ('TRUE', 0, 0, 0x02, 0, 'V', ''), - 35 : ('FALSE', 0, 0, 0x02, 0, 'V', ''), - 36 : ('AND', 1, 30, 0x04, 1, 'V', 'R'), - 37 : ('OR', 1, 30, 0x04, 1, 'V', 'R'), - 38 : ('NOT', 1, 1, 0x02, 1, 'V', 'V'), - 39 : ('MOD', 2, 2, 0x02, 2, 'V', 'VV'), - 40 : ('DCOUNT', 3, 3, 0x02, 3, 'V', 'RRR'), - 41 : ('DSUM', 3, 3, 0x02, 3, 'V', 'RRR'), - 42 : ('DAVERAGE', 3, 3, 0x02, 3, 'V', 'RRR'), - 43 : ('DMIN', 3, 3, 0x02, 3, 'V', 'RRR'), - 44 : ('DMAX', 3, 3, 0x02, 3, 'V', 'RRR'), - 45 : ('DSTDEV', 3, 3, 0x02, 3, 'V', 'RRR'), - 46 : ('VAR', 1, 30, 0x04, 1, 'V', 'R'), - 47 : ('DVAR', 3, 3, 0x02, 3, 'V', 'RRR'), - 48 : ('TEXT', 2, 2, 0x02, 2, 'V', 'VV'), - 49 : ('LINEST', 1, 4, 0x04, 4, 'A', 'RRVV'), - 50 : ('TREND', 1, 4, 0x04, 4, 'A', 'RRRV'), - 51 : ('LOGEST', 1, 4, 0x04, 4, 'A', 'RRVV'), - 52 : ('GROWTH', 1, 4, 0x04, 4, 'A', 'RRRV'), - 56 : ('PV', 3, 5, 0x04, 5, 'V', 'VVVVV'), - 57 : ('FV', 3, 5, 0x04, 5, 'V', 'VVVVV'), - 58 : ('NPER', 3, 5, 0x04, 5, 'V', 'VVVVV'), - 59 : ('PMT', 3, 5, 0x04, 5, 'V', 'VVVVV'), - 60 : ('RATE', 3, 6, 0x04, 6, 'V', 'VVVVVV'), - 61 : ('MIRR', 3, 3, 0x02, 3, 'V', 'RVV'), - 62 : ('IRR', 1, 2, 0x04, 2, 'V', 'RV'), - 63 : ('RAND', 0, 0, 0x0a, 0, 'V', ''), - 64 : ('MATCH', 2, 3, 0x04, 3, 'V', 'VRR'), - 65 : ('DATE', 3, 3, 0x02, 3, 'V', 'VVV'), - 66 : ('TIME', 3, 3, 0x02, 3, 'V', 'VVV'), - 67 : ('DAY', 1, 1, 0x02, 1, 'V', 'V'), - 68 : ('MONTH', 1, 1, 0x02, 1, 'V', 'V'), - 69 : ('YEAR', 1, 1, 0x02, 1, 'V', 'V'), - 70 : ('WEEKDAY', 1, 2, 0x04, 2, 'V', 'VV'), - 71 : ('HOUR', 1, 1, 0x02, 1, 'V', 'V'), - 72 : ('MINUTE', 1, 1, 0x02, 1, 'V', 'V'), - 73 : ('SECOND', 1, 1, 0x02, 1, 'V', 'V'), - 74 : ('NOW', 0, 0, 0x0a, 0, 'V', ''), - 75 : ('AREAS', 1, 1, 0x02, 1, 'V', 'R'), - 76 : ('ROWS', 1, 1, 0x02, 1, 'V', 'R'), - 77 : ('COLUMNS', 1, 1, 0x02, 1, 'V', 'R'), - 78 : ('OFFSET', 3, 5, 0x04, 5, 'R', 'RVVVV'), - 82 : ('SEARCH', 2, 3, 0x04, 3, 'V', 'VVV'), - 83 : ('TRANSPOSE', 1, 1, 0x02, 1, 'A', 'A'), - 86 : ('TYPE', 1, 1, 0x02, 1, 'V', 'V'), - 92 : ('SERIESSUM', 4, 4, 0x02, 4, 'V', 'VVVA'), - 97 : ('ATAN2', 2, 2, 0x02, 2, 'V', 'VV'), - 98 : ('ASIN', 1, 1, 0x02, 1, 'V', 'V'), - 99 : ('ACOS', 1, 1, 0x02, 1, 'V', 'V'), - 100: ('CHOOSE', 2, 30, 0x04, 2, 'V', 'VR'), - 101: ('HLOOKUP', 3, 4, 0x04, 4, 'V', 'VRRV'), - 102: ('VLOOKUP', 3, 4, 0x04, 4, 'V', 'VRRV'), - 105: ('ISREF', 1, 1, 0x02, 1, 'V', 'R'), - 109: ('LOG', 1, 2, 0x04, 2, 'V', 'VV'), - 111: ('CHAR', 1, 1, 0x02, 1, 'V', 'V'), - 112: ('LOWER', 1, 1, 0x02, 1, 'V', 'V'), - 113: ('UPPER', 1, 1, 0x02, 1, 'V', 'V'), - 114: ('PROPER', 1, 1, 0x02, 1, 'V', 'V'), - 115: ('LEFT', 1, 2, 0x04, 2, 'V', 'VV'), - 116: ('RIGHT', 1, 2, 0x04, 2, 'V', 'VV'), - 117: ('EXACT', 2, 2, 0x02, 2, 'V', 'VV'), - 118: ('TRIM', 1, 1, 0x02, 1, 'V', 'V'), - 119: ('REPLACE', 4, 4, 0x02, 4, 'V', 'VVVV'), - 120: ('SUBSTITUTE', 3, 4, 0x04, 4, 'V', 'VVVV'), - 121: ('CODE', 1, 1, 0x02, 1, 'V', 'V'), - 124: ('FIND', 2, 3, 0x04, 3, 'V', 'VVV'), - 125: ('CELL', 1, 2, 0x0c, 2, 'V', 'VR'), - 126: ('ISERR', 1, 1, 0x02, 1, 'V', 'V'), - 127: ('ISTEXT', 1, 1, 0x02, 1, 'V', 'V'), - 128: ('ISNUMBER', 1, 1, 0x02, 1, 'V', 'V'), - 129: ('ISBLANK', 1, 1, 0x02, 1, 'V', 'V'), - 130: ('T', 1, 1, 0x02, 1, 'V', 'R'), - 131: ('N', 1, 1, 0x02, 1, 'V', 'R'), - 140: ('DATEVALUE', 1, 1, 0x02, 1, 'V', 'V'), - 141: ('TIMEVALUE', 1, 1, 0x02, 1, 'V', 'V'), - 142: ('SLN', 3, 3, 0x02, 3, 'V', 'VVV'), - 143: ('SYD', 4, 4, 0x02, 4, 'V', 'VVVV'), - 144: ('DDB', 4, 5, 0x04, 5, 'V', 'VVVVV'), - 148: ('INDIRECT', 1, 2, 0x0c, 2, 'R', 'VV'), - 162: ('CLEAN', 1, 1, 0x02, 1, 'V', 'V'), - 163: ('MDETERM', 1, 1, 0x02, 1, 'V', 'A'), - 164: ('MINVERSE', 1, 1, 0x02, 1, 'A', 'A'), - 165: ('MMULT', 2, 2, 0x02, 2, 'A', 'AA'), - 167: ('IPMT', 4, 6, 0x04, 6, 'V', 'VVVVVV'), - 168: ('PPMT', 4, 6, 0x04, 6, 'V', 'VVVVVV'), - 169: ('COUNTA', 0, 30, 0x04, 1, 'V', 'R'), - 183: ('PRODUCT', 0, 30, 0x04, 1, 'V', 'R'), - 184: ('FACT', 1, 1, 0x02, 1, 'V', 'V'), - 189: ('DPRODUCT', 3, 3, 0x02, 3, 'V', 'RRR'), - 190: ('ISNONTEXT', 1, 1, 0x02, 1, 'V', 'V'), - 193: ('STDEVP', 1, 30, 0x04, 1, 'V', 'R'), - 194: ('VARP', 1, 30, 0x04, 1, 'V', 'R'), - 195: ('DSTDEVP', 3, 3, 0x02, 3, 'V', 'RRR'), - 196: ('DVARP', 3, 3, 0x02, 3, 'V', 'RRR'), - 197: ('TRUNC', 1, 2, 0x04, 2, 'V', 'VV'), - 198: ('ISLOGICAL', 1, 1, 0x02, 1, 'V', 'V'), - 199: ('DCOUNTA', 3, 3, 0x02, 3, 'V', 'RRR'), - 204: ('USDOLLAR', 1, 2, 0x04, 2, 'V', 'VV'), - 205: ('FINDB', 2, 3, 0x04, 3, 'V', 'VVV'), - 206: ('SEARCHB', 2, 3, 0x04, 3, 'V', 'VVV'), - 207: ('REPLACEB', 4, 4, 0x02, 4, 'V', 'VVVV'), - 208: ('LEFTB', 1, 2, 0x04, 2, 'V', 'VV'), - 209: ('RIGHTB', 1, 2, 0x04, 2, 'V', 'VV'), - 210: ('MIDB', 3, 3, 0x02, 3, 'V', 'VVV'), - 211: ('LENB', 1, 1, 0x02, 1, 'V', 'V'), - 212: ('ROUNDUP', 2, 2, 0x02, 2, 'V', 'VV'), - 213: ('ROUNDDOWN', 2, 2, 0x02, 2, 'V', 'VV'), - 214: ('ASC', 1, 1, 0x02, 1, 'V', 'V'), - 215: ('DBCS', 1, 1, 0x02, 1, 'V', 'V'), - 216: ('RANK', 2, 3, 0x04, 3, 'V', 'VRV'), - 219: ('ADDRESS', 2, 5, 0x04, 5, 'V', 'VVVVV'), - 220: ('DAYS360', 2, 3, 0x04, 3, 'V', 'VVV'), - 221: ('TODAY', 0, 0, 0x0a, 0, 'V', ''), - 222: ('VDB', 5, 7, 0x04, 7, 'V', 'VVVVVVV'), - 227: ('MEDIAN', 1, 30, 0x04, 1, 'V', 'R'), - 228: ('SUMPRODUCT', 1, 30, 0x04, 1, 'V', 'A'), - 229: ('SINH', 1, 1, 0x02, 1, 'V', 'V'), - 230: ('COSH', 1, 1, 0x02, 1, 'V', 'V'), - 231: ('TANH', 1, 1, 0x02, 1, 'V', 'V'), - 232: ('ASINH', 1, 1, 0x02, 1, 'V', 'V'), - 233: ('ACOSH', 1, 1, 0x02, 1, 'V', 'V'), - 234: ('ATANH', 1, 1, 0x02, 1, 'V', 'V'), - 235: ('DGET', 3, 3, 0x02, 3, 'V', 'RRR'), - 244: ('INFO', 1, 1, 0x02, 1, 'V', 'V'), - 247: ('DB', 4, 5, 0x04, 5, 'V', 'VVVVV'), - 252: ('FREQUENCY', 2, 2, 0x02, 2, 'A', 'RR'), - 261: ('ERROR.TYPE', 1, 1, 0x02, 1, 'V', 'V'), - 269: ('AVEDEV', 1, 30, 0x04, 1, 'V', 'R'), - 270: ('BETADIST', 3, 5, 0x04, 1, 'V', 'V'), - 271: ('GAMMALN', 1, 1, 0x02, 1, 'V', 'V'), - 272: ('BETAINV', 3, 5, 0x04, 1, 'V', 'V'), - 273: ('BINOMDIST', 4, 4, 0x02, 4, 'V', 'VVVV'), - 274: ('CHIDIST', 2, 2, 0x02, 2, 'V', 'VV'), - 275: ('CHIINV', 2, 2, 0x02, 2, 'V', 'VV'), - 276: ('COMBIN', 2, 2, 0x02, 2, 'V', 'VV'), - 277: ('CONFIDENCE', 3, 3, 0x02, 3, 'V', 'VVV'), - 278: ('CRITBINOM', 3, 3, 0x02, 3, 'V', 'VVV'), - 279: ('EVEN', 1, 1, 0x02, 1, 'V', 'V'), - 280: ('EXPONDIST', 3, 3, 0x02, 3, 'V', 'VVV'), - 281: ('FDIST', 3, 3, 0x02, 3, 'V', 'VVV'), - 282: ('FINV', 3, 3, 0x02, 3, 'V', 'VVV'), - 283: ('FISHER', 1, 1, 0x02, 1, 'V', 'V'), - 284: ('FISHERINV', 1, 1, 0x02, 1, 'V', 'V'), - 285: ('FLOOR', 2, 2, 0x02, 2, 'V', 'VV'), - 286: ('GAMMADIST', 4, 4, 0x02, 4, 'V', 'VVVV'), - 287: ('GAMMAINV', 3, 3, 0x02, 3, 'V', 'VVV'), - 288: ('CEILING', 2, 2, 0x02, 2, 'V', 'VV'), - 289: ('HYPGEOMDIST', 4, 4, 0x02, 4, 'V', 'VVVV'), - 290: ('LOGNORMDIST', 3, 3, 0x02, 3, 'V', 'VVV'), - 291: ('LOGINV', 3, 3, 0x02, 3, 'V', 'VVV'), - 292: ('NEGBINOMDIST', 3, 3, 0x02, 3, 'V', 'VVV'), - 293: ('NORMDIST', 4, 4, 0x02, 4, 'V', 'VVVV'), - 294: ('NORMSDIST', 1, 1, 0x02, 1, 'V', 'V'), - 295: ('NORMINV', 3, 3, 0x02, 3, 'V', 'VVV'), - 296: ('NORMSINV', 1, 1, 0x02, 1, 'V', 'V'), - 297: ('STANDARDIZE', 3, 3, 0x02, 3, 'V', 'VVV'), - 298: ('ODD', 1, 1, 0x02, 1, 'V', 'V'), - 299: ('PERMUT', 2, 2, 0x02, 2, 'V', 'VV'), - 300: ('POISSON', 3, 3, 0x02, 3, 'V', 'VVV'), - 301: ('TDIST', 3, 3, 0x02, 3, 'V', 'VVV'), - 302: ('WEIBULL', 4, 4, 0x02, 4, 'V', 'VVVV'), - 303: ('SUMXMY2', 2, 2, 0x02, 2, 'V', 'AA'), - 304: ('SUMX2MY2', 2, 2, 0x02, 2, 'V', 'AA'), - 305: ('SUMX2PY2', 2, 2, 0x02, 2, 'V', 'AA'), - 306: ('CHITEST', 2, 2, 0x02, 2, 'V', 'AA'), - 307: ('CORREL', 2, 2, 0x02, 2, 'V', 'AA'), - 308: ('COVAR', 2, 2, 0x02, 2, 'V', 'AA'), - 309: ('FORECAST', 3, 3, 0x02, 3, 'V', 'VAA'), - 310: ('FTEST', 2, 2, 0x02, 2, 'V', 'AA'), - 311: ('INTERCEPT', 2, 2, 0x02, 2, 'V', 'AA'), - 312: ('PEARSON', 2, 2, 0x02, 2, 'V', 'AA'), - 313: ('RSQ', 2, 2, 0x02, 2, 'V', 'AA'), - 314: ('STEYX', 2, 2, 0x02, 2, 'V', 'AA'), - 315: ('SLOPE', 2, 2, 0x02, 2, 'V', 'AA'), - 316: ('TTEST', 4, 4, 0x02, 4, 'V', 'AAVV'), - 317: ('PROB', 3, 4, 0x04, 3, 'V', 'AAV'), - 318: ('DEVSQ', 1, 30, 0x04, 1, 'V', 'R'), - 319: ('GEOMEAN', 1, 30, 0x04, 1, 'V', 'R'), - 320: ('HARMEAN', 1, 30, 0x04, 1, 'V', 'R'), - 321: ('SUMSQ', 0, 30, 0x04, 1, 'V', 'R'), - 322: ('KURT', 1, 30, 0x04, 1, 'V', 'R'), - 323: ('SKEW', 1, 30, 0x04, 1, 'V', 'R'), - 324: ('ZTEST', 2, 3, 0x04, 2, 'V', 'RV'), - 325: ('LARGE', 2, 2, 0x02, 2, 'V', 'RV'), - 326: ('SMALL', 2, 2, 0x02, 2, 'V', 'RV'), - 327: ('QUARTILE', 2, 2, 0x02, 2, 'V', 'RV'), - 328: ('PERCENTILE', 2, 2, 0x02, 2, 'V', 'RV'), - 329: ('PERCENTRANK', 2, 3, 0x04, 2, 'V', 'RV'), - 330: ('MODE', 1, 30, 0x04, 1, 'V', 'A'), - 331: ('TRIMMEAN', 2, 2, 0x02, 2, 'V', 'RV'), - 332: ('TINV', 2, 2, 0x02, 2, 'V', 'VV'), - 336: ('CONCATENATE', 0, 30, 0x04, 1, 'V', 'V'), - 337: ('POWER', 2, 2, 0x02, 2, 'V', 'VV'), - 342: ('RADIANS', 1, 1, 0x02, 1, 'V', 'V'), - 343: ('DEGREES', 1, 1, 0x02, 1, 'V', 'V'), - 344: ('SUBTOTAL', 2, 30, 0x04, 2, 'V', 'VR'), - 345: ('SUMIF', 2, 3, 0x04, 3, 'V', 'RVR'), - 346: ('COUNTIF', 2, 2, 0x02, 2, 'V', 'RV'), - 347: ('COUNTBLANK', 1, 1, 0x02, 1, 'V', 'R'), - 350: ('ISPMT', 4, 4, 0x02, 4, 'V', 'VVVV'), - 351: ('DATEDIF', 3, 3, 0x02, 3, 'V', 'VVV'), - 352: ('DATESTRING', 1, 1, 0x02, 1, 'V', 'V'), - 353: ('NUMBERSTRING', 2, 2, 0x02, 2, 'V', 'VV'), - 354: ('ROMAN', 1, 2, 0x04, 2, 'V', 'VV'), - 358: ('GETPIVOTDATA', 2, 2, 0x02, 2, 'V', 'RV'), - 359: ('HYPERLINK', 1, 2, 0x04, 2, 'V', 'VV'), - 360: ('PHONETIC', 1, 1, 0x02, 1, 'V', 'V'), - 361: ('AVERAGEA', 1, 30, 0x04, 1, 'V', 'R'), - 362: ('MAXA', 1, 30, 0x04, 1, 'V', 'R'), - 363: ('MINA', 1, 30, 0x04, 1, 'V', 'R'), - 364: ('STDEVPA', 1, 30, 0x04, 1, 'V', 'R'), - 365: ('VARPA', 1, 30, 0x04, 1, 'V', 'R'), - 366: ('STDEVA', 1, 30, 0x04, 1, 'V', 'R'), - 367: ('VARA', 1, 30, 0x04, 1, 'V', 'R'), - 368: ('BAHTTEXT', 1, 1, 0x02, 1, 'V', 'V'), - 369: ('THAIDAYOFWEEK', 1, 1, 0x02, 1, 'V', 'V'), - 370: ('THAIDIGIT', 1, 1, 0x02, 1, 'V', 'V'), - 371: ('THAIMONTHOFYEAR', 1, 1, 0x02, 1, 'V', 'V'), - 372: ('THAINUMSOUND', 1, 1, 0x02, 1, 'V', 'V'), - 373: ('THAINUMSTRING', 1, 1, 0x02, 1, 'V', 'V'), - 374: ('THAISTRINGLENGTH', 1, 1, 0x02, 1, 'V', 'V'), - 375: ('ISTHAIDIGIT', 1, 1, 0x02, 1, 'V', 'V'), - 376: ('ROUNDBAHTDOWN', 1, 1, 0x02, 1, 'V', 'V'), - 377: ('ROUNDBAHTUP', 1, 1, 0x02, 1, 'V', 'V'), - 378: ('THAIYEAR', 1, 1, 0x02, 1, 'V', 'V'), - 379: ('RTD', 2, 5, 0x04, 1, 'V', 'V'), - } - -tAttrNames = { - 0x00: "Skip??", # seen in SAMPLES.XLS which shipped with Excel 5.0 - 0x01: "Volatile", - 0x02: "If", - 0x04: "Choose", - 0x08: "Skip", - 0x10: "Sum", - 0x20: "Assign", - 0x40: "Space", - 0x41: "SpaceVolatile", - } - -error_opcodes = set([0x07, 0x08, 0x0A, 0x0B, 0x1C, 0x1D, 0x2F]) - -tRangeFuncs = (min, max, min, max, min, max) -tIsectFuncs = (max, min, max, min, max, min) - -def do_box_funcs(box_funcs, boxa, boxb): - return tuple([ - func(numa, numb) - for func, numa, numb in zip(box_funcs, boxa.coords, boxb.coords) - ]) - -def adjust_cell_addr_biff8(rowval, colval, reldelta, browx=None, bcolx=None): - row_rel = (colval >> 15) & 1 - col_rel = (colval >> 14) & 1 - rowx = rowval - colx = colval & 0xff - if reldelta: - if row_rel and rowx >= 32768: - rowx -= 65536 - if col_rel and colx >= 128: - colx -= 256 - else: - if row_rel: - rowx -= browx - if col_rel: - colx -= bcolx - return rowx, colx, row_rel, col_rel - -def adjust_cell_addr_biff_le7( - rowval, colval, reldelta, browx=None, bcolx=None): - row_rel = (rowval >> 15) & 1 - col_rel = (rowval >> 14) & 1 - rowx = rowval & 0x3fff - colx = colval - if reldelta: - if row_rel and rowx >= 8192: - rowx -= 16384 - if col_rel and colx >= 128: - colx -= 256 - else: - if row_rel: - rowx -= browx - if col_rel: - colx -= bcolx - return rowx, colx, row_rel, col_rel - -def get_cell_addr(data, pos, bv, reldelta, browx=None, bcolx=None): - if bv >= 80: - rowval, colval = unpack("= 80: - row1val, row2val, col1val, col2val = unpack(" addins %r" % (refx, info), file=bk.logfile) - assert ref_first_sheetx == 0xFFFE == ref_last_sheetx - return (-5, -5) - if ref_recordx != bk._supbook_locals_inx: - if blah: - print("/// get_externsheet_local_range(refx=%d) -> external %r" % (refx, info), file=bk.logfile) - return (-4, -4) # external reference - if ref_first_sheetx == 0xFFFE == ref_last_sheetx: - if blah: - print("/// get_externsheet_local_range(refx=%d) -> unspecified sheet %r" % (refx, info), file=bk.logfile) - return (-1, -1) # internal reference, any sheet - if ref_first_sheetx == 0xFFFF == ref_last_sheetx: - if blah: - print("/// get_externsheet_local_range(refx=%d) -> deleted sheet(s)" % (refx, ), file=bk.logfile) - return (-2, -2) # internal reference, deleted sheet(s) - nsheets = len(bk._all_sheets_map) - if not(0 <= ref_first_sheetx <= ref_last_sheetx < nsheets): - if blah: - print("/// get_externsheet_local_range(refx=%d) -> %r" % (refx, info), file=bk.logfile) - print("--- first/last sheet not in range(%d)" % nsheets, file=bk.logfile) - return (-102, -102) # stuffed up somewhere :-( - xlrd_sheetx1 = bk._all_sheets_map[ref_first_sheetx] - xlrd_sheetx2 = bk._all_sheets_map[ref_last_sheetx] - if not(0 <= xlrd_sheetx1 <= xlrd_sheetx2): - return (-3, -3) # internal reference, but to a macro sheet - return xlrd_sheetx1, xlrd_sheetx2 - -def get_externsheet_local_range_b57( - bk, raw_extshtx, ref_first_sheetx, ref_last_sheetx, blah=0): - if raw_extshtx > 0: - if blah: - print("/// get_externsheet_local_range_b57(raw_extshtx=%d) -> external" % raw_extshtx, file=bk.logfile) - return (-4, -4) # external reference - if ref_first_sheetx == -1 and ref_last_sheetx == -1: - return (-2, -2) # internal reference, deleted sheet(s) - nsheets = len(bk._all_sheets_map) - if not(0 <= ref_first_sheetx <= ref_last_sheetx < nsheets): - if blah: - print("/// get_externsheet_local_range_b57(%d, %d, %d) -> ???" \ - % (raw_extshtx, ref_first_sheetx, ref_last_sheetx), file=bk.logfile) - print("--- first/last sheet not in range(%d)" % nsheets, file=bk.logfile) - return (-103, -103) # stuffed up somewhere :-( - xlrd_sheetx1 = bk._all_sheets_map[ref_first_sheetx] - xlrd_sheetx2 = bk._all_sheets_map[ref_last_sheetx] - if not(0 <= xlrd_sheetx1 <= xlrd_sheetx2): - return (-3, -3) # internal reference, but to a macro sheet - return xlrd_sheetx1, xlrd_sheetx2 - -class FormulaError(Exception): - pass - - -## -# Used in evaluating formulas. -# The following table describes the kinds and how their values -# are represented.

      -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -#
      Kind symbolKind numberValue representation
      oBOOL3integer: 0 => False; 1 => True
      oERR4None, or an int error code (same as XL_CELL_ERROR in the Cell class). -#
      oMSNG5Used by Excel as a placeholder for a missing (not supplied) function -# argument. Should *not* appear as a final formula result. Value is None.
      oNUM2A float. Note that there is no way of distinguishing dates.
      oREF-1The value is either None or a non-empty list of -# absolute Ref3D instances.
      -#
      oREL-2The value is None or a non-empty list of -# fully or partially relative Ref3D instances. -#
      oSTRG1A Unicode string.
      oUNK0The kind is unknown or ambiguous. The value is None
      -#

      - -class Operand(object): - - ## - # None means that the actual value of the operand is a variable - # (depends on cell data), not a constant. - value = None - ## - # oUNK means that the kind of operand is not known unambiguously. - kind = oUNK - ## - # The reconstituted text of the original formula. Function names will be - # in English irrespective of the original language, which doesn't seem - # to be recorded anywhere. The separator is ",", not ";" or whatever else - # might be more appropriate for the end-user's locale; patches welcome. - text = '?' - - def __init__(self, akind=None, avalue=None, arank=0, atext='?'): - if akind is not None: - self.kind = akind - if avalue is not None: - self.value = avalue - self.rank = arank - # rank is an internal gizmo (operator precedence); - # it's used in reconstructing formula text. - self.text = atext - - def __repr__(self): - kind_text = okind_dict.get(self.kind, "?Unknown kind?") - return "Operand(kind=%s, value=%r, text=%r)" \ - % (kind_text, self.value, self.text) - -## -#

      Represents an absolute or relative 3-dimensional reference to a box -# of one or more cells.
      -# -- New in version 0.6.0 -#

      -# -#

      The coords attribute is a tuple of the form:
      -# (shtxlo, shtxhi, rowxlo, rowxhi, colxlo, colxhi)
      -# where 0 <= thingxlo <= thingx < thingxhi.
      -# Note that it is quite possible to have thingx > nthings; for example -# Print_Titles could have colxhi == 256 and/or rowxhi == 65536 -# irrespective of how many columns/rows are actually used in the worksheet. -# The caller will need to decide how to handle this situation. -# Keyword: IndexError :-) -#

      -# -#

      The components of the coords attribute are also available as individual -# attributes: shtxlo, shtxhi, rowxlo, rowxhi, colxlo, and colxhi.

      -# -#

      The relflags attribute is a 6-tuple of flags which indicate whether -# the corresponding (sheet|row|col)(lo|hi) is relative (1) or absolute (0).
      -# Note that there is necessarily no information available as to what cell(s) -# the reference could possibly be relative to. The caller must decide what if -# any use to make of oREL operands. Note also that a partially relative -# reference may well be a typo. -# For example, define name A1Z10 as $a$1:$z10 (missing $ after z) -# while the cursor is on cell Sheet3!A27.
      -# The resulting Ref3D instance will have coords = (2, 3, 0, -16, 0, 26) -# and relflags = (0, 0, 0, 1, 0, 0).
      -# So far, only one possibility of a sheet-relative component in -# a reference has been noticed: a 2D reference located in the "current sheet". -#
      This will appear as coords = (0, 1, ...) and relflags = (1, 1, ...). - -class Ref3D(tuple): - - def __init__(self, atuple): - self.coords = atuple[0:6] - self.relflags = atuple[6:12] - if not self.relflags: - self.relflags = (0, 0, 0, 0, 0, 0) - (self.shtxlo, self.shtxhi, - self.rowxlo, self.rowxhi, - self.colxlo, self.colxhi) = self.coords - - def __repr__(self): - if not self.relflags or self.relflags == (0, 0, 0, 0, 0, 0): - return "Ref3D(coords=%r)" % (self.coords, ) - else: - return "Ref3D(coords=%r, relflags=%r)" \ - % (self.coords, self.relflags) - -tAdd = 0x03 -tSub = 0x04 -tMul = 0x05 -tDiv = 0x06 -tPower = 0x07 -tConcat = 0x08 -tLT, tLE, tEQ, tGE, tGT, tNE = range(0x09, 0x0F) - -import operator as opr - -def nop(x): - return x - -def _opr_pow(x, y): return x ** y - -def _opr_lt(x, y): return x < y -def _opr_le(x, y): return x <= y -def _opr_eq(x, y): return x == y -def _opr_ge(x, y): return x >= y -def _opr_gt(x, y): return x > y -def _opr_ne(x, y): return x != y - -def num2strg(num): - """Attempt to emulate Excel's default conversion - from number to string. - """ - s = str(num) - if s.endswith(".0"): - s = s[:-2] - return s - -_arith_argdict = {oNUM: nop, oSTRG: float} -_cmp_argdict = {oNUM: nop, oSTRG: nop} -# Seems no conversions done on relops; in Excel, "1" > 9 produces TRUE. -_strg_argdict = {oNUM:num2strg, oSTRG:nop} -binop_rules = { - tAdd: (_arith_argdict, oNUM, opr.add, 30, '+'), - tSub: (_arith_argdict, oNUM, opr.sub, 30, '-'), - tMul: (_arith_argdict, oNUM, opr.mul, 40, '*'), - tDiv: (_arith_argdict, oNUM, opr.truediv, 40, '/'), - tPower: (_arith_argdict, oNUM, _opr_pow, 50, '^',), - tConcat:(_strg_argdict, oSTRG, opr.add, 20, '&'), - tLT: (_cmp_argdict, oBOOL, _opr_lt, 10, '<'), - tLE: (_cmp_argdict, oBOOL, _opr_le, 10, '<='), - tEQ: (_cmp_argdict, oBOOL, _opr_eq, 10, '='), - tGE: (_cmp_argdict, oBOOL, _opr_ge, 10, '>='), - tGT: (_cmp_argdict, oBOOL, _opr_gt, 10, '>'), - tNE: (_cmp_argdict, oBOOL, _opr_ne, 10, '<>'), - } - -unop_rules = { - 0x13: (lambda x: -x, 70, '-', ''), # unary minus - 0x12: (lambda x: x, 70, '+', ''), # unary plus - 0x14: (lambda x: x / 100.0, 60, '', '%'),# percent - } - -LEAF_RANK = 90 -FUNC_RANK = 90 - -STACK_ALARM_LEVEL = 5 -STACK_PANIC_LEVEL = 10 - -def evaluate_name_formula(bk, nobj, namex, blah=0, level=0): - if level > STACK_ALARM_LEVEL: - blah = 1 - data = nobj.raw_formula - fmlalen = nobj.basic_formula_len - bv = bk.biff_version - reldelta = 1 # All defined name formulas use "Method B" [OOo docs] - if blah: - print("::: evaluate_name_formula %r %r %d %d %r level=%d" \ - % (namex, nobj.name, fmlalen, bv, data, level), file=bk.logfile) - hex_char_dump(data, 0, fmlalen, fout=bk.logfile) - if level > STACK_PANIC_LEVEL: - raise XLRDError("Excessive indirect references in NAME formula") - sztab = szdict[bv] - pos = 0 - stack = [] - any_rel = 0 - any_err = 0 - any_external = 0 - unk_opnd = Operand(oUNK, None) - error_opnd = Operand(oERR, None) - spush = stack.append - - def do_binop(opcd, stk): - assert len(stk) >= 2 - bop = stk.pop() - aop = stk.pop() - argdict, result_kind, func, rank, sym = binop_rules[opcd] - otext = ''.join([ - '('[:aop.rank < rank], - aop.text, - ')'[:aop.rank < rank], - sym, - '('[:bop.rank < rank], - bop.text, - ')'[:bop.rank < rank], - ]) - resop = Operand(result_kind, None, rank, otext) - try: - bconv = argdict[bop.kind] - aconv = argdict[aop.kind] - except KeyError: - stk.append(resop) - return - if bop.value is None or aop.value is None: - stk.append(resop) - return - bval = bconv(bop.value) - aval = aconv(aop.value) - result = func(aval, bval) - if result_kind == oBOOL: - result = 1 if result else 0 - resop.value = result - stk.append(resop) - - def do_unaryop(opcode, result_kind, stk): - assert len(stk) >= 1 - aop = stk.pop() - val = aop.value - func, rank, sym1, sym2 = unop_rules[opcode] - otext = ''.join([ - sym1, - '('[:aop.rank < rank], - aop.text, - ')'[:aop.rank < rank], - sym2, - ]) - if val is not None: - val = func(val) - stk.append(Operand(result_kind, val, rank, otext)) - - def not_in_name_formula(op_arg, oname_arg): - msg = "ERROR *** Token 0x%02x (%s) found in NAME formula" \ - % (op_arg, oname_arg) - raise FormulaError(msg) - - if fmlalen == 0: - stack = [unk_opnd] - - while 0 <= pos < fmlalen: - op = BYTES_ORD(data[pos]) - opcode = op & 0x1f - optype = (op & 0x60) >> 5 - if optype: - opx = opcode + 32 - else: - opx = opcode - oname = onames[opx] # + [" RVA"][optype] - sz = sztab[opx] - if blah: - print("Pos:%d Op:0x%02x Name:t%s Sz:%d opcode:%02xh optype:%02xh" \ - % (pos, op, oname, sz, opcode, optype), file=bk.logfile) - print("Stack =", stack, file=bk.logfile) - if sz == -2: - msg = 'ERROR *** Unexpected token 0x%02x ("%s"); biff_version=%d' \ - % (op, oname, bv) - raise FormulaError(msg) - if not optype: - if 0x00 <= opcode <= 0x02: # unk_opnd, tExp, tTbl - not_in_name_formula(op, oname) - elif 0x03 <= opcode <= 0x0E: - # Add, Sub, Mul, Div, Power - # tConcat - # tLT, ..., tNE - do_binop(opcode, stack) - elif opcode == 0x0F: # tIsect - if blah: print("tIsect pre", stack, file=bk.logfile) - assert len(stack) >= 2 - bop = stack.pop() - aop = stack.pop() - sym = ' ' - rank = 80 ########## check ####### - otext = ''.join([ - '('[:aop.rank < rank], - aop.text, - ')'[:aop.rank < rank], - sym, - '('[:bop.rank < rank], - bop.text, - ')'[:bop.rank < rank], - ]) - res = Operand(oREF) - res.text = otext - if bop.kind == oERR or aop.kind == oERR: - res.kind = oERR - elif bop.kind == oUNK or aop.kind == oUNK: - # This can happen with undefined - # (go search in the current sheet) labels. - # For example =Bob Sales - # Each label gets a NAME record with an empty formula (!) - # Evaluation of the tName token classifies it as oUNK - # res.kind = oREF - pass - elif bop.kind == oREF == aop.kind: - if aop.value is not None and bop.value is not None: - assert len(aop.value) == 1 - assert len(bop.value) == 1 - coords = do_box_funcs( - tIsectFuncs, aop.value[0], bop.value[0]) - res.value = [Ref3D(coords)] - elif bop.kind == oREL == aop.kind: - res.kind = oREL - if aop.value is not None and bop.value is not None: - assert len(aop.value) == 1 - assert len(bop.value) == 1 - coords = do_box_funcs( - tIsectFuncs, aop.value[0], bop.value[0]) - relfa = aop.value[0].relflags - relfb = bop.value[0].relflags - if relfa == relfb: - res.value = [Ref3D(coords + relfa)] - else: - pass - spush(res) - if blah: print("tIsect post", stack, file=bk.logfile) - elif opcode == 0x10: # tList - if blah: print("tList pre", stack, file=bk.logfile) - assert len(stack) >= 2 - bop = stack.pop() - aop = stack.pop() - sym = ',' - rank = 80 ########## check ####### - otext = ''.join([ - '('[:aop.rank < rank], - aop.text, - ')'[:aop.rank < rank], - sym, - '('[:bop.rank < rank], - bop.text, - ')'[:bop.rank < rank], - ]) - res = Operand(oREF, None, rank, otext) - if bop.kind == oERR or aop.kind == oERR: - res.kind = oERR - elif bop.kind in (oREF, oREL) and aop.kind in (oREF, oREL): - res.kind = oREF - if aop.kind == oREL or bop.kind == oREL: - res.kind = oREL - if aop.value is not None and bop.value is not None: - assert len(aop.value) >= 1 - assert len(bop.value) == 1 - res.value = aop.value + bop.value - else: - pass - spush(res) - if blah: print("tList post", stack, file=bk.logfile) - elif opcode == 0x11: # tRange - if blah: print("tRange pre", stack, file=bk.logfile) - assert len(stack) >= 2 - bop = stack.pop() - aop = stack.pop() - sym = ':' - rank = 80 ########## check ####### - otext = ''.join([ - '('[:aop.rank < rank], - aop.text, - ')'[:aop.rank < rank], - sym, - '('[:bop.rank < rank], - bop.text, - ')'[:bop.rank < rank], - ]) - res = Operand(oREF, None, rank, otext) - if bop.kind == oERR or aop.kind == oERR: - res = oERR - elif bop.kind == oREF == aop.kind: - if aop.value is not None and bop.value is not None: - assert len(aop.value) == 1 - assert len(bop.value) == 1 - coords = do_box_funcs( - tRangeFuncs, aop.value[0], bop.value[0]) - res.value = [Ref3D(coords)] - elif bop.kind == oREL == aop.kind: - res.kind = oREL - if aop.value is not None and bop.value is not None: - assert len(aop.value) == 1 - assert len(bop.value) == 1 - coords = do_box_funcs( - tRangeFuncs, aop.value[0], bop.value[0]) - relfa = aop.value[0].relflags - relfb = bop.value[0].relflags - if relfa == relfb: - res.value = [Ref3D(coords + relfa)] - else: - pass - spush(res) - if blah: print("tRange post", stack, file=bk.logfile) - elif 0x12 <= opcode <= 0x14: # tUplus, tUminus, tPercent - do_unaryop(opcode, oNUM, stack) - elif opcode == 0x15: # tParen - # source cosmetics - pass - elif opcode == 0x16: # tMissArg - spush(Operand(oMSNG, None, LEAF_RANK, '')) - elif opcode == 0x17: # tStr - if bv <= 70: - strg, newpos = unpack_string_update_pos( - data, pos+1, bk.encoding, lenlen=1) - else: - strg, newpos = unpack_unicode_update_pos( - data, pos+1, lenlen=1) - sz = newpos - pos - if blah: print(" sz=%d strg=%r" % (sz, strg), file=bk.logfile) - text = '"' + strg.replace('"', '""') + '"' - spush(Operand(oSTRG, strg, LEAF_RANK, text)) - elif opcode == 0x18: # tExtended - # new with BIFF 8 - assert bv >= 80 - # not in OOo docs - raise FormulaError("tExtended token not implemented") - elif opcode == 0x19: # tAttr - subop, nc = unpack("= 1 - aop = stack[-1] - otext = 'SUM(%s)' % aop.text - stack[-1] = Operand(oNUM, None, FUNC_RANK, otext) - else: - sz = 4 - if blah: - print(" subop=%02xh subname=t%s sz=%d nc=%02xh" \ - % (subop, subname, sz, nc), file=bk.logfile) - elif 0x1A <= opcode <= 0x1B: # tSheet, tEndSheet - assert bv < 50 - raise FormulaError("tSheet & tEndsheet tokens not implemented") - elif 0x1C <= opcode <= 0x1F: # tErr, tBool, tInt, tNum - inx = opcode - 0x1C - nb = [1, 1, 2, 8][inx] - kind = [oERR, oBOOL, oNUM, oNUM][inx] - value, = unpack("<" + "BBHd"[inx], data[pos+1:pos+1+nb]) - if inx == 2: # tInt - value = float(value) - text = str(value) - elif inx == 3: # tNum - text = str(value) - elif inx == 1: # tBool - text = ('FALSE', 'TRUE')[value] - else: - text = '"' +error_text_from_code[value] + '"' - spush(Operand(kind, value, LEAF_RANK, text)) - else: - raise FormulaError("Unhandled opcode: 0x%02x" % opcode) - if sz <= 0: - raise FormulaError("Size not set for opcode 0x%02x" % opcode) - pos += sz - continue - if opcode == 0x00: # tArray - spush(unk_opnd) - elif opcode == 0x01: # tFunc - nb = 1 + int(bv >= 40) - funcx = unpack("<" + " BH"[nb], data[pos+1:pos+1+nb])[0] - func_attrs = func_defs.get(funcx, None) - if not func_attrs: - print("*** formula/tFunc unknown FuncID:%d" \ - % funcx, file=bk.logfile) - spush(unk_opnd) - else: - func_name, nargs = func_attrs[:2] - if blah: - print(" FuncID=%d name=%s nargs=%d" \ - % (funcx, func_name, nargs), file=bk.logfile) - assert len(stack) >= nargs - if nargs: - argtext = listsep.join([arg.text for arg in stack[-nargs:]]) - otext = "%s(%s)" % (func_name, argtext) - del stack[-nargs:] - else: - otext = func_name + "()" - res = Operand(oUNK, None, FUNC_RANK, otext) - spush(res) - elif opcode == 0x02: #tFuncVar - nb = 1 + int(bv >= 40) - nargs, funcx = unpack("= nargs - assert len(stack) >= nargs - argtext = listsep.join([arg.text for arg in stack[-nargs:]]) - otext = "%s(%s)" % (func_name, argtext) - res = Operand(oUNK, None, FUNC_RANK, otext) - if funcx == 1: # IF - testarg = stack[-nargs] - if testarg.kind not in (oNUM, oBOOL): - if blah and testarg.kind != oUNK: - print("IF testarg kind?", file=bk.logfile) - elif testarg.value not in (0, 1): - if blah and testarg.value is not None: - print("IF testarg value?", file=bk.logfile) - else: - if nargs == 2 and not testarg.value: - # IF(FALSE, tv) => FALSE - res.kind, res.value = oBOOL, 0 - else: - respos = -nargs + 2 - int(testarg.value) - chosen = stack[respos] - if chosen.kind == oMSNG: - res.kind, res.value = oNUM, 0 - else: - res.kind, res.value = chosen.kind, chosen.value - if blah: - print("$$$$$$ IF => constant", file=bk.logfile) - elif funcx == 100: # CHOOSE - testarg = stack[-nargs] - if testarg.kind == oNUM: - if 1 <= testarg.value < nargs: - chosen = stack[-nargs + int(testarg.value)] - if chosen.kind == oMSNG: - res.kind, res.value = oNUM, 0 - else: - res.kind, res.value = chosen.kind, chosen.value - del stack[-nargs:] - spush(res) - elif opcode == 0x03: #tName - tgtnamex = unpack("> bk.logfile, " ", res - # spush(res) - elif opcode == 0x0D: #tAreaN - not_in_name_formula(op, oname) - # res = get_cell_range_addr(data, pos+1, bv, reldelta=1) - # # note *ALL* tAreaN usage has signed offset for relative addresses - # any_rel = 1 - # if blah: print >> bk.logfile, " ", res - elif opcode == 0x1A: # tRef3d - if bv >= 80: - res = get_cell_addr(data, pos+3, bv, reldelta) - refx = unpack("= 80: - res1, res2 = get_cell_range_addr(data, pos+3, bv, reldelta) - refx = unpack("= 80: - refx, tgtnamex = unpack(" 0: - refx -= 1 - elif refx < 0: - refx = -refx - 1 - else: - dodgy = 1 - if blah: - print(" origrefx=%d refx=%d tgtnamex=%d dodgy=%d" \ - % (origrefx, refx, tgtnamex, dodgy), file=bk.logfile) - if tgtnamex == namex: - if blah: print("!!!! Self-referential !!!!", file=bk.logfile) - dodgy = any_err = 1 - if not dodgy: - if bv >= 80: - shx1, shx2 = get_externsheet_local_range(bk, refx, blah) - elif origrefx > 0: - shx1, shx2 = (-4, -4) # external ref - else: - exty = bk._externsheet_type_b57[refx] - if exty == 4: # non-specific sheet in own doc't - shx1, shx2 = (-1, -1) # internal, any sheet - else: - shx1, shx2 = (-666, -666) - if dodgy or shx1 < -1: - otext = "<>" \ - % (tgtnamex, origrefx) - res = Operand(oUNK, None, LEAF_RANK, otext) - else: - tgtobj = bk.name_obj_list[tgtnamex] - if not tgtobj.evaluated: - ### recursive ### - evaluate_name_formula(bk, tgtobj, tgtnamex, blah, level+1) - if tgtobj.macro or tgtobj.binary \ - or tgtobj.any_err: - if blah: - tgtobj.dump( - bk.logfile, - header="!!! bad tgtobj !!!", - footer="------------------", - ) - res = Operand(oUNK, None) - any_err = any_err or tgtobj.macro or tgtobj.binary or tgtobj.any_err - any_rel = any_rel or tgtobj.any_rel - else: - assert len(tgtobj.stack) == 1 - res = copy.deepcopy(tgtobj.stack[0]) - res.rank = LEAF_RANK - if tgtobj.scope == -1: - res.text = tgtobj.name - else: - res.text = "%s!%s" \ - % (bk._sheet_names[tgtobj.scope], tgtobj.name) - if blah: - print(" tNameX: setting text to", repr(res.text), file=bk.logfile) - spush(res) - elif opcode in error_opcodes: - any_err = 1 - spush(error_opnd) - else: - if blah: - print("FORMULA: /// Not handled yet: t" + oname, file=bk.logfile) - any_err = 1 - if sz <= 0: - raise FormulaError("Fatal: token size is not positive") - pos += sz - any_rel = not not any_rel - if blah: - fprintf(bk.logfile, "End of formula. level=%d any_rel=%d any_err=%d stack=%r\n", - level, not not any_rel, any_err, stack) - if len(stack) >= 2: - print("*** Stack has unprocessed args", file=bk.logfile) - print(file=bk.logfile) - nobj.stack = stack - if len(stack) != 1: - nobj.result = None - else: - nobj.result = stack[0] - nobj.any_rel = any_rel - nobj.any_err = any_err - nobj.any_external = any_external - nobj.evaluated = 1 - -#### under construction ############################################################################# -def decompile_formula(bk, fmla, fmlalen, - fmlatype=None, browx=None, bcolx=None, - blah=0, level=0, r1c1=0): - if level > STACK_ALARM_LEVEL: - blah = 1 - reldelta = fmlatype in (FMLA_TYPE_SHARED, FMLA_TYPE_NAME, FMLA_TYPE_COND_FMT, FMLA_TYPE_DATA_VAL) - data = fmla - bv = bk.biff_version - if blah: - print("::: decompile_formula len=%d fmlatype=%r browx=%r bcolx=%r reldelta=%d %r level=%d" \ - % (fmlalen, fmlatype, browx, bcolx, reldelta, data, level), file=bk.logfile) - hex_char_dump(data, 0, fmlalen, fout=bk.logfile) - if level > STACK_PANIC_LEVEL: - raise XLRDError("Excessive indirect references in formula") - sztab = szdict[bv] - pos = 0 - stack = [] - any_rel = 0 - any_err = 0 - any_external = 0 - unk_opnd = Operand(oUNK, None) - error_opnd = Operand(oERR, None) - spush = stack.append - - def do_binop(opcd, stk): - assert len(stk) >= 2 - bop = stk.pop() - aop = stk.pop() - argdict, result_kind, func, rank, sym = binop_rules[opcd] - otext = ''.join([ - '('[:aop.rank < rank], - aop.text, - ')'[:aop.rank < rank], - sym, - '('[:bop.rank < rank], - bop.text, - ')'[:bop.rank < rank], - ]) - resop = Operand(result_kind, None, rank, otext) - stk.append(resop) - - def do_unaryop(opcode, result_kind, stk): - assert len(stk) >= 1 - aop = stk.pop() - func, rank, sym1, sym2 = unop_rules[opcode] - otext = ''.join([ - sym1, - '('[:aop.rank < rank], - aop.text, - ')'[:aop.rank < rank], - sym2, - ]) - stk.append(Operand(result_kind, None, rank, otext)) - - def unexpected_opcode(op_arg, oname_arg): - msg = "ERROR *** Unexpected token 0x%02x (%s) found in formula type %s" \ - % (op_arg, oname_arg, FMLA_TYPEDESCR_MAP[fmlatype]) - print(msg, file=bk.logfile) - # raise FormulaError(msg) - - if fmlalen == 0: - stack = [unk_opnd] - - while 0 <= pos < fmlalen: - op = BYTES_ORD(data[pos]) - opcode = op & 0x1f - optype = (op & 0x60) >> 5 - if optype: - opx = opcode + 32 - else: - opx = opcode - oname = onames[opx] # + [" RVA"][optype] - sz = sztab[opx] - if blah: - print("Pos:%d Op:0x%02x opname:t%s Sz:%d opcode:%02xh optype:%02xh" \ - % (pos, op, oname, sz, opcode, optype), file=bk.logfile) - print("Stack =", stack, file=bk.logfile) - if sz == -2: - msg = 'ERROR *** Unexpected token 0x%02x ("%s"); biff_version=%d' \ - % (op, oname, bv) - raise FormulaError(msg) - if _TOKEN_NOT_ALLOWED(opx, 0) & fmlatype: - unexpected_opcode(op, oname) - if not optype: - if opcode <= 0x01: # tExp - if bv >= 30: - fmt = '= 2 - bop = stack.pop() - aop = stack.pop() - sym = ' ' - rank = 80 ########## check ####### - otext = ''.join([ - '('[:aop.rank < rank], - aop.text, - ')'[:aop.rank < rank], - sym, - '('[:bop.rank < rank], - bop.text, - ')'[:bop.rank < rank], - ]) - res = Operand(oREF) - res.text = otext - if bop.kind == oERR or aop.kind == oERR: - res.kind = oERR - elif bop.kind == oUNK or aop.kind == oUNK: - # This can happen with undefined - # (go search in the current sheet) labels. - # For example =Bob Sales - # Each label gets a NAME record with an empty formula (!) - # Evaluation of the tName token classifies it as oUNK - # res.kind = oREF - pass - elif bop.kind == oREF == aop.kind: - pass - elif bop.kind == oREL == aop.kind: - res.kind = oREL - else: - pass - spush(res) - if blah: print("tIsect post", stack, file=bk.logfile) - elif opcode == 0x10: # tList - if blah: print("tList pre", stack, file=bk.logfile) - assert len(stack) >= 2 - bop = stack.pop() - aop = stack.pop() - sym = ',' - rank = 80 ########## check ####### - otext = ''.join([ - '('[:aop.rank < rank], - aop.text, - ')'[:aop.rank < rank], - sym, - '('[:bop.rank < rank], - bop.text, - ')'[:bop.rank < rank], - ]) - res = Operand(oREF, None, rank, otext) - if bop.kind == oERR or aop.kind == oERR: - res.kind = oERR - elif bop.kind in (oREF, oREL) and aop.kind in (oREF, oREL): - res.kind = oREF - if aop.kind == oREL or bop.kind == oREL: - res.kind = oREL - else: - pass - spush(res) - if blah: print("tList post", stack, file=bk.logfile) - elif opcode == 0x11: # tRange - if blah: print("tRange pre", stack, file=bk.logfile) - assert len(stack) >= 2 - bop = stack.pop() - aop = stack.pop() - sym = ':' - rank = 80 ########## check ####### - otext = ''.join([ - '('[:aop.rank < rank], - aop.text, - ')'[:aop.rank < rank], - sym, - '('[:bop.rank < rank], - bop.text, - ')'[:bop.rank < rank], - ]) - res = Operand(oREF, None, rank, otext) - if bop.kind == oERR or aop.kind == oERR: - res = oERR - elif bop.kind == oREF == aop.kind: - pass - else: - pass - spush(res) - if blah: print("tRange post", stack, file=bk.logfile) - elif 0x12 <= opcode <= 0x14: # tUplus, tUminus, tPercent - do_unaryop(opcode, oNUM, stack) - elif opcode == 0x15: # tParen - # source cosmetics - pass - elif opcode == 0x16: # tMissArg - spush(Operand(oMSNG, None, LEAF_RANK, '')) - elif opcode == 0x17: # tStr - if bv <= 70: - strg, newpos = unpack_string_update_pos( - data, pos+1, bk.encoding, lenlen=1) - else: - strg, newpos = unpack_unicode_update_pos( - data, pos+1, lenlen=1) - sz = newpos - pos - if blah: print(" sz=%d strg=%r" % (sz, strg), file=bk.logfile) - text = '"' + strg.replace('"', '""') + '"' - spush(Operand(oSTRG, None, LEAF_RANK, text)) - elif opcode == 0x18: # tExtended - # new with BIFF 8 - assert bv >= 80 - # not in OOo docs, don't even know how to determine its length - raise FormulaError("tExtended token not implemented") - elif opcode == 0x19: # tAttr - subop, nc = unpack("= 1 - aop = stack[-1] - otext = 'SUM(%s)' % aop.text - stack[-1] = Operand(oNUM, None, FUNC_RANK, otext) - else: - sz = 4 - if blah: - print(" subop=%02xh subname=t%s sz=%d nc=%02xh" \ - % (subop, subname, sz, nc), file=bk.logfile) - elif 0x1A <= opcode <= 0x1B: # tSheet, tEndSheet - assert bv < 50 - raise FormulaError("tSheet & tEndsheet tokens not implemented") - elif 0x1C <= opcode <= 0x1F: # tErr, tBool, tInt, tNum - inx = opcode - 0x1C - nb = [1, 1, 2, 8][inx] - kind = [oERR, oBOOL, oNUM, oNUM][inx] - value, = unpack("<" + "BBHd"[inx], data[pos+1:pos+1+nb]) - if inx == 2: # tInt - value = float(value) - text = str(value) - elif inx == 3: # tNum - text = str(value) - elif inx == 1: # tBool - text = ('FALSE', 'TRUE')[value] - else: - text = '"' +error_text_from_code[value] + '"' - spush(Operand(kind, None, LEAF_RANK, text)) - else: - raise FormulaError("Unhandled opcode: 0x%02x" % opcode) - if sz <= 0: - raise FormulaError("Size not set for opcode 0x%02x" % opcode) - pos += sz - continue - if opcode == 0x00: # tArray - spush(unk_opnd) - elif opcode == 0x01: # tFunc - nb = 1 + int(bv >= 40) - funcx = unpack("<" + " BH"[nb], data[pos+1:pos+1+nb])[0] - func_attrs = func_defs.get(funcx, None) - if not func_attrs: - print("*** formula/tFunc unknown FuncID:%d" % funcx, file=bk.logfile) - spush(unk_opnd) - else: - func_name, nargs = func_attrs[:2] - if blah: - print(" FuncID=%d name=%s nargs=%d" \ - % (funcx, func_name, nargs), file=bk.logfile) - assert len(stack) >= nargs - if nargs: - argtext = listsep.join([arg.text for arg in stack[-nargs:]]) - otext = "%s(%s)" % (func_name, argtext) - del stack[-nargs:] - else: - otext = func_name + "()" - res = Operand(oUNK, None, FUNC_RANK, otext) - spush(res) - elif opcode == 0x02: #tFuncVar - nb = 1 + int(bv >= 40) - nargs, funcx = unpack("= nargs - assert len(stack) >= nargs - argtext = listsep.join([arg.text for arg in stack[-nargs:]]) - otext = "%s(%s)" % (func_name, argtext) - res = Operand(oUNK, None, FUNC_RANK, otext) - del stack[-nargs:] - spush(res) - elif opcode == 0x03: #tName - tgtnamex = unpack("> bk.logfile, " ", res - res1, res2 = get_cell_range_addr( - data, pos+1, bv, reldelta, browx, bcolx) - if blah: print(" ", res1, res2, file=bk.logfile) - rowx1, colx1, row_rel1, col_rel1 = res1 - rowx2, colx2, row_rel2, col_rel2 = res2 - coords = (rowx1, rowx2+1, colx1, colx2+1) - relflags = (row_rel1, row_rel2, col_rel1, col_rel2) - if sum(relflags): # relative - okind = oREL - else: - okind = oREF - if blah: print(" ", coords, relflags, file=bk.logfile) - otext = rangename2drel(coords, relflags, browx, bcolx, r1c1) - res = Operand(okind, None, LEAF_RANK, otext) - spush(res) - elif opcode == 0x1A: # tRef3d - if bv >= 80: - res = get_cell_addr(data, pos+3, bv, reldelta, browx, bcolx) - refx = unpack("= 80: - res1, res2 = get_cell_range_addr(data, pos+3, bv, reldelta) - refx = unpack("= 80: - refx, tgtnamex = unpack(" 0: - refx -= 1 - elif refx < 0: - refx = -refx - 1 - else: - dodgy = 1 - if blah: - print(" origrefx=%d refx=%d tgtnamex=%d dodgy=%d" \ - % (origrefx, refx, tgtnamex, dodgy), file=bk.logfile) - # if tgtnamex == namex: - # if blah: print >> bk.logfile, "!!!! Self-referential !!!!" - # dodgy = any_err = 1 - if not dodgy: - if bv >= 80: - shx1, shx2 = get_externsheet_local_range(bk, refx, blah) - elif origrefx > 0: - shx1, shx2 = (-4, -4) # external ref - else: - exty = bk._externsheet_type_b57[refx] - if exty == 4: # non-specific sheet in own doc't - shx1, shx2 = (-1, -1) # internal, any sheet - else: - shx1, shx2 = (-666, -666) - okind = oUNK - ovalue = None - if shx1 == -5: # addin func name - okind = oSTRG - ovalue = bk.addin_func_names[tgtnamex] - otext = '"' + ovalue.replace('"', '""') + '"' - elif dodgy or shx1 < -1: - otext = "<>" \ - % (tgtnamex, origrefx) - else: - tgtobj = bk.name_obj_list[tgtnamex] - if tgtobj.scope == -1: - otext = tgtobj.name - else: - otext = "%s!%s" \ - % (bk._sheet_names[tgtobj.scope], tgtobj.name) - if blah: - print(" tNameX: setting text to", repr(res.text), file=bk.logfile) - res = Operand(okind, ovalue, LEAF_RANK, otext) - spush(res) - elif opcode in error_opcodes: - any_err = 1 - spush(error_opnd) - else: - if blah: - print("FORMULA: /// Not handled yet: t" + oname, file=bk.logfile) - any_err = 1 - if sz <= 0: - raise FormulaError("Fatal: token size is not positive") - pos += sz - any_rel = not not any_rel - if blah: - print("End of formula. level=%d any_rel=%d any_err=%d stack=%r" % \ - (level, not not any_rel, any_err, stack), file=bk.logfile) - if len(stack) >= 2: - print("*** Stack has unprocessed args", file=bk.logfile) - print(file=bk.logfile) - - if len(stack) != 1: - result = None - else: - result = stack[0].text - return result - -#### under deconstruction ### -def dump_formula(bk, data, fmlalen, bv, reldelta, blah=0, isname=0): - if blah: - print("dump_formula", fmlalen, bv, len(data), file=bk.logfile) - hex_char_dump(data, 0, fmlalen, fout=bk.logfile) - assert bv >= 80 #### this function needs updating #### - sztab = szdict[bv] - pos = 0 - stack = [] - any_rel = 0 - any_err = 0 - spush = stack.append - while 0 <= pos < fmlalen: - op = BYTES_ORD(data[pos]) - opcode = op & 0x1f - optype = (op & 0x60) >> 5 - if optype: - opx = opcode + 32 - else: - opx = opcode - oname = onames[opx] # + [" RVA"][optype] - - sz = sztab[opx] - if blah: - print("Pos:%d Op:0x%02x Name:t%s Sz:%d opcode:%02xh optype:%02xh" \ - % (pos, op, oname, sz, opcode, optype), file=bk.logfile) - if not optype: - if 0x01 <= opcode <= 0x02: # tExp, tTbl - # reference to a shared formula or table record - rowx, colx = unpack("= 2 - bop = stack.pop() - aop = stack.pop() - spush(aop + bop) - if blah: print("tlist post", stack, file=bk.logfile) - elif opcode == 0x11: # tRange - if blah: print("tRange pre", stack, file=bk.logfile) - assert len(stack) >= 2 - bop = stack.pop() - aop = stack.pop() - assert len(aop) == 1 - assert len(bop) == 1 - result = do_box_funcs(tRangeFuncs, aop[0], bop[0]) - spush(result) - if blah: print("tRange post", stack, file=bk.logfile) - elif opcode == 0x0F: # tIsect - if blah: print("tIsect pre", stack, file=bk.logfile) - assert len(stack) >= 2 - bop = stack.pop() - aop = stack.pop() - assert len(aop) == 1 - assert len(bop) == 1 - result = do_box_funcs(tIsectFuncs, aop[0], bop[0]) - spush(result) - if blah: print("tIsect post", stack, file=bk.logfile) - elif opcode == 0x19: # tAttr - subop, nc = unpack("= 40) - funcx = unpack("<" + " BH"[nb], data[pos+1:pos+1+nb]) - if blah: print(" FuncID=%d" % funcx, file=bk.logfile) - elif opcode == 0x02: #tFuncVar - nb = 1 + int(bv >= 40) - nargs, funcx = unpack("= 2: - print("*** Stack has unprocessed args", file=bk.logfile) - -# === Some helper functions for displaying cell references === - -# I'm aware of only one possibility of a sheet-relative component in -# a reference: a 2D reference located in the "current sheet". -# xlrd stores this internally with bounds of (0, 1, ...) and -# relative flags of (1, 1, ...). These functions display the -# sheet component as empty, just like Excel etc. - -def rownamerel(rowx, rowxrel, browx=None, r1c1=0): - # if no base rowx is provided, we have to return r1c1 - if browx is None: - r1c1 = True - if not rowxrel: - if r1c1: - return "R%d" % (rowx+1) - return "$%d" % (rowx+1) - if r1c1: - if rowx: - return "R[%d]" % rowx - return "R" - return "%d" % ((browx + rowx) % 65536 + 1) - -def colnamerel(colx, colxrel, bcolx=None, r1c1=0): - # if no base colx is provided, we have to return r1c1 - if bcolx is None: - r1c1 = True - if not colxrel: - if r1c1: - return "C%d" % (colx + 1) - return "$" + colname(colx) - if r1c1: - if colx: - return "C[%d]" % colx - return "C" - return colname((bcolx + colx) % 256) - -## -# Utility function: (5, 7) => 'H6' -def cellname(rowx, colx): - """ (5, 7) => 'H6' """ - return "%s%d" % (colname(colx), rowx+1) - -## -# Utility function: (5, 7) => '$H$6' -def cellnameabs(rowx, colx, r1c1=0): - """ (5, 7) => '$H$6' or 'R8C6'""" - if r1c1: - return "R%dC%d" % (rowx+1, colx+1) - return "$%s$%d" % (colname(colx), rowx+1) - -def cellnamerel(rowx, colx, rowxrel, colxrel, browx=None, bcolx=None, r1c1=0): - if not rowxrel and not colxrel: - return cellnameabs(rowx, colx, r1c1) - if (rowxrel and browx is None) or (colxrel and bcolx is None): - # must flip the whole cell into R1C1 mode - r1c1 = True - c = colnamerel(colx, colxrel, bcolx, r1c1) - r = rownamerel(rowx, rowxrel, browx, r1c1) - if r1c1: - return r + c - return c + r - -## -# Utility function: 7 => 'H', 27 => 'AB' -def colname(colx): - """ 7 => 'H', 27 => 'AB' """ - alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - if colx <= 25: - return alphabet[colx] - else: - xdiv26, xmod26 = divmod(colx, 26) - return alphabet[xdiv26 - 1] + alphabet[xmod26] - -def rangename2d(rlo, rhi, clo, chi, r1c1=0): - """ (5, 20, 7, 10) => '$H$6:$J$20' """ - if r1c1: - return - if rhi == rlo+1 and chi == clo+1: - return cellnameabs(rlo, clo, r1c1) - return "%s:%s" % (cellnameabs(rlo, clo, r1c1), cellnameabs(rhi-1, chi-1, r1c1)) - -def rangename2drel(rlo_rhi_clo_chi, rlorel_rhirel_clorel_chirel, browx=None, bcolx=None, r1c1=0): - rlo, rhi, clo, chi = rlo_rhi_clo_chi - rlorel, rhirel, clorel, chirel = rlorel_rhirel_clorel_chirel - if (rlorel or rhirel) and browx is None: - r1c1 = True - if (clorel or chirel) and bcolx is None: - r1c1 = True - return "%s:%s" % ( - cellnamerel(rlo, clo, rlorel, clorel, browx, bcolx, r1c1), - cellnamerel(rhi-1, chi-1, rhirel, chirel, browx, bcolx, r1c1) - ) -## -# Utility function: -#
      Ref3D((1, 4, 5, 20, 7, 10)) => 'Sheet2:Sheet3!$H$6:$J$20' -def rangename3d(book, ref3d): - """ Ref3D(1, 4, 5, 20, 7, 10) => 'Sheet2:Sheet3!$H$6:$J$20' - (assuming Excel's default sheetnames) """ - coords = ref3d.coords - return "%s!%s" % ( - sheetrange(book, *coords[:2]), - rangename2d(*coords[2:6])) - -## -# Utility function: -#
      Ref3D(coords=(0, 1, -32, -22, -13, 13), relflags=(0, 0, 1, 1, 1, 1)) -# R1C1 mode => 'Sheet1!R[-32]C[-13]:R[-23]C[12]' -# A1 mode => depends on base cell (browx, bcolx) -def rangename3drel(book, ref3d, browx=None, bcolx=None, r1c1=0): - coords = ref3d.coords - relflags = ref3d.relflags - shdesc = sheetrangerel(book, coords[:2], relflags[:2]) - rngdesc = rangename2drel(coords[2:6], relflags[2:6], browx, bcolx, r1c1) - if not shdesc: - return rngdesc - return "%s!%s" % (shdesc, rngdesc) - -def quotedsheetname(shnames, shx): - if shx >= 0: - shname = shnames[shx] - else: - shname = { - -1: "?internal; any sheet?", - -2: "internal; deleted sheet", - -3: "internal; macro sheet", - -4: "<>", - }.get(shx, "?error %d?" % shx) - if "'" in shname: - return "'" + shname.replace("'", "''") + "'" - if " " in shname: - return "'" + shname + "'" - return shname - -def sheetrange(book, slo, shi): - shnames = book.sheet_names() - shdesc = quotedsheetname(shnames, slo) - if slo != shi-1: - shdesc += ":" + quotedsheetname(shnames, shi-1) - return shdesc - -def sheetrangerel(book, srange, srangerel): - slo, shi = srange - slorel, shirel = srangerel - if not slorel and not shirel: - return sheetrange(book, slo, shi) - assert (slo == 0 == shi-1) and slorel and shirel - return "" - -# ============================================================== diff --git a/webhub/xlrd/formula.pyc b/webhub/xlrd/formula.pyc deleted file mode 100644 index 404e26983cc37d214206fcf10e63c4cd1a5021f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60321 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 Km3Xpx!T$oQ+fPdX diff --git a/webhub/xlrd/info.py b/webhub/xlrd/info.py deleted file mode 100644 index 528a2b4b..00000000 --- a/webhub/xlrd/info.py +++ /dev/null @@ -1 +0,0 @@ -__VERSION__ = "0.9.3" diff --git a/webhub/xlrd/info.pyc b/webhub/xlrd/info.pyc deleted file mode 100644 index 9a977e7c122db7bfad17e64813b87eab254b0aad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147 zcmZSn%**9?GAuNi0SXv_v;zJ*wf!HK3)UJWk3+cGC;0=Sz>xoVqS@Ud1_KdX_9_LPEm?}W?ovpUO{CE2T*}c RZhlH>PO2Tqz+xa~006&T8!P|- diff --git a/webhub/xlrd/licences.py b/webhub/xlrd/licences.py deleted file mode 100644 index 1e262a97..00000000 --- a/webhub/xlrd/licences.py +++ /dev/null @@ -1,77 +0,0 @@ -# -*- coding: cp1252 -*- - -""" -Portions copyright © 2005-2009, Stephen John Machin, Lingfo Pty Ltd -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, -this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. - -3. None of the names of Stephen John Machin, Lingfo Pty Ltd and any -contributors may be used to endorse or promote products derived from this -software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -THE POSSIBILITY OF SUCH DAMAGE. -""" - -""" -/*- - * Copyright (c) 2001 David Giffin. - * All rights reserved. - * - * Based on the the Java version: Andrew Khan Copyright (c) 2000. - * - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by - * David Giffin ." - * - * 4. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by - * David Giffin ." - * - * THIS SOFTWARE IS PROVIDED BY DAVID GIFFIN ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DAVID GIFFIN OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - */ -""" diff --git a/webhub/xlrd/licences.pyc b/webhub/xlrd/licences.pyc deleted file mode 100644 index 91a930bd8966eb1bcdca7585d5d6bda2ce16af63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1665 zcmb_d?T+I#6zzieP$b^rYJbg2+0L?vAAAVmCT?q#Cc$>5TmFpF#@$A0<0^J%=p*qc zJPzUoIL^#6T~y%g0M%VXCugYb$k|iBF~iEb?dtwaTiYL8 zO!uwdk?n`KJ^AQhn|9l7>X0C&x;Jz*{h{^VG<59kUE5&dceTf0kYvBN_kad2UDH0$ z3PA_szm1|V$MilVM|S%T%f>c1cXA#Kd<~2tVZF9@=0cdx`gUXD$nRQ5dyoqWE^C3} z`#_+;W?#1l(?gKg9|Az33kBW*0JY`>f&Om{LHm%iv76Jubbin^LSwF>xy4RThuWLI zt@rLp-=Qf(*hM=*=c_U0wlhJ4u-nxKGbs8W95b}O?#>a!dvJ*D9crIxZGuT4qb1Wd zSVjImU^!Ti?hnFvM-4#2WwgZxs<$q3cI)p$vjbdshuqO@f_V_s221t9Hr<1PoP(i2 zLC=LERZR7gNluuTvbYf`Pie9uJ?E4Zf8CP`m?}~($B$ecg0J)e(s+uS*bfr1XiXt6!R$ShQgsbl;D}wS- z2xDbsOWx$Fu(&hrY-4eA=5ILVycjluuv& E1*4GqZvX%Q diff --git a/webhub/xlrd/sheet.py b/webhub/xlrd/sheet.py deleted file mode 100644 index 36438a09..00000000 --- a/webhub/xlrd/sheet.py +++ /dev/null @@ -1,2419 +0,0 @@ -# -*- coding: cp1252 -*- - -## -#

      Portions copyright © 2005-2013 Stephen John Machin, Lingfo Pty Ltd

      -#

      This module is part of the xlrd package, which is released under a BSD-style licence.

      -## - -# 2010-04-25 SJM fix zoom factors cooking logic -# 2010-04-15 CW r4253 fix zoom factors cooking logic -# 2010-04-09 CW r4248 add a flag so xlutils knows whether or not to write a PANE record -# 2010-03-29 SJM Fixed bug in adding new empty rows in put_cell_ragged -# 2010-03-28 SJM Tailored put_cell method for each of ragged_rows=False (fixed speed regression) and =True (faster) -# 2010-03-25 CW r4236 Slight refactoring to remove method calls -# 2010-03-25 CW r4235 Collapse expand_cells into put_cell and enhance the raggedness. This should save even more memory! -# 2010-03-25 CW r4234 remove duplicate chunks for extend_cells; refactor to remove put_number_cell and put_blank_cell which essentially duplicated the code of put_cell -# 2010-03-10 SJM r4222 Added reading of the PANE record. -# 2010-03-10 SJM r4221 Preliminary work on "cooked" mag factors; use at own peril -# 2010-03-01 SJM Reading SCL record -# 2010-03-01 SJM Added ragged_rows functionality -# 2009-08-23 SJM Reduced CPU time taken by parsing MULBLANK records. -# 2009-08-18 SJM Used __slots__ and sharing to reduce memory consumed by Rowinfo instances -# 2009-05-31 SJM Fixed problem with no CODEPAGE record on extremely minimal BIFF2.x 3rd-party file -# 2009-04-27 SJM Integrated on_demand patch by Armando Serrano Lombillo -# 2008-02-09 SJM Excel 2.0: build XFs on the fly from cell attributes -# 2007-12-04 SJM Added support for Excel 2.x (BIFF2) files. -# 2007-10-11 SJM Added missing entry for blank cell type to ctype_text -# 2007-07-11 SJM Allow for BIFF2/3-style FORMAT record in BIFF4/8 file -# 2007-04-22 SJM Remove experimental "trimming" facility. - -from __future__ import print_function - -from array import array -from struct import unpack, calcsize -from .biffh import * -from .timemachine import * -from .formula import dump_formula, decompile_formula, rangename2d, FMLA_TYPE_CELL, FMLA_TYPE_SHARED -from .formatting import nearest_colour_index, Format - -DEBUG = 0 -OBJ_MSO_DEBUG = 0 - -_WINDOW2_options = ( - # Attribute names and initial values to use in case - # a WINDOW2 record is not written. - ("show_formulas", 0), - ("show_grid_lines", 1), - ("show_sheet_headers", 1), - ("panes_are_frozen", 0), - ("show_zero_values", 1), - ("automatic_grid_line_colour", 1), - ("columns_from_right_to_left", 0), - ("show_outline_symbols", 1), - ("remove_splits_if_pane_freeze_is_removed", 0), - # Multiple sheets can be selected, but only one can be active - # (hold down Ctrl and click multiple tabs in the file in OOo) - ("sheet_selected", 0), - # "sheet_visible" should really be called "sheet_active" - # and is 1 when this sheet is the sheet displayed when the file - # is open. More than likely only one sheet should ever be set as - # visible. - # This would correspond to the Book's sheet_active attribute, but - # that doesn't exist as WINDOW1 records aren't currently processed. - # The real thing is the visibility attribute from the BOUNDSHEET record. - ("sheet_visible", 0), - ("show_in_page_break_preview", 0), - ) - -## -#

      Contains the data for one worksheet.

      -# -#

      In the cell access functions, "rowx" is a row index, counting from zero, and "colx" is a -# column index, counting from zero. -# Negative values for row/column indexes and slice positions are supported in the expected fashion.

      -# -#

      For information about cell types and cell values, refer to the documentation of the {@link #Cell} class.

      -# -#

      WARNING: You don't call this class yourself. You access Sheet objects via the Book object that -# was returned when you called xlrd.open_workbook("myfile.xls").

      - - -class Sheet(BaseObject): - ## - # Name of sheet. - name = '' - - ## - # A reference to the Book object to which this sheet belongs. - # Example usage: some_sheet.book.datemode - book = None - - ## - # Number of rows in sheet. A row index is in range(thesheet.nrows). - nrows = 0 - - ## - # Nominal number of columns in sheet. It is 1 + the maximum column index - # found, ignoring trailing empty cells. See also open_workbook(ragged_rows=?) - # and Sheet.{@link #Sheet.row_len}(row_index). - ncols = 0 - - ## - # The map from a column index to a {@link #Colinfo} object. Often there is an entry - # in COLINFO records for all column indexes in range(257). - # Note that xlrd ignores the entry for the non-existent - # 257th column. On the other hand, there may be no entry for unused columns. - #
      -- New in version 0.6.1. Populated only if open_workbook(formatting_info=True). - colinfo_map = {} - - ## - # The map from a row index to a {@link #Rowinfo} object. Note that it is possible - # to have missing entries -- at least one source of XLS files doesn't - # bother writing ROW records. - #
      -- New in version 0.6.1. Populated only if open_workbook(formatting_info=True). - rowinfo_map = {} - - ## - # List of address ranges of cells containing column labels. - # These are set up in Excel by Insert > Name > Labels > Columns. - #
      -- New in version 0.6.0 - #
      How to deconstruct the list: - #
      -    # for crange in thesheet.col_label_ranges:
      -    #     rlo, rhi, clo, chi = crange
      -    #     for rx in xrange(rlo, rhi):
      -    #         for cx in xrange(clo, chi):
      -    #             print "Column label at (rowx=%d, colx=%d) is %r" \
      -    #                 (rx, cx, thesheet.cell_value(rx, cx))
      -    # 
      - col_label_ranges = [] - - ## - # List of address ranges of cells containing row labels. - # For more details, see col_label_ranges above. - #
      -- New in version 0.6.0 - row_label_ranges = [] - - ## - # List of address ranges of cells which have been merged. - # These are set up in Excel by Format > Cells > Alignment, then ticking - # the "Merge cells" box. - #
      -- New in version 0.6.1. Extracted only if open_workbook(formatting_info=True). - #
      How to deconstruct the list: - #
      -    # for crange in thesheet.merged_cells:
      -    #     rlo, rhi, clo, chi = crange
      -    #     for rowx in xrange(rlo, rhi):
      -    #         for colx in xrange(clo, chi):
      -    #             # cell (rlo, clo) (the top left one) will carry the data
      -    #             # and formatting info; the remainder will be recorded as
      -    #             # blank cells, but a renderer will apply the formatting info
      -    #             # for the top left cell (e.g. border, pattern) to all cells in
      -    #             # the range.
      -    # 
      - merged_cells = [] - - ## - # Mapping of (rowx, colx) to list of (offset, font_index) tuples. The offset - # defines where in the string the font begins to be used. - # Offsets are expected to be in ascending order. - # If the first offset is not zero, the meaning is that the cell's XF's font should - # be used from offset 0. - #
      This is a sparse mapping. There is no entry for cells that are not formatted with - # rich text. - #
      How to use: - #
      -    # runlist = thesheet.rich_text_runlist_map.get((rowx, colx))
      -    # if runlist:
      -    #     for offset, font_index in runlist:
      -    #         # do work here.
      -    #         pass
      -    # 
      - # Populated only if open_workbook(formatting_info=True). - #
      -- New in version 0.7.2. - #
        - rich_text_runlist_map = {} - - ## - # Default column width from DEFCOLWIDTH record, else None. - # From the OOo docs:
      - # """Column width in characters, using the width of the zero character - # from default font (first FONT record in the file). Excel adds some - # extra space to the default width, depending on the default font and - # default font size. The algorithm how to exactly calculate the resulting - # column width is not known.
      - # Example: The default width of 8 set in this record results in a column - # width of 8.43 using Arial font with a size of 10 points."""
      - # For the default hierarchy, refer to the {@link #Colinfo} class. - #
      -- New in version 0.6.1 - defcolwidth = None - - ## - # Default column width from STANDARDWIDTH record, else None. - # From the OOo docs:
      - # """Default width of the columns in 1/256 of the width of the zero - # character, using default font (first FONT record in the file)."""
      - # For the default hierarchy, refer to the {@link #Colinfo} class. - #
      -- New in version 0.6.1 - standardwidth = None - - ## - # Default value to be used for a row if there is - # no ROW record for that row. - # From the optional DEFAULTROWHEIGHT record. - default_row_height = None - - ## - # Default value to be used for a row if there is - # no ROW record for that row. - # From the optional DEFAULTROWHEIGHT record. - default_row_height_mismatch = None - - ## - # Default value to be used for a row if there is - # no ROW record for that row. - # From the optional DEFAULTROWHEIGHT record. - default_row_hidden = None - - ## - # Default value to be used for a row if there is - # no ROW record for that row. - # From the optional DEFAULTROWHEIGHT record. - default_additional_space_above = None - - ## - # Default value to be used for a row if there is - # no ROW record for that row. - # From the optional DEFAULTROWHEIGHT record. - default_additional_space_below = None - - ## - # Visibility of the sheet. 0 = visible, 1 = hidden (can be unhidden - # by user -- Format/Sheet/Unhide), 2 = "very hidden" (can be unhidden - # only by VBA macro). - visibility = 0 - - ## - # A 256-element tuple corresponding to the contents of the GCW record for this sheet. - # If no such record, treat as all bits zero. - # Applies to BIFF4-7 only. See docs of the {@link #Colinfo} class for discussion. - gcw = (0, ) * 256 - - ## - #

      A list of {@link #Hyperlink} objects corresponding to HLINK records found - # in the worksheet.
      -- New in version 0.7.2

      - hyperlink_list = [] - - ## - #

      A sparse mapping from (rowx, colx) to an item in {@link #Sheet.hyperlink_list}. - # Cells not covered by a hyperlink are not mapped. - # It is possible using the Excel UI to set up a hyperlink that - # covers a larger-than-1x1 rectangle of cells. - # Hyperlink rectangles may overlap (Excel doesn't check). - # When a multiply-covered cell is clicked on, the hyperlink that is activated - # (and the one that is mapped here) is the last in hyperlink_list. - #
      -- New in version 0.7.2

      - hyperlink_map = {} - - ## - #

      A sparse mapping from (rowx, colx) to a {@link #Note} object. - # Cells not containing a note ("comment") are not mapped. - #
      -- New in version 0.7.2

      - cell_note_map = {} - - ## - # Number of columns in left pane (frozen panes; for split panes, see comments below in code) - vert_split_pos = 0 - - ## - # Number of rows in top pane (frozen panes; for split panes, see comments below in code) - horz_split_pos = 0 - - ## - # Index of first visible row in bottom frozen/split pane - horz_split_first_visible = 0 - - ## - # Index of first visible column in right frozen/split pane - vert_split_first_visible = 0 - - ## - # Frozen panes: ignore it. Split panes: explanation and diagrams in OOo docs. - split_active_pane = 0 - - ## - # Boolean specifying if a PANE record was present, ignore unless you're xlutils.copy - has_pane_record = 0 - - ## - # A list of the horizontal page breaks in this sheet. - # Breaks are tuples in the form (index of row after break, start col index, end col index). - # Populated only if open_workbook(formatting_info=True). - #
      -- New in version 0.7.2 - horizontal_page_breaks = [] - - ## - # A list of the vertical page breaks in this sheet. - # Breaks are tuples in the form (index of col after break, start row index, end row index). - # Populated only if open_workbook(formatting_info=True). - #
      -- New in version 0.7.2 - vertical_page_breaks = [] - - - def __init__(self, book, position, name, number): - self.book = book - self.biff_version = book.biff_version - self._position = position - self.logfile = book.logfile - self.bt = array('B', [XL_CELL_EMPTY]) - self.bf = array('h', [-1]) - self.name = name - self.number = number - self.verbosity = book.verbosity - self.formatting_info = book.formatting_info - self.ragged_rows = book.ragged_rows - if self.ragged_rows: - self.put_cell = self.put_cell_ragged - else: - self.put_cell = self.put_cell_unragged - self._xf_index_to_xl_type_map = book._xf_index_to_xl_type_map - self.nrows = 0 # actual, including possibly empty cells - self.ncols = 0 - self._maxdatarowx = -1 # highest rowx containing a non-empty cell - self._maxdatacolx = -1 # highest colx containing a non-empty cell - self._dimnrows = 0 # as per DIMENSIONS record - self._dimncols = 0 - self._cell_values = [] - self._cell_types = [] - self._cell_xf_indexes = [] - self.defcolwidth = None - self.standardwidth = None - self.default_row_height = None - self.default_row_height_mismatch = 0 - self.default_row_hidden = 0 - self.default_additional_space_above = 0 - self.default_additional_space_below = 0 - self.colinfo_map = {} - self.rowinfo_map = {} - self.col_label_ranges = [] - self.row_label_ranges = [] - self.merged_cells = [] - self.rich_text_runlist_map = {} - self.horizontal_page_breaks = [] - self.vertical_page_breaks = [] - self._xf_index_stats = [0, 0, 0, 0] - self.visibility = book._sheet_visibility[number] # from BOUNDSHEET record - for attr, defval in _WINDOW2_options: - setattr(self, attr, defval) - self.first_visible_rowx = 0 - self.first_visible_colx = 0 - self.gridline_colour_index = 0x40 - self.gridline_colour_rgb = None # pre-BIFF8 - self.hyperlink_list = [] - self.hyperlink_map = {} - self.cell_note_map = {} - - # Values calculated by xlrd to predict the mag factors that - # will actually be used by Excel to display your worksheet. - # Pass these values to xlwt when writing XLS files. - # Warning 1: Behaviour of OOo Calc and Gnumeric has been observed to differ from Excel's. - # Warning 2: A value of zero means almost exactly what it says. Your sheet will be - # displayed as a very tiny speck on the screen. xlwt will reject attempts to set - # a mag_factor that is not (10 <= mag_factor <= 400). - self.cooked_page_break_preview_mag_factor = 60 - self.cooked_normal_view_mag_factor = 100 - - # Values (if any) actually stored on the XLS file - self.cached_page_break_preview_mag_factor = None # from WINDOW2 record - self.cached_normal_view_mag_factor = None # from WINDOW2 record - self.scl_mag_factor = None # from SCL record - - self._ixfe = None # BIFF2 only - self._cell_attr_to_xfx = {} # BIFF2.0 only - - #### Don't initialise this here, use class attribute initialisation. - #### self.gcw = (0, ) * 256 #### - - if self.biff_version >= 80: - self.utter_max_rows = 65536 - else: - self.utter_max_rows = 16384 - self.utter_max_cols = 256 - - self._first_full_rowx = -1 - - # self._put_cell_exceptions = 0 - # self._put_cell_row_widenings = 0 - # self._put_cell_rows_appended = 0 - # self._put_cell_cells_appended = 0 - - - ## - # {@link #Cell} object in the given row and column. - def cell(self, rowx, colx): - if self.formatting_info: - xfx = self.cell_xf_index(rowx, colx) - else: - xfx = None - return Cell( - self._cell_types[rowx][colx], - self._cell_values[rowx][colx], - xfx, - ) - - ## - # Value of the cell in the given row and column. - def cell_value(self, rowx, colx): - return self._cell_values[rowx][colx] - - ## - # Type of the cell in the given row and column. - # Refer to the documentation of the {@link #Cell} class. - def cell_type(self, rowx, colx): - return self._cell_types[rowx][colx] - - ## - # XF index of the cell in the given row and column. - # This is an index into Book.{@link #Book.xf_list}. - #
      -- New in version 0.6.1 - def cell_xf_index(self, rowx, colx): - self.req_fmt_info() - xfx = self._cell_xf_indexes[rowx][colx] - if xfx > -1: - self._xf_index_stats[0] += 1 - return xfx - # Check for a row xf_index - try: - xfx = self.rowinfo_map[rowx].xf_index - if xfx > -1: - self._xf_index_stats[1] += 1 - return xfx - except KeyError: - pass - # Check for a column xf_index - try: - xfx = self.colinfo_map[colx].xf_index - if xfx == -1: xfx = 15 - self._xf_index_stats[2] += 1 - return xfx - except KeyError: - # If all else fails, 15 is used as hardwired global default xf_index. - self._xf_index_stats[3] += 1 - return 15 - - ## - # Returns the effective number of cells in the given row. For use with - # open_workbook(ragged_rows=True) which is likely to produce rows - # with fewer than {@link #Sheet.ncols} cells. - #
      -- New in version 0.7.2 - def row_len(self, rowx): - return len(self._cell_values[rowx]) - - ## - # Returns a sequence of the {@link #Cell} objects in the given row. - def row(self, rowx): - return [ - self.cell(rowx, colx) - for colx in xrange(len(self._cell_values[rowx])) - ] - - ## - # Returns a slice of the types - # of the cells in the given row. - def row_types(self, rowx, start_colx=0, end_colx=None): - if end_colx is None: - return self._cell_types[rowx][start_colx:] - return self._cell_types[rowx][start_colx:end_colx] - - ## - # Returns a slice of the values - # of the cells in the given row. - def row_values(self, rowx, start_colx=0, end_colx=None): - if end_colx is None: - return self._cell_values[rowx][start_colx:] - return self._cell_values[rowx][start_colx:end_colx] - - ## - # Returns a slice of the {@link #Cell} objects in the given row. - def row_slice(self, rowx, start_colx=0, end_colx=None): - nc = len(self._cell_values[rowx]) - if start_colx < 0: - start_colx += nc - if start_colx < 0: - start_colx = 0 - if end_colx is None or end_colx > nc: - end_colx = nc - elif end_colx < 0: - end_colx += nc - return [ - self.cell(rowx, colx) - for colx in xrange(start_colx, end_colx) - ] - - ## - # Returns a slice of the {@link #Cell} objects in the given column. - def col_slice(self, colx, start_rowx=0, end_rowx=None): - nr = self.nrows - if start_rowx < 0: - start_rowx += nr - if start_rowx < 0: - start_rowx = 0 - if end_rowx is None or end_rowx > nr: - end_rowx = nr - elif end_rowx < 0: - end_rowx += nr - return [ - self.cell(rowx, colx) - for rowx in xrange(start_rowx, end_rowx) - ] - - ## - # Returns a slice of the values of the cells in the given column. - def col_values(self, colx, start_rowx=0, end_rowx=None): - nr = self.nrows - if start_rowx < 0: - start_rowx += nr - if start_rowx < 0: - start_rowx = 0 - if end_rowx is None or end_rowx > nr: - end_rowx = nr - elif end_rowx < 0: - end_rowx += nr - return [ - self._cell_values[rowx][colx] - for rowx in xrange(start_rowx, end_rowx) - ] - - ## - # Returns a slice of the types of the cells in the given column. - def col_types(self, colx, start_rowx=0, end_rowx=None): - nr = self.nrows - if start_rowx < 0: - start_rowx += nr - if start_rowx < 0: - start_rowx = 0 - if end_rowx is None or end_rowx > nr: - end_rowx = nr - elif end_rowx < 0: - end_rowx += nr - return [ - self._cell_types[rowx][colx] - for rowx in xrange(start_rowx, end_rowx) - ] - - ## - # Returns a sequence of the {@link #Cell} objects in the given column. - def col(self, colx): - return self.col_slice(colx) - # Above two lines just for the docs. Here's the real McCoy: - col = col_slice - - # === Following methods are used in building the worksheet. - # === They are not part of the API. - - def tidy_dimensions(self): - if self.verbosity >= 3: - fprintf(self.logfile, - "tidy_dimensions: nrows=%d ncols=%d \n", - self.nrows, self.ncols, - ) - if 1 and self.merged_cells: - nr = nc = 0 - umaxrows = self.utter_max_rows - umaxcols = self.utter_max_cols - for crange in self.merged_cells: - rlo, rhi, clo, chi = crange - if not (0 <= rlo < rhi <= umaxrows) \ - or not (0 <= clo < chi <= umaxcols): - fprintf(self.logfile, - "*** WARNING: sheet #%d (%r), MERGEDCELLS bad range %r\n", - self.number, self.name, crange) - if rhi > nr: nr = rhi - if chi > nc: nc = chi - if nc > self.ncols: - self.ncols = nc - if nr > self.nrows: - # we put one empty cell at (nr-1,0) to make sure - # we have the right number of rows. The ragged rows - # will sort out the rest if needed. - self.put_cell(nr-1, 0, XL_CELL_EMPTY, '', -1) - if self.verbosity >= 1 \ - and (self.nrows != self._dimnrows or self.ncols != self._dimncols): - fprintf(self.logfile, - "NOTE *** sheet %d (%r): DIMENSIONS R,C = %d,%d should be %d,%d\n", - self.number, - self.name, - self._dimnrows, - self._dimncols, - self.nrows, - self.ncols, - ) - if not self.ragged_rows: - # fix ragged rows - ncols = self.ncols - s_cell_types = self._cell_types - s_cell_values = self._cell_values - s_cell_xf_indexes = self._cell_xf_indexes - s_fmt_info = self.formatting_info - # for rowx in xrange(self.nrows): - if self._first_full_rowx == -2: - ubound = self.nrows - else: - ubound = self._first_full_rowx - for rowx in xrange(ubound): - trow = s_cell_types[rowx] - rlen = len(trow) - nextra = ncols - rlen - if nextra > 0: - s_cell_values[rowx][rlen:] = [''] * nextra - trow[rlen:] = self.bt * nextra - if s_fmt_info: - s_cell_xf_indexes[rowx][rlen:] = self.bf * nextra - - def put_cell_ragged(self, rowx, colx, ctype, value, xf_index): - if ctype is None: - # we have a number, so look up the cell type - ctype = self._xf_index_to_xl_type_map[xf_index] - assert 0 <= colx < self.utter_max_cols - assert 0 <= rowx < self.utter_max_rows - fmt_info = self.formatting_info - - try: - nr = rowx + 1 - if self.nrows < nr: - - scta = self._cell_types.append - scva = self._cell_values.append - scxa = self._cell_xf_indexes.append - bt = self.bt - bf = self.bf - for _unused in xrange(self.nrows, nr): - scta(bt * 0) - scva([]) - if fmt_info: - scxa(bf * 0) - self.nrows = nr - - types_row = self._cell_types[rowx] - values_row = self._cell_values[rowx] - if fmt_info: - fmt_row = self._cell_xf_indexes[rowx] - ltr = len(types_row) - if colx >= self.ncols: - self.ncols = colx + 1 - num_empty = colx - ltr - if not num_empty: - # most common case: colx == previous colx + 1 - # self._put_cell_cells_appended += 1 - types_row.append(ctype) - values_row.append(value) - if fmt_info: - fmt_row.append(xf_index) - return - if num_empty > 0: - num_empty += 1 - # self._put_cell_row_widenings += 1 - # types_row.extend(self.bt * num_empty) - # values_row.extend([''] * num_empty) - # if fmt_info: - # fmt_row.extend(self.bf * num_empty) - types_row[ltr:] = self.bt * num_empty - values_row[ltr:] = [''] * num_empty - if fmt_info: - fmt_row[ltr:] = self.bf * num_empty - types_row[colx] = ctype - values_row[colx] = value - if fmt_info: - fmt_row[colx] = xf_index - except: - print("put_cell", rowx, colx, file=self.logfile) - raise - - def put_cell_unragged(self, rowx, colx, ctype, value, xf_index): - if ctype is None: - # we have a number, so look up the cell type - ctype = self._xf_index_to_xl_type_map[xf_index] - # assert 0 <= colx < self.utter_max_cols - # assert 0 <= rowx < self.utter_max_rows - try: - self._cell_types[rowx][colx] = ctype - self._cell_values[rowx][colx] = value - if self.formatting_info: - self._cell_xf_indexes[rowx][colx] = xf_index - except IndexError: - # print >> self.logfile, "put_cell extending", rowx, colx - # self.extend_cells(rowx+1, colx+1) - # self._put_cell_exceptions += 1 - nr = rowx + 1 - nc = colx + 1 - assert 1 <= nc <= self.utter_max_cols - assert 1 <= nr <= self.utter_max_rows - if nc > self.ncols: - self.ncols = nc - # The row self._first_full_rowx and all subsequent rows - # are guaranteed to have length == self.ncols. Thus the - # "fix ragged rows" section of the tidy_dimensions method - # doesn't need to examine them. - if nr < self.nrows: - # cell data is not in non-descending row order *AND* - # self.ncols has been bumped up. - # This very rare case ruins this optmisation. - self._first_full_rowx = -2 - elif rowx > self._first_full_rowx > -2: - self._first_full_rowx = rowx - if nr <= self.nrows: - # New cell is in an existing row, so extend that row (if necessary). - # Note that nr < self.nrows means that the cell data - # is not in ascending row order!! - trow = self._cell_types[rowx] - nextra = self.ncols - len(trow) - if nextra > 0: - # self._put_cell_row_widenings += 1 - trow.extend(self.bt * nextra) - if self.formatting_info: - self._cell_xf_indexes[rowx].extend(self.bf * nextra) - self._cell_values[rowx].extend([''] * nextra) - else: - scta = self._cell_types.append - scva = self._cell_values.append - scxa = self._cell_xf_indexes.append - fmt_info = self.formatting_info - nc = self.ncols - bt = self.bt - bf = self.bf - for _unused in xrange(self.nrows, nr): - # self._put_cell_rows_appended += 1 - scta(bt * nc) - scva([''] * nc) - if fmt_info: - scxa(bf * nc) - self.nrows = nr - # === end of code from extend_cells() - try: - self._cell_types[rowx][colx] = ctype - self._cell_values[rowx][colx] = value - if self.formatting_info: - self._cell_xf_indexes[rowx][colx] = xf_index - except: - print("put_cell", rowx, colx, file=self.logfile) - raise - except: - print("put_cell", rowx, colx, file=self.logfile) - raise - - - # === Methods after this line neither know nor care about how cells are stored. - - def read(self, bk): - global rc_stats - DEBUG = 0 - blah = DEBUG or self.verbosity >= 2 - blah_rows = DEBUG or self.verbosity >= 4 - blah_formulas = 0 and blah - r1c1 = 0 - oldpos = bk._position - bk._position = self._position - XL_SHRFMLA_ETC_ETC = ( - XL_SHRFMLA, XL_ARRAY, XL_TABLEOP, XL_TABLEOP2, - XL_ARRAY2, XL_TABLEOP_B2, - ) - self_put_cell = self.put_cell - local_unpack = unpack - bk_get_record_parts = bk.get_record_parts - bv = self.biff_version - fmt_info = self.formatting_info - do_sst_rich_text = fmt_info and bk._rich_text_runlist_map - rowinfo_sharing_dict = {} - txos = {} - eof_found = 0 - while 1: - # if DEBUG: print "SHEET.READ: about to read from position %d" % bk._position - rc, data_len, data = bk_get_record_parts() - # if rc in rc_stats: - # rc_stats[rc] += 1 - # else: - # rc_stats[rc] = 1 - # if DEBUG: print "SHEET.READ: op 0x%04x, %d bytes %r" % (rc, data_len, data) - if rc == XL_NUMBER: - # [:14] in following stmt ignores extraneous rubbish at end of record. - # Sample file testEON-8.xls supplied by Jan Kraus. - rowx, colx, xf_index, d = local_unpack('> 15) & 1 - r.outline_level = bits2 & 7 - r.outline_group_starts_ends = (bits2 >> 4) & 1 - r.hidden = (bits2 >> 5) & 1 - r.height_mismatch = (bits2 >> 6) & 1 - r.has_default_xf_index = (bits2 >> 7) & 1 - r.xf_index = (bits2 >> 16) & 0xfff - r.additional_space_above = (bits2 >> 28) & 1 - r.additional_space_below = (bits2 >> 29) & 1 - if not r.has_default_xf_index: - r.xf_index = -1 - self.rowinfo_map[rowx] = r - if 0 and r.xf_index > -1: - fprintf(self.logfile, - "**ROW %d %d %d\n", - self.number, rowx, r.xf_index) - if blah_rows: - print('ROW', rowx, bits1, bits2, file=self.logfile) - r.dump(self.logfile, - header="--- sh #%d, rowx=%d ---" % (self.number, rowx)) - elif rc in XL_FORMULA_OPCODES: # 06, 0206, 0406 - # DEBUG = 1 - # if DEBUG: print "FORMULA: rc: 0x%04x data: %r" % (rc, data) - if bv >= 50: - rowx, colx, xf_index, result_str, flags = local_unpack('= 30: - rowx, colx, xf_index, result_str, flags = local_unpack(' 255: break # Excel does 0 to 256 inclusive - self.colinfo_map[colx] = c - if 0: - fprintf(self.logfile, - "**COL %d %d %d\n", - self.number, colx, c.xf_index) - if blah: - fprintf( - self.logfile, - "COLINFO sheet #%d cols %d-%d: wid=%d xf_index=%d flags=0x%04x\n", - self.number, first_colx, last_colx, c.width, c.xf_index, flags, - ) - c.dump(self.logfile, header='===') - elif rc == XL_DEFCOLWIDTH: - self.defcolwidth, = local_unpack(">= 1 - self.gcw = tuple(gcw) - if 0: - showgcw = "".join(map(lambda x: "F "[x], gcw)).rstrip().replace(' ', '.') - print("GCW:", showgcw, file=self.logfile) - elif rc == XL_BLANK: - if not fmt_info: continue - rowx, colx, xf_index = local_unpack('> self.logfile, "BLANK", rowx, colx, xf_index - self_put_cell(rowx, colx, XL_CELL_BLANK, '', xf_index) - elif rc == XL_MULBLANK: # 00BE - if not fmt_info: continue - nitems = data_len >> 1 - result = local_unpack("<%dH" % nitems, data) - rowx, mul_first = result[:2] - mul_last = result[-1] - # print >> self.logfile, "MULBLANK", rowx, mul_first, mul_last, data_len, nitems, mul_last + 4 - mul_first - assert nitems == mul_last + 4 - mul_first - pos = 2 - for colx in xrange(mul_first, mul_last + 1): - self_put_cell(rowx, colx, XL_CELL_BLANK, '', result[pos]) - pos += 1 - elif rc == XL_DIMENSION or rc == XL_DIMENSION2: - if data_len == 0: - # Four zero bytes after some other record. See github issue 64. - continue - # if data_len == 10: - # Was crashing on BIFF 4.0 file w/o the two trailing unused bytes. - # Reported by Ralph Heimburger. - if bv < 80: - dim_tuple = local_unpack(' found EOF", file=self.logfile) - elif rc == XL_COUNTRY: - bk.handle_country(data) - elif rc == XL_LABELRANGES: - pos = 0 - pos = unpack_cell_range_address_list_update_pos( - self.row_label_ranges, data, pos, bv, addr_size=8, - ) - pos = unpack_cell_range_address_list_update_pos( - self.col_label_ranges, data, pos, bv, addr_size=8, - ) - assert pos == data_len - elif rc == XL_ARRAY: - row1x, rownx, col1x, colnx, array_flags, tokslen = \ - local_unpack("= 80 - num_CFs, needs_recalc, browx1, browx2, bcolx1, bcolx2 = \ - unpack("<6H", data[0:12]) - if self.verbosity >= 1: - fprintf(self.logfile, - "\n*** WARNING: Ignoring CONDFMT (conditional formatting) record\n" \ - "*** in Sheet %d (%r).\n" \ - "*** %d CF record(s); needs_recalc_or_redraw = %d\n" \ - "*** Bounding box is %s\n", - self.number, self.name, num_CFs, needs_recalc, - rangename2d(browx1, browx2+1, bcolx1, bcolx2+1), - ) - olist = [] # updated by the function - pos = unpack_cell_range_address_list_update_pos( - olist, data, 12, bv, addr_size=8) - # print >> self.logfile, repr(result), len(result) - if self.verbosity >= 1: - fprintf(self.logfile, - "*** %d individual range(s):\n" \ - "*** %s\n", - len(olist), - ", ".join([rangename2d(*coords) for coords in olist]), - ) - elif rc == XL_CF: - if not fmt_info: continue - cf_type, cmp_op, sz1, sz2, flags = unpack("> 26) & 1 - bord_block = (flags >> 28) & 1 - patt_block = (flags >> 29) & 1 - if self.verbosity >= 1: - fprintf(self.logfile, - "\n*** WARNING: Ignoring CF (conditional formatting) sub-record.\n" \ - "*** cf_type=%d, cmp_op=%d, sz1=%d, sz2=%d, flags=0x%08x\n" \ - "*** optional data blocks: font=%d, border=%d, pattern=%d\n", - cf_type, cmp_op, sz1, sz2, flags, - font_block, bord_block, patt_block, - ) - # hex_char_dump(data, 0, data_len, fout=self.logfile) - pos = 12 - if font_block: - (font_height, font_options, weight, escapement, underline, - font_colour_index, two_bits, font_esc, font_underl) = \ - unpack("<64x i i H H B 3x i 4x i i i 18x", data[pos:pos+118]) - font_style = (two_bits > 1) & 1 - posture = (font_options > 1) & 1 - font_canc = (two_bits > 7) & 1 - cancellation = (font_options > 7) & 1 - if self.verbosity >= 1: - fprintf(self.logfile, - "*** Font info: height=%d, weight=%d, escapement=%d,\n" \ - "*** underline=%d, colour_index=%d, esc=%d, underl=%d,\n" \ - "*** style=%d, posture=%d, canc=%d, cancellation=%d\n", - font_height, weight, escapement, underline, - font_colour_index, font_esc, font_underl, - font_style, posture, font_canc, cancellation, - ) - pos += 118 - if bord_block: - pos += 8 - if patt_block: - pos += 4 - fmla1 = data[pos:pos+sz1] - pos += sz1 - if blah and sz1: - fprintf(self.logfile, - "*** formula 1:\n", - ) - dump_formula(bk, fmla1, sz1, bv, reldelta=0, blah=1) - fmla2 = data[pos:pos+sz2] - pos += sz2 - assert pos == data_len - if blah and sz2: - fprintf(self.logfile, - "*** formula 2:\n", - ) - dump_formula(bk, fmla2, sz2, bv, reldelta=0, blah=1) - elif rc == XL_DEFAULTROWHEIGHT: - if data_len == 4: - bits, self.default_row_height = unpack("> 1) & 1 - self.default_additional_space_above = (bits >> 2) & 1 - self.default_additional_space_below = (bits >> 3) & 1 - elif rc == XL_MERGEDCELLS: - if not fmt_info: continue - pos = unpack_cell_range_address_list_update_pos( - self.merged_cells, data, 0, bv, addr_size=8) - if blah: - fprintf(self.logfile, - "MERGEDCELLS: %d ranges\n", (pos - 2) // 8) - assert pos == data_len, \ - "MERGEDCELLS: pos=%d data_len=%d" % (pos, data_len) - elif rc == XL_WINDOW2: - if bv >= 80 and data_len >= 14: - (options, - self.first_visible_rowx, self.first_visible_colx, - self.gridline_colour_index, - self.cached_page_break_preview_mag_factor, - self.cached_normal_view_mag_factor - ) = unpack("= 30 # BIFF3-7 - (options, - self.first_visible_rowx, self.first_visible_colx, - ) = unpack(">= 1 - elif rc == XL_SCL: - num, den = unpack("= 0: - print(( - "WARNING *** SCL rcd sheet %d: should have 0.1 <= num/den <= 4; got %d/%d" - % (self.number, num, den) - ), file=self.logfile) - result = 100 - self.scl_mag_factor = result - elif rc == XL_PANE: - ( - self.vert_split_pos, - self.horz_split_pos, - self.horz_split_first_visible, - self.vert_split_first_visible, - self.split_active_pane, - ) = unpack("= 80)) + 2 == data_len - pos = 2 - if bv < 80: - while pos < data_len: - self.horizontal_page_breaks.append((local_unpack("= 80)) + 2 == data_len - pos = 2 - if bv < 80: - while pos < data_len: - self.vertical_page_breaks.append((local_unpack("> 15) & 1 - r.has_default_xf_index = bits2 & 1 - r.xf_index = xf_index - # r.outline_level = 0 # set in __init__ - # r.outline_group_starts_ends = 0 # set in __init__ - # r.hidden = 0 # set in __init__ - # r.height_mismatch = 0 # set in __init__ - # r.additional_space_above = 0 # set in __init__ - # r.additional_space_below = 0 # set in __init__ - self.rowinfo_map[rowx] = r - if 0 and r.xf_index > -1: - fprintf(self.logfile, - "**ROW %d %d %d\n", - self.number, rowx, r.xf_index) - if blah_rows: - print('ROW_B2', rowx, bits1, has_defaults, file=self.logfile) - r.dump(self.logfile, - header="--- sh #%d, rowx=%d ---" % (self.number, rowx)) - elif rc == XL_COLWIDTH: # BIFF2 only - if not fmt_info: continue - first_colx, last_colx, width\ - = local_unpack("= 30) + 1 - nchars_expected = unpack("<" + "BH"[lenlen - 1], data[:lenlen])[0] - offset = lenlen - if bv < 80: - enc = bk.encoding or bk.derive_encoding() - nchars_found = 0 - result = UNICODE_LITERAL("") - while 1: - if bv >= 80: - flag = BYTES_ORD(data[offset]) & 1 - enc = ("latin_1", "utf_16_le")[flag] - offset += 1 - chunk = unicode(data[offset:], enc) - result += chunk - nchars_found += len(chunk) - if nchars_found == nchars_expected: - return result - if nchars_found > nchars_expected: - msg = ("STRING/CONTINUE: expected %d chars, found %d" - % (nchars_expected, nchars_found)) - raise XLRDError(msg) - rc, _unused_len, data = bk.get_record_parts() - if rc != XL_CONTINUE: - raise XLRDError( - "Expected CONTINUE record; found record-type 0x%04X" % rc) - offset = 0 - - def update_cooked_mag_factors(self): - # Cached values are used ONLY for the non-active view mode. - # When the user switches to the non-active view mode, - # if the cached value for that mode is not valid, - # Excel pops up a window which says: - # "The number must be between 10 and 400. Try again by entering a number in this range." - # When the user hits OK, it drops into the non-active view mode - # but uses the magn from the active mode. - # NOTE: definition of "valid" depends on mode ... see below - blah = DEBUG or self.verbosity > 0 - if self.show_in_page_break_preview: - if self.scl_mag_factor is None: # no SCL record - self.cooked_page_break_preview_mag_factor = 100 # Yes, 100, not 60, NOT a typo - else: - self.cooked_page_break_preview_mag_factor = self.scl_mag_factor - zoom = self.cached_normal_view_mag_factor - if not (10 <= zoom <=400): - if blah: - print(( - "WARNING *** WINDOW2 rcd sheet %d: Bad cached_normal_view_mag_factor: %d" - % (self.number, self.cached_normal_view_mag_factor) - ), file=self.logfile) - zoom = self.cooked_page_break_preview_mag_factor - self.cooked_normal_view_mag_factor = zoom - else: - # normal view mode - if self.scl_mag_factor is None: # no SCL record - self.cooked_normal_view_mag_factor = 100 - else: - self.cooked_normal_view_mag_factor = self.scl_mag_factor - zoom = self.cached_page_break_preview_mag_factor - if zoom == 0: - # VALID, defaults to 60 - zoom = 60 - elif not (10 <= zoom <= 400): - if blah: - print(( - "WARNING *** WINDOW2 rcd sheet %r: Bad cached_page_break_preview_mag_factor: %r" - % (self.number, self.cached_page_break_preview_mag_factor) - ), file=self.logfile) - zoom = self.cooked_normal_view_mag_factor - self.cooked_page_break_preview_mag_factor = zoom - - def fixed_BIFF2_xfindex(self, cell_attr, rowx, colx, true_xfx=None): - DEBUG = 0 - blah = DEBUG or self.verbosity >= 2 - if self.biff_version == 21: - if self.book.xf_list: - if true_xfx is not None: - xfx = true_xfx - else: - xfx = BYTES_ORD(cell_attr[0]) & 0x3F - if xfx == 0x3F: - if self._ixfe is None: - raise XLRDError("BIFF2 cell record has XF index 63 but no preceding IXFE record.") - xfx = self._ixfe - # OOo docs are capable of interpretation that each - # cell record is preceded immediately by its own IXFE record. - # Empirical evidence is that (sensibly) an IXFE record applies to all - # following cell records until another IXFE comes along. - return xfx - # Have either Excel 2.0, or broken 2.1 w/o XF records -- same effect. - self.biff_version = self.book.biff_version = 20 - #### check that XF slot in cell_attr is zero - xfx_slot = BYTES_ORD(cell_attr[0]) & 0x3F - assert xfx_slot == 0 - xfx = self._cell_attr_to_xfx.get(cell_attr) - if xfx is not None: - return xfx - if blah: - fprintf(self.logfile, "New cell_attr %r at (%r, %r)\n", cell_attr, rowx, colx) - if not self.book.xf_list: - for xfx in xrange(16): - self.insert_new_BIFF20_xf(cell_attr=b"\x40\x00\x00", style=xfx < 15) - xfx = self.insert_new_BIFF20_xf(cell_attr=cell_attr) - return xfx - - def insert_new_BIFF20_xf(self, cell_attr, style=0): - DEBUG = 0 - blah = DEBUG or self.verbosity >= 2 - book = self.book - xfx = len(book.xf_list) - xf = self.fake_XF_from_BIFF20_cell_attr(cell_attr, style) - xf.xf_index = xfx - book.xf_list.append(xf) - if blah: - xf.dump(self.logfile, header="=== Faked XF %d ===" % xfx, footer="======") - if xf.format_key not in book.format_map: - if xf.format_key: - msg = "ERROR *** XF[%d] unknown format key (%d, 0x%04x)\n" - fprintf(self.logfile, msg, - xf.xf_index, xf.format_key, xf.format_key) - fmt = Format(xf.format_key, FUN, UNICODE_LITERAL("General")) - book.format_map[xf.format_key] = fmt - book.format_list.append(fmt) - cellty_from_fmtty = { - FNU: XL_CELL_NUMBER, - FUN: XL_CELL_NUMBER, - FGE: XL_CELL_NUMBER, - FDT: XL_CELL_DATE, - FTX: XL_CELL_NUMBER, # Yes, a number can be formatted as text. - } - fmt = book.format_map[xf.format_key] - cellty = cellty_from_fmtty[fmt.type] - self._xf_index_to_xl_type_map[xf.xf_index] = cellty - self._cell_attr_to_xfx[cell_attr] = xfx - return xfx - - def fake_XF_from_BIFF20_cell_attr(self, cell_attr, style=0): - from .formatting import XF, XFAlignment, XFBorder, XFBackground, XFProtection - xf = XF() - xf.alignment = XFAlignment() - xf.alignment.indent_level = 0 - xf.alignment.shrink_to_fit = 0 - xf.alignment.text_direction = 0 - xf.border = XFBorder() - xf.border.diag_up = 0 - xf.border.diag_down = 0 - xf.border.diag_colour_index = 0 - xf.border.diag_line_style = 0 # no line - xf.background = XFBackground() - xf.protection = XFProtection() - (prot_bits, font_and_format, halign_etc) = unpack('> 6 - upkbits(xf.protection, prot_bits, ( - (6, 0x40, 'cell_locked'), - (7, 0x80, 'formula_hidden'), - )) - xf.alignment.hor_align = halign_etc & 0x07 - for mask, side in ((0x08, 'left'), (0x10, 'right'), (0x20, 'top'), (0x40, 'bottom')): - if halign_etc & mask: - colour_index, line_style = 8, 1 # black, thin - else: - colour_index, line_style = 0, 0 # none, none - setattr(xf.border, side + '_colour_index', colour_index) - setattr(xf.border, side + '_line_style', line_style) - bg = xf.background - if halign_etc & 0x80: - bg.fill_pattern = 17 - else: - bg.fill_pattern = 0 - bg.background_colour_index = 9 # white - bg.pattern_colour_index = 8 # black - xf.parent_style_index = (0x0FFF, 0)[style] - xf.alignment.vert_align = 2 # bottom - xf.alignment.rotation = 0 - for attr_stem in \ - "format font alignment border background protection".split(): - attr = "_" + attr_stem + "_flag" - setattr(xf, attr, 1) - return xf - - def req_fmt_info(self): - if not self.formatting_info: - raise XLRDError("Feature requires open_workbook(..., formatting_info=True)") - - ## - # Determine column display width. - #
      -- New in version 0.6.1 - #
      - # @param colx Index of the queried column, range 0 to 255. - # Note that it is possible to find out the width that will be used to display - # columns with no cell information e.g. column IV (colx=255). - # @return The column width that will be used for displaying - # the given column by Excel, in units of 1/256th of the width of a - # standard character (the digit zero in the first font). - - def computed_column_width(self, colx): - self.req_fmt_info() - if self.biff_version >= 80: - colinfo = self.colinfo_map.get(colx, None) - if colinfo is not None: - return colinfo.width - if self.standardwidth is not None: - return self.standardwidth - elif self.biff_version >= 40: - if self.gcw[colx]: - if self.standardwidth is not None: - return self.standardwidth - else: - colinfo = self.colinfo_map.get(colx, None) - if colinfo is not None: - return colinfo.width - elif self.biff_version == 30: - colinfo = self.colinfo_map.get(colx, None) - if colinfo is not None: - return colinfo.width - # All roads lead to Rome and the DEFCOLWIDTH ... - if self.defcolwidth is not None: - return self.defcolwidth * 256 - return 8 * 256 # 8 is what Excel puts in a DEFCOLWIDTH record - - def handle_hlink(self, data): - # DEBUG = 1 - if DEBUG: print("\n=== hyperlink ===", file=self.logfile) - record_size = len(data) - h = Hyperlink() - h.frowx, h.lrowx, h.fcolx, h.lcolx, guid0, dummy, options = unpack(' 0: - fprintf( - self.logfile, - "*** WARNING: hyperlink at r=%d c=%d has %d extra data bytes: %s\n", - h.frowx, - h.fcolx, - extra_nbytes, - REPR(data[-extra_nbytes:]) - ) - # Seen: b"\x00\x00" also b"A\x00", b"V\x00" - elif extra_nbytes < 0: - raise XLRDError("Bug or corrupt file, send copy of input file for debugging") - - self.hyperlink_list.append(h) - for rowx in xrange(h.frowx, h.lrowx+1): - for colx in xrange(h.fcolx, h.lcolx+1): - self.hyperlink_map[rowx, colx] = h - - def handle_quicktip(self, data): - rcx, frowx, lrowx, fcolx, lcolx = unpack('<5H', data[:10]) - assert rcx == XL_QUICKTIP - assert self.hyperlink_list - h = self.hyperlink_list[-1] - assert (frowx, lrowx, fcolx, lcolx) == (h.frowx, h.lrowx, h.fcolx, h.lcolx) - assert data[-2:] == b'\x00\x00' - h.quicktip = unicode(data[10:-2], 'utf_16_le') - - def handle_msodrawingetc(self, recid, data_len, data): - if not OBJ_MSO_DEBUG: - return - DEBUG = 1 - if self.biff_version < 80: - return - o = MSODrawing() - pos = 0 - while pos < data_len: - tmp, fbt, cb = unpack('> 4) & 0xFFF - if ver == 0xF: - ndb = 0 # container - else: - ndb = cb - if DEBUG: - hex_char_dump(data, pos, ndb + 8, base=0, fout=self.logfile) - fprintf(self.logfile, - "fbt:0x%04X inst:%d ver:0x%X cb:%d (0x%04X)\n", - fbt, inst, ver, cb, cb) - if fbt == 0xF010: # Client Anchor - assert ndb == 18 - (o.anchor_unk, - o.anchor_colx_lo, o.anchor_rowx_lo, - o.anchor_colx_hi, o.anchor_rowx_hi) = unpack(' 0: - rc2, data2_len, data2 = self.book.get_record_parts() - assert rc2 == XL_NOTE - dummy_rowx, nb = unpack('> 1) & 1 - o.row_hidden = (option_flags >> 7) & 1 - o.col_hidden = (option_flags >> 8) & 1 - # XL97 dev kit book says NULL [sic] bytes padding between string count and string data - # to ensure that string is word-aligned. Appears to be nonsense. - o.author, endpos = unpack_unicode_update_pos(data, 8, lenlen=2) - # There is a random/undefined byte after the author string (not counted in the - # string length). - # Issue 4 on github: Google Spreadsheet doesn't write the undefined byte. - assert (data_len - endpos) in (0, 1) - if OBJ_MSO_DEBUG: - o.dump(self.logfile, header="=== Note ===", footer= " ") - txo = txos.get(o._object_id) - if txo: - o.text = txo.text - o.rich_text_runlist = txo.rich_text_runlist - self.cell_note_map[o.rowx, o.colx] = o - - def handle_txo(self, data): - if self.biff_version < 80: - return - o = MSTxo() - data_len = len(data) - fmt = ' Represents a user "comment" or "note". -# Note objects are accessible through Sheet.{@link #Sheet.cell_note_map}. -#
      -- New in version 0.7.2 -#

      -class Note(BaseObject): - ## - # Author of note - author = UNICODE_LITERAL('') - ## - # True if the containing column is hidden - col_hidden = 0 - ## - # Column index - colx = 0 - ## - # List of (offset_in_string, font_index) tuples. - # Unlike Sheet.{@link #Sheet.rich_text_runlist_map}, the first offset should always be 0. - rich_text_runlist = None - ## - # True if the containing row is hidden - row_hidden = 0 - ## - # Row index - rowx = 0 - ## - # True if note is always shown - show = 0 - ## - # Text of the note - text = UNICODE_LITERAL('') - -## -#

      Contains the attributes of a hyperlink. -# Hyperlink objects are accessible through Sheet.{@link #Sheet.hyperlink_list} -# and Sheet.{@link #Sheet.hyperlink_map}. -#
      -- New in version 0.7.2 -#

      -class Hyperlink(BaseObject): - ## - # Index of first row - frowx = None - ## - # Index of last row - lrowx = None - ## - # Index of first column - fcolx = None - ## - # Index of last column - lcolx = None - ## - # Type of hyperlink. Unicode string, one of 'url', 'unc', - # 'local file', 'workbook', 'unknown' - type = None - ## - # The URL or file-path, depending in the type. Unicode string, except - # in the rare case of a local but non-existent file with non-ASCII - # characters in the name, in which case only the "8.3" filename is available, - # as a bytes (3.x) or str (2.x) string, with unknown encoding. - url_or_path = None - ## - # Description ... this is displayed in the cell, - # and should be identical to the cell value. Unicode string, or None. It seems - # impossible NOT to have a description created by the Excel UI. - desc = None - ## - # Target frame. Unicode string. Note: I have not seen a case of this. - # It seems impossible to create one in the Excel UI. - target = None - ## - # "Textmark": the piece after the "#" in - # "http://docs.python.org/library#struct_module", or the Sheet1!A1:Z99 - # part when type is "workbook". - textmark = None - ## - # The text of the "quick tip" displayed when the cursor - # hovers over the hyperlink. - quicktip = None - -# === helpers === - -def unpack_RK(rk_str): - flags = BYTES_ORD(rk_str[0]) - if flags & 2: - # There's a SIGNED 30-bit integer in there! - i, = unpack('>= 2 # div by 4 to drop the 2 flag bits - if flags & 1: - return i / 100.0 - return float(i) - else: - # It's the most significant 30 bits of an IEEE 754 64-bit FP number - d, = unpack('Contains the data for one cell.

      -# -#

      WARNING: You don't call this class yourself. You access Cell objects -# via methods of the {@link #Sheet} object(s) that you found in the {@link #Book} object that -# was returned when you called xlrd.open_workbook("myfile.xls").

      -#

      Cell objects have three attributes: ctype is an int, value -# (which depends on ctype) and xf_index. -# If "formatting_info" is not enabled when the workbook is opened, xf_index will be None. -# The following table describes the types of cells and how their values -# are represented in Python.

      -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -#
      Type symbolType numberPython value
      XL_CELL_EMPTY0empty string u''
      XL_CELL_TEXT1a Unicode string
      XL_CELL_NUMBER2float
      XL_CELL_DATE3float
      XL_CELL_BOOLEAN4int; 1 means TRUE, 0 means FALSE
      XL_CELL_ERROR5int representing internal Excel codes; for a text representation, -# refer to the supplied dictionary error_text_from_code
      XL_CELL_BLANK6empty string u''. Note: this type will appear only when -# open_workbook(..., formatting_info=True) is used.
      -#

      - -class Cell(BaseObject): - - __slots__ = ['ctype', 'value', 'xf_index'] - - def __init__(self, ctype, value, xf_index=None): - self.ctype = ctype - self.value = value - self.xf_index = xf_index - - def __repr__(self): - if self.xf_index is None: - return "%s:%r" % (ctype_text[self.ctype], self.value) - else: - return "%s:%r (XF:%r)" % (ctype_text[self.ctype], self.value, self.xf_index) - -## -# There is one and only one instance of an empty cell -- it's a singleton. This is it. -# You may use a test like "acell is empty_cell". -empty_cell = Cell(XL_CELL_EMPTY, '') - -##### =============== Colinfo and Rowinfo ============================== ##### - -## -# Width and default formatting information that applies to one or -# more columns in a sheet. Derived from COLINFO records. -# -#

      Here is the default hierarchy for width, according to the OOo docs: -# -#
      """In BIFF3, if a COLINFO record is missing for a column, -# the width specified in the record DEFCOLWIDTH is used instead. -# -#
      In BIFF4-BIFF7, the width set in this [COLINFO] record is only used, -# if the corresponding bit for this column is cleared in the GCW -# record, otherwise the column width set in the DEFCOLWIDTH record -# is used (the STANDARDWIDTH record is always ignored in this case [see footnote!]). -# -#
      In BIFF8, if a COLINFO record is missing for a column, -# the width specified in the record STANDARDWIDTH is used. -# If this [STANDARDWIDTH] record is also missing, -# the column width of the record DEFCOLWIDTH is used instead.""" -#
      -# -# Footnote: The docs on the GCW record say this: -# """
      -# If a bit is set, the corresponding column uses the width set in the STANDARDWIDTH -# record. If a bit is cleared, the corresponding column uses the width set in the -# COLINFO record for this column. -#
      If a bit is set, and the worksheet does not contain the STANDARDWIDTH record, or if -# the bit is cleared, and the worksheet does not contain the COLINFO record, the DEFCOLWIDTH -# record of the worksheet will be used instead. -#
      """
      -# At the moment (2007-01-17) xlrd is going with the GCW version of the story. -# Reference to the source may be useful: see the computed_column_width(colx) method -# of the Sheet class. -#
      -- New in version 0.6.1 -#

      - -class Colinfo(BaseObject): - ## - # Width of the column in 1/256 of the width of the zero character, - # using default font (first FONT record in the file). - width = 0 - ## - # XF index to be used for formatting empty cells. - xf_index = -1 - ## - # 1 = column is hidden - hidden = 0 - ## - # Value of a 1-bit flag whose purpose is unknown - # but is often seen set to 1 - bit1_flag = 0 - ## - # Outline level of the column, in range(7). - # (0 = no outline) - outline_level = 0 - ## - # 1 = column is collapsed - collapsed = 0 - -_USE_SLOTS = 1 - -## -#

      Height and default formatting information that applies to a row in a sheet. -# Derived from ROW records. -#
      -- New in version 0.6.1

      -# -#

      height: Height of the row, in twips. One twip == 1/20 of a point.

      -# -#

      has_default_height: 0 = Row has custom height; 1 = Row has default height.

      -# -#

      outline_level: Outline level of the row (0 to 7)

      -# -#

      outline_group_starts_ends: 1 = Outline group starts or ends here (depending on where the -# outline buttons are located, see WSBOOL record [TODO ??]), -# and is collapsed

      -# -#

      hidden: 1 = Row is hidden (manually, or by a filter or outline group)

      -# -#

      height_mismatch: 1 = Row height and default font height do not match

      -# -#

      has_default_xf_index: 1 = the xf_index attribute is usable; 0 = ignore it

      -# -#

      xf_index: Index to default XF record for empty cells in this row. -# Don't use this if has_default_xf_index == 0.

      -# -#

      additional_space_above: This flag is set, if the upper border of at least one cell in this row -# or if the lower border of at least one cell in the row above is -# formatted with a thick line style. Thin and medium line styles are not -# taken into account.

      -# -#

      additional_space_below: This flag is set, if the lower border of at least one cell in this row -# or if the upper border of at least one cell in the row below is -# formatted with a medium or thick line style. Thin line styles are not -# taken into account.

      - -class Rowinfo(BaseObject): - - if _USE_SLOTS: - __slots__ = ( - "height", - "has_default_height", - "outline_level", - "outline_group_starts_ends", - "hidden", - "height_mismatch", - "has_default_xf_index", - "xf_index", - "additional_space_above", - "additional_space_below", - ) - - def __init__(self): - self.height = None - self.has_default_height = None - self.outline_level = None - self.outline_group_starts_ends = None - self.hidden = None - self.height_mismatch = None - self.has_default_xf_index = None - self.xf_index = None - self.additional_space_above = None - self.additional_space_below = None - - def __getstate__(self): - return ( - self.height, - self.has_default_height, - self.outline_level, - self.outline_group_starts_ends, - self.hidden, - self.height_mismatch, - self.has_default_xf_index, - self.xf_index, - self.additional_space_above, - self.additional_space_below, - ) - - def __setstate__(self, state): - ( - self.height, - self.has_default_height, - self.outline_level, - self.outline_group_starts_ends, - self.hidden, - self.height_mismatch, - self.has_default_xf_index, - self.xf_index, - self.additional_space_above, - self.additional_space_below, - ) = state diff --git a/webhub/xlrd/sheet.pyc b/webhub/xlrd/sheet.pyc deleted file mode 100644 index 6432c52b20f21f95e84a6a41d55e06aa70bd8bcd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49884 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 diff --git a/webhub/xlrd/timemachine.py b/webhub/xlrd/timemachine.py deleted file mode 100644 index a068db3e..00000000 --- a/webhub/xlrd/timemachine.py +++ /dev/null @@ -1,52 +0,0 @@ -## -#

      Copyright (c) 2006-2012 Stephen John Machin, Lingfo Pty Ltd

      -#

      This module is part of the xlrd package, which is released under a BSD-style licence.

      -## - -# timemachine.py -- adaptation for single codebase. -# Currently supported: 2.6 to 2.7, 3.2+ -# usage: from timemachine import * - -from __future__ import print_function -import sys - -python_version = sys.version_info[:2] # e.g. version 2.6 -> (2, 6) - -if python_version >= (3, 0): - # Python 3 - BYTES_LITERAL = lambda x: x.encode('latin1') - UNICODE_LITERAL = lambda x: x - BYTES_ORD = lambda byte: byte - from io import BytesIO as BYTES_IO - def fprintf(f, fmt, *vargs): - fmt = fmt.replace("%r", "%a") - if fmt.endswith('\n'): - print(fmt[:-1] % vargs, file=f) - else: - print(fmt % vargs, end=' ', file=f) - EXCEL_TEXT_TYPES = (str, bytes, bytearray) # xlwt: isinstance(obj, EXCEL_TEXT_TYPES) - REPR = ascii - xrange = range - unicode = lambda b, enc: b.decode(enc) - ensure_unicode = lambda s: s - unichr = chr -else: - # Python 2 - BYTES_LITERAL = lambda x: x - UNICODE_LITERAL = lambda x: x.decode('latin1') - BYTES_ORD = ord - from cStringIO import StringIO as BYTES_IO - def fprintf(f, fmt, *vargs): - if fmt.endswith('\n'): - print(fmt[:-1] % vargs, file=f) - else: - print(fmt % vargs, end=' ', file=f) - try: - EXCEL_TEXT_TYPES = basestring # xlwt: isinstance(obj, EXCEL_TEXT_TYPES) - except NameError: - EXCEL_TEXT_TYPES = (str, unicode) - REPR = repr - xrange = xrange - # following used only to overcome 2.x ElementTree gimmick which - # returns text as `str` if it's ascii, otherwise `unicode` - ensure_unicode = unicode # used only in xlsx.py diff --git a/webhub/xlrd/timemachine.pyc b/webhub/xlrd/timemachine.pyc deleted file mode 100644 index 7c8a99523b4febc8f2085c5edd01ed22f1d0b88b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2305 zcmbtVUvCpf5T8B&N$l9MlMvcMX(Q3977s*~`iKw^tTs~QptULCUaa%oIzG5NM|cP5xJur4%)V!FyH_OPXdi3f$)hXM8h;@V{5lIV?u z_DZo*h zXzt7nP3~NqEP}Si%V(@DKRgZ*W;lbu{)(IMnYdJoo8arc^60%1jzV7Z-PlLuJaD2i z?Ol3wJE|Z^SDY}}orOr)oa3B!3!#TP>30zLUJk22+Tt(B5z)FNkT^Py6XSr%WRZhx zuY;8XY-`SvAT)A+EY9D>ZsJg#l5oX792tv(aq2{P9@x`-_1KBUv1lIeveF#jNo}i^ zy6Z{g;0MOPa+qTyISeGdW#UFg5*G)=uhGKGaCK;sN#C)eRWk{YZV(Ew_xViV<+%UjDTq7v%5ZB*#+}TdQR5-t}^i$!WOdjBtQ6}D^ zOiG`ZiHM|3_?6&hy$~+S1m)QKtS~f^Uju-y@g&_*Z(!NL5trRTj23nttsj@ zpZJMK4(lXYE{2wkyMvT-b)JUY+}+HY;ZS3w9pIcBn{(G6#@TpUyasbO;q`*= z0QA}GLAO6VIvjNM(<2AKFMEdv$IrW;c<{5>b*!Ir!{N7Ms)0<3zmOar3+TeSvr_En zlexobP=U3<+`+T%$wBvMIOv`XhJ)8Hx_#Lk zSG+M<4#%%qhCopyright © 2005-2008 Stephen John Machin, Lingfo Pty Ltd

      -#

      This module is part of the xlrd package, which is released under a BSD-style licence.

      -# -#

      Provides function(s) for dealing with Microsoft Excel ™ dates.

      -## - -# 2008-10-18 SJM Fix bug in xldate_from_date_tuple (affected some years after 2099) - -# The conversion from days to (year, month, day) starts with -# an integral "julian day number" aka JDN. -# FWIW, JDN 0 corresponds to noon on Monday November 24 in Gregorian year -4713. -# More importantly: -# Noon on Gregorian 1900-03-01 (day 61 in the 1900-based system) is JDN 2415080.0 -# Noon on Gregorian 1904-01-02 (day 1 in the 1904-based system) is JDN 2416482.0 -import datetime - -_JDN_delta = (2415080 - 61, 2416482 - 1) -assert _JDN_delta[1] - _JDN_delta[0] == 1462 - -# Pre-calculate the datetime epochs for efficiency. -epoch_1904 = datetime.datetime(1904, 1, 1) -epoch_1900 = datetime.datetime(1899, 12, 31) -epoch_1900_minus_1 = datetime.datetime(1899, 12, 30) - -class XLDateError(ValueError): pass - -class XLDateNegative(XLDateError): pass -class XLDateAmbiguous(XLDateError): pass -class XLDateTooLarge(XLDateError): pass -class XLDateBadDatemode(XLDateError): pass -class XLDateBadTuple(XLDateError): pass - -_XLDAYS_TOO_LARGE = (2958466, 2958466 - 1462) # This is equivalent to 10000-01-01 - -## -# Convert an Excel number (presumed to represent a date, a datetime or a time) into -# a tuple suitable for feeding to datetime or mx.DateTime constructors. -# @param xldate The Excel number -# @param datemode 0: 1900-based, 1: 1904-based. -#
      WARNING: when using this function to -# interpret the contents of a workbook, you should pass in the Book.datemode -# attribute of that workbook. Whether -# the workbook has ever been anywhere near a Macintosh is irrelevant. -# @return Gregorian (year, month, day, hour, minute, nearest_second). -#
      Special case: if 0.0 <= xldate < 1.0, it is assumed to represent a time; -# (0, 0, 0, hour, minute, second) will be returned. -#
      Note: 1904-01-01 is not regarded as a valid date in the datemode 1 system; its "serial number" -# is zero. -# @throws XLDateNegative xldate < 0.00 -# @throws XLDateAmbiguous The 1900 leap-year problem (datemode == 0 and 1.0 <= xldate < 61.0) -# @throws XLDateTooLarge Gregorian year 10000 or later -# @throws XLDateBadDatemode datemode arg is neither 0 nor 1 -# @throws XLDateError Covers the 4 specific errors - -def xldate_as_tuple(xldate, datemode): - if datemode not in (0, 1): - raise XLDateBadDatemode(datemode) - if xldate == 0.00: - return (0, 0, 0, 0, 0, 0) - if xldate < 0.00: - raise XLDateNegative(xldate) - xldays = int(xldate) - frac = xldate - xldays - seconds = int(round(frac * 86400.0)) - assert 0 <= seconds <= 86400 - if seconds == 86400: - hour = minute = second = 0 - xldays += 1 - else: - # second = seconds % 60; minutes = seconds // 60 - minutes, second = divmod(seconds, 60) - # minute = minutes % 60; hour = minutes // 60 - hour, minute = divmod(minutes, 60) - if xldays >= _XLDAYS_TOO_LARGE[datemode]: - raise XLDateTooLarge(xldate) - - if xldays == 0: - return (0, 0, 0, hour, minute, second) - - if xldays < 61 and datemode == 0: - raise XLDateAmbiguous(xldate) - - jdn = xldays + _JDN_delta[datemode] - yreg = ((((jdn * 4 + 274277) // 146097) * 3 // 4) + jdn + 1363) * 4 + 3 - mp = ((yreg % 1461) // 4) * 535 + 333 - d = ((mp % 16384) // 535) + 1 - # mp /= 16384 - mp >>= 14 - if mp >= 10: - return ((yreg // 1461) - 4715, mp - 9, d, hour, minute, second) - else: - return ((yreg // 1461) - 4716, mp + 3, d, hour, minute, second) - - -## -# Convert an Excel date/time number into a datetime.datetime object. -# -# @param xldate The Excel number -# @param datemode 0: 1900-based, 1: 1904-based. -# -# @return a datetime.datetime() object. -# -def xldate_as_datetime(xldate, datemode): - """Convert an Excel date/time number into a datetime.datetime object.""" - - # Set the epoch based on the 1900/1904 datemode. - if datemode: - epoch = epoch_1904 - else: - if xldate < 60: - epoch = epoch_1900 - else: - # Workaround Excel 1900 leap year bug by adjusting the epoch. - epoch = epoch_1900_minus_1 - - # The integer part of the Excel date stores the number of days since - # the epoch and the fractional part stores the percentage of the day. - days = int(xldate) - fraction = xldate - days - - # Get the the integer and decimal seconds in Excel's millisecond resolution. - seconds = int(round(fraction * 86400000.0)) - seconds, milliseconds = divmod(seconds, 1000) - - return epoch + datetime.timedelta(days, seconds, 0, milliseconds) - - -# === conversions from date/time to xl numbers - -def _leap(y): - if y % 4: return 0 - if y % 100: return 1 - if y % 400: return 0 - return 1 - -_days_in_month = (None, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) - -## -# Convert a date tuple (year, month, day) to an Excel date. -# @param year Gregorian year. -# @param month 1 <= month <= 12 -# @param day 1 <= day <= last day of that (year, month) -# @param datemode 0: 1900-based, 1: 1904-based. -# @throws XLDateAmbiguous The 1900 leap-year problem (datemode == 0 and 1.0 <= xldate < 61.0) -# @throws XLDateBadDatemode datemode arg is neither 0 nor 1 -# @throws XLDateBadTuple (year, month, day) is too early/late or has invalid component(s) -# @throws XLDateError Covers the specific errors - -def xldate_from_date_tuple(date_tuple, datemode): - """Create an excel date from a tuple of (year, month, day)""" - year, month, day = date_tuple - - if datemode not in (0, 1): - raise XLDateBadDatemode(datemode) - - if year == 0 and month == 0 and day == 0: - return 0.00 - - if not (1900 <= year <= 9999): - raise XLDateBadTuple("Invalid year: %r" % ((year, month, day),)) - if not (1 <= month <= 12): - raise XLDateBadTuple("Invalid month: %r" % ((year, month, day),)) - if day < 1 \ - or (day > _days_in_month[month] and not(day == 29 and month == 2 and _leap(year))): - raise XLDateBadTuple("Invalid day: %r" % ((year, month, day),)) - - Yp = year + 4716 - M = month - if M <= 2: - Yp = Yp - 1 - Mp = M + 9 - else: - Mp = M - 3 - jdn = (1461 * Yp // 4) + ((979 * Mp + 16) // 32) + \ - day - 1364 - (((Yp + 184) // 100) * 3 // 4) - xldays = jdn - _JDN_delta[datemode] - if xldays <= 0: - raise XLDateBadTuple("Invalid (year, month, day): %r" % ((year, month, day),)) - if xldays < 61 and datemode == 0: - raise XLDateAmbiguous("Before 1900-03-01: %r" % ((year, month, day),)) - return float(xldays) - -## -# Convert a time tuple (hour, minute, second) to an Excel "date" value (fraction of a day). -# @param hour 0 <= hour < 24 -# @param minute 0 <= minute < 60 -# @param second 0 <= second < 60 -# @throws XLDateBadTuple Out-of-range hour, minute, or second - -def xldate_from_time_tuple(time_tuple): - """Create an excel date from a tuple of (hour, minute, second)""" - hour, minute, second = time_tuple - if 0 <= hour < 24 and 0 <= minute < 60 and 0 <= second < 60: - return ((second / 60.0 + minute) / 60.0 + hour) / 24.0 - raise XLDateBadTuple("Invalid (hour, minute, second): %r" % ((hour, minute, second),)) - -## -# Convert a datetime tuple (year, month, day, hour, minute, second) to an Excel date value. -# For more details, refer to other xldate_from_*_tuple functions. -# @param datetime_tuple (year, month, day, hour, minute, second) -# @param datemode 0: 1900-based, 1: 1904-based. - -def xldate_from_datetime_tuple(datetime_tuple, datemode): - return ( - xldate_from_date_tuple(datetime_tuple[:3], datemode) - + - xldate_from_time_tuple(datetime_tuple[3:]) - ) diff --git a/webhub/xlrd/xldate.pyc b/webhub/xlrd/xldate.pyc deleted file mode 100644 index ef7b265bf950db91e0d6420b0ea479c653f4e611..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5173 zcmcgwO>A3P6+ZXbabm}b)6{?Yq48wW;wf#DG7JM{KuMT_KutzGhY<}UEGO?JeU0rG zz4sC(B9YJ(gjgW4m<_OH$BM;_kXW(-i3JiHSg}HyJz@>tcdmbuFhwm$b@J{z_ndpr z{X6ITuATbFL~iX5Z+~-FdY=irSMkL6jfjVTBW;mw2rr4ZD0_}<8}W^JBQnERMrNws zs2n&Fe^wGl-h)--G1`x@4gQ~`WINSYX2r{iH?GR`MP*)<=rSRGM)u%)Qhp%vMC9T2 zsCWhOM^!sD&|-uueeLu>iy^M|wZ(xJqn7&G@<2N-UZtaXf(k|PYATetdyV>aY-jKNfo;dpxQ#kwsXHhV zs+-MjtK&DDNlq)B&^v0QYFj}iD#aXU`M9+owYtgjcm175M?1^!wj&RPhjH&5p15qx zW-)zdB$>p^&T7-&ZzaL8|Ev>pIdPY6{)cI#(5;52KaB!pJB_u@POyIz9>p(Y9%+pG z(z$sIw__^|AGD(V7qcA*99cX!jVqAtcC5ENh73;p#mppwkzYPHli`M7CR;~`?H4l* zLSrs zBr!A(ngaA}^-P6RN2+HjLSd4U)0B8=DWWa@&(g$$)3l^h2S&ml6C5FQ9dS(jz9eam z4Kvjk__u7GJ{!T4k+V^OW6zP-F-rHQBqQ1~BTpQ8$C0x!wxAN2I8crVdZJr`(#Xug zh(u|Vz|*#rPrHB`rUYNf6p9T7B3k-U>g(m>%DuQCuVllyKACG>lQ2pm>@cnNX z3EqIx0yxt@@R!pP{Q90F0Z}Pv5XC=WQ9*bG8}Jm!Dhj4TKmZO7rcq=mwIL}?4@a#t zg=`hV$4Yg2aoNu0kccs~>n1pQ98h@F^%R!Z;@FRpAnYn%;QSHJ!7-2^Av`pJ4{Hw_ z&8@fIYCc$Vzk1(gZH=CZ{PFi*5jCQv)po~I3AgB!VCoy7IWG`y%BD#=V z{%+XytnyKK6ludw&^=0QA8Xg9RvYUw9(!H&a}xRcNFR~TAyN%9ACkl~&{RS`u(NHp z;$}kJ;i<*

      9K!0-kj5oik;#2zk;>q)JZ7Oqqg{H)W@a_oTTA>$H=DebG?_;o`WL ziXcCPfP9Dw#13ZV9P@$cfsB-&M0#2<(6j?Kpc#On3OvBNv1I1FGeC(E&12ky zQvKvUm&cEhy>I|4x*^fiQfbtAdht5v6?Ttt?zL98cK_X7zg^=|Ehj<8uXT?)JAPC{ zsD!na>Z!iN25Jv?9{an=9Sv}e`NN;RzZQIi@X~m!6F4ndij9<1V>6r&YEis&TT&niEHa5UHlq&K7uS4qy20%YYl z(wEBsZZJ%p9^nNS2=6Cc9JmT*Ms!;CQoP=m2SZ>ZVX$2JOQoPbSN>kRf_|RX)g~13 zFwPptWat$5FD+4>b+8g<7>*cd!A@2tTRWubJQ{IoAfc!F2PJ~Vz|HVLj?JhafWfy7 zbCXv9ZZHl0`S$ur~$rin7Fyd92tzd2yh1sA+QfXMft@JTqH zLiKCi<5oNHYV3Nic0JPXKr!j6Z&7z@`UJZ(|6&3~-;QzAN@BGX3-s#ov8LLeQ4cs) zP-C%$ObLENiRq`*(s%Wr3sBGe<`$PwtowUm#GghX4wx03yS?Bh-jHEg@QKN&@*^7>=w34%2#^?Wc+(Wm&gD?GY z0mp5&aE!_u%skFP50Sr8kR0^tQ^RiJ8wudk))xRCxS+7Zre2X%bnl|>zKTMtni+lW zJs0fHw}@G|yBxE_h5QNDm~$3q$_akOpJ7`31?G>}Zi`-WH|@_Y^Jp>r;pMV4_(kTD zq0WSHX|>s`cXYaPiBzushC|)kt@e@q3CBgv-rzO$?FC$K^*mvhw;Gq2>t1I;oX|_q zX4v&z?#pls-PceZZk0;Ua!npXw>RvsL0@9r#5Yjnk<-^wC4)bw?38i;)jua+&aPzV NvYE_8_Lc0!zX3|Pq9*_V diff --git a/webhub/xlrd/xlsx.py b/webhub/xlrd/xlsx.py deleted file mode 100644 index 53fbb892..00000000 --- a/webhub/xlrd/xlsx.py +++ /dev/null @@ -1,801 +0,0 @@ -## -# Portions copyright (c) 2008-2012 Stephen John Machin, Lingfo Pty Ltd -# This module is part of the xlrd package, which is released under a BSD-style licence. -## - -from __future__ import print_function, unicode_literals - -DEBUG = 0 - -import sys -import re -from .timemachine import * -from .book import Book, Name -from .biffh import error_text_from_code, XLRDError, XL_CELL_BLANK, XL_CELL_TEXT, XL_CELL_BOOLEAN, XL_CELL_ERROR -from .formatting import is_date_format_string, Format, XF -from .sheet import Sheet - -DLF = sys.stdout # Default Log File - -ET = None -ET_has_iterparse = False - -def ensure_elementtree_imported(verbosity, logfile): - global ET, ET_has_iterparse - if ET is not None: - return - if "IronPython" in sys.version: - import xml.etree.ElementTree as ET - #### 2.7.2.1: fails later with - #### NotImplementedError: iterparse is not supported on IronPython. (CP #31923) - else: - try: import xml.etree.cElementTree as ET - except ImportError: - try: import cElementTree as ET - except ImportError: - try: import lxml.etree as ET - except ImportError: - try: import xml.etree.ElementTree as ET - except ImportError: - try: import elementtree.ElementTree as ET - except ImportError: - raise Exception("Failed to import an ElementTree implementation") - if hasattr(ET, 'iterparse'): - _dummy_stream = BYTES_IO(b'') - try: - ET.iterparse(_dummy_stream) - ET_has_iterparse = True - except NotImplementedError: - pass - if verbosity: - etree_version = repr([ - (item, getattr(ET, item)) - for item in ET.__dict__.keys() - if item.lower().replace('_', '') == 'version' - ]) - print(ET.__file__, ET.__name__, etree_version, ET_has_iterparse, file=logfile) - -def split_tag(tag): - pos = tag.rfind('}') + 1 - if pos >= 2: - return tag[:pos], tag[pos:] - return '', tag - -def augment_keys(adict, uri): - # uri must already be enclosed in {} - for x in list(adict.keys()): - adict[uri + x] = adict[x] - -_UPPERCASE_1_REL_INDEX = {} # Used in fast conversion of column names (e.g. "XFD") to indices (16383) -for _x in xrange(26): - _UPPERCASE_1_REL_INDEX["ABCDEFGHIJKLMNOPQRSTUVWXYZ"[_x]] = _x + 1 -for _x in "123456789": - _UPPERCASE_1_REL_INDEX[_x] = 0 -del _x - -def cell_name_to_rowx_colx(cell_name, letter_value=_UPPERCASE_1_REL_INDEX): - # Extract column index from cell name - # A => 0, Z =>25, AA => 26, XFD => 16383 - colx = 0 - charx = -1 - try: - for c in cell_name: - charx += 1 - lv = letter_value[c] - if lv: - colx = colx * 26 + lv - else: # start of row number; can't be '0' - colx = colx - 1 - assert 0 <= colx < X12_MAX_COLS - break - except KeyError: - raise Exception('Unexpected character %r in cell name %r' % (c, cell_name)) - rowx = int(cell_name[charx:]) - 1 - return rowx, colx - -error_code_from_text = {} -for _code, _text in error_text_from_code.items(): - error_code_from_text[_text] = _code - -# === X12 === Excel 2007 .xlsx =============================================== - -U_SSML12 = "{http://schemas.openxmlformats.org/spreadsheetml/2006/main}" -U_ODREL = "{http://schemas.openxmlformats.org/officeDocument/2006/relationships}" -U_PKGREL = "{http://schemas.openxmlformats.org/package/2006/relationships}" -U_CP = "{http://schemas.openxmlformats.org/package/2006/metadata/core-properties}" -U_DC = "{http://purl.org/dc/elements/1.1/}" -U_DCTERMS = "{http://purl.org/dc/terms/}" -XML_SPACE_ATTR = "{http://www.w3.org/XML/1998/namespace}space" -XML_WHITESPACE = "\t\n \r" -X12_MAX_ROWS = 2 ** 20 -X12_MAX_COLS = 2 ** 14 -V_TAG = U_SSML12 + 'v' # cell child: value -F_TAG = U_SSML12 + 'f' # cell child: formula -IS_TAG = U_SSML12 + 'is' # cell child: inline string - -def unescape(s, - subber=re.compile(r'_x[0-9A-Fa-f]{4,4}_', re.UNICODE).sub, - repl=lambda mobj: unichr(int(mobj.group(0)[2:6], 16)), - ): - if "_" in s: - return subber(repl, s) - return s - -def cooked_text(self, elem): - t = elem.text - if t is None: - return '' - if elem.get(XML_SPACE_ATTR) != 'preserve': - t = t.strip(XML_WHITESPACE) - return ensure_unicode(unescape(t)) - -def get_text_from_si_or_is(self, elem, r_tag=U_SSML12+'r', t_tag=U_SSML12 +'t'): - "Returns unescaped unicode" - accum = [] - for child in elem: - # self.dump_elem(child) - tag = child.tag - if tag == t_tag: - t = cooked_text(self, child) - if t: # note: .text attribute can be None - accum.append(t) - elif tag == r_tag: - for tnode in child: - if tnode.tag == t_tag: - t = cooked_text(self, tnode) - if t: - accum.append(t) - return ''.join(accum) - -def map_attributes(amap, elem, obj): - for xml_attr, obj_attr, cnv_func_or_const in amap: - if not xml_attr: - setattr(obj, obj_attr, cnv_func_or_const) - continue - if not obj_attr: continue #### FIX ME #### - raw_value = elem.get(xml_attr) - cooked_value = cnv_func_or_const(raw_value) - setattr(obj, obj_attr, cooked_value) - -def cnv_ST_Xstring(s): - if s is None: return "" - return ensure_unicode(s) - -def cnv_xsd_unsignedInt(s): - if not s: - return None - value = int(s) - assert value >= 0 - return value - -def cnv_xsd_boolean(s): - if not s: - return 0 - if s in ("1", "true", "on"): - return 1 - if s in ("0", "false", "off"): - return 0 - raise ValueError("unexpected xsd:boolean value: %r" % s) - - -_defined_name_attribute_map = ( - ("name", "name", cnv_ST_Xstring, ), - ("comment", "", cnv_ST_Xstring, ), - ("customMenu", "", cnv_ST_Xstring, ), - ("description", "", cnv_ST_Xstring, ), - ("help", "", cnv_ST_Xstring, ), - ("statusBar", "", cnv_ST_Xstring, ), - ("localSheetId", "scope", cnv_xsd_unsignedInt, ), - ("hidden", "hidden", cnv_xsd_boolean, ), - ("function", "func", cnv_xsd_boolean, ), - ("vbProcedure", "vbasic", cnv_xsd_boolean, ), - ("xlm", "macro", cnv_xsd_boolean, ), - ("functionGroupId", "funcgroup", cnv_xsd_unsignedInt, ), - ("shortcutKey", "", cnv_ST_Xstring, ), - ("publishToServer", "", cnv_xsd_boolean, ), - ("workbookParameter", "", cnv_xsd_boolean, ), - ("", "any_err", 0, ), - ("", "any_external", 0, ), - ("", "any_rel", 0, ), - ("", "basic_formula_len", 0, ), - ("", "binary", 0, ), - ("", "builtin", 0, ), - ("", "complex", 0, ), - ("", "evaluated", 0, ), - ("", "excel_sheet_index", 0, ), - ("", "excel_sheet_num", 0, ), - ("", "option_flags", 0, ), - ("", "result", None, ), - ("", "stack", None, ), - ) - -def make_name_access_maps(bk): - name_and_scope_map = {} # (name.lower(), scope): Name_object - name_map = {} # name.lower() : list of Name_objects (sorted in scope order) - num_names = len(bk.name_obj_list) - for namex in xrange(num_names): - nobj = bk.name_obj_list[namex] - name_lcase = nobj.name.lower() - key = (name_lcase, nobj.scope) - if key in name_and_scope_map: - msg = 'Duplicate entry %r in name_and_scope_map' % (key, ) - if 0: - raise XLRDError(msg) - else: - if bk.verbosity: - print(msg, file=bk.logfile) - name_and_scope_map[key] = nobj - if name_lcase in name_map: - name_map[name_lcase].append((nobj.scope, nobj)) - else: - name_map[name_lcase] = [(nobj.scope, nobj)] - for key in name_map.keys(): - alist = name_map[key] - alist.sort() - name_map[key] = [x[1] for x in alist] - bk.name_and_scope_map = name_and_scope_map - bk.name_map = name_map - -class X12General(object): - - def process_stream(self, stream, heading=None): - if self.verbosity >= 2 and heading is not None: - fprintf(self.logfile, "\n=== %s ===\n", heading) - self.tree = ET.parse(stream) - getmethod = self.tag2meth.get - for elem in self.tree.getiterator(): - if self.verbosity >= 3: - self.dump_elem(elem) - meth = getmethod(elem.tag) - if meth: - meth(self, elem) - self.finish_off() - - def finish_off(self): - pass - - def dump_elem(self, elem): - fprintf(self.logfile, - "===\ntag=%r len=%d attrib=%r text=%r tail=%r\n", - split_tag(elem.tag)[1], len(elem), elem.attrib, elem.text, elem.tail) - - def dumpout(self, fmt, *vargs): - text = (12 * ' ' + fmt + '\n') % vargs - self.logfile.write(text) - -class X12Book(X12General): - - def __init__(self, bk, logfile=DLF, verbosity=False): - self.bk = bk - self.logfile = logfile - self.verbosity = verbosity - self.bk.nsheets = 0 - self.bk.props = {} - self.relid2path = {} - self.relid2reltype = {} - self.sheet_targets = [] # indexed by sheetx - self.sheetIds = [] # indexed by sheetx - - core_props_menu = { - U_CP+"lastModifiedBy": ("last_modified_by", cnv_ST_Xstring), - U_DC+"creator": ("creator", cnv_ST_Xstring), - U_DCTERMS+"modified": ("modified", cnv_ST_Xstring), - U_DCTERMS+"created": ("created", cnv_ST_Xstring), - } - - def process_coreprops(self, stream): - if self.verbosity >= 2: - fprintf(self.logfile, "\n=== coreProps ===\n") - self.tree = ET.parse(stream) - getmenu = self.core_props_menu.get - props = {} - for elem in self.tree.getiterator(): - if self.verbosity >= 3: - self.dump_elem(elem) - menu = getmenu(elem.tag) - if menu: - attr, func = menu - value = func(elem.text) - props[attr] = value - self.bk.user_name = props.get('last_modified_by') or props.get('creator') - self.bk.props = props - if self.verbosity >= 2: - fprintf(self.logfile, "props: %r\n", props) - self.finish_off() - - def process_rels(self, stream): - if self.verbosity >= 2: - fprintf(self.logfile, "\n=== Relationships ===\n") - tree = ET.parse(stream) - r_tag = U_PKGREL + 'Relationship' - for elem in tree.findall(r_tag): - rid = elem.get('Id') - target = elem.get('Target') - reltype = elem.get('Type').split('/')[-1] - if self.verbosity >= 2: - self.dumpout('Id=%r Type=%r Target=%r', rid, reltype, target) - self.relid2reltype[rid] = reltype - # self.relid2path[rid] = 'xl/' + target - if target.startswith('/'): - self.relid2path[rid] = target[1:] # drop the / - else: - self.relid2path[rid] = 'xl/' + target - - def do_defined_name(self, elem): - #### UNDER CONSTRUCTION #### - if 0 and self.verbosity >= 3: - self.dump_elem(elem) - nobj = Name() - bk = self.bk - nobj.bk = bk - nobj.name_index = len(bk.name_obj_list) - bk.name_obj_list.append(nobj) - nobj.name = elem.get('name') - nobj.raw_formula = None # compiled bytecode formula -- not in XLSX - nobj.formula_text = cooked_text(self, elem) - map_attributes(_defined_name_attribute_map, elem, nobj) - if nobj.scope is None: - nobj.scope = -1 # global - if nobj.name.startswith("_xlnm."): - nobj.builtin = 1 - if self.verbosity >= 2: - nobj.dump(header='=== Name object ===') - - def do_defined_names(self, elem): - for child in elem: - self.do_defined_name(child) - make_name_access_maps(self.bk) - - def do_sheet(self, elem): - bk = self.bk - sheetx = bk.nsheets - # print elem.attrib - rid = elem.get(U_ODREL + 'id') - sheetId = int(elem.get('sheetId')) - name = unescape(ensure_unicode(elem.get('name'))) - reltype = self.relid2reltype[rid] - target = self.relid2path[rid] - if self.verbosity >= 2: - self.dumpout( - 'sheetx=%d sheetId=%r rid=%r type=%r name=%r', - sheetx, sheetId, rid, reltype, name) - if reltype != 'worksheet': - if self.verbosity >= 2: - self.dumpout('Ignoring sheet of type %r (name=%r)', reltype, name) - return - state = elem.get('state') - visibility_map = { - None: 0, - 'visible': 0, - 'hidden': 1, - 'veryHidden': 2 - } - bk._sheet_visibility.append(visibility_map[state]) - sheet = Sheet(bk, position=None, name=name, number=sheetx) - sheet.utter_max_rows = X12_MAX_ROWS - sheet.utter_max_cols = X12_MAX_COLS - bk._sheet_list.append(sheet) - bk._sheet_names.append(name) - bk.nsheets += 1 - self.sheet_targets.append(target) - self.sheetIds.append(sheetId) - - - def do_workbookpr(self, elem): - datemode = cnv_xsd_boolean(elem.get('date1904')) - if self.verbosity >= 2: - self.dumpout('datemode=%r', datemode) - self.bk.datemode = datemode - - tag2meth = { - 'definedNames': do_defined_names, - 'workbookPr': do_workbookpr, - 'sheet': do_sheet, - } - augment_keys(tag2meth, U_SSML12) - -class X12SST(X12General): - - def __init__(self, bk, logfile=DLF, verbosity=0): - self.bk = bk - self.logfile = logfile - self.verbosity = verbosity - if ET_has_iterparse: - self.process_stream = self.process_stream_iterparse - else: - self.process_stream = self.process_stream_findall - - def process_stream_iterparse(self, stream, heading=None): - if self.verbosity >= 2 and heading is not None: - fprintf(self.logfile, "\n=== %s ===\n", heading) - si_tag = U_SSML12 + 'si' - elemno = -1 - sst = self.bk._sharedstrings - for event, elem in ET.iterparse(stream): - if elem.tag != si_tag: continue - elemno = elemno + 1 - if self.verbosity >= 3: - fprintf(self.logfile, "element #%d\n", elemno) - self.dump_elem(elem) - result = get_text_from_si_or_is(self, elem) - sst.append(result) - elem.clear() # destroy all child elements - if self.verbosity >= 2: - self.dumpout('Entries in SST: %d', len(sst)) - if self.verbosity >= 3: - for x, s in enumerate(sst): - fprintf(self.logfile, "SST x=%d s=%r\n", x, s) - - def process_stream_findall(self, stream, heading=None): - if self.verbosity >= 2 and heading is not None: - fprintf(self.logfile, "\n=== %s ===\n", heading) - self.tree = ET.parse(stream) - si_tag = U_SSML12 + 'si' - elemno = -1 - sst = self.bk._sharedstrings - for elem in self.tree.findall(si_tag): - elemno = elemno + 1 - if self.verbosity >= 3: - fprintf(self.logfile, "element #%d\n", elemno) - self.dump_elem(elem) - result = get_text_from_si_or_is(self, elem) - sst.append(result) - if self.verbosity >= 2: - self.dumpout('Entries in SST: %d', len(sst)) - -class X12Styles(X12General): - - def __init__(self, bk, logfile=DLF, verbosity=0): - self.bk = bk - self.logfile = logfile - self.verbosity = verbosity - self.xf_counts = [0, 0] - self.xf_type = None - self.fmt_is_date = {} - for x in list(range(14, 23)) + list(range(45, 48)): #### hard-coding FIX ME #### - self.fmt_is_date[x] = 1 - # dummy entry for XF 0 in case no Styles section - self.bk._xf_index_to_xl_type_map[0] = 2 - # fill_in_standard_formats(bk) #### pre-integration kludge - - def do_cellstylexfs(self, elem): - self.xf_type = 0 - - def do_cellxfs(self, elem): - self.xf_type = 1 - - def do_numfmt(self, elem): - formatCode = ensure_unicode(elem.get('formatCode')) - numFmtId = int(elem.get('numFmtId')) - is_date = is_date_format_string(self.bk, formatCode) - self.fmt_is_date[numFmtId] = is_date - fmt_obj = Format(numFmtId, is_date + 2, formatCode) - self.bk.format_map[numFmtId] = fmt_obj - if self.verbosity >= 3: - self.dumpout('numFmtId=%d formatCode=%r is_date=%d', numFmtId, formatCode, is_date) - - def do_xf(self, elem): - if self.xf_type != 1: - #### ignoring style XFs for the moment - return - xfx = self.xf_counts[self.xf_type] - self.xf_counts[self.xf_type] = xfx + 1 - xf = XF() - self.bk.xf_list.append(xf) - self.bk.xfcount += 1 - numFmtId = int(elem.get('numFmtId', '0')) - xf.format_key = numFmtId - is_date = self.fmt_is_date.get(numFmtId, 0) - self.bk._xf_index_to_xl_type_map[xfx] = is_date + 2 - if self.verbosity >= 3: - self.dumpout( - 'xfx=%d numFmtId=%d', - xfx, numFmtId, - ) - self.dumpout(repr(self.bk._xf_index_to_xl_type_map)) - - tag2meth = { - 'cellStyleXfs': do_cellstylexfs, - 'cellXfs': do_cellxfs, - 'numFmt': do_numfmt, - 'xf': do_xf, - } - augment_keys(tag2meth, U_SSML12) - -class X12Sheet(X12General): - - def __init__(self, sheet, logfile=DLF, verbosity=0): - self.sheet = sheet - self.logfile = logfile - self.verbosity = verbosity - self.rowx = -1 # We may need to count them. - self.bk = sheet.book - self.sst = self.bk._sharedstrings - self.merged_cells = sheet.merged_cells - self.warned_no_cell_name = 0 - self.warned_no_row_num = 0 - if ET_has_iterparse: - self.process_stream = self.own_process_stream - - def own_process_stream(self, stream, heading=None): - if self.verbosity >= 2 and heading is not None: - fprintf(self.logfile, "\n=== %s ===\n", heading) - getmethod = self.tag2meth.get - row_tag = U_SSML12 + "row" - self_do_row = self.do_row - for event, elem in ET.iterparse(stream): - if elem.tag == row_tag: - self_do_row(elem) - elem.clear() # destroy all child elements (cells) - elif elem.tag == U_SSML12 + "dimension": - self.do_dimension(elem) - elif elem.tag == U_SSML12 + "mergeCell": - self.do_merge_cell(elem) - self.finish_off() - - def process_comments_stream(self, stream): - root = ET.parse(stream).getroot() - author_list = root[0] - assert author_list.tag == U_SSML12 + 'authors' - authors = [elem.text for elem in author_list] - comment_list = root[1] - assert comment_list.tag == U_SSML12 + 'commentList' - cell_note_map = self.sheet.cell_note_map - from .sheet import Note - text_tag = U_SSML12 + 'text' - r_tag = U_SSML12 + 'r' - t_tag = U_SSML12 + 't' - for elem in comment_list.findall(U_SSML12 + 'comment'): - ts = elem.findall('./' + text_tag + '/' + t_tag) - ts += elem.findall('./' + text_tag + '/' + r_tag + '/' + t_tag) - ref = elem.get('ref') - note = Note() - note.author = authors[int(elem.get('authorId'))] - note.rowx, note.colx = coords = cell_name_to_rowx_colx(ref) - note.text = '' - for t in ts: - note.text += cooked_text(self, t) - cell_note_map[coords] = note - - def do_dimension(self, elem): - ref = elem.get('ref') # example: "A1:Z99" or just "A1" - if ref: - # print >> self.logfile, "dimension: ref=%r" % ref - last_cell_ref = ref.split(':')[-1] # example: "Z99" - rowx, colx = cell_name_to_rowx_colx(last_cell_ref) - self.sheet._dimnrows = rowx + 1 - self.sheet._dimncols = colx + 1 - - def do_merge_cell(self, elem): - # The ref attribute should be a cell range like "B1:D5". - ref = elem.get('ref') - if ref: - first_cell_ref, last_cell_ref = ref.split(':') - first_rowx, first_colx = cell_name_to_rowx_colx(first_cell_ref) - last_rowx, last_colx = cell_name_to_rowx_colx(last_cell_ref) - self.merged_cells.append((first_rowx, last_rowx + 1, - first_colx, last_colx + 1)) - - def do_row(self, row_elem): - - def bad_child_tag(child_tag): - raise Exception('cell type %s has unexpected child <%s> at rowx=%r colx=%r' % (cell_type, child_tag, rowx, colx)) - - row_number = row_elem.get('r') - if row_number is None: # Yes, it's optional. - self.rowx += 1 - explicit_row_number = 0 - if self.verbosity and not self.warned_no_row_num: - self.dumpout("no row number; assuming rowx=%d", self.rowx) - self.warned_no_row_num = 1 - else: - self.rowx = int(row_number) - 1 - explicit_row_number = 1 - assert 0 <= self.rowx < X12_MAX_ROWS - rowx = self.rowx - colx = -1 - if self.verbosity >= 3: - self.dumpout(" row_number=%r rowx=%d explicit=%d", - row_number, self.rowx, explicit_row_number) - letter_value = _UPPERCASE_1_REL_INDEX - for cell_elem in row_elem: - cell_name = cell_elem.get('r') - if cell_name is None: # Yes, it's optional. - colx += 1 - if self.verbosity and not self.warned_no_cell_name: - self.dumpout("no cellname; assuming rowx=%d colx=%d", rowx, colx) - self.warned_no_cell_name = 1 - else: - # Extract column index from cell name - # A => 0, Z =>25, AA => 26, XFD => 16383 - colx = 0 - charx = -1 - try: - for c in cell_name: - charx += 1 - if c == '$': - continue - lv = letter_value[c] - if lv: - colx = colx * 26 + lv - else: # start of row number; can't be '0' - colx = colx - 1 - assert 0 <= colx < X12_MAX_COLS - break - except KeyError: - raise Exception('Unexpected character %r in cell name %r' % (c, cell_name)) - if explicit_row_number and cell_name[charx:] != row_number: - raise Exception('cell name %r but row number is %r' % (cell_name, row_number)) - xf_index = int(cell_elem.get('s', '0')) - cell_type = cell_elem.get('t', 'n') - tvalue = None - formula = None - if cell_type == 'n': - # n = number. Most frequent type. - # child contains plain text which can go straight into float() - # OR there's no text in which case it's a BLANK cell - for child in cell_elem: - child_tag = child.tag - if child_tag == V_TAG: - tvalue = child.text - elif child_tag == F_TAG: - formula = cooked_text(self, child) - else: - raise Exception('unexpected tag %r' % child_tag) - if not tvalue: - if self.bk.formatting_info: - self.sheet.put_cell(rowx, colx, XL_CELL_BLANK, '', xf_index) - else: - self.sheet.put_cell(rowx, colx, None, float(tvalue), xf_index) - elif cell_type == "s": - # s = index into shared string table. 2nd most frequent type - # child contains plain text which can go straight into int() - for child in cell_elem: - child_tag = child.tag - if child_tag == V_TAG: - tvalue = child.text - elif child_tag == F_TAG: - # formula not expected here, but gnumeric does it. - formula = child.text - else: - bad_child_tag(child_tag) - if not tvalue: - # - if self.bk.formatting_info: - self.sheet.put_cell(rowx, colx, XL_CELL_BLANK, '', xf_index) - else: - value = self.sst[int(tvalue)] - self.sheet.put_cell(rowx, colx, XL_CELL_TEXT, value, xf_index) - elif cell_type == "str": - # str = string result from formula. - # Should have (formula) child; however in one file, all text cells are str with no formula. - # child can contain escapes - for child in cell_elem: - child_tag = child.tag - if child_tag == V_TAG: - tvalue = cooked_text(self, child) - elif child_tag == F_TAG: - formula = cooked_text(self, child) - else: - bad_child_tag(child_tag) - # assert tvalue is not None and formula is not None - # Yuk. Fails with file created by gnumeric -- no tvalue! - self.sheet.put_cell(rowx, colx, XL_CELL_TEXT, tvalue, xf_index) - elif cell_type == "b": - # b = boolean - # child contains "0" or "1" - # Maybe the data should be converted with cnv_xsd_boolean; - # ECMA standard is silent; Excel 2007 writes 0 or 1 - for child in cell_elem: - child_tag = child.tag - if child_tag == V_TAG: - tvalue = child.text - elif child_tag == F_TAG: - formula = cooked_text(self, child) - else: - bad_child_tag(child_tag) - self.sheet.put_cell(rowx, colx, XL_CELL_BOOLEAN, int(tvalue), xf_index) - elif cell_type == "e": - # e = error - # child contains e.g. "#REF!" - for child in cell_elem: - child_tag = child.tag - if child_tag == V_TAG: - tvalue = child.text - elif child_tag == F_TAG: - formula = cooked_text(self, child) - else: - bad_child_tag(child_tag) - value = error_code_from_text[tvalue] - self.sheet.put_cell(rowx, colx, XL_CELL_ERROR, value, xf_index) - elif cell_type == "inlineStr": - # Not expected in files produced by Excel. - # Only possible child is . - # It's a way of allowing 3rd party s/w to write text (including rich text) cells - # without having to build a shared string table - for child in cell_elem: - child_tag = child.tag - if child_tag == IS_TAG: - tvalue = get_text_from_si_or_is(self, child) - else: - bad_child_tag(child_tag) - assert tvalue is not None - self.sheet.put_cell(rowx, colx, XL_CELL_TEXT, tvalue, xf_index) - else: - raise Exception("Unknown cell type %r in rowx=%d colx=%d" % (cell_type, rowx, colx)) - - tag2meth = { - 'row': do_row, - } - augment_keys(tag2meth, U_SSML12) - -def open_workbook_2007_xml( - zf, - component_names, - logfile=sys.stdout, - verbosity=0, - use_mmap=0, - formatting_info=0, - on_demand=0, - ragged_rows=0, - ): - ensure_elementtree_imported(verbosity, logfile) - bk = Book() - bk.logfile = logfile - bk.verbosity = verbosity - bk.formatting_info = formatting_info - if formatting_info: - raise NotImplementedError("formatting_info=True not yet implemented") - bk.use_mmap = False #### Not supported initially - bk.on_demand = on_demand - if on_demand: - if verbosity: - print("WARNING *** on_demand=True not yet implemented; falling back to False", file=bk.logfile) - bk.on_demand = False - bk.ragged_rows = ragged_rows - - x12book = X12Book(bk, logfile, verbosity) - zflo = zf.open('xl/_rels/workbook.xml.rels') - x12book.process_rels(zflo) - del zflo - zflo = zf.open('xl/workbook.xml') - x12book.process_stream(zflo, 'Workbook') - del zflo - props_name = 'docProps/core.xml' - if props_name in component_names: - zflo = zf.open(props_name) - x12book.process_coreprops(zflo) - - x12sty = X12Styles(bk, logfile, verbosity) - if 'xl/styles.xml' in component_names: - zflo = zf.open('xl/styles.xml') - x12sty.process_stream(zflo, 'styles') - del zflo - else: - # seen in MS sample file MergedCells.xlsx - pass - - sst_fname = 'xl/sharedStrings.xml' - x12sst = X12SST(bk, logfile, verbosity) - if sst_fname in component_names: - zflo = zf.open(sst_fname) - x12sst.process_stream(zflo, 'SST') - del zflo - - for sheetx in range(bk.nsheets): - fname = x12book.sheet_targets[sheetx] - zflo = zf.open(fname) - sheet = bk._sheet_list[sheetx] - x12sheet = X12Sheet(sheet, logfile, verbosity) - heading = "Sheet %r (sheetx=%d) from %r" % (sheet.name, sheetx, fname) - x12sheet.process_stream(zflo, heading) - del zflo - comments_fname = 'xl/comments%d.xml' % (sheetx + 1) - if comments_fname in component_names: - comments_stream = zf.open(comments_fname) - x12sheet.process_comments_stream(comments_stream) - del comments_stream - - sheet.tidy_dimensions() - - return bk From a961c375a2c9f5318b2928afa3a1f546850b84ef Mon Sep 17 00:00:00 2001 From: Irish Medina Date: Wed, 22 Jul 2015 01:27:43 -0500 Subject: [PATCH 03/55] Added update schema guide --- docs/Update Schema Guide.md | 84 +++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 docs/Update Schema Guide.md diff --git a/docs/Update Schema Guide.md b/docs/Update Schema Guide.md new file mode 100644 index 00000000..660b4001 --- /dev/null +++ b/docs/Update Schema Guide.md @@ -0,0 +1,84 @@ +# Update Schema Guide + +All commands are to be run on the machine where the application has been installed. + +If you installed the application on a VM, start up the VM and run the following commands on the VM. + +**Warning**: The instructions below will drop the current `webapp` database and all information stored in this database will be lost. + +## Login to PostgreSQL Client + + psql -U myuser -d postgres -h localhost -W + +You will be prompted to enter a password. If you followed **Installation Guide.md** to install the application, the default password is `mypassword`. + +You can list PostgreSQL databases by running the following command: + + \l + +We will be dropping the `webapp` database. + +## Drop Database + +Drop the `webapp` database by running the following command: + + drop database webapp; + +If you list PostreSQL databases again, you should **not** see the `webapp` database in this list. + + \l + +Exit the PostgreSQL client by running the following command: + + \q + +## Create `webapp` Database + +Create a database called `webapp` by running the following command: + + createdb -U myuser webapp + +You will be prompted to enter a password. If you followed **Installation Guide.md** to install the application, the default password is `mypassword`. + +## Generate Database Tables + +Change directory to where `manage.py` is located. + +Then run the following command to create database tables that correspond to the Django models of the project: + + python manage.py syncdb + +After running the syncdb command, you should get the following prompt. Type in `yes`: + + You just installed Djano's auth system, which means you don't have any superusers defined. + Would you like to create one now? (yes/no): yes + +Create a superuser with the following credentials (for now): + + Username: admin + Email: your email + Password: mypassword + +## Verify Creation of Database Tables + +Check that the tables were created by starting the PostgreSQL client: + + psql -U myuser -d webapp -h localhost -W + +You can view database tables by running the following command: + + \dt + +Make sure to exit the PostgreSQL client before proceeding to the next steps: + + \q + +**You have now updated the database schema!** + +For additional instructions on starting the development server and trying out the application on your browser, please refer to the instructions in **Installation Guide.md** + +## Upgrading to Django 1.7 or above + +Django 1.7 introduced built-in database migration support. After this project has been ported to Django 1.7 or above, the built-in migration tool can be used instead. + +[https://docs.djangoproject.com/en/dev/releases/1.7/#schema-migrations](https://docs.djangoproject.com/en/dev/releases/1.7/#schema-migrations) From 182b783b07250ab8610ad0f8ad21965a71b7bf46 Mon Sep 17 00:00:00 2001 From: Irish Medina Date: Wed, 22 Jul 2015 22:41:31 -0500 Subject: [PATCH 04/55] Moved malaria api code to its own Django app --- infohub/settings.py | 1 + malaria/views.py | 12 ------------ malaria_api/__init__.py | 0 malaria_api/admin.py | 3 +++ malaria_api/models.py | 3 +++ {malaria => malaria_api}/serializers.py | 0 {malaria => malaria_api}/tests.py | 2 +- malaria_api/views.py | 13 +++++++++++++ webhub/urls.py | 4 ++-- 9 files changed, 23 insertions(+), 15 deletions(-) create mode 100644 malaria_api/__init__.py create mode 100644 malaria_api/admin.py create mode 100644 malaria_api/models.py rename {malaria => malaria_api}/serializers.py (100%) rename {malaria => malaria_api}/tests.py (99%) create mode 100644 malaria_api/views.py diff --git a/infohub/settings.py b/infohub/settings.py index 26d28508..77152166 100644 --- a/infohub/settings.py +++ b/infohub/settings.py @@ -30,6 +30,7 @@ 'rest_framework_swagger', 'infohub', 'malaria', + 'malaria_api', 'peacetrack', 'webhub', ) diff --git a/malaria/views.py b/malaria/views.py index 4e1888bb..6647b211 100644 --- a/malaria/views.py +++ b/malaria/views.py @@ -1,10 +1,8 @@ from django.shortcuts import render from django.http import Http404, HttpResponseRedirect from django.core.urlresolvers import reverse -from rest_framework import viewsets from malaria.forms import PostForm from malaria.models import Post, RevPost -from malaria.serializers import PostSerializer from malaria.services import delete_post_by_id, get_post_by_id, get_revpost_of_owner from webhub.checker import check @@ -142,13 +140,3 @@ def delete_post(request, post_id): return render(request, 'malaria/delete_post.html', {'post_id': post_id}) - - -class PostViewSet(viewsets.ReadOnlyModelViewSet): - """ - Post endpoint that provides `list` and `detail` actions - `list` action returns a list of all Posts - `detail` action returns a particular Post instance based on id - """ - queryset = Post.objects.all() - serializer_class = PostSerializer diff --git a/malaria_api/__init__.py b/malaria_api/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/malaria_api/admin.py b/malaria_api/admin.py new file mode 100644 index 00000000..8c38f3f3 --- /dev/null +++ b/malaria_api/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/malaria_api/models.py b/malaria_api/models.py new file mode 100644 index 00000000..71a83623 --- /dev/null +++ b/malaria_api/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/malaria/serializers.py b/malaria_api/serializers.py similarity index 100% rename from malaria/serializers.py rename to malaria_api/serializers.py diff --git a/malaria/tests.py b/malaria_api/tests.py similarity index 99% rename from malaria/tests.py rename to malaria_api/tests.py index f869bbef..66b429a8 100644 --- a/malaria/tests.py +++ b/malaria_api/tests.py @@ -7,7 +7,7 @@ from rest_framework.renderers import JSONRenderer from rest_framework.test import APITestCase from malaria.models import Post -from malaria.serializers import PostSerializer +from malaria_api.serializers import PostSerializer from webhub.models import Pcuser diff --git a/malaria_api/views.py b/malaria_api/views.py new file mode 100644 index 00000000..affa1ac8 --- /dev/null +++ b/malaria_api/views.py @@ -0,0 +1,13 @@ +from rest_framework import viewsets +from malaria.models import Post +from malaria_api.serializers import PostSerializer + + +class PostViewSet(viewsets.ReadOnlyModelViewSet): + """ + Post endpoint that provides `list` and `detail` actions + `list` action returns a list of all Posts + `detail` action returns a particular Post instance based on id + """ + queryset = Post.objects.all() + serializer_class = PostSerializer diff --git a/webhub/urls.py b/webhub/urls.py index 6d347658..81a85716 100644 --- a/webhub/urls.py +++ b/webhub/urls.py @@ -1,12 +1,12 @@ from django.conf.urls import patterns, url, include from rest_framework import routers -from malaria import views as malaria_views +from malaria_api import views as malaria_api_views from peacetrack import views as peacetrack_views from webhub import views router = routers.DefaultRouter() router.register(r'users', views.UserViewSet) -router.register(r'posts', malaria_views.PostViewSet) +router.register(r'posts', malaria_api_views.PostViewSet) router.register(r'regions', peacetrack_views.RegionViewSet) router.register(r'sectors', peacetrack_views.SectorViewSet) router.register(r'ptposts', peacetrack_views.PTPostViewSet) From 4be3e2dd27c821fc158b81b927e946e48fa0f044 Mon Sep 17 00:00:00 2001 From: Irish Medina Date: Sun, 26 Jul 2015 01:04:56 -0500 Subject: [PATCH 05/55] Updated templates to use bootstrap components --- infohub/static/infohub/css/text-color.css | 3 + infohub/templates/infohub/base.html | 1 + malaria/templates/malaria/create_post.html | 6 +- malaria/templates/malaria/delete_post.html | 14 +-- malaria/templates/malaria/edit_post.html | 7 +- malaria/templates/malaria/list_posts.html | 66 ++++++------- malaria/templates/malaria/notice.html | 13 --- malaria/templates/malaria/view_post.html | 110 +++++++++++++-------- malaria/views.py | 73 +++++++------- 9 files changed, 147 insertions(+), 146 deletions(-) create mode 100644 infohub/static/infohub/css/text-color.css delete mode 100644 malaria/templates/malaria/notice.html diff --git a/infohub/static/infohub/css/text-color.css b/infohub/static/infohub/css/text-color.css new file mode 100644 index 00000000..700b6247 --- /dev/null +++ b/infohub/static/infohub/css/text-color.css @@ -0,0 +1,3 @@ +.inverted-font { + color: white +} diff --git a/infohub/templates/infohub/base.html b/infohub/templates/infohub/base.html index 94e21a7d..1ee57ee8 100644 --- a/infohub/templates/infohub/base.html +++ b/infohub/templates/infohub/base.html @@ -4,6 +4,7 @@ +

      Cr;|9d>kdf7#@j@HnV>BU26AVF5#_ybnf%T{%~4PN!n z_;bDQ>XCPE9Oe1KPo_A{zV7Y8AB&ZTRYGmzG&}SLb)KM+!$}cj?$yQz5)%4Sbp(r2 zZn|@|4D&#`ti@C~MnE(?rmJf}e`3QMzntoxiqbdg*V_`XT|NtUZkSm zWC+`2Fr6erij^J>Ap3e7n?+KFn{3aZ#`mAk*wi3|ZIPYaAt5vRF*u=%y{5TnvmgkU zzG+5XcLqUY89#-*o%ytvlWF1dy+G42T(jVS>FSDghQ|wg%Nkk!v+}$wxE#k(Ni);d z+S5^i(0bNbs;1cY#aY#C(n`Zy8mOWuMkV* zinVpGsrBANnHDYvW7<9D+p?*0%W6D~OKD_GjM;cZh~Z5eeNO6}+BNmw_4D+B zNK&QRNkIqBCXFycB^tk_p_d3g!mO2N79#%TGG?*Z{_MMVR88-wB*ke|u4B(Z25ym* zP8QWV)CSo$!{H3XXfawn*uLUi-G9Ty0x|I)`A(zMjz4bpr`{^J0yU(OnVMYs<0s#c z%2oLkhxueE=sjuhaU5o8xjf`6lWx<2 zlq2*$Aamnri)KmNVK$GLtn`p-%R{2YOq9x;h7wf;oq>Q4g$*R_VAMOSR?AFH+4}R!r~b{st=3#3#0Y)4WFC{ zsCr8>%US^Q3@_lfSFO% zjAPp4h$Wx-+E?d*plnI|4k*BJ>h;Ct{$y$ zDJ`ARHoPi~dsMD3c!@>4%bfSmy1((Pi}9~ruBAot7HH@;*cVuj8^h)={DBje%yX4m zd3luoCPc*^Z6t&x%@}H$zhU^#l_YCO{!{H;9W!EN-MM4GV$>GE!?(E?iTxo1ZKnJZ zXLPJZs|60NpMShC@d)oB)H^YrZ^lS%CjGiw-q8p^3-r1 z{G@U?Z*H8)vkT42vld1U8PuJ3;2^Ev)I4L3BOhYrSrlj#;@@U8Q?Ipo7>o9~vvq1r zVci3MuPWA@vq>|Q(4Iga+at2eH4J>)fk4R?B`=%HJd(ZLry0s!RGWKOQD_i9F@f8g zI5QAx#z4>hU9o8ZI!?7&P^ipDk%?_K6a0MPj|~ph)8-%A{cxY_5_nhT@gfMp@i}F) zXx52u&b_*ZO&H?_XkhfcU`WM*QxDZUyUA##p_D?HEf#>eow#^z9Pm}9FMT)Cx^^iZI6iMxXE*H95&T5vl=5b?thoGy6V8B^{*4CkO=0ORk5i1-Sc z-Q`w+l;`yzg(MX@qM~KNJNJq8?&ml?o#o8bXtn`87l>RqzHoc$3nigJg4``yI zG*OjMRdr3G8)lbeP*OQ12+Bdy@Zd#hP{DIe&?swgd?=Cc^I;gX_+yr&%0&2-ATKeC zbba$wu6?X*(KRPNtDQoov={u!uMwT$D0j#uHsMn=^e31!_U6o~d9Gmm8=FruD1SOu za}sjgsfu$+_bz7>r6-%Abx{}a1-?LJPH0^-SI#&G(w1LqpQ|RCp4M{DF9tqL(uU|1 zU*MuaJ}xU^{0B@z_HMi8XHOXjuseR4@{t%H8T9-9FM9JIHAVD2q7)5yuMq7N5Ua;P z*@sVipM-qCFi2;rx>nESbM)NB6@=+7Wk?IG{A6=3RRW#h+<>_3)k;=Sn`4nao>eZY ziJKjt&yLmQnCS8Q=Kti7ed_;V-{)(Grjj$Fc{?-PWNmBU{$}qjr7G)?{NQ1$&c@31 z1QofXzaUxlzkAQqLlh^Cb-u5S!K@$J@y2JWtl>rx*4 zmv^%9#Xaw>&sQTsVwe`6=ScpmmN!{-@favByoq4_xWBZqzrEqPvuotW-wG-&)ybX)V~ z;et=P4R+2}V$Q=~UlN_w;cjE7j`L7LJ}}v?!wkSLd{zayT-oqG(1GXw<>f(9Vr3Kp zpm;skp@u2fVB?=eN?jiEF=r|XH2on7P?*rr6St|sq8wR0I6%8S4$Rs^SDO&cH)&;{ zxO|B4@A4)OLuO9tVs-FO-i7|fI|iDK7ucf#a*4O)wu;R2j_a0>e`&c}SsU{RoE zN)C%hgj_N{cb4ZANb&eV7I=)5kqj_H6Qql1D#@^S{p1-ZGzpSX<#(NT861mbI=xO2Nbc|qgH+G5vs2CiD$mU@aimY?!>!{iT;eS!^Kwl;+8 z$}>GjH_hgbp+H^q`%kM@o;|(&U`b$Z00fhU*Xy@@3H;8o;1VbTf4TLUykMLaJa^}} z(HT5n?h`{G=b3=ME`_Xo`pAM;G@BcUbgw{&PK|FIPBA>?VYGHaV zAD_qblm@EL6o@iQH_bkKIV>Nz0cEx!s(l>d$Zw{;<2uE0KADGlnVAEUKR~}N&&-Ll z*fNOz9Cl30QTO1$2>npCw&u8uyF&@ zqVr#AA*JV2c>Q@XqWCyE!Y&YqwcexB#pUb4T*DxeQ6)w){#BA;C-A+X7wT!;nW!!(YiVrqOhXv)ri7UTR= zu3oA7*G3^W!UwS|*70>mq(C<@b?P6(;wu|!I#&jQmqC3woRqxLi)0)jGG3M55;=ZE zZk*b|bbMLVGgU3rI(ymNlfbYrb*4w&CPgz>e^*zt;b*b^lLM%3s~!~PxyM)j^>?72 z2#dx;lywZFQyIpsW;bT6XOwBYln@*t>fklC%@LRyMYmtXm z8^`IZf71sYEPj3>?#n*oPvK;7=EOQsi?Ws?K<67kr|=M+gBpIeE`q##Zet{)3gJR=)6`1wVa z`7|*}zS^!!rnP_IuIIre97%}X2LrUX(St#@ZAos39~4vSpQG%95-}W==HY!KH!S;c z(KoS5v>(I_Af9|VymY5=BD;u3sO`a0HRqgrm#qa?O_yBQjlcw1)${x;$Nk@l^NVJ- zH#eUH$zCn%SYWi!m30wpcCHCCFO6sRiUukHq0ejl9op zkU@6xB;N13uPCNrk!M1UhRL?UE- zRsV&IvFvT3SmjY3J?ULnG(~`~*M(~8N7O(rUZvjqw_*|g;2Ee14=));ITRJ%}A+0v{) zlNQe_j|n)fFW~wMMV4+0Gc(t30cX!*X)RCk*@?J2Y1N@zgupj%|M#21#`b=toE>M0 zEtvGial0+=sbJ9f)1;`a)h}Ebmig%KD;a)vL3^5G9m+H&Y;xXDQk|xlbzy%3UE*0> zR+n~-In$=uQ^wE8Xy#+9V`PrSS@MeqyZ&oGYBZcInbhC?O)RRPvco-2|0E>9^3(7? zUcvQ;>;1!I0tpxb(4XmS}#zKQzA1cW&J&OQ_<$z+h`-IoQboac*t*HQ3pxXr4^V z$??S}WLPS$%u*%WLFt}c(taH#QZ(7x^|jTdIhJ7IOUc=Dk$$a^v_xxln}dLzf91KY z4cEOGz>SmZ4aS3X{3NlyOz!VawL-H;elf57W$LX_i40fc*`QDC$i^KDPRUg zW@ZxGi#9Q04n*wdHNBy_cINf5gDANC)>97s?>^$-7|Xiz;`#R3v~>|abQdWXu?Q;* zvNabIb(J^7;Az|T!v;J2THKY-3s;KX<&Lfp=%OpP?@H}&AB@{fdhTqu?eB8#=Y56r zMek=VC%F$Ja4hTnBOTs%)K?YhHy5-=P|uRk6qIN(MRZ+?%GO{VZ~r=Sd)^^*D58IA z^Oy|1t?h`bjeW6Qf$F-=k%Oivh?$$0pWUARA+9p8OtD++&sXwqL_AC#_}1zCn0!581b5w z(QnOUI9bqLt49i>gqH;l+iPgnG31+Jbltb?WS-SMv}7rMNn>7+Ld!br5=g3v-AmBu zZ06^rq?83&g}b-Rx7r0|H3=Kl_qH(iF4$VQdr#4=%AX|vbeJQ9H9>!`dHtFhNDgh= zmcpY7-*DZI0FVQq1;EM!zAgBU(m(sK^uCO)mI}&xLbO7k?I}IBY+a-aGO)gxt?yO}d1AOcxdzc2bj5<9(sl1&M~EzrmXSUA)9}mFHl} zK!QS=|8#++>~pE2qKu1GzsjYyuA{hu3-$*OHyKUikX!i?s*xX zwMN(P^rQuu?n>9Dm=cU9CY5x`E*6VTG2KzMjn?=mY1p>7!cS1qL>8BdGzfNHA|%ja zZAAs!%;IFlRL<$CU(gG^N-v|i0M1Z`4&HajZGpm9Q}j4fD+qec1LfiknY;dNb8XMl z+H$fapMy78c|Hj6eiUd-XMavgyi=!%hI1HqJv2lL3kjL)N2S+mwuRJ_Q$8mp%a!BG zm5XV5f9mrw*0JYCk2}^oyS2O5Yup!ZO&>OuNX_juI)oBe>6LLv*M1 zN7|kzgNd_IdF|V$9R`G`usKZ`b(+E+J{~U6oQab~Cf`HyTod5oIwChn?GW)O(`b~B zUkW7}-s92finEHyL+A~vB0#r_ntqBgY>Lr2lQk|Gbz99PXgv#bRtz`V$14a=BZ_Jg zYu+R$M<*wPhG2=Lb82*4oZg2v+m+GV9Rkg*Gj6Wp*fKF$s)n+f@xm^{KID;Ja>^G0 zxwHPP3({GR7?#F6?Jlp~9imZlB{qTM!I<>+hy@t9PJDqSVwSw|v1#;@j1h+ITaGM} zSkMR|1FfDo?GnOK0eWZTNARBcy3-)B&j#lV5AIduSSX%vnT1Xr8GReflTH21%SP43 zz*sMo;f5GRbi7fPv;dVH#^w@)aMi?fJ*UyuPT70**=OaXF+sdn;uz@U-0=pq5m$-R z1NVc3>fE{neKV3tz@F23wD664V~p4*%p}02niu*{XN1~1KPlvS{U7)#atj3vE(`X$ zbitLiKo~iTj;53`h1$H;bV>_Ta3cK=tDME_XK9olzz0Rcn`~ER?L!tutU(8@DS$%d zpiOwtcoLUY1r>k=*B{#k&u$FL)6RMfT0hDU9<)kqti0dA!eGt!LZ*M}M*vBQ3IBHi z@Ji!jDt`*%OWcE_Y`xaV+U1fUw?^3iMIqg`2=h$OrGYd+ZrCRMg8RU!ZqkfFhr7KG zt{dG#Gr{TwY#V>LT3zCu;o_Z{?<~eD=|JKlvg5Qq{J@aLU{PD2tvd8zUwr0vHM5+) zl-=_(JWI9eudwRhxO$)8cI`SWOUo++yTrWl71`|a5E2OPG~oG8ML)#=N}63Vg#tLl z$$LF#DFXU1waadzdtagMG@{cPWo-)UsRV`GpRi$53}Mq`{4+M-;)9BZc$0a7fnY34 zgt?GP9Dv~CZRg|t!FrX4hI-kJ7;oa^n|2qewr~YVaMgmS(!+HUGB+=hG6Y>2Vs2)- zlkw_z%sGITVb+%AdWu9Rx2arKRP?>S7o*bVKUhp+njJIx5VDl_6ouTl)!%YQ@4YGg>MQds*Q>P7#N4$Gv-}tj1yH{msoy8WMIVG!Ycx4Rl zdA&GG^*lh~dBDvG>hGuWTXvzbs0b;_dl7@asmRC$veg^69_Ka<$b{KI9NasLZsmEA z^vQa?06koEy7v9;(v!zNWyFJ9vBc{e;BtK|jb`h^$N3!Y3x)h5^f}4&It)ga2S867Xo4J9i5zpt2h3>_ zV1SA}KFRQJt@IybJne(UIWRdU;MEnZpn1WAGycJIe_rUTshcC`2@fXUniHEWH!Nb+ z#6vhsTH2}QV9b`|L#K^3zuu#TiD{XTh5nNnmyl7(4%xc` z^wD+4e`_aDHH8EH5Ue2C-AJ_q(*ceR6U#jdN+B&{yPCuPs0jkNRd6b z*~C>8@*p#p^ydY-{B2b4UmA0HQ{nQubpGXA&uswTJeD+&IsaY3HjOKf>*bfmAg$uM zo2B4;;PQYLFy*IhYtUX;dlN~m!aqR0Tv%Ssku8){Dwa^;aX?&l-S&)d{&wJ&h@%k- zP5~kTeq-boCuUH=vfC2~dX29*{zjtf_=3C}Z+_n|3kD&We;)G#o0w>H=ue=mk57E=tRrtrhDHBga5B@CJT(gHuxfLe=!=N6xLSsJ0gZ9-=7oF@lc-p@&gW=|2 z+s0z@+`@(Qh2^^+VM4;wf_dO(_)&+!pWYnw{B-{HJs6sCB0W}ud7!k>w4^>=kHc=>f`77QJoOn)YD+{vhp!ntw5 zTVNUt96lgM06$56v*$pWUJhBb(^d;f>?pEYy!Y;=Nup#y@8JXap> zBZ?f4T*SdfZCR&l?g0n(ZS8X|3MBX?T?$;pu!T4%^43;$vgD|L3G0}%jC{Y#AWPG< zSOh2cU`-D(3Sc_(+aY%rFPyl2)$&6RyUYySl0OM^>xFfP0Sp0R8zW7c!U+E4zdjFQ z8}0+sQi8Kf?bO!XAS~9k8x~vv;$z19m-vAFtMGGEFPBUlKTT55(8=cCu5N4&p@auql^IW9Lj zQ@5kQnG*dQm}cVOEr7mAN}9`1YzAv>Jv?xzou&KxvunWdpj)WhFp}Go@B7Aslmo;; zq}y&QX`CbZ7~LXzca6)#5ESE=oWDDlTQlW>;jo~Xlj>A)hf`b=dXXRLp^cc-rs(!N z?NHVRf*4X8in|%N;^De6hB^TbOpY!u9|dVDm^mZ%4tSq|VKR{B8!Wh$bI-L|U(}>s`!dAROer)_)b5Zv zR1l_fHItF&Dh>VF zpM^lO;h1iWZ*Hn%G{QEtbSgkeG-6Uh#h8spSdhp?HhZI9Ms;qpWR<$p{%H+1bW_C3`myJwh3cS*!G3{A0#dSCIn!F7 zzVSBH(gxEZc+gVLgRD`OW>%S!{kdHYR3gLZOm1*0$^W65>t>0enl^R;yQx~Ywa42S z{;sE}H1!Bstry8C;`g++g&4`iQ6F!ILPe~`xTxWrSLw@IhH({~FBIMB^Q<;{2l=O2r=Y-N?Mp*I*x40VGIY-Aq5y06ukNmUgDoJqJuf z#WjGlG988**CWN@y+;kKo)tXRH_&_f6LlhyP4EAlwTV8?>O9KwLIhqU$^ZZ18IO2o zrL?Fa>$fmAtpt#)GYNs(_iw&7ml|i09DLKYD0>HOAq?3OUB9lzo<;q`-(FPr?O!;G za^S1njgADgvZ{Z^LroUETJgJ6laFvcH8hSOemSAqE~MHHNun!ff3!o#xI^gxhYgKE z|J~jx>;7hW-V<3g0I_ap+st zH;*&jq?x^I^Hg(Lt3^4uT-M7dt|BYBIZGJj-YcVjGyu*zw##d`40BQ(($x!RD7SK^ z`va8SEM(jcd0lEmrUVblbT9~r<0=;w%%c6h${zr?@`*I4+HS^tJwQ9~iae%CWo|0- zH=yt}pM#!WcBKdVA&GIpvmV;vz-R1H;eh(a*FcOt~NTjKp zDcr{t{+mdW(wni%NV`XHYyAZ#p8Egu$#5A0X39aPRAyTf^D%5kgZ0_9YYT0K?MYfk zcdE1j3n#Q94Ww5g9%hUIaEvxKt2TCrW33L^|2}ZgePCa2xL-r)z;-WNukC(d2|1iH3TwM+Vkg$u1EV2d?b z{gMAavhR(cd&_O?Ej`ZhZgcT&&#R9hpS?Az@;18N3ZY$vR z-nTd$PI+!Igm01YZ`*v>NULbTt9sfC{V-V88+G_4OUve2o8QZAsCds@qwg}RLf~8; z;I)24g6%VHfbEZE^`DLYw6s$Q;&RF%rrO`K{72T&o+wcIhXh796GiwyBPO)8Cz!H_ zAN1hFZh&|n2o4Af#7YKe%L!WWSeF*C&r3vI15&8^$;iZI>$}m5*)NR`RzW@v7u^G5 zSYFiQ@;p&GIq)Ho@_$t5*Jq_>gcjt!2jf5n!&WT8Dr*n)4rj_*;LtWZ34s_DDqb zkk*G43~8CsioR623?XyA{?1Pk6>F;eiwwUp+QmS@rHwci@vX8*PK!R54>DNH;u&&p zlWc;-vlq{HyXsPz>^6cuKS6}|`*IK_Dha6m+HE-%*Y~D=J4_taLG~`q=mn;g05LV` zp7rNkv0dH0kGT#9*AC9E9E?825bM;EdGiGXHICY%#4j6Cxu(ko*yE4T;8;P?*x{(X zt@@1K>lko~aSTZ_Rdp$7DJU^ZNS5=o!A5-)7^~}83s(9x)i|+}YLZb`{-P4&9SCo8PqYg*R)DrE; z2w-AWr-l94aHAC(0 zBHvK4@-|Lu1)%jJ@;?k=im1?CZ)(_%;y}|QNdZT>KDcqR1#>6k>Xwpnlc#jmeVoVT zYYUV(Ux6*#QNf?*4q|vc_iU5ri6`5R3Jlb!~7njUXx(9@vgrd%(8^ zM%}mt=@$ju-E=F&kCEb(!q5!-{4(wq_KvGrZPHmMTF}lFMYV(-(fhFU_*XKmg*=ez z@Ha^NhD$%Ebz*pZ__UpF*r*noVpd6yk=0xbq~L%vSt#4p`5vQ{Dg8jHF#AE1PCrJ& zeYrvWfbR3^(|VQO3J>gFO&o*rY<E(aRm$_(0w$+&V;U(}rU%O((X-JQKNM$|)YS~| zV_5@da|KFoJ)8Nk6kxFKNf1eoKp86c~)>Uw%`;wM`z(U>gl7^xUl_xav8GO4b&PO9G$d+<2U3(rP#6*tv}S^r*|gJ>qtZ)ODCe%wvW!o;Or{0b-J(E1u+E1 z?kV(5CW+qXW6tR2S0Zoq(%W1uePwq73>j%u`H($2M-;ug35(O_jr#E!_NU-(bURnU z$RumT?`2E|%|7s7xNcJ(7*s^1p8Pqs2Uhf8qWR80 z5Pw@@N9B{`M^{!MRjmU zEdZcPrQAI5a$&_EP~>7@QX6I`gdUcyx_;9VQ`ZiVnPkF>wQ#nShG$OM$ftn97zF-mvGZW%ni&0XgC zX-nGf)Q z_m=AB(OwD}GW?;3($=K%G-$GP&wr02 zTs6wW&|0j1d=ey+w3Z+$$2Xl}mbxe~gM!=+gP4HFWNnBwt`B*)dOV>nc9m|gZE{o_ z+{D?YqqS=((ClwpAnjwTigTt)bprB_u(~jZvVCPXNE28BnO=Kd!XEI$ZD6~FFD0t? zLe@+n60<*UFFAZ25#Y}ZaH68BJcl|OD%(Kig^d0~>rx&sX{17gL1S*Etu@HPsr~(bE$dWe zOxsrMKU;DF5h?W!8>s=0PqE@Oc9QYRDSXcTr60$s-&-VX+Bpu{k&6y=XLF;eOFt}C zQ7$1AmPY2{WiV>AUp4y1NbZj?2s}B5P07ifT;GtXyE@v*A+!4?x-4rg#wC(3(7cWk zPpRp~#Ka^HG1^v5Xvb3877QCb_JYbxOnGeACS270+&?Cv2!vcOAY9Mzl9%-Y>@0^4q{AN-(00OU$?!}U5fN#DkXj)H^p;9 zP*9MjEP!gbUQ%UfFvaBJ76t3S7jXCtBEp$HbQ3 zZQ?<`+Qa<)t8ZyIJ6aJot=0%k1r@VE`YC}_dVyAs?K~=}DMkGX?bYUw7D>St`_C9X z9Ex|=C%bi16W?j>YnkR}-^ovYk}sh*25lc9sYRH-zb6@XkHDEX^&`XtMdhfNFRsy* z2@8O{HTp+0`$>Kg@wsld0@@c35FQqcgYuId?NRYyF=fqPiygqMHmlzMxe|J}6`{A0 zcS%=Kn@d;wysr8cU47#78~Xrh8)MtTLeX}cA)kGygJ>yXETDpRjHo9T6D>cRXYHigGWG9>B=0#ref0W zkse3L1tQk!*6p5upMSY-X+-$P#oA6&$rn%=(FJ2b$b}(lz#~VoGPtB$CUC*-Qhx$h z`(E9po24ls*ZL<)xl5=^&;8u=XDK$zds-_CBP70wuZz%UuvrQI3W(iPI;)oEt`O?h zC->7*a-Ved3@DRfF72D$xOm9MOnL#q=0G`sOALSx`UM?qA*vB(Vd7(4hx@mO%HA_#uxBg3}`kApU6;V@Si{1waiEZHz$l_!7M?wP@Fkboz z^NHn$6p2)vRgr-DLVqGZ9QPNb^!!N-(njztmb@DQokLBUc+wCl$!$O9MABDvEQ|-fmcp?t?@k>}jrWOlz8EqU5e@aXJ0j<{U=r7EiVwr81=C^q6@o685Yb5JWk;#bfMzYP8OH~J& z-bm1Uop-5UGGRuldi{sDz!FtELZN*GJcwf@$@y)9hw^aqjnuvNq?q9ZQHe*0E_IDx z3QFXxf^7RWc_L>;ufGKw=gg?oq09J|O7~NT0Z1l2wSHT}?#$rCRQZ1JJ!=a(kACL< zDY@U;k}NU1Lm`3caf(i7cU&BRW=2PPy6{^qXmyD-N-Ja^51@ar{z-H*`P9anzRMEp z#?>UPd6*aJrcj_ACE0gMl1*B7pQB$|b@*s>_>d{v#ZGhZKWX?jh~rBQRicuJz_P?9 z26vDfeh_Ttc7Cpan}dkW3;ys+Rw&5^kKKb{8u|y&)X+?@uu`Io7OKw1SiqwW{Ro$0 z((3pPuYI2QKgTJR!V%=tZL0&?FZ*8CklkuaMEY8A{fM=yn!6(X+aMIv50+Pl|ZZGV%m3>%lk14#P2}s9oA%9k2q6`E zPTV`NG-C1JsM5Xy&;MZi@kghm`_mqz==o#1idw=j3C6`+9?ypRSdtSTYfWmHf;VpF z+lNk9@lIEH9|@LLyEK^cq{Q1G6dRSoH9bT8XUggC9Uq-c!kkQeRzF>sR-*2}Wy4gn zd3NWhV&9OQ&KKPa7kGrSU&V3=7~FP` z3QX(Bpr1EldX{HND%1%Uby5XO6IXYNEBV%97P8R!VS1PI&>=Yo-`eQIn3Bk+k&D!7e$GJavmY(jUB0E3 zS*{7|urba6?6StCNLca+OKMu+a`63LB=d;-^Plpln>hqBhZv)J(#s0e_?&kWrJKKu zUkr@r1FVz0?)=q2JJCQplKDA7I#1R#M)T>t!2W7v#atg+o;BZ3H?#ml*PRcXYp#KI zyn*`X>y}Jrw7V%^2ptjGvLDw!U6@zu>Sq8SSQV$6>w6*4Rr7)t2Tk%~%1<-p%fI_f zzTc;huH1@=k*9;E)BVoi&R2tGk8P#8yYeW3c;)#yJ$7nj(q!uTa44`@ab-2)>E8u; zCnznMG%cAJPkwNTlSQfBEtJ{+DlV^Uqjeo7kuS5q>RMc%UpVu$FsQ#PNTUEC#vUcv zA(-AF$ba_SysWb#VSQ;_y#ov7k+;#xzYTNMcs`$zquT*aA_A!IH1q5S%WGQ1UP+x- z3hckTB$3b8pIlbXo4ekvD`2Um3_h-D;YS{nPnDKW#g|V?*0-SE@uf)fIlWCMe7mr= z$vxc?2xF&S1ims@r5Vyy=`J4z{otlO!l!y0d)sHX+^RaBn;6BY0-SrxWd z92P#G?LC=L*VKn~D@c5y6=E)$!S^63s=UwX4R{wU3?83PA6Un&StV8C22)gFMO4N(Bwh`mFHO+P zxPj4w7KF}QHKo2FlAR;S|6R5MD*Mg>@K^R+gZBILlS!T327onshpgfF#hNzym?tqT z`Q_4a2JMLTo=JV!Y-V_Vn!o|y?gjzz1Gvh~J0-ah%z8C1Up&6G5c-xDmr_g{7(SoJ zlq7CeYO`w{1?Wu0Q^Jl5uVwdl36mcK$Wz5GdSaQDwt&Qp zW2{nvBi2$@bg4xq&0tb2ySwxm zP81(nCLMHnGz^Y!C~0L6h=L4@TO!R{#6~2U5S87>c(VDec)F2V8^sXCb&IQNBUv%# z_zVNxE8Q|Pd2=tN)hnYDBsE>NvKvv^9jGE<(Pf%W{j`Et?UDo5`9e;MaClyOP=-kh z5Vi9-9|o+P2G$4UNczvv0Rh_Ok!7aI9($&GB^l>bLh&4YFY%_^^-y-lRjd)y4V+$e zekgt>Kh>Q{)0Ii%B@;1Wc=rTNO18D2zWk;2LHEl&p8lcT9YV0@J3V5EUJo_#fvSc< zO%kE@KG3)dlv=`u9d6(we#EzU_cI!5B6GfI%Aia$3|~cwNATjSd<)uNYUmHM^DHiO zE{4#wDQ~=Vg$gRozuXIRYE~0M>-8Bqc?C}X3nhI)0Lwo=*jBE)hID?xXWnHqM24R^L3KbE1!8`6jchv8`8~FpmWl(* zV6%#CQsuo?Ug#@|Cqn)t;M{PsP9%QhLO1n`Z|ORN;kJDL(2t?&6tHK^$323?-0;yY zb7gDVkG3)=np69Sj|jHz5VNRMkP`vosJ&iBD+@enFi*QiKis_pBt{P?nx@|iY`NPSYN?)&1h^1rY{PnE(@lw z3JUVXxgV!2l?*FQGSBH^mSZj3aP5Ox=Z2T2Nv0hnWQQp55xJuk!%|vat(?obm1)sV zAhZkVn&AsOiTm`qc@Zqx$gv&Zw4mvEKyZstyev55>0Y?K&^fd_shq{>2bBxJdR8S- zh_WS~845Zbbvb|8r7Szg9oX@n--$K&CiO#pFnJpKnV-BT~3K;68*f(qzE zI!(gvrEQQP9l5^(tHj8^djF_(AWYTtL#Io0cy)DD5 z4|~+{;w3i*K{jd7ImN!+B?XkB)Mz(f%$f^F%sbNpf0LT8lvK0_n&G(00sr8Ubqy8N z4)Zh^b4QA%6UprQQ^Cw=<=YYPwTpsJEho))d5J1%y-EXdn`=jG;AA`?AIgwoL{i7< z=t#23mT#Z_qnF>v*F0i%gD8fd?$&u{B?yYe%>j*>(UE7d);dj=gdwwU?sK0a2)oB#zU zVm1D&qV-p%v^-SBkpC#|@;*`Xz@@aq;Eel@nBwy|nIw-8k1N}$(6u+3-89D?%V(Ap zZx4gu4qpXqKvgFwTYS1gG^7oL{GeM1>Mi)Toa?%jcN!MBroZ$pbCHJLm59Bxky|IT zT%O-WTA5+NM*DqRBeI+sgI%59CKoL0O|mT^tD8{{H_fWhI$~h>YwJNtq4eQe<7%CVOVjkWjW<84=3LxYyo0iOidwb;(Fv zd)@5+xzwlnem}q8@Bet*$L&$Q-simbdA*+Jb?;4I%iJz#Ey`~w$^`G-MdjT>cH@It zQ<`@OPHxI6#sIfF@r!MDUIfNsOI@|UQeCh z)K{v0xc?4iCo=nXwBmY^nOl^w)gy^s6=hH|n-hc<gZ#S`2M{*f+$hwDeW7#dpU3y-}!mvv)UhHasTEzj$%y(wy})(s;#P#0=7O<0RH+D#uRQ8&`qC_pmPgK)Z2cY|G7ROsnT{BeH#MH+TRktferU zE14_rTK`GRU<&jxIEVIS{)wR_HOodT7k7EqF~3?H{TZzUq1AYI(E;F?p+=hpXIH8E zVF!#VDd+nsBxZKFM=rhknF|)ww@7K+0rly_C`3`YyK=cNG0a3R1)FY1#7j1JpJw$60VI8-kbrbc{83ejXX+RZ!UbYG(7?(Fpqo6eYT0E!odJwa|KR4`Eq5*8E z{!HMrA`R$R%C8@mx0J$G=Y^rKwrXk4zslL!aXRn*$ZJ$SdJtc4nN*kKxBPgg(24Ts znbGz|qs+y3`dp4xpiwzQ0f9CFmksl8lU2UiI%~h|;C=95)c5HepXGXzzL5*WI^vq! z!NP!4kLCtC9+Cc7!xj1x%j@mo@kvY?JO?5YK%Td1!I8$E>#l*bmP<^{g)(s9+`DZk z;`q0{R!6hmi#=9cD&_B8o=kV!zfm(>BaBO{iy*BY`2cKM7xv($Gk)gF=7Umk7ZAIZ zpKG+KMRce=r998HZ=vH0*p}ut{xn&`&OK!u1K4eQH;v*;V@gYTwWA%wxZ31);_*Km z#`o!CoEPkT_<&22JGJaHxU+Xvw`!y4nLRnNq!@<&pdJgT&!F}9IwI$5 zoHZ5Dee>!#mHjkq04Q`sC)HNbYd@BA&Hb>;r@UKsj7s!@v7Da?EGyEujTJQPgnMBX zdtWc5++DK6Yrbf+d~tINocqnt)tWuJiGXcI8u#bsQ@S|WkE%X9_iqen1bWR&|NHlv zWP(Ch?S?~fYJZzcZClUA(Ev*!?thASP7JuLblBF#+7kyL<&vV6>U4HD&29QsYICHx z=XTCXNk~jFq#U^-C_$OVKy7g_@-1g+=XNSKdHF``>!Z>p>cJP3__5!@{j652PgE)9 zAKL7P|0TW(G=3l|rQ7Pm5Aee6+FP$StdUgpb*mlb~O zZqjiUR09{PK^`R}o0KS@Bz)C<(V1h$(JCQkRdX+fVJTB-idJBigvR|G)cxGKjHWGd z$Em}795v(3aM{z=rWW!=$KO4$0R?3qDG?j6(J8J6wPboN1^RG8}hr zCPs-t-7nj2@>s4{pS_=?l$R{74Zgz*1rC;^zT%I??5HP^W`@ybhUsSG^+l>JMb9py zyv7pO1~aO^Rei=TY?ILUnklywkw%IqZ_c9nNqMJ>Dv@!Sb{9t` z-o5h^zjJk!2LWE|e+ZB$FjM4fl{8$>`a&G<4_(yX8nxqc?|o z#cV@IUGg_s3f>Q7{cx#UTl6PivxpdR3|Wg~p5cvTZT%uOkzO)&oN9jx(Z%S2Px{LO zLuVyBdg5n5)Qlbr#cdm)o)i!bOf>gX&OOc6tc^vBRU#?4~HRDFNgGLCLZo$rZ6&4cue=jcp*E z#L}IpnI7-uzU}zv#~|%4BWgJ_B;4^s#ZTvmpXQdp6PYQ3#vl64(Aiq+R-CF%|B`F- zvl6ive@R_(IdAK?a~ud%y|U!atthh&R(Ht-0)1qjW-H+8it<a!0bEkWB*P6Lb6+j+;7@d7ux3S02wX4I#eWcE@iL&;fxFqk_&mg5&Tnw zsca}w>D3V{*pO76mVVKc<{9Pb--J+)q#LWhwIQfD;FQ?9#{sErp zB06RsEJMN2CPn$Nvxe8W^h>alqH#?&JGgKCGow`56QT-*Ehu08o6u z3`34M9>IoY?{{~`c;KmiOZ@|gsWs5wnQh#^ve5D?XlLEOefsGS@Ak%r|J&_9V^ut* zeyP5(!}$&{_bXNuAg?{+CEbNy-34R7Su+SKOuDdN>)Jq&kAJk>vpKQOkSuygugu2M<-hT-` zqxYeEe`|C*o(*Lg$n^&ysNNok9AyEph`ALbI*GT7{D4Y$7E6HOYx7GPQ z924c@d-zqAepqYXk@98$%JNaKRNS0czZVt(D_s%QGhd$NNil6sd8YJn)O%;qMl8ci z>(nLqpg`{Xzc({`^1Y(SttkLiST`@=4vUoA@-Pe$o9iE zj%EzzV(pxmcG(BL67LHLup2_mtVk;3&M8yea|WZFJJ{>Y)HJwiwZ)@u#GZ;~W`b+! zU7eQePC?In{Q9-!V5gZ0r$Z3>&CN>HXeZoz>iTk`_VaajQ*2N2>srkY*vs4`uAxTN zEJtz{9HQ-eVpdW8@SSaT@5J0CucX1fcXdn-?iOC%-C1g9pv6Jmi6Jzw=f|xVQ?Hm?Zf-=|tPV+bWoZf8y%<$wYgv=F z)vt}-aV=RI!Pnzpnjmhu>1&)~+L9vQQh)1m2p!u8>3a@7&r~iSl;T^kMFC~AdJ;e( zNt|#JDmj!oHE!=B-$3nVl?s}Zwq>xbv zlEm)d8DQ0@>0tFJhSgJFO(AKA{ZC%x3RNMi;^a|}w{s^SVN3zd1wb>*_M3+GI>-4# z_1trKq~&nA3~d4_6p<*Is<^@2A|wO%J<+1r2lvHm`ANh0nyu`aDWuT#c8T%K#Eqw{ zs9uS>Gu@q!pG@l$7r97(c~kLj5L$(tWXbjvEw%Ihw9@f(ImhUNS>iQCB;!@9N2Bd< zmq&h<3yxLNLuSM!ppjz8IRw)RM;3=;o0DsO#EMa>p1ZUB)oFW0L(~A%v|ekZ9weo* zU?;)B-G?Q(<=L^P`Bu-fBy8WkYg59w@tIbQ5)O~i4&&=}NtUU-0AO`8eXk@zRg_CJ z*TPL-mv?s;zA7-CUFa-HrWd=m5wT+tz4b*U&w~+t0X(yUCKcG^21v_i&=!prv>rAZ zU7l{km}N<&1#&d1MZM`;DGoVK8NHF9hI;DF>6K7Cy0-j^vlny`uI<2xM33a>;s7cr z(Vr<%z2a={Y73h|xtEsRoqZThTQn+$Sbe?yO6*GO=BwKaPa<8K@!yWtUv4cGj0Yd5 zbcqnQL}3F5q0a!A*)fpZFUo6yP0Hz)#G0mgWjp{4-e|!s4s%=_L>FVR2I1Dp?=}hb zUnGXyv&!JJWJG151Nw$$Y{QCCRFXO%eRY5&+;d&eue!H(e+i z+8L>j#J;+{^u&aqU%-n#r~0U0=?Qt~4i^5gZl~#K^&zI%^8jjiPbeQbD1Bq2nwI;b(?sQx;0ys*Yc? zb|3dh;hOyi{*SCOj%{9d{@mQ%QlULuoqnWI17kX}A8#~Bcq9eUJhRz2`tK%ZCN+xYS zVkvnu?FQ5e-kEn1KQ;6@o{PAjuh(x#;Q5j^vLs7OWR-k(xh6D-dh=VUxu`@EM!a{)T zbhhxFvXk+@cc-@imj_8^593jl^*hP^0=yQRidLT=FY(8xnjVYE>`y!vJr=)BVD!~- zd-%$5sb<&2-PEPy*XH!^-TJr;oAhiX+EF@d%HCw;=qS~(Fl?z*e&*h=*bBukJc%4H z6lvtf3YZMMDZi3Zv6g1u@+c2+@Wj8reUV3AN=gE)^{xm$3(CjtnkYIwGA0HNI4KPT zT&)str7zcYWT^VByXIYZ?sO`od#uJbLjqD%a2W(16NA7DQYr{RXxeG+G`v&YiF9eh z&&`^U8VcaLv45fGB0+4)Fs749*t;a4#ftstMfeNSgM5o^i9; zVi+x{SdEM4Hw*%wL24o3;m(hmExnwe^;Y*i^U;NxVh6Y;8~k8@tt6REqGPk4ombuE zQT{Xd{dcPMH^m;Lfso+ip_5CoK5Mje+s2)eqxCS$I7Z4^;O_N)>`mzyYmF7Bjb6xA z5i@wh0PYxZfP;TGAAV+1VnV0OZRgg~8HtdkuUsu}arZ->UlzetV1!op;+ZeJo$S4Z zHlqF0We1N+%)R-m`Bpfkov%`-X*2~y8w}itr7x}+>5hIG^?t0ud1P4=`2E_Yxlh45 zvLuK*R}1+N;FT|_njhA60w44BYDKal*7+`GM&s0C=@VfLz|nQsNf3B<`@z+Zy&w_R zbjhs8MtM4kfunHoIS1_a~9ghSAQ30nTsUhu72i90R^5Fp6jTrS|5w40Yc> z%=J-R@~SFJntPZV(cc$3*cHxx-lK`=VZsw{`Q+{H))oy8EJLyqmQSJ62Z zmStE%swxZQ#SCA}gX6+58h4wEyKnY$@o=2XHBZIv@3JmM^lds_h+A{BRU%KQp~Odn zo(^{_Kq>5bUf2VrTEuMt;CD}R_CjobI&x~~&Vp{_QlPJEV9a?lEb)977XT65k~zN= zV_u|UA4gUIKZlRh5~tQ$ zu2DGJvwFTpSOXvwxd2sa=tdxQJ&ygt41MR4N@qUvZCRS8V$G!V7iapsPWfTi5|SC4 zbT=feM?n*?S_3rb_6Ky>NBi!XNX&f3-Xt>QLzN?PWIc9bi@`Ob-+*_zO0?ceOgfL1(q6 zm=i$m&!ETlwpunut8v#%j>mnySiu8pxIhEg3e=5&t1kjN27o-zi;UpzYuS67fq2t- zHwWF9i~}6izg)BFDJY9A{joKBe2FaV5c>qTSuW1WT50v*3Zw=#_STNaX&tQ*e{?}` zcTaOVF<&xaVb%f%m*RFg7nWgEDvF1L%@IpdK~_6*Gea(`pYH6ScPDofs--k``fLmo zrz$#`V(8;s8|rt$&x9xtlw7#x!owxke052hEg5Pio&Grak;G_f*cLi3$z%!Hq1A$Y zw_U_MMy@~_?;7~a7-qzsIq`$w=1ihNZwyOKg8m=^H(M(8&p}TPXpAI-0Da6(a)|d1 z-toC|r}lJ+ny6{pPxxwVtryYBF_iC9He9TPxo0&5fV@$?=p}zP0^YIXZ6QS%A%Ns) z6d$3qQxeEG;4g7YF5Jsmu9Jt@=W1g9Rm?Yr{AJz3;gAY)Sk^{1yTc_UO z&KZV|$-VT}22$)c1+#IU2}l#&+CPYPL6!9 z(O3H9oKb?qDi_qzN8Z_NxkRkthPx&b_BeZC4fwGiwr6RwvJQ$fsID2=VZ4I7L~u2Y zi`TITTFUuosYRO$EfVoIKH(>piO)dge`sKapcLL1e>{+b**oV2u&C>)C1af2`__3Oc0u)OyUcIj=-A)gz zH1%&fD?fK*5X$J}-u?1L&temd@p^NzhdfH`S82+T30d=1c+cMe$FoW#WLde0JeQYx zcV&ISe8&)vK*K^>vlGkzR?L)MVoYzTwwPzA{&2pMgdKr0RfxDuCqS_P*)A}tM$a}Povb(SRRXo-OzrDZr@c=Th#x8~1`UCha~v0FIQ|-VjghXagt8L@nx6j9EaAOsPAjKvR2Q* z%p!M=G$nq@ah9&|z7*YjzJrscfuan|D~dyeupRR%|7D;pUcG-$HV=cXuDJ56+)C zZOFR)(5(FV=@To)g!DoE%FUtu+fmi#f{WH5OwNRE`B!j zp#W1^qv(U(-?u#+2^FHVJP~-AL>ljI3PX+zx6aF(iC;@S+G0NWnlm_4Apr;P&a_n> zP8QOtrx4+FJ&81Lw(KH4e<}scdv?D)GM40+b6n=319ac|ZBJmT$ir3MrhZ?>zb#2y zif;ytPCK{~PIoHtYk~mT8JZv$#5ts$q3vVAlce&`!$pJpKeJYzNAXnt_m&#L_@qZV zyq~hu4ga3p*J*bF7E9W=ZN0g`U}; z<8CwYHt_|FSa}vCee*j*GJ+gN*%Qkj@tZV1Syc<~ax^k=XFP zOuz45<`ko{W?e||+cn?yh1F&5vizl$%Iq4UUb?2JuQ+oQ3+>wAMvR^BM*p{-<8ZN` z?DDMcrz!qQ4@cHI4A&vreY$eoK=6aq-;Vp+i%Omw4LExq+^F&WRtCI{7WubPWr%w7 zt#kOxTvJrS0G#<9s1-++()U*!;Fc5o$2~fi2M#sQ|C02lcibx8i=SA5EZZa-Fvg&v z(SpJZy^@xf&l#V{5}~q6%!p{Is_9?iVJoL&15^(ZTe@!ssiu2(osmL` zCXgVs5hPWO^4q)jZVi{yZZFl55FI=ltEW6qx$m`4>6Y9l3GQCb(>0pn4oSmwti*^b z7&su}2bYg^Ss#eQ%0c-joAvpzmQe{DSKXrf%FpnhUIw*_D`GR(?r55-#Z&9{+9Eji zp0}aH4kxab6=Ctk)IZMRz>}lnbS|Z|!RFE0zEo!?U-PSrH;S}r-SGGzZ0gjXjp}W% z$*xzvUpR|@7q8T;Uy4LRNj`LZ3;pTaeIi17K_Pc4R+ebCt=^`)D>ZNlzNNywxbX;u zIQAdS(>31*d?O|-FlUystt1)a#(fC=d{;Aq@s6@o3_-@G7cnS&GopWE2-y7|bhp_Q!h9v)3tRlfJg=;&4a^=Aac=w-=o zkKaacSAQKHrrEa`_t`naSkm8LUnQ4-dXAqYK;u?#J|3`vx3rjX<&CdCr^kn#xU~Su z@e5ykMzraESV+%NNo{+c*5xX^D?42?l zl=V!2#=YKrD&S+8MGYFNRCo*u z^xB=InSP!>L3sJHYb-+zdqyma{a_bWPI$`25yvU{LPu#BEfUb&py(G99Js+uvML92 zQPaJ9v7&0~d(rxNcUC^J_=kgC3r4vK2T9^8Z7#V+*7p8i=Dyd9%JMG`gp=hM9lUGv zHIc<)?<+k*kn+`jS`#i2zZjD0m%xw?bH1AUkUPSbv1`?zrJg&0e z__a;$eTejE3-9Mo6fd7Q-@aysawdpnn5991M_)e@4US=_C&v#z#v6mYGu{KOx#<(cF*Mc`B;Yg1#=w4orxRYH@~WE3}DEO#tA)+9)q*|c(QQ4 z<|V`!vUf&d=@FAhNn&&;e-o!Wjbg8;*sF(qklqweMPQZcOC+z4-BtA8P;B2&JjTl2 z5KLLdtB8)?wc?|UOT1Sw$2!+5!JcbZCH^NNAhjkFl^f zc(8x-U_S<@G{P1qU5`ub-P1y_pD2prgeFSgsElRjGUiWR8ptrJ;kVmi`kUFNLP~;= zCKXeW@d6wtKji(FPJlay`h(+lVVbr z#DuT-M#O;`;rh_Fy81G7`yf0)DKAHflt*mkR&bOh@_HnpN-fX@(-I(HcY@{ydB50|0kKPD-}sCMgZu^|dj-LE z%mRl-dl}`as1{g?WB5rVrC|-FV-4joPNh&2cG7d~AI-0mADOJRMS`76TASV9m$Lp- zP(C`S0!`#=qGl8(5|elx_8NhOj);mWPnsb_gB%=CLBw7CM26!h1rFuPb-m4W{mL&o zzF&r@n2`=J$M^#Vzi14;-^IAq5i2Ac?A{wYbx@7LJ{O67{W5ibMMOYgA~n2h)9T8B zrcc1ONN4W)dB<1VZQ;P|RMXQ*EYulDmWEdIFuGMB=+6j5gj%#4H#CjrwREkAd}^L~ z`E7Nuk1^o1>>NLc#6IPh37+9fPKx$~`%rNpZ#I2E%wvxkcDlJNU77bsw7jBs|c3u9?){SqNA7(=fs*)Iz_E0Bnu zp49T7e>HV6D*XnOHw^QoEzPP}+%QNW|0InjMa(l_C~L9~*Ya0NpT^d>XKakldXapL z7#4GWfrSf_wwOISY#i?_N1Q_Hhx-a3+}RrHDGZDuutzN;<;w%|N->0Z3QfW3g-BXT zG_~TR?~f18&Rm(KZI9`t;g#vCEaB2sUv$Z#cxXW6!J^RMq3}&q!QYq7Xi$Zhuz}(= zU`~%u#8ljOu$wAJNbhBVXN=mhvKT_{cM_Yf8ug#x`Dl1WCxxLw3#{N|#mRRfJh%9W z+G8?cC0E0%EjYE3;#R=^Pa@e2YuFqU+3LqHqWZqLxucR9BOEYH4lUzxRi<`Gvood& zmZ4zzO3#Wk=8BHrGU%8Q2^1RhXvcf!&Tz!!+IhrA%(`alW8n4H7QuZw!4F+g@Ybn* zzyP3QMU)xm7D>~zyEVbn75ZoaKdu#z8!jptlwSRqozCHk<;i+r%S(x1KT@>2 zfrS-DO&b?){Umh*q-y_7I!H0nP}MMdMnT35MiIw*zu+O~zKAudyU3)@^QLu)G!0C! zUrV&SiQ-{SI$m4M9NwH!lURMRXZd5KQVH$7m~TKYxkf!IzwO(vEhwUgPCz>J+KcSo z1<%LuzPG7Pt+Te+9*i@>8VG22D<>6LauTDFv`goBm0-+>(1Fa@Op(GgG%yyN%_C;C z`FPE!Cq>?&IrsE-rT2MTaju89l2g-0 z+Y}`;-yFrc9PA*F8)aYUG5Hof&b}Q5`9EG23Be!wM@Ki`Olp&)c7-|;~hL!X>smTa&fR`9$c z84VK|RTCNO4aCTHB37=^uWcJwIeayfC~MpH;v$II$mE<0QgKp>2>t?%$iI7bUB<)T z+2fwG2ch3Oc}&kcZ$(Ove#ffExn*y{Oe8FWJ(@~v=YnF`O+^gDE`ASLC%oXJ-*e9T z%*5clTb-*1A)Z9jxA`rEXZ2?zTjK`Ilq9CiD!juN$6c3_TBheLC9l#C^8O#bwVxvL z?S=C$F-c{JO8NUT8cj|+e?}>2ZhQcunAJEN@$D#UuT%ETB{B9@EUaJtOPINAiYh## z7F0>7=Z`C~yE=xhOnf`99y+^{MPmScHImUVjPZNOE+J+&Zf=(hf6Itx>+NVl#nf|` zM-zp~oY1{c-{Ez@O8cV*I;qd+x5)dquJmnPBH5);@HY1};M;n;=UYB+7OXC%T(&qJ z!G*r&;~ysEc7Kd*wi)TC^vBZPp(auSb+6jIThp8NZ|ZCceGE?C+3fH$Ym1axBYM9e z($K1T_Lg+tJ6KZ(|-!*oj~sA^^jVySZa{M6NgKs_5TAzleR$C>DUn9n)&!&&GI7 zI~x`CjO{Q@$J~9M5R)>Uf3?42;AZIXldb-qa!ObBToRZurGb;ku+Fwwul;!*#%qO; zJ(J_p`Co$smW{19ovNbcuU>t1fxqX?OP#X{6NTxVP+plURVB=$>iF20K<*FJF~{yG zOn|IYY0XT+L#q%ow=d4~N+D*vG@`;90^HBif~VmfuY~0O*JN+(?)T~BW+It3p$chw z*a;HeAPny-3=c@Yp(YB`mqznh`Mg#IgD;8o=9QQRG&ivcG_TBZ}0 zHS6vo8#w{|*d54(2jrV5#NU_IP*Y`(ul2>$B0SBZ;1?~2D@wlAlYqLlhIOLVy_xi^ zz)RNLSmWF%X&N~SDC>Lltr3m*^K}MGOnln$4?lL({8)?WMt>b#ZA2fh=%X++Zqc!t z9j8+WM8+ynM1Ko_%z^W}^k(Gk)_CQGzzcXF&u>DMF^dqD=n(~G zQr6?o;Efybc4s&t9;6|d74~vO7k)AXp3ei0=~+JcQ3*)bYP*vxz1#^Bwjd1KD-0_+ zKHQ%glFw05#hOK>W<f-(CQ-wDG<*Q`Wb z-Rq@tY1*N^lR{9$W1BG}w^H!})tj~@w`nx53~1db?P5gg4^`4<0QyH3^MKl|5DkN>EJvTuQ!U&5&hB$g94RY+xb(EUs%h8UC~H! z8jXKnn=(zy-59-g(ewBmDKfJP9bADXeq#I)RyqMPLyk}HO!bH0dTSF<7X@iKqk^+X zTy%p_{^vanP6-q<=axOpEjz)ac_jvU9fo*${}zlq4tcM@k}bGLf}6|Ale^KEy8d%; z`5&tq6cjGLuRUqXt%}eJvUEZP&wW7?+yC2Y38InQCyJsup-Abi3Nx7it49IX^H0!d zkq>BJ8PGod0zuOTrRRb6dz$P2B&z{r(UyOaU9#ilt_wBcCOyYJjnu>~DA|m23sTV^dRbZJTh1)SIy;r@ z`I>M`%Hd2j6|8N>ZMhq&&JF5s?yl8PY7qSqL;Dwgt9&}R!209+l~w4$6Gpa`J`--s zP-sg1h?YjJdVDE{*umgb4goA8^XdYUi~xGb_>f22J|CuOwe!e#u$3wYCqq$6cX8QoFUBCr%F*^) z*A86_QBw0uHUB0A;mJcGilT?LhL83wSS`{WmeNkj)OewdB)bc3FM*QgmfU7)Hz0^X z(7%6Zf?POrncESeMQc_Q%Pn=N>t754Xyd$_+VGBO<SqM~9~PJW|FZZ2;s0fE0qv|Y(sN=)IGeXYC8b=fJWF^^;XhWO za}1$wtZ#kq4As*yJN3S=^>hNV8bpxFFypv28*n!Je(j3YEplEI?04*j#k%?ulY+IM8HVz2TqGhnv3W_m9kZE)R=)@iGKLY-`9(s-ucq7`() z(M)%1_kqO_lDplP`a9`iD#aj=$w80Oh=Pp|$?ejVCUds`Rj0k1$&80eHOv2B14L!m z$NT@(7l;tc9n{(XIYj>8?qKVZfHr`^lFS2Udiuajqi( zLnHGiGOfcuL{=$;_m9RG%*);HQhu4D&HY(M#=7dnC4%rbVn2zcX{I6zltZcuSBt#Q zI$jqPY4V)tACCW4$XX%;QGNwVj{C!hCC6R3|6$2-ELEB!hSFkhZ(_yKAJt;An@Eq; zzF{;N8K07xsfwk~YFJ<(C-@C!`rl&4ftmdLd-VECbf<4R6nneR0w~ooI6TF2)G^JY z%vGBH`iW3_q7cSYkL%PejLd$DF#r7>tK2=8MO)E|o#xfg^FJSY1|FLG=ON76C!Lu< zfln-kEnR!5BQqqji+ne@JVTV3XxqYjsTgErs%GR$?3Mzr{|10hgdPIGKBqgJVoJ<13=%% zg8r`e!r^4v3}D+i5q=U`S=Y61J9<8hj;!zsR*Udx>B{h&FA8a9pr)K4j0RO@B&*?3 zRapV^5gYG0A9;}@Q=d>|@hS~Byp`u1{BiH>8!V>sNDfL);t^!aVs>|V;`|Fd+0P8W zkTepCmM>qJ>O#lzFvc@h_oc?2^Q52*L23JiX`E2pQxXuaFi%LMFKfLVJYNr9p-5rK z1c520c~%6gN%I%a%dy%Y6_Jggh@2=tEFwc$iGCHcp==Om zeTE=oTbBy&n$L%x5k$qd2++pn8kUJ)7`)C5p@7y4|LK;+O7G9E&aN%WgXzsr54jeO zNNEI)G*SM``!EczFaU*jH|Cj9&hlc8Xism+we7hBF9$_6HKc4I;S4IKL{ishV2`pw z9q6zH#tk|MNFWkU%A=sAk>+;+vZ7a!iwQR7J8B_L7mET3E-f=>7Rf+iUgK zt_Bd5z1r|d2tlmiZ0X`cy9q=TWMz4}JsbJp7&BH}8^i)>IBbJ}8H_Z$MMp>5!(s=t zC+)di*_xcp_!LyMUs4G#_QyM^I*;T+KKZhK5C2C+J&6UZS^KU!#=!k%DFq=qpvkhl zEE8G94w<&+54!&1Bn^b3|FCu^VWn+@x61glI%=xS@*k0Ar`eC(KWZa%Dr)T&zT^KQ zKM|TC1^@(!Ft1!OJALWOitQgfJrCtne2(nZI@-qC*X(uqPyYR*UH5;yoG|54csiO` z@e;DZb^B1S>Ja5`Aj9|`H8oKFN8+%@l>hLg0G~@-h+71T$+ssva?d%Od%pPFoei#z z0`}$iDB8t*GO=m75d>tPmJ~iw=8`z$aECNOvki_)?2bjGFPY zLoefoOO`EN7uQbua-FG6o*Agaij6^sg{T00sDKTkZ(=3E%Af;ZFF{uc#jcLo-96YpeKl*aE?{RM2KdJCdF1GE}&q}5+}o6zr`;5CKq z?I*%G$+tsh6>%Oh=Ohwd#R;I}SBtn#_aAOr--JKBredyR)e4ry-yJVZD^V1TWt*jm z!!2$C=bDm?`s;z4@PaGhc_rUYCs73-tPsA^q(DF>a5+eb^Iwfte3@1OKCb*$$q_;! zp8W{t%k62Ij-VsHeFOpg@_qkXmvP>C^<0&hBc!`T$NIn5jb01qz5d(8FN}F0PiG!H zCU>u_ia~lDc_ue}aoCkUiC4**{)ILhXoo{f;H0^c{$IFe>kHF_qe%HoRQBS$%&@3ZD29@)6o?i%M6pWptbGA)F55JK&c{Dz- zzye@9J>}sw)*jMrLVqv;pdJ3I&v|!#2zJ*Ha9Ew?@fw~Zzo&8$yZUw<7DQsoDS9V< z;v(odIYA#pHF1;JfK>*@|51nk)J^z99tGU>UWe4&z$t$!Uro@gy`tEd@2^~Yz&4UA z_Q{v(dw3clCOr<5eoRg!)P$4t9H+@`63!DvFFB#<(tDNcGSQFt1FpX~K?5Q0SGY2u zaQsCYO`8fmeaMg3oYQ)`a^!L8_X@a75T*$#DbufJL;fJWlwUp2+(UfUNHf@vO|>88 zJ0hxptL^23ww?G@)ds;wH|XV#hyL83jPTd~A`GvX1r%OARF_vv^;A)7-c$+1<9rfH zWmrSySVMKb$WMTi0vp5ZLtJIcS?Sks*w1h(rRm08T0%+^|5*0%K(E(pJ zPFVp3--weWmpL5~^0@AkQ~ximgYI()nw5ezaiRvu0H>r}WFd6jHZeVOMF^T6N-B~L zZ2Px31GAVmus^_U5`4s4KZcFQYMXIdhN`6Gj%caYszsJs5j#v*Hy54okECKKiG7$G zdz(q_N=*87SlY|}OELyAph?Y;)~#Tdp|<$TQkU{cFdP>FjDj<&mCRDVW-y)6zfvB5 zan1v0B$-yNE+3+Hl?+(N%S>);S|;;CIvIh=F&54S56*8MoF{K*;B3#M(jUC9fZI6x zCs`OHw+GT;AX%kj--WRn zyQ{vrV-|Cfta|??L;sIm8YN`))9yCh1 zu~yc17eTd6-Va_|UwDZ$@VOJhc4=$wMql&zV$r>H!q%|6hh?g|_h{C#b99ZArdbM@t z4(00#TECMgf_G^!yEIn2WF?Ar8Qp&OM1Bl#UN5=uxUH~Y$}C)6%4kqLQEKx2F;x7) zxi^`l3GuRq5yWD3Q@Qh9hoVdivxxp9UFGanjI26++dB z09*Olf8B>T@z3Br=i^*TXF1$1* zQlM+?bln|a5P86)pcbPZL0i~3J(z3T_93SH^?g;u5Z!tEA?WU7^rJ7qww+%n1_re_ zi`lGoM)GWkLf(bx(|33^nG!n%aa9KIex62m({HJ6pVply%;khSpTV1PPX7o__baTq zLd7cPaxg2oFXi+4#1z8&wON91CToYwvfRggYEPek+PK$Fu=n;cMeHen3v;xN*7QLF z9O^_FPHlM7m^Wzuqr6roWg|Op&QHBOga;Ah;B&Eh=smB`q&fyr0OF_EPu-X4TD?aa zgmC~OM&?5!^A#gA6(h4&1S7=fnNBvv%HA{Bo7sx{cG6Tv6~Ps}?ZO|TMvK*SQv19_ z`Hn}6Q;ij&&WccF%~mz$;;if);|p@{oQa{*9Ul`XF_i(}AGM6sFqRga+^};wQvTuaiz(kN48izifKZWkvl-r zzeLi1L$c9X@}3E!WE7kU!(u6Q!tp7{c&tEICzaohum_gg6X*4jor_M6zI~}d>r#Wq zrTS>yl`j%IBdwv+LY%kzn|t&$u9*eWO;QNv+NjEb)h|tmUg8e8?H^XhU**I;BMak~ z)``88;qZ(ju1q&#Ti?QHc-parHl>Nf`1N|m3v>6of#r&yY({tgORL?(Rq(xmaV0FV!FH#*;j5(f}k1rTBa0x$TCO&GKa zMh9@fgwjUd1(A@)1>7sBd`9vi;WmK1fALgu+kfMBW7t=BqPO>BvcSTEdU`he5qT*> z{)FwfGhoydGE?Z3+|?re-Uz`BuZiN!JSt-He(*X?E^_)UXPer&2_SWAv-KrugL5F2 zz2Kn5`e%OOQIgnOWIP!A5xAJQ|I$WWf9(zoGQYAyVrVW6ekiS@4josvEu=h2egPYs zr1i|xATZk1eZJ^%@8B}BpI(_KUZLlf*G|A;>D~rkWUTsFr4?>r?L9owy0N$4@P(P^ z$_ppE#I*AwT$Qoy>J&!P%=_z=f$OZjNJTdvZ%{>=%`Wlt+r~J(ZWV&E$>@4qi~7cX zYLPM9TpM@eRQ~{84jSc^RRxHD^sO_HCY8%bsfW&XE5&P=%raDZt5i7;r1>V~&b9?) zayju&%E$Yq_LWO5qaES>7fuqyFl2Fx z(k+GEm;E({_FYZ~%*O$61lOl$i{Lfj;GouzO{KSBE}-%+y_7vr6s3#4mbqxdF4oX$ zanN?%rv7teIXbeUliYAz4rZ^GoovU-C*@KkY3zpM<{`6;j3-n@FH-Gv8Sd`s=gk=C zUT(tknTblzEb_5Y%+rC!Ulnm#g{lI;0vF2;hj`wy*dM_H^^y7W=3ZZx_rETh%3?k| zJLLPDaxV@-VEAv^iOk1u&P65S7)LXoV>JY0ecbL&Tb{Pp(oW3|7LHwIDivi8rGI6` zz@RfpSkM<)09Gemx8>uP!#G+I#IjcKvUQt)evMf|JLv@#K_<O>_MO2}2OT7Zk$B zTQaLq{3a?jW^^$lW4lUqdE+$b*r=6D%7e>c)Sr+=R2zXRDJi2-DO%;xw`t^#lcWd! zN9l+qQ#onMsfw^Yo#GGZCd&Se&XjY*C;xVEJ&#GSI;V2sB1E}hSpE`8+OcOUjT*&;tE^0T;AN#Ow7 zI+Xs~w&yr8ya^#ccMSl$?hXC5E0`hN_~J!-RN!on0da-Bn}T0r##9g9c_spU#gs=w zsP$YUloM29j>wmOR_SDfuN({@t>p9{#B72vUcOhnXz!_fgGJ-6j8t=htAp~9*kI#% z=f1N}V*UiH)P?ouBGh*#$z7b zM-uGeXoalER$1t$YrILe{_B}zshk~Oc)mMmFMa%>67^QWi=K}vs}5lvtS+PMwaBS5 zI>g0HLUsIZuzyK#sBO`dUqHWS?jM-8U`b@!D2wO~ z4G0AUSrNj<2q9@28o_INdTpQ0yxK)bUR_Y_Z;UoREi+M=!U?68F|2$i$7Yit?eEK6 zFNZsG3lzx>-+Y3ps44MLy;2D7XY`ONN63MhfozV}UI`g4J8c;p?Hos=sUj@r6YL#; z$$~>oWMoV@1Y@ahoeOFU&VZ>?$zYP0qpOh24L8XR(&T;;su=TdbBV;?iL5}FBUL+0 zWGq88slX5@Gj-ixl!5th24xCbg<#uh4B~cVMcVgLG?8#DbrvsYrOlYUTj_k+=|E&K zAs+7hCg|t5ZLRKPpxG5KLl8@i)HLSfj5jh#sS3;a(v|`mh2V)})Oa#aBAE@5%%F8G zDSO&X2yF8KRjGPG)5!pM+NtVD@F-OuW8OtEQAf?lPMRX~^|CAut^NZ3NAKe6lcE1E$wyQRqzb{3-Tu?qVs6da% z_e~=VI$@xE!YZU5VI167VsbBTCOXuEs1C909b&84{t!&z)Pt#<{)htfS>N$y*yg0c z=9+FU@40ingD9#T?-Xf?M8UcR*=XAYDgS6I8j<`*Pr!T;7`DL{kb9x7mA97Hu~O{P zw0S>%(Yv`)bM9?z>AY;1y?n^_dU5jXFw2sNdMT2k;U30==aFxnk-8E>)GnU^OZ=F!KcWf- zTzPo@l=Mm3k)$fYs0Yjf+^-(WKy*fu;AU-lL=SVo_CW=1?z|Kms(C9G8@?s-geTbu zVqVg}N1WU@tT#{*Y|e(;_b14wOcVXmU-=t-t}DRTX}mOhC9<3C$+H6e@f)GFyP6?PHtK)KM3GhSMo-Jytl@Zsl(~>1G0unI&Yi8LpVG>H|e-I@QP5f zC^@-c3kuv7I8%j_=5AW+qQlb9ia&}~;R{dT|F$YMq|=|(4vuG`yAWl2TO?m{wz?;z z-k0^wVHHpgr7*Y}y_K2T@5cFjsky@QUc>uFr1mjKO?bF3JOv-XFmolbC&7dRF>cZ# z$O=G9uclH<;q4{xM%;9RqN{RXQuNFHJb~J-nO-M?zbFC5zp~m%_QRV#0+|`1f47?({%IX9j5uNt`zRu4ZAEc|Gn>lz3J&yheU9ZAQ*}H<7T+S8hsg4THh4|-|gWZ znu%(IGX0Z~;Z&=}OBDzY5p4c_+5yu2Cs+xvFlm3QT-a%Eo!vR;oAPIDoHF|{uJLjk zPy4(>Td#ceFmV0O#AM(z5R+@W;XVL|Z1Zr;_jeZo*lRJmYw@&D;r4})cd&Ug7#xmC zzS0S}a2R?8mNt)a+_rW#>Jc4V4q~?Z1IKQnhm%-4Z)23zzW!XCGJ{P*TJ~ER!E`tC z!oRDo%qbqdbR8ekT^31(!#lgW7IeKEjAzLelIJ+uhabdT9~~HqJJQTdC|T#_fiqjz zJ`2k@7*~(IjG!DskSm*4uwRB=58LKnnakR~>eg%uRnA|&_N_99N$UgEW9YO1lug3z ziIdxt4Dx$;JalF*L2;PInLC6$)WIKH(1a%N9_uf%Iw;H=I(to^g56TH$F<(ju?F_D zzIF=-_h}}g{tf`f0JzNxHxILdzipGo`zi1Bn82&{zexAUyrWZ`Sx4WKiHy&dgM*)( z^aWfLqs@_LA_{}s#>hSj>d@U)0nY?MW{cK7F){j}KC0Mno9%jKF0(pb4>nww zn(z41^eQ;^soT5;62Ml~Ha&8>Uqk{u0p2Q`B(rXpZ&E=~77=S@d-_~Q}f3K`NJp1e?$7DfqXTlJsA|NLDS!0=(q3Bp$v_q32 zOrw&!B{$Lja=bH$$_1wd1lc5*TuJ<3TBojDz(2(#B>(wo8n&j4aQy# z{bqxm^Ce8@;~Ak&&QH#MJixXk*Qk>SqGOML6pH>{6tn8?OPGXBvLKkk3$C>Gm;I#7 z1%jypg2K~d*PucN6-g*k5Br!BYuK~o5~Bt8Lz}O_oQ!b|&5|e>AXJPI141d-zY8hf z4-a{8P6oVhU8}}3-@!}Pzwy)=0Lv&P*3{NK@`P+05IW|tx-Ke|=F^uNuRNN&!w;5M zV&YbHgqPDE0m-QN8m;}(c+T}Q!m-u>n|XY~dkpd>;LOsw#*Egh2OkA3m%>yQzz;%Y z2M^M;k2|ki>oEYo(F7Oh+z0!V%&fM%2{W}x7J=~}CDFBllL=AWqE|QxS_XZOV%oh< zM6AqfXGE=aQ0kg{ID?GOCAsmM&l@qFjCj6%LvHOy&lzE|b)=o4y;2B|uYS?wecOl6 zq|8<2b{^6aL-@w^sIzc+RPkZ;Dl@s4zcXw6&^^Nj>9pw{qUhL(}W3|+${58biCY4&pWnO zPb%*#?6_%JKd;y2(NKw9Nan%~cU8SEr-=fjuEHYLQ4IFVQ(MgF`%p7Ez9w z0eOBY2xV~<)+K4zBFTZ~70MV74zs=e?E$Z!GVc$q%$TrPpUB}LM#~!(_Z&LUXPX&2 zH(Pf`&+_eGQTKizp50-VYb$vA?1tW!jI~e4jI3F%x`-DhM7Csd_xuO{nTcdp0}%pZ zb~rbRjquLkd#Bd1;lv{<6Z_|F)w`jHG}Ftloyc~#auoBq}6#^BmHdl8GmZnK>H!;&4|-vYt`J0FrPttisC zf*HQryN8pBWxgM)ms{|(S0f7DTY-3SLc>+OOsKkaWVT?3lCQ?hk6P(%;K}XBQep7e zNpUfFoqF&RqYdmPj%Amh7Zp`=2_ z$wCy9xC8eSMWLm;LU8PpPR_OCxoaELtiMw zrYsxKY1}$L(zEFel*l;m5Jgc?1$Kr(lT3m`2CZv7B(=Qh-e1I3C&(z}XjSg7BYLcq z$7peOaUer5f$r8sa3n{tDybi}dE33vT5MSgi4N>weXfGkp@wX87n3fD;8~gSi znY12KmNQ18z7-g=ide`3Htxlerf4BLb=^A&74GF9XfoNlTJ0LoR4yT`^xi`3+I!No zAqK8w;8#01(M;LPS?mRqLNYch;HOaOysvsq}z^iTWh40pVl5l_F15-8l zJv&u(R&X~c}DjFXK~B(-;$?6$95Mh1uEh6&Si^R zFLt`tkk4x`kuumJ6CWI3YXL*WVlkr`7jGa(gyfK(z(`jexGH{R^N(HlzoOW0{ zq1Dg^ZTuRzlhK0uSL7LT@J>&q_fTux6AdrF6FMJo_;lrx`NqEvs zz7sY&S50ciBdnykWj|W)@e8OHVL!?ZG3I$j&N)WTCB~|okYnNO$;qS;)(tT?BjFJz zu2+%T zAz`d&Ve5p#Ln-f`Jx6l&LHJY@Y5500)LHA8o3TaHmzF)Qys2iIPt&b*hVVVXylV$j zJh_j6ZTQ|Cguhy2J|vudH24WzlLsG&8oN>rACMP3hgfhpbP{II8}BrGlsET# z`s9J->>6fOE`77o(-dhmebI?X&n7k4aq~D2{rIb)>(!eXHd1B5`b2t!t1-6Py_XuTOis&G$OA;#V4b9PvK zZ?b*RGM-Zo>7ljt!LK-V4hSoAl#5IzGn;olO&PejvYbBNP6#Z{ln_`BGHPo zaU(p)bO4v*;D^p$C%LYM$3$}Zkk>}SxXQw~k-|hU><&hN9gOwHSNE7LUHhioQm|LW z*cP=xp0HV>G{_wcxYq?AJ)pdx)FV#U$m)xqW5UB@F9{DEQN3)TbBjKF=U6!7dc6y;v zx-H0yOFuMvd+THO#>GspvGe`-K!8AncZ;M+aG#bH90iae!V7gL3JV{O(Nf@ zLbGKsE=kp&_vpouAwBITJ&FcpqyOnFLzyluTO5&(Aia6t!@kTWw8DRk`MR%zToJroz?v zroyB*BCtG^+4kwc>q#|Nk|oU+I&balo~UwMA0k0|UD?f#wYT5)og;{gAjkT4>|B@g zB}sGp7B>={?z=^-E-z|oZoor&j6qN49Kx93BCwQ7e+_gKsJ&l-id2Ya^ zq!UE`nW;>^wFG0>%bnx(^3;Hd5Gy7Y+gNtyEE4BF={X{dPP5t<5;-vbG)_8#bw_uN znM$x0Zv&5GHy*efTX^kq3+7l?rFq`TACa!H=ac)B`!r+bTESeQXD7n`e*W@ThQ$@L z4auUABldn<+Oe6d6(PY79!Z_V%&H3Mn0oj>zQ z|8c>9tATQOmX(a+aql#4(IG9)Wr}u!CY7%(iPhwNGtX!d2|SZwCDLM{RImy8fd#_$ zz}aJ}F5V*QzV$QaUPJ3M+A|@^{Jgu$MpzVgwTX$3T=?}ZFFz$O+zxS>BmC&&hyh31 z2ak3nyd*2DrWb@A`lo`Ebq1#w#gq#Mo6THraK_ zr&+!nJOin3;!ZZ^zR`aw*FOJw=1G5rzs}(CaL}KF*}>Rz7C+pXA&dc@c8k11<&%Uh zHE&-37n2idRxR?UJKe`Vc^i@KH4u57-DyIWA|3AubxV&V$ktgvu#G2+b?Wg|kIUl; z#^oIg4xZ~zRzvKN@>qBNzay0e`0rf?lA&?1MUuZ~xSLM+@p8#Ek^YgLjIeg&{%`{Zhyise#%BL?zdI#=h zIBA2gnNYw&h#0)-*v)iAX;mHS`H{9DT4JGhJ>uolULDIYp+kE^BzZ2dN{ok%)&iSx z>Ng3PZoV7LX0#hov@`v+pqlt9fE?DCn^vDvm1e;qxV)5yATM5Kj&_1k$9$xPPWHih zJOf|0DcUuWKMxbY&7vj9y2%yFhpR^WF3_SmX29I>eV_%t`kkLN42PIesG=d;EMpqsgv?vw;6D~UOZu`UW4P7`9jEX#%1vm2wK^7HP zC^N1amFGLQVXoWtZ-mu8-+xIgShY-qFbEfJ=Xu@my*F?E4X4qVV>9zKGv|_peG_?0 zX4)H+`7X`j=&1Rq=%`zHBYWG)Xx{jFYc?gH79|cVw!Xkbgx>8sOXsJ%yeE}q+6fX{ z_Q7GLiQ}o8`z2Rcs#2FGY@S1yMho8vft*pKU>(Hh4&A239l51o5RD5grO6$RN8g<(;sSgJBSRya->o(zhC zDt20wN6;i79$Nd(_PVeSau@`#;Y=0ktFuhgBFDaVp4_liALSBm7Bj-Ax)U0~lqgz- z51}_-V7`pL9OUaTT9D%<{u*7klW0xhm*@6_QlJ7Qtuv_1`x2s8c27iwlrICTOPMo3 z?<73=OkM>Uc?H*vFOleBuItt2yXM-ao|fVcNI6#Y*O}NAV`EDzkHk3<28vl`Q@y8W2w0DWMXkLI>~}#aFCr566QNAa&$jw{mmK@JKS*xp1nEk zxS9Hc?s`S*>G*|OiJq5b63GK3{vsKrkXCqwv>ogByDhSQN_WMsM6SrZO7Qh;hHIFN z3YMF33`Mv}b%hVVS=$l&6@#m8%o^=_ZlsilwQ=1@ zi3>xKm-RMvz3|E7RnjaoR2O~p0vNhsT6`uWe+3XoH%Th=o&OmWmXdq9kGzb_R)DB* zxYcw#z&u;KUJ0&0wA1kNh684h@Trt80G#d2Lb8 zn*LQZ`n$ti)k0QM{*Bj0ygxpi^|@JslZ%R><+`!Ti>Li4yuZD~w`L$95tVtl$n_3y zBZ_c(xSI1uq|wmBWMGLbLZRaKil>d|qeE};0_)DT`6yX_q{3NYw@mKgp|mMfYo#~~ zqCZ=-=9&zAmcOxEA1Uy1AHH`dp1yQJ;wa@_$cHj)&mN0=ufmSH7Mhl=1H^yqZKQ9- zbe*t@NU3A2EBi(q-CopM=wA?Gk~lus;V(KvsBvw7N3l{r{5#i0Fi632;Mg)bFoh-B z&~VDGjWW53cDEy!_pV6!>g@f{?T3WtYb~jDz7HQ!U$Z-iPy&XHUO}X>y_He~SQAkm zk*$mId_6BUBLM+hG;nqzL<-LAwRu&s%DEE^cv{r^=&;CZV|Qmm+$I;#Vy;+(@IO&? zkirwPY}V}cZ|ptrjcmUIxU46^V|S;3r>0Opp`|aZ**YkXTe?U;HLb(4ls^Hy4B4k3 zdWC0XZ&Oe_JJIHsv@!m<>^{Oz=TC?7MS+=fCi?pJTDU@|yg|FXK@(|OW-^GTVNcoa z`A7}X!DH9))sALMsYQ~L25ee-^5(CINX18EGa1~3=4=Yv&-TTP-+)zt98zk-VXQ8r z_hvOVi}CzuxJq|NnL0)OZ<-6FOs-+M&_nw;LF`iyq#SuvKF|*=+C?%~8*MvPvSlT) zq`EZ%vQ53}bDo7qdkBIc1r@UEk$yhWpP2lJB=CK6{aSTt?ax_EGDW3^e=?pUQ zS)HZDC`6}L7+&-{Fbh z{z<_N0Jne$5a~V4hohYb;atkBoD+=yDX&qcc7D!b80ZsUKzj2)O#l0xjfOiw}|ywvyp zb67O>uBg&> z0`M6e0)meOo?ku(l@nbkyzp3;x5ZQ2J>Kt2CN;hc(XD4(VvXe~Q&IE*6*v{NV^*)N zSBv~c22lhO4m%&7bU!uwsw$TKl)%-wrsBLOW05NPzdMnO`I?F)uRFkLXB2tulaF7K z(1}?TfqbNA@Rp;Ke8iBo)sNMJjO!l=JSoFFU%obyeqOG2yTtqxyPR~BA+k(C%}SHv zaH(-xiER8(B(R$CW`%%^>G(TZ=l*vf!yaVUO#bP&H`-4AO^P0;jE!*N(swWL5=YmS z{DQ7EA`Pdg_L{U+E8@vnR-7=#CUV&8)bPgVu&*qzON`;TW%fd9v4pPW;-PO(sW|PQ zP>kfgSJM1Ai&~j52^6X_d7?t`GwAkXMd_*X^r=m|5-9DrpxXvK5eNP}9vx&|rm$l% zGCC>X0ILkrY985OUF5rh|6>v#RoJZD=(>87F$U#iM!SBJ=O^4QESiA3*e!R2LA`J|i*BFTz2q0HsSCURdeE>eO$iXTTRFYB)n%n;|AcQkNTHLQbCsFT zT~KYk`euOxnfp2(TlfJ1>nkeQz3_uax4ngc3+$v1n9TH9&|!SxMxPPSkYYIBtpYAs zV|m(C6l1_Uz6;DU7Ubx+*<<_lHD6BQK;*7~g;XeOiG8kU@2{hcV z?5A+rZf#;dg1icZ2pGQ2Bj+CS2ga*Gb_Jsi6*iQ?{J5F_2@onT?Vd>Z3kJ`>Pd)UQ zUvA31rIKN20ttI2p|{ok@(EvRkb*2ZX8|)`Mv&nXMS~sZ*N9`T!XeLkf{))8Pw2JJ z+aVQM(T20ARXrMp`-6u6we-0lgX7WjlY;~wXzO+hd;%5iP`&PxIeRLEg=fNL4odhD zSFK>L8N-QMZsPQZ`zePLeZNVdcC%}8)2p69{bmKi zbja@d%B%DEjObo)Z`b@(pntxm#T3@#^{IWnW-6D_@y+*l6`vms?cZK7wmm#Bra3U( zo7C_olB6OqwS^fUYlY|*gnXBwn=BF@ZK-*~BF>jxLsqWE7BKSaF$c3&N7j#qIy;fZ z++>wO<5up`f{Mj}1dRg*nhi=7Vg7l-m~G0K&2O9!ItV@-j~(=I>yRytt%{lPpXHVV zKt`JTb(F?+T(iSy#)m;E7Hk*ecH@TOJo;kV^Hn{&g9$JNyLPf~K@0|Sn@#5Hi8q4h z*<1MKFb)%PpQ|j1oR)5yCx<>0*V}5kNhnJbTp7h+F!Hwt^2gB)zC(K!VUhjY!V8m) z_X@8+*0pSn9I2yuEZ|WVir#DWC~rflGx$NZ9vfa=q8Z%Ht-tiCVtR1`!o8wMmGH8e z69j%YzR#$vA1n6LNqhxwTJGl|T2x`#PibA1z|JofJ3ir@4>I_Drhs5sKO)R;?yWmb z?WUD*(46z2UO$uEV4CpKxXp#i&swC^d6ZNH)f$R$jJ~=+#jiFr%LA z!O06&(ww~KBIB;Ac!CK&wn15rXqgw0S;2Q@MeW$|d5B5_Irjbk~(oi1Y%`9Y&V++=Dpu>`=GMLs{ zHj)>j73a*Na**xV4%oL=%F(>=O+15D z6bZL*Yf`vjCs@*dYZbE^#KISEhVF`$CAzI^#a4^Cj5qzizhkOYr$y$Fu#|){`fAEOK^gRL4jFXv& zpOwgI*R2b01n-EJe^x$X+Q${NRAOITik#Tkr9+l>(8 zpsqu(jO}V0yD0Mi*Df{^yBce`Ry`Ul_iHHSnRXNC$)o?h>WEHVU+`q$a6&{KXXEni zXeXv5Ik20zSpT(~hV=GlyV)gucz_ym!LGwf?r3Ev;fv++(QCtI;%`BbjYq3e#KU10 zV4s-z64~?lG_f?kBKW&YOU+h#c7JzXq z6LX(ChC9{&pG_~_{?n8g^$I6nPD%3>pfZW_c52_5tiDUOt;b`NJAjJr#D~7Qa%VLz z@YpTV=!q2g{1*zLHDSwKdgCr|5_`*_jH6etmaCnWtsOd`Vy!Y6^nP4o_{M%d(qg_W zVwV{GaM}E{me;U`_V|^T z;kq?f&*@wQe0lQl4OXjQ;Y!LA^=FB#oT1EEeH5cq&iN_G(1fYD_@?+u32#V;STmg! zrH&$S%WnyWbSSFWj354ryGr#}k+ELroCuHhA6tfGrMy3Vb46nIm3atT@VrQRgaLl^C4JyjA2XM*c_Vr>8bX-SR78zL3vqX%%`;0`e6#y7ARzy~n7m>oK5fx$kXv zZmAb;6sDk3HU~L~&Vy$$=8UB?d3X=vUum43wk|w21NEzHiKZ4>a0Cd#Kh6IE9ZYIJYt@ z2)B3{Js!-<9?sO)hEJpoWZIh2DbBxtYh@?_bgN?DCap4sf#Um)8VWQr5!ZQ8&mf4P+?`DQGU#si65gv5u?^5ntC>F{Cj7^ z?@WIihJc1g%KvA>y!R(ezY6gURDo8c=()8UMSmLgZ(1XmiNT_pGSiXHzqcaVg}OQm ze?LnF%!*|(XU=WT0${onJn#K(X)@6bsmP;H@dC?FlF(B#vOL}T53+)8W+$Y|?APv~ z`R%km(yuWPKQ58R^yJ2J$axA8fGklQJ}N)N6EZocCIa#R8&R9KQ-rb4HyqZz-a7i>prUBpu?*3^h=>##eADL4~>tHA+rB z+a#J`tvU!%UT>eymeBNePGQ4SkIpD9>@*u`c=NzEGbcq+@?X7JOdE4ci<~=B*+SB& zP4(|t>RzkLWsi0;P3i;JT7>&{rYYNsb?Rvl>?QN{Baaw%9M>%5v>&_oQE*mxv?#`B zd`PXy;Iph4=x(~_oA*IU^Yg6cTGE|a#0bUDm^*&G8n{{a2-N-3J@;0<#^nPldg@pE z@bW&iQg-{5(e81@3WNV}^WOi6R0pB3>w3~{lTIzr^S0mbI5_yW^ZtnKWck}#e9C=E zLqpTD`U@{eUrCibvl#v8wm3zPlwn1y31P;|rg@6k#a|n%5lI&K^sD*xs}Z&4KTEru?2E)y=$DEb~36&HHm5)Wu?i5?zxey<{AL%deb2gYYYNQ+t z)_mb-%oRUHwyE;ysq!nh57>OcD|{C51w#H6$WC+4-))5o#zU?YJy(-~9~d*PUiijT z6^ilJDAi6PlJF9`5_K;UK|dxka_4Go4OvXrD4`?=2U##mbho3_d;Myjr^ER|=YrK+ zIz89J^uJe>iy%ug7tlpDr~CV(!xO$*Neo zkqXyWS_XIAUTO{*b9wW-S=-v{i5!EJz_yRF+ufFJpZ9J)EZCfps48@pNr3C7uq!P? zhgT{ksI?k@0mZ@_pTT3TiD>=5Y4I3{0!WL`1)gO%vs&H+k}hdAY#Wzp|E~HcMcLdF z)|WD$o2CT$xjl_{ErANMq~R>siae3Twok6xLB_)&@tVQYvA+LRd;U#P>5w?j=nW5? z-yJO7Mv^))K4n8?R>=kYLwNbi(x$rD^eY`es{N_tWIs4>g5Dtj2)9qSv>!=UY;4!z zj99w0PMk}~;6QM#C%+&8D2Lo6l|hV)U(KUxh6-flsEluqS6SPOKc(?R43~;5>8Bt% z1&N+l4T~$ipgjJJBbz`Cld_zbkKT}V0x3D20`s}11r07}q>-DbG_>(3-~@7v|A7T0 zi8mZ-p(C_J97HKuybFq`$(i#SS3W&ZoqY~&VBP+r)hiR)6V5FWX%s9fEzu~0U(%7N zAIXS%t}t&g7r6#^A)LZxDbr_&-JJ|y^{$H@-gZX&OjNz(QGMhw17EB7{Rvc^B9iuwnE@Pa zDmYwc(8-0m<_hg(tG=ltewJgt^AQaUmzlRc~Qf4 z1!Z3v3`nWms<)vfF+Ec|LfJVvzXr#9!b~|tR zgkiFXbTIUeTY1ZaLtE@b8je1e0%uqxS%mDBG&UXqg^$a{!nVtxfaK_-EO58Q(TCOl zhqtP=ev=1Y*^op2NCtWBzMtZ4P$X(=4eOE>*4oNS&h)1cu_yuQ1hCgJu;LaC_(Y92V5#cZWpt`k_romFe9{EOLPE`sjr-m~I%Phhg`K{&2uc?ZZJ? zvNV@S3IOMsN=YA)1%o6%g~;yb*fww2P-*hv4NaRyRbU7ZaHeRGunz|b`xnO`VgKJp zW_dvpivqTN@)u-a0zd|CxtRQiJLZ4IDvItgIW#3V>Ew_qdBSXHZI`-CxE2SC(?D)v zD&rT^GAC%+Ibg>+o-{ldc9})Z;T|^{9`$4i9_X_fh)qa`ZtbLY#PLRBX_6{N705iU zJCEDS5S%4w zc*}XcXW=DC{(>wD02=7*M6ToPxoyR%HxcU4x&Fpo%=Ii5z>y*&H0L_R1sVcBfom%O zOfkM-dV*0a?d=g+qy$XQh(yfE-_H`;^i*K?pk=% zot0;HT@xJ)&#*_%Bp)#YNB~Od#gjWjJAu+N5)Z2%jC#eHQwdf2`_(+*baoh$a@UL( z_DIrYC6T0xwJw|1SD2N`&1r{XjlDm@QC4=+3-kg+p{1v*-mFkPL6>Z4bXC}^sicaP z$SH?jUV9gx;U_4X8F_?LQ$Az?s6{ILe4<S$M>SgC!I{lbrx&>GxT=i@?gfl>7>ll`>&fE@QM4ZPJIeCDF%uPWjEd z=CqMU0;1BijpgBO;5f#S^ikFldM=++cSC=nNrCDQ$=`b?}~;wrREZmoAgLS{=IXU&7qY>cc5@+4_@L7>fgf_DaZ6 z+W=m(hw~AZ#J(fUreziTySTN1mmey0hL!?_!F`?ZB0m2yo=uJLH^{xO40@)XURy$r z_q`&%w$II1J{V7)F$d`A-{rL5HfA|X#B8+E+&-z=3Vt#pG@3~J?cEGvV2W3M-7^tT z*E#YjgSWoZ0|O8*lXjXv9C z&_`z8t8otCZ6#>o5CbgwWh;K+6R6ug&;WHi+1-ED?NHB87tbu=a+dyG2Q0L=r*g6S zcQ-E~uDazcoo8FH^E!a52T8_Qi9f)(i&Z#85=TCkURp_jzWuF-;iN78I&v4Wl@5Wg zuDNci3j3u~0k_o&f5-$VH;k%=O^z%*3%-DRmjI{3xaBV2V{);SxD@B}92U;2T!&=-mN;^A$Sc;$Boxh&F6jpRl$u* zt}Km#^i{x4H{$k*^Y_}o{egu-^_eVo(N`vQ54`-8z0^oNC9h%dWDfuq{p|1_Z->aN z5$fpr9K4~w`Ul>9c`TD29A2MB7O}`wY{=UfMUSPuoZe20tcn!`m7r#;7nV{gUd6bM zBro5b;pT0n=Fln&r#pnO5{3PzLmd5sZ(W7&2vMH2OmQ3xAbW(6bHd(d0EOGlR_?Px zDhi!b(!=Xad`Kd@&p-u$?uR($MX(_t4m@Wlwg0v8PZifeU5|#X^qU#ghJR&TaxAWd z6_B!Z*IE?=Bq_-T06q!1kH=3&>@M%Wm_saRl$;6K8JZrTp7b>)nPBzrFScJQ;BR|` zU&gdk+mku;2!ARUt^&ZDr8Nt9&kJ`-`hF&R{s--e#Ti=)V?o9j8Fz6C52QfllPL?7 zUk5??_4t34Um4wu@=o|+Bi_oP>-p>F@*-3Q-?;GBFyXuAQfGiexpd30!jj{b}c4}e+3!B%Xi{3$OA{T~(E)%Y%$T?>o@Ei8l@3x*T+ zsa%76Wr46QLDPc%AXNXMxwdcVPsy{`eq{S6@O}Rvg3s`_VpWx}(pqb}vy$x=*E%Yw z{SSOtUVL{Nk2pV^)Nb&N@lQrH;y)N&E`I9YCEhJAI>$|?gy9kPQRqWZKQ2}t{nrHU z(AiS_S%9LBxw-YXYFiR`()skDH~Kmx`{~TLgD+TY^9Dfu#tgtl^N;*Ji$$ZwTq?PW z(Ja2#Ji=AApRaxpm3-HBA@Jcfb7S}kANx}>^`T|g_ZX8zi|~&iztrM@sN27&nU&O_ z<{Z~kWHY+T)&abde|fxJ%4_D%VdL-Z6U+zwb02yLMUVCS-&R3uwk`MkFNgYK2V&*= zVbgrG*R7(^IBFPR01&4v4)OqE@up79&Z+CB70_o%DN#v{ zujwS8K>^g(tN$!oMNJDGbSF4r?V-hiNFCygk{z9?C)6&?M&8$i1NBZOLZhQFV{PXq-hu!%vf!@Plft5X) zz*8JWda0>-?EHqp${gUR9TksqPB6g={mz?`m#bYG0#^o3Z#;DJ!8!s%KlzuFNK8I! zA=>@^m#a??EjcBQ6KGUDbFdQ}9f5Okiu;Uq zDmPqZ&~XookUH3rFT3a0wu05+`hFnXf1x&q<%5-^oR-`YK&3%*iGH3ntVm6M&HknRD=B2D$h% z@l^WBq0fKz)?X^FTO(`~&;@1aZ{08Yu~7#dfaKVBmVtW;F{EcgAovakScT$ zURcGfyglyfxkP#vF$n<7h5*29{EbxF=_4-cpP@F`KDd#EFNs<`BV1}TKjjL9{dKEu zuXU+O-N#s0^!;$K)^Pmef|Zp~3lPD0)z6%(!>7sDelyj{<$YDw?^uQPEbe$O;Pad| z(zq7{Wc1Megww8HbKV>lX)3@IEBqGO45gL2|I|@vVq|6i#>JuNfFy`2HE`ZOhe#Ns z2y1oOi>K3czZG8$3%&K#Hz_vE5qI{TM!MC?I}MOiLeIW9MIO5hRxJ?jXYQ13_5nZ{ z!sas*)`EakV{gMOyb?3rU`8c9dkEX9B(y zyB98{7Y)xb!1hMK4k8Lm4iUI)8<8CV2`v42df}~!+IM-oc2cblDh%Z{$2hD1@}TrJ zR@&_n%ug1JC(G!*y_;tG=p@2>>(AXj;Ogaz^kA>0ok7&1u#otaa)6>$=>8~FlnHUx~7%vO8Rl}?TfnZdk5wXhfRI4Go5Ot zwbUOvYRCjXKVtwMUZYQ0Pjjz5HD_e%V;^wYjpj0qfoqDbO6zP4nZh$7APS3bPa{#S z=1EhQK3Ig%e^~;6dt!&TvFvNr3wWA&J0+!~r#&dtTouKPg)>{& zL}U7DdH?yE8;b`;D9O4`1G@7TohMxBBCPC6S&@o0q>pf>r8XR7rK7&>EKEeeqaQ<> zv>;7x5H{F8L+)M>cZmpOVFxXfN9L>9N|pEc%kUUw>Vt}_586>ZZzCiA^CB4=?D3N; z4Cq*$Mexo)vJ{USkxP1?W7i{_ebqB`6Z7hyx6ahSf7rdnC@;*#SzmoZ<1>)FcuFI+N1F)RCaL8r$sK7?GbV8#~336hqAQyH`3ZGyWmp- zkmVPdKLU#f1B)jR?P6ZdSEwN9*uC|-eBowOh;sfxv0(AiH|?Z0Qv0pMfc+Wsj6aPD z?IIwl!ElUhC!%Hw%3;k)1m0!)`DR|vEBndnmUu$qNeLMPgpI&9d#?vJVr4KWwtjN{ zgJb@Uy(hk*e6wSy-Mm>})s>lnc>tjEyIqxVe`dN%6JtD7vxETCUA5nGjZBWdC6c;w z`im<^7>~hQ%)m)3#0idCy~~IrDAaVxE*c-R2Uc2>PIy>cUNJb6>GiL zu9%+P+TVhTLYr1{y^&=~QP9*^B;NiYrU#Q2o(pW2ZxpT)SkMpVa$&uJc9C0oj zHG@YS*Lq5sw|ehYxl%QJD>M3PDq# zEcFv}BG17rd5;?M7*E-f((5iZS5JWysNsF>Dq^JR@xg_NISJ!hd7dK__G=ejlwBFx z|DeTPm2MoaN~;%OlYvksu#Ttu>Leh^f8<*6jzqD5#IP;96W63(p&wJmR0?5 zg~oJs!Aag9Df4Gkk}1)^>{Pt&W-m)yBm)OJ#z-|#cO;X<*7dGnGm33GW?Kq@ZM$>Y zdo`L>9!o~rR~ePwPbuD;+YYQd{cd^SYXS(WJmHn}N1lKd?2~_L!5%@S9s6VWE+nTc zV6zRjzYE#VU9mw*E3^y4dsnobo{ajMqKJ*Pi!H z4WwbQW~@{pS82nX|`gE~4j780A%JwIEUi|puLhKZ6msNUnXCB+RC`kKV@x|>?? zc9128D1O~SH{EUL909n#1o|OriYUO#m^-=ZQ>e5x?7I`&Un)EHUUg6^d)swQomZ*j zyD{b$w~lk!#<%Mg)iznhGBN9A8!#Wm2dJIpeU|{9;&kwYCsfbK#`xOn(jgg|w?t4-m&R?iM={8#nX(R=&Tuu=&A!6Q;vt zks%e44c-@(BU7N4QXyASH|4MZ?bVO3-@Y;B*KsYq^5N;1FPFwU=&uxeo)3Gx8+oHx z$R#<@d*qk+J9-TA0>vOP?gji724!>o-BN33F?6+VJsrAx&OXE8e9pZKr6J=~v*78D zh^qa;$du??Vn7|FP7B;D!V&=lAcGkXOwD*HElu*^dB3l{;--eXy9hnz8k9f%_-m92vW}M1=T;3 zwD}PAJa++=g&hG&=uvHW^ex&{E!rkGS~i%#lPk37*qCsq+O0dk&x(2$XgLI09v}Xn zEjP_Hi?pg-uMw%P63G!ZEV!g6)38PC*?4nHosLk07C} z{b9xBII3-h)cNuB$`$)B;s2-$v%uo?v`|KGemQo z9WZvITg5Z;=cO%km7HXB+L0#9CSxx6sNfc3JFqSIBKEBVsG)-NnMw9u+yu(SO(*T( zXdE+f%g}%?`D5I_rI*8BE%?$~%ge-1A61MgL4H1Q3Yd<_DJwd-?jVjck__J{(nj%Y z@k<$iSLT*!7NX~q7?9bXBw<=R4%3)}6N{`mB@-zXDZO%I8GTay5y_93UdO2)!=ao2{M8K1ZfY%xE7Xo~6#m}ge&$%pBh^w7oDD#in(McKn$kvufx}h5TpjxftOtF6?K0=J z;P2}iJhOL})kt(z#wz)#bj&TH+LLATUj3AJzWQI&rS{3JZK`_vHeGJ1z9QZ+YKGSt zFhFw|l{oqkaAY>3s{4n`I|ju92E#;#lt%2S+EEpeTnoUJ4Ol_>98`9mD`Vi16xVBA zn~RW{5)PEiIcg)(VA1(6HnM1Uv@lQ-1PrKme|ma6P4lQcX|&~}z^~a{D z70<;|QJ5FKGrlZyrUOb(;q?}RKX0**yOH5j5mBh(BeUXkA{teS^f=J{JZCg2w{jTw zM|>7CmI7}&F&JDq2T=~*MgGmRqSIVoT>jiHqNI3W-1`31pQ_^G6y*MT5Xak1AIzVN1$K?2J7NOew%H*_iIZET%%|jiS=~>wP42} zOD7_pW|s(8#CUPQJ%TJfiO`<;H`8G{q8mVKWWY2X zYf0=ifzcLN;eE0E>w|fpxK5UF23VC^V6h&e9q0`SgxlTBwAl}6vX4&SJ)UnD+v-*n zh)4cE#@+**>i+*9mz7m*$WhSGN zEiyBb9im9xNdC|FIh4BZ&+q%cuCBYT>wcZr`!%2A@qE0VPn*|*dWzXTck8o7R1}n- zDg@3eTov(bD-a!OL&U?e*Nd16=hJUBJi(IjuqCbD6thiskYxm#8~H`|ikjJz)-r~* z*&YQiUyk){?sI3(R6_pI3-94mOrXsO{FIgxZ8pFQ2HL6voJxm}x?afuaS6a7fPvPqCAHxU+k;o#v*z zQk6*+U3BP1fvXbCO))0R}Po`CnPh!U}_ zw?IX)M0)Y!@@+`g#=RVI(@D*_ZJ3UykWOsBPLC&1A@AotZqVM4*erU?i<%87sl(v# zd_kh)mG&JC7q+rS%f8wD4%32inftele0CKGfQmv}xxKhcWp?)IZYZ2%abBywUg?e$ zJo0M{jhd-(QLF6!^i$4%)6W5@Os%3;aJJ74kw+{}19XBeP@;(qa`NU#UFi~Q6wMh< zdu}ij>JOP=xrfNjJ$jF;_0NXzBdO<*3ipCVNHShQiKV&PFe9_lq=CGor-vC}2F7l~ zDO3HpRKB8}lm7M{OmB9OCh*u*nL`d0)xp$kq*aj~w^Y=Cv(POZKWIl`il-exIUPpEN*7lGmTDsV^k0ToN=y)?#$q zS6Hp7=1QeaOV7QRnj89VFtGr7Y_m^#Nj>5uH_T+Lz+vO{tVO&u$*KN-DN zSaFYgwQZanVn5({#%7F>%qHy>ck}O2L%00x*_0e1n`^dUkrs>j-W@bi?2(=KL>L_Ob;Yal)p7bzCTOeIh0;`YJ!c)= z@|~5PeMuL8KBJi27hNX4L3jDMh?z%bw&AxdOp|Xeuif(mciq{ilqYX1BI(%{lOLAS zpXV90`!ehhXf1n+Sn}n*NAs;h3_n*f%f1AeVnZPp{tQ=syXSGkXHx{72ZLN~-dh_v z%lb7MER-F(!jAKRm(WkVL`%n1^_*g4lW;!|I_l$lgC=@|?mO;5e$J|PEUpE$zsRuZ zT2$8{QU+RT?0H$-XNPVZE%Q0sqoWiw9{zSy)R7M74DGwqRNE9XZt*{Aa*@*JS@b=joBAKI8Zt{_}?}6Sb+-zb>FFMMH_$wZJfm2q## zLW7vQ?U+m3=_p9^#Z_vbI@0C+S@Gwmoh!3uD?hVWY&XtEL3nv`n8;SkBJ-XS$NVzb z-KDMbSY^dlUu*eE&-AdE59Q`pFwexl6V5o;n2dcr`GYIdB=%BQNsvhXJ2ShEab_1m#f+L zWJvVHaA;0blSViwzj}Cq)I?q8J{VDC!e*I5f z&a$5_*0Xv9Hl`jgMrIvxx-r`WRM|!qkE{N+dqU+rJyKMZoaU@eZMAvDkW_`CooPP& zF&RA`Ry$NakC}#(@)asT%EBEQ9{P9}HQnvq)9)w6Do@9miF2W3_7IGWbfSm*-x}c-hFyr@=AioOCWfGN&kt;sywD^GlyM!lXn;|JP4oKD{iFv<0uXbwM`6FM9h{ z4!8$e%by}9H(B~54fN%iu~P3Ve`Ib>#V}0WUPGS|PQ{koBsbXGofKc5(ljuoy7O&Q z(&OEYT28f1$c`QB)8Jkqwg$5so5#gzi(U~6B_+kX?E^#(MB)qdwEh@v?NY0 z-)dw0M)~P#-J4ChcCQ_J9&tN*@p%Ti!-A21qw&40jk}=s8wJDEOO~-Fp3j>-zMg%% zw8wp-^O*NUT4}7pDPr9hVRvzN-S-~(O_mXr32z@$1(an|vDIpu#c^rREx$Co7i776 z^Vc-l7|-g=K53Q8?rXkWPlFT1;;+Xhs-OBH81k`*E2_3Ls1;;X&;kYV z@{4DwwC3(h9sP4mn1j_G>6tp)5~oYllIi$&wZtsTo6>xnKjFn#&APj2AyUm)2Huv~ zErsf-nc}B!nF^mV2DL#_0-z1{?YuHA+#nuUNw*u56`MUTi|f^Pligp^A#O2$U{%I3 zwjKn{qs+5Gb+wovC|NoxP_kZbr>{KwXP!<>-rw;i6QT(l_{BA$sN91Kb5I14n&Y<~ zWWekq<|LmBjqDzO zEp|ryX20kO!C5M{5K_YLdAxtV;_JIqOEk`#yuKJXl!@k3iQqfb9;tf1Rm%Pxspn^{ zqF~X$w?j^r-K*YZ#^S>=6^9U#s(O;0rc(&ghSNmt=D)a2?6J%V)z4xkpf*GOLZ1co z-4FSJy&;V(4lFELF$enbTgczCEBnNM+D$f<;0QZ~s5_*LUMQtz=)@fLp*EUmuD<%q;h!X_qq);XN5i8FAek&%;UA;E z+Jf7LbD=i7FwbfNf1P3>Z;>WEEfdE7xkVK<+UB*|%SMvTh#{1xGVVo6QtM8fd*{&{ zo-x?LVm?eRgo#*L5*(A1^`Q)7p`hm<__IfIAI}{eFD|PEWs%JZXDQGxslrGtz@BTD z{&bmMj$ca3_fOg#l!%on%IPrwU0n1Qr6zt9r)LEfI#o|NdL4m8=yVb!4Go%qD=w#& zx%15hM8~$gx3#R}Bp38^85?^XWD5pU2dO&YYsLH|Iq45xg6sAQ9QN;MGeZ_3X5|TDr!Pmm<#22)jB;);Ps_F_jbi5sH|;9$W@avA1N;19WE>C zRnPi@+uVv?B2R!=2!3_2M2-Mv47JSkQ5s6TPw0+EQJ>X>`qQ%vp5oEEI|_@bISeU7 zF!Yn6G|`xrqlZsWJXGJ_<$GDcp8C$6J(rZ_DyEb-UVfdyntkqjY}!_bI0{uQ3jRG+ z-g_$NwdewS=`s6*A2fbRXqhq;Z<S^Ep|!4J z-yl#Uv3XD974e!<`CW7pC~6LRR0kt!tl8?)?hW^s%~~EV%OAeGyfKOgdnxk^=Ry(QLEOf?J9zV;=Oq`Na+mfv zx(2OBIQPL<;~mH5bU1q&e+GuLj^B!ZEo#r&vPAu2fDkd;5$(IkAbAp{_Ehn;cJ^ob>n*3N>a=|^r#zvqMrPb)JP!^#B4`=w=BfyCzVL$_S#i4rj9-zLlWle+vF!1FMkaxi<@I`i1%}tckPW= zC)NK$ds&z4!OC0^p_d>~b09gx86Mw(?Axd)4>`yAw_n7BN@7qSztP;ZMT&dCAatNC z=k`K(5aZ;s8Dy&#YRFEEiT9DTM8y#;q=E?{X|l6ZG2hyJXYEe2$*rQL^uf8WSS&M> z;6nQrnQ<@6;@sWLyIW=@?*z=HI)%P^bzvd4w(>Z^g{YC2*@YFDY=fF0PzIBd3CZ0~ zV{;|6NAJDfLcKFf`L>jeQE1WTt6Z^-qOX-YZ4N`h-B$W?a5%T+>$8MH#bzrSVkB< zPo5YT^^J314hpupw+Ly9M-Cj4DkpWgg(WkU3syXzj%{ zU+U0O%oleWe4z}!Y~8}^@++w4(s&Afas`US3I&xwB@_)*rD7OEwELYz_jG0x{p5lf zoZj%Y38B;g3c>5a(>^TOHUzZ9)H4Mk;=2l_z7PHjYP?jNZ1K+=hFH<+xzOUofWMR*ZVu z1l1w*24&!>lU{ii)W9HDoDj${rN5dikV6#k*SF*u;&uoyr9O)WwfH5`{X}qGpFT9B zmeAoN>Y;E@a6$)#(??Yj&=SjxNVN%Vm%e_?#lor7D^S70;(U*BiW}S$LO@=X= ziAdEB*rzkx4#Hoe_C!#qYEbZ_tBlZoP~syHLyr*&ez3f7@k&QRwHul;pCF_kd9l4% zCfY^=E0l(#bAQWZ*bchA`3FZ=&ho1ZO#B~h zhM~=wr+@TA$&^u-nR6yBBP!MS{{aaOt4- zHuAOkOvvNSiJu;QT2=Pg@e&^@n*Dfg;&?$BD;Qgya!_uj>aezXT%w;0p4k{~gz)x0 zcjVY1#+5;Cw2JIH<4TY1?(%|e(4?K1*u$P}bVNbnzHT|$l9{%nN)=+*FD6*aeWI!>C$?W(F1eHs@Nlhc3Ft&>%BKqBJ!Jk$n)Ax9eiLw48`y*vqmPJ#k3StPQ)wZ6L(K?67Hr>U9eKqg6&n z{oG0aAUsrC)=dj@Y3Z{X*WQ^ptF47p?6KSIC0}Zze$C1Lw{Sr!_Jp`p^q(>fH`I z41)=LdYy8TiACQbJ)4a(zjI-a{6v_M*Jc{%|7E-Q1$m^#4gtk|v+6lrWn)mK4CT>NzY(K#nPkw+y_{=keKq}68Pb2G~s)T?6mB?hW`e4P)xwGX|| zCR(21hKR1`@ay?PMAV)9bDVjCImzSN&x_mH5xu>wdMHt#>f)8O6*Fr3WIXOCbx?EYL1kd`$2 zY+76w7F*}Mc*;t;2;NXkFEJFftPinGFU2m^roChHgf`$Z4oF9 zg(BxZ^{hy#@~cohIxD$isyTOa0QdExK!+O^=7z17zDLhoHEc~fS9pv;LbFxA+)|I= zUL;hzYI#BNVtX`Alt9bI6Vnt`v3qmA{`f{`v@OA)DnI^-NQ+V)N&bqK%24&`(RfNT zBl0)XU@RaeM;~imhN8e?%?+{CHwo_fd$kmxoKXV`V(SrU6Bi=a%XJEYRY_e(H)cqx zQY52!zNS}qQ1k?o$<=Uj-KO>Zq3&v~3iNkw;+nec1%{x^H-tpc*+)`$h-|nWK^+yT z{3hzzoQcjp?7_9RMs6p9GrIm1{uQ$d-&0(WL25=3!(OQ&)r;VczO-+Ks!>M9=s&(L zq)Az?!H0{8@bo#b)~N<)6uY)RI$hP4N=wpPOeS~Od-@sHvWaL+rEc06`ONs++x->~ z0wqA_q*|G0p(vGV5sis4%yTfM{jD!~{??aX8&0KjY-`c`N>#5h$cxtO2wPNL8!MON zzcr;v>UT9{R`~?A?iWvr1&nOab|D(i@V)mnc`_7BivvNmm4%}$vIrI4Xlj2#MIM3f zUE^}{;9Rc$j5A{%N=6lJsxmF4z1%Gf3k$miRkkQ6Bbn(m$ZJ4sUpi{84;E|1h~98K zsy*RP)4~sI0x&I9u(qG5qLCU~djH)W&LJZbABKE=E82dZCo3N%Q|(uuSp%!D_}A*& zvTz|bNTO9%|4x#g&VTt|?I?Gx?h>)R^oqjkjz_TinaIpfB`)Uctv@Hbm`Ud(N6;|y z`we7_?C77Cb3PjVqDv*PLq|B^x$!Bf9DREKOoAU8&5w&9w)BH4NSk7b@7jDE%c!$lu>S+u0|$`t>(Ixi)%L>=C>C z(wZMs_!mAGd*Lr;z4DgS5>k{LoGcyN>4~yOcsb}XJA%!nD0k)r?TEYum}*exZ68%# zUynOWTgwu%EP=x9LsfRyj4b3&JG~OE(P-m{ytoPMnRXi;7ZK^6osZ3+ zV43K~C8wPh^Dn-AyQE=`t<4JQ`?l;)1&)Byr#qHl*qlDH*r2)mh|{Ox;@5p5C6BEw z%?)pdUiE*L*vp!1^n_g*S8N~#?l@HJWy9?O51#FA-z!VX;%H4LCBH`hfiLY)!%s#< z$<%C`UdQ?!10T^Oj*&8in% z7uraVYo9gV#)d=bj;i$>-;80@IkkN-zGpwhOjJsNp9b~vUfWC4wb>t-I!6pt@2vPx>G+8E|?#TFQkHrHL45i10)b6``Z4lLpaZ8UC!B0;$ zk6qhP-ot`uowOQ}&MdF-^!tS|H<+nZ-s})Ufnp$@Qs!WCt!njjI6YufGN_aFIhIKY zm0k)4N4s+qWB0+M!hXg_1O0v*RTXwFT`~8YD_Z5g3pby>h@y!mjO#sae=Sc|LQ_Sl z?A=s$D_puz{Y3(texb<<1+mf|s(K64%<|vG2_O6l)4Mv|U^z1pZ$# zb{#|u`~I%hw_fTK=Hou5uF8@;5KXx~!n>H(i>9N7WRW+vc)98nBAoDq&Tsk%IK0eX zfV8FV5aPsT1|F_iyU$bxYxntk-tY*3fxkNhPq5m&5<@_o$->I?Ow;7mB*PE0<( zy~_lJ$SHuAP?Julf(s8k1Ze@6o25gTo@j7nK*6aDk&)-F9O_SKp0CV57Z;f(Df}hF z)n3di-SpEa>Q~vq-vae+WE>`7y_z{nWuYjungZUT=< zF>MJau-oNnvyA&rc|ef!o?C!pBa@h>j&Z~=AX5T>OhKJkl(`_*L|mu{DUplCy?gh} zHS>%J`bRcIDLs}Ll-o8?lmZ7=H;o(X9|)B1LAJ`!7@U3qr!D>1p=_ubXY z>BI|YstM_HcdMKqX&I?Ej(37k{3?irfJ;vg=}CwscJJfBd3+Uo zTKWEQ093$B^@I|*9|Pa#PJrDWmpeV1qEW;-$w37%Yz0*3eg-6-Ka3zi&vy-kCYFA@ z=DZ}dZRtCFxs8q6%g?8y<=MHSO9&1G6IlxLcy|@4I=8k2ue7_*xvCA$CVsH-$}uNZ z6c)&KYSy^FZPPdEmg34#2>`%;gK`X*tgg#-b`=1IVV#+B3lpRSy>|!K6CUBXKRv5D zC?aG-up8QUXRY*a@_+(T#n?jrj_JrP?q~rq8=XE`7wjtT7YwC>n*`WjuWfs8;qt;W z{m$d1^#*I}oNjVW6MV)yKH&1e9Kq#LGaa0k*KzJuKqUGJs4&d$?8^s1gi4+_r-={ z6h=!o@{Zk&no zwZ?Y|Uy~r9Ohl}mve+n<>M95kfRV+IOdNy6EOlI&I#a~&QX^nVs_!Dk7BmXA?axu;dU~0RElzry3mf! zcp=Js(qeQM?@^(#|6?&Id9m~u&0zEJJgu+WkO^k$JZtE^lSujWcOBpL-5GjX5b3@@ zJfwN=j2^x-5@5ja0v$T4-!LErfdm7d6`Hh^i(W1HYia-`e^u6%{Pmwqp-|UBW`j$v zh+PE>{~x{W7Rt`f3;W1gMlK=z|LhMFmS*f{tkLV_!mR;oDYThPfT zh%a`Wai;&dX|tLT{mc!TD4LISGdOmu>Jy9_j!#X>M(CA*RWjmF!LL+hq~r&+gGF}i zE->aAi=sZLX>n$U1XaG)7NvQ5$7Wvcydg4c?PC->&QE0GM+f=pw;(H!@Jo;nI~zh1N|pvSV*N zefM?VQ8xj|(hlV%1c;)_`Ap!DfY-dH^aTO)yu{YNrMNh8ATMz?;+6;rq{*mZd?q}Mw$JWhyNY@#B;-|nnt+>Dr;NdDX2wpElMbRqr!{D82 z8a_ExbZ8BTxY+?6d#)B6KK*&VKw@P&eCV3ST zlLmJBg`1(oapwSjFfEGtwRU-DcGZqmaM!91iP5s+=|rM!j2UHrp(_=FHz~m}Kl2Vj zBX+AyT2hnD8vL`2zWX;FGH#R>(@CDBE;Mv^s?R(9Yu_-|+RKu(&4~kq#Cf$Nv`7(UVNwRGs6Dg_RjbvRSB)hE`>g1g=`8OB zs6gXNK_a7=h>o%Du-+%rtpF?JuRjyi9E~b|jd-5DbS!3N&O@uM=FGj zm{yealfBX1WSF$Bt|^iZ0eAHV^(MiiEB#$_7y*lad31)g#VE2%`(yB11me*ul1d3< z&3}&F4Yp{$fVj051KV*rQvQb6Wy#%;whE~vjM_hW9F6$3FdpIb1OZ^X*Ba#(+`)VlsW%uOA5lSOZSNTJd2rs6ckZN#@o3P*MDP6!=o+-}V)S z`l`bkaj)jr^hRNNseevy6$@9XEg4+gdY5F2X4Zihs`jTXiY(aH%I611Pic{S(Y}I^ zj#V$uARLzX3M?_znos!4v)+oHo(V4Vmzx-QA%oP$C5Bs(1fg>yHUf#>o{Lj{?h+fAL(M>))-cGex`HX{Gj&q=~ zTmc>5hk=PgCcBy&hCogSMm6|8V-JhRsDmVUijp59QL-(U?KxxeBXaTAo#Nhp` z)zFF!EkNU2jJUe#LM2+w708)T`8%n!@W6*438z&`N7GNP>`ND$gdXpT{5~w`Z4ZPu zg;lZ$iNSY54(M;IB!qm%m3H6)2m-^>B_7C#2}5a~7nS)DA|zsJiL_)bj6dF95EI6X zSXyh0k*<;>LH6ofD0({+M4kb)M0hSL%w6HU2S`4C@#7F~OS=FSlK;?tUqIGZN0s z?PU;4Y4PpTTO+#8P5?P#0>}{-1HZ@-bP^f}SA^$P%6_oG_IgJc*1sjO|3Jn&fQ-jD ztjTz9l}eEDB8B}n{1z(OhFQglwPrW$bt<`P#jG>hN6s z79c-DWPlsD{p0icBj$n%Mb0IPj5lZ8lcl4%8gnPkalJC#?yFYMN;2~i!VABv<=i1- zr|`tM+C?=yx3yt3;CZ%0~ z(;y5+_u6TImVuG3icw7OtMmBphQSadc9J+U+>_OpWw}-ASuMHOmfwm*(v{k`?=1)I zTzK*Dx#f=&^(4kE)VS`Q9s#1}zA)gYka#^%9+~CftDnbtaZ*tZB|H~w(3U$>=5h8r z8noK@LoaAI06T!QS78^^Dm$P7s23O;8C6-!?%;sAR&P1K1yzK3VHdAFUoxib?l>7J z;Y7(H&(g79vUC3~=2(t;EiR0f#>eemd=mSC?T3xX^wCNj30}CiuHA;)`gYZMtQ%jC z9{dz?z%ZNj5+g!paGuTgjT>mslS`NFU-2ko_AriP);Fu)`#5O3rq+b#^6NQ1sP`Tb z7docGYx}XJ9kY8TFI5ju>EyT^j^i5*+76=$nZ=}SJ$PVaZ1b< zBMo8qUa8%8d=S-trVYAwDT0!AB^QuSG-c}g2PseLvl zm$_SNcr6Se#>UBp{us~8o}cx5U?eQc>ikyS?AU9(maepw*_S!%{oB~2&rP|XI{D;) zSO_6*i04Q#rbT4Coi_iabrL@La=|vgc`1c{RPn@ykN49US8g2#kbJeAH(o z_9J8abQI$%jmn;#lN9L=L90k?TR1tiiFF23^1{SQOr-VDNp0P~Vk3N(NTe)0mzZXy zW))r>q4M2b#fD@*?fq7oE@%|bF}@aXUu&9sFOO=J&sF}WxfscuR@kQUuTT$s{Og-a z@vBeFC88X9xgm6JxpU-U{9PZi@r2b~HJ;YcUX&#g+6c}izO3}(Dm@@BahslGH=)+- zrnMmZOH%0k3`WFRLL|NX9y2+(p;tTZbP5ZHvG7+Aq}m%zK|om=1_yWzlvJ6JVjwED zu1gaYnbz54ELyTdNFK0gzX!t*FyIHgNY)?(BS{JwSY4VZ!+5E#!=q7fu1%#s^f37{ z_sOz=z5GQhkFa>0c#_of+5jFR0d5j*C5c2$@?PTf2M0L(0k(QS`SmAwFo4JjWHe-b zTuxtn64Ou5j|PkqP%db_%PC9u67#~r3u;cWy@s_Vbo=f`o_n1Q*-!OGz_>~xM+3gQ zxD8!yJcZNO!54k``VK(!N$X=T4+nYNe}3cQwHLa$l1G`eB7(3?UHtrqw15x)1y`a36J+iZAur~j=v9)_l)k}A!92ff-RbMjs55=D-M)w z>j!DBs{H9{@EB>1c4qf!QrUHHJs6aAo!NL3H_meW*0Sr-kVxqjvra0J>vens2iw9ol7%AmQ*B27vvy? zu}$Joe#*>O6UTa&=|*c6`0qd-pD!ENcw!<1K#kS~KuNdVPylm6MbFwQyi^n4;dzsX z1cslpngLm2sG75=UiZFwjF!yGe2QNcwAG{1SNnF|1UYh>Jfe*yg0|oD)L%KptP@-C zWI|^DnPOgyP0Qko$c?hIA1qy#zYPL$;2q6wZQUn6*L4{S5wZY~5-hTISpp-0H#m^} zsI@5fP;9B@^(cGAjpPl*0|&rv9R~n5RGEVVrO#9;F*Z%u#W6zS3WU07x5UfreZC^Y zu99)h_!rmVc5V~k0qVGYx{h~LHwWKzto6NKJbx<^+~Rambc^*;T~(%axjruw!t#L` zZYCnWaScvix7<#Gjk~Y$`b2%d>TxR!=Y30bu-Fi<)}9t?twe)**6U|B()=2}<=jut z>v`=r-kdg+h+;bZ{Braj_iVK*b1n{-0-VbV%psy{Q@wXPw}S>gYGmpKVTlshbflOr z=cE7&t*zC0p33TCvpxJf?Y#$muTHvI!7oft>gYbTNll8yf@Az~{Lh~d0!NOOw3YTr zb`_U{0Z4x-U5M*NTm`%`YyTiN@$MitBghyDHCLz;a`XwgWEeU8$#XB8A3AUCooes7 z6+hN=3@{{Yx7@8_T?))YXEO5;i|WvjiV~=_oEd7NjO*YGr2JMf3K=Oboa#T&Dc-Wv zTtAUJi6CeV(PKJ?-_c_@7RSScL)A7n2}wpp%7IwC!Er{A6%kzu5h|ZbQkC@_Gyg-( znd=`}i%V(~A(n8j=XaPhWL^Uz($#sWjW-E-mu_On&X@rHErcfQe+MOla}fp=A~VhP zDLpmBNioR?lR|NZXGY)JnMhIIGsIIa;0{xF>UDweQ-e^WfeGy$g1mlY$ceIObSLP} zUp%Wb=g&XlON<&?@!}4so8)bEr>G%7w6}L3sE!_KTCu_=jkbT-Gc{DfCkADWIGH3r z9vO$3K=DO(jD2W;t%cPQ}sV63PxS~x$`>S6r zSJvgr?@}*A9^EqF@4KA1ozbHI+v>x_c`*aQ7tHAdX*2!jyJ~Q#C#D5^SFJ=9sDP~g z)K+AT+shzDiVt$e&}2Dofb?;V{vCx^d2m~k9|;OhH0JwPyBa6-#2V;j{LAXY(EBr? zqIi~n_`zQgCA_bs?HkV?A@;*eudo0y`bYsiUQ37+9=@Gx_@?Z+4R5ua>zu-e&D+kB z>=Svm_VIYcz>?gwM!ErcwLx`qpQRy-KzK2cE{}x2Xl(5($VPSo4xGmv_asaAo4FwWq9GM2&zagFE=_%a6VDs`xfz5WFC} z^~+l1w)XVfmZ(y^KOzSXSYu*^ z##UQCC`S6iP4BsJa%H#5-e(lg}-0 zxJzPB<_p@rE5qo>^q&2fDa@|4^*$PUhz69rBw+#Z{6cmI^0j?=JnJAj zJ8Jps2@WI%$T1ngg#-#ux!=H^b4tE^fL2Y{su>KF5xj@7o!6vV<^F4e_?l zZ_q*Py&OTI`fLBw+S(Uds(r*BcYD{Ms ztRrgtd21_gtagsoy$7&ULcuR8!aCzL(dsny>r`&}DDr}>!dZXF4GAaCdJQg&Mu(2% z<11na_=j2plhzrrun=S;wm3@7>C6D?ZazZjST8R~{16bFbkrn4q;^g6_{{v#8*9^9 z$G#x)^j+lnBu3POjX1(9h)8W*#NpFq!xXE#3ZktywJDWIrgrYV{NyL0WNDl@oO`;g z+~}J-U}#_-uZh`uEVp|tSJGnY$p1u9%mgrUKO4_xJWG z<`7@*7t*LJ-F0+T6k3+${I$uGkrZ_9wJ#70x$Dw1#mN}jwYJ(S4vpw7?FoG*M>vH1 z`qhJT^w+5d?L4iSLo^6Pct-C(XSeD|Bqlc~hp$4J%Irw|*X9qswJRsK?QZ`qklCZf z!?bTp|1GlDwtylTLt4~4tL2GS5=SS4kOt}W(|(>`r#F8&9Ka>258Z+Qx^V2)?GuSj z#R1b+*C1<(N$b}nmW&=c>BVt$%j`=&jz8Ro2o5+&4O9lcZ)6^=a-OP}Mr0#FP9m5n zV3?M11Srjk+w;LXY%OL_hi`zS;JI!vN+Yiz~{$@{C+E?U#ByG99rtT>2# zG?m`Wp`gd!t9PhlqL0Llc$GnD`S3sYCl?6ZRVQ{Ylfw-laXL&;GfVPG>kYNlk%DNN z=(7<cJ5Qf{(USi2v{U<&+-sFuqq5i80=K>hz+$=&;Qx;u z3|l)w|8oaH(w&&GPydJi|JK>qe0C^qH(D_T#gYBsP)^H7o4ev;cF)+iNHQljN0}DW zioZGN9m8J9=yuCm>D>zis+-AuCf94?-B9=^6NQ!~fx(0OY>TB%V{ay-NY}+dAU~SLiLUg@qTj|=M+7`@r!I8a;wqDX(3@40^64_AhsIvz>ypdMi3Qn@?$y~!qf~OUE>3c{^#q9ZP&c4!pRsT z9`9kl+dE_H^x5C^>{S<>kodj|et~UqEOy|)uL7NTc)Du$;SZ36ngg>nzM8;S^v%@? z%VP3FGMe3Xr`((WvKxUVXGO9b^D$I>h;wg!I0Qq&>F%p&w@zD!<3H^C^@fIIkk(P` zd*1PN?>>>mpGG$m17g^HuVm?gX|BFhfx#1yceH;FhJ?DZSK*+HKHS{;$SVDlo%;(qE+(C(~WFYe8B*82|Rv z$5~0VX9Q@5d@uD?Hg*VlTdtU}oSAg_aH|o2IbL&XS+QY@V_g1En;#)&v2#BTpTUp# zO@EUKJtK1SZ%C%=S*Q7A`?VqF`oDCpaz4I8T&yCa3Y(3!-Fgv;lxkDnG8$ zk{7$Q*c4WNs~MgabzQLuK?r@wm9eNl?8$YcgyO4-W@mt=BI^64C~FnLR)_pVA$@j$ zL8Z6#J=fhL>&kK_na-Q^kO-MmN7I*&Iy@~W$9|5g<@R4dbmK&R{}|&cMNc5(e;eM~ zc@d8afuMuf64ewXhzZ3}v)+_jHFk)@sS(6q)=p$eG&;kv2lI<(jOfR}?pI`~Zo*yU zy9Td*1ZXk;H_;g2)m6(hN6_!%X@oonrp^&CbuO%Hi7?O z@TdRaH z+kzqZO`vuv8$<(pc`%L*Jt8?7j&?xe+aiDhY?h5w{sXrK!(74Ac%F% zkr8&W7b{NtIW>x^Qm6mAX6>yS+&2j>h0+nf^eL>LcUNa@8k&yLJ1^a(k z`oLXZg{x0|P>mw>*SM-rk7+!fcc?1bduc;xEQN>o&}@0R&&}v<n zg@C2Lf{&NmttcC=zq*}qV^T|yWSahGDI!E=E-=#2iOIb>kMGkUdnW$+EL_pq5Way` zB?5RWodoWjS=n1+T3X0n7kFrHXc!16H}dKy(e2>=9k*ELq7_%Zh_5U;t}J%u^0SwH zIy~D3p`LD&pG^)>Q48>J=%)Q8r!o{^Ix#kB?TJy{1z zAlyC|1c$Z{0^6hofm{^1-7O=G)5re7&BX=R8+??+q`y87$+k3KEIvv(=e7IJResH@ z;b@C2v_&`SAdd?b^Jp@aX5rV+f$_nz+dDiXJ5m)lo!#>e#6X<#!P02?jKHM^z0=O(-QXGH2b}Mx2>3F z>mk!zVIkqxd_rsFM2uaxDauIz-k=K*qpjcpI!=B;GK#*QFk$dOwa?a}fqSQ#VvfY> zL-<5K*lnW%PiiiCNNWL^mF|&pT7)#xyOgtuaovl#QR?IS(IUiy#B>#S)iRCsetIBR zn0GUP-h_}>qjTj9Nqvm{AmX<$G&)X7q)tVr$r;;HmN=O{x z#8!~uY`Mhmwhx4aw$cr~9dWNxK<}a@^cqL$I*f)KQz+3SJf3VkwuBq69cK2@|P|*wMV?*>aY90%DrLJ=AF<8oRch zZg<$fheeH$Rw^|T`YO(65}jU3V)Rz$CFdnGAwO|x+$%sL{YJ8>OaXDbyi8y~9c4a$ zMMi*LQ;%h{=b#bxYUL}c8JUA3F6B{-ExT&_tg+TOrd8(ett+9BHf6TKX(JaY8Zaqc zYa-jbL6v|Ql%JKcqeiO@RqmBWV})-o9it2tfd3shPiSx_&;@*G!V#!XeC=(#^>KuM zPG8?I{CE33!H=0MJawj5*UXeqjD!GcaZ%K+gklW+sDQI!D_bTZv8nG)GDC4QY2X4_ zoOrFto?waFRv1lx`C1dCaSAk!0$E0K*MPpk_sAZ$k>7r+K+KPP$y1TxUj*<3m`bqRXO`8OsDKBQa`ynYi za@BgeYcJ-cJ_(gq&qA2R(l$S&&uaun*<6<$faC!JDmd|1CgL=Qi>g0MM5V~xO=&9> zxWPtd7bk}H)wAhU_&%agL(&ISc?*qt3sDf*EDiAiDs@KR4^W>4;;u$;iTeq>aK9;o zlK_nbfsYt{=5aJ|l_jA&IZe*yZxx@>5(o!bqb(gc$REDxT!mBw;cOOVY_7nR#^Q4^ zuPVJH_a#TrC^4Cl>Ca5{F*=DO_vC5h2oPFg>Clwy)ZCTxBU{bd5~Jyyqi&d;RqP&> zSe=avN6Bh^OMYe)fBOiR`Yxtq4*L`?6On6&Ya*yLbwYu+)FecECqiC71!5^eXruUW zN-iv9H=vtLxw|9Alg9ZW`irce{Ua`1)L?<3hHr)qlbJ(YN}A-^I*7k(JUPI>eh3?G zOTB`I16|J=&B{A=2A26UB82qDh%}MH-HVQT$)A)@aA6-#cQCv!o7ZVO{rI!wDZ0R8 z$VvcZ+?Y0emE8?Nmpv-%w&FP7nmRo06&xqN@R-y^%;zzld7$ibd`r+F zu@SSgCLZ!7F;ZjN;xX6x-4P<*gkT-%{f5t)M(qzTZh}N`QS>6AbsBP9#ihgN%B0R> z_9H%|0zShPm}BkzEKb8@<`{{(1n&_B(=Z_~Aif%EPGpTDb&G!k&qB=p?ABrcd9$%| ziAinRAwHbP{Q_%19QopDM?l6%`5w)`4|(;~uck={Cz>a&3Ah@ftX8k7b~3c~`m;4f z5+@edl)U&Y{r2$m+33Q&q97y#2a@8)X34HHb0m0skR0*?L#jhT0g~~ZvFGE)X(Ste zxSkZC8LXS&yMxex#<~(UwyWhvs{{Wif$RZRSW&B$nbowb^*ct?l~fYi;Pd{JmdZx z@%vjQd*~(V1T3+wuD%LwV*+Iy!(T9r^ECqVh{zEZ!uKA;3WxQ$zu2-~eQ{V3at&KO z%TihISvfQ%J6^OYF2-OlNZtXi8KN0paR1R-9fD&s7E`5XO%UnSr+H;nqDl+Z^_Cse z@$0quOF5=X?%}K_Xe_WIYZT^EEU~5#tf%7z*lWlNVZB_%W|(De!H%ld&eawrNO@jc zlfw-lhvC^C^{OU7-$UZUgb*}#ek|)Kp;+K!v8kyHNTW|8`e>Cnh}W{ah||jvAS(;1 zLsO~~OG#{!k?iG+K`)!s$rivba=mO?w_IB8M}(!oN6#hv3)tyvRL;DJcqc}>Il(*S zj$^Q4={zq%B4b-Ga8Hx=*{XF$4qtW*6g9ulx06NQm#*x5y^;JG*?luBwnc*jWsgKQ z&wu++19lXFXJq(>z>Eymo9GUT1zB3qDch$nCt1rce0AOPGF)IhQ~(i~$b{~JVlguC zJk;^e&-Nv=p|Mh?o0cEU5gX*>s*o*oZ597>OHff_{^DE8)OHt_8n)(}-lHQcxf`Wv zuHOaHk4&RCs3Fg)tGuzJ){)G|bXA0<7}3+u2OcL>60x@=qg6LM+To*YXb%ji zvzjMkaoM#dt;)@`%P6|UkQAGM(1QF35e@B0j5WT!H@MD2+*6nJdok57K{lDfOs5lK zEwp*7(4@>YvsK|u=)04+y(s#(yj#~S#l1m_ENPWTO7^J8IFdxsZ%G^5fz#hnufv7W z>FDu5ip0` zYVgp-`Xk44rrkntaXAyb#ZSe<#bsMnM^P>!*WO>G>q-#Ywq#Aqb7B`WtwHDJ^O(E+ zLSNFdWwzT72gHaT9H_bl8>*)IqFY+HB};y^9d3SmiLDqP=?Od8mP%z8>-~q9ph+0+ zCnVQ_EW)CCqofh7se#vUJ3+APa-02F)yVqCNsa%J%k)_?*4Y$fBJJzE19e?Hahq0kH7)5Eu*$0y_I8g{}`VPK1mVPI-7_h=@=ZB-UHK< zM-5ImC;5AY<%W4P=Q=PW@~*@oNXorAoT2wnIO0;Zzt~~MjDXM)#ncr$vgsEHG6KO z;-fEYvRdEwd>AO)8v^P67U2Qci-kvsPo+vp_NnGWfpm)`N7Cntlrct3=A^umptYBE zOP$jrG*73vcNHoeIS<*I;*w;)H*-rC$a!1Z<``em`KR&L+(C4!6hC(_M(7n{G8+fG zt-yH~_7D?C^*XKmp`j4lv?`}kR4?KdNw4Fk$v-Ljm!Px8)>HoYX)R{mx;XzZpq|jSRoZsS^AzOfk?#FH1=0lv z06hM~<>z$d6V)gZ{!i;^D`=~)=LZ^y6Lem{oq+BAy>Z@ z@t2Iz;JJvI<><&Q#)xjp(LKo@&9wWtE75NI>)dF~=yP7GtWL@F60HKnPJ}?V((ZJt za%1>oNurr+(GHRO6IODn&yvcCw!U2B6#2V-&o(?tyHGfqax-Jl!;~*{uaYNOLZ${w z)aeU4Xz@2*h4lVf_PSc}!-K`pLB zchdijm4v-_#75pTZ&>fjKmmwx72ncSY@~BGy<96bhb^kZUaHfUk7+Nb$bAh$;O+p! zx1K_tNAFY+!EZlq*&K5p4AbJj+wO>IKK6b7^w#eWYt37zy9Ffd!C5=i_ROa{*{-;G z_iwolqkdyWJm+5w?Vji#hj)B$*)s1ZPV~J^_Ac(E=CY*>*-Jkub8m7l3+??7>*I9%lPOIZ?287mh(s-=o% zp>@5zNyw9`o0;LFLx=|9kHl-`iSNJ7L+PEUY_9s^>o2F7)GjYfp`5&|H!2uqem$ia z?A-s1?lYi#7xj*Br!U$9>4TSS>!H}9bm#&F%-Yd}3sjbLW9nhl*tw1u2+ zh!83yXWTfq1uzOdv7X=AI?gS&>aq;k@XSWOQo#(xARe3+-%=j4ndEIdtAW7FNYBKQQqHB=#T$F za6T|D4W;#%iwmbppU$tZ{vYW0@PPjuSrxkWs32N<18~@WPCmm%?tcMRr8*kQ3*`VL z`X9|9_g)d?`89i?NSm!yxIPTQ$N0~(;C?Tn+<->szL?n^u5);M2^ckB|3~NM+dQG6 z;DZzAa50uhp@ww{gdiXbx3J9UI`nL3R_4{y`Dsn+#A|i10@r`In%?OFH<{tgW$%~} zH(nPt9T1Q`=d$I6u+usSh$1ZWXbmf{OW|d|UBw5mc#6To$mbFk#}m0O!BdH(eB71( z?XEpIhuaJmO>}F{@c`!n^!^y2_m6H_EhvAZ{I=AEZ1U>~2aDJJP8Us1_h(OCKjTRT z>MNbZrk61ZC+1pru`z$`kzjwL=*8X|3%*1MD>a7I8Dse~At3VkC1pVH0GE{C>;C6# zoBdW^P0->7w|V{`;$}CH8rWv2Yb&bf~vN}GtrhShh)#K>Vva&cq=fXpZGi|Rs+hH%Qj>FcE3nAduFYuOG zx(4_F@d07{wS^X+cy^}au#}U}&G6?R_4cy!O7wP#N0-4jNdH~u{IRgG9^Xe30poCl+o;J)5Bl%`Z?Mh>bqRu%Nt74%ln*?ue<4ZND3n?}NS-o|kW z+SEw|mtjcJo|#WWKm>~^rglr}=e5K;LrR%+W{aB*6`U%!+LoP_P^b}4Io-?Hwd&c# zcVZ9lg}?3XETQ(@) zdWUMkp1D6UnbfV*nYE(kav>dzh4Kt`9jlCdm3?_p?Wz+DcdeF@6&_dT!Z{r*H1J&* zOsc0RlDbS7Yy?ak*l!%Z<47-PAit}5K7;NFr9Sc7%uBollARz9po|>8PGp@s6kQ6B zE*-!J&-Q3-Y04M>V6;E>Ia7@^SvuK{K0E47_d9;Sc<)PeX{wZF;j*e$q184kzT+F$ zqhqm03v14@ryl8T}o;pKMSbGIg3chck z(d=$XkyUE2flt&Z>aik3eS;B*N|Zpfs$Y*S)mEO)u5%ojI=-`grhlV>8vQ<#m`O(> zw(Z?VceqW*S_jU)3GH=+(&CVZ4sI&TmAB)B-gt!3;)2qypi?Hv{NX{o(q=O2)!K!= zE39lwuX$Hqmo6(zdy}S)pKx*DJiEiVkc(wSQ|$wB3ZtibZ}+GyAV7A z+IM(m*{3k|Clbs%BgT8EO?(jr8Xa8_>GOcUo{Uz}+{Zi8WqZIB z2K6Gw^qIShB%;5?DP67JDtp|6&h|4v=4YAxFR517^MOD1)hWrZ{dqfpY2=9f!|J9aVtoIe=)#uwhbLFYe3UJ|EY`hBZ?Q=uFM$ax#%IJu zx1~n672?0cq?L1})mD^*A2(iV&(gl5ix~6Gv*?9X{7PZXe|1ei@FgN$H2l}%>S>%` zpT#%E;?}(ALJt?w5u7B9j{$_%_Za!)Z9$dasDBcld<^Z56OeIzzk#2mV%DwdP{kwnsKepYDo;O8IQ zFhcp5=<6>g6-eZJ%T;Q9P%hfMnu=v?cRve#jFp^Pwo}z*p)%d=J=23%+b9FS^x2ot zwOm%*rCJv@1H!4=Mg!zArChryB5E}DZiG`v%`Ky~)*P%QwbftKiudHN`b;$w6L&ao z$5fJTliOyM8+T1j2fy?ej6)(Yt2gb13e97Cu50*)yAY8LMxG=aoOC@`0d()HRR{K%DW#I%#e<{XQw-M5`p(KWP6P*NkJ z;x)u?>C?0}M#XCmBZ0CpE-}5-g{`hMniOjX6ZgK)3aR4gbWqR)5{bhei(^%Yqq4d{ zMqRbc#&UlH%MX6m1X+G;94N-Nn>rl9EYctgA$Ts z-c;eC2SH*FVo|0l_CNbnvl8rLFGCp&KyLurblB%YPXz z(MSLKCVo`a#qP4B1!5;IOz>h++(#si(`$A{qo!!K&3)ovFj**&wOeLm^v#%C&CQkN z$-ScD3#lTmU>Shbjvmny-L1?Xr z9(~PD&}g@`)R??nml8WoMj@W*uuZo4(kD~2%Sru&RJ@+pqo*KPTfk_O7LMo0Bd(*g zcE!T=%C@-9y|pWH;%el6_={uLw<1cU=IWy^S|+3E=Js)kq~38};P{{NisJ1uWY96b z__C-zf_)ddnjLX@yhHH5-lb0Q-VHx_fo*g#|30W$9PTvvM?8!)B^!muM%(SC+Nl(U zsLU>qB^QXLE1UhOy4ILF&{Y2on2k8lQ|!c&j!R=q!sII30C=ldfO+PIx?R8ccU{k~ zV)l9@aF?MhR(m!MrS8`7rK7MY{e_MjYfiE`1}P_v-`D4~^~MAaoAW|E{2ptn0&Q~x zZC_u0zVGqH^Te4j?pmeA?v<31{91aAr?zoJnom>9#)917n)tPOPg_>VIZLwBHIqdX zoOT{uts|4@mhjn$q~3L&k57x&@Vuoj(Ynm}W(PxQwLrGIv$+<14Snt#cz>_S{sYqNSx4MJAUoK6PouZ?$?`{)CZE5jDs@xo_`$+PpN}^|d9>hs zSNci=-4@A6_G@R<%wh-xeFjk(19=6t2x1caBx4DUqkg-A4q*gZsF+F^$RrT~1!dQ_ zDmq>5nXHXUNX8g3&|?GnH$PJ?#FQP<+drsI$9sc;=rE21wGWdhjzH_F?K7kAm1s$X zsHK?oH`}rBpk#vaThtI-d#s*hD+Y|zh>UoRz+3v#t%pKOo7yXs_Di?x^&#B(>O!Z! zfr8C+v$VP0%t*Ch1)I|(g@5nBeym4(opJ0WwHB7}TjO9Ai{FaHgA9lln;eJM|F${H zEHCkx_ntJMw9#+#1n-vtJ3Y5%+(!i{2s3h}*)N&?Mk{n;DpWg*&M8+Ue$~PSr*BQ| z^BZ$Dl`gh#;_#)dIZK)%VD!s%#5DWYzZCL_UtMvD#5o|ARYGTbi;_4-Uu)q>OG8JK zuOzoUdK{84!!SlJ$l7`5v_%R&4jRJJ~7=1?tTZ#hm%EOhXAh|G=w~ z`SGtKGTstd$NQzoU}=rJ{xHPRM8B9lr-2mla+bB)rq%7OF44?|`>yU#S%ZM%HQ9c6 zdqR-B&Bm*a8nUYWgzToh7wk5BzJg@gznmVEnW6evPj%IhSuFXTQ477ir{G*O_WW7o zd$&8Hoeh!97BjUX!Ssu^4oA&fo;R7#H+ZTuWDJ3BmU z&97>q(QEJb)|&KDzAO5bTB&B2TNGvextg{TY)_ckqCYIhSH^`x1Nc*6ZB%kA1mJN5W2gr*%`F{Qcbs0V>!+1C2*(oG*U|u0;bkzrB>wdnicTc6x1H< zhl^QYLTd!$)wzsLlkEJTq)%i1pW8Qsk$jz>-&oN*?nOeqFHu|x(p1FROrc4Ve z=`E$770V~zxR9J%7s)Mm{a%+w4Ol{d^#DD-QJkQ+U<6^|LRyb_`nnXg*e6%J@ymhn z(+wchvnNRp(y9gha(7RQJvxarzDW9E-bH@#ven~mhuoN76%Y?ouclq~$^))|2-jAp zp{c{X#Q@hk`5ep^1`R^oMll5Y5!d1K&xxPkcGe&gy^Iuu>Bn7{2ao)#IaU(KkwT3Y<65}0A!&khotH6 zA$ULU(~850bx>J~{I_*r+d8QEg%Eg=7QKGvP%j#FtGxxsqTUBvw?QSaHFExU!2q73 zE8leT_^Y2!tf!HDX_C}|uohw{8z8L|K~{<|)b!a44GUz-8J0=>r+c(Ib+X>6aO!U> z7qZ>cBTTGB9x!AdFeJ<<*U+oc2-(`y6Ygr1Ir>b&d8Hw~AhHm8mh>#}<>yA5v{Ht; zQCM4C{6b;;JAFMD^-4U>At zl~@wJbYhY{{}SV`Y1L2nt4F?=EzIRKlAOF5*g`N#z#Y!H#`uLs5+shxj`Q6wXQ1do zpa)#30oPIP(d4zD`k`dr@Ao((JEv>Kir7wzK1tE)dG#&IaHc)+%`mVbuB}C*{BzJQ*cmY2?+eKvUZv*mOH|7^H-Ts1G*>SRZV|2cT1)zk&P zrl8h?&%6G*l$38rJ!<8~*9@cVADTt|WWGKHOTz|z%TH-fJs%!Q+ejeX)fabG(r9zu z!lPS*X{FhvS_{+LQfUJUwhBup@MkRs4%lt4&BJN$kn8OSz1albZNJ^&hveA)zH~C7 zW=!P+!nmI(eTVFQzX%h5YU*vv8uF~YF8$@{J@O=d3#ITVsi%9;&I^CeXyizJ{Hua` zo2uEsU~438c+uiitEJR2!;2pRrM2*`gKA#|AJcwSZS5`R2+409gJAVbd0c7xBh$jH zQ$hP-hUeUJdO*MLHJf7yspbbK<+2bRt+AjH;QxwDC;Qs#zbI}XpMkLKgmpGQG$QS- zc~rP&#`V$x#o5zwC{F>$A-hU{aH+g__NqvisxAJO?$xddS6NY#hiu!QBxJiCr%_#q z$zQp0%|SX6ByltOZ1Q=n6is{7%=!sh%0v`u7n13>g6*BA3BD@HCRKc=kg2x8#Z)FI zisMJ^qvYtL&`3-S#99xv?nn!Tt%v3}=`lgZa5IYqAzjmgaYCw*kCBN(QFC#SDnhZG zLm~3Ig3mu0nr&?+8uJ{}v{$YNt<*HoSOFq@XiqYrL>^0f)MDIz^IWEGHMhOWOkw;c z8&6p*LtJ(xat^LDnis<6vG}-se$ntVfsQd0W)r&1FAQlK zN6Z&FQ6euBTk}pVzQtpTF7VI=SwNYfmfrCV-m*+OKC^s-^-#FFz2F#bQ8pAPC2EVu zTsEoCzF&6sKGm&n>})_Y&$e<^{~DL8?0Q<8Xq|o7VKQIv-ua*`_#3P+K#q>x8#{79 zd=CQ2#ko|xSsOuV^UFo|)@3$y9vusXIpY#R@;o|Iqam%%K>mbj;$W_EETTjLCN^e_ zL=vq;VkX{LJRcNBX(oQOfb~FYm9#*AS7}WOY*;tKIaKYFK_(7F%|%732*h#@gvgUg zxwz&SQy70YpTkR^Us@ZMUKUX!tEuK>N3?J~ zDVN@H8i*6h|6*DIbP@c&nhfPJIp&YkLIo&}<@#3W=d`gr21lb|txgz!{Iq5;)A-fc z)?fzdEv-~eF;f-7mLTD=$q+F)EMgc|3du=W2-M6O=R{3)1i$pV6^FUh@Mi>CWC%u; zw|ccM`e(-o!ITQ=_igTIcH5;tqoLp7-m8jO4|R-mr=X~J*ko<|#{~K)C=>a>VLsGa zPj4X8MJ`fnA2u05&QVN}+&iwebN_nicm3^P`T$JXK#fp;ec6zXmcoa$Nwc(x zdXMl6sj?=RaYxk~=nc013_o@{Ipn)yz%&;)w-p6DuPa69=Tq8%u~+g@j10{!+mt}& z^Hm5PvO4a2RSI)1j3wk|KC%;b`DH+xc)gfP#z?Hkf(00YSg8;bXhE%qfY%{k)JoAz zkSjN{%~E!MS8fhngtJ~Mn4xlvM8$&oc2e(mb{SGz5=><_qBsrIK2DASc8x?eEj`Vh zoRgu*tcBz(R_?>csVIozg>2xR6E>T)#Bfv=2&NJ{@-hj@3WQymjf3lyMgaaIz3rad z+;Z@$hmi;g*g({@qnwlazoQZUG^M(Ixo2#L!oZ%vf z?tLLiM}hcJ5GfIIprWe(f+hFKipT7W9!DbT-RpbgklfCjf}}6L@kz8tG#&8?Bw{%~ zN9~l==h^VDdiDKaBgprY3o1|GeQ~j}auhhOip2xAG~x-tonnu+n1y_IGez|_HM4=C z)=2vBA~Ue9KpgHGGT5}=MGmngvU%`@wh>VMk0o^W=#>-8Ac3yVAJGY_Cf8L zzMOTDi5DfVc|Wg#4NC|^r93PjpRZ5b*@#f8Egm*xtScB_mZc0nCq~b`2SZhu?sdAS z#sTx!mkX(~xemcp?z`=3Z!~N%UBFrV%$bZ5Z-gLf5)93jO}ybDP&>s6Dk~1A5(P4; z-|N_59-l&zYawE?Sj5t(g;ez)8R&xYlWi8M9WY-1UYT{%*ja@h^09MZWwOh)W=XYh za`dqiC1Pc@fs^pl$}36o0u1Qs>S}v9+qnT0vb~s+kW-8}5oHz4R8&(U2ixlUVu$*ksQP zM#u=tVnO$X;>${u9nYi=WYWGpz4Z>$Bv7N-U*Dwlr|}M-Nq%sFfsMi1VQ1d^?9z#` z^}9^UuAgdmy3|b`3E>qVCHHiXIeU%GgU|s%eyw(FR&Z8ZYF0p%jjDhjlQI@Dy|$j= zdQ&@>HuO|`@X z!|W?1VqvYWa+<)iow4TtDEzAUJ50Gi4VZt&ETj0BTe^vwIlP$|;7h0Ks66R9;6>h! z!MneA>-$ONh#f?o=|aDytAkF2Isf$0%$No$Jx*WzV!R+{72+zJe~35@zkh$`tQa>X zx}RegQ#-iNRmgq&Xuu86Ig5`OL$86Vx8)7Q%YD=!{eHV=v4PFCkc_qkhHJWMo27Z_ zZTGj1-{n_D(wR;VYIXYZk4%qr4*gK8mKpSf0l z5{wYk+Jo7Y1;B)&Ct0ww0E43s9L0YejA7td00{+^UuPmbs{1Po_4J?O&7sQ`UZLg7 z!2Rf8r_NMu>gBs9nD^URV!=VOc`>wf2MT-)I40S(0OvTAF|foSvcDvsO2}>|&kVKt ziU{T_V&g^s-ataa7TMimj}dUV@rTNj;3sYgu2M!mM05ZSOJwb0%ZaWZ%PHtK^aHElkJRKT*k;d0YfQ%T{&29?@a2&Ch3Tc7Ul2Y^hBt&c( z^k7S5dY(z^=!|jlF)BS;HKEqIJc0iD(jj8fSj2%?Hi6&Um&nnJF^M*pcnYy)wAtAv zrx4D|Z8bA_;D%x%TcVLHqq0Zxco#4FSB30Fn6SkJzNzyd^4t;;eH?kNlbf9#@l)px z+`sjXDchQyc_7Z&e^!8D3jJoz6}kDP_=Y6do%1<^*oY^Z)Ol>uzzLe#=Clx}*zVgF zZLQ3XY)L}0e125gUR&ZZ@m>)mAt67DDmHFD;GUt7ztWIh5ZSg`)s+3Cc#Q`4o4Y~~ zta5HO%~31SS&(;8@&4QF09S=$934@P(x-%HweD;j#q7WU)LqQ4M;Zf9BdaZvVU%0~ zi(qhOjIV(~No4{4zBOxDwsu@ICQ&Wexi`U-rYL-L&)N=;VW#n}lywn6HRGzw<%aJ+ zW9ye1_Tly&s6WH}jhw=Rt2~E}p$_XCqwo3yi$y3uju7BYou38H6BVHgopXLCWBaO4 zPrRrx^v|`MLrMHcyM(BPMI`peQx0O_agQ6=3OUmUE0Q07FQ>jVp-;wKsnH>?D1hM% zrbz0RX~jIll(oJDAH3i=(WoG(^&qVeM^}6M)`;LuGca|WqLje$)ImeM-zE3&<#;ya;Se5!Qrw= zxRNX|@WbVeQ3z@wc5;uNT4fD8*qksj+al>k6A3QtTO$$t-vC3RT|BdvRK^>h{StLR zbnQpL+B3`NH3#ziv%nFajZqyAVoz{d&#bk_0AV~^V15^t#C30;yuCwQ`tKS@>p`FK zC4}NaTjd0)X-<|m8gS?l?l~MyqSi!@Nm#+Yc{V| zk&x{5$@YVzUF%{BgPLmeG2D6b`!QbLzVH@f)dp~X4wOPFp(`Ti6u@!Cm8I-sN30e^#pcQD2yn9XTQ*; z^1HOtk}$4CKXEqnZ}~BmI{?Oxp%qM7oeR!Z(*mBE}+9fJ;%+t@+ahjmz3ODZjx8GQ@N~4>(jY2krLiP=x*|~4p zu(QslD`Cx`jiYVTKlH3QKLr8V>xZoqLt9;CH7Tfi9=Ht>e4M*EvxWJ^s{4$5Mf2}@ z$I2dFcTm8e)MUDDoSjRLK)Zve_yDp1$LzAIDTq`2-=%cly2)?9)_*|pbtXc^?cqHMKkc@ zaeGV0D>HD0DtKoz&>($_%Hwx~jM5=&}eJB+4qb+dukw&3ix`@G`vyt~#u z-#l7M6p!p=cdbvZG%#xUCV(Cu?k|90I3mnq_`R#ud=@2fl)t`0h?oKvaTL~i)V0dc zK~WCgQyQZt@2#;z@UpaxmSsMavJ5#8PBX?L?JY+zt^vk48LPylud6-TzDA%XKqK2s@E5HYYxbPR@j zQX9cd^u;D^oLuJd6~tvCrU5XI;;))^4$c`D=jam!n~*|lVRqYO2U!$^g&K)bq48CM zxlxruR6gkGa?0(&lyg@{p;i}D6bBM{O^4_!SQkaRCXnSGQQSd>+;Bx{IGZ>5nj-!X z)pe@d?ZlvETBy|?H6CoQOfM!R81-LRremK8LT&qu&{*RzU?wk9WvNQ@zO?P%IQuyd z{jBATOYDSF*wrs0C#&>k*!h&Qy>Mn{a4%>Mt0L&50&`|_~ zFhhXzf!oLSeEf~Ismk!7%ud%_a@OvC_|-9pHUb*KjK9eZbN{RL(gSzzG_i-r>$~bk z))7u+P;x!pO8Mcr`Ya(BY#rv%Z)Qc; z<$F%<)zHogS^?Yv)eSaRluPOW2>*1Q^m`sao0dF8Ko+)Kj6`j%b0Crr z2GVD%YFw~%OBZ~fmc4mH8%R?BIHR}F?K&(5|A_5>D^t+rO}XG#5%yG0=fMqCh? z%~k=BX7|%3hD)piK=Va-3CQqNogW6XQE#7m`3FgXR|Dy30g_@pkCU7`f0)YL^#N75 z8LXQ)d0CH&**#%$BDLpuZFuItBqs!*D{FTHE80+q>`c;`RLUwr{oE83)!h*9KQ3d+ z!3;^*l|c06%%>PxLX6QO>shWdQk80I-wX8NQ>z%9Ir!h4xsHR{7c>c2k(G7s( ztCfpXa!K>fHcEu0--b$HSP_2cEN*09Gwj{XOe?Zzol>f56Sbp)PQ%ctu|fQ+Z4(4p z?`*)ecAmM6-;;w8hu*dUp{0wBmmv(xCiFn^{#8N{$-PII#s}QD1%q^i@;y*v_SBKT8jED_tAywgMGzhsWQLplP>Bdov%Hc z-QiOUA!yz>OuD{T=vf&mg-tY?v&ur=u+5{}RXMzcnpAGQ^lk0;Ek6FDbBF{#QMUNT zdRV%~YV(nc>BK*RPLihp&{sa<1GG7uxP!uVdM)uMBdDxp_+c7ug5j6bT6?V`oyxC6 z>f{Q7O|tjm!#Cq&I^4Z2fsadrRT{p4{)1$BawWq4?5l!W8-D)xr+!Hii|Ekpic^`c z)_PhkpM>&?pauCbN)chQ?5Ve8vkcc9O{hMu^K0@4a`KTzHr&9grLh+li!X}X0Q zwop&^DL#-tdK#PVL93*{eBSXd-nUl_*x3Q-xk!DZ!cd2Kq_L365)LsYQ=Xt`noZ-s zQIbk(|Ncw*aQ!4w&_mpz>=s}={pkX*0jL_biq#I;c}{&$!&5-mTRQ(O>U2#F(F_RN zJ9Z=y-cwUjGrOl|wk<@$i7HnV*h#2F8UI&R042@Lt<=FpnL@p)G+C(Z;p)wk7E$|d3EBD!95dO_qOYsFa8f%J@x zRYv18l52|)NtBAP^!Vq#{`yj_skG9VQW^EMrAv1kWIsZ%JY&>7&+fh-Xc>GbJ=`YcI( z33bV68EM$DFCZW~p$T7b?d+RB-ama(7LV*Nwk)%E-FWa)drHAM8GJuqUt#!XSEQLmz zWs(FJG!~yN1ujMm)8i9wj^=g|NW^-enl4rk)CFWnIu0=?C%&(=*LiJ48sO1qdcpHi z1Ih#at86$ByqPx$wodayRxUIoCh7YjxWxdgiU#tFfz(YU9Gh}&b2Cs!2@}}@4asIq z3*(YC;}dQ;gzs+@^JK}@$%x?V8w^i-2SSjyCSQQ1n9JTq3?nNwqis^i2#x&_i6DZ} zLsWAG>s#OfE1G$%8kATNoHh~yyVI}?_kMxE80ZaY&fLGHLLSw1BHPjqs=uZ(BzH4U z2TB$k)QthdK8MhRr~{aP^LW5!wpHV1j^~LCI^fKske;j0D2QZa(;RQYkojq|lCh%r z-0xKoNGoM>b7FuT6dOGT1hak^u7QO-j<$8gra@541A=kV!xJjfAl{1_5HZ+YcC6(* zq{J?rv9LM(a#HaLvU4CRGwLY4p*dL@>}`;n^s#RlB=~9r=n1VOKm^SKjH6ZTd>F9r z$2=H%#}d3{FMdESX-4hNk4B+nOvYyVh@muski&ARmn?O;iB$VDu3yeoTBt=AW&kfP z&||{5&fUdE(#&fz2Ri>}t$iZ*yWWlC5m+MWgKbJBDyvB4(kuCFbkzFH#!Qm zd=L7E+V~H5tm|;6_p;q2dZ0x6HCI4Z{7Z>{CYxdNQiD~m;#+JwO-GAy?IzpT6R{%j z+X+W^jumdMWld@fMv)~rpxrRgG|8ieelbL6t)6F=uaotrur;kP-fatc*D)#?9o)-Qp8{?A8UP=19=63BcdX5&m)zEoLP;GZoccVFU{Rf zpQvVk!o>1wi!r*M0AKRpR+0nQ;UDq#H@kBsFo)2#i78 z9Y+FQVg-TYX1)=O^H`hVeHsbJa|VgJ;g^D_15_LXfd2qOkX#rE@Y)GLkmB#Ak=8@ovHgwb7B*QwrP`0GoEkSl^{YUcn_< z!2$6tWH|1Y(Ff|KRw3DiyMc)O1_!Q%OoK=dJxO&ob*X63Vi5E4za@#p3Evg2wO8b- z2>@{xeUn~^7Poy8wUJJcDG(COurws6Ocii(Y@zx%ejiW~hHUN_ppW4+y-X2BNx`iG zEQD9%u*?-*IF4+rEzPjgYkW9u36Wu-qQD-hq|$|i^Wo`{wVO0|^A#tr zzaXee_#L^r4I)<>rZyNLU^Ph;>hB@j0df@CoXKy4K_2Peh*bX>psCo0!Brk&AmT}7 znPDFg+HF^&`nv|QW)OAhHCcTAq|nxm+30TcqApE>((_XbgbTsxLmcQ&A^nD%9wU)V zD;3ZznDa|XWscGEAX-rD%-sm8AdoWOH|h+{YPz%?r>kA)5iisIU;_o!z?5dxoIoI! zP4F?u{!nGz%gJ0=m>nLyv59Sgb54XogbME=LWNjI(=oO-Am<_^C~6L}r=eFtOj-vR z3RI-hHW{y&;!QnAD9><26FKnk&DijNIQa2~UfGp<3PR*m96YBq>C3zHAy&JscC0vs zR0j4X*ZN&$AvT1vqsAh^0xv@W<-(w6>0Vp7IwB%l#f*b=vCgWa9*+j?P1(5nqVk!8 zWN_$#$mB)DbWxp06Fgmwqa>XYgOIroFFOd=ZX5Ftr8D zVAec(Q+ZGU19=&ZWCfL7IT)ddlYmAm+c54xIBhqT9$D}k4K>ShFT!Bzad`reRH$M` zMcNL80Zt3ZE-*@0%Jk}EKqKgyBVu2it8wuTo4|yGbay}z-M`z$;NX&6>iY7t7SK$b zwwZRoU+Rn0q0`!VnAn{9U(*DV1?%)K#K20bPQx03d7j&B$Pa{P6HI3cwEl49PM2?+ z+}{$Bz-7X8iN!h*`*U%p!@aZhmgDp%W&3_`?kegp=OI`M5F0$_sDzx@D^^zlDiFcZjB7AY}m7=t0-MK9%b=q?i7c2Tt^Jo534R~Ii=DPA~W)&GLLCw-+=1`}K zjMudrYG9gW5w4VFnO9)UnSpdG$gI2snH6k~0gyQ)($XWlZLSMgL#Rd3Nq85Tx{7fy z$$tNLlKZ4Xgrud`i$*zXSyrFw+!kv;&lyH#h<-zO-S_d3Em46*(U}^nIo$*43XlSx z<;!k5V2uP$Uw@$SF@Y==G8|0>47*~yf>6*;;HQV&Y06PW`gUGx^od6JZj}{RB}r}? zKX);EeNju5z~uV2RPLFd1l|;1CWet+!O*kxxw~?6KbdX1nCptJ^IwCygD_GY_R4FT zDy!0BeSyGkF^%!BifSJTMK|+B$>b4n+?4mLol>rGQLRh(j6T#`s@o5!0}v6%sBFjP zHAMV3r*t$nBZtv(M%@V!GiEfEi1J-sivi@4V!#Ga)i1!%(?!rW`YZTtstN#(4sPVU@H= zlty~PX#GXQG;WA`ls?8&%-P2G zfWShyL8yDWoW-+`&45#iS!ww_2gRl>(+Zxzkn zp3_SjvlakVp(vux&`gC8zXTCIRs3d8Hb#$n6`B#3 zqj-WQ;YAcLX$V9%Ic!PT3)5Y{oqk3HEVp4WXBcW81j$Bv$6F0SUoj$dxP|z0&Roj` z%r&iXj&pqiuFJXqWC~((#bGTYF$j)@s=-0-@4~M^VcY*x*zA7Ql|s&ibcZ`2O35(8 z0DK}uuo7b7un%dnIUEgaCzXQ{!LWM$x(YM+$KFxM5gC$@z)8Ya0wdO8?auEygyftN z(O+A@p5tKBw-x9X{QZTC*z`;Yeew!^sgZS8n5S;34h znPMP2tNOOe_YwHoZL8#F4DIV9IAG%yOjEA@tfK49)rCPo@Kc!soF^y6`L&puFjQtp zKo21G_nq}lOe}X7GktL7MBz5oniaVlb5%{%&)wnv5W%M)=|v<7iJ?7`*PlPQxL4@L zM*G<#xp6amFvt1$D(Qnajl!b%2#umngr@i64}Gipom~q^iJ3sw+oqT5JMWJyzId}R znpaTdI&6G=_5QfX{iXULtl#1RlqK77H`3BfT3*bsx7*u=$4407U|eC_+M%>rZo6Ud z{V(NfotE2*v%=9kc0YM}UMSScU-LA%5$mYB<6F2|Vda-IxGeqt(E8f0ScTMq(unK| z?}~s2c}hQ{&(zJ2xA)B$7eS?>%w^-#qeV6Lj8QtM%b#~`!tn?d(O(x&h zTjV8&1P#)c=WThS-`Dgm{vZ*w^bk#0jxA2>^3G_l_sl7=oAf?>2V1OM`}yRxgpZ3y zWyG(sZiR)gtF_k||MbKaZN4q+^u>1cyffJZg=Whs!EN^Z5z7TV^Xr}OK!x9O)tr7F z#NdhAAxSZ$xsXlPW_tfek>6&D+la<~Ws>MBOY~^0)koLwN4zaDs*2Fcu1b2!sz3gU}8kM_V!^S?fj9Gt?^d>4Z3w~(KUlt zT?_{apue+2ht|OaJ->mfQeP|EoDaDSk$XKVcb{PT?L0rhn)`7h{hfm?so!Ds!3Z#y z*;~h3#gb2@peTNLGzVQIsK;iN2WwZZ&kvG1d+q#Hwx*-xPq8X{AN=eNRddj$OWaZR z>@OT&^NNF!nvV2lZr@$8<9W&h=hapzo^k3E(Aq;((3-D{ici|F&xR_S16Dt%QV=Ci zcjAk-S!w^2cfiWzH8_SyCH$}&t?bzJzS>fzf4nxepgK$1a!7sZhN z-ejM-c>av?;Fhkb4{UaV`t*Ixd%pv>gJ*+ts=8f%I5Y=UKa_!pXYNa@XWe^`-NA>f z-#O&{Um>l#q-bRu22R3T7fg0J5IWsBn1eEa>`v0(EZ>{B4FpnXEr={MRMg_doK<4()1*A5%Q`(S2mul*%+w5xaU z@PbKD$-LDZ<3A-qCx*vgoe$m%{a6{=UAakQoR;3%?6mWAc;Pi;gUgQ9V2#A#D+k+! z!^n}Rmvdnvy%_z^6qkt5Jf7w96)(SgP_Z(#;4T?7JI-~wV+X{DF!90jtG#+kE&gL& z$)-7_)oqw530VK4DR#3ZGRxhkar~FO zd2MmyfRI#cLvy38-L}o@+pkjIB&T8C5-aVseX;4qA*aoK>HPv?(G!m-ZQkvwHk4Gw zNK##W_BqHV(Ia49Net7uP!8w$YgqzqHx!ERm^pCv~*1mi4jLD$Iti7#mPbh}r9gZYA+X z+W0~euxrcuOPC&?+%xRB&qML`v3~Gdi+SHLUXzLiN2%LSCU+``rB=6ii1fOTFm`>*UHu1sbw*^JR^_}r2_a>5 zTpz1H$Qaohf%daLUr+gg(cx;VL;XELe~;mv}z_*k7hC4#{& zh3(T)7KW}NDeX3_ue^KWYxzOqpwt|MM6!nKN%v?jSMya#N7!S@{OR{xT3*{970UIvI=N%R zb!X)Pp=1i$^g^y{tle_*;mkzhRFKG`fIfM`MMpL%@aUmYH(Em-sJ&4;R3hS6zEFAh zn5}-_uWkl!;Rv91QlNGt^2^CxE>|?n1do>ZX^uVUs>cB1F}gcxUTq;2-9L3yTO1?T zXH}6=&{)Y+ZZ%zu{Z~hvdQj4HrCXW#W-Yv|sN#~8FHt3(uh1VtGwxwXf!mS(OC@c! zeY*@$Mr<$()oCI6WQc;?px{*B%Z_8?G0z)oq|J}KXbfv--tiXKY*mlfQ!GKVv-DNm z>){^1ZtB-+6HaLx*=q;C74jThzVXzuH?7|tPc=o@Q^cU-uJnU015Bv~x=J#TY3M}* zenyz1b~_KoBL7{`X_yn8(*&H`OW4HWh8+tAWh*HEv<`P+m3Oo2HMWcqqMUTF4Oy^L z65Yot($2a@u^)lwM=LeLc>#P+_A9Ya#?vN+kX{!?q zcd>i!$fLqwWOt`AvAE54qSqVU4b5rN<&O79Mq_;<6BJrZhU6iTVR$S}o`A^!ZJ_&P z!9!G+z!*k2Za}p5*6SBPt@&MoF1$oK__&QU?~hnIaL^7HVYt@OMfRc+78?>;YtxH5r_R|(p?R)s)}*~!3dE)Y>lz;3JUoGC6}6M(MIZjXYvKi{Z&G%=ULRQr;rs$&Fejd?%S_%Xn*X>%jiwThk`!&s} zbNk?+e`h=R;J$C9fY09N+xrKmL>sbd>BDZ{2UX_Z2GlWU@+1HaF|}3QZL3u#ny0*z z*jr@}rdx^P?m}r2v$XCL_AqPKeQE2dwTp>RCYYbRu!UW^4jIc3x&OBk^Y>wb+_vqn|(IzM@eWLVdU}*JC*qjS{5W9u%pIi>UveeT> zFVEnjo>(^4x{ z0upWU?&h5ipQLqA6 z)Z!dCZoH#P7dr{I@gKw0pX-`(rrvrwNWE3*kkG0yTZ8Vm^K>>yH{lo7^u~vA$u1ER z--@=Ux zq_yeV+2iK-%A48pz)Cl=fH}z3PBI_tK7@$f&P>@m6eML+2TDSt`JBs^wL4V;%a&`T z)#AZ&oj@ERgw;kD6BB*kHzbtJWyCnWYk?m2-ZCrWsTVJ7Hzs47<>Ll>a*Gc{;l+Uu zO zO#>~(*>Xn0*yhgq!FCBDPDxyCLgl&$+4Wp$CDr|4edlY9)YR#bCq%SO zC_^4j-3F#1SMLcqEb2^|sMI~tSeyoe2{e{-q-E!RE{5%FWQ9$<`S;j8A=}Ms^?J1@ zsUm0aj)lr3Hu#K5L|{O4A?$~C_j0{TmQD5ljKVkao8{h|wv@bE4Jf~7j3|Gbu(?Wh zzcQ9%?h5y(zXGIFXuK$;aE($uGAaNu*A9!@jkm$>1F7^&$O>zAqU{(q z@udx^w}o^rXJJh7U@h{4(_JA`D*6Ahcimx4grwvcjex@-`;s1{xQxZlaup1 z^*!&gRqg1IK{*&$0DjD5}7v?4+FY7ZsFJJUrf11)J+d69XnC!x!`G=ip)EqfX=ZAvw!D_0|KFw)XFiaS5XtDM;p zcZ+6QWOpNEys+bgc<_<%6mC1bU{_^zMJBgx7>X)E5gHA=<5Z?u73x@Rnq*I9stkML zMgQX_M%0dV6J6DW4@kp>=R~!vn$Fkz5SN|p3Y=NUI4W_owj*beu^xRECI$KyZ%05N@@*PNWPwr zT~LBtS7dNwq=B`EK|$|0;&RgmDrG$v%>|3Q{3O_n_;L!kL=+*fjqps774aeZ_W>4$@Pdlw=E(x?HJ0hSt91MT{n~^VIQ2AU zPlRt3KBO zcgdBtAoPiVWRlE>umOWE}#D<~OY7cBqG%i;fJ(`#R zb>!Tfk$j-{HsP%FM~0^+{^$y!7GEiUK=0`_8+Cw?!_#8?U}x~#YY~kTvrkc$PLqKL z>7N>^01n*}aIo{y((__nz;pqTY{JG`sBCkgw@AVVV^x!lT@Po*0uR>E!-|0ud<{6k z&-ADSl!?>VDq=E#Fe?GDKXdjuPi+&Summ6i84#Z9IesK)_NkPZc^>p} z;1Vmz2-aFDa*kv57>PR@_U%Jc4I{}El<>|Y7R7%WgdgsNq4Vhz&n3ktcy6Ku_d z!&EkERC$Nq^*%Z{f?s?5uC#-z1Xc5%k%~vBgYw%LcmFw@n=r8Cnr^)ZZ=!q$T0L&=G?#cAWI1Kq4S36@c8 zmOMJ)vFMzE9-xKdACETFYhj&5aaD3lhDqGKF~Zp{N))-Zt4wEbjb1R3-u@Lv^iEMRqUg( z5f3$90PYfl;WybvD_d66X2UW{D@!zj^j@3Rhs<3=zm;u!Bjuf6X9Ve1wI6eYbRQ6A zK*FgUdgfTDIS83tB9An_N zYibL%D`k{bK%8@XY>Gm#^%@ljf2e|U)ZjVh3hsf*H&P0~=P-90X7-g`>~4Gt=(V@$ zxKL-J1yuPCP`IKo-zjYr75gODp3mFqC7^HNuH)C43w0}ja+;3+iD}{MKorTL#zAHN z@_l_x_{@vRnpiA?iKd*fULEjjKU&4c6?uG!GiVQB|(5;E>hJbQ$NR7ZGh8JSUx z*xLxdo;2G{=3yldR*2s4MGT%N>53Htbre!}x1Y$Pb$=%iZ+=OWti(#8|`JQvInZM?Bqf{BGPcEJi-~3gS*?PHC4&4fe&Zx-Vgb0 zV?Vy-wbB$za7TDf@?eJ!MwEdBC`38Tag>BMcx9fFD~+@wb#k8fNtvx}EhP7f&5V@K zy4(Oho{S*Pk)7N-+<6DR?Aq&6rF2Y;9yv~@^yN>+6GND6iK3e0fzCj|&52qaQC4eX z>vV{V%okf;!R|jG9V=lzHoA{g-fMHW^2*TfV-1{^pCW+*+r+ZUC&0y3nh_d zB%7)y*;_f}RqE=WV{C)7-;ot!x>Y0XgpH_$i%3oXetT>_G_SZqQi669Kq4p6Pz__# z5K5nUsOQKW7GFQ~F_ntffyTvu>!YF0;AXYNyhC}#5gb|Ydd@69pCK~~8l_`-F>RE- zR%8B11_dMg)Y@zU@y6o4Ugb6R-+rK8tgR*l*U`lm=H{Y|W@5{J<)UmtnWaa__PIIw z-pDyYit2scn8;caOia!3C=`=Tot-?sb70z`iC?vTy|uBYf??|Q7O6tjpKvZ;1diA3M_l} zD8-}j8GVYefvD=K(pSk%&N($Dc(ac{(Y92Ahwx^+%1qAAVAuUC+w}~3lMf}U%T4A! zm#qm07W@=;-j{EjHV=zYzpvTI8JPI6sA+n0ZAMZvY_#88t>7|3R5iOH+p(wl+1Pkx zCx4o3pkT}KC$HMP?o-3)TZP|e@t(2%z;n8{a<6yk@xYX1aqJ1E6ypb?s(~fP1O2Kc z9mC5#cD^5~Rt7fmKKx#W%gF$s=I@?_vq4C`+p@K!0+tg3qKkIuCc%R+g zrF#NXJc_yBzlpEaYu(zjUq{L;rOhn5Hslr8i$Q3Ik!58|srET)Ri*hiVm{?@^8Uq; zQy(jfgI=xglC_$%g!N4)N-31qsTo|4(N{CjY>avY2)1duxTq&Ar<`E@hBRNzZgx01 z`Hf(NMzPV4`kk5?f`i7d8x(e)lT$s8KexG2I61`F?~3B3$uUPKGyf{Hlw`)T^`skN z=kMjfSC`~U3e&p3_7F@-_71Kyl`!*2lJW*V+UR;C8u&eoL{)Kp^s0&}qzBLwgC~t} zzz<4#VvV6zg&C#qkvv3u3b^&q^yDCesuj`jzB#N<>-R@*(pvcN*L}A$-*jBFRKk{4 z#!H)}q||B1W>oFPv3PP*Ox7I(Anj#!`mHEmZq?ZgU@=*5Wt~?k`caCyk!EAzqeNq^ z&B}&!Ev1Ak;8wOq8}Yk!c_LcHpB|edg}u@K0HBLy_gc8(MT6b@-xzDjHS(lrrwnS# z)w&sHab%a>14>*esc?c3`cV#BBYzq?s?FoIyP)tD8x`ZsmH}B|Qs(w9N9JdNWq<;x zKhSJE0jSa5(hi=<$FfsVthw>glBXSIb~JYS|@D!P-pi1UsPn8n`_mF}bbY65?-il#FLWLKQC_JzJmGtYP2e0DLHc+Va-XCQ;*hqavQ(q zIvL;8dnHxj!tUgz&Nv6)91;@hF7;0OqDV6^5?)#QHOE}KL!MhXyX3Zr@#`*yox9{! zJK7Zk0D%M~KHS*+ezP*FtTa0QY(l${=dkT18R+%6o>TghD?4FMyx z-o$KU-76(+L16~f2CMix#`8a+mbw31Q}4QxkHz&3-R4r9-p?3vXjQ2P;@wXgU4+Cp zr--QLKxjhvvz4^Wg|{|pHWth)Eyf6oc@#_A*p*dlAgi^VqZ>B{(t%2bO)K>wwBS#NMi#SM{!TcWwuc6iAcy)_Zj?q1viy!r%Pf zucZmwEg!Aw72lEi##p%@Yses;_sLgJaV>QPTO?%pSqHi z9L=4=9&R@&>NvXvXM6HBd;LJ>X(N8D8@I?a4Ck)+i}1n|7}A_UahOwP!>hQ#Vmq~( zKUkSds%ck@dXe_iJZ~DzQtphiH9FY)etp&jg@eWhwTp$FSc1pL9XW-y&EuaLGpN?t z84YY6z!cMe4G|GC(J}Gc8k#O+I-N9BOTK0xAk88OQ>Ju z49V%14kCwBw0zA#;k(jlAx>>`e&7Ml*Ri?nBODONY5i8~wh!qOaKiGaye5Pn@WFm= z1sBjvTbok~lcqL|aNCa=Thv5XFa>+^7-x3nO&qom#d2ntdUu(1xs`46(u7n1_k_9~ zQ%2J^N28b$+y@M+)^f=X`gMhr9<#0!u6Sn5-pmhkFH@`eSREeF=so_)v zMIY*MAcM24t1AOB{Bov5!!fldODR&YGQI0#iYJc|%`yK`<0qSI-FT2bU4@doPd4M- zcw{HLj_uCaU)DuWu~pr6bZjez<3P#h?=>eH7u6Yc@`UV5f8nU@F)HMs`naB&LqJ4lsguJ_g0pw%u$b!ac1ZX(9Na>AH8Iz}Ah?4Aw;2I_XZtU@AM%_tUcFr#vC`M&M)0rhNI% zyp4@gULiNOy21nbN(@^%{diQEL{+Kq6Jm;m2&khlWf0o%07qjp$zcQ)e&4))7T z*Bf0lIn6a)jM+~pD)al|T?}2}R5mDa_5MS(nDs*Q{XbEfvhfL(N!k-cBgQeC+Dj*_ zkeLsGX58ZUVP>>nUEcj0L#n{ycQVg`mA-#hZ@?HHr@emh9{W9B4hJO&{(b8PVQo{& zT%-o~Z9)Pe+GmeZXK$&s_8Sy&r5^4eosgQ@nNRL2kQN;-m+335CTyh&B5ZlBnjX2D zf)=-97vz|WvzzHgxamnf!jAmK7i6|`A(Qo;T-TB-!!$Q9br}Wo7KFq#!;iIh+)TI7 zQt!$;at!JMg+5I*zl&RZA;QBsf3z!QfPjo62V$H(Jiq+Oc!cKTj3Cs*Y^80F+vfj1 z6cpVOXknx2-RzygbHT+K`ss1poMptsDVV4ipX4P}^bC_d^;yBm(QBk_CxI`a2zA>C z{NI+g*1Kh8M_luPhj817+^ifq85NG zKJ^8-+2gWNNWz-FMTsnYo1F!@J3~XADUpDPfEO-?K=#HO9j>DEG7b9t^WW1tQAk-KZi}kqi!T<2xtNW{BzaoQhhqD` zn2tF75yHIP0Tq0?!<~zp`!foz0V?={qy2$fS^nTcAX0xu!P!9t|FfP+4e{QbhWhI$ zhyocGPM-=Hk;T*^$9+pxvFFdj;b%VoorD{A3?J>SphqUcp#?LX-17$gvrV73)vOq2 z(r-}Eg#tn5AKl~6gb%s6-rDor$XWGjji0dT^Y#iZ(d8SScO+yn^86gU!7$Ecn<(IU z5gscQPyJKh$2q^&w_JsKD$yc4?80X?2lV}9yg4+)JAY@2-8nS+2pS#X{#gQen-5rT z=RXGOIX)DjTY*>x$Rj8W4wgq;f^jVwF#qpf!-51hlJuVKpYofMo*VU3oK4<}z!zY} zhOMJ7i-xq>ja3hG64?i|UT}pHxwuHSZu5c{Wvh99#SuN+3Zyw(zs}|A$9ly>8sdr|pK_nY4Cq`Rgjx@8>h}865zudIKkVHhTGi9r{yAF)1N1+p#Xl3j zbQ#W6m>OBvb80&S#dZcHry_OLGYpd} zEmQX~>=8+E!BoZWBQ}PSZN%_TtsW&ECF!_bVvA+h$iJ;xMUBh|p|FCm8y1(pNK31y?e;9G4V`@_h}PUMHa`PQP49O%T; z1@-0lp&HH3N)kojANElH12pZI51VWLU@(77J~60-07w$zyLk4uM}x8iY{w_t_Opfy zl;sz1^2>Uuh$PR1V=?Juf1*?w9eEl z;)hYk)Rg^@N!w#N$iF`@0cE*zK^`beP?r0_Gd`cw{mJ|bw3ok>%Z8DOq)=h9!|*J} z8`x}ZIDBC59Ov>Wyy-$tuUYWJ^gEoa4(3Ilix6NezjCoWD9e?Tr6LkFTRw$xN5wA~SnZP-+zF9R}vrgUIP3+pF0TRu}dYEm;pioZo(2s$+Z3DUDS@z zb3BV>tWQ-p@{FVj`5{;jSu8#-sjEc7=}&dh9~VM@wpj4r&j5e5%DHR+Y)W(#)U{-U z`AvN(Ecsv}+AN4X$b1G&n8my-m-0s_3Nj~k#{Wdc7?kCIFqr`L@~1l)pk9J{`4=+0 zAJ)27s>Ajjy~I!X4q~s5mNS$~ubDw3=9maRAAzzO&=157&FGf&@a1rhihgbxL40M< z-9zfsNM7p29@0|fIqV(8RwAqL74l;ynR{2L$_3DP-;=u&Bz1bJg019@C8MEo?$9Y8ipE?Me?E|%;Ve+;%H zAQ(sr5DWLe0p9Yz@936HF?}Svm%-9VBWV5yWjRdl&d5~r^x4&zr@r5P4f7e&YCI`5 z+APHDp-%vZ&Hn3K(&LC0cRQWq7(PLH|A52I#}PpA;v#(emyZAdxSNZc2i%>SZ!Dog z$R?F!^MjammuwnxX(pWDQR-hOnwO9^a0D?bTp*_S&z|u%Uc%(|Z#vn3oB0vwtOMBi{JBw?WlgRraq7p#doZ&4Q-e{s zp;55%^w(#=2xJGcVlX1xhD2M(OPYy;T0i(amb8>B0)cn)1A;$Wzje(o|K5lf2(6hO=qVSfS0@`ujN578~3zUnWZ=Vcw$l6naO8UGAl z4gkKxAm*gX=9Ct|cO52jvzDGH7NP_xX~6EVaf`8mmhw8)%Fr$5Xj4Tq(Y z--95h#Tx38ZBAk>IFs}{i`BAr11u-69M9JOY%EV~q=%>ZvFY;2&$2rR-KFjf_ zfVH}ntJN`5gMre|*4x2A>6geDmLnD%o(-R$N{ah5l|$*X-XCxUz(?&Utz|4&=39C5B=F0K2Vk`C(BBl5_x0#2*~yC1)0(ZVa2K&dzw|9m#cX5xeHASwLs0@~h60 z|2O?d@;K00@&noKeunK119p~v&ozIdvjno;trW=z$j}Bdw9PLV`Va5z0nhl#_258R z{##}FiS5q!Q(uWh`&C~FWV>6bK>(1UZN(VcK<2=oA8lW*TL1v=Mi&5gCJTVOVlvM# zFp2~a-jUi&ZBX^B8h!R=?qnyFEveKFD=j<}zOcoI#72_H;XIF^kt>K8Ov3J2KxTek z--pO1^pmfFbS{e<1eeU=N%3@_)};M-$K2000RI2?jeY_@^8b!n;BO3C24%UhbaMr^ zh(eq|S%R|sI}Rp*dimG&(uRbev2K{fqep$;It_;-3eqFTf`N2k8Rlwm5DDCG4DO2l z|Gsw{3Ly<5NR5;59#kL}Q{M(lA=Yw}j6D&Ec=4<{GI@^dW~_8$7^^y~G`|Lo8$m<3 z2!l-yYI*{rMqhTtCd^4@6^{;5&5|PA5XQ6=bJ8v#$K`Ts6nt1aK#t305oBMgDN81p zAgk4%WVKqN;0ekSl;r||`cH3jU$(HZ+{71n##asq0?KlES~^*GEhH}dV>yW3at$r*A1(}ADMZn~opEis zPR^1`&xgxFb~{lpdzz=p`Og!wf!WhaO#y;Y>he+Q&vwQ^S%R{pUHOpluVnS3>{wJ~ zCp&K#V%>x%c~-ED^%=lPM~h@zdbDeK3I{Ss;qZkQ9E5y>kng`EoA%wJTgPs2u|2{I>hT`Hcd%9In`wLr|8Y zD>3_(FjR6u6Un5nH;#RI1Ba7;w+e%JE_?&Ho?I#X8T^^3}fR;o2$3 z`GEUO!RKB)VK5iv?#%P`{-%Gu=wBu#P-TM$zJWUbizlA7bb`&JmwvqHv@LFQbeYwN zh)}FDfHPVG1V!wf%~>QX`4Mas4I@l$Us};gVyL)z9C3KX6nQBuB&B9>#}1AFH< z0nHs-+7#egmm5wdrw^I5fujoZ#>NhGQU5&`wdgdKbWnf1nRm%J$-3C~8${c(Q#7dbSSj^qC|rT=3v^qqwMkC*(D z<0TtX$Bfpq0T_QlzRuWsTk%x6gZ2iX-^#5Yk0i9h!FEL>j5P!~)N76a}~j`STj& z?x9-pv}4E&VqslUE$q=(nbFsnJZS)v7e_VAHQ#GaK_O8-zhm+U|Jr;q`R6sC{vEoC zh%3M^S7!Q`I`O~Bi~ce+X}MH<9?h941A~<>l&8P0sQ;vQ1%r7om|rHCU%K_N*s)l7 zzKpM%9+=$WMO4n`;>SPPx09Q8QBMj$dZsKs0G050@k;)(6~GORmIhR7Iw*9S105ru zMR_7UDsh<*Y8b@+WqgE7-ePS}($F}=`t3Nv5*IPpUO_0*L8|7U~^ zk!;bd@bY-kJ#O5-i;=%Q%^^LT@{P_@B>GsuIt@0-vk}g+E5B*olb#>Jvjk%c0>KaI z0Z`pPJBGV7!x)%AfwKG-&-#7Egk^EWTlHS*`@VB(oSO%ReQ{N}STyV@>4D0@RIR zlkX%@B0vIF_ZG2hzH~TaPpl*c$Azy`{#1VX%l(!mZ730Q`cv`L>z6<1mrJ^Te_4Y}q9Bv#-;qfa)Jsq=LA~ti?G^pB zX>%n8g1!M_{x|$Qe#&rbACHQ=t@1M%}E*XDP16&Ww)Jw2;K$O_$ zd=xqhBJNfyw+ChUWew-A2D5kz;^@Lel1bYPRBpDI%=44%;1W5U=Mgk=1rdWu*gXrB ze4hq*M-kbCevlpf=h(sHL3Z#ZYR%B5KcbeGU=#$A^-I?6L0J+OAYuQG4OL4rU4nWE z>gD{f;qRcpUtnfix;F=&@s&K|e`E(Q_-YbqiC8{=0dl(}Ce#{a2mee#%18||T7OOv zf5@Bo2|xQolrhM(zT#7yPzY%dL28_Y_n-o?nEEzY3bB@(WbBDR#EWOuk;!vpH)Ew6 z!&uc>r2>Ezf*V0YxCnzy4rSyF@>!kCs~PTEDr_g7Q4 ze*lTzl7%H7){f=4ZV)tJ!~LfcOt4A(r<%k|>!oBjsFy#F4hLlku0Q>6Bt0Og=2uoC zeOqw*jx6U_$&Pn?StZM{Vyk3P;40ZKKivOrqkRZKDXYgGKjpn1$8RZ8auX3iwh_ZW zwSJVHC$V#V8OLzXKyD3KWw$WiG!2D1njHHIqk3L?FwtJ^$cpdL&riVGQX*qk>Vz^=9CJL z_(R7){20I#x>U`C{lKS@?k7D`))QH-bb4N07cywSZ$YUsA+h#$bW6TrpV!BS@$P(r;|RB>WN4Uz+zPN03Y$ z6rxCMkKAOi*HLocEJY;Sl{bPTNI!)TBY`7GOVM3{kouK`)PIXE0mo*(06uGK3EcMfy}f&Vy2x&WDGn{E#IFRIiw74HgxN!+d=ETF4sc;2&?7O?qn{w z+o4k-4JXccPdD2?Dz~MvA56AiTcpK)z?QGyWOo6|+O5}6{0oIt$z@25j@75|b!TDE z+rl2!w&{iiPL&190zrDDW#H$*8@G4>?qr8d%Sl<-B(ku9$P2BhuKO9|qjiwlH=LqQ2XR-qWetMIFTGtlHE|?Wf_m^Ti(^;1>?!Ai@R`vnMK`$)V%`Y zT~kD-q1t&PTyPmMDA_VeGPxHh4fh^i^@+ z=h~3h4?kpa=5>p<wlKE>^(1xZ}2^Dm$L zvE^XL(vX7Y_YVIv6l^&Q`5hg{6DxM&%%JO7WkufCx% z@|;7+l=6E5UTAnGS|O{ijYfU8mentx6jY&!N#hD84$c_*kP}*lffckDw15!C5=*00 z8C~>h5XsrL#kv8%NQn2@cax2!X;3=z3j+Qb@z5_vg-g3D=}T>kalsN+^?ynumpzxD zNnP2b1T?8%=aWBn9g6_T5sEb-$4q*!h#jhe$MkUdo680zZ>rR ztIucjpGpls$Vk7r=6eaHh7~Q4c71kh-}&`z>W>3%F8|wl#Mk=Mro%A5Fk^{|#((W0 z{$ND?)gjb55Na@vnn$kAlV&dQvoBs!0wr0@iWrlU@I>XSzC=7b|KMIn1)#^^7XJs? zE+$gQ&l&$>m1?Q<6xdK}*!EZsqV=^d{p@3{aCz--@CYH)N&{GRn6v|8+;n^-SOo8j z$hJcWk{rxuhDq(?{c-H<8X;lfH7JXbA?ff~SV#^k9RZb0w%50kPd_0%Vh`Y99iU_R_&;V=pDsfjjG8Wba{Fg4Yh-N_MQ zNg4?!kB%S_)15`6DG{ZS!9E?TNnX^HkkbokSo55jpc8g54(o%Rs3+jV!!m((jG30x5js5xg{YbptU~F8A8g@8wnCy#fX_10RGm+(P#?AQmB4N^@O)br82nU;| zj_~R3i2>X|PvW!R3T$f*(lOzb+gR$%$r{JS_U=g zdW7bzMl1qB>?Yxc%ehc3%~{Ynj6W}!Er=`x2{*|QJ;=r;C5aemCyi(J(kM@cBhqXgt?dyr6S&dZRQ9l@ z97p@n>FFY5Osx{|fsS*eB6NLyEk0U=9fQ3?gOVnXDj_7NrY1^>st7B)5q5UW;B6D< zVLW-dxHo3fSGwI_!YOdn*B4dCg=%h@n;Q-u?jUbkwQ3caymr+YxwY%It=h0^Bk=E? zs~k)HITUDCt&+`JwTcRO#m0!&+``sK$DGH;*r-ok)dVk0?*zL_c78m0ET^MwhvGdb z{>H6tql%|*bGWamq$F3M4;1-b^Ozg7KdCOS@?`JFD)e))y@em$+HsgcHJg*}lhTgR zl#%AKwZ-OoJws-X_eUAp94Kxssgl-UU`TyQ=aP~6(YXAOUQaaBb7{%hIg`mF#OuMl zs+E-6pXX8O_6Sp2TL;lIs#aDw%bDn94DlM4TaRtwne(Rab2txM|NO4DVPtOW6?2Q? zi;>I&kjT?}dtYRkBQ<{xmXPYa9VHQq9=4XyBgdc)yfOiMf^ zc5{}c&8F(>Eq2CCx*G3a2v~6&BE&l03#eR(Hkv;EZ5~;p`9W%4qYY)AxP(aAp#&tO)UD5Llp4|?snvSa9r8YaOU90STtEBLe zeiMt9QWSU7=Cd2%e93pL4qEFt1;hl}1+%`8#eOulI1p_szbEqIK3J&s6)a_;v+N6b zITfq>{jH3)PeOkia=%z2l+b4|>9RqQH`Qrb`vc@1|MRCY3lUdYj_OgG{>{_@>j{ktz5*QljzwA|hJ(zs55 zijD{6Q})c`bkbI9qqG2dlQ2V^b`JkkJM#K*qP{ANh{t~CIqFU(SCjsuRnL;J-1nk= z;??fY?V>bkdUT=k{`Jk;dy9|i8gROOl;;)jxwK#FxYq&xopFz}H@p`aRiA1$w_t!j zN>XPG@G>vIOm(|jpmA@H48LDGx|~vcr_+Jz@J=g1^_`4r0(5jNB?qMFagW2AWc++G zW?u@Pp^em7vptoVBq+0z8$l3cg+6v$sc)@D$`$`#=}`7rys?Sbzhrcj^2{ItDgTZ z-xj%Y*pXuayDzLxYH!KUHjb5fUXv=UI%eI~e}+SY@o3lt&Pk`6rM%jh_~Ll-HMyhj znG-4n4>cXNn$jO&E4tHDexaOajex1!swcF0{Y?3Fo3sQVmiuc08dpzOuJ?YiYf~bP)`ydoj8AAB?r&?XY#X3E;S+bSKuaehSgd`w z=*gG5Xu7)XS4A$x-wbGyhi;6#zcKHipMR)|%iSC^!F%R$1C4=4Lu!;;Rd?STquwpA zxWDW!x6g}R_I|QqB%{^sV@TWhsM-sw1mu zSBtH^!XV7tB35uyjK8wJiuS@r{niIeXLtfcS&l^VYkSH)-@QJ@reR~^nf#=F1|gtQ zBNpoMB(Mu}1wL7pw+V4eeeIiCivILdPDg!qkeEuPA~)-MT+*lPz#rwfxO4Nq=^J_o zr$%wPN?2?5xwJzLlbe+8($w1Uqxpx`&U*hw>a>rz?qV}Z&!!x-&d+(>4tW;3w~7ht z*534c@OWL?&YhEIUkJ3*ubNmbas$FXpea{Vc>GLcDLg{waj4qc{X$fA&+Z;b(aVZZ z*mLiM$I?B&Z+P2G z->`A@qt^sg>Bqa)d98*9=A1sf9lJV7$mKWh2UPFW3SZaIZY`wPt+W^37U0p!5ofs} zGJq(*FJ#ciMabtCi#~i^MN4(v(~x)U4I7`huT~6t&`qY&A@(pR)m>8$4}Vws#9_#P zd*~_!! z(>&iTXJ&e!diE_2Qmj(*T<_tNV`sCqd~8@IZmkzKI)Cl*TKEgY<17URMIP=Wc#l1B z*?X~PZ$zks>>!QHGU%LtAV`UE9p^Y{MsnUc1Lb$8O5#ZoDj&clN6K`?qv-UXMpcJ{;|N;3I9J zcmKjmhwU3CExcbVXlW{~v2S2Jc=KI)=_ZKZdamA$rQ+u=gcPlbDmX`L?2?*%>R^d# zQ1?19*}y8n$*b3;4I)$d#;QV2&k1C9+5f#Yr%_a3P7-@^{FFq%J;54z zy}TrIE{-d7yUwkxaxL_8r+#;qG4D3YKuc1g&1?O(EM51GM*F(W=Mqa2l9|mMSRV#N z5k>;kq6k8gw_hog+Mr);tFah@9+KPp?nuMUsHj9ue;(Kzi=awg`(3@q#~#Rr_1qV% zV!kc+_-PiC6HfuH>HW8_j;4n7locJJan}!}tIc1{L{}+Kdc&XG$+bby7j}msu%m%4 zI~IYyed6fL7oG2UeD&Ej9`1=MzQ!wefeHK30ZL`o*B7vG#I@YWEkCi&4+}_agCi6OH&^xL?kv#0hii(ui{5uC; z*zO-|Q!72Y1x@Cc6c&8BUcCDC>?&`xsdQeNusfPVA*f^=dMo6$cEU|g>>Jxk(}dV( zExlegtAnpGEVo%hS|KhHm?uXma+ zlGEu!*>q5UVNvW8e%ke3ES8ikSH`ZPDYf~S?xgSCmMS7RH2eJAof9(=_7Rc3MtAAm zm`BVM9(BK2TWshWD!|`%KfIIi#EV7=a}3{UXWg7t#|!w~QnpXkm8@Z7qTK%Gkxt(8 zoETBsDFsILF4y~%2QOe;2y5;=B4(Z%W(a!OWw$9>@pZ<{qkCTSV>e0GJiMRLT5(h_ z&|I9!$^XL1XGhk;m6ONM-QMt_cr6w4nOK80w@VK|ww_&Ad_vAjb-lb)HDk(NEpa^B zH{xb;)RTsLd|}hZE{UGT`X@abSZFQjjXlFXcBps%#??@CQNNja%dn8;jl+j~UY&qc z$F74VX_l{NE{YC1tuNIX>y@iL;L@@2D)+Vclh%*rlQRVP8M`l~cSN7Ke&}9^>RWzp zB+r_m0AVHimtOXpbvOBOC0)I6QXp`vGk^PznD~U-d5Zd?qW5knrX{0{R$bdKAVNwg zrSm3Gyx!3F+oN@-t(EV)y2|TbHF?i&`|-KyUD}gpci?Z2Y-+fl`>=VNcA8o1P5o!_ zXFNwPsy)$%9d%#Vdvfow{0jy2KG(!Jg04OZDmue35O6im7$#?wf2;t7qp{A9&Tyy6 z)03hIcdAuALV%W4aXCJG#c?wdHo(n7J$!T@rh;m^uOEn*Z$`E|G@4=WAANiI$rh=H zq_h$dbM|RdF~=;m)!HW?Fm7i!0=ugux2oTbj>yrGE^K-WfihAMba6UXbk5;PBTlaK zW>F7*2=36eBWJa2P3|NL7x19V2BwyMe3tqs)=to!#gz~%FS5fVH~N5r^>GP&zszBG zhuw8O2L?lJuCdQ4`gF*sbivhByC z*U_`yi;fNtFSljOGdO{?d475$A8Fu@of+k-_z&y09o8z4-7u@i?ou;78pGxSTg@?h zXZC9ET5eeOo%Jx}5A^ zd%j2FkHc!X%FM6UvPX=VhBNNmk+=F-+DRqKs+-l4e%*Q+HSew&2)8?=mvBb4Ugz!e zurJKFO{!~UQLS_jMQW#q`JxW9r|%QO8&_Bnm=F^+!3rf|!;^?+{bza-NC$?sWxZCLRHA+IuZzm@byMy$->2BZlQSiGz zcHW;Jv+9|hlB*uY`dxjXR2q2ExbJB- z)6F&>dKgCgvakP^sL8#=_1mp1btesKwyAp9wzo7s8hEadAMB&U$ef7AY)*1Fz7Zl4 z-K#ES*)O{-Wp7NuiQbwMV_6e5lUd!rnJA{Nlcx#ELPQK3#r0>cgy&l|TT<7}+@gZHy*(#G7YuYw|SFzctZiyytJpbnMRWv7C#eJ=zpqkoM!rSt&?^{xJ zd%|I1H=@d6^pT#8xt0CsYepLC@^N8dys@04(F6k8f{(d`OcB>1n!?iLNXaE=$>N$R zuCVz-*;>goi-Y--YfM-*n8PA%dy{nnuDp@qg|F`lmBQ4VaL&CDY~XVv{S9>W!>0AZ z5*?V!Xh(!-Q}By|<5l)ed$zEAM4#eHTBSL6o7t8q{oTCV+f(GpKH}~2>I?{^sPN_-MT8I@nr-lG)mXiakH?Jf5}CxlQI4_lm@>rTux z7_LW2O%V{&c&+$@HdYD5O1;|Rj=skJespU_#y$p^yk4~nj3;_D*sLggG^QVIr13Bx zZF!N~q_8p5m(4NV@w^Xb_;%-RgM`^iJ$rF%Uq9l~E6zyN>z6W!{^1spaLFmW)>yl5 zF;{dYdc?P}mPRSJ^y=KiJ>7L;uY1oS86-+^T@} z-mW+gdiVA=&$e3}B7Vq3gLCQ+@xm>KV}{k_7=K?@!rY>`n<1;$PiQRgxXzgQ-*%$_h~T-z;gR zLdg;bQ*eEAX3hCBiZ``$j-oFMWdaf|j~wi?gZUJ8pwsrBv4mqeXFS*R!!77P1P=FJ zKg6VS+J0<$MtH3+=b-Fp_c0efIf{}B3oZHUrw5%Qoe6sNvVAl5>JCzjzMl5Bj(j0O zJXR-PQ04A6(mZOdo)Z_+y5sWMJmH`R_fOIL-aA(M)>@C(gCer%YS#T>Zp8yh^oji8 z+)}*n(OSC?NIbv2W57~i^3Ad0DAp5jbY-NwLQM?qZJ~_94F?6nc;jR%>z^CJ5USiK z@b`}G4}6G3AF1NFd^3&HgoiClQq1OIX|bo_)5N)nu|qA2sV27Z`~8WJ;1hkrxz}e} z5C`Dg&V6MJqc4N5w#gRLGLxhdb>m`GV$rf(6#cbak;Y_;-{2zk$a1=tS{jZ@J?qVG z?>TWvA^yrSBe8Q6g^9A#JTdMLRx>;Vj|OE0_KD1~TqEkfqv$7I&$JNdi{yjd-`Y_t zudVN!x+uyt*G~DYR6=oZ1HoG){q5tcw^^)9VvZcL95`9Y z8^cLXLTV53$6(Dj83`G~2QMYoTjaFIq7RW#$*(#^6l&x7p5F@G4!gUr!go*B1N#mU zf=1~9{^yU=e8t_xBVQuQy1FoJHsC&5^cg4UPj-jZIr7e%9?e6hfo=;Rmfh^hzMlj(=Jsuu33lJDaa$t z+EYr!8@gpGK5*x5K|2!%K6aXQ0c8i)N}j+m+`;g`bgDwuzS4Lg!jO(u>dV?k?EM(A zMHbp_BYr)YimMH}7e}<}LmJJfovs}8AYW-IA)RrlqSD2NVC-pesUh~%Fmr#BWwegI0OesmS`U%NMs!f9Y=4aO zTR+?OzBM@z%7DY|iLR|%T_$P}&-FIrEn?PBn%_aoD-}pg) z;IPI&7GS^ca!0C0!b{GgjUP0>^aEy+Qe0*{aS9a0|iUmfMvZFE&i(T)qc+_g1t`WRIQB+tJL4t#P-|8_=rK z7UqY1bb4PLX^m=@%8LjnEvwooM#z}0pHFYgNgSBnY`@n|498Mkm z;47Gz!?HdfNcLP}_J@M9D(ifUs#-4GQMs_b)xE^Bth=^9W|NF!YYH@WQp{~_esr^E z^7h>e6HaWa_963AbdI=dQ3hz;6=1z_Y*&yp1KWYEaZ~WLmX8@{nXFG;XFR3((MsT! zuv335zP9-O8kc9jp0$-lHB;{lR+U6+CAp4S?Mi`_9qbDpLGbluu>Iy>!jZZuQZ=JO z)MiV9glAiB?7UjiG+WZ1>vl`0n_tf2&58*iMq8k#w%V zH_Dy84RaF9UAvEaL^%V}Ub&xFe9^I4SoU5|@k`~^BTBeH+z^hUBH53++ ziT%Y>cLfCv@}g$wnJLCZU37j$o+?n(jU{)#=}Ig<^%SHbGY)?KUS;EysFSmkqksJU zf1&4f9WPe5>ncd#NLqBoySn$eG_(p6E``Qa`IKuI`Zt|fsPCxB472#QMnCCPNbLTK zA8xy9*^0eKoh&FP?}}GbO1y1)?<2ORMCD6i4UZbfdRtVVy+@r?*@(KF=@a1xbrmF4 zNK9oz02?0iax}lec~?J%0;?v5(kgm=NbZet+;lLiklHtm+Eq2VqMS}?7rlt(PCg_{ z*eLXnG&8ABoB za~#H?Bxnr<;ySJBrD3nT5Nv$QoajkO%fwP$D&tBnvNqMj5#nh|q8rE$=>`LU3=oG} z6^n9A@-)JDSn@$R23LdF%l*>{PH*~tjo@}wzlsNEdBMzR?ko&8r&Lq&Vm@8X7G%Xk zW%9l{Xk)H%yH;_bRSE~e9~igdfgq2YPJFv(n<}TNJYj?_&CZlE(TfE#XPFGN=$24^ z^4}H(7@eU#R75s(9yi*H<^!UG_}>*?x4H_i4-TKcL56C}(^SSFLfs`vW9OG$#z674 z@hh~QXe0raT7kj$PZUIx4c<32vV(~=-#(0OGP;{G&Qwy20YIT}*7PF<58XkO3ta=# zx`vuoRV0+9izuX*%VxRgEVB+YPS zo|etsEM@T9no(952z^B!Grhy}Qe%NR3aJvgXWZ0~jG`cPd9KR@?whtxO5>v+R9$*G zy1Gt`epQ^wGNp`4aA)i(Yw;qzWdoR@_OggF7Cz{>F2|zM*>MQgd#vKBiy`VUG~$gx zfKz*UE=aWRXL%o=->Z{8=hqkq$WJl&>BbSyFXjP$2wBmWn2K+>Zs>0@$@U^IWq z$IVO1NvjKTxj6sDw#yHZ_M58E^som}Tl?64o)j`BW%(H6g^IoiW1~r~_HOlT*LJxZ zax#sz<=#**Zp=)EjJUG_C4-*r#bfTFJxjcH1w@7^ynrUuArVE9AA(5O77{Q zs$sIEveqZk4(b|&r^en}rv0qAX$6t}3{4#;McXsFh9T8c`6+0lXGLE$%uxwp@<)v6 z)FUe!T!u84LAlG7Rq-8?GtZ$sigh{$+H-t%UQT|(m}LMhsWo8T>-v^! z15yY~)cw})9@Bg>0fp01Vf_@CaypuB8qSO)(s)RdjPF}`jHNAUv>ysv33k+N zYLoaLOqjhVMpyd|iev*m5g1j9Nm_rXFZHy9`7C@r%?woy_3b$e(;8W%7atryI|Com zVNA&_Z&|c?{;CsbMvCHxQ$IherqteJ=>k?7vx;l$YBQQ@o-DoVglAhd&%&)RRfgYl z&D-a%I`JDlwim3A$P~h{Xd{NaJpO(grnoSiuyu29^{CWZF5i1js3>qFz zr&b1iMRv(*ElEI|dJDM%Sw!fVSxN|iN`$T?l~#Kg71Il|p=t-40~#gS^KX$g9==S>rtoCsGdS@>^`vkic}kQ`ee^8pa2(2cUChS7zW; z?!xp3*KwV9@q#9O|;k`6{i+so%ZHy0D(z=Te zTLp_bFb`ykz#2ZSeP;ckR*r7?u|y$%_Dq}5=TjYL7a?~B%fOGbb1n&I8EuzGwX|In z@$Ss_<4$)ZcY6@Kl z&`NPQpxBk&Yx~d>R>BOY9W;OU&X#<&?{}lz-8yLhpv2XIQO+W!KGJLH{5TbthLH{k z6|C-OK$=;R*HDz`atN1kdDd-t$1v+>oCc33@26we5~_#QTV!2381mSR=%l{>h7l+;rb}B}T#me%|1pIz+2O2d1FGfLt#hEC)s7U2rawjN7JlZI%qW3ujjdXqTPl7x*pw7h*42cAx3>VSG? z6UXdZ#5H$QR$<&dr2qD6w4i(dI<{HSG^owKpn#5^>iQp8hC8PkfedJoBQRvnIx+i6 z7-Ui{tEvgVDf@n*H@IQ)#*gP*GTMLGIwnJxKq&wRC& zB~YGYA11_Z<77EaI>|wETpZW1mTUR2=DAJSVw`A6ff`-hP-}BQC?mH;-WXABVEfFp zV$@1GbhD?5OOts2%2GL|Jd~#S_P%h%dgHo-I zETNXUbY%hTZWL8!BAY!oM_=b+d8TMhU!{?{>V;!#rz6qTP1rA~v{lQhM#C3d;uy?= zq?%xsI*!7Bhd07>Q^)pWHP~9;Mn#)Y7%{7UWa|eazQ_s)?qS6@IV*l3N%u?j@@F$( zR^G{XLh%jt9hwyJ)3?eR)_jnEjg&F|ZpwBZ<&?P+1uavS=KBaVV!hYeAB**6qqxzU z4AV(GY46FR>K~ zjx*5T!EkiYESfj zK1ve2$hdSKnn9A?Y-A16`c_hO?nI+Ik8>s;uBb|BM;y=MUo4LwU<9M>bMAc*h7$M| zVOQh~1Z13XW-iMU_C$MRwy?blJy-L^^=Q_hw*g=*qhtMc?Pua}@|>L;Ox9HMGz3k` zku20HL%oRR|HjvY5L+T8xk&}K#>hGWziY_Dy&|ajfPM6`lQ+A#5qAK>l!1Q0G8kpi z7-xfmWRzdjN4VdLiCU2gFN>Gw3PO0%7r=+HoAAa0AA7%5ofpNT!YL+7C)xUT7@74H9oBhny9}f2Vkkg$mHlIMN*qHPaLtk z9cVTZn=Hk98Vrtal}>zRJp>@pnxtiN-zG|GFeAcRw?L$2FX(%q&^a#Da4mG3ZaQTp z0o_mfcTsAO9v3@;*ve^umT>85-cP+rxx5pUP5L+AY8&e?Gm9 zltNDrrC;ZiVle2U^Kx-$2CjMkO;e9GhG#>PcN+ro z`tHckjwToFzL8ts^+gjT@l6JnOgOb1sZGoo=~;GonisF!@IU#iV0gmH*qSHB;@!ya zofIP|N#NR=U`Slkk)~K%JNi9TeuOPWU0}bUbmRQFH5gGR9QgJDyR~j>nvzc;Gi9&X za>j$CS5@9@U99Nq;~gwWolY((I4)h8*Y{a_$L1)%1@!N=~bIwXeSi=VRl6*S#l1*jQ83+TeH?(J9 z0Zbq*+lNrr7DAsu0NheTE6unoC)RXxWHGD>aoS6Q^djDIU%WcT6(ids+%1eXdwaz4 z*ObcNoV(HbB$;#ZovHaS#%JOjI&eDoma2;e*>j3i_V(IpFlR^g?)mF1L?l71`vA}D zzf=BawasqqKdG+7=JC6q@z;PwfmS)ZVbAd$U70@zuen^ySR)w|-2I_BDWYqw412uP@?Va<(DR=qs+cW;`=U zzGChJ2B8o(z@`5iAL#C~phG>z6SXd}OA2^9)~(E{tVJbX_=FPDlWgXHpX4Y!A!7 z%vt`Xxjr^llx**ePs(!3Jw)0q&q5ExJ?_{1SKD%?b!^EC`2V;NZyOs zgI|V!rK}_di`m9?+fBs9ba11GPhaJHVq0Hc!wyJcCCVL1n&oJrJr*!dpOjO@a5`9t zDl7PeHh@Jk9K`?*h_E5B$ltz*1E(=50acLN!-TJMCOnV*QNN*__=pGE@$fMiARnV0 zsJBcME;%WJv@JWnu!|U$j4isg29@*-Jr$g6pxy*_N8@?xqO~<)bQyCikt%XBC66<@ z(Uy=BC6;4>9Qx#6|y59yO5G=y7334RwY`yF!`NSVJ0F>FB`Ucg>46TI-$$gvT8LX)E z*QxDBTE?`xW~R;BFfsIa!`lstEt|3w#`Ul?E4+NKU8-b;G&mB*t0gl`F~*u++&WqL zvF=-9a|W^Qj#+VEqAgu;y76O_lUyV=+OvsVOk|DMZmOIxi3gq2%?PoX@Zvd%{bDC_oVywP}A3X z4lOHS-9>y0nasIQOJJ)T_1pstxH?n5_q*DraYyRnMCC(9hZ5f~gv|u6Ku^HWCDSy$<~2@Bi~Z zj}8Px5!dB>1mSP-`ibd6M=L-NyD3lvxe1G>eYn!FK0z0jAJq!Q{aJigEG~cc2FQO+ z!2S|o&((6AroO4B#zo%PD?i9!5W4yRj5~W98)Uc>C@1*T8gu0netpi!NMMJtiENI+ zswc()4`!V3BhDn~o#@AfJtRcnO|+9aHy}FG=MySaEbhv72{10@U6@6YKZ+1}Z;$qpMUv=#WANy*+8=y~P)QTiUXnaf)_H=Vio`V@JD8Tka$ zMlHamL2)}GOuQvXs7UOV-A9-%>-AHUfwvHWFY?jlfI6{GpyJ;Ri!ocxX-puhd(bTc z?1ZIGx0iMFc_cdZBLOO>bj@`bBx#I;E{oSNNWaQ- z)yYz95;MbE44VUNPNflUB}42n%36>S=*=uqKf#@EOIwycoL*KYuh4yrs=_1d$69(~6`UTyG9v398+G zvrP#*3AC>VQ~*-7-9?p9`ZkCi$;%Q;zMvNHX7HR1ro9!JhOWE)PdJ510>q-(_m zTIt+=*raB6Z#o90|vd#*`=`ihfadtX0wIqIo>;Q)ok$7=?4Gr0!&RlS^YfTjP zaX=$!;-Jn11olE}#@-{&@}d)m-FMhx`+|L-+9Dd59CR)4qR{|?v` z^KRz)AAkQp#e*ea$RKJQEDfw4_lVMN7IZAOtflA&ZM(-Q5@JCBzMqN#U9v<->UYkE za-nikdl&?^xLY7)hygB7`V);rS`@ECS3)E9h_!Awdy8xgsi+|;;26p7F>Ahg1YpME~rNuIrYU=TL9nSF& zZrhvALvs03K%8iuIE?pN`o3^9;3ex42o}hJA1&zMp7@ZVE!mX}>#&Tr1MA36e7TMh zM*9ZIMlotTaP9c;T)opDuPXErvyR1s*Boh0h3(BG=D6t~B^Bc9T_dgkrzeXQT&o+o zg@p0c_fCDl1-Phln(mSKx7D6-Lax=uB$2&6#@b?AuXcN1Y5|D}BK*&!`egc(jxPM$ zDwEw>-d#JHlgRBkcT!p)p=TPTCa>yM#D@CM+}SOz$| zV4;dma?&y)z?$MI`E6tzEIq#CFDSL}o?d=_XqW5)Q@eJNF+Qw|Imsd<2G)O_?^zkp z*?kE_gIgh4o5JTTzU*fYugmWKXwj%Q9oj=edw9S^X=aS!>tHo-tt;Goy3)RAW$~Qj z>)KxG=-GFN2j|CcUWZa<@%-(<$kx{{1v});eeN=zho)fIA441do zTLZ;I+Wx*DF0ep1_ev(3YjM+|3Rv?g$LrPouMMgE$YipV4Z(nth=3eO(za!?cNEZw zQTcc6jjhIJL$pS4i7Q&!=SX(DV3XTzJE~pVq#2v~QPsCy=PTjUUxOX~e&btO&%&LbPhBgaX2kp&OCP}EK8+HCRLun%j}_VWv=j8HPCu{L`0U3eld@)7SK zy|yi^S%!LE0Y|D(;2sF8q%_KEg_MB(6GLK9UYL}$5}meTt1}1Xtp|QV?vV}6tPzgt z$q>=xk{0YJBd^Uv?YorTk$E99|ItRBpdM8ibr81BR5eh6Ri@d7rRP5O;zR?VMzGuw z#}9OM(0o*rT-68u`S(UB4ldn-%76lVGNqos2c3aDs{z-smd5u>MLDE?kkKL)v3q zE-r`-KLS=}D}<$RURy1uvc6(TH?P(vZ4c$3A6o0P1q2+&F{5;UJ!09e(wW;hZV53d z^UD|srq=lWh_413E-a2J`=PBeYSi?@s*#(EP5FlA!qkO@*>npVHQJk--AJ=+t&pAH z@}j?mhIN|VX>is8WqsEkg3}}TDsBSMFm1m+pRf=^1fF=pa5WpC*X_5p9SQv-Nvtv+ zvBYGiE(23hGjW5dYl}5DUbDBFTnImO3bbAb?s?q%9l4Xr8KiofKHw8N&gcz8GLU^<4-IgwL>IH z5k@3)QxC{&PL~#iS?}7r&N%R8ZjtL*|6uF;F|@_Sh3=f@E37G?rj8%|dKuTXRXbm} zVbI8zVGM;5DhN3!f9#)ULy3Vl&7f!+eMd2*E1z4<3>j!p|08Jj#~JGe2q|PhH?rrx z3bzMGyA|xKjMd#;bHUl)(W-w#*9FGuI|!*SZ|)6oI==j{Ns~-=cTe)*cR54#;MX}_ z=X05fyu0r0Euxau`9nI{V2XgF#Qo$=)D1B-&sBivYt5`OW5U$2z92CGf44=F+1dFW8ggI*E9zz z{q>S?XUVO<3#RJqFWaWZcCJqcZsy!Ekim06hz*{Q%?5Aa+nBoF!_>zurgmFuNu%t+ zaX5^wDSlow8?0($mmnbZs#4qiQ{xBW(*bEs2OcNq5WJQvCCZvzh)pTujW^uWD`iF2 zb^d#z?w8T#HRy5AWM_v9ng+?-H0Lu`<{C2^j75LAsoC?P{H7K~IZc{Jl+8{}O3ZIH z=Qd{5V6q=>kdDIgAC-+D~9aGaw0&3=fnyl@3rZh1Uo4Bi{NO`BEhyzb$ zzSr4Q4=5w6ce<5oXSdC2jtLr1*|-fS(%^bSRDOrtE%Dd&&|%1+nk`*yDHpP{+rxm& zFPjT(`q2T3X5ol(B>iT zn0L!LL|01_AG^eXc@Wn+?GwTg-et=oYJ9WPPRmu;1*gNCNrq6gX5%O$w?S7Af8cqJx@ zWv)_;3rw4!G|mz4eA%Ni+1B-a1lEd0sYepkcI)tI zY$F0xF(QlTtU|dUB4$52ceY={L67h1c3)a%A~SlT-@PpQt#QZ(%!soRAj#dY9jcvd$u9jk+uEKcdbw7HllwLiVx1$xalNi% z*o2p$HVj1p!sV(Ob@xM z!TEQE_LJpBbd|^D)sB)Z;1Au?o&;?m(GG%b&7*9kySF%H3lx;VwelY)*i#+*;XP;w zHufr8F=fNZqLwqag!>l+2!%n1+*Mpx`306CWpvZ zSjQ0uTsRp*k$kR{t{hIoRe+5w`6`Buih=a9-x3UtzMRdHqbx>A<>;;E?YYg{B5sh1 zh?#u6UNJDY#{SI(8wOfpm&rc37*1IRjeb7|Cw^*yOJ&V!l2+-0YtuN!IKE4VX)!{! zeP==bfKl6`Z?E>ZY%O@rmbp`PwLdUE<`Ixx&Y;D!imk2PI<#T&lB2*G!zo)@+w8OD z?Clnxe`x<$Otq5mVeviRhjYbSWm8Tn#`2wQV6k63m+5@LKxa)AZi`j|q6)-U-y{p~ zzd7*}wqh-VUT&_K#f&;=ov(@;u8!kI!!Kfp2E-0dtPazUnCV5apEeSHQ*f-!fMODI zaj9XtwM2nkIr=bmW#Hprxn)*DA9=$@7oPK}Dl3e9B^~&|%?g_REFKm81Dhf*i^I{J z{i82&MCz?eWp5p)O4P}%g%BV7mwCJXu-6V6uVqenxwMd0S)KJW)8=;AB61a@=`c{9 zBNL-M118RE!@WIQxWtRB1oC{&q6hvpFTSrZ(=r&&y6tF%>9S&Q{HJ*ES=n5I*(TKu zkPo=V^*VZMe(=(LP!sUJ`9(n<%N&d*+pZu3%(KIz<=QppjKr)GBSGF+ZsTFB5@sY7 z%}hD<$uW&_C4)5WiT{B)O$7tK$m+N*JW0lDq}Xs}>3zaokQ369hvis%kSPIy%Pxzj zC&z20!y+vmaa0R~>_^2mY}28F56V=qx%#nqz^gvj3Kc1oZM;pp5Ia5WKGxLjJwiOB zA0#KM@!jXe!Ru${1IX2e(P}KJpGzMn{<->Z-oV*(q-@1e94%~CY+%PEX(q|sE?JsD zTR5SzfK3p;93>f}Gmz9~^ve>oQ@q6P5e?-!_236~5tNJsp1o46d;`-u@#P@wvnhQFE56@xa$# zH}Btj9PYoROa@o+$})=aoAm^=zvaGREU0g4y`OvRyflS0v^?9Q%XtgPfrmoJ0Sf)VdJoOWaq{_`YWw`TX@g_TTle|3^4AT$k`42< z)5cI76#Kc8jcXUq&s32=27BjA9m+c!S!?f*A&$~NG#>yxV;$2Db(Ex-?|1L$I zGHBs%!u5q|LLeef?;8;ra^4_dh;i5l($pI^?8?hnVkib&q>$c0y_B=2FwoMCUU$}` zSAmQ(vTyjPx8knFiszvXtWWC9&n19V6G9N|-V>w1x}7Wxu^Tbw%^Ha;-~wu8!6w|{ zj)01GhUIrmZ@4uTnZ?cYoqR{F1%`()Xq@v%DsaM484``a#LZCOPB-e?$?(l-HKpK4 zIfRUWn=Nplcw0R60iX|7F$wrMH96QSWa;B(Vdu_4@$U6wL�C5Za~2#Fqr8Mqia553P%Yvs>G`vG;tg@2)#yEf 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 WhTxz576=IC^ELX}^&blUxconk`gw5x diff --git a/webhub/database.py b/webhub/database.py deleted file mode 100644 index bc3e62ae..00000000 --- a/webhub/database.py +++ /dev/null @@ -1,4 +0,0 @@ -#Version : Phython/Django 2.7.6, PostgreSQL 9.3.4 -#Author : Vaibhavi Desai -#Github username : desaivaibhavi -#email : ranihaileydesai@gmail.com \ No newline at end of file diff --git a/webhub/scripts/runxlrd.py b/webhub/scripts/runxlrd.py deleted file mode 100644 index f26067e1..00000000 --- a/webhub/scripts/runxlrd.py +++ /dev/null @@ -1,414 +0,0 @@ -#!/usr/bin/env python -# Copyright (c) 2005-2012 Stephen John Machin, Lingfo Pty Ltd -# This script is part of the xlrd package, which is released under a -# BSD-style licence. - -from __future__ import print_function - -cmd_doc = """ -Commands: - -2rows Print the contents of first and last row in each sheet -3rows Print the contents of first, second and last row in each sheet -bench Same as "show", but doesn't print -- for profiling -biff_count[1] Print a count of each type of BIFF record in the file -biff_dump[1] Print a dump (char and hex) of the BIFF records in the file -fonts hdr + print a dump of all font objects -hdr Mini-overview of file (no per-sheet information) -hotshot Do a hotshot profile run e.g. ... -f1 hotshot bench bigfile*.xls -labels Dump of sheet.col_label_ranges and ...row... for each sheet -name_dump Dump of each object in book.name_obj_list -names Print brief information for each NAME record -ov Overview of file -profile Like "hotshot", but uses cProfile -show Print the contents of all rows in each sheet -version[0] Print versions of xlrd and Python and exit -xfc Print "XF counts" and cell-type counts -- see code for details - -[0] means no file arg -[1] means only one file arg i.e. no glob.glob pattern -""" - -options = None -if __name__ == "__main__": - - PSYCO = 0 - - import xlrd - import sys, time, glob, traceback, gc - - from xlrd.timemachine import xrange, REPR - - - class LogHandler(object): - - def __init__(self, logfileobj): - self.logfileobj = logfileobj - self.fileheading = None - self.shown = 0 - - def setfileheading(self, fileheading): - self.fileheading = fileheading - self.shown = 0 - - def write(self, text): - if self.fileheading and not self.shown: - self.logfileobj.write(self.fileheading) - self.shown = 1 - self.logfileobj.write(text) - - null_cell = xlrd.empty_cell - - def show_row(bk, sh, rowx, colrange, printit): - if bk.ragged_rows: - colrange = range(sh.row_len(rowx)) - if not colrange: return - if printit: print() - if bk.formatting_info: - for colx, ty, val, cxfx in get_row_data(bk, sh, rowx, colrange): - if printit: - print("cell %s%d: type=%d, data: %r, xfx: %s" - % (xlrd.colname(colx), rowx+1, ty, val, cxfx)) - else: - for colx, ty, val, _unused in get_row_data(bk, sh, rowx, colrange): - if printit: - print("cell %s%d: type=%d, data: %r" % (xlrd.colname(colx), rowx+1, ty, val)) - - def get_row_data(bk, sh, rowx, colrange): - result = [] - dmode = bk.datemode - ctys = sh.row_types(rowx) - cvals = sh.row_values(rowx) - for colx in colrange: - cty = ctys[colx] - cval = cvals[colx] - if bk.formatting_info: - cxfx = str(sh.cell_xf_index(rowx, colx)) - else: - cxfx = '' - if cty == xlrd.XL_CELL_DATE: - try: - showval = xlrd.xldate_as_tuple(cval, dmode) - except xlrd.XLDateError as e: - showval = "%s:%s" % (type(e).__name__, e) - cty = xlrd.XL_CELL_ERROR - elif cty == xlrd.XL_CELL_ERROR: - showval = xlrd.error_text_from_code.get(cval, '' % cval) - else: - showval = cval - result.append((colx, cty, showval, cxfx)) - return result - - def bk_header(bk): - print() - print("BIFF version: %s; datemode: %s" - % (xlrd.biff_text_from_num[bk.biff_version], bk.datemode)) - print("codepage: %r (encoding: %s); countries: %r" - % (bk.codepage, bk.encoding, bk.countries)) - print("Last saved by: %r" % bk.user_name) - print("Number of data sheets: %d" % bk.nsheets) - print("Use mmap: %d; Formatting: %d; On demand: %d" - % (bk.use_mmap, bk.formatting_info, bk.on_demand)) - print("Ragged rows: %d" % bk.ragged_rows) - if bk.formatting_info: - print("FORMATs: %d, FONTs: %d, XFs: %d" - % (len(bk.format_list), len(bk.font_list), len(bk.xf_list))) - if not options.suppress_timing: - print("Load time: %.2f seconds (stage 1) %.2f seconds (stage 2)" - % (bk.load_time_stage_1, bk.load_time_stage_2)) - print() - - def show_fonts(bk): - print("Fonts:") - for x in xrange(len(bk.font_list)): - font = bk.font_list[x] - font.dump(header='== Index %d ==' % x, indent=4) - - def show_names(bk, dump=0): - bk_header(bk) - if bk.biff_version < 50: - print("Names not extracted in this BIFF version") - return - nlist = bk.name_obj_list - print("Name list: %d entries" % len(nlist)) - for nobj in nlist: - if dump: - nobj.dump(sys.stdout, - header="\n=== Dump of name_obj_list[%d] ===" % nobj.name_index) - else: - print("[%d]\tName:%r macro:%r scope:%d\n\tresult:%r\n" - % (nobj.name_index, nobj.name, nobj.macro, nobj.scope, nobj.result)) - - def print_labels(sh, labs, title): - if not labs:return - for rlo, rhi, clo, chi in labs: - print("%s label range %s:%s contains:" - % (title, xlrd.cellname(rlo, clo), xlrd.cellname(rhi-1, chi-1))) - for rx in xrange(rlo, rhi): - for cx in xrange(clo, chi): - print(" %s: %r" % (xlrd.cellname(rx, cx), sh.cell_value(rx, cx))) - - def show_labels(bk): - # bk_header(bk) - hdr = 0 - for shx in range(bk.nsheets): - sh = bk.sheet_by_index(shx) - clabs = sh.col_label_ranges - rlabs = sh.row_label_ranges - if clabs or rlabs: - if not hdr: - bk_header(bk) - hdr = 1 - print("sheet %d: name = %r; nrows = %d; ncols = %d" % - (shx, sh.name, sh.nrows, sh.ncols)) - print_labels(sh, clabs, 'Col') - print_labels(sh, rlabs, 'Row') - if bk.on_demand: bk.unload_sheet(shx) - - def show(bk, nshow=65535, printit=1): - bk_header(bk) - if 0: - rclist = xlrd.sheet.rc_stats.items() - rclist = sorted(rclist) - print("rc stats") - for k, v in rclist: - print("0x%04x %7d" % (k, v)) - if options.onesheet: - try: - shx = int(options.onesheet) - except ValueError: - shx = bk.sheet_by_name(options.onesheet).number - shxrange = [shx] - else: - shxrange = range(bk.nsheets) - # print("shxrange", list(shxrange)) - for shx in shxrange: - sh = bk.sheet_by_index(shx) - nrows, ncols = sh.nrows, sh.ncols - colrange = range(ncols) - anshow = min(nshow, nrows) - print("sheet %d: name = %s; nrows = %d; ncols = %d" % - (shx, REPR(sh.name), sh.nrows, sh.ncols)) - if nrows and ncols: - # Beat the bounds - for rowx in xrange(nrows): - nc = sh.row_len(rowx) - if nc: - _junk = sh.row_types(rowx)[nc-1] - _junk = sh.row_values(rowx)[nc-1] - _junk = sh.cell(rowx, nc-1) - for rowx in xrange(anshow-1): - if not printit and rowx % 10000 == 1 and rowx > 1: - print("done %d rows" % (rowx-1,)) - show_row(bk, sh, rowx, colrange, printit) - if anshow and nrows: - show_row(bk, sh, nrows-1, colrange, printit) - print() - if bk.on_demand: bk.unload_sheet(shx) - - def count_xfs(bk): - bk_header(bk) - for shx in range(bk.nsheets): - sh = bk.sheet_by_index(shx) - nrows, ncols = sh.nrows, sh.ncols - print("sheet %d: name = %r; nrows = %d; ncols = %d" % - (shx, sh.name, sh.nrows, sh.ncols)) - # Access all xfindexes to force gathering stats - type_stats = [0, 0, 0, 0, 0, 0, 0] - for rowx in xrange(nrows): - for colx in xrange(sh.row_len(rowx)): - xfx = sh.cell_xf_index(rowx, colx) - assert xfx >= 0 - cty = sh.cell_type(rowx, colx) - type_stats[cty] += 1 - print("XF stats", sh._xf_index_stats) - print("type stats", type_stats) - print() - if bk.on_demand: bk.unload_sheet(shx) - - def main(cmd_args): - import optparse - global options, PSYCO - usage = "\n%prog [options] command [input-file-patterns]\n" + cmd_doc - oparser = optparse.OptionParser(usage) - oparser.add_option( - "-l", "--logfilename", - default="", - help="contains error messages") - oparser.add_option( - "-v", "--verbosity", - type="int", default=0, - help="level of information and diagnostics provided") - oparser.add_option( - "-m", "--mmap", - type="int", default=-1, - help="1: use mmap; 0: don't use mmap; -1: accept heuristic") - oparser.add_option( - "-e", "--encoding", - default="", - help="encoding override") - oparser.add_option( - "-f", "--formatting", - type="int", default=0, - help="0 (default): no fmt info\n" - "1: fmt info (all cells)\n" - ) - oparser.add_option( - "-g", "--gc", - type="int", default=0, - help="0: auto gc enabled; 1: auto gc disabled, manual collect after each file; 2: no gc") - oparser.add_option( - "-s", "--onesheet", - default="", - help="restrict output to this sheet (name or index)") - oparser.add_option( - "-u", "--unnumbered", - action="store_true", default=0, - help="omit line numbers or offsets in biff_dump") - oparser.add_option( - "-d", "--on-demand", - action="store_true", default=0, - help="load sheets on demand instead of all at once") - oparser.add_option( - "-t", "--suppress-timing", - action="store_true", default=0, - help="don't print timings (diffs are less messy)") - oparser.add_option( - "-r", "--ragged-rows", - action="store_true", default=0, - help="open_workbook(..., ragged_rows=True)") - options, args = oparser.parse_args(cmd_args) - if len(args) == 1 and args[0] in ("version", ): - pass - elif len(args) < 2: - oparser.error("Expected at least 2 args, found %d" % len(args)) - cmd = args[0] - xlrd_version = getattr(xlrd, "__VERSION__", "unknown; before 0.5") - if cmd == 'biff_dump': - xlrd.dump(args[1], unnumbered=options.unnumbered) - sys.exit(0) - if cmd == 'biff_count': - xlrd.count_records(args[1]) - sys.exit(0) - if cmd == 'version': - print("xlrd: %s, from %s" % (xlrd_version, xlrd.__file__)) - print("Python:", sys.version) - sys.exit(0) - if options.logfilename: - logfile = LogHandler(open(options.logfilename, 'w')) - else: - logfile = sys.stdout - mmap_opt = options.mmap - mmap_arg = xlrd.USE_MMAP - if mmap_opt in (1, 0): - mmap_arg = mmap_opt - elif mmap_opt != -1: - print('Unexpected value (%r) for mmap option -- assuming default' % mmap_opt) - fmt_opt = options.formatting | (cmd in ('xfc', )) - gc_mode = options.gc - if gc_mode: - gc.disable() - for pattern in args[1:]: - for fname in glob.glob(pattern): - print("\n=== File: %s ===" % fname) - if logfile != sys.stdout: - logfile.setfileheading("\n=== File: %s ===\n" % fname) - if gc_mode == 1: - n_unreachable = gc.collect() - if n_unreachable: - print("GC before open:", n_unreachable, "unreachable objects") - if PSYCO: - import psyco - psyco.full() - PSYCO = 0 - try: - t0 = time.time() - bk = xlrd.open_workbook(fname, - verbosity=options.verbosity, logfile=logfile, - use_mmap=mmap_arg, - encoding_override=options.encoding, - formatting_info=fmt_opt, - on_demand=options.on_demand, - ragged_rows=options.ragged_rows, - ) - t1 = time.time() - if not options.suppress_timing: - print("Open took %.2f seconds" % (t1-t0,)) - except xlrd.XLRDError as e: - print("*** Open failed: %s: %s" % (type(e).__name__, e)) - continue - except KeyboardInterrupt: - print("*** KeyboardInterrupt ***") - traceback.print_exc(file=sys.stdout) - sys.exit(1) - except BaseException as e: - print("*** Open failed: %s: %s" % (type(e).__name__, e)) - traceback.print_exc(file=sys.stdout) - continue - t0 = time.time() - if cmd == 'hdr': - bk_header(bk) - elif cmd == 'ov': # OverView - show(bk, 0) - elif cmd == 'show': # all rows - show(bk) - elif cmd == '2rows': # first row and last row - show(bk, 2) - elif cmd == '3rows': # first row, 2nd row and last row - show(bk, 3) - elif cmd == 'bench': - show(bk, printit=0) - elif cmd == 'fonts': - bk_header(bk) - show_fonts(bk) - elif cmd == 'names': # named reference list - show_names(bk) - elif cmd == 'name_dump': # named reference list - show_names(bk, dump=1) - elif cmd == 'labels': - show_labels(bk) - elif cmd == 'xfc': - count_xfs(bk) - else: - print("*** Unknown command <%s>" % cmd) - sys.exit(1) - del bk - if gc_mode == 1: - n_unreachable = gc.collect() - if n_unreachable: - print("GC post cmd:", fname, "->", n_unreachable, "unreachable objects") - if not options.suppress_timing: - t1 = time.time() - print("\ncommand took %.2f seconds\n" % (t1-t0,)) - - return None - - av = sys.argv[1:] - if not av: - main(av) - firstarg = av[0].lower() - if firstarg == "hotshot": - import hotshot, hotshot.stats - av = av[1:] - prof_log_name = "XXXX.prof" - prof = hotshot.Profile(prof_log_name) - # benchtime, result = prof.runcall(main, *av) - result = prof.runcall(main, *(av, )) - print("result", repr(result)) - prof.close() - stats = hotshot.stats.load(prof_log_name) - stats.strip_dirs() - stats.sort_stats('time', 'calls') - stats.print_stats(20) - elif firstarg == "profile": - import cProfile - av = av[1:] - cProfile.run('main(av)', 'YYYY.prof') - import pstats - p = pstats.Stats('YYYY.prof') - p.strip_dirs().sort_stats('cumulative').print_stats(30) - elif firstarg == "psyco": - PSYCO = 1 - main(av[1:]) - else: - main(av) diff --git a/webhub/serializers.py b/webhub/serializers.py index 916547b4..2a665adc 100644 --- a/webhub/serializers.py +++ b/webhub/serializers.py @@ -1,6 +1,5 @@ from django.contrib.auth.models import User from webhub.models import * -from malaria.models import Post, RevPost from peacetrack.models import * from rest_framework import serializers @@ -10,31 +9,16 @@ class Meta: model = User fields = ('url', 'username', 'email','id') - class PcuserSerializer(serializers.ModelSerializer): class Meta: model = Pcuser fields = ('user', 'location', 'phone', 'gender','id') - -class PostSerializer(serializers.ModelSerializer): - class Meta: - model = Post - fields = ('owner', 'title_post', 'description_post', 'created','updated','id') - - -class RevPostSerializer(serializers.ModelSerializer): - class Meta: - model = RevPost - fields = ('owner_rev_post', 'owner_rev', 'title_post_rev', 'description_post_rev', 'created','id','title_change','description_change','id') - -#Peacetrack begins here class RegionSerializer(serializers.ModelSerializer): class Meta: model = Region fields = ('region_name','id') - class SectorSerializer(serializers.ModelSerializer): class Meta: model = Sector diff --git a/webhub/setup.py b/webhub/setup.py deleted file mode 100644 index c563faf5..00000000 --- a/webhub/setup.py +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/env python - -from os import path -import sys -python_version = sys.version_info[:2] - -if python_version < (2, 6): - raise Exception("This version of xlrd requires Python 2.6 or above. " - "For older versions of Python, you can use the 0.8 series.") - -av = sys.argv -if len(av) > 1 and av[1].lower() == "--egg": - del av[1] - from setuptools import setup -else: - from distutils.core import setup - -from xlrd.info import __VERSION__ - -setup( - name = 'xlrd', - version = __VERSION__, - author = 'John Machin', - author_email = 'sjmachin@lexicon.net', - url = 'http://www.python-excel.org/', - packages = ['xlrd'], - scripts = [ - 'scripts/runxlrd.py', - ], - package_data={ - 'xlrd': [ - 'doc/*.htm*', - # 'doc/*.txt', - 'examples/*.*', - ], - - }, - description = 'Library for developers to extract data from Microsoft Excel (tm) spreadsheet files', - long_description = \ - "Extract data from Excel spreadsheets (.xls and .xlsx, versions 2.0 onwards) on any platform. " \ - "Pure Python (2.6, 2.7, 3.2+). Strong support for Excel dates. Unicode-aware.", - platforms = ["Any platform -- don't need Windows"], - license = 'BSD', - keywords = ['xls', 'excel', 'spreadsheet', 'workbook'], - classifiers = [ - 'Development Status :: 5 - Production/Stable', - 'Intended Audience :: Developers', - 'License :: OSI Approved :: BSD License', - 'Programming Language :: Python', - 'Programming Language :: Python :: 2', - 'Programming Language :: Python :: 3', - 'Operating System :: OS Independent', - 'Topic :: Database', - 'Topic :: Office/Business', - 'Topic :: Software Development :: Libraries :: Python Modules', - ], - ) diff --git a/webhub/temp/tests/Formate.xls b/webhub/temp/tests/Formate.xls deleted file mode 100644 index 808cafb4cd98bd375cc2ec4e4c9863999a51f480..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10752 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 diff --git a/webhub/temp/tests/__init__.py b/webhub/temp/tests/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/webhub/temp/tests/base.py b/webhub/temp/tests/base.py deleted file mode 100644 index d7a577a6..00000000 --- a/webhub/temp/tests/base.py +++ /dev/null @@ -1,4 +0,0 @@ -import os - -def from_this_dir(filename): - return os.path.join(os.path.dirname(os.path.abspath(__file__)), filename) diff --git a/webhub/temp/tests/formula_test_names.xls b/webhub/temp/tests/formula_test_names.xls deleted file mode 100644 index b6d98c7ab304ac38f9af25cae6a67589014cfbf5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7680 zcmeHMO>9(E6h3dJ)4riVOUqA7VSE%Re+7Z6fC!!bfDi?m0&znkZ-&=)U^-K0rXUOB z0Ftuv#8bbn%-*?}8?R1=hDQPrlZ}Z)I z-?``9zjN-n=T3k4e#W)4pUk~3d1-@q^{MW6wTK6G((YxmS(l9JWO{^l z;I1=Q>aYw-^a0d)1)u|dU{Zk1{lBspb=OIJPs@Znt;W?5@0E?3|I~{11o@)z!ShKU^TD? zXaSxCo&uf*)&lE*^}sU#*Zizgvfhe%5NLB~9ZosAlmCyJUxyaUee&hBZ|U-t@4pU< zI9GO2*~KrQ?Ue!AMu!;<8~;>lS935m+U78fbfZ>|Si=K5J%fC@e5_i|t9+xfKrjZy zpw1bUe2ovvo>F}zjg43d0W8+>3yOo_s_#%BIQ?Z{X)P@7Ubk_QExFvWDc3tN~^>4I89$+KT>rX><-(h`$(}y%ysC@6v~` zrv{hjBzK>e+xw8or!Or+Z!SV#R)p>^NcX`K)O;9>sWfby_TV(8CCjop?N#NBbh#>P z(q*cwO;@OLX4;qC2aDI_1WwHb70#E-u0G33ttRCXgFBphMOj12XDY;ZC@m*(@|*Ej zr#!a!m6Nb15{ks)1EF|48t_WMC;kE~$w;g>Y9$Bz17%VVM^h)Al$}Cv?xd8JOojX6 z@uY=r>dU-{I;+8F$Q(`D>h)Td?e%&k%Z_^8D~)CQ(N5nl<-Ap##C{?@xLWExI(bb; zCZuG%n!5rYBUx9bXD}8HcmyNY`pi18EMSYS_Qd8%k>!w?2xtPv5O%yy-C;5XI&jlq z%uF2VkHiL(feNX;sOfSM=W_QcO@5UFyecyx#af=>mBu#|g?Z%?U{&A|WZk8;NM(js z>ji9yE=M(l;`*=_L>`pDE$k*QV;!C8xNP-5aUb82uT;R!pdHKXw36XOWFQrZ$1q-} znKChzJ)El%AFvW88_>-zr6gm(Oql%!bcJ5GV9{(f!e%szD|_Voa3s}dU^^maC~6rC z4KvZ3#7NtE4DJ&}Fhqw^=LltvXzlQ*G5AzQmj>d^0kKdw5pPED6$9<<1%`xFEE<(8 zUL1b8il+!oF|5x5P;n9?3?>h?WM5y^W3I2M@TdE+>oocq^sO)`UG98v>&NY(uGW_n zJq?PR7V$V?(4%O%Shh?_ELZt4#XA#$$pS*D{*Aj;jG)S9udA)1uOi*2OvXC8!@?apl;GE1A}%IrX#B zi2d1*_OjClS z4^54i)LdF8c&ikRA0BBKLnD7ajpm#$%MH)xS>lrAuOGFwr{dCE|PbS?}#mZ3w&W+)G*i9cf- z4H-rg3{uHahD+S!sgch)Z3!}iDKou~=4qJPeD=#_aG-K7Nb7~G>$Oc&u|h!%(^;Qb zZy?$u=MA_^jF3z427f#4YBN=qt7aot&DiyEs~IvQYF51mRbD{Nimp`6+N7F`JN=1Q z^Qv4myVOw?!qr>fya3Y?J_oR%? zuY|3rv3~7}-Db#&MlCoLk@iSWkNsq{WyYPuJK2MdThbP|2j|68o1f_QuAO-Ax7$1W zsy}>7m*tB;y-F8*9&lanR@8Y3bUCy>lnnjS0Nvq9fYI)|03)d(fWP0I132Q1yY_D} zye4+{A)rYb&qoK39I_Jkr}GY3gCAakDAPlYu`7sDS$9*Am7~4;d^ay?tfyc8Y5r{a zPTdx4%1y=A&-r;SU%Gr|WkdDpcd-8E+aGm;=F6k)1+5OSZwdQ1DR*tf=wP2r&JIlE z@4wVR{uwN^(X=1+!y$?n5%VYHpcDHaEX00aS`93j`sO)sLxKAWIE|<6Fc)^yff@AU zMY0ofI8ch{7#@z#^>A#aF^xq&Hh{j(Y11%n6tAI&O$=G>k?p*cel~)MztuANWS0zL z{r%4CY#Uxu<-{ TDQEnND8{@0xxc^v+vEQQeq6aX diff --git a/webhub/temp/tests/formula_test_sjmachin.xls b/webhub/temp/tests/formula_test_sjmachin.xls deleted file mode 100644 index 82170088ee14089da502b8aece7bab9bd859f19d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16896 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 diff --git a/webhub/temp/tests/issue20.xls b/webhub/temp/tests/issue20.xls deleted file mode 100644 index d017343a6dd9dbadde0956ee054b9019df4f35df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6144 zcmeHLU2GIp6h1TEZg*QK+d^CZtV>(AyW8b=QBZ^ygrJE=0vKx$%R+a7AeB&fFwtcE z!T6wwN>Z{3iQ!Q(s4-Dvd?-&~T%s{SqEA53XC#_{0mkn;GqXD#T2c%e#op<;_nhzE zbIzS}@0@$L-+kL~?&v2o&r6`Jlq$JlMyaX@s80)=l5cU8bBNy=IS&drRv!t?N-6^115#q{t$f zCa0hgk+-?EQ9`mYH!%2jwWWV2nGiZUN@kn2?BOUiG+88OC=+V{Vtrj`n+%|Wk=oJ6<157OBVQCd77R#S5X~S^v+=|S$?}B4SXX9ZQPm9?_WgZ**YJxn8+`ad`R|92_Zs;95+J9*hZ*DbL(_uC?)dZZ3P${EjmBkg6D)`niLZytBRkGKl6BA~tSIXrEb2#r% z59V;kc`m;rKhU3x<5SNK+PLLJqyZ7(3-iX~oS?B0Cup7NWFB<8ClMA3gD2x93}~9t zFH@9n&^iX2*WUm2`^UGf@9tA1jarcPSiho(g)v^4i=E2Ve;GX|LepRivq?ObcsQ|n z)2h{55*wPNiH-@a&+W*^6PwqsTDKM*ud2n@v`&;QUh3}j@k#K&v`@lzL|)SPn9>n#R$r7E`HpCl4y7Ez-6yr_|VtlP2#=R88xC%iGJLe{hx9H$F zepEq>D;≷|^lncR`GwWDw&X4PuN%5MyM57$fJ$uIp|W-b7F+F>=jXQ)0|25~Ed- z7^jL9f*ol+U;<(nAkqQ0~E(RMn&}YQQNe(s95&68%V~XTK5?7K(t&~^UUcpN9NCp9XcG5uFTcr3xQ2{ z``FK{Ma_#$FMqMz%Ky28?_Iw7#Ln2Uci_MC(;w--2c$U(Z5+f5n*=edE&+M-=>cyY zU2$8c!ddHq6p|SLgH)z}?^d|hL*52EK0x3^ku&tK4J i()G{0GhY7>VeDSl5Z8>lqkaGUZalh9;}hksi@=}isYRjy diff --git a/webhub/temp/tests/merged_cells.xlsx b/webhub/temp/tests/merged_cells.xlsx deleted file mode 100644 index 2d94fa299fe5483373e985f7d8de323af065b69f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9275 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 a{|EcY|C#Rj{}pdLTL1RnU;pnu|9=AR;#0x^ diff --git a/webhub/temp/tests/ragged.xls b/webhub/temp/tests/ragged.xls deleted file mode 100644 index 2bef15b4e9b22e19370a40ca38267373e8e5122b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6656 zcmeHLTWnNS6y0|^Q>L_ZrlmzKf|n|NPLZ}gY7BOGRB04wN{t_q=(N3kPO0fbA<;O1 zBz{1m;X^(!hNM4gq8JnXkZ7Cup@~GJAwj>2f5avZ#78jDajkvt*xRuqGi0K{^xUlT z*yrr?+WYK%&i&@=lG)QAR9uvl@UY~`e4;?|U33HamC15Y#DhF(^NBk6Ip7Fyc!R5RFtP8r2FA*Qs+exze^5R%S3tbxY3hslJ~ zZ7(uuf1@_b<1g&MjrNN5?)|6zrX9}%(w%?We4hUzU=>gd1OT`IDFI4>)j%0g4y*xg z18xWI04jjBz@5N4U_EdbU;-O}O5kqb9$+I-1ylnyKrK)Q)B_=)0pR@abyDV=kZ%U= zb7&7Z>B6oo=hE#!fge)L_sJ)#zM{!j+kX)namG8NdhsJ@`{X(5#`Z|G$Naa#Hl0Jn zpl(h>Nw*mJxNCTzr>77X%lle$R^u(IfoK>OvjqunC7+`}-s2iqYFv!ikdKw;2c&47{%IqOI4tWg(>K6Z_|cgkzQF%G+{HC%Q6EA-f}SEkH_!w00v6B*^aBGxJ1_(c z1JMLt9z}8h6C-zzzZ^iu3G_M)9=a;qqy-n5v?5Hu7fa>#mFQA}nDn)`FMqqMyQB3P zrN{KbtNqAE3Puug2sJa_I_0R>_^`GugR|NIPqn?OvTJa}8aH=aFPNR9Ba!`~POE=1 z8X2psYHX_7S`G&WcXoqz9g%*^tm-(T1H7Vf6(-ZH;Zke0D_?{Bk%kM08!p6KYhC%% zQi;2IFP6veu!M||k>pRNhCGSBSISGehhn^1NH31yp+~px{9?FlhzM`oZ0U-^N zKo5&)wq7izQAfOTeGxA=)GHP20^$##mcp`c65^B$h=>jBI*$s>E|D5g-D4fs7*H)` zi8Bc3%Y`M59Z)}Jm)Md=!!EH;Dvn*sLy3okCC)E^G+AODZ#{F;ft)A46L~02oZPwy zFknXU%_w6odUgych}$~{qAOt6m5+n)h4qN1R6f$Db=cKv9sBd?0t_@mF0UVlr{AUM z&|i9TGUZm)#kl2EonqjX;AT{PVb|T_HQnOHu4gS?@cboS9U{Ci5U#$q0)u290+_mG z@usz8xfkzdw|L=3vKB9Raw%TwhJn{i9*#0kblm7751KWn%`gvJ#6y@GsNu6m-@0;j&p`0q z*Zopo{o(htlxKmY1>K1}t!{@y8$e2H90O?Gjsdj5Cjol>DS+?KGXO`t1P8;nB)wSI z0G#i*`FM2l;PcklKhw#}_hJ}`#sARBGoK7$WMcb&{;h289PcwCU%vBnIr7Y=hIH#^ zr=IiY&Y#+}HhAI)5cBi3%aid~o!nR}^-hS+n?Rd#XDMX$_{;Of|$zGYn`bY5M<-fmn`~~b& znUFGpm+&Yk=|hb(KJ8+r>u*HcIj2jX?7#>;ItNStKxQ|emYZ1r{TO?~89x_Ew)^k? J|Mp*x|0kJzk39eY diff --git a/webhub/temp/tests/reveng1.xlsx b/webhub/temp/tests/reveng1.xlsx deleted file mode 100644 index 099e26b2e36c65b014b00ad58d3ed899af5f0e9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16683 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 diff --git a/webhub/temp/tests/test_biffh.py b/webhub/temp/tests/test_biffh.py deleted file mode 100644 index 3a253ad3..00000000 --- a/webhub/temp/tests/test_biffh.py +++ /dev/null @@ -1,22 +0,0 @@ -import unittest -import sys - -if sys.version_info[0] >= 3: - from io import StringIO -else: - # Python 2.6+ does have the io module, but io.StringIO is strict about - # unicode, which won't work for our test. - from StringIO import StringIO - -from xlrd import biffh - -class TestHexDump(unittest.TestCase): - def test_hex_char_dump(self): - sio = StringIO() - biffh.hex_char_dump(b"abc\0e\01", 0, 6, fout=sio) - s = sio.getvalue() - assert "61 62 63 00 65 01" in s, s - assert "abc~e?" in s, s - -if __name__=='__main__': - unittest.main() diff --git a/webhub/temp/tests/test_cell.py b/webhub/temp/tests/test_cell.py deleted file mode 100644 index 3190ef76..00000000 --- a/webhub/temp/tests/test_cell.py +++ /dev/null @@ -1,64 +0,0 @@ -# Portions Copyright (C) 2010, Manfred Moitzi under a BSD licence - -import sys -import os -import unittest - -import xlrd - -from .base import from_this_dir - -class TestCell(unittest.TestCase): - - def setUp(self): - self.book = xlrd.open_workbook(from_this_dir('profiles.xls'), formatting_info=True) - self.sheet = self.book.sheet_by_name('PROFILEDEF') - - def test_string_cell(self): - cell = self.sheet.cell(0, 0) - self.assertEqual(cell.ctype, xlrd.book.XL_CELL_TEXT) - self.assertEqual(cell.value, 'PROFIL') - self.assertTrue(cell.xf_index > 0) - - def test_number_cell(self): - cell = self.sheet.cell(1, 1) - self.assertEqual(cell.ctype, xlrd.book.XL_CELL_NUMBER) - self.assertEqual(cell.value, 100) - self.assertTrue(cell.xf_index > 0) - - def test_calculated_cell(self): - sheet2 = self.book.sheet_by_name('PROFILELEVELS') - cell = sheet2.cell(1, 3) - self.assertEqual(cell.ctype, xlrd.book.XL_CELL_NUMBER) - self.assertAlmostEqual(cell.value, 265.131, places=3) - self.assertTrue(cell.xf_index > 0) - - def test_merged_cells(self): - book = xlrd.open_workbook(from_this_dir('xf_class.xls'), formatting_info=True) - sheet3 = book.sheet_by_name('table2') - row_lo, row_hi, col_lo, col_hi = sheet3.merged_cells[0] - self.assertEqual(sheet3.cell(row_lo, col_lo).value, 'MERGED') - self.assertEqual((row_lo, row_hi, col_lo, col_hi), (3, 7, 2, 5)) - - def test_merged_cells_xlsx(self): - book = xlrd.open_workbook(from_this_dir('merged_cells.xlsx')) - - sheet1 = book.sheet_by_name('Sheet1') - expected = [] - got = sheet1.merged_cells - self.assertEqual(expected, got) - - sheet2 = book.sheet_by_name('Sheet2') - expected = [(0, 1, 0, 2)] - got = sheet2.merged_cells - self.assertEqual(expected, got) - - sheet3 = book.sheet_by_name('Sheet3') - expected = [(0, 1, 0, 2), (0, 1, 2, 4), (1, 4, 0, 2), (1, 9, 2, 4)] - got = sheet3.merged_cells - self.assertEqual(expected, got) - - sheet4 = book.sheet_by_name('Sheet4') - expected = [(0, 1, 0, 2), (2, 20, 0, 1), (1, 6, 2, 5)] - got = sheet4.merged_cells - self.assertEqual(expected, got) diff --git a/webhub/temp/tests/test_comments_excel.xlsx b/webhub/temp/tests/test_comments_excel.xlsx deleted file mode 100644 index cdc2465d334e1346303917bcfca2b8a42ff50c74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15803 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 XN`M1`+0UaDSU^^gKtL=kKkxnzy&|43 diff --git a/webhub/temp/tests/test_comments_gdocs.xlsx b/webhub/temp/tests/test_comments_gdocs.xlsx deleted file mode 100644 index 2f8e5e1bd758612425b0804c2813fe0e8fec9480..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4187 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 j=%nNEq9b(kkx7I8vA6Z$q= 3: - def u(s): return s -else: - def u(s): - return s.decode('utf-8') - -from .base import from_this_dir - -class TestCellContent(TestCase): - - def setUp(self): - self.book = xlrd.open_workbook(from_this_dir('Formate.xls'), formatting_info=True) - self.sheet = self.book.sheet_by_name(u('Blätt1')) - - def test_text_cells(self): - for row, name in enumerate([u('Huber'), u('Äcker'), u('Öcker')]): - cell = self.sheet.cell(row, 0) - self.assertEqual(cell.ctype, xlrd.book.XL_CELL_TEXT) - self.assertEqual(cell.value, name) - self.assertTrue(cell.xf_index > 0) - - def test_date_cells(self): - # see also 'Dates in Excel spreadsheets' in the documentation - # convert: xldate_as_tuple(float, book.datemode) -> (year, month, - # day, hour, minutes, seconds) - for row, date in [(0, 2741.), (1, 38406.), (2, 32266.)]: - cell = self.sheet.cell(row, 1) - self.assertEqual(cell.ctype, xlrd.book.XL_CELL_DATE) - self.assertEqual(cell.value, date) - self.assertTrue(cell.xf_index > 0) - - def test_time_cells(self): - # see also 'Dates in Excel spreadsheets' in the documentation - # convert: xldate_as_tuple(float, book.datemode) -> (year, month, - # day, hour, minutes, seconds) - for row, time in [(3, .273611), (4, .538889), (5, .741123)]: - cell = self.sheet.cell(row, 1) - self.assertEqual(cell.ctype, xlrd.book.XL_CELL_DATE) - self.assertAlmostEqual(cell.value, time, places=6) - self.assertTrue(cell.xf_index > 0) - - def test_percent_cells(self): - for row, time in [(6, .974), (7, .124)]: - cell = self.sheet.cell(row, 1) - self.assertEqual(cell.ctype, xlrd.book.XL_CELL_NUMBER) - self.assertAlmostEqual(cell.value, time, places=3) - self.assertTrue(cell.xf_index > 0) - - def test_currency_cells(self): - for row, time in [(8, 1000.30), (9, 1.20)]: - cell = self.sheet.cell(row, 1) - self.assertEqual(cell.ctype, xlrd.book.XL_CELL_NUMBER) - self.assertAlmostEqual(cell.value, time, places=2) - self.assertTrue(cell.xf_index > 0) - - def test_get_from_merged_cell(self): - sheet = self.book.sheet_by_name(u('ÖÄÜ')) - cell = sheet.cell(2, 2) - self.assertEqual(cell.ctype, xlrd.book.XL_CELL_TEXT) - self.assertEqual(cell.value, 'MERGED CELLS') - self.assertTrue(cell.xf_index > 0) - - def test_ignore_diagram(self): - sheet = self.book.sheet_by_name(u('Blätt3')) - cell = sheet.cell(0, 0) - self.assertEqual(cell.ctype, xlrd.book.XL_CELL_NUMBER) - self.assertEqual(cell.value, 100) - self.assertTrue(cell.xf_index > 0) diff --git a/webhub/temp/tests/test_formulas.py b/webhub/temp/tests/test_formulas.py deleted file mode 100644 index acf6d245..00000000 --- a/webhub/temp/tests/test_formulas.py +++ /dev/null @@ -1,83 +0,0 @@ - # -*- coding: utf-8 -*- -# Portions Copyright (C) 2010, Manfred Moitzi under a BSD licence - -from unittest import TestCase -import os -import sys - -import xlrd - -from .base import from_this_dir - -try: - ascii -except NameError: - # For Python 2 - def ascii(s): - a = repr(s) - if a.startswith(('u"', "u'")): - a = a[1:] - return a - -class TestFormulas(TestCase): - - def setUp(self): - book = xlrd.open_workbook(from_this_dir('formula_test_sjmachin.xls')) - self.sheet = book.sheet_by_index(0) - - def get_value(self, col, row): - return ascii(self.sheet.col_values(col)[row]) - - def test_cell_B2(self): - self.assertEqual( - self.get_value(1, 1), - r"'\u041c\u041e\u0421\u041a\u0412\u0410 \u041c\u043e\u0441\u043a\u0432\u0430'" - ) - - def test_cell_B3(self): - self.assertEqual(self.get_value(1, 2), '0.14285714285714285') - - def test_cell_B4(self): - self.assertEqual(self.get_value(1, 3), "'ABCDEF'") - - def test_cell_B5(self): - self.assertEqual(self.get_value(1, 4), "''") - - def test_cell_B6(self): - self.assertEqual(self.get_value(1, 5), '1') - - def test_cell_B7(self): - self.assertEqual(self.get_value(1, 6), '7') - - def test_cell_B8(self): - self.assertEqual( - self.get_value(1, 7), - r"'\u041c\u041e\u0421\u041a\u0412\u0410 \u041c\u043e\u0441\u043a\u0432\u0430'" - ) - -class TestNameFormulas(TestCase): - - def setUp(self): - book = xlrd.open_workbook(from_this_dir('formula_test_names.xls')) - self.sheet = book.sheet_by_index(0) - - def get_value(self, col, row): - return ascii(self.sheet.col_values(col)[row]) - - def test_unaryop(self): - self.assertEqual(self.get_value(1, 1), '-7.0') - - def test_attrsum(self): - self.assertEqual(self.get_value(1, 2), '4.0') - - def test_func(self): - self.assertEqual(self.get_value(1, 3), '6.0') - - def test_func_var_args(self): - self.assertEqual(self.get_value(1, 4), '3.0') - - def test_if(self): - self.assertEqual(self.get_value(1, 5), "'b'") - - def test_choose(self): - self.assertEqual(self.get_value(1, 6), "'C'") diff --git a/webhub/temp/tests/test_open_workbook.py b/webhub/temp/tests/test_open_workbook.py deleted file mode 100644 index 70edd951..00000000 --- a/webhub/temp/tests/test_open_workbook.py +++ /dev/null @@ -1,38 +0,0 @@ -from unittest import TestCase - -import os - -from xlrd import open_workbook - -from .base import from_this_dir - -class TestOpen(TestCase): - # test different uses of open_workbook - - def test_names_demo(self): - # For now, we just check this doesn't raise an error. - open_workbook( - from_this_dir(os.path.join('..','xlrd','examples','namesdemo.xls')) - ) - - def test_ragged_rows_tidied_with_formatting(self): - # For now, we just check this doesn't raise an error. - open_workbook(from_this_dir('issue20.xls'), - formatting_info=True) - - def test_BYTES_X00(self): - # For now, we just check this doesn't raise an error. - open_workbook(from_this_dir('picture_in_cell.xls'), - formatting_info=True) - - def test_xlsx_simple(self): - # For now, we just check this doesn't raise an error. - open_workbook(from_this_dir('text_bar.xlsx')) - # we should make assertions here that data has been - # correctly processed. - - def test_xlsx(self): - # For now, we just check this doesn't raise an error. - open_workbook(from_this_dir('reveng1.xlsx')) - # we should make assertions here that data has been - # correctly processed. diff --git a/webhub/temp/tests/test_sheet.py b/webhub/temp/tests/test_sheet.py deleted file mode 100644 index e1da4a99..00000000 --- a/webhub/temp/tests/test_sheet.py +++ /dev/null @@ -1,128 +0,0 @@ -# Portions Copyright (C) 2010, Manfred Moitzi under a BSD licence - -from unittest import TestCase - -import sys -import os -import unittest - -import xlrd - -from .base import from_this_dir - -SHEETINDEX = 0 -NROWS = 15 -NCOLS = 13 - -ROW_ERR = NROWS + 10 -COL_ERR = NCOLS + 10 - -class TestSheet(TestCase): - - sheetnames = ['PROFILEDEF', 'AXISDEF', 'TRAVERSALCHAINAGE', - 'AXISDATUMLEVELS', 'PROFILELEVELS'] - - def setUp(self): - self.book = xlrd.open_workbook(from_this_dir('profiles.xls'), formatting_info=True) - - def check_sheet_function(self, function): - self.assertTrue(function(0, 0)) - self.assertTrue(function(NROWS-1, NCOLS-1)) - - def check_sheet_function_index_error(self, function): - self.assertRaises(IndexError, function, ROW_ERR, 0) - self.assertRaises(IndexError, function, 0, COL_ERR) - - def check_col_slice(self, col_function): - _slice = col_function(0, 2, NROWS-2) - self.assertEqual(len(_slice), NROWS-4) - - def check_row_slice(self, row_function): - _slice = row_function(0, 2, NCOLS-2) - self.assertEqual(len(_slice), NCOLS-4) - - def test_nrows(self): - sheet = self.book.sheet_by_index(SHEETINDEX) - self.assertEqual(sheet.nrows, NROWS) - - def test_ncols(self): - sheet = self.book.sheet_by_index(SHEETINDEX) - self.assertEqual(sheet.ncols, NCOLS) - - def test_cell(self): - sheet = self.book.sheet_by_index(SHEETINDEX) - self.assertNotEqual(xlrd.empty_cell, sheet.cell(0, 0)) - self.assertNotEqual(xlrd.empty_cell, sheet.cell(NROWS-1, NCOLS-1)) - - def test_cell_error(self): - sheet = self.book.sheet_by_index(SHEETINDEX) - self.check_sheet_function_index_error(sheet.cell) - - def test_cell_type(self): - sheet = self.book.sheet_by_index(SHEETINDEX) - self.check_sheet_function(sheet.cell_type) - - def test_cell_type_error(self): - sheet = self.book.sheet_by_index(SHEETINDEX) - self.check_sheet_function_index_error(sheet.cell_type) - - def test_cell_value(self): - sheet = self.book.sheet_by_index(SHEETINDEX) - self.check_sheet_function(sheet.cell_value) - - def test_cell_value_error(self): - sheet = self.book.sheet_by_index(SHEETINDEX) - self.check_sheet_function_index_error(sheet.cell_value) - - def test_cell_xf_index(self): - sheet = self.book.sheet_by_index(SHEETINDEX) - self.check_sheet_function(sheet.cell_xf_index) - - def test_cell_xf_index_error(self): - sheet = self.book.sheet_by_index(SHEETINDEX) - self.check_sheet_function_index_error(sheet.cell_xf_index) - - def test_col(self): - sheet = self.book.sheet_by_index(SHEETINDEX) - col = sheet.col(0) - self.assertEqual(len(col), NROWS) - - def test_row(self): - sheet = self.book.sheet_by_index(SHEETINDEX) - row = sheet.row(0) - self.assertEqual(len(row), NCOLS) - - def test_col_slice(self): - sheet = self.book.sheet_by_index(SHEETINDEX) - self.check_col_slice(sheet.col_slice) - - def test_col_types(self): - sheet = self.book.sheet_by_index(SHEETINDEX) - self.check_col_slice(sheet.col_types) - - def test_col_values(self): - sheet = self.book.sheet_by_index(SHEETINDEX) - self.check_col_slice(sheet.col_values) - - def test_row_slice(self): - sheet = self.book.sheet_by_index(SHEETINDEX) - self.check_row_slice(sheet.row_slice) - - def test_row_types(self): - sheet = self.book.sheet_by_index(SHEETINDEX) - self.check_row_slice(sheet.col_types) - - def test_row_values(self): - sheet = self.book.sheet_by_index(SHEETINDEX) - self.check_col_slice(sheet.row_values) - -class TestSheetRagged(TestCase): - - def test_read_ragged(self): - book = xlrd.open_workbook(from_this_dir('ragged.xls'), ragged_rows=True) - sheet = book.sheet_by_index(0) - self.assertEqual(sheet.row_len(0), 3) - self.assertEqual(sheet.row_len(1), 2) - self.assertEqual(sheet.row_len(2), 1) - self.assertEqual(sheet.row_len(3), 4) - self.assertEqual(sheet.row_len(4), 4) diff --git a/webhub/temp/tests/test_workbook.py b/webhub/temp/tests/test_workbook.py deleted file mode 100644 index b9caddf3..00000000 --- a/webhub/temp/tests/test_workbook.py +++ /dev/null @@ -1,47 +0,0 @@ -# Portions Copyright (C) 2010, Manfred Moitzi under a BSD licence - -from unittest import TestCase -import os -import sys - -from xlrd import open_workbook -from xlrd.book import Book -from xlrd.sheet import Sheet - -from .base import from_this_dir - -class TestWorkbook(TestCase): - - sheetnames = ['PROFILEDEF', 'AXISDEF', 'TRAVERSALCHAINAGE', - 'AXISDATUMLEVELS', 'PROFILELEVELS'] - - def setUp(self): - self.book = open_workbook(from_this_dir('profiles.xls')) - - def test_open_workbook(self): - self.assertTrue(isinstance(self.book, Book)) - - def test_nsheets(self): - self.assertEqual(self.book.nsheets, 5) - - def test_sheet_by_name(self): - for name in self.sheetnames: - sheet = self.book.sheet_by_name(name) - self.assertTrue(isinstance(sheet, Sheet)) - self.assertEqual(name, sheet.name) - - def test_sheet_by_index(self): - for index in range(5): - sheet = self.book.sheet_by_index(index) - self.assertTrue(isinstance(sheet, Sheet)) - self.assertEqual(sheet.name, self.sheetnames[index]) - - def test_sheets(self): - sheets = self.book.sheets() - for index, sheet in enumerate(sheets): - self.assertTrue(isinstance(sheet, Sheet)) - self.assertEqual(sheet.name, self.sheetnames[index]) - - def test_sheet_names(self): - self.assertEqual(self.sheetnames, self.book.sheet_names()) - diff --git a/webhub/temp/tests/test_xldate.py b/webhub/temp/tests/test_xldate.py deleted file mode 100644 index 0a3a1a5c..00000000 --- a/webhub/temp/tests/test_xldate.py +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/env python -# Author: mozman -# Purpose: test xldate.py -# Created: 04.12.2010 -# Copyright (C) 2010, Manfred Moitzi -# License: BSD licence - -import sys -import unittest - -from xlrd import xldate - -DATEMODE = 0 # 1900-based - -class TestXLDate(unittest.TestCase): - def test_date_as_tuple(self): - date = xldate.xldate_as_tuple(2741., DATEMODE) - self.assertEqual(date, (1907, 7, 3, 0, 0, 0)) - date = xldate.xldate_as_tuple(38406., DATEMODE) - self.assertEqual(date, (2005, 2, 23, 0, 0, 0)) - date = xldate.xldate_as_tuple(32266., DATEMODE) - self.assertEqual(date, (1988, 5, 3, 0, 0, 0)) - - def test_time_as_tuple(self): - time = xldate.xldate_as_tuple(.273611, DATEMODE) - self.assertEqual(time, (0, 0, 0, 6, 34, 0)) - time = xldate.xldate_as_tuple(.538889, DATEMODE) - self.assertEqual(time, (0, 0, 0, 12, 56, 0)) - time = xldate.xldate_as_tuple(.741123, DATEMODE) - self.assertEqual(time, (0, 0, 0, 17, 47, 13)) - - def test_xldate_from_date_tuple(self): - date = xldate.xldate_from_date_tuple( (1907, 7, 3), DATEMODE ) - self.assertAlmostEqual(date, 2741.) - date = xldate.xldate_from_date_tuple( (2005, 2, 23), DATEMODE ) - self.assertAlmostEqual(date, 38406.) - date = xldate.xldate_from_date_tuple( (1988, 5, 3), DATEMODE ) - self.assertAlmostEqual(date, 32266.) - - def test_xldate_from_time_tuple(self): - time = xldate.xldate_from_time_tuple( (6, 34, 0) ) - self.assertAlmostEqual(time, .273611, places=6) - time = xldate.xldate_from_time_tuple( (12, 56, 0) ) - self.assertAlmostEqual(time, .538889, places=6) - time = xldate.xldate_from_time_tuple( (17, 47, 13) ) - self.assertAlmostEqual(time, .741123, places=6) - - def test_xldate_from_datetime_tuple(self): - date = xldate.xldate_from_datetime_tuple( (1907, 7, 3, 6, 34, 0), DATEMODE) - self.assertAlmostEqual(date, 2741.273611, places=6) - date = xldate.xldate_from_datetime_tuple( (2005, 2, 23, 12, 56, 0), DATEMODE) - self.assertAlmostEqual(date, 38406.538889, places=6) - date = xldate.xldate_from_datetime_tuple( (1988, 5, 3, 17, 47, 13), DATEMODE) - self.assertAlmostEqual(date, 32266.741123, places=6) - -if __name__=='__main__': - unittest.main() diff --git a/webhub/temp/tests/test_xldate_to_datetime.py b/webhub/temp/tests/test_xldate_to_datetime.py deleted file mode 100644 index 302997f7..00000000 --- a/webhub/temp/tests/test_xldate_to_datetime.py +++ /dev/null @@ -1,164 +0,0 @@ -############################################################################### -# -# Tests for the xlrd xldate.xldate_as_datetime() function. -# - -import unittest -from datetime import datetime -from xlrd import xldate - -not_1904 = False -is_1904 = True - - -class TestConvertToDateTime(unittest.TestCase): - """ - Testcases to test the _xldate_to_datetime() function against dates - extracted from Excel files, with 1900/1904 epochs. - - """ - - def test_dates_and_times_1900_epoch(self): - """ - Test the _xldate_to_datetime() function for dates and times in - the Excel standard 1900 epoch. - - """ - # Test Excel dates strings and corresponding serial date numbers taken - # from an Excel file. - excel_dates = [ - # Excel's 0.0 date in the 1900 epoch is 1 day before 1900. - ('1899-12-31T00:00:00.000', 0), - - # Date/time before the false Excel 1900 leapday. - ('1900-02-28T02:11:11.986', 59.09111094906), - - # Date/time after the false Excel 1900 leapday. - ('1900-03-01T05:46:44.068', 61.24078782403), - - # Random date/times in Excel's 0-9999.9999+ range. - ('1982-08-25T00:15:20.213', 30188.010650613425), - ('2065-04-19T00:16:48.290', 60376.011670023145), - ('3222-06-11T03:08:08.251', 483014.13065105322), - ('4379-08-03T06:14:48.580', 905652.26028449077), - ('5949-12-30T12:59:54.263', 1479232.5416002662), - - # End of Excel's date range. - ('9999-12-31T23:59:59.000', 2958465.999988426), - ] - - # Convert the Excel date strings to datetime objects and compare - # against the dateitme return value of xldate.xldate_as_datetime(). - for excel_date in excel_dates: - exp = datetime.strptime(excel_date[0], "%Y-%m-%dT%H:%M:%S.%f") - got = xldate.xldate_as_datetime(excel_date[1], not_1904) - - self.assertEqual(got, exp) - - def test_dates_only_1900_epoch(self): - """ - Test the _xldate_to_datetime() function for dates in the Excel - standard 1900 epoch. - - """ - # Test Excel dates strings and corresponding serial date numbers taken - # from an Excel file. - excel_dates = [ - # Excel's day 0 in the 1900 epoch is 1 day before 1900. - ('1899-12-31', 0), - - # Excel's day 1 in the 1900 epoch. - ('1900-01-01', 1), - - # Date/time before the false Excel 1900 leapday. - ('1900-02-28', 59), - - # Date/time after the false Excel 1900 leapday. - ('1900-03-01', 61), - - # Random date/times in Excel's 0-9999.9999+ range. - ('1902-09-27', 1001), - ('1999-12-31', 36525), - ('2000-01-01', 36526), - ('4000-12-31', 767376), - ('4321-01-01', 884254), - ('9999-01-01', 2958101), - - # End of Excel's date range. - ('9999-12-31', 2958465), - ] - - # Convert the Excel date strings to datetime objects and compare - # against the dateitme return value of xldate.xldate_as_datetime(). - for excel_date in excel_dates: - exp = datetime.strptime(excel_date[0], "%Y-%m-%d") - got = xldate.xldate_as_datetime(excel_date[1], not_1904) - - self.assertEqual(got, exp) - - def test_dates_only_1904_epoch(self): - """ - Test the _xldate_to_datetime() function for dates in the Excel - Mac/1904 epoch. - - """ - # Test Excel dates strings and corresponding serial date numbers taken - # from an Excel file. - excel_dates = [ - # Excel's day 0 in the 1904 epoch. - ('1904-01-01', 0), - - # Random date/times in Excel's 0-9999.9999+ range. - ('1904-01-31', 30), - ('1904-08-31', 243), - ('1999-02-28', 34757), - ('1999-12-31', 35063), - ('2000-01-01', 35064), - ('2400-12-31', 181526), - ('4000-01-01', 765549), - ('9999-01-01', 2956639), - - # End of Excel's date range. - ('9999-12-31', 2957003), - ] - - # Convert the Excel date strings to datetime objects and compare - # against the dateitme return value of xldate.xldate_as_datetime(). - for excel_date in excel_dates: - exp = datetime.strptime(excel_date[0], "%Y-%m-%d") - got = xldate.xldate_as_datetime(excel_date[1], is_1904) - - self.assertEqual(got, exp) - - def test_times_only(self): - """ - Test the _xldate_to_datetime() function for times only, i.e, the - fractional part of the Excel date when the serial date is 0. - - """ - # Test Excel dates strings and corresponding serial date numbers taken - # from an Excel file. The 1899-12-31 date is Excel's day 0. - excel_dates = [ - # Random times in Excel's 0-0.9999+ range for 1 day. - ('1899-12-31T00:00:00.000', 0), - ('1899-12-31T00:15:20.213', 1.0650613425925924E-2), - ('1899-12-31T02:24:37.095', 0.10042934027777778), - ('1899-12-31T04:56:35.792', 0.2059698148148148), - ('1899-12-31T07:31:20.407', 0.31343063657407405), - ('1899-12-31T09:37:23.945', 0.40097158564814817), - ('1899-12-31T12:09:48.602', 0.50681252314814818), - ('1899-12-31T14:37:57.451', 0.60969271990740748), - ('1899-12-31T17:04:02.415', 0.71113906250000003), - ('1899-12-31T19:14:24.673', 0.80167445601851861), - ('1899-12-31T21:39:05.944', 0.90215212962962965), - ('1899-12-31T23:17:12.632', 0.97028509259259266), - ('1899-12-31T23:59:59.999', 0.99999998842592586), - ] - - # Convert the Excel date strings to datetime objects and compare - # against the dateitme return value of xldate.xldate_as_datetime(). - for excel_date in excel_dates: - exp = datetime.strptime(excel_date[0], "%Y-%m-%dT%H:%M:%S.%f") - got = xldate.xldate_as_datetime(excel_date[1], not_1904) - - self.assertEqual(got, exp) diff --git a/webhub/temp/tests/test_xlsx_comments.py b/webhub/temp/tests/test_xlsx_comments.py deleted file mode 100644 index 456ffc18..00000000 --- a/webhub/temp/tests/test_xlsx_comments.py +++ /dev/null @@ -1,46 +0,0 @@ -from unittest import TestCase - -import os - -from xlrd import open_workbook - -from .base import from_this_dir - -class TestXlsxComments(TestCase): - - def test_excel_comments(self): - book = open_workbook(from_this_dir('test_comments_excel.xlsx')) - sheet = book.sheet_by_index(0) - - note_map = sheet.cell_note_map - self.assertEqual(len(note_map), 1) - self.assertEqual(note_map[(0, 1)].text, 'hello') - - def test_excel_comments_multiline(self): - book = open_workbook(from_this_dir('test_comments_excel.xlsx')) - sheet = book.sheet_by_index(1) - - note_map = sheet.cell_note_map - self.assertEqual(note_map[(1, 2)].text, '1st line\n2nd line') - - def test_excel_comments_two_t_elements(self): - book = open_workbook(from_this_dir('test_comments_excel.xlsx')) - sheet = book.sheet_by_index(2) - - note_map = sheet.cell_note_map - self.assertEqual(note_map[(0, 0)].text, 'Author:\nTwo t elements') - - def test_excel_comments_no_t_elements(self): - book = open_workbook(from_this_dir('test_comments_excel.xlsx')) - sheet = book.sheet_by_index(3) - - note_map = sheet.cell_note_map - self.assertEqual(note_map[(0,0)].text, '') - - def test_gdocs_comments(self): - book = open_workbook(from_this_dir('test_comments_gdocs.xlsx')) - sheet = book.sheet_by_index(0) - - note_map = sheet.cell_note_map - self.assertEqual(len(note_map), 1) - self.assertEqual(note_map[(0, 1)].text, 'Just a test') diff --git a/webhub/temp/tests/text_bar.xlsx b/webhub/temp/tests/text_bar.xlsx deleted file mode 100644 index 9e30e6366e56a9951998ca66af4e72ff78185879..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 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 diff --git a/webhub/urls.py b/webhub/urls.py index 2e528828..6d347658 100644 --- a/webhub/urls.py +++ b/webhub/urls.py @@ -7,7 +7,6 @@ router = routers.DefaultRouter() router.register(r'users', views.UserViewSet) router.register(r'posts', malaria_views.PostViewSet) -router.register(r'revposts', malaria_views.RevPostViewSet) router.register(r'regions', peacetrack_views.RegionViewSet) router.register(r'sectors', peacetrack_views.SectorViewSet) router.register(r'ptposts', peacetrack_views.PTPostViewSet) @@ -98,7 +97,4 @@ url(r'^helpPC/$', views.helpPC, name='helpPC'), - url(r'^testDB/$', - views.testDB, - name='testDB'), ) diff --git a/webhub/views.py b/webhub/views.py index 66403397..66f3c692 100644 --- a/webhub/views.py +++ b/webhub/views.py @@ -10,7 +10,6 @@ from rest_framework import status from rest_framework.decorators import api_view from rest_framework.response import Response -from webhub import xlrd from webhub.checker import check from webhub.models import * from webhub.serializers import * @@ -459,11 +458,3 @@ def details(request): #called when user wishes to go to the Help def helpPC(request): return HttpResponse(jinja_environ.get_template('helpPC.html').render({"pcuser":None})) - -#called to test if the script is fetching data from the excel sheet -def testDB(request): - book = xlrd.open_workbook("Updated Project Framework Indicator List PeaceTrack.xlsx") - no = book.nsheets - - return HttpResponse(jinja_environ.get_template('test.html').render({"pcuser":None, "no":no})) - diff --git a/webhub/xlrd/__init__.py b/webhub/xlrd/__init__.py deleted file mode 100644 index 423a3158..00000000 --- a/webhub/xlrd/__init__.py +++ /dev/null @@ -1,461 +0,0 @@ -from os import path - -from .info import __VERSION__ - -#

      -
      -
      -
      - -

      - Delete Post -

      -
      -
      +
      +

      Delete Post


      {% csrf_token %}
      - +
      @@ -34,6 +27,5 @@

      -



      {% endblock %} diff --git a/malaria/templates/malaria/edit_post.html b/malaria/templates/malaria/edit_post.html index bf0b6582..efed12d2 100644 --- a/malaria/templates/malaria/edit_post.html +++ b/malaria/templates/malaria/edit_post.html @@ -8,13 +8,12 @@





      Malaria : infoHub

      -
      -

      Edit Post

      +

      Edit Post


      {% csrf_token %}
      - +

      @@ -29,7 +28,7 @@

      - +

      diff --git a/malaria/templates/malaria/list_posts.html b/malaria/templates/malaria/list_posts.html index 5a85ef3e..c78c48d4 100644 --- a/malaria/templates/malaria/list_posts.html +++ b/malaria/templates/malaria/list_posts.html @@ -16,46 +16,40 @@

      Malaria : infoHub

      -
      -
      -
      - New Post - {% if post_list %} + {% if post_list %} +
      + New Post - - - - - - - - {% for post in post_list %} + - - + + - {% endfor %} - + + + {% for post in post_list %} + + + + + {% endfor %} +
      - -

      Post

      -
      -
      - -

      Action

      -
      -
      - {{ post.title_post }} - - Edit - Delete - +

      Post

      +
      +

      Action

      +
      +

      + {{ post.title_post }} +

      +
      + View + Edit + Delete +
      - {% else %} -

      There are No Posts right now.











      - {% endif %}
      -
      -
      -
      + {% else %} +

      There are No Posts right now.











      + {% endif %} {% endblock %} diff --git a/malaria/templates/malaria/notice.html b/malaria/templates/malaria/notice.html deleted file mode 100644 index ac8bfefc..00000000 --- a/malaria/templates/malaria/notice.html +++ /dev/null @@ -1,13 +0,0 @@ -{% extends "infohub/base.html" %} - -{% block content %} - - Notice - - -







      -

      {{ text }}

      -

      {{ text1 }}

      -












      - -{% endblock %} diff --git a/malaria/templates/malaria/view_post.html b/malaria/templates/malaria/view_post.html index 22153d58..9365eb5c 100644 --- a/malaria/templates/malaria/view_post.html +++ b/malaria/templates/malaria/view_post.html @@ -7,61 +7,85 @@





      Malaria : infoHub

      -
      -
      -

      View Post

      +
      +

      View Post


      -
      -
      -
      -

      Title :

      +
      +

      Title:

      -
      -

      {{ post.title_post }}

      +
      +

      + {{ post.title_post }} +

      -
      -
      -
      -

      Description :

      +
      +

      Description:

      -
      -

      {{ post.description_post }}

      +
      +

      + {{ post.description_post }} +

      -

      -
      -
      - Edit - Delete -
      +

      -
      -
      -

      -

      Revision History of this Post


      -
      -
      -
      -
      The post was created by {{ post.owner }} on {{ post.created }}
      - {% for rev in revpost %} -
    9. The post was updated by {{ rev.owner_rev.user.first_name }} on {{ rev.created }}
    10. -
      - {% if rev.title_change %} - The title has been changed from "{{ rev.title_post_rev }}" to "{{ post.title_post }}" - {% endif %} - {% if rev.description_change %} - The description has been changed from "{{ rev.description_post_rev }}" to "{{ post.description_post }}" - {% endif %} -
      - {% endfor %} -
      -
      -

      +
      +

      Revision History

      +
      + + + + + + + + + + + {% for revpost in revpost_list %} + + + + + + + {% endfor %} + +
      +

      Author

      +
      +

      Date Updated

      +
      +

      Title

      +
      +

      Description

      +
      +

      + {{ revpost.owner_rev.user.first_name }} {{ revpost.owner_rev.user.last_name }} +

      +
      +

      + {{ revpost.created }} +

      +
      +

      + {{ revpost.title_post_rev }} +

      +
      +

      + {{ revpost.description_post_rev }} +

      +
      +
      {% endblock %} diff --git a/malaria/views.py b/malaria/views.py index 6647b211..d39352b6 100644 --- a/malaria/views.py +++ b/malaria/views.py @@ -14,24 +14,6 @@ def list_posts(request): {'post_list': post_list}) -def view_post(request, post_id): - - retval = check(request) - if retval is not None: - return retval - - post = get_post_by_id(post_id) - revpost = get_revpost_of_owner(post_id) - # revpost may not exist yet so do not check it - if post: - return render(request, - 'malaria/view_post.html', - {'post': post, - 'revpost': revpost}) - else: - raise Http404 - - def create_post(request): # check if the user is logged in @@ -43,14 +25,24 @@ def create_post(request): if request.method == 'POST': form = PostForm(request.POST) if form.is_valid(): + + title_post = form.cleaned_data['title_post'] + description_post = form.cleaned_data['description_post'] + post = form.save(commit=False) post.owner = request.user.pcuser post.save() - return render(request, - 'malaria/notice.html', - {'text': 'Post created successfully.', - 'text1': 'Click here to view post.', - 'post': post}) + + revpost = RevPost(owner_rev=request.user.pcuser, + owner_rev_post=post, + title_post_rev=title_post, + description_post_rev=description_post, + title_change=True, + description_change=True) + revpost.save() + + return HttpResponseRedirect(reverse('malaria:list_posts')) + return render(request, 'malaria/create_post.html', {'form': form}) @@ -95,23 +87,14 @@ def edit_post(request, post_id): revpost = RevPost(owner_rev=owner, owner_rev_post=post, - title_post_rev=orig_title, - description_post_rev=orig_desc, + title_post_rev=edited_title, + description_post_rev=edited_desc, title_change=revpost_title_change, description_change=revpost_desc_change) revpost.save() - return render(request, - 'malaria/notice.html', - {'text': 'Post edited successfully.', - 'text1': 'Click here to view post.', - 'post': post}) - else: - return render(request, - 'malaria/notice.html', - {'text': 'No changes to Post made.', - 'text1': 'Click here to view post.', - 'post': post}) + return HttpResponseRedirect(reverse('malaria:view_post', + args=(post_id,))) else: return render(request, 'malaria/edit_post.html', @@ -140,3 +123,21 @@ def delete_post(request, post_id): return render(request, 'malaria/delete_post.html', {'post_id': post_id}) + + +def view_post(request, post_id): + + retval = check(request) + if retval is not None: + return retval + + post = get_post_by_id(post_id) + revpost_list = get_revpost_of_owner(post_id) + # revpost may not exist yet so do not check it + if post: + return render(request, + 'malaria/view_post.html', + {'post': post, + 'revpost_list': revpost_list}) + else: + raise Http404 From 80d54972ba67e43dc45c0947e475292688e0184f Mon Sep 17 00:00:00 2001 From: Irish Medina Date: Sun, 26 Jul 2015 01:33:09 -0500 Subject: [PATCH 06/55] Moved some code from create_post view function to services layer --- malaria/services.py | 28 ++++++++++++++++++++++++++++ malaria/views.py | 32 +++++++++++++++----------------- 2 files changed, 43 insertions(+), 17 deletions(-) diff --git a/malaria/services.py b/malaria/services.py index c77b902b..442da6ac 100644 --- a/malaria/services.py +++ b/malaria/services.py @@ -2,6 +2,34 @@ from malaria.models import Post, RevPost +def create_post_from_form(form, owner): + + post = None + + if form and owner: + post = form.save(commit=False) + post.owner = owner + post.save() + + return post + + +def create_revpost(owner, post, title, description): + + revpost = None + + if owner and post and title and description: + revpost = RevPost(owner_rev=owner, + owner_rev_post=post, + title_post_rev=title, + description_post_rev=description, + title_change=True, + description_change=True) + revpost.save() + + return revpost + + def delete_post_by_id(post_id): is_deleted = False diff --git a/malaria/views.py b/malaria/views.py index d39352b6..7bec5901 100644 --- a/malaria/views.py +++ b/malaria/views.py @@ -3,7 +3,8 @@ from django.core.urlresolvers import reverse from malaria.forms import PostForm from malaria.models import Post, RevPost -from malaria.services import delete_post_by_id, get_post_by_id, get_revpost_of_owner +from malaria.services import create_post_from_form, create_revpost, \ + delete_post_by_id, get_post_by_id, get_revpost_of_owner from webhub.checker import check @@ -26,22 +27,19 @@ def create_post(request): form = PostForm(request.POST) if form.is_valid(): - title_post = form.cleaned_data['title_post'] - description_post = form.cleaned_data['description_post'] - - post = form.save(commit=False) - post.owner = request.user.pcuser - post.save() - - revpost = RevPost(owner_rev=request.user.pcuser, - owner_rev_post=post, - title_post_rev=title_post, - description_post_rev=description_post, - title_change=True, - description_change=True) - revpost.save() - - return HttpResponseRedirect(reverse('malaria:list_posts')) + title = form.cleaned_data['title_post'] + description = form.cleaned_data['description_post'] + owner = request.user.pcuser + post = create_post_from_form(form, owner) + + if post: + revpost = create_revpost(owner, post, title, description) + if revpost: + return HttpResponseRedirect(reverse('malaria:list_posts')) + else: + raise Http404 + else: + raise Http404 return render(request, 'malaria/create_post.html', From f94a5f5225e93956e2e0abcbfb51fb8f86a6c610 Mon Sep 17 00:00:00 2001 From: Irish Medina Date: Wed, 29 Jul 2015 03:20:35 -0500 Subject: [PATCH 07/55] Changed error message text to white and updated Post model regex validator to allow newlines and some special characters --- malaria/models.py | 6 ++-- malaria/services.py | 2 ++ malaria/templates/malaria/create_post.html | 4 +-- malaria/templates/malaria/edit_post.html | 4 +-- malaria/templates/malaria/list_posts.html | 5 +++- malaria/views.py | 32 ++++++++-------------- 6 files changed, 25 insertions(+), 28 deletions(-) diff --git a/malaria/models.py b/malaria/models.py index 1762df27..fddef776 100644 --- a/malaria/models.py +++ b/malaria/models.py @@ -6,16 +6,16 @@ class Post(models.Model): # The owner of the post owner = models.ForeignKey(Pcuser, null=False, related_name='owner') - title_post = models.CharField(max_length=100, + title_post = models.CharField(max_length=500, validators=[ RegexValidator( - r'^[(A-Z)|(a-z)|(0-9)|(\s)|(\.)|(,)|(\-)|(!)|(:)]+$' + r'^[(A-Z)|(a-z)|(0-9)|(\s)|(\.)|(,)|(\-)|(_)|(!)|(:)|(%)]+$' )] ) description_post = models.CharField(max_length=5000, validators=[ RegexValidator( - r'^[(A-Z)|(a-z)|(0-9)|(\s)|(\.)|(,)|(\-)|(!)|(:)]+$' + r'^[(A-Z)|(a-z)|(0-9)|(\n)|(\s)|(\.)|(,)|(\-)|(_)|(!)|(:)|(%)]+$' )] ) # link to important documents diff --git a/malaria/services.py b/malaria/services.py index 442da6ac..cb09b5fa 100644 --- a/malaria/services.py +++ b/malaria/services.py @@ -19,6 +19,8 @@ def create_revpost(owner, post, title, description): revpost = None if owner and post and title and description: + # title_change and description_change fields + # are not being used, may have to remove from model later revpost = RevPost(owner_rev=owner, owner_rev_post=post, title_post_rev=title, diff --git a/malaria/templates/malaria/create_post.html b/malaria/templates/malaria/create_post.html index ec5ead7c..58edbc40 100644 --- a/malaria/templates/malaria/create_post.html +++ b/malaria/templates/malaria/create_post.html @@ -16,7 +16,7 @@

      New Post

      -

      +

      {% if form.title_post.errors %} {% for error in form.title_post.errors %} @@ -31,7 +31,7 @@

      New Post

      -

      +

      {% if form.description_post.errors %} {% for error in form.description_post.errors %} diff --git a/malaria/templates/malaria/edit_post.html b/malaria/templates/malaria/edit_post.html index efed12d2..e6b3465e 100644 --- a/malaria/templates/malaria/edit_post.html +++ b/malaria/templates/malaria/edit_post.html @@ -16,7 +16,7 @@

      Edit Post

      -

      +

      {% if form.title_post.errors %} {% for error in form.title_post.errors %} @@ -31,7 +31,7 @@

      Edit Post

      -

      +

      {% if form.description_post.errors %} {% for error in form.description_post.errors %} diff --git a/malaria/templates/malaria/list_posts.html b/malaria/templates/malaria/list_posts.html index c78c48d4..635a6e2f 100644 --- a/malaria/templates/malaria/list_posts.html +++ b/malaria/templates/malaria/list_posts.html @@ -49,7 +49,10 @@

      {% else %} -

      There are No Posts right now.











      +
      + New Post +

      No Posts

      +
      {% endif %} {% endblock %} diff --git a/malaria/views.py b/malaria/views.py index 7bec5901..8b1c8263 100644 --- a/malaria/views.py +++ b/malaria/views.py @@ -2,7 +2,7 @@ from django.http import Http404, HttpResponseRedirect from django.core.urlresolvers import reverse from malaria.forms import PostForm -from malaria.models import Post, RevPost +from malaria.models import Post from malaria.services import create_post_from_form, create_revpost, \ delete_post_by_id, get_post_by_id, get_revpost_of_owner from webhub.checker import check @@ -71,25 +71,17 @@ def edit_post(request, post_id): if (orig_title != edited_title) or \ (orig_desc != edited_desc): - post = form.save(commit=False) - post.owner = owner - post.save() - - revpost_title_change = False - revpost_desc_change = False - - if(orig_title != edited_title): - revpost_title_change = True - if(orig_desc != edited_desc): - revpost_desc_change = True - - revpost = RevPost(owner_rev=owner, - owner_rev_post=post, - title_post_rev=edited_title, - description_post_rev=edited_desc, - title_change=revpost_title_change, - description_change=revpost_desc_change) - revpost.save() + post = create_post_from_form(form, owner) + + if post: + revpost = create_revpost(owner, + post, + edited_title, + edited_desc) + if not revpost: + raise Http404 + else: + raise Http404 return HttpResponseRedirect(reverse('malaria:view_post', args=(post_id,))) From 6182fd088b5dad83d586a7fa65019a3903360002 Mon Sep 17 00:00:00 2001 From: Irish Medina Date: Wed, 29 Jul 2015 03:34:20 -0500 Subject: [PATCH 08/55] Fixed width of description post contents and changed the color of some buttons --- malaria/templates/malaria/delete_post.html | 2 +- malaria/templates/malaria/list_posts.html | 4 ++-- malaria/templates/malaria/view_post.html | 14 +++++++------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/malaria/templates/malaria/delete_post.html b/malaria/templates/malaria/delete_post.html index b632a778..f6ae5b3d 100644 --- a/malaria/templates/malaria/delete_post.html +++ b/malaria/templates/malaria/delete_post.html @@ -21,7 +21,7 @@

      Delete Post

      - + Cancel
      diff --git a/malaria/templates/malaria/list_posts.html b/malaria/templates/malaria/list_posts.html index 635a6e2f..1b43f96c 100644 --- a/malaria/templates/malaria/list_posts.html +++ b/malaria/templates/malaria/list_posts.html @@ -40,8 +40,8 @@

      View - Edit - Delete + Edit + Delete {% endfor %} diff --git a/malaria/templates/malaria/view_post.html b/malaria/templates/malaria/view_post.html index 9365eb5c..a9ea821b 100644 --- a/malaria/templates/malaria/view_post.html +++ b/malaria/templates/malaria/view_post.html @@ -24,7 +24,7 @@

      Description:

      -
      +

      {{ post.description_post }}

      @@ -34,8 +34,8 @@

      @@ -46,16 +46,16 @@

      Revision History

      -

      Author

      +

      Author

      -

      Date Updated

      +

      Date Updated

      -

      Title

      +

      Title

      -

      Description

      +

      Description

      From ce8375467a94de47b764b059c57debb0553430c5 Mon Sep 17 00:00:00 2001 From: Irish Medina Date: Wed, 29 Jul 2015 03:47:01 -0500 Subject: [PATCH 09/55] Fixed how post description contents are displayed so that HTML line breaks are inserted where there are new lines in plaintext --- malaria/templates/malaria/create_post.html | 2 +- malaria/templates/malaria/edit_post.html | 2 +- malaria/templates/malaria/view_post.html | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/malaria/templates/malaria/create_post.html b/malaria/templates/malaria/create_post.html index 58edbc40..056d76af 100644 --- a/malaria/templates/malaria/create_post.html +++ b/malaria/templates/malaria/create_post.html @@ -30,7 +30,7 @@

      New Post

      - +

      {% if form.description_post.errors %} diff --git a/malaria/templates/malaria/edit_post.html b/malaria/templates/malaria/edit_post.html index e6b3465e..c118ce55 100644 --- a/malaria/templates/malaria/edit_post.html +++ b/malaria/templates/malaria/edit_post.html @@ -30,7 +30,7 @@

      Edit Post

      - +

      {% if form.description_post.errors %} diff --git a/malaria/templates/malaria/view_post.html b/malaria/templates/malaria/view_post.html index a9ea821b..25513841 100644 --- a/malaria/templates/malaria/view_post.html +++ b/malaria/templates/malaria/view_post.html @@ -26,7 +26,7 @@

      Description:

      - {{ post.description_post }} + {{ post.description_post|linebreaksbr }}

      @@ -79,7 +79,7 @@

      - {{ revpost.description_post_rev }} + {{ revpost.description_post_rev|linebreaksbr }}

      From 03f49cb783d91fa2055b6074d5ed7be291a63fc1 Mon Sep 17 00:00:00 2001 From: Irish Medina Date: Thu, 30 Jul 2015 23:25:48 -0500 Subject: [PATCH 10/55] Updated description_post field in the Post model to be a TextField. Updated title_post_rev field in RevPost model to include a regex validator and updated description_post_rev field in RevPost model to include a regex validator and to be a TextField. --- malaria/models.py | 18 ++++++++++++++---- malaria/templates/malaria/view_post.html | 4 ++-- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/malaria/models.py b/malaria/models.py index fddef776..8fb18016 100644 --- a/malaria/models.py +++ b/malaria/models.py @@ -6,13 +6,13 @@ class Post(models.Model): # The owner of the post owner = models.ForeignKey(Pcuser, null=False, related_name='owner') - title_post = models.CharField(max_length=500, + title_post = models.CharField(max_length=1000, validators=[ RegexValidator( r'^[(A-Z)|(a-z)|(0-9)|(\s)|(\.)|(,)|(\-)|(_)|(!)|(:)|(%)]+$' )] ) - description_post = models.CharField(max_length=5000, + description_post = models.TextField(max_length=20000, validators=[ RegexValidator( r'^[(A-Z)|(a-z)|(0-9)|(\n)|(\s)|(\.)|(,)|(\-)|(_)|(!)|(:)|(%)]+$' @@ -37,9 +37,19 @@ class RevPost(models.Model): # The user who is editing the post owner_rev = models.ForeignKey(Pcuser, null=False, related_name='owner_rev') # revised title - title_post_rev = models.CharField(max_length=300) + title_post_rev = models.CharField(max_length=1000, + validators=[ + RegexValidator( + r'^[(A-Z)|(a-z)|(0-9)|(\s)|(\.)|(,)|(\-)|(_)|(!)|(:)|(%)]+$' + )] + ) # revised description - description_post_rev = models.CharField(max_length=2000) + description_post_rev = models.TextField(max_length=20000, + validators=[ + RegexValidator( + r'^[(A-Z)|(a-z)|(0-9)|(\n)|(\s)|(\.)|(,)|(\-)|(_)|(!)|(:)|(%)]+$' + )] + ) # field to note the timestamp when the revised version was created created = models.DateTimeField(auto_now_add=True) # change in title diff --git a/malaria/templates/malaria/view_post.html b/malaria/templates/malaria/view_post.html index 25513841..d02911ac 100644 --- a/malaria/templates/malaria/view_post.html +++ b/malaria/templates/malaria/view_post.html @@ -12,7 +12,7 @@

      View Post


      -

      Title:

      +

      Title:

      @@ -22,7 +22,7 @@

      -

      Description:

      +

      Description:

      From 0173720f9ea289e282d5c4f0c16350ae67100a07 Mon Sep 17 00:00:00 2001 From: Irish Medina Date: Thu, 30 Jul 2015 23:33:31 -0500 Subject: [PATCH 11/55] =?UTF-8?q?Update=20author=20name=20displayed=20in?= =?UTF-8?q?=20Revision=20History=20so=20that=20the=20username=20is=20displ?= =?UTF-8?q?ayed=20if=20the=20first=20name=20or=20the=20last=20name=20in=20?= =?UTF-8?q?a=20user=E2=80=99s=20profile=20hasnt=20been=20set?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- malaria/templates/malaria/view_post.html | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/malaria/templates/malaria/view_post.html b/malaria/templates/malaria/view_post.html index d02911ac..768a0396 100644 --- a/malaria/templates/malaria/view_post.html +++ b/malaria/templates/malaria/view_post.html @@ -64,7 +64,11 @@

      Description

      - {{ revpost.owner_rev.user.first_name }} {{ revpost.owner_rev.user.last_name }} + {% if revpost.owner_rev.user.first_name or revpost.owner_rev.user.last_name %} + {{ revpost.owner_rev.user.first_name }} {{ revpost.owner_rev.user.last_name }} + {% else %} + {{ revpost.owner_rev.user.username }} + {% endif %}

      From 7c278907d1b747d476abf0676d9905e3e5c75c55 Mon Sep 17 00:00:00 2001 From: Irish Medina Date: Thu, 30 Jul 2015 23:46:51 -0500 Subject: [PATCH 12/55] Updated the update schema guide to remind the user to update the api serializers if necessary --- docs/Installation Guidelines | 37 ---------------------------------- docs/Readme.pdf | Bin 22988 -> 0 bytes docs/Update Schema Guide.md | 14 +++++++++++++ 3 files changed, 14 insertions(+), 37 deletions(-) delete mode 100644 docs/Installation Guidelines delete mode 100644 docs/Readme.pdf diff --git a/docs/Installation Guidelines b/docs/Installation Guidelines deleted file mode 100644 index 4e28fe7b..00000000 --- a/docs/Installation Guidelines +++ /dev/null @@ -1,37 +0,0 @@ -Readme file : - -Details about the folders - -infohub : contains the python environment setup, it contains 4 files - init.py, settings.py, urls.py and wsgi.py -settings.py has the main configuration settings like dependencies, database, timezone etc. - -ui : contains the ui page templates of the site, it conains the html,css, js page templates with applied jinja integration. Also, I have used bootstrap for responsiveness and better UI design. - -webhub : contains the python-django backend of the site, it conains 7 files - init.py, admin.py, checker.py, models.py, tests.py, urls.py and views.py -admin.py contains the models that are to be added in the admin panel -checker.py has a check function that redirects the user to the home page depending upon his current status (i.e. login/logout) -models.py has all the information about the models we are going to have in the database -urls.py has the urls of the pages created connected with the respective views -views.py has all the views, ie function to call different views and render the respective values from the backend - -manage.py : is the file that is used to run the application - - -Guidelines to run the application : - -I had to reinstall postgres and python on the VM provided. Also, I had to install python-psycopg2 and jinja on the VM. Make sure the internet is working as I have used some online resources right now. - -To run the application, -1. Start the VM. Install the mentioned dependencies if required -2. Go to the directory which has manage.py file -3. Syncing with the database : run the following command from the terminal - python manage.py syncdb -4. You might be asked to create a super user. Create one. -5. Runnning the server : run the following command from the terminal - python manage.py runserver 0.0.0.0:8000 -6. Open the web-browser and go to http://192.168.33.10:8000/admin. Log in (with the superuser credentials). -7. You will have to create one user from the admin panel.Create one user and add it to the new pcuser. Log out. -8. Now go to http://192.168.33.10:8000/. Login with the credential of the pcuser that you created from the admin panel. -9. Done ! - - diff --git a/docs/Readme.pdf b/docs/Readme.pdf deleted file mode 100644 index 0e7b2ae9268f60b00696737731692a01d7d8336a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22988 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 S=daDUp5YoC Date: Sat, 1 Aug 2015 05:49:31 -0500 Subject: [PATCH 13/55] Fixed header and footer to be responsive to window size changes --- .../css/bootstrap-theme.css | 265 ++-- .../css/bootstrap-theme.css.map | 1 + .../css/bootstrap-theme.min.css | 5 + .../css/bootstrap.css | 1108 ++++++++-------- .../css/bootstrap.css.map | 1 + .../css/bootstrap.min.css | 5 + .../fonts/glyphicons-halflings-regular.eot | Bin .../fonts/glyphicons-halflings-regular.svg | 0 .../fonts/glyphicons-halflings-regular.ttf | Bin .../fonts/glyphicons-halflings-regular.woff | Bin .../fonts/glyphicons-halflings-regular.woff2 | Bin .../js/bootstrap.js | 1131 ++++++++--------- .../bootstrap-3.3.5-dist/js/bootstrap.min.js | 7 + .../infohub/bootstrap-3.3.5-dist/js/npm.js | 13 + .../bootstrap-css-custom/navbar-default.css | 13 + .../bootstrap-css-custom/sticky-footer.css | 36 + .../infohub/bootstrap-css-custom/well.css | 4 + infohub/static/infohub/bootstrap/config.json | 434 ------- .../bootstrap/css/bootstrap-theme.min.css | 14 - .../infohub/bootstrap/css/bootstrap.min.css | 14 - .../infohub/bootstrap/js/bootstrap.min.js | 12 - infohub/static/infohub/css/footer.css | 25 - infohub/static/infohub/img/logo.gif | Bin 0 -> 56648 bytes infohub/templates/infohub/base.html | 52 +- malaria/templates/malaria/create_post.html | 91 +- malaria/templates/malaria/delete_post.html | 47 +- malaria/templates/malaria/edit_post.html | 93 +- malaria/templates/malaria/list_posts.html | 99 +- malaria/templates/malaria/view_post.html | 165 ++- 29 files changed, 1587 insertions(+), 2048 deletions(-) rename infohub/static/infohub/{bootstrap => bootstrap-3.3.5-dist}/css/bootstrap-theme.css (71%) create mode 100644 infohub/static/infohub/bootstrap-3.3.5-dist/css/bootstrap-theme.css.map create mode 100644 infohub/static/infohub/bootstrap-3.3.5-dist/css/bootstrap-theme.min.css rename infohub/static/infohub/{bootstrap => bootstrap-3.3.5-dist}/css/bootstrap.css (90%) create mode 100644 infohub/static/infohub/bootstrap-3.3.5-dist/css/bootstrap.css.map create mode 100644 infohub/static/infohub/bootstrap-3.3.5-dist/css/bootstrap.min.css rename infohub/static/infohub/{bootstrap => bootstrap-3.3.5-dist}/fonts/glyphicons-halflings-regular.eot (100%) rename infohub/static/infohub/{bootstrap => bootstrap-3.3.5-dist}/fonts/glyphicons-halflings-regular.svg (100%) rename infohub/static/infohub/{bootstrap => bootstrap-3.3.5-dist}/fonts/glyphicons-halflings-regular.ttf (100%) rename infohub/static/infohub/{bootstrap => bootstrap-3.3.5-dist}/fonts/glyphicons-halflings-regular.woff (100%) rename infohub/static/infohub/{bootstrap => bootstrap-3.3.5-dist}/fonts/glyphicons-halflings-regular.woff2 (100%) rename infohub/static/infohub/{bootstrap => bootstrap-3.3.5-dist}/js/bootstrap.js (99%) create mode 100644 infohub/static/infohub/bootstrap-3.3.5-dist/js/bootstrap.min.js create mode 100644 infohub/static/infohub/bootstrap-3.3.5-dist/js/npm.js create mode 100644 infohub/static/infohub/bootstrap-css-custom/navbar-default.css create mode 100644 infohub/static/infohub/bootstrap-css-custom/sticky-footer.css create mode 100644 infohub/static/infohub/bootstrap-css-custom/well.css delete mode 100644 infohub/static/infohub/bootstrap/config.json delete mode 100644 infohub/static/infohub/bootstrap/css/bootstrap-theme.min.css delete mode 100644 infohub/static/infohub/bootstrap/css/bootstrap.min.css delete mode 100644 infohub/static/infohub/bootstrap/js/bootstrap.min.js delete mode 100644 infohub/static/infohub/css/footer.css create mode 100644 infohub/static/infohub/img/logo.gif diff --git a/infohub/static/infohub/bootstrap/css/bootstrap-theme.css b/infohub/static/infohub/bootstrap-3.3.5-dist/css/bootstrap-theme.css similarity index 71% rename from infohub/static/infohub/bootstrap/css/bootstrap-theme.css rename to infohub/static/infohub/bootstrap-3.3.5-dist/css/bootstrap-theme.css index 105efb67..c19cd5c4 100644 --- a/infohub/static/infohub/bootstrap/css/bootstrap-theme.css +++ b/infohub/static/infohub/bootstrap-3.3.5-dist/css/bootstrap-theme.css @@ -3,25 +3,15 @@ * Copyright 2011-2015 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ - -/*! - * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=6f1bbee09ea7b5ebb0bb) - * Config saved to config.json and https://gist.github.com/6f1bbee09ea7b5ebb0bb - */ -/*! - * Bootstrap v3.3.5 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ .btn-default, .btn-primary, .btn-success, .btn-info, .btn-warning, .btn-danger { - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); + text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); } .btn-default:active, .btn-primary:active, @@ -35,8 +25,8 @@ .btn-info.active, .btn-warning.active, .btn-danger.active { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); } .btn-default.disabled, .btn-primary.disabled, @@ -57,7 +47,7 @@ fieldset[disabled] .btn-info, fieldset[disabled] .btn-warning, fieldset[disabled] .btn-danger { -webkit-box-shadow: none; - box-shadow: none; + box-shadow: none; } .btn-default .badge, .btn-primary .badge, @@ -72,15 +62,15 @@ fieldset[disabled] .btn-danger { background-image: none; } .btn-default { - background-image: -webkit-linear-gradient(top, #ffffff 0%, #e0e0e0 100%); - background-image: -o-linear-gradient(top, #ffffff 0%, #e0e0e0 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#e0e0e0)); - background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%); + text-shadow: 0 1px 0 #fff; + background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0)); + background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); background-repeat: repeat-x; border-color: #dbdbdb; - text-shadow: 0 1px 0 #fff; border-color: #ccc; } .btn-default:hover, @@ -116,9 +106,9 @@ fieldset[disabled] .btn-default.active { } .btn-primary { background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88)); - background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%); + background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); background-repeat: repeat-x; @@ -157,9 +147,9 @@ fieldset[disabled] .btn-primary.active { } .btn-success { background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); - background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641)); - background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); + background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); background-repeat: repeat-x; @@ -198,9 +188,9 @@ fieldset[disabled] .btn-success.active { } .btn-info { background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); - background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2)); - background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); + background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); background-repeat: repeat-x; @@ -239,9 +229,9 @@ fieldset[disabled] .btn-info.active { } .btn-warning { background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); - background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316)); - background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); background-repeat: repeat-x; @@ -280,9 +270,9 @@ fieldset[disabled] .btn-warning.active { } .btn-danger { background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); - background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a)); - background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); + background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); background-repeat: repeat-x; @@ -321,81 +311,81 @@ fieldset[disabled] .btn-danger.active { } .thumbnail, .img-thumbnail { - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); } .dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { + background-color: #e8e8e8; background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); - background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); - background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); - background-color: #e8e8e8; + background-repeat: repeat-x; } .dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus { + background-color: #2e6da4; background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); - background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); - background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); - background-color: #2e6da4; + background-repeat: repeat-x; } .navbar-default { - background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%); - background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#f8f8f8)); - background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%); - background-repeat: repeat-x; + background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); + background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8)); + background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; border-radius: 4px; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); } .navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .active > a { background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); - background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); + background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2)); - background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%); - background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0); - -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); } .navbar-brand, .navbar-nav > li > a { - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); + text-shadow: 0 1px 0 rgba(255, 255, 255, .25); } .navbar-inverse { - background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%); - background-image: -o-linear-gradient(top, #3c3c3c 0%, #222222 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222222)); - background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%); - background-repeat: repeat-x; + background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222)); + background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; border-radius: 4px; } .navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .active > a { background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%); - background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%); + background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f)); - background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); - background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0); - -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25); - box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); } .navbar-inverse .navbar-brand, .navbar-inverse .navbar-nav > li > a { - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); } .navbar-static-top, .navbar-fixed-top, @@ -408,122 +398,122 @@ fieldset[disabled] .btn-danger.active { .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { color: #fff; background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); - background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); - background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; } } .alert { - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); + text-shadow: 0 1px 0 rgba(255, 255, 255, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); } .alert-success { background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); - background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc)); - background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); - background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); + background-repeat: repeat-x; border-color: #b2dba1; } .alert-info { background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); - background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0)); - background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); - background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); + background-repeat: repeat-x; border-color: #9acfea; } .alert-warning { background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); - background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0)); - background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); - background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); + background-repeat: repeat-x; border-color: #f5e79e; } .alert-danger { background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); - background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3)); - background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); - background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); + background-repeat: repeat-x; border-color: #dca7a7; } .progress { background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); - background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5)); - background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); - background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; } .progress-bar { background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090)); - background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%); - background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0); + background-repeat: repeat-x; } .progress-bar-success { background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); - background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44)); - background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); - background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); + background-repeat: repeat-x; } .progress-bar-info { background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); - background-image: -o-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%); - background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); + background-repeat: repeat-x; } .progress-bar-warning { background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); - background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f)); - background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); - background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); + background-repeat: repeat-x; } .progress-bar-danger { background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); - background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c)); - background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); - background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); + background-repeat: repeat-x; } .progress-bar-striped { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + 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 { border-radius: 4px; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); } .list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus { text-shadow: 0 -1px 0 #286090; background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a)); - background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%); - background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0); + background-repeat: repeat-x; border-color: #2b669a; } .list-group-item.active .badge, @@ -532,65 +522,66 @@ fieldset[disabled] .btn-danger.active { text-shadow: none; } .panel { - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: 0 1px 2px rgba(0, 0, 0, .05); } .panel-default > .panel-heading { background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); - background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); - background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; } .panel-primary > .panel-heading { background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); - background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); - background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; } .panel-success > .panel-heading { background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); - background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6)); - background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); - background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); + background-repeat: repeat-x; } .panel-info > .panel-heading { background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); - background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3)); - background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); - background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); + background-repeat: repeat-x; } .panel-warning > .panel-heading { background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); - background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc)); - background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); - background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); + background-repeat: repeat-x; } .panel-danger > .panel-heading { background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); - background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc)); - background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); - background-repeat: repeat-x; + background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); + background-repeat: repeat-x; } .well { - background-image: -webkit-linear-gradient(top, #0b7580 0%, #0d8b97 100%); - background-image: -o-linear-gradient(top, #0b7580 0%, #0d8b97 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#0b7580), to(#0d8b97)); - background-image: linear-gradient(to bottom, #0b7580 0%, #0d8b97 100%); + background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0b7580', endColorstr='#ff0d8b97', GradientType=0); - border-color: #096068; - -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); + border-color: #dcdcdc; + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); } +/*# sourceMappingURL=bootstrap-theme.css.map */ diff --git a/infohub/static/infohub/bootstrap-3.3.5-dist/css/bootstrap-theme.css.map b/infohub/static/infohub/bootstrap-3.3.5-dist/css/bootstrap-theme.css.map new file mode 100644 index 00000000..75353114 --- /dev/null +++ b/infohub/static/infohub/bootstrap-3.3.5-dist/css/bootstrap-theme.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["bootstrap-theme.css","less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"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","file":"bootstrap-theme.css","sourcesContent":["/*!\n * Bootstrap v3.3.5 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #265a88;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #265a88;\n border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #265a88;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-color: #2e6da4;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n@media (max-width: 767px) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n }\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n}\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #286090;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","/*!\n * Bootstrap v3.3.5 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} \ No newline at end of file diff --git a/infohub/static/infohub/bootstrap-3.3.5-dist/css/bootstrap-theme.min.css b/infohub/static/infohub/bootstrap-3.3.5-dist/css/bootstrap-theme.min.css new file mode 100644 index 00000000..61358b13 --- /dev/null +++ b/infohub/static/infohub/bootstrap-3.3.5-dist/css/bootstrap-theme.min.css @@ -0,0 +1,5 @@ +/*! + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{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);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{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{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} \ No newline at end of file diff --git a/infohub/static/infohub/bootstrap/css/bootstrap.css b/infohub/static/infohub/bootstrap-3.3.5-dist/css/bootstrap.css similarity index 90% rename from infohub/static/infohub/bootstrap/css/bootstrap.css rename to infohub/static/infohub/bootstrap-3.3.5-dist/css/bootstrap.css index 512717f9..680e7687 100644 --- a/infohub/static/infohub/bootstrap/css/bootstrap.css +++ b/infohub/static/infohub/bootstrap-3.3.5-dist/css/bootstrap.css @@ -3,21 +3,11 @@ * Copyright 2011-2015 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ - -/*! - * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=6f1bbee09ea7b5ebb0bb) - * Config saved to config.json and https://gist.github.com/6f1bbee09ea7b5ebb0bb - */ -/*! - * Bootstrap v3.3.5 (http://getbootstrap.com) - * Copyright 2011-2015 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; - -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; } body { margin: 0; @@ -70,28 +60,28 @@ dfn { font-style: italic; } h1 { + margin: .67em 0; font-size: 2em; - margin: 0.67em 0; } mark { - background: #ff0; color: #000; + background: #ff0; } small { font-size: 80%; } sub, sup { + position: relative; font-size: 75%; line-height: 0; - position: relative; vertical-align: baseline; } sup { - top: -0.5em; + top: -.5em; } sub { - bottom: -0.25em; + bottom: -.25em; } img { border: 0; @@ -103,10 +93,10 @@ figure { margin: 1em 40px; } hr { + height: 0; -webkit-box-sizing: content-box; -moz-box-sizing: content-box; box-sizing: content-box; - height: 0; } pre { overflow: auto; @@ -123,9 +113,9 @@ input, optgroup, select, textarea { - color: inherit; - font: inherit; margin: 0; + font: inherit; + color: inherit; } button { overflow: visible; @@ -147,8 +137,8 @@ html input[disabled] { } button::-moz-focus-inner, input::-moz-focus-inner { - border: 0; padding: 0; + border: 0; } input { line-height: normal; @@ -165,23 +155,23 @@ input[type="number"]::-webkit-outer-spin-button { height: auto; } input[type="search"] { - -webkit-appearance: textfield; -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 { - border: 1px solid #c0c0c0; + padding: .35em .625em .75em; margin: 0 2px; - padding: 0.35em 0.625em 0.75em; + border: 1px solid #c0c0c0; } legend { - border: 0; padding: 0; + border: 0; } textarea { overflow: auto; @@ -190,8 +180,8 @@ optgroup { font-weight: bold; } table { - border-collapse: collapse; border-spacing: 0; + border-collapse: collapse; } td, th { @@ -202,11 +192,11 @@ th { *, *:before, *:after { - background: transparent !important; color: #000 !important; + text-shadow: none !important; + background: transparent !important; -webkit-box-shadow: none !important; box-shadow: none !important; - text-shadow: none !important; } a, a:visited { @@ -225,6 +215,7 @@ th { pre, blockquote { border: 1px solid #999; + page-break-inside: avoid; } thead { @@ -271,6 +262,7 @@ th { } @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'); } @@ -282,6 +274,7 @@ th { font-style: normal; font-weight: normal; line-height: 1; + -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } @@ -1074,25 +1067,26 @@ th { } * { -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; } *:before, *:after { -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - 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: #333333; - background-color: #ffffff; + color: #333; + background-color: #fff; } input, button, @@ -1135,17 +1129,17 @@ img { border-radius: 6px; } .img-thumbnail { - padding: 4px; - line-height: 1.42857143; - background-color: #ffffff; - border: 1px solid #dddddd; - border-radius: 4px; - -webkit-transition: all 0.2s ease-in-out; - -o-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; 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%; @@ -1154,14 +1148,14 @@ hr { margin-top: 20px; margin-bottom: 20px; border: 0; - border-top: 1px solid #eeeeee; + border-top: 1px solid #eee; } .sr-only { position: absolute; width: 1px; height: 1px; - margin: -1px; padding: 0; + margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); border: 0; @@ -1221,7 +1215,7 @@ h6 .small, .h6 .small { font-weight: normal; line-height: 1; - color: #777777; + color: #777; } h1, .h1, @@ -1313,8 +1307,8 @@ small, } mark, .mark { - background-color: #fcf8e3; padding: .2em; + background-color: #fcf8e3; } .text-left { text-align: left; @@ -1341,7 +1335,7 @@ mark, text-transform: capitalize; } .text-muted { - color: #777777; + color: #777; } .text-primary { color: #337ab7; @@ -1417,7 +1411,7 @@ a.bg-danger:focus { .page-header { padding-bottom: 9px; margin: 40px 0 20px; - border-bottom: 1px solid #eeeeee; + border-bottom: 1px solid #eee; } ul, ol { @@ -1436,13 +1430,13 @@ ol ol { } .list-inline { padding-left: 0; - list-style: none; margin-left: -5px; + list-style: none; } .list-inline > li { display: inline-block; - padding-left: 5px; padding-right: 5px; + padding-left: 5px; } dl { margin-top: 0; @@ -1462,9 +1456,9 @@ dd { .dl-horizontal dt { float: left; width: 160px; + overflow: hidden; clear: left; text-align: right; - overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } @@ -1475,7 +1469,7 @@ dd { abbr[title], abbr[data-original-title] { cursor: help; - border-bottom: 1px dotted #777777; + border-bottom: 1px dotted #777; } .initialism { font-size: 90%; @@ -1485,7 +1479,7 @@ blockquote { padding: 10px 20px; margin: 0 0 20px; font-size: 17.5px; - border-left: 5px solid #eeeeee; + border-left: 5px solid #eee; } blockquote p:last-child, blockquote ul:last-child, @@ -1498,7 +1492,7 @@ blockquote .small { display: block; font-size: 80%; line-height: 1.42857143; - color: #777777; + color: #777; } blockquote footer:before, blockquote small:before, @@ -1509,9 +1503,9 @@ blockquote .small:before { blockquote.pull-right { padding-right: 15px; padding-left: 0; - border-right: 5px solid #eeeeee; - border-left: 0; text-align: right; + border-right: 5px solid #eee; + border-left: 0; } .blockquote-reverse footer:before, blockquote.pull-right footer:before, @@ -1550,11 +1544,11 @@ code { kbd { padding: 2px 4px; font-size: 90%; - color: #ffffff; - background-color: #333333; + color: #fff; + background-color: #333; border-radius: 3px; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); + -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; @@ -1569,11 +1563,11 @@ pre { margin: 0 0 10px; font-size: 13px; line-height: 1.42857143; + color: #333; word-break: break-all; word-wrap: break-word; - color: #333333; background-color: #f5f5f5; - border: 1px solid #cccccc; + border: 1px solid #ccc; border-radius: 4px; } pre code { @@ -1589,10 +1583,10 @@ pre code { overflow-y: scroll; } .container { + padding-right: 15px; + padding-left: 15px; margin-right: auto; margin-left: auto; - padding-left: 15px; - padding-right: 15px; } @media (min-width: 768px) { .container { @@ -1610,20 +1604,20 @@ pre code { } } .container-fluid { + padding-right: 15px; + padding-left: 15px; margin-right: auto; margin-left: auto; - padding-left: 15px; - padding-right: 15px; } .row { - margin-left: -15px; margin-right: -15px; + margin-left: -15px; } .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { position: relative; min-height: 1px; - padding-left: 15px; padding-right: 15px; + padding-left: 15px; } .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { float: left; @@ -1779,7 +1773,7 @@ pre code { margin-left: 8.33333333%; } .col-xs-offset-0 { - margin-left: 0%; + margin-left: 0; } @media (min-width: 768px) { .col-sm-1, .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-sm-10, .col-sm-11, .col-sm-12 { @@ -1936,7 +1930,7 @@ pre code { margin-left: 8.33333333%; } .col-sm-offset-0 { - margin-left: 0%; + margin-left: 0; } } @media (min-width: 992px) { @@ -2094,7 +2088,7 @@ pre code { margin-left: 8.33333333%; } .col-md-offset-0 { - margin-left: 0%; + margin-left: 0; } } @media (min-width: 1200px) { @@ -2252,7 +2246,7 @@ pre code { margin-left: 8.33333333%; } .col-lg-offset-0 { - margin-left: 0%; + margin-left: 0; } } table { @@ -2261,7 +2255,7 @@ table { caption { padding-top: 8px; padding-bottom: 8px; - color: #777777; + color: #777; text-align: left; } th { @@ -2281,11 +2275,11 @@ th { padding: 8px; line-height: 1.42857143; vertical-align: top; - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } .table > thead > tr > th { vertical-align: bottom; - border-bottom: 2px solid #dddddd; + border-bottom: 2px solid #ddd; } .table > caption + thead > tr:first-child > th, .table > colgroup + thead > tr:first-child > th, @@ -2296,10 +2290,10 @@ th { border-top: 0; } .table > tbody + tbody { - border-top: 2px solid #dddddd; + border-top: 2px solid #ddd; } .table .table { - background-color: #ffffff; + background-color: #fff; } .table-condensed > thead > tr > th, .table-condensed > tbody > tr > th, @@ -2310,7 +2304,7 @@ th { padding: 5px; } .table-bordered { - border: 1px solid #dddddd; + border: 1px solid #ddd; } .table-bordered > thead > tr > th, .table-bordered > tbody > tr > th, @@ -2318,7 +2312,7 @@ th { .table-bordered > thead > tr > td, .table-bordered > tbody > tr > td, .table-bordered > tfoot > tr > td { - border: 1px solid #dddddd; + border: 1px solid #ddd; } .table-bordered > thead > tr > th, .table-bordered > thead > tr > td { @@ -2332,14 +2326,14 @@ th { } table col[class*="col-"] { position: static; - float: none; display: table-column; + float: none; } table td[class*="col-"], table th[class*="col-"] { position: static; - float: none; display: table-cell; + float: none; } .table > thead > tr > td.active, .table > tbody > tr > td.active, @@ -2447,8 +2441,8 @@ table th[class*="col-"] { background-color: #ebcccc; } .table-responsive { + min-height: .01%; overflow-x: auto; - min-height: 0.01%; } @media screen and (max-width: 767px) { .table-responsive { @@ -2456,7 +2450,7 @@ table th[class*="col-"] { margin-bottom: 15px; overflow-y: hidden; -ms-overflow-style: -ms-autohiding-scrollbar; - border: 1px solid #dddddd; + border: 1px solid #ddd; } .table-responsive > .table { margin-bottom: 0; @@ -2496,10 +2490,10 @@ table th[class*="col-"] { } } fieldset { + min-width: 0; padding: 0; margin: 0; border: 0; - min-width: 0; } legend { display: block; @@ -2508,7 +2502,7 @@ legend { margin-bottom: 20px; font-size: 21px; line-height: inherit; - color: #333333; + color: #333; border: 0; border-bottom: 1px solid #e5e5e5; } @@ -2520,8 +2514,8 @@ label { } input[type="search"] { -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; } input[type="radio"], input[type="checkbox"] { @@ -2552,7 +2546,7 @@ output { padding-top: 7px; font-size: 14px; line-height: 1.42857143; - color: #555555; + color: #555; } .form-control { display: block; @@ -2561,37 +2555,37 @@ output { padding: 6px 12px; font-size: 14px; line-height: 1.42857143; - color: #555555; - background-color: #ffffff; + color: #555; + background-color: #fff; background-image: none; - border: 1px solid #cccccc; + border: 1px solid #ccc; border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-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; + -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, 0.6); - box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); + -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: #999999; + color: #999; opacity: 1; } .form-control:-ms-input-placeholder { - color: #999999; + color: #999; } .form-control::-webkit-input-placeholder { - color: #999999; + color: #999; } .form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { - background-color: #eeeeee; + background-color: #eee; opacity: 1; } .form-control[disabled], @@ -2655,8 +2649,8 @@ input[type="search"] { .checkbox input[type="checkbox"], .checkbox-inline input[type="checkbox"] { position: absolute; - margin-left: -20px; margin-top: 4px \9; + margin-left: -20px; } .radio + .radio, .checkbox + .checkbox { @@ -2668,8 +2662,8 @@ input[type="search"] { display: inline-block; padding-left: 20px; margin-bottom: 0; - vertical-align: middle; font-weight: normal; + vertical-align: middle; cursor: pointer; } .radio-inline + .radio-inline, @@ -2698,15 +2692,15 @@ fieldset[disabled] .checkbox label { cursor: not-allowed; } .form-control-static { + min-height: 34px; padding-top: 7px; padding-bottom: 7px; margin-bottom: 0; - min-height: 34px; } .form-control-static.input-lg, .form-control-static.input-sm { - padding-left: 0; padding-right: 0; + padding-left: 0; } .input-sm { height: 30px; @@ -2828,18 +2822,18 @@ select[multiple].input-lg { } .has-success .form-control { border-color: #3c763d; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-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, 0.075), 0 0 6px #67b168; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; + -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; - border-color: #3c763d; background-color: #dff0d8; + border-color: #3c763d; } .has-success .form-control-feedback { color: #3c763d; @@ -2858,18 +2852,18 @@ select[multiple].input-lg { } .has-warning .form-control { border-color: #8a6d3b; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-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, 0.075), 0 0 6px #c0a16b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; + -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; - border-color: #8a6d3b; background-color: #fcf8e3; + border-color: #8a6d3b; } .has-warning .form-control-feedback { color: #8a6d3b; @@ -2888,18 +2882,18 @@ select[multiple].input-lg { } .has-error .form-control { border-color: #a94442; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-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, 0.075), 0 0 6px #ce8483; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; + -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; - border-color: #a94442; background-color: #f2dede; + border-color: #a94442; } .has-error .form-control-feedback { color: #a94442; @@ -2970,23 +2964,23 @@ select[multiple].input-lg { .form-horizontal .checkbox, .form-horizontal .radio-inline, .form-horizontal .checkbox-inline { + padding-top: 7px; margin-top: 0; margin-bottom: 0; - padding-top: 7px; } .form-horizontal .radio, .form-horizontal .checkbox { min-height: 27px; } .form-horizontal .form-group { - margin-left: -15px; margin-right: -15px; + margin-left: -15px; } @media (min-width: 768px) { .form-horizontal .control-label { - text-align: right; - margin-bottom: 0; padding-top: 7px; + margin-bottom: 0; + text-align: right; } } .form-horizontal .has-feedback .form-control-feedback { @@ -3006,24 +3000,24 @@ select[multiple].input-lg { } .btn { display: inline-block; + padding: 6px 12px; margin-bottom: 0; + font-size: 14px; font-weight: normal; + 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; - white-space: nowrap; - padding: 6px 12px; - font-size: 14px; - line-height: 1.42857143; border-radius: 4px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; } .btn:focus, .btn:active:focus, @@ -3038,49 +3032,49 @@ select[multiple].input-lg { .btn:hover, .btn:focus, .btn.focus { - color: #333333; + color: #333; text-decoration: none; } .btn:active, .btn.active { - outline: 0; background-image: none; - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + 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; - opacity: 0.65; filter: alpha(opacity=65); -webkit-box-shadow: none; - box-shadow: none; + box-shadow: none; + opacity: .65; } a.btn.disabled, fieldset[disabled] a.btn { pointer-events: none; } .btn-default { - color: #333333; - background-color: #ffffff; - border-color: #cccccc; + color: #333; + background-color: #fff; + border-color: #ccc; } .btn-default:focus, .btn-default.focus { - color: #333333; + color: #333; background-color: #e6e6e6; border-color: #8c8c8c; } .btn-default:hover { - color: #333333; + color: #333; background-color: #e6e6e6; border-color: #adadad; } .btn-default:active, .btn-default.active, .open > .dropdown-toggle.btn-default { - color: #333333; + color: #333; background-color: #e6e6e6; border-color: #adadad; } @@ -3093,7 +3087,7 @@ fieldset[disabled] a.btn { .btn-default:active.focus, .btn-default.active.focus, .open > .dropdown-toggle.btn-default.focus { - color: #333333; + color: #333; background-color: #d4d4d4; border-color: #8c8c8c; } @@ -3120,33 +3114,33 @@ fieldset[disabled] .btn-default:active, .btn-default.disabled.active, .btn-default[disabled].active, fieldset[disabled] .btn-default.active { - background-color: #ffffff; - border-color: #cccccc; + background-color: #fff; + border-color: #ccc; } .btn-default .badge { - color: #ffffff; - background-color: #333333; + color: #fff; + background-color: #333; } .btn-primary { - color: #ffffff; + color: #fff; background-color: #337ab7; border-color: #2e6da4; } .btn-primary:focus, .btn-primary.focus { - color: #ffffff; + color: #fff; background-color: #286090; border-color: #122b40; } .btn-primary:hover { - color: #ffffff; + color: #fff; background-color: #286090; border-color: #204d74; } .btn-primary:active, .btn-primary.active, .open > .dropdown-toggle.btn-primary { - color: #ffffff; + color: #fff; background-color: #286090; border-color: #204d74; } @@ -3159,7 +3153,7 @@ fieldset[disabled] .btn-default.active { .btn-primary:active.focus, .btn-primary.active.focus, .open > .dropdown-toggle.btn-primary.focus { - color: #ffffff; + color: #fff; background-color: #204d74; border-color: #122b40; } @@ -3191,28 +3185,28 @@ fieldset[disabled] .btn-primary.active { } .btn-primary .badge { color: #337ab7; - background-color: #ffffff; + background-color: #fff; } .btn-success { - color: #ffffff; + color: #fff; background-color: #5cb85c; border-color: #4cae4c; } .btn-success:focus, .btn-success.focus { - color: #ffffff; + color: #fff; background-color: #449d44; border-color: #255625; } .btn-success:hover { - color: #ffffff; + color: #fff; background-color: #449d44; border-color: #398439; } .btn-success:active, .btn-success.active, .open > .dropdown-toggle.btn-success { - color: #ffffff; + color: #fff; background-color: #449d44; border-color: #398439; } @@ -3225,7 +3219,7 @@ fieldset[disabled] .btn-primary.active { .btn-success:active.focus, .btn-success.active.focus, .open > .dropdown-toggle.btn-success.focus { - color: #ffffff; + color: #fff; background-color: #398439; border-color: #255625; } @@ -3257,28 +3251,28 @@ fieldset[disabled] .btn-success.active { } .btn-success .badge { color: #5cb85c; - background-color: #ffffff; + background-color: #fff; } .btn-info { - color: #ffffff; + color: #fff; background-color: #5bc0de; border-color: #46b8da; } .btn-info:focus, .btn-info.focus { - color: #ffffff; + color: #fff; background-color: #31b0d5; border-color: #1b6d85; } .btn-info:hover { - color: #ffffff; + color: #fff; background-color: #31b0d5; border-color: #269abc; } .btn-info:active, .btn-info.active, .open > .dropdown-toggle.btn-info { - color: #ffffff; + color: #fff; background-color: #31b0d5; border-color: #269abc; } @@ -3291,7 +3285,7 @@ fieldset[disabled] .btn-success.active { .btn-info:active.focus, .btn-info.active.focus, .open > .dropdown-toggle.btn-info.focus { - color: #ffffff; + color: #fff; background-color: #269abc; border-color: #1b6d85; } @@ -3323,28 +3317,28 @@ fieldset[disabled] .btn-info.active { } .btn-info .badge { color: #5bc0de; - background-color: #ffffff; + background-color: #fff; } .btn-warning { - color: #ffffff; + color: #fff; background-color: #f0ad4e; border-color: #eea236; } .btn-warning:focus, .btn-warning.focus { - color: #ffffff; + color: #fff; background-color: #ec971f; border-color: #985f0d; } .btn-warning:hover { - color: #ffffff; + color: #fff; background-color: #ec971f; border-color: #d58512; } .btn-warning:active, .btn-warning.active, .open > .dropdown-toggle.btn-warning { - color: #ffffff; + color: #fff; background-color: #ec971f; border-color: #d58512; } @@ -3357,7 +3351,7 @@ fieldset[disabled] .btn-info.active { .btn-warning:active.focus, .btn-warning.active.focus, .open > .dropdown-toggle.btn-warning.focus { - color: #ffffff; + color: #fff; background-color: #d58512; border-color: #985f0d; } @@ -3389,28 +3383,28 @@ fieldset[disabled] .btn-warning.active { } .btn-warning .badge { color: #f0ad4e; - background-color: #ffffff; + background-color: #fff; } .btn-danger { - color: #ffffff; + color: #fff; background-color: #d9534f; border-color: #d43f3a; } .btn-danger:focus, .btn-danger.focus { - color: #ffffff; + color: #fff; background-color: #c9302c; border-color: #761c19; } .btn-danger:hover { - color: #ffffff; + color: #fff; background-color: #c9302c; border-color: #ac2925; } .btn-danger:active, .btn-danger.active, .open > .dropdown-toggle.btn-danger { - color: #ffffff; + color: #fff; background-color: #c9302c; border-color: #ac2925; } @@ -3423,7 +3417,7 @@ fieldset[disabled] .btn-warning.active { .btn-danger:active.focus, .btn-danger.active.focus, .open > .dropdown-toggle.btn-danger.focus { - color: #ffffff; + color: #fff; background-color: #ac2925; border-color: #761c19; } @@ -3455,11 +3449,11 @@ fieldset[disabled] .btn-danger.active { } .btn-danger .badge { color: #d9534f; - background-color: #ffffff; + background-color: #fff; } .btn-link { - color: #337ab7; font-weight: normal; + color: #337ab7; border-radius: 0; } .btn-link, @@ -3469,7 +3463,7 @@ fieldset[disabled] .btn-danger.active { fieldset[disabled] .btn-link { background-color: transparent; -webkit-box-shadow: none; - box-shadow: none; + box-shadow: none; } .btn-link, .btn-link:hover, @@ -3487,7 +3481,7 @@ fieldset[disabled] .btn-link { fieldset[disabled] .btn-link:hover, .btn-link[disabled]:focus, fieldset[disabled] .btn-link:focus { - color: #777777; + color: #777; text-decoration: none; } .btn-lg, @@ -3525,9 +3519,9 @@ input[type="button"].btn-block { } .fade { opacity: 0; - -webkit-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; + -webkit-transition: opacity .15s linear; + -o-transition: opacity .15s linear; + transition: opacity .15s linear; } .fade.in { opacity: 1; @@ -3548,15 +3542,15 @@ tbody.collapse.in { position: relative; height: 0; overflow: hidden; - -webkit-transition-property: height, visibility; - -o-transition-property: height, visibility; - transition-property: height, visibility; - -webkit-transition-duration: 0.35s; - -o-transition-duration: 0.35s; - transition-duration: 0.35s; -webkit-transition-timing-function: ease; - -o-transition-timing-function: ease; - 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; @@ -3586,17 +3580,17 @@ tbody.collapse.in { min-width: 160px; padding: 5px 0; margin: 2px 0 0; - list-style: none; font-size: 14px; text-align: left; - background-color: #ffffff; - border: 1px solid #cccccc; - border: 1px solid rgba(0, 0, 0, 0.15); - border-radius: 4px; - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + 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; @@ -3614,35 +3608,35 @@ tbody.collapse.in { clear: both; font-weight: normal; line-height: 1.42857143; - color: #333333; + color: #333; white-space: nowrap; } .dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { - text-decoration: none; color: #262626; + text-decoration: none; background-color: #f5f5f5; } .dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus { - color: #ffffff; + color: #fff; text-decoration: none; - outline: 0; background-color: #337ab7; + outline: 0; } .dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { - color: #777777; + color: #777; } .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { text-decoration: none; + cursor: not-allowed; background-color: transparent; background-image: none; filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - cursor: not-allowed; } .open > .dropdown-menu { display: block; @@ -3651,27 +3645,27 @@ tbody.collapse.in { outline: 0; } .dropdown-menu-right { - left: auto; right: 0; + left: auto; } .dropdown-menu-left { - left: 0; right: auto; + left: 0; } .dropdown-header { display: block; padding: 3px 20px; font-size: 12px; line-height: 1.42857143; - color: #777777; + color: #777; white-space: nowrap; } .dropdown-backdrop { position: fixed; - left: 0; + top: 0; right: 0; bottom: 0; - top: 0; + left: 0; z-index: 990; } .pull-right > .dropdown-menu { @@ -3680,10 +3674,10 @@ tbody.collapse.in { } .dropup .caret, .navbar-fixed-bottom .dropdown .caret { + content: ""; border-top: 0; border-bottom: 4px dashed; border-bottom: 4px solid \9; - content: ""; } .dropup .dropdown-menu, .navbar-fixed-bottom .dropdown .dropdown-menu { @@ -3693,12 +3687,12 @@ tbody.collapse.in { } @media (min-width: 768px) { .navbar-right .dropdown-menu { - left: auto; right: 0; + left: auto; } .navbar-right .dropdown-menu-left { - left: 0; right: auto; + left: 0; } } .btn-group, @@ -3748,13 +3742,13 @@ tbody.collapse.in { margin-left: 0; } .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { - border-bottom-right-radius: 0; 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-bottom-left-radius: 0; border-top-left-radius: 0; + border-bottom-left-radius: 0; } .btn-group > .btn-group { float: left; @@ -3764,32 +3758,32 @@ tbody.collapse.in { } .btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, .btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-bottom-right-radius: 0; border-top-right-radius: 0; + border-bottom-right-radius: 0; } .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-bottom-left-radius: 0; 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-left: 8px; padding-right: 8px; + padding-left: 8px; } .btn-group > .btn-lg + .dropdown-toggle { - padding-left: 12px; padding-right: 12px; + padding-left: 12px; } .btn-group.open .dropdown-toggle { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + -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; + box-shadow: none; } .btn .caret { margin-left: 0; @@ -3828,9 +3822,9 @@ tbody.collapse.in { border-bottom-left-radius: 0; } .btn-group-vertical > .btn:last-child:not(:first-child) { - border-bottom-left-radius: 4px; - border-top-right-radius: 0; border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-left-radius: 4px; } .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { border-radius: 0; @@ -3841,8 +3835,8 @@ tbody.collapse.in { border-bottom-left-radius: 0; } .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-top-right-radius: 0; border-top-left-radius: 0; + border-top-right-radius: 0; } .btn-group-justified { display: table; @@ -3852,8 +3846,8 @@ tbody.collapse.in { } .btn-group-justified > .btn, .btn-group-justified > .btn-group { - float: none; display: table-cell; + float: none; width: 1%; } .btn-group-justified > .btn-group .btn { @@ -3877,8 +3871,8 @@ tbody.collapse.in { } .input-group[class*="col-"] { float: none; - padding-left: 0; padding-right: 0; + padding-left: 0; } .input-group .form-control { position: relative; @@ -3954,10 +3948,10 @@ select[multiple].input-group-sm > .input-group-btn > .btn { font-size: 14px; font-weight: normal; line-height: 1; - color: #555555; + color: #555; text-align: center; - background-color: #eeeeee; - border: 1px solid #cccccc; + background-color: #eee; + border: 1px solid #ccc; border-radius: 4px; } .input-group-addon.input-sm { @@ -3981,8 +3975,8 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .input-group-btn:first-child > .dropdown-toggle, .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), .input-group-btn:last-child > .btn-group:not(:last-child) > .btn { - border-bottom-right-radius: 0; border-top-right-radius: 0; + border-bottom-right-radius: 0; } .input-group-addon:first-child { border-right: 0; @@ -3994,8 +3988,8 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .input-group-btn:last-child > .dropdown-toggle, .input-group-btn:first-child > .btn:not(:first-child), .input-group-btn:first-child > .btn-group:not(:first-child) > .btn { - border-bottom-left-radius: 0; border-top-left-radius: 0; + border-bottom-left-radius: 0; } .input-group-addon:last-child { border-left: 0; @@ -4026,8 +4020,8 @@ select[multiple].input-group-sm > .input-group-btn > .btn { margin-left: -1px; } .nav { - margin-bottom: 0; padding-left: 0; + margin-bottom: 0; list-style: none; } .nav > li { @@ -4042,22 +4036,22 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .nav > li > a:hover, .nav > li > a:focus { text-decoration: none; - background-color: #eeeeee; + background-color: #eee; } .nav > li.disabled > a { - color: #777777; + color: #777; } .nav > li.disabled > a:hover, .nav > li.disabled > a:focus { - color: #777777; + color: #777; text-decoration: none; - background-color: transparent; cursor: not-allowed; + background-color: transparent; } .nav .open > a, .nav .open > a:hover, .nav .open > a:focus { - background-color: #eeeeee; + background-color: #eee; border-color: #337ab7; } .nav .nav-divider { @@ -4070,7 +4064,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { max-width: none; } .nav-tabs { - border-bottom: 1px solid #dddddd; + border-bottom: 1px solid #ddd; } .nav-tabs > li { float: left; @@ -4083,16 +4077,16 @@ select[multiple].input-group-sm > .input-group-btn > .btn { border-radius: 4px 4px 0 0; } .nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #dddddd; + border-color: #eee #eee #ddd; } .nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus { - color: #555555; - background-color: #ffffff; - border: 1px solid #dddddd; - border-bottom-color: transparent; + color: #555; cursor: default; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent; } .nav-tabs.nav-justified { width: 100%; @@ -4102,8 +4096,8 @@ select[multiple].input-group-sm > .input-group-btn > .btn { float: none; } .nav-tabs.nav-justified > li > a { - text-align: center; margin-bottom: 5px; + text-align: center; } .nav-tabs.nav-justified > .dropdown .dropdown-menu { top: auto; @@ -4125,17 +4119,17 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .nav-tabs.nav-justified > .active > a, .nav-tabs.nav-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:focus { - border: 1px solid #dddddd; + border: 1px solid #ddd; } @media (min-width: 768px) { .nav-tabs.nav-justified > li > a { - border-bottom: 1px solid #dddddd; + border-bottom: 1px solid #ddd; border-radius: 4px 4px 0 0; } .nav-tabs.nav-justified > .active > a, .nav-tabs.nav-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:focus { - border-bottom-color: #ffffff; + border-bottom-color: #fff; } } .nav-pills > li { @@ -4150,7 +4144,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus { - color: #ffffff; + color: #fff; background-color: #337ab7; } .nav-stacked > li { @@ -4167,8 +4161,8 @@ select[multiple].input-group-sm > .input-group-btn > .btn { float: none; } .nav-justified > li > a { - text-align: center; margin-bottom: 5px; + text-align: center; } .nav-justified > .dropdown .dropdown-menu { top: auto; @@ -4193,17 +4187,17 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .nav-tabs-justified > .active > a, .nav-tabs-justified > .active > a:hover, .nav-tabs-justified > .active > a:focus { - border: 1px solid #dddddd; + border: 1px solid #ddd; } @media (min-width: 768px) { .nav-tabs-justified > li > a { - border-bottom: 1px solid #dddddd; + border-bottom: 1px solid #ddd; border-radius: 4px 4px 0 0; } .nav-tabs-justified > .active > a, .nav-tabs-justified > .active > a:hover, .nav-tabs-justified > .active > a:focus { - border-bottom-color: #ffffff; + border-bottom-color: #fff; } } .tab-content > .tab-pane { @@ -4214,8 +4208,8 @@ select[multiple].input-group-sm > .input-group-btn > .btn { } .nav-tabs .dropdown-menu { margin-top: -1px; - border-top-right-radius: 0; border-top-left-radius: 0; + border-top-right-radius: 0; } .navbar { position: relative; @@ -4234,13 +4228,13 @@ select[multiple].input-group-sm > .input-group-btn > .btn { } } .navbar-collapse { - overflow-x: visible; padding-right: 15px; padding-left: 15px; - border-top: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + 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; @@ -4264,8 +4258,8 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .navbar-fixed-top .navbar-collapse, .navbar-static-top .navbar-collapse, .navbar-fixed-bottom .navbar-collapse { - padding-left: 0; padding-right: 0; + padding-left: 0; } } .navbar-fixed-top .navbar-collapse, @@ -4327,10 +4321,10 @@ select[multiple].input-group-sm > .input-group-btn > .btn { } .navbar-brand { float: left; + height: 50px; padding: 15px 15px; font-size: 18px; line-height: 20px; - height: 50px; } .navbar-brand:hover, .navbar-brand:focus { @@ -4348,9 +4342,9 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .navbar-toggle { position: relative; float: right; - margin-right: 15px; padding: 9px 10px; margin-top: 8px; + margin-right: 15px; margin-bottom: 8px; background-color: transparent; background-image: none; @@ -4419,15 +4413,15 @@ select[multiple].input-group-sm > .input-group-btn > .btn { } } .navbar-form { - margin-left: -15px; - margin-right: -15px; padding: 10px 15px; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); 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 { @@ -4490,24 +4484,24 @@ select[multiple].input-group-sm > .input-group-btn > .btn { @media (min-width: 768px) { .navbar-form { width: auto; - border: 0; - margin-left: 0; - margin-right: 0; padding-top: 0; padding-bottom: 0; + margin-right: 0; + margin-left: 0; + border: 0; -webkit-box-shadow: none; - box-shadow: none; + box-shadow: none; } } .navbar-nav > li > .dropdown-menu { margin-top: 0; - border-top-right-radius: 0; border-top-left-radius: 0; + border-top-right-radius: 0; } .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { margin-bottom: 0; - border-top-right-radius: 4px; border-top-left-radius: 4px; + border-top-right-radius: 4px; border-bottom-right-radius: 0; border-bottom-left-radius: 0; } @@ -4530,8 +4524,8 @@ select[multiple].input-group-sm > .input-group-btn > .btn { @media (min-width: 768px) { .navbar-text { float: left; - margin-left: 15px; margin-right: 15px; + margin-left: 15px; } } @media (min-width: 768px) { @@ -4551,7 +4545,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { border-color: #e7e7e7; } .navbar-default .navbar-brand { - color: #777777; + color: #777; } .navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus { @@ -4559,37 +4553,37 @@ select[multiple].input-group-sm > .input-group-btn > .btn { background-color: transparent; } .navbar-default .navbar-text { - color: #777777; + color: #777; } .navbar-default .navbar-nav > li > a { - color: #777777; + color: #777; } .navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus { - color: #333333; + color: #333; background-color: transparent; } .navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus { - color: #555555; + color: #555; background-color: #e7e7e7; } .navbar-default .navbar-nav > .disabled > a, .navbar-default .navbar-nav > .disabled > a:hover, .navbar-default .navbar-nav > .disabled > a:focus { - color: #cccccc; + color: #ccc; background-color: transparent; } .navbar-default .navbar-toggle { - border-color: #dddddd; + border-color: #ddd; } .navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus { - background-color: #dddddd; + background-color: #ddd; } .navbar-default .navbar-toggle .icon-bar { - background-color: #888888; + background-color: #888; } .navbar-default .navbar-collapse, .navbar-default .navbar-form { @@ -4598,52 +4592,52 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus { + color: #555; background-color: #e7e7e7; - color: #555555; } @media (max-width: 767px) { .navbar-default .navbar-nav .open .dropdown-menu > li > a { - color: #777777; + color: #777; } .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { - color: #333333; + color: #333; background-color: transparent; } .navbar-default .navbar-nav .open .dropdown-menu > .active > a, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #555555; + color: #555; background-color: #e7e7e7; } .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #cccccc; + color: #ccc; background-color: transparent; } } .navbar-default .navbar-link { - color: #777777; + color: #777; } .navbar-default .navbar-link:hover { - color: #333333; + color: #333; } .navbar-default .btn-link { - color: #777777; + color: #777; } .navbar-default .btn-link:hover, .navbar-default .btn-link:focus { - color: #333333; + color: #333; } .navbar-default .btn-link[disabled]:hover, fieldset[disabled] .navbar-default .btn-link:hover, .navbar-default .btn-link[disabled]:focus, fieldset[disabled] .navbar-default .btn-link:focus { - color: #cccccc; + color: #ccc; } .navbar-inverse { - background-color: #222222; + background-color: #222; border-color: #080808; } .navbar-inverse .navbar-brand { @@ -4651,7 +4645,7 @@ fieldset[disabled] .navbar-default .btn-link:focus { } .navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus { - color: #ffffff; + color: #fff; background-color: transparent; } .navbar-inverse .navbar-text { @@ -4662,30 +4656,30 @@ fieldset[disabled] .navbar-default .btn-link:focus { } .navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus { - color: #ffffff; + color: #fff; background-color: transparent; } .navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus { - color: #ffffff; + color: #fff; background-color: #080808; } .navbar-inverse .navbar-nav > .disabled > a, .navbar-inverse .navbar-nav > .disabled > a:hover, .navbar-inverse .navbar-nav > .disabled > a:focus { - color: #444444; + color: #444; background-color: transparent; } .navbar-inverse .navbar-toggle { - border-color: #333333; + border-color: #333; } .navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus { - background-color: #333333; + background-color: #333; } .navbar-inverse .navbar-toggle .icon-bar { - background-color: #ffffff; + background-color: #fff; } .navbar-inverse .navbar-collapse, .navbar-inverse .navbar-form { @@ -4694,8 +4688,8 @@ fieldset[disabled] .navbar-default .btn-link:focus { .navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus { + color: #fff; background-color: #080808; - color: #ffffff; } @media (max-width: 767px) { .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { @@ -4709,19 +4703,19 @@ fieldset[disabled] .navbar-default .btn-link:focus { } .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { - color: #ffffff; + color: #fff; background-color: transparent; } .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #ffffff; + color: #fff; background-color: #080808; } .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #444444; + color: #444; background-color: transparent; } } @@ -4729,20 +4723,20 @@ fieldset[disabled] .navbar-default .btn-link:focus { color: #9d9d9d; } .navbar-inverse .navbar-link:hover { - color: #ffffff; + color: #fff; } .navbar-inverse .btn-link { color: #9d9d9d; } .navbar-inverse .btn-link:hover, .navbar-inverse .btn-link:focus { - color: #ffffff; + color: #fff; } .navbar-inverse .btn-link[disabled]:hover, fieldset[disabled] .navbar-inverse .btn-link:hover, .navbar-inverse .btn-link[disabled]:focus, fieldset[disabled] .navbar-inverse .btn-link:focus { - color: #444444; + color: #444; } .breadcrumb { padding: 8px 15px; @@ -4755,12 +4749,12 @@ fieldset[disabled] .navbar-inverse .btn-link:focus { display: inline-block; } .breadcrumb > li + li:before { - content: "/\00a0"; padding: 0 5px; - color: #cccccc; + color: #ccc; + content: "/\00a0"; } .breadcrumb > .active { - color: #777777; + color: #777; } .pagination { display: inline-block; @@ -4776,23 +4770,23 @@ fieldset[disabled] .navbar-inverse .btn-link:focus { position: relative; float: left; padding: 6px 12px; + margin-left: -1px; line-height: 1.42857143; - text-decoration: none; color: #337ab7; - background-color: #ffffff; - border: 1px solid #dddddd; - margin-left: -1px; + text-decoration: none; + background-color: #fff; + border: 1px solid #ddd; } .pagination > li:first-child > a, .pagination > li:first-child > span { margin-left: 0; - border-bottom-left-radius: 4px; border-top-left-radius: 4px; + border-bottom-left-radius: 4px; } .pagination > li:last-child > a, .pagination > li:last-child > span { - border-bottom-right-radius: 4px; border-top-right-radius: 4px; + border-bottom-right-radius: 4px; } .pagination > li > a:hover, .pagination > li > span:hover, @@ -4800,8 +4794,8 @@ fieldset[disabled] .navbar-inverse .btn-link:focus { .pagination > li > span:focus { z-index: 3; color: #23527c; - background-color: #eeeeee; - border-color: #dddddd; + background-color: #eee; + border-color: #ddd; } .pagination > .active > a, .pagination > .active > span, @@ -4810,10 +4804,10 @@ fieldset[disabled] .navbar-inverse .btn-link:focus { .pagination > .active > a:focus, .pagination > .active > span:focus { z-index: 2; - color: #ffffff; + color: #fff; + cursor: default; background-color: #337ab7; border-color: #337ab7; - cursor: default; } .pagination > .disabled > span, .pagination > .disabled > span:hover, @@ -4821,10 +4815,10 @@ fieldset[disabled] .navbar-inverse .btn-link:focus { .pagination > .disabled > a, .pagination > .disabled > a:hover, .pagination > .disabled > a:focus { - color: #777777; - background-color: #ffffff; - border-color: #dddddd; + color: #777; cursor: not-allowed; + background-color: #fff; + border-color: #ddd; } .pagination-lg > li > a, .pagination-lg > li > span { @@ -4834,13 +4828,13 @@ fieldset[disabled] .navbar-inverse .btn-link:focus { } .pagination-lg > li:first-child > a, .pagination-lg > li:first-child > span { - border-bottom-left-radius: 6px; border-top-left-radius: 6px; + border-bottom-left-radius: 6px; } .pagination-lg > li:last-child > a, .pagination-lg > li:last-child > span { - border-bottom-right-radius: 6px; border-top-right-radius: 6px; + border-bottom-right-radius: 6px; } .pagination-sm > li > a, .pagination-sm > li > span { @@ -4850,19 +4844,19 @@ fieldset[disabled] .navbar-inverse .btn-link:focus { } .pagination-sm > li:first-child > a, .pagination-sm > li:first-child > span { - border-bottom-left-radius: 3px; border-top-left-radius: 3px; + border-bottom-left-radius: 3px; } .pagination-sm > li:last-child > a, .pagination-sm > li:last-child > span { - border-bottom-right-radius: 3px; border-top-right-radius: 3px; + border-bottom-right-radius: 3px; } .pager { padding-left: 0; margin: 20px 0; - list-style: none; text-align: center; + list-style: none; } .pager li { display: inline; @@ -4871,14 +4865,14 @@ fieldset[disabled] .navbar-inverse .btn-link:focus { .pager li > span { display: inline-block; padding: 5px 14px; - background-color: #ffffff; - border: 1px solid #dddddd; + background-color: #fff; + border: 1px solid #ddd; border-radius: 15px; } .pager li > a:hover, .pager li > a:focus { text-decoration: none; - background-color: #eeeeee; + background-color: #eee; } .pager .next > a, .pager .next > span { @@ -4892,9 +4886,9 @@ fieldset[disabled] .navbar-inverse .btn-link:focus { .pager .disabled > a:hover, .pager .disabled > a:focus, .pager .disabled > span { - color: #777777; - background-color: #ffffff; + color: #777; cursor: not-allowed; + background-color: #fff; } .label { display: inline; @@ -4902,7 +4896,7 @@ fieldset[disabled] .navbar-inverse .btn-link:focus { font-size: 75%; font-weight: bold; line-height: 1; - color: #ffffff; + color: #fff; text-align: center; white-space: nowrap; vertical-align: baseline; @@ -4910,7 +4904,7 @@ fieldset[disabled] .navbar-inverse .btn-link:focus { } a.label:hover, a.label:focus { - color: #ffffff; + color: #fff; text-decoration: none; cursor: pointer; } @@ -4922,7 +4916,7 @@ a.label:focus { top: -1px; } .label-default { - background-color: #777777; + background-color: #777; } .label-default[href]:hover, .label-default[href]:focus { @@ -4969,12 +4963,12 @@ a.label:focus { padding: 3px 7px; font-size: 12px; font-weight: bold; - color: #ffffff; line-height: 1; - vertical-align: middle; - white-space: nowrap; + color: #fff; text-align: center; - background-color: #777777; + white-space: nowrap; + vertical-align: middle; + background-color: #777; border-radius: 10px; } .badge:empty { @@ -4991,14 +4985,14 @@ a.label:focus { } a.badge:hover, a.badge:focus { - color: #ffffff; + color: #fff; text-decoration: none; cursor: pointer; } .list-group-item.active > .badge, .nav-pills > .active > a > .badge { color: #337ab7; - background-color: #ffffff; + background-color: #fff; } .list-group-item > .badge { float: right; @@ -5014,7 +5008,7 @@ a.badge:focus { padding-bottom: 30px; margin-bottom: 30px; color: inherit; - background-color: #eeeeee; + background-color: #eee; } .jumbotron h1, .jumbotron .h1 { @@ -5042,8 +5036,8 @@ a.badge:focus { } .container .jumbotron, .container-fluid .jumbotron { - padding-left: 60px; padding-right: 60px; + padding-left: 60px; } .jumbotron h1, .jumbotron .h1 { @@ -5055,17 +5049,17 @@ a.badge:focus { padding: 4px; margin-bottom: 20px; line-height: 1.42857143; - background-color: #ffffff; - border: 1px solid #dddddd; + background-color: #fff; + border: 1px solid #ddd; border-radius: 4px; - -webkit-transition: border 0.2s ease-in-out; - -o-transition: border 0.2s ease-in-out; - transition: border 0.2s ease-in-out; + -webkit-transition: border .2s ease-in-out; + -o-transition: border .2s ease-in-out; + transition: border .2s ease-in-out; } .thumbnail > img, .thumbnail a > img { - margin-left: auto; margin-right: auto; + margin-left: auto; } a.thumbnail:hover, a.thumbnail:focus, @@ -5074,7 +5068,7 @@ a.thumbnail.active { } .thumbnail .caption { padding: 9px; - color: #333333; + color: #333; } .alert { padding: 15px; @@ -5108,9 +5102,9 @@ a.thumbnail.active { color: inherit; } .alert-success { + color: #3c763d; background-color: #dff0d8; border-color: #d6e9c6; - color: #3c763d; } .alert-success hr { border-top-color: #c9e2b3; @@ -5119,9 +5113,9 @@ a.thumbnail.active { color: #2b542c; } .alert-info { + color: #31708f; background-color: #d9edf7; border-color: #bce8f1; - color: #31708f; } .alert-info hr { border-top-color: #a6e1ec; @@ -5130,9 +5124,9 @@ a.thumbnail.active { color: #245269; } .alert-warning { + color: #8a6d3b; background-color: #fcf8e3; border-color: #faebcc; - color: #8a6d3b; } .alert-warning hr { border-top-color: #f7e1b5; @@ -5141,9 +5135,9 @@ a.thumbnail.active { color: #66512c; } .alert-danger { + color: #a94442; background-color: #f2dede; border-color: #ebccd1; - color: #a94442; } .alert-danger hr { border-top-color: #e4b9c0; @@ -5176,74 +5170,74 @@ a.thumbnail.active { } } .progress { - overflow: hidden; height: 20px; margin-bottom: 20px; + overflow: hidden; background-color: #f5f5f5; border-radius: 4px; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + -webkit-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%; + width: 0; height: 100%; font-size: 12px; line-height: 20px; - color: #ffffff; + color: #fff; text-align: center; background-color: #337ab7; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -webkit-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; + -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-striped .progress-bar, .progress-bar-striped { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + 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.active .progress-bar, .progress-bar.active { -webkit-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - 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, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + 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, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + 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, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + 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, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + 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; @@ -5253,8 +5247,8 @@ a.thumbnail.active { } .media, .media-body { - zoom: 1; overflow: hidden; + zoom: 1; } .media-body { width: 10000px; @@ -5294,20 +5288,20 @@ a.thumbnail.active { list-style: none; } .list-group { - margin-bottom: 20px; padding-left: 0; + margin-bottom: 20px; } .list-group-item { position: relative; display: block; padding: 10px 15px; margin-bottom: -1px; - background-color: #ffffff; - border: 1px solid #dddddd; + background-color: #fff; + border: 1px solid #ddd; } .list-group-item:first-child { - border-top-right-radius: 4px; border-top-left-radius: 4px; + border-top-right-radius: 4px; } .list-group-item:last-child { margin-bottom: 0; @@ -5316,18 +5310,18 @@ a.thumbnail.active { } a.list-group-item, button.list-group-item { - color: #555555; + color: #555; } a.list-group-item .list-group-item-heading, button.list-group-item .list-group-item-heading { - color: #333333; + color: #333; } a.list-group-item:hover, button.list-group-item:hover, a.list-group-item:focus, button.list-group-item:focus { + color: #555; text-decoration: none; - color: #555555; background-color: #f5f5f5; } button.list-group-item { @@ -5337,9 +5331,9 @@ button.list-group-item { .list-group-item.disabled, .list-group-item.disabled:hover, .list-group-item.disabled:focus { - background-color: #eeeeee; - color: #777777; + color: #777; cursor: not-allowed; + background-color: #eee; } .list-group-item.disabled .list-group-item-heading, .list-group-item.disabled:hover .list-group-item-heading, @@ -5349,13 +5343,13 @@ button.list-group-item { .list-group-item.disabled .list-group-item-text, .list-group-item.disabled:hover .list-group-item-text, .list-group-item.disabled:focus .list-group-item-text { - color: #777777; + color: #777; } .list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus { z-index: 2; - color: #ffffff; + color: #fff; background-color: #337ab7; border-color: #337ab7; } @@ -5501,11 +5495,11 @@ button.list-group-item-danger.active:focus { } .panel { margin-bottom: 20px; - background-color: #ffffff; + background-color: #fff; border: 1px solid transparent; border-radius: 4px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); + -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; @@ -5513,8 +5507,8 @@ button.list-group-item-danger.active:focus { .panel-heading { padding: 10px 15px; border-bottom: 1px solid transparent; - border-top-right-radius: 3px; border-top-left-radius: 3px; + border-top-right-radius: 3px; } .panel-heading > .dropdown .dropdown-toggle { color: inherit; @@ -5535,7 +5529,7 @@ button.list-group-item-danger.active:focus { .panel-footer { padding: 10px 15px; background-color: #f5f5f5; - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; } @@ -5551,8 +5545,8 @@ button.list-group-item-danger.active:focus { .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-right-radius: 3px; 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 { @@ -5561,8 +5555,8 @@ button.list-group-item-danger.active:focus { border-bottom-left-radius: 3px; } .panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { - border-top-right-radius: 0; border-top-left-radius: 0; + border-top-right-radius: 0; } .panel-heading + .list-group .list-group-item:first-child { border-top-width: 0; @@ -5578,13 +5572,13 @@ button.list-group-item-danger.active:focus { .panel > .table caption, .panel > .table-responsive > .table caption, .panel > .panel-collapse > .table caption { - padding-left: 15px; padding-right: 15px; + padding-left: 15px; } .panel > .table:first-child, .panel > .table-responsive:first-child > .table:first-child { - border-top-right-radius: 3px; border-top-left-radius: 3px; + border-top-right-radius: 3px; } .panel > .table:first-child > thead:first-child > tr:first-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, @@ -5622,8 +5616,8 @@ button.list-group-item-danger.active:focus { .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, .panel > .table:last-child > tfoot:last-child > tr:last-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { - border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; } .panel > .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 td:first-child, @@ -5649,7 +5643,7 @@ button.list-group-item-danger.active:focus { .panel > .panel-body + .table-responsive, .panel > .table + .panel-body, .panel > .table-responsive + .panel-body { - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } .panel > .table > tbody:first-child > tr:first-child th, .panel > .table > tbody:first-child > tr:first-child td { @@ -5708,8 +5702,8 @@ button.list-group-item-danger.active:focus { border-bottom: 0; } .panel > .table-responsive { - border: 0; margin-bottom: 0; + border: 0; } .panel-group { margin-bottom: 20px; @@ -5726,37 +5720,37 @@ button.list-group-item-danger.active:focus { } .panel-group .panel-heading + .panel-collapse > .panel-body, .panel-group .panel-heading + .panel-collapse > .list-group { - border-top: 1px solid #dddddd; + border-top: 1px solid #ddd; } .panel-group .panel-footer { border-top: 0; } .panel-group .panel-footer + .panel-collapse .panel-body { - border-bottom: 1px solid #dddddd; + border-bottom: 1px solid #ddd; } .panel-default { - border-color: #dddddd; + border-color: #ddd; } .panel-default > .panel-heading { - color: #333333; + color: #333; background-color: #f5f5f5; - border-color: #dddddd; + border-color: #ddd; } .panel-default > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #dddddd; + border-top-color: #ddd; } .panel-default > .panel-heading .badge { color: #f5f5f5; - background-color: #333333; + background-color: #333; } .panel-default > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #dddddd; + border-bottom-color: #ddd; } .panel-primary { border-color: #337ab7; } .panel-primary > .panel-heading { - color: #ffffff; + color: #fff; background-color: #337ab7; border-color: #337ab7; } @@ -5765,7 +5759,7 @@ button.list-group-item-danger.active:focus { } .panel-primary > .panel-heading .badge { color: #337ab7; - background-color: #ffffff; + background-color: #fff; } .panel-primary > .panel-footer + .panel-collapse > .panel-body { border-bottom-color: #337ab7; @@ -5856,10 +5850,10 @@ button.list-group-item-danger.active:focus { .embed-responsive video { position: absolute; top: 0; - left: 0; bottom: 0; - height: 100%; + left: 0; width: 100%; + height: 100%; border: 0; } .embed-responsive-16by9 { @@ -5872,15 +5866,15 @@ button.list-group-item-danger.active:focus { min-height: 20px; padding: 19px; margin-bottom: 20px; - background-color: #0d8b97; - border: 1px solid #0a6d76; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + -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, 0.15); + border-color: rgba(0, 0, 0, .15); } .well-lg { padding: 24px; @@ -5895,55 +5889,55 @@ button.list-group-item-danger.active:focus { font-size: 21px; font-weight: bold; line-height: 1; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.2; + color: #000; + text-shadow: 0 1px 0 #fff; filter: alpha(opacity=20); + opacity: .2; } .close:hover, .close:focus { - color: #000000; + color: #000; text-decoration: none; cursor: pointer; - opacity: 0.5; filter: alpha(opacity=50); + opacity: .5; } button.close { + -webkit-appearance: none; padding: 0; cursor: pointer; background: transparent; border: 0; - -webkit-appearance: none; } .modal-open { overflow: hidden; } .modal { - display: none; - overflow: hidden; 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%); - -webkit-transition: -webkit-transform 0.3s ease-out; - -o-transition: -o-transform 0.3s ease-out; - transition: transform 0.3s ease-out; + -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); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); } .modal-open .modal { overflow-x: hidden; @@ -5956,15 +5950,15 @@ button.close { } .modal-content { position: relative; - background-color: #ffffff; - border: 1px solid #999999; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 6px; - -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + 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; @@ -5973,20 +5967,20 @@ button.close { bottom: 0; left: 0; z-index: 1040; - background-color: #000000; + background-color: #000; } .modal-backdrop.fade { - opacity: 0; filter: alpha(opacity=0); + opacity: 0; } .modal-backdrop.in { - opacity: 0.5; filter: alpha(opacity=50); + opacity: .5; } .modal-header { + min-height: 16.42857143px; padding: 15px; border-bottom: 1px solid #e5e5e5; - min-height: 16.42857143px; } .modal-header .close { margin-top: -2px; @@ -6005,8 +5999,8 @@ button.close { border-top: 1px solid #e5e5e5; } .modal-footer .btn + .btn { - margin-left: 5px; margin-bottom: 0; + margin-left: 5px; } .modal-footer .btn-group .btn + .btn { margin-left: -1px; @@ -6027,8 +6021,8 @@ button.close { margin: 30px auto; } .modal-content { - -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + -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; @@ -6044,50 +6038,51 @@ button.close { z-index: 1070; display: block; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 12px; font-style: normal; font-weight: normal; - letter-spacing: normal; - line-break: auto; line-height: 1.42857143; text-align: left; text-align: start; text-decoration: none; text-shadow: none; text-transform: none; - white-space: normal; + letter-spacing: normal; word-break: normal; word-spacing: normal; word-wrap: normal; - font-size: 12px; - opacity: 0; + white-space: normal; filter: alpha(opacity=0); + opacity: 0; + + line-break: auto; } .tooltip.in { - opacity: 0.9; filter: alpha(opacity=90); + opacity: .9; } .tooltip.top { - margin-top: -3px; padding: 5px 0; + margin-top: -3px; } .tooltip.right { - margin-left: 3px; padding: 0 5px; + margin-left: 3px; } .tooltip.bottom { - margin-top: 3px; padding: 5px 0; + margin-top: 3px; } .tooltip.left { - margin-left: -3px; padding: 0 5px; + margin-left: -3px; } .tooltip-inner { max-width: 200px; padding: 3px 8px; - color: #ffffff; + color: #fff; text-align: center; - background-color: #000000; + background-color: #000; border-radius: 4px; } .tooltip-arrow { @@ -6102,56 +6097,56 @@ button.close { left: 50%; margin-left: -5px; border-width: 5px 5px 0; - border-top-color: #000000; + border-top-color: #000; } .tooltip.top-left .tooltip-arrow { - bottom: 0; right: 5px; + bottom: 0; margin-bottom: -5px; border-width: 5px 5px 0; - border-top-color: #000000; + border-top-color: #000; } .tooltip.top-right .tooltip-arrow { bottom: 0; left: 5px; margin-bottom: -5px; border-width: 5px 5px 0; - border-top-color: #000000; + border-top-color: #000; } .tooltip.right .tooltip-arrow { top: 50%; left: 0; margin-top: -5px; border-width: 5px 5px 5px 0; - border-right-color: #000000; + border-right-color: #000; } .tooltip.left .tooltip-arrow { top: 50%; right: 0; margin-top: -5px; border-width: 5px 0 5px 5px; - border-left-color: #000000; + border-left-color: #000; } .tooltip.bottom .tooltip-arrow { top: 0; left: 50%; margin-left: -5px; border-width: 0 5px 5px; - border-bottom-color: #000000; + border-bottom-color: #000; } .tooltip.bottom-left .tooltip-arrow { top: 0; right: 5px; margin-top: -5px; border-width: 0 5px 5px; - border-bottom-color: #000000; + border-bottom-color: #000; } .tooltip.bottom-right .tooltip-arrow { top: 0; left: 5px; margin-top: -5px; border-width: 0 5px 5px; - border-bottom-color: #000000; + border-bottom-color: #000; } .popover { position: absolute; @@ -6162,29 +6157,30 @@ button.close { max-width: 276px; padding: 1px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; font-style: normal; font-weight: normal; - letter-spacing: normal; - line-break: auto; line-height: 1.42857143; text-align: left; text-align: start; text-decoration: none; text-shadow: none; text-transform: none; - white-space: normal; + letter-spacing: normal; word-break: normal; word-spacing: normal; word-wrap: normal; - font-size: 14px; - background-color: #ffffff; + white-space: normal; + background-color: #fff; -webkit-background-clip: padding-box; background-clip: padding-box; - border: 1px solid #cccccc; - border: 1px solid rgba(0, 0, 0, 0.2); + 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, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -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; @@ -6199,8 +6195,8 @@ button.close { margin-left: -10px; } .popover-title { - margin: 0; padding: 8px 14px; + margin: 0; font-size: 14px; background-color: #f7f7f7; border-bottom: 1px solid #ebebeb; @@ -6222,83 +6218,83 @@ button.close { border-width: 11px; } .popover > .arrow:after { - border-width: 10px; 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; - border-top-color: #999999; - border-top-color: rgba(0, 0, 0, 0.25); - bottom: -11px; } .popover.top > .arrow:after { - content: " "; bottom: 1px; margin-left: -10px; + content: " "; + border-top-color: #fff; border-bottom-width: 0; - border-top-color: #ffffff; } .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; - border-right-color: #999999; - border-right-color: rgba(0, 0, 0, 0.25); } .popover.right > .arrow:after { - content: " "; - left: 1px; bottom: -10px; + left: 1px; + content: " "; + border-right-color: #fff; border-left-width: 0; - border-right-color: #ffffff; } .popover.bottom > .arrow { + top: -11px; left: 50%; margin-left: -11px; border-top-width: 0; - border-bottom-color: #999999; - border-bottom-color: rgba(0, 0, 0, 0.25); - top: -11px; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, .25); } .popover.bottom > .arrow:after { - content: " "; top: 1px; margin-left: -10px; + content: " "; border-top-width: 0; - border-bottom-color: #ffffff; + border-bottom-color: #fff; } .popover.left > .arrow { top: 50%; right: -11px; margin-top: -11px; border-right-width: 0; - border-left-color: #999999; - border-left-color: rgba(0, 0, 0, 0.25); + border-left-color: #999; + border-left-color: rgba(0, 0, 0, .25); } .popover.left > .arrow:after { - content: " "; right: 1px; - border-right-width: 0; - border-left-color: #ffffff; bottom: -10px; + content: " "; + border-right-width: 0; + border-left-color: #fff; } .carousel { position: relative; } .carousel-inner { position: relative; - overflow: hidden; width: 100%; + overflow: hidden; } .carousel-inner > .item { - display: none; position: relative; - -webkit-transition: 0.6s ease-in-out left; - -o-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; + 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 > img, .carousel-inner > .item > a > img { @@ -6306,32 +6302,33 @@ button.close { } @media all and (transform-3d), (-webkit-transform-3d) { .carousel-inner > .item { - -webkit-transition: -webkit-transform 0.6s ease-in-out; - -o-transition: -o-transform 0.6s ease-in-out; - transition: transform 0.6s ease-in-out; + -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; + backface-visibility: hidden; -webkit-perspective: 1000px; - perspective: 1000px; + perspective: 1000px; } .carousel-inner > .item.next, .carousel-inner > .item.active.right { - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); left: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); } .carousel-inner > .item.prev, .carousel-inner > .item.active.left { - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); left: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); } .carousel-inner > .item.next.left, .carousel-inner > .item.prev.right, .carousel-inner > .item.active { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); left: 0; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } } .carousel-inner > .active, @@ -6367,41 +6364,41 @@ button.close { .carousel-control { position: absolute; top: 0; - left: 0; bottom: 0; + left: 0; width: 15%; - opacity: 0.5; - filter: alpha(opacity=50); font-size: 20px; - color: #ffffff; + color: #fff; text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); + filter: alpha(opacity=50); + opacity: .5; } .carousel-control.left { - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); - background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001))); - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); - background-repeat: repeat-x; + 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 { - left: auto; right: 0; - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); - background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5))); - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); - background-repeat: repeat-x; + 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:hover, .carousel-control:focus { - outline: 0; - color: #ffffff; + color: #fff; text-decoration: none; - opacity: 0.9; filter: alpha(opacity=90); + outline: 0; + opacity: .9; } .carousel-control .icon-prev, .carousel-control .icon-next, @@ -6409,9 +6406,9 @@ button.close { .carousel-control .glyphicon-chevron-right { position: absolute; top: 50%; - margin-top: -10px; z-index: 5; display: inline-block; + margin-top: -10px; } .carousel-control .icon-prev, .carousel-control .glyphicon-chevron-left { @@ -6427,8 +6424,8 @@ button.close { .carousel-control .icon-next { width: 20px; height: 20px; - line-height: 1; font-family: serif; + line-height: 1; } .carousel-control .icon-prev:before { content: '\2039'; @@ -6442,10 +6439,10 @@ button.close { left: 50%; z-index: 15; width: 60%; - margin-left: -30%; padding-left: 0; - list-style: none; + margin-left: -30%; text-align: center; + list-style: none; } .carousel-indicators li { display: inline-block; @@ -6453,29 +6450,29 @@ button.close { height: 10px; margin: 1px; text-indent: -999px; - border: 1px solid #ffffff; - border-radius: 10px; cursor: pointer; background-color: #000 \9; background-color: rgba(0, 0, 0, 0); + border: 1px solid #fff; + border-radius: 10px; } .carousel-indicators .active { - margin: 0; width: 12px; height: 12px; - background-color: #ffffff; + margin: 0; + background-color: #fff; } .carousel-caption { position: absolute; - left: 15%; right: 15%; bottom: 20px; + left: 15%; z-index: 10; padding-top: 20px; padding-bottom: 20px; - color: #ffffff; + color: #fff; text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); } .carousel-caption .btn { text-shadow: none; @@ -6499,8 +6496,8 @@ button.close { margin-right: -15px; } .carousel-caption { - left: 20%; right: 20%; + left: 20%; padding-bottom: 30px; } .carousel-indicators { @@ -6537,8 +6534,8 @@ button.close { .panel-body:after, .modal-footer:before, .modal-footer:after { - content: " "; display: table; + content: " "; } .clearfix:after, .dl-horizontal dd:after, @@ -6559,8 +6556,8 @@ button.close { } .center-block { display: block; - margin-left: auto; margin-right: auto; + margin-left: auto; } .pull-right { float: right !important; @@ -6800,3 +6797,4 @@ button.close { display: none !important; } } +/*# sourceMappingURL=bootstrap.css.map */ diff --git a/infohub/static/infohub/bootstrap-3.3.5-dist/css/bootstrap.css.map b/infohub/static/infohub/bootstrap-3.3.5-dist/css/bootstrap.css.map new file mode 100644 index 00000000..9f60ed2b --- /dev/null +++ b/infohub/static/infohub/bootstrap-3.3.5-dist/css/bootstrap.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/mixins/reset-text.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"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,iBAAA;CHsR9C;AGrRmC;EAAW,iBAAA;CHwR9C;AGvRmC;EAAW,iBAAA;CH0R9C;AGzRmC;EAAW,iBAAA;CH4R9C;AG3RmC;EAAW,iBAAA;CH8R9C;AG7RmC;EAAW,iBAAA;CHgS9C;AG/RmC;EAAW,iBAAA;CHkS9C;AGjSmC;EAAW,iBAAA;CHoS9C;AGnSmC;EAAW,iBAAA;CHsS9C;AGrSmC;EAAW,iBAAA;CHwS9C;AGvSmC;EAAW,iBAAA;CH0S9C;AGzSmC;EAAW,iBAAA;CH4S9C;AG3SmC;EAAW,iBAAA;CH8S9C;AG7SmC;EAAW,iBAAA;CHgT9C;AG/SmC;EAAW,iBAAA;CHkT9C;AGjTmC;EAAW,iBAAA;CHoT9C;AGnTmC;EAAW,iBAAA;CHsT9C;AGrTmC;EAAW,iBAAA;CHwT9C;AGvTmC;EAAW,iBAAA;CH0T9C;AGzTmC;EAAW,iBAAA;CH4T9C;AG3TmC;EAAW,iBAAA;CH8T9C;AG7TmC;EAAW,iBAAA;CHgU9C;AG/TmC;EAAW,iBAAA;CHkU9C;AGjUmC;EAAW,iBAAA;CHoU9C;AGnUmC;EAAW,iBAAA;CHsU9C;AGrUmC;EAAW,iBAAA;CHwU9C;AGvUmC;EAAW,iBAAA;CH0U9C;AGzUmC;EAAW,iBAAA;CH4U9C;AG3UmC;EAAW,iBAAA;CH8U9C;AG7UmC;EAAW,iBAAA;CHgV9C;AG/UmC;EAAW,iBAAA;CHkV9C;AGjVmC;EAAW,iBAAA;CHoV9C;AGnVmC;EAAW,iBAAA;CHsV9C;AGrVmC;EAAW,iBAAA;CHwV9C;AGvVmC;EAAW,iBAAA;CH0V9C;AGzVmC;EAAW,iBAAA;CH4V9C;AG3VmC;EAAW,iBAAA;CH8V9C;AG7VmC;EAAW,iBAAA;CHgW9C;AG/VmC;EAAW,iBAAA;CHkW9C;AGjWmC;EAAW,iBAAA;CHoW9C;AGnWmC;EAAW,iBAAA;CHsW9C;AGrWmC;EAAW,iBAAA;CHwW9C;AGvWmC;EAAW,iBAAA;CH0W9C;AGzWmC;EAAW,iBAAA;CH4W9C;AG3WmC;EAAW,iBAAA;CH8W9C;AG7WmC;EAAW,iBAAA;CHgX9C;AG/WmC;EAAW,iBAAA;CHkX9C;AGjXmC;EAAW,iBAAA;CHoX9C;AGnXmC;EAAW,iBAAA;CHsX9C;AGrXmC;EAAW,iBAAA;CHwX9C;AGvXmC;EAAW,iBAAA;CH0X9C;AGzXmC;EAAW,iBAAA;CH4X9C;AG3XmC;EAAW,iBAAA;CH8X9C;AG7XmC;EAAW,iBAAA;CHgY9C;AG/XmC;EAAW,iBAAA;CHkY9C;AGjYmC;EAAW,iBAAA;CHoY9C;AGnYmC;EAAW,iBAAA;CHsY9C;AGrYmC;EAAW,iBAAA;CHwY9C;AGvYmC;EAAW,iBAAA;CH0Y9C;AGzYmC;EAAW,iBAAA;CH4Y9C;AG3YmC;EAAW,iBAAA;CH8Y9C;AG7YmC;EAAW,iBAAA;CHgZ9C;AG/YmC;EAAW,iBAAA;CHkZ9C;AGjZmC;EAAW,iBAAA;CHoZ9C;AGnZmC;EAAW,iBAAA;CHsZ9C;AGrZmC;EAAW,iBAAA;CHwZ9C;AGvZmC;EAAW,iBAAA;CH0Z9C;AGzZmC;EAAW,iBAAA;CH4Z9C;AG3ZmC;EAAW,iBAAA;CH8Z9C;AG7ZmC;EAAW,iBAAA;CHga9C;AG/ZmC;EAAW,iBAAA;CHka9C;AGjamC;EAAW,iBAAA;CHoa9C;AGnamC;EAAW,iBAAA;CHsa9C;AGramC;EAAW,iBAAA;CHwa9C;AGvamC;EAAW,iBAAA;CH0a9C;AGzamC;EAAW,iBAAA;CH4a9C;AG3amC;EAAW,iBAAA;CH8a9C;AG7amC;EAAW,iBAAA;CHgb9C;AG/amC;EAAW,iBAAA;CHkb9C;AGjbmC;EAAW,iBAAA;CHob9C;AGnbmC;EAAW,iBAAA;CHsb9C;AGrbmC;EAAW,iBAAA;CHwb9C;AGvbmC;EAAW,iBAAA;CH0b9C;AGzbmC;EAAW,iBAAA;CH4b9C;AG3bmC;EAAW,iBAAA;CH8b9C;AG7bmC;EAAW,iBAAA;CHgc9C;AG/bmC;EAAW,iBAAA;CHkc9C;AGjcmC;EAAW,iBAAA;CHoc9C;AGncmC;EAAW,iBAAA;CHsc9C;AGrcmC;EAAW,iBAAA;CHwc9C;AGvcmC;EAAW,iBAAA;CH0c9C;AGzcmC;EAAW,iBAAA;CH4c9C;AG3cmC;EAAW,iBAAA;CH8c9C;AG7cmC;EAAW,iBAAA;CHgd9C;AG/cmC;EAAW,iBAAA;CHkd9C;AGjdmC;EAAW,iBAAA;CHod9C;AGndmC;EAAW,iBAAA;CHsd9C;AGrdmC;EAAW,iBAAA;CHwd9C;AGvdmC;EAAW,iBAAA;CH0d9C;AGzdmC;EAAW,iBAAA;CH4d9C;AG3dmC;EAAW,iBAAA;CH8d9C;AG7dmC;EAAW,iBAAA;CHge9C;AG/dmC;EAAW,iBAAA;CHke9C;AGjemC;EAAW,iBAAA;CHoe9C;AGnemC;EAAW,iBAAA;CHse9C;AGremC;EAAW,iBAAA;CHwe9C;AGvemC;EAAW,iBAAA;CH0e9C;AGzemC;EAAW,iBAAA;CH4e9C;AG3emC;EAAW,iBAAA;CH8e9C;AG7emC;EAAW,iBAAA;CHgf9C;AG/emC;EAAW,iBAAA;CHkf9C;AGjfmC;EAAW,iBAAA;CHof9C;AGnfmC;EAAW,iBAAA;CHsf9C;AGrfmC;EAAW,iBAAA;CHwf9C;AGvfmC;EAAW,iBAAA;CH0f9C;AGzfmC;EAAW,iBAAA;CH4f9C;AG3fmC;EAAW,iBAAA;CH8f9C;AG7fmC;EAAW,iBAAA;CHggB9C;AG/fmC;EAAW,iBAAA;CHkgB9C;AGjgBmC;EAAW,iBAAA;CHogB9C;AGngBmC;EAAW,iBAAA;CHsgB9C;AGrgBmC;EAAW,iBAAA;CHwgB9C;AGvgBmC;EAAW,iBAAA;CH0gB9C;AGzgBmC;EAAW,iBAAA;CH4gB9C;AG3gBmC;EAAW,iBAAA;CH8gB9C;AG7gBmC;EAAW,iBAAA;CHghB9C;AG/gBmC;EAAW,iBAAA;CHkhB9C;AGjhBmC;EAAW,iBAAA;CHohB9C;AGnhBmC;EAAW,iBAAA;CHshB9C;AGrhBmC;EAAW,iBAAA;CHwhB9C;AGvhBmC;EAAW,iBAAA;CH0hB9C;AGzhBmC;EAAW,iBAAA;CH4hB9C;AG3hBmC;EAAW,iBAAA;CH8hB9C;AG7hBmC;EAAW,iBAAA;CHgiB9C;AG/hBmC;EAAW,iBAAA;CHkiB9C;AGjiBmC;EAAW,iBAAA;CHoiB9C;AGniBmC;EAAW,iBAAA;CHsiB9C;AGriBmC;EAAW,iBAAA;CHwiB9C;AGviBmC;EAAW,iBAAA;CH0iB9C;AGziBmC;EAAW,iBAAA;CH4iB9C;AG3iBmC;EAAW,iBAAA;CH8iB9C;AG7iBmC;EAAW,iBAAA;CHgjB9C;AG/iBmC;EAAW,iBAAA;CHkjB9C;AGjjBmC;EAAW,iBAAA;CHojB9C;AGnjBmC;EAAW,iBAAA;CHsjB9C;AGrjBmC;EAAW,iBAAA;CHwjB9C;AGvjBmC;EAAW,iBAAA;CH0jB9C;AGzjBmC;EAAW,iBAAA;CH4jB9C;AG3jBmC;EAAW,iBAAA;CH8jB9C;AG7jBmC;EAAW,iBAAA;CHgkB9C;AG/jBmC;EAAW,iBAAA;CHkkB9C;AGjkBmC;EAAW,iBAAA;CHokB9C;AGnkBmC;EAAW,iBAAA;CHskB9C;AGrkBmC;EAAW,iBAAA;CHwkB9C;AGvkBmC;EAAW,iBAAA;CH0kB9C;AGzkBmC;EAAW,iBAAA;CH4kB9C;AG3kBmC;EAAW,iBAAA;CH8kB9C;AG7kBmC;EAAW,iBAAA;CHglB9C;AG/kBmC;EAAW,iBAAA;CHklB9C;AGjlBmC;EAAW,iBAAA;CHolB9C;AGnlBmC;EAAW,iBAAA;CHslB9C;AGrlBmC;EAAW,iBAAA;CHwlB9C;AGvlBmC;EAAW,iBAAA;CH0lB9C;AGzlBmC;EAAW,iBAAA;CH4lB9C;AG3lBmC;EAAW,iBAAA;CH8lB9C;AG7lBmC;EAAW,iBAAA;CHgmB9C;AG/lBmC;EAAW,iBAAA;CHkmB9C;AGjmBmC;EAAW,iBAAA;CHomB9C;AGnmBmC;EAAW,iBAAA;CHsmB9C;AGrmBmC;EAAW,iBAAA;CHwmB9C;AGvmBmC;EAAW,iBAAA;CH0mB9C;AGzmBmC;EAAW,iBAAA;CH4mB9C;AG3mBmC;EAAW,iBAAA;CH8mB9C;AG7mBmC;EAAW,iBAAA;CHgnB9C;AG/mBmC;EAAW,iBAAA;CHknB9C;AGjnBmC;EAAW,iBAAA;CHonB9C;AGnnBmC;EAAW,iBAAA;CHsnB9C;AGrnBmC;EAAW,iBAAA;CHwnB9C;AGvnBmC;EAAW,iBAAA;CH0nB9C;AGznBmC;EAAW,iBAAA;CH4nB9C;AG3nBmC;EAAW,iBAAA;CH8nB9C;AG7nBmC;EAAW,iBAAA;CHgoB9C;AG/nBmC;EAAW,iBAAA;CHkoB9C;AGjoBmC;EAAW,iBAAA;CHooB9C;AGnoBmC;EAAW,iBAAA;CHsoB9C;AGroBmC;EAAW,iBAAA;CHwoB9C;AG/nBmC;EAAW,iBAAA;CHkoB9C;AGjoBmC;EAAW,iBAAA;CHooB9C;AGnoBmC;EAAW,iBAAA;CHsoB9C;AGroBmC;EAAW,iBAAA;CHwoB9C;AGvoBmC;EAAW,iBAAA;CH0oB9C;AGzoBmC;EAAW,iBAAA;CH4oB9C;AG3oBmC;EAAW,iBAAA;CH8oB9C;AG7oBmC;EAAW,iBAAA;CHgpB9C;AG/oBmC;EAAW,iBAAA;CHkpB9C;AGjpBmC;EAAW,iBAAA;CHopB9C;AGnpBmC;EAAW,iBAAA;CHspB9C;AGrpBmC;EAAW,iBAAA;CHwpB9C;AGvpBmC;EAAW,iBAAA;CH0pB9C;AGzpBmC;EAAW,iBAAA;CH4pB9C;AG3pBmC;EAAW,iBAAA;CH8pB9C;AG7pBmC;EAAW,iBAAA;CHgqB9C;AG/pBmC;EAAW,iBAAA;CHkqB9C;AGjqBmC;EAAW,iBAAA;CHoqB9C;AGnqBmC;EAAW,iBAAA;CHsqB9C;AGrqBmC;EAAW,iBAAA;CHwqB9C;AGvqBmC;EAAW,iBAAA;CH0qB9C;AGzqBmC;EAAW,iBAAA;CH4qB9C;AG3qBmC;EAAW,iBAAA;CH8qB9C;AG7qBmC;EAAW,iBAAA;CHgrB9C;AG/qBmC;EAAW,iBAAA;CHkrB9C;AGjrBmC;EAAW,iBAAA;CHorB9C;AGnrBmC;EAAW,iBAAA;CHsrB9C;AGrrBmC;EAAW,iBAAA;CHwrB9C;AGvrBmC;EAAW,iBAAA;CH0rB9C;AGzrBmC;EAAW,iBAAA;CH4rB9C;AG3rBmC;EAAW,iBAAA;CH8rB9C;AG7rBmC;EAAW,iBAAA;CHgsB9C;AG/rBmC;EAAW,iBAAA;CHksB9C;AGjsBmC;EAAW,iBAAA;CHosB9C;AGnsBmC;EAAW,iBAAA;CHssB9C;AGrsBmC;EAAW,iBAAA;CHwsB9C;AGvsBmC;EAAW,iBAAA;CH0sB9C;AGzsBmC;EAAW,iBAAA;CH4sB9C;AG3sBmC;EAAW,iBAAA;CH8sB9C;AG7sBmC;EAAW,iBAAA;CHgtB9C;AG/sBmC;EAAW,iBAAA;CHktB9C;AGjtBmC;EAAW,iBAAA;CHotB9C;AGntBmC;EAAW,iBAAA;CHstB9C;AGrtBmC;EAAW,iBAAA;CHwtB9C;AGvtBmC;EAAW,iBAAA;CH0tB9C;AGztBmC;EA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DH;AezkDC;EACE,oBAAA;Cf2kDH;Ae5kDC;EACE,WAAA;Cf8kDH;Ae/kDC;EACE,oBAAA;CfilDH;AellDC;EACE,mBAAA;CfolDH;AehlDC;EACE,YAAA;CfklDH;AelmDC;EACE,WAAA;CfomDH;AermDC;EACE,mBAAA;CfumDH;AexmDC;EACE,mBAAA;Cf0mDH;Ae3mDC;EACE,UAAA;Cf6mDH;Ae9mDC;EACE,mBAAA;CfgnDH;AejnDC;EACE,mBAAA;CfmnDH;AepnDC;EACE,UAAA;CfsnDH;AevnDC;EACE,mBAAA;CfynDH;Ae1nDC;EACE,mBAAA;Cf4nDH;Ae7nDC;EACE,UAAA;Cf+nDH;AehoDC;EACE,mBAAA;CfkoDH;AenoDC;EACE,kBAAA;CfqoDH;AejoDC;EACE,WAAA;CfmoDH;AernDC;EACE,kBAAA;CfunDH;AexnDC;EACE,0BAAA;Cf0nDH;Ae3nDC;EACE,0BAAA;Cf6nDH;Ae9nDC;EACE,iBAAA;CfgoDH;AejoDC;EACE,0BAAA;CfmoDH;AepoDC;EACE,0BAAA;CfsoDH;AevoDC;EACE,iBAAA;CfyoDH;Ae1oDC;EACE,0BAAA;Cf4oDH;Ae7oDC;EACE,0BAAA;Cf+oDH;AehpDC;EACE,iBAAA;CfkpDH;AenpDC;EACE,0BAAA;CfqpDH;AetpDC;EACE,yBAAA;CfwpDH;AezpDC;EACE,gBAAA;Cf2pDH;Aa3pDD;EElCI;IACE,YAAA;GfgsDH;EezrDD;IACE,YAAA;Gf2rDD;Ee5rDD;IACE,oBAAA;Gf8rDD;Ee/rDD;IACE,oBAAA;GfisDD;EelsDD;IACE,WAAA;GfosDD;EersDD;IACE,oBAAA;GfusDD;EexsDD;IACE,oBAAA;Gf0sDD;Ee3sDD;IACE,WAAA;Gf6sDD;Ee9sDD;IACE,oBAAA;GfgtDD;EejtDD;IACE,oBAAA;GfmtDD;EeptDD;IACE,WAAA;GfstDD;EevtDD;IACE,oBAAA;GfytDD;Ee1tDD;IACE,mBAAA;Gf4tDD;Ee9sDD;IACE,YAAA;GfgtDD;EejtDD;IACE,oBAAA;GfmtDD;EeptDD;IACE,oBAAA;GfstDD;EevtDD;IACE,WAAA;GfytDD;Ee1tDD;IACE,oBAAA;Gf4tDD;Ee7tDD;IACE,oBAAA;Gf+tDD;EehuDD;IACE,WAAA;GfkuDD;EenuDD;IACE,oBAAA;GfquDD;EetuDD;IACE,oBAAA;GfwuDD;EezuDD;IACE,WAAA;Gf2uDD;Ee5uDD;IACE,oBAAA;Gf8uDD;Ee/uDD;IACE,mBAAA;GfivDD;Ee7uDD;IACE,YAAA;Gf+uDD;Ee/vDD;IACE,WAAA;GfiwDD;EelwDD;IACE,mBAAA;GfowDD;EerwDD;IACE,mBAAA;GfuwDD;EexwDD;IACE,UAAA;Gf0wDD;Ee3wDD;IACE,mBAAA;Gf6wDD;Ee9wDD;IACE,mBAAA;GfgxDD;EejxDD;IACE,UAAA;GfmxDD;EepxDD;IACE,mBAAA;GfsxDD;EevxDD;IACE,mBAAA;GfyxDD;Ee1xDD;IACE,UAAA;Gf4xDD;Ee7xDD;IACE,mBAAA;Gf+xDD;EehyDD;IACE,kBAAA;GfkyDD;Ee9xDD;IACE,WAAA;GfgyDD;EelxDD;IACE,kBAAA;GfoxDD;EerxDD;IACE,0BAAA;GfuxDD;EexxDD;IACE,0BAAA;Gf0xDD;Ee3xDD;IACE,iBAAA;Gf6xDD;Ee9xDD;IACE,0BAAA;GfgyDD;EejyDD;IACE,0BAAA;GfmyDD;EepyDD;IACE,iBAAA;GfsyDD;EevyDD;IACE,0BAAA;GfyyDD;Ee1yDD;IACE,0BAAA;Gf4yDD;Ee7yDD;IACE,iBAAA;Gf+yDD;EehzDD;IACE,0BAAA;GfkzDD;EenzDD;IACE,yBAAA;GfqzDD;EetzDD;IACE,gBAAA;GfwzDD;CACF;AahzDD;EE3CI;IACE,YAAA;Gf81DH;Eev1DD;IACE,YAAA;Gfy1DD;Ee11DD;IACE,oBAAA;Gf41DD;Ee71DD;IACE,oBAAA;Gf+1DD;Eeh2DD;IACE,WAAA;Gfk2DD;Een2DD;IACE,oBAAA;Gfq2DD;Eet2DD;IACE,oBAAA;Gfw2DD;Eez2DD;IACE,WAAA;Gf22DD;Ee52DD;IACE,oBAAA;Gf82DD;Ee/2DD;IACE,oBAAA;Gfi3DD;Eel3DD;IACE,WAAA;Gfo3DD;Eer3DD;IACE,oBAAA;Gfu3DD;Eex3DD;IACE,mBAAA;Gf03DD;Ee52DD;IACE,YAAA;Gf82DD;Ee/2DD;IACE,oBAAA;Gfi3DD;Eel3DD;IACE,oBAAA;Gfo3DD;Eer3DD;IACE,WAAA;Gfu3DD;Eex3DD;IACE,oBAAA;Gf03DD;Ee33DD;IACE,oBAAA;Gf63DD;Ee93DD;IACE,WAAA;Gfg4DD;Eej4DD;IACE,oBAAA;Gfm4DD;Eep4DD;IACE,oBAAA;Gfs4DD;Eev4DD;IACE,WAAA;Gfy4DD;Ee14DD;IACE,oBAAA;Gf44DD;Ee74DD;IACE,mBAAA;Gf+4DD;Ee34DD;IACE,YAAA;Gf64DD;Ee75DD;IACE,WAAA;Gf+5DD;Eeh6DD;IACE,mBAAA;Gfk6DD;Een6DD;IACE,mBAAA;Gfq6DD;Eet6DD;IACE,UAAA;Gfw6DD;Eez6DD;IACE,mBAAA;Gf26DD;Ee56DD;IACE,mBAAA;Gf86DD;Ee/6DD;IACE,UAAA;Gfi7DD;Eel7DD;IACE,mBAAA;Gfo7DD;Eer7DD;IACE,mBAAA;Gfu7DD;Eex7DD;IACE,UAAA;Gf07DD;Ee37DD;IACE,mBAAA;Gf67DD;Ee97DD;IACE,kBAAA;Gfg8DD;Ee57DD;IACE,WAAA;Gf87DD;Eeh7DD;IACE,kBAAA;Gfk7DD;Een7DD;IACE,0BAAA;Gfq7DD;Eet7DD;IACE,0BAAA;Gfw7DD;Eez7DD;IACE,iBAAA;Gf27DD;Ee57DD;IACE,0BAAA;Gf87DD;Ee/7DD;IACE,0BAAA;Gfi8DD;Eel8DD;IACE,iBAAA;Gfo8DD;Eer8DD;IACE,0BAAA;Gfu8DD;Eex8DD;IACE,0BAAA;Gf08DD;Ee38DD;IACE,iBAAA;Gf68DD;Ee98DD;IACE,0BAAA;Gfg9DD;Eej9DD;IACE,yBAAA;Gfm9DD;Eep9DD;IACE,gBAAA;Gfs9DD;CACF;Aa38DD;EE9CI;IACE,YAAA;Gf4/DH;Eer/DD;IACE,YAAA;Gfu/DD;Eex/DD;IACE,oBAAA;Gf0/DD;Ee3/DD;IACE,oBAAA;Gf6/DD;Ee9/DD;IACE,WAAA;GfggED;EejgED;IACE,oBAAA;GfmgED;EepgED;IACE,oBAAA;GfsgED;EevgED;IACE,WAAA;GfygED;Ee1gED;IACE,oBAAA;Gf4gED;Ee7gED;IACE,oBAAA;Gf+gED;EehhED;IACE,WAAA;GfkhED;EenhED;IACE,oBAAA;GfqhED;EethED;IACE,mBAAA;GfwhED;Ee1gED;IACE,YAAA;Gf4gED;Ee7gED;IACE,oBAAA;Gf+gED;EehhED;IACE,oBAAA;GfkhED;EenhED;IACE,WAAA;GfqhED;EethED;IACE,oBAAA;GfwhED;EezhED;IACE,oBAAA;Gf2hED;Ee5hED;IACE,WAAA;Gf8hED;Ee/hED;IACE,oBAAA;GfiiED;EeliED;IACE,oBAAA;GfoiED;EeriED;IACE,WAAA;GfuiED;EexiED;IACE,oBAAA;Gf0iED;Ee3iED;IACE,mBAAA;Gf6iED;EeziED;IACE,YAAA;Gf2iED;Ee3jED;IACE,WAAA;Gf6jED;Ee9jED;IACE,mBAAA;GfgkED;EejkED;IACE,mBAAA;GfmkED;EepkED;IACE,UAAA;GfskED;EevkED;IACE,mBAAA;GfykED;Ee1kED;IACE,mBAAA;Gf4kED;Ee7kED;IACE,UAAA;Gf+kED;EehlED;IACE,mBAAA;GfklED;EenlED;IACE,mBAAA;GfqlED;EetlED;IACE,UAAA;GfwlED;EezlED;IACE,mBAAA;Gf2lED;Ee5lED;IACE,kBAAA;Gf8lED;Ee1lED;IACE,WAAA;Gf4lED;Ee9kED;IACE,kBAAA;GfglED;EejlED;IACE,0BAAA;GfmlED;EeplED;IACE,0BAAA;GfslED;EevlED;IACE,iBAAA;GfylED;Ee1lED;IACE,0BAAA;Gf4lED;Ee7lED;IACE,0BAAA;Gf+lED;EehmED;IACE,iBAAA;GfkmED;EenmED;IACE,0BAAA;GfqmED;EetmED;IACE,0BAAA;GfwmED;EezmED;IACE,iBAAA;Gf2mED;Ee5mED;IACE,0BAAA;Gf8mED;Ee/mED;IACE,yBAAA;GfinED;EelnED;IACE,gBAAA;GfonED;CACF;AgBxrED;EACE,8BAAA;ChB0rED;AgBxrED;EACE,iBAAA;EACA,oBAAA;EACA,eAAA;EACA,iBAAA;ChB0rED;AgBxrED;EACE,iBAAA;ChB0rED;AgBprED;EACE,YAAA;EACA,gBAAA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","file":"bootstrap.css","sourcesContent":["/*!\n * Bootstrap v3.3.5 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n[hidden],\ntemplate {\n display: none;\n}\na {\n background-color: transparent;\n}\na:active,\na:hover {\n outline: 0;\n}\nabbr[title] {\n border-bottom: 1px dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\nmark {\n background: #ff0;\n color: #000;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsup {\n top: -0.5em;\n}\nsub {\n bottom: -0.25em;\n}\nimg {\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n box-sizing: content-box;\n height: 0;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0;\n}\nbutton {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\ninput {\n line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n border: 0;\n padding: 0;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\ntd,\nth {\n padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('../fonts/glyphicons-halflings-regular.eot');\n 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');\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\2a\";\n}\n.glyphicon-plus:before {\n content: \"\\2b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n.glyphicon-cd:before {\n content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n content: \"\\e204\";\n}\n.glyphicon-copy:before {\n content: \"\\e205\";\n}\n.glyphicon-paste:before {\n content: \"\\e206\";\n}\n.glyphicon-alert:before {\n content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n content: \"\\e210\";\n}\n.glyphicon-king:before {\n content: \"\\e211\";\n}\n.glyphicon-queen:before {\n content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n content: \"\\e214\";\n}\n.glyphicon-knight:before {\n content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n content: \"\\e216\";\n}\n.glyphicon-tent:before {\n content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n content: \"\\e218\";\n}\n.glyphicon-bed:before {\n content: \"\\e219\";\n}\n.glyphicon-apple:before {\n content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n content: \"\\e227\";\n}\n.glyphicon-btc:before {\n content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n content: \"\\e227\";\n}\n.glyphicon-yen:before {\n content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n content: \"\\e232\";\n}\n.glyphicon-education:before {\n content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n content: \"\\e237\";\n}\n.glyphicon-oil:before {\n content: \"\\e238\";\n}\n.glyphicon-grain:before {\n content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n content: \"\\e253\";\n}\n.glyphicon-console:before {\n content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n content: \"\\e260\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333333;\n background-color: #ffffff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #337ab7;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #23527c;\n text-decoration: underline;\n}\na:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n padding: 4px;\n line-height: 1.42857143;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n[role=\"button\"] {\n cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: normal;\n line-height: 1;\n color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n background-color: #fcf8e3;\n padding: .2em;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777777;\n}\n.text-primary {\n color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n color: #286090;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n background-color: #286090;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n.list-inline > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted #777777;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n text-align: right;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: '\\00A0 \\2014';\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #ffffff;\n background-color: #333333;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n word-break: break-all;\n word-wrap: break-word;\n color: #333333;\n background-color: #f5f5f5;\n border: 1px solid #cccccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n.row {\n margin-left: -15px;\n margin-right: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n@media (min-width: 768px) {\n .col-sm-1, .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-sm-10, .col-sm-11, .col-sm-12 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 992px) {\n .col-md-1, .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-md-10, .col-md-11, .col-md-12 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 1200px) {\n .col-lg-1, .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-lg-10, .col-lg-11, .col-lg-12 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n}\ntable {\n background-color: transparent;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #dddddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #dddddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #dddddd;\n}\n.table .table {\n background-color: #ffffff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #dddddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #dddddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-column;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-cell;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #dddddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n min-width: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n background-color: #ffffff;\n background-image: none;\n border: 1px solid #cccccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n color: #999999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999999;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n}\ntextarea.form-control {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"].form-control,\n input[type=\"time\"].form-control,\n input[type=\"datetime-local\"].form-control,\n input[type=\"month\"].form-control {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm,\n .input-group-sm input[type=\"date\"],\n .input-group-sm input[type=\"time\"],\n .input-group-sm input[type=\"datetime-local\"],\n .input-group-sm input[type=\"month\"] {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg,\n .input-group-lg input[type=\"date\"],\n .input-group-lg input[type=\"time\"],\n .input-group-lg input[type=\"datetime-local\"],\n .input-group-lg input[type=\"month\"] {\n line-height: 46px;\n }\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.form-control-static {\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n min-height: 34px;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-left: 0;\n padding-right: 0;\n}\n.input-sm {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n height: auto;\n}\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.form-group-sm select.form-control {\n height: 30px;\n line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n height: auto;\n}\n.form-group-sm .form-control-static {\n height: 30px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.input-lg {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-lg {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n height: auto;\n}\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.form-group-lg select.form-control {\n height: 46px;\n line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n height: auto;\n}\n.form-group-lg .form-control-static {\n height: 46px;\n min-height: 38px;\n padding: 11px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n border-color: #3c763d;\n background-color: #dff0d8;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n border-color: #8a6d3b;\n background-color: #fcf8e3;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n border-color: #a94442;\n background-color: #f2dede;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 7px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-left: -15px;\n margin-right: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: 7px;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 14.333333px;\n font-size: 18px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n font-size: 12px;\n }\n}\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n white-space: nowrap;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n outline: 0;\n background-image: none;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n opacity: 0.65;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n pointer-events: none;\n}\n.btn-default {\n color: #333333;\n background-color: #ffffff;\n border-color: #cccccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n color: #333333;\n background-color: #e6e6e6;\n border-color: #8c8c8c;\n}\n.btn-default:hover {\n color: #333333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n color: #333333;\n background-color: #d4d4d4;\n border-color: #8c8c8c;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n background-image: none;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #ffffff;\n border-color: #cccccc;\n}\n.btn-default .badge {\n color: #ffffff;\n background-color: #333333;\n}\n.btn-primary {\n color: #ffffff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n color: #ffffff;\n background-color: #286090;\n border-color: #122b40;\n}\n.btn-primary:hover {\n color: #ffffff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #ffffff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n color: #ffffff;\n background-color: #204d74;\n border-color: #122b40;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n background-image: none;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.btn-success {\n color: #ffffff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n color: #ffffff;\n background-color: #449d44;\n border-color: #255625;\n}\n.btn-success:hover {\n color: #ffffff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #ffffff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n color: #ffffff;\n background-color: #398439;\n border-color: #255625;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n background-image: none;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #ffffff;\n}\n.btn-info {\n color: #ffffff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n color: #ffffff;\n background-color: #31b0d5;\n border-color: #1b6d85;\n}\n.btn-info:hover {\n color: #ffffff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #ffffff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n color: #ffffff;\n background-color: #269abc;\n border-color: #1b6d85;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n background-image: none;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #ffffff;\n}\n.btn-warning {\n color: #ffffff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n color: #ffffff;\n background-color: #ec971f;\n border-color: #985f0d;\n}\n.btn-warning:hover {\n color: #ffffff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #ffffff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n color: #ffffff;\n background-color: #d58512;\n border-color: #985f0d;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n background-image: none;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #ffffff;\n}\n.btn-danger {\n color: #ffffff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n color: #ffffff;\n background-color: #c9302c;\n border-color: #761c19;\n}\n.btn-danger:hover {\n color: #ffffff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #ffffff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n color: #ffffff;\n background-color: #ac2925;\n border-color: #761c19;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n background-image: none;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #ffffff;\n}\n.btn-link {\n color: #337ab7;\n font-weight: normal;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n}\n.collapse.in {\n display: block;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-top: 4px solid \\9;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n list-style: none;\n font-size: 14px;\n text-align: left;\n background-color: #ffffff;\n border: 1px solid #cccccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n background-clip: padding-box;\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: 1.42857143;\n color: #333333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n text-decoration: none;\n color: #262626;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #ffffff;\n text-decoration: none;\n outline: 0;\n background-color: #337ab7;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n cursor: not-allowed;\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n left: auto;\n right: 0;\n}\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n border-top: 0;\n border-bottom: 4px dashed;\n border-bottom: 4px solid \\9;\n content: \"\";\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n left: auto;\n right: 0;\n }\n .navbar-right .dropdown-menu-left {\n left: 0;\n right: auto;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-bottom-left-radius: 4px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #cccccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n z-index: 2;\n margin-left: -1px;\n}\n.nav {\n margin-bottom: 0;\n padding-left: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #337ab7;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #dddddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #dddddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555555;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-bottom-color: transparent;\n cursor: default;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #dddddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #ffffff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #ffffff;\n background-color: #337ab7;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #dddddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #ffffff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n overflow-x: visible;\n padding-right: 15px;\n padding-left: 15px;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-left: 0;\n padding-right: 0;\n }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.navbar-brand {\n float: left;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n height: 50px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: 15px;\n padding: 9px 10px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n margin-left: -15px;\n margin-right: -15px;\n padding: 10px 15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-left: 15px;\n margin-right: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #cccccc;\n background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n border-color: #dddddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #dddddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n background-color: #e7e7e7;\n color: #555555;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #cccccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-link {\n color: #777777;\n}\n.navbar-default .navbar-link:hover {\n color: #333333;\n}\n.navbar-default .btn-link {\n color: #777777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #cccccc;\n}\n.navbar-inverse {\n background-color: #222222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #ffffff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #ffffff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #ffffff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #ffffff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n background-color: #080808;\n color: #ffffff;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #ffffff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #ffffff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #ffffff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #ffffff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n content: \"/\\00a0\";\n padding: 0 5px;\n color: #cccccc;\n}\n.breadcrumb > .active {\n color: #777777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n line-height: 1.42857143;\n text-decoration: none;\n color: #337ab7;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n margin-left: -1px;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-bottom-left-radius: 4px;\n border-top-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-bottom-right-radius: 4px;\n border-top-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n z-index: 3;\n color: #23527c;\n background-color: #eeeeee;\n border-color: #dddddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 2;\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n cursor: default;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777777;\n background-color: #ffffff;\n border-color: #dddddd;\n cursor: not-allowed;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-bottom-left-radius: 6px;\n border-top-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-bottom-right-radius: 6px;\n border-top-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-bottom-left-radius: 3px;\n border-top-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n list-style: none;\n text-align: center;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777777;\n background-color: #ffffff;\n cursor: not-allowed;\n}\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: #ffffff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n color: #ffffff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #286090;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n color: #ffffff;\n line-height: 1;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: #777777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #ffffff;\n text-decoration: none;\n cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding-top: 30px;\n padding-bottom: 30px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n border-radius: 6px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding-top: 48px;\n padding-bottom: 48px;\n }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-left: 60px;\n padding-right: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 4px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-left: auto;\n margin-right: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #337ab7;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n background-color: #dff0d8;\n border-color: #d6e9c6;\n color: #3c763d;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n background-color: #d9edf7;\n border-color: #bce8f1;\n color: #31708f;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n background-color: #fcf8e3;\n border-color: #faebcc;\n color: #8a6d3b;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n background-color: #f2dede;\n border-color: #ebccd1;\n color: #a94442;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n overflow: hidden;\n height: 20px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #ffffff;\n text-align: center;\n background-color: #337ab7;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n.media-body {\n width: 10000px;\n}\n.media-object {\n display: block;\n}\n.media-object.img-thumbnail {\n max-width: none;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n margin-bottom: 20px;\n padding-left: 0;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n}\n.list-group-item:first-child {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\na.list-group-item,\nbutton.list-group-item {\n color: #555555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n color: #333333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n text-decoration: none;\n color: #555555;\n background-color: #f5f5f5;\n}\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n background-color: #eeeeee;\n color: #777777;\n cursor: not-allowed;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #c7ddef;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #ffffff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #dddddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-left: 15px;\n padding-right: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #dddddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n border: 0;\n margin-bottom: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #dddddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #dddddd;\n}\n.panel-default {\n border-color: #dddddd;\n}\n.panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #dddddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #dddddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #dddddd;\n}\n.panel-primary {\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #337ab7;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n}\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000000;\n text-shadow: 0 1px 0 #ffffff;\n opacity: 0.2;\n filter: alpha(opacity=20);\n}\n.close:hover,\n.close:focus {\n color: #000000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #ffffff;\n border: 1px solid #999999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-clip: padding-box;\n outline: 0;\n}\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000000;\n}\n.modal-backdrop.fade {\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.modal-backdrop.in {\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n min-height: 16.42857143px;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 12px;\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.tooltip.in {\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.tooltip.top {\n margin-top: -3px;\n padding: 5px 0;\n}\n.tooltip.right {\n margin-left: 3px;\n padding: 0 5px;\n}\n.tooltip.bottom {\n margin-top: 3px;\n padding: 5px 0;\n}\n.tooltip.left {\n margin-left: -3px;\n padding: 0 5px;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #ffffff;\n text-align: center;\n background-color: #000000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.top-left .tooltip-arrow {\n bottom: 0;\n right: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 14px;\n background-color: #ffffff;\n background-clip: padding-box;\n border: 1px solid #cccccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover-title {\n margin: 0;\n padding: 8px 14px;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow:after {\n border-width: 10px;\n content: \"\";\n}\n.popover.top > .arrow {\n left: 50%;\n margin-left: -11px;\n border-bottom-width: 0;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n bottom: -11px;\n}\n.popover.top > .arrow:after {\n content: \" \";\n bottom: 1px;\n margin-left: -10px;\n border-bottom-width: 0;\n border-top-color: #ffffff;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-left-width: 0;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n.popover.right > .arrow:after {\n content: \" \";\n left: 1px;\n bottom: -10px;\n border-left-width: 0;\n border-right-color: #ffffff;\n}\n.popover.bottom > .arrow {\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n top: -11px;\n}\n.popover.bottom > .arrow:after {\n content: \" \";\n top: 1px;\n margin-left: -10px;\n border-top-width: 0;\n border-bottom-color: #ffffff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: #ffffff;\n bottom: -10px;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n}\n.carousel-inner > .item {\n display: none;\n position: relative;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform 0.6s ease-in-out;\n -moz-transition: -moz-transform 0.6s ease-in-out;\n -o-transition: -o-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000px;\n -moz-perspective: 1000px;\n perspective: 1000px;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 15%;\n opacity: 0.5;\n filter: alpha(opacity=50);\n font-size: 20px;\n color: #ffffff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n}\n.carousel-control.right {\n left: auto;\n right: 0;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n}\n.carousel-control:hover,\n.carousel-control:focus {\n outline: 0;\n color: #ffffff;\n text-decoration: none;\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n margin-top: -10px;\n z-index: 5;\n display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n line-height: 1;\n font-family: serif;\n}\n.carousel-control .icon-prev:before {\n content: '\\2039';\n}\n.carousel-control .icon-next:before {\n content: '\\203a';\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid #ffffff;\n border-radius: 10px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-indicators .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: #ffffff;\n}\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #ffffff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -15px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -15px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -15px;\n }\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-footer:before,\n.modal-footer:after {\n content: \" \";\n display: table;\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table !important;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table !important;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table !important;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table !important;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table !important;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS and IE text size adjust after device orientation change,\n// without disabling user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background-color: transparent;\n}\n\n//\n// Improve readability of focused elements when they are also in an\n// active/hover state.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome.\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n box-sizing: content-box; //2\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n box-shadow: none !important;\n text-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n // Bootstrap specific changes end\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// Star\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('@{icon-font-path}@{icon-font-name}.eot');\n src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n url('@{icon-font-path}@{icon-font-name}.woff2') format('woff2'),\n url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\2a\"; } }\n.glyphicon-plus { &:before { content: \"\\2b\"; } }\n.glyphicon-euro,\n.glyphicon-eur { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n.glyphicon-cd { &:before { content: \"\\e201\"; } }\n.glyphicon-save-file { &:before { content: \"\\e202\"; } }\n.glyphicon-open-file { &:before { content: \"\\e203\"; } }\n.glyphicon-level-up { &:before { content: \"\\e204\"; } }\n.glyphicon-copy { &:before { content: \"\\e205\"; } }\n.glyphicon-paste { &:before { content: \"\\e206\"; } }\n// The following 2 Glyphicons are omitted for the time being because\n// they currently use Unicode codepoints that are outside the\n// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle\n// non-BMP codepoints in CSS string escapes, and thus can't display these two icons.\n// Notably, the bug affects some older versions of the Android Browser.\n// More info: https://github.com/twbs/bootstrap/issues/10106\n// .glyphicon-door { &:before { content: \"\\1f6aa\"; } }\n// .glyphicon-key { &:before { content: \"\\1f511\"; } }\n.glyphicon-alert { &:before { content: \"\\e209\"; } }\n.glyphicon-equalizer { &:before { content: \"\\e210\"; } }\n.glyphicon-king { &:before { content: \"\\e211\"; } }\n.glyphicon-queen { &:before { content: \"\\e212\"; } }\n.glyphicon-pawn { &:before { content: \"\\e213\"; } }\n.glyphicon-bishop { &:before { content: \"\\e214\"; } }\n.glyphicon-knight { &:before { content: \"\\e215\"; } }\n.glyphicon-baby-formula { &:before { content: \"\\e216\"; } }\n.glyphicon-tent { &:before { content: \"\\26fa\"; } }\n.glyphicon-blackboard { &:before { content: \"\\e218\"; } }\n.glyphicon-bed { &:before { content: \"\\e219\"; } }\n.glyphicon-apple { &:before { content: \"\\f8ff\"; } }\n.glyphicon-erase { &:before { content: \"\\e221\"; } }\n.glyphicon-hourglass { &:before { content: \"\\231b\"; } }\n.glyphicon-lamp { &:before { content: \"\\e223\"; } }\n.glyphicon-duplicate { &:before { content: \"\\e224\"; } }\n.glyphicon-piggy-bank { &:before { content: \"\\e225\"; } }\n.glyphicon-scissors { &:before { content: \"\\e226\"; } }\n.glyphicon-bitcoin { &:before { content: \"\\e227\"; } }\n.glyphicon-btc { &:before { content: \"\\e227\"; } }\n.glyphicon-xbt { &:before { content: \"\\e227\"; } }\n.glyphicon-yen { &:before { content: \"\\00a5\"; } }\n.glyphicon-jpy { &:before { content: \"\\00a5\"; } }\n.glyphicon-ruble { &:before { content: \"\\20bd\"; } }\n.glyphicon-rub { &:before { content: \"\\20bd\"; } }\n.glyphicon-scale { &:before { content: \"\\e230\"; } }\n.glyphicon-ice-lolly { &:before { content: \"\\e231\"; } }\n.glyphicon-ice-lolly-tasted { &:before { content: \"\\e232\"; } }\n.glyphicon-education { &:before { content: \"\\e233\"; } }\n.glyphicon-option-horizontal { &:before { content: \"\\e234\"; } }\n.glyphicon-option-vertical { &:before { content: \"\\e235\"; } }\n.glyphicon-menu-hamburger { &:before { content: \"\\e236\"; } }\n.glyphicon-modal-window { &:before { content: \"\\e237\"; } }\n.glyphicon-oil { &:before { content: \"\\e238\"; } }\n.glyphicon-grain { &:before { content: \"\\e239\"; } }\n.glyphicon-sunglasses { &:before { content: \"\\e240\"; } }\n.glyphicon-text-size { &:before { content: \"\\e241\"; } }\n.glyphicon-text-color { &:before { content: \"\\e242\"; } }\n.glyphicon-text-background { &:before { content: \"\\e243\"; } }\n.glyphicon-object-align-top { &:before { content: \"\\e244\"; } }\n.glyphicon-object-align-bottom { &:before { content: \"\\e245\"; } }\n.glyphicon-object-align-horizontal{ &:before { content: \"\\e246\"; } }\n.glyphicon-object-align-left { &:before { content: \"\\e247\"; } }\n.glyphicon-object-align-vertical { &:before { content: \"\\e248\"; } }\n.glyphicon-object-align-right { &:before { content: \"\\e249\"; } }\n.glyphicon-triangle-right { &:before { content: \"\\e250\"; } }\n.glyphicon-triangle-left { &:before { content: \"\\e251\"; } }\n.glyphicon-triangle-bottom { &:before { content: \"\\e252\"; } }\n.glyphicon-triangle-top { &:before { content: \"\\e253\"; } }\n.glyphicon-console { &:before { content: \"\\e254\"; } }\n.glyphicon-superscript { &:before { content: \"\\e255\"; } }\n.glyphicon-subscript { &:before { content: \"\\e256\"; } }\n.glyphicon-menu-left { &:before { content: \"\\e257\"; } }\n.glyphicon-menu-right { &:before { content: \"\\e258\"; } }\n.glyphicon-menu-down { &:before { content: \"\\e259\"; } }\n.glyphicon-menu-up { &:before { content: \"\\e260\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n\n\n// iOS \"clickable elements\" fix for role=\"button\"\n//\n// Fixes \"clickability\" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\"button\"\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n[role=\"button\"] {\n cursor: pointer;\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\nmark,\n.mark {\n background-color: @state-warning-bg;\n padding: .2em;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @grid-float-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n .text-uppercase();\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover,\n a&:focus {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover,\n a&:focus {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n margin-right: auto;\n margin-left: auto;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: ceil((@gutter / -2));\n margin-right: floor((@gutter / -2));\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: ceil((@grid-gutter-width / 2));\n padding-right: floor((@grid-gutter-width / 2));\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n}\ncaption {\n padding-top: @table-cell-padding;\n padding-bottom: @table-cell-padding;\n color: @text-muted;\n text-align: left;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-of-type(odd) {\n background-color: @table-bg-accent;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n background-color: @table-bg-hover;\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * 0.75);\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n}\n\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius; // Note: This has no effect on s in CSS.\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Disabled and read-only inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &[disabled],\n &[readonly],\n fieldset[disabled] & {\n background-color: @input-bg-disabled;\n opacity: 1; // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655\n }\n\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n\n // Reset height for `textarea`s\n textarea& {\n height: auto;\n }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n\n\n// Special styles for iOS temporal inputs\n//\n// In Mobile Safari, setting `display: block` on temporal inputs causes the\n// text within the input to become vertically misaligned. As a workaround, we\n// set a pixel line-height that matches the given height of the input, but only\n// for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848\n//\n// Note that as of 8.3, iOS doesn't support `datetime` or `week`.\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"],\n input[type=\"time\"],\n input[type=\"datetime-local\"],\n input[type=\"month\"] {\n &.form-control {\n line-height: @input-height-base;\n }\n\n &.input-sm,\n .input-group-sm & {\n line-height: @input-height-small;\n }\n\n &.input-lg,\n .input-group-lg & {\n line-height: @input-height-large;\n }\n }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n margin-bottom: @form-group-margin-bottom;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n\n label {\n min-height: @line-height-computed; // Ensure the input doesn't jump when there is no text\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n// Some special care is needed because

      +





      +

      Malaria : infoHub

      +
      +

      New Post

      +
      + + {% csrf_token %} +
      + +
      + +

      + + {% if form.title_post.errors %} + {% for error in form.title_post.errors %} + {{ error }} + {% endfor %} + {% endif %} + +

      -
      - -
      - -

      - - {% if form.description_post.errors %} - {% for error in form.description_post.errors %} - {{ error }} - {% endfor %} - {% endif %} - -

      -
      +
      +
      + +
      + +

      + + {% if form.description_post.errors %} + {% for error in form.description_post.errors %} + {{ error }} + {% endfor %} + {% endif %} + +

      -
      -
      - - Cancel -
      +
      +
      +
      + + Cancel
      - -
      -


      - +
      + +
      +


      {% endblock %} diff --git a/malaria/templates/malaria/delete_post.html b/malaria/templates/malaria/delete_post.html index f6ae5b3d..d0deb6a1 100644 --- a/malaria/templates/malaria/delete_post.html +++ b/malaria/templates/malaria/delete_post.html @@ -1,31 +1,26 @@ {% extends "infohub/base.html" %} {% block content %} - - Delete Post - - -





      -
      -

      - Malaria : infoHub -

      -
      -
      -

      Delete Post

      -
      -
      - {% csrf_token %} -
      - -
      -
      -
      - - Cancel -
      -
      -
      +





      +
      +

      + Malaria : infoHub +

      +
      +
      +

      Delete Post

      +
      +
      + {% csrf_token %} +
      +
      - +
      +
      + + Cancel +
      +
      +
      +
      {% endblock %} diff --git a/malaria/templates/malaria/edit_post.html b/malaria/templates/malaria/edit_post.html index c118ce55..b26215d7 100644 --- a/malaria/templates/malaria/edit_post.html +++ b/malaria/templates/malaria/edit_post.html @@ -1,56 +1,51 @@ {% extends "infohub/base.html" %} {% block content %} - - Edit Post - - -





      -

      Malaria : infoHub

      -
      -

      Edit Post

      -
      -
      - {% csrf_token %} -
      - -
      - -

      - - {% if form.title_post.errors %} - {% for error in form.title_post.errors %} - {{ error }} - {% endfor %} - {% endif %} - -

      -
      +





      +

      Malaria : infoHub

      +
      +

      Edit Post

      +
      + + {% csrf_token %} +
      + +
      + +

      + + {% if form.title_post.errors %} + {% for error in form.title_post.errors %} + {{ error }} + {% endfor %} + {% endif %} + +

      -
      - -
      - -

      - - {% if form.description_post.errors %} - {% for error in form.description_post.errors %} - {{ error }} - {% endfor %} - {% endif %} - -

      -
      +
      +
      + +
      + +

      + + {% if form.description_post.errors %} + {% for error in form.description_post.errors %} + {{ error }} + {% endfor %} + {% endif %} + +

      -
      -
      - - Cancel -
      +
      +
      +
      + + Cancel
      - -
      -
      -

      - +
      + +
      +
      +

      {% endblock %} diff --git a/malaria/templates/malaria/list_posts.html b/malaria/templates/malaria/list_posts.html index 1b43f96c..bc008c08 100644 --- a/malaria/templates/malaria/list_posts.html +++ b/malaria/templates/malaria/list_posts.html @@ -1,58 +1,53 @@ {% extends "infohub/base.html" %} {% block content %} - - Malaria | infoHub - - -
      -
      -
      -
      -
      -
      -
      -

      - Malaria : infoHub -

      -
      - {% if post_list %} -
      - New Post - - +
      +
      +
      +
      +
      +
      +
      +

      + Malaria : infoHub +

      +
      +{% if post_list %} +
      + New Post +
      + + + + + + + + {% for post in post_list %} - - + + - - - {% for post in post_list %} - - - - - {% endfor %} - -
      +

      Post

      +
      +

      Action

      +
      -

      Post

      -
      -

      Action

      -
      +

      + {{ post.title_post }} +

      +
      + View + Edit + Delete +
      -

      - {{ post.title_post }} -

      -
      - View - Edit - Delete -
      -
      - {% else %} -
      - New Post -

      No Posts

      -
      - {% endif %} - + {% endfor %} + + +
      +{% else %} +
      + New Post +

      No Posts

      +
      +{% endif %} {% endblock %} diff --git a/malaria/templates/malaria/view_post.html b/malaria/templates/malaria/view_post.html index 768a0396..a7c823e0 100644 --- a/malaria/templates/malaria/view_post.html +++ b/malaria/templates/malaria/view_post.html @@ -1,95 +1,90 @@ {% extends "infohub/base.html" %} {% block content %} - - Post | {{ post.title_post }} - - -





      -

      Malaria : infoHub

      -
      -

      View Post

      -
      -
      -
      -

      Title:

      -
      -
      -

      - {{ post.title_post }} -

      -
      +





      +

      Malaria : infoHub

      +
      +

      View Post

      +
      +
      +
      +

      Title:

      -
      -
      -

      Description:

      -
      -
      -

      - {{ post.description_post|linebreaksbr }} -

      -
      +
      +

      + {{ post.title_post }} +

      -
      - +
      +
      +

      Description:

      +
      +
      +

      + {{ post.description_post|linebreaksbr }} +

      -
      -

      Revision History

      -
      - - +
      + + +
      +

      Revision History

      +
      +
      + + + + + + + + + + {% for revpost in revpost_list %} - - - - + + + + - - - {% for revpost in revpost_list %} - - - - - - - {% endfor %} - -
      +

      Author

      +
      +

      Date Updated

      +
      +

      Title

      +
      +

      Description

      +
      -

      Author

      -
      -

      Date Updated

      -
      -

      Title

      -
      -

      Description

      -
      +

      + {% if revpost.owner_rev.user.first_name or revpost.owner_rev.user.last_name %} + {{ revpost.owner_rev.user.first_name }} {{ revpost.owner_rev.user.last_name }} + {% else %} + {{ revpost.owner_rev.user.username }} + {% endif %} +

      +
      +

      + {{ revpost.created }} +

      +
      +

      + {{ revpost.title_post_rev }} +

      +
      +

      + {{ revpost.description_post_rev|linebreaksbr }} +

      +
      -

      - {% if revpost.owner_rev.user.first_name or revpost.owner_rev.user.last_name %} - {{ revpost.owner_rev.user.first_name }} {{ revpost.owner_rev.user.last_name }} - {% else %} - {{ revpost.owner_rev.user.username }} - {% endif %} -

      -
      -

      - {{ revpost.created }} -

      -
      -

      - {{ revpost.title_post_rev }} -

      -
      -

      - {{ revpost.description_post_rev|linebreaksbr }} -

      -
      -
      - + {% endfor %} + + +
      {% endblock %} From da4f7f8777c488f3885d444a39bd1c2447a93e89 Mon Sep 17 00:00:00 2001 From: Irish Medina Date: Tue, 4 Aug 2015 06:55:29 -0500 Subject: [PATCH 14/55] Added profile button in header --- infohub/static/infohub/css/navbar-btn.css | 9 +++++++++ infohub/templates/infohub/base.html | 15 +++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 infohub/static/infohub/css/navbar-btn.css diff --git a/infohub/static/infohub/css/navbar-btn.css b/infohub/static/infohub/css/navbar-btn.css new file mode 100644 index 00000000..8fe3ec52 --- /dev/null +++ b/infohub/static/infohub/css/navbar-btn.css @@ -0,0 +1,9 @@ +.navbar-btn-border { + color: #2c0f00; + border: 3px solid; + padding: 5px; +} + +.navbar-btn-text { + color: #2c0f00; +} diff --git a/infohub/templates/infohub/base.html b/infohub/templates/infohub/base.html index 13ae2bbc..cd2c9b22 100644 --- a/infohub/templates/infohub/base.html +++ b/infohub/templates/infohub/base.html @@ -6,6 +6,7 @@ + @@ -17,6 +18,20 @@
      + {% if user.is_authenticated %} + + {% endif %}
      From 93e7546d59e8b81467746e7ef2e64618d24e7eeb Mon Sep 17 00:00:00 2001 From: Irish Medina Date: Tue, 4 Aug 2015 07:08:33 -0500 Subject: [PATCH 15/55] Added logout button to header --- infohub/static/infohub/css/navbar-btn.css | 1 + infohub/templates/infohub/base.html | 15 +++++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/infohub/static/infohub/css/navbar-btn.css b/infohub/static/infohub/css/navbar-btn.css index 8fe3ec52..2087d4a8 100644 --- a/infohub/static/infohub/css/navbar-btn.css +++ b/infohub/static/infohub/css/navbar-btn.css @@ -2,6 +2,7 @@ color: #2c0f00; border: 3px solid; padding: 5px; + margin: 5px; } .navbar-btn-text { diff --git a/infohub/templates/infohub/base.html b/infohub/templates/infohub/base.html index cd2c9b22..553311f3 100644 --- a/infohub/templates/infohub/base.html +++ b/infohub/templates/infohub/base.html @@ -21,14 +21,21 @@ {% if user.is_authenticated %} + +
    11. + +
{% endif %} From b480a81fe3fcbb3b3a82b2d4c20003893dcaca30 Mon Sep 17 00:00:00 2001 From: Irish Medina Date: Wed, 5 Aug 2015 17:03:28 -0500 Subject: [PATCH 16/55] Updated views so that functionality is only accessible when a user is logged in, otherwise the user is redirected to the login page --- malaria/views.py | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/malaria/views.py b/malaria/views.py index 8b1c8263..38340ad9 100644 --- a/malaria/views.py +++ b/malaria/views.py @@ -5,10 +5,13 @@ from malaria.models import Post from malaria.services import create_post_from_form, create_revpost, \ delete_post_by_id, get_post_by_id, get_revpost_of_owner -from webhub.checker import check def list_posts(request): + + if not request.user.is_authenticated(): + return HttpResponseRedirect(reverse('webhub:index')) + post_list = Post.objects.all() return render(request, 'malaria/list_posts.html', @@ -17,10 +20,8 @@ def list_posts(request): def create_post(request): - # check if the user is logged in - retval = check(request) - if retval is not None: - return retval + if not request.user.is_authenticated(): + return HttpResponseRedirect(reverse('webhub:index')) form = PostForm() if request.method == 'POST': @@ -48,9 +49,8 @@ def create_post(request): def edit_post(request, post_id): - retval = check(request) - if retval is not None: - return retval + if not request.user.is_authenticated(): + return HttpResponseRedirect(reverse('webhub:index')) post = get_post_by_id(post_id) if post: @@ -100,9 +100,8 @@ def edit_post(request, post_id): def delete_post(request, post_id): - retval = check(request) - if retval is not None: - return retval + if not request.user.is_authenticated(): + return HttpResponseRedirect(reverse('webhub:index')) if request.method == 'POST': if delete_post_by_id(post_id): @@ -117,9 +116,8 @@ def delete_post(request, post_id): def view_post(request, post_id): - retval = check(request) - if retval is not None: - return retval + if not request.user.is_authenticated(): + return HttpResponseRedirect(reverse('webhub:index')) post = get_post_by_id(post_id) revpost_list = get_revpost_of_owner(post_id) From 9a5e5ba88d56163f0ff83d81b85e8b384e2f842a Mon Sep 17 00:00:00 2001 From: Irish Medina Date: Wed, 5 Aug 2015 18:05:25 -0500 Subject: [PATCH 17/55] Added tests for get_posts_by_id --- malaria/tests.py | 87 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 malaria/tests.py diff --git a/malaria/tests.py b/malaria/tests.py new file mode 100644 index 00000000..43f5394f --- /dev/null +++ b/malaria/tests.py @@ -0,0 +1,87 @@ +from django.contrib.auth.models import User +from django.test import TestCase +from malaria.models import Post +from malaria.services import get_post_by_id +from webhub.models import Pcuser + + +class MalariaTests(TestCase): + + def setUp(self): + """Setup the test database""" + + self.u1 = User.objects.create_superuser(username='admin', + password='password', + email='') + + self.u1.save() + + self.o1 = Pcuser(user=self.u1) + self.o1.save() + + self.p1 = Post(owner=self.o1, + title_post="Title 1", + description_post="Description 1") + + self.p2 = Post(owner=self.o1, + title_post="Title 2", + description_post="Description 2") + + self.p3 = Post(owner=self.o1, + title_post="Title 3", + description_post="Description 3") + + self.p1.save() + self.p2.save() + self.p3.save() + + def test_get_post_by_id(self): + + post = get_post_by_id(self.p1.id) + self.assertIsNotNone(post) + self.assertEqual(post, self.p1) + self.assertEqual(post.id, self.p1.id) + self.assertEqual(post.owner, self.p1.owner) + self.assertEqual(post.title_post, self.p1.title_post) + self.assertEqual(post.description_post, self.p1.description_post) + + post = get_post_by_id(self.p2.id) + self.assertIsNotNone(post) + self.assertEqual(post, self.p2) + self.assertEqual(post.id, self.p2.id) + self.assertEqual(post.owner, self.p2.owner) + self.assertEqual(post.title_post, self.p2.title_post) + self.assertEqual(post.description_post, self.p2.description_post) + + post = get_post_by_id(self.p3.id) + self.assertIsNotNone(post) + self.assertEqual(post, self.p3) + self.assertEqual(post.id, self.p3.id) + self.assertEqual(post.owner, self.p3.owner) + self.assertEqual(post.title_post, self.p3.title_post) + self.assertEqual(post.description_post, self.p3.description_post) + + self.assertIsNone(get_post_by_id(100)) + self.assertIsNone(get_post_by_id(200)) + self.assertIsNone(get_post_by_id(300)) + + self.assertNotEqual(get_post_by_id(100), self.p1) + self.assertNotEqual(get_post_by_id(200), self.p1) + self.assertNotEqual(get_post_by_id(300), self.p1) + + self.assertNotEqual(get_post_by_id(100), self.p2) + self.assertNotEqual(get_post_by_id(200), self.p2) + self.assertNotEqual(get_post_by_id(300), self.p2) + + self.assertNotEqual(get_post_by_id(100), self.p3) + self.assertNotEqual(get_post_by_id(200), self.p3) + self.assertNotEqual(get_post_by_id(300), self.p3) + + self.assertNotEqual(get_post_by_id(self.p1.id), self.p2) + self.assertNotEqual(get_post_by_id(self.p1.id), self.p3) + + self.assertNotEqual(get_post_by_id(self.p2.id), self.p1) + self.assertNotEqual(get_post_by_id(self.p2.id), self.p3) + + self.assertNotEqual(get_post_by_id(self.p3.id), self.p1) + self.assertNotEqual(get_post_by_id(self.p3.id), self.p2) From 9ca16459b80e0ab669911282051891f8b0d9a1c3 Mon Sep 17 00:00:00 2001 From: Irish Medina Date: Fri, 7 Aug 2015 22:25:12 -0500 Subject: [PATCH 18/55] Added unit tests for deleting posts --- malaria/tests.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/malaria/tests.py b/malaria/tests.py index 43f5394f..c4a61443 100644 --- a/malaria/tests.py +++ b/malaria/tests.py @@ -1,7 +1,7 @@ from django.contrib.auth.models import User from django.test import TestCase from malaria.models import Post -from malaria.services import get_post_by_id +from malaria.services import delete_post_by_id, get_post_by_id from webhub.models import Pcuser @@ -35,6 +35,19 @@ def setUp(self): self.p2.save() self.p3.save() + def test_delete_post_by_id(self): + + self.assertTrue(delete_post_by_id(self.p1.id)) + self.assertTrue(delete_post_by_id(self.p2.id)) + self.assertTrue(delete_post_by_id(self.p3.id)) + + self.assertFalse(delete_post_by_id(100)) + self.assertFalse(delete_post_by_id(200)) + self.assertFalse(delete_post_by_id(300)) + self.assertFalse(delete_post_by_id(400)) + self.assertFalse(delete_post_by_id(500)) + self.assertFalse(delete_post_by_id(600)) + def test_get_post_by_id(self): post = get_post_by_id(self.p1.id) From c7dc6a6968dfdd5f7334032b14ca67ec6d569691 Mon Sep 17 00:00:00 2001 From: Irish Medina Date: Fri, 7 Aug 2015 23:01:16 -0500 Subject: [PATCH 19/55] Added unit tests for create_revpost method --- malaria/tests.py | 131 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 129 insertions(+), 2 deletions(-) diff --git a/malaria/tests.py b/malaria/tests.py index c4a61443..f96f8f55 100644 --- a/malaria/tests.py +++ b/malaria/tests.py @@ -1,7 +1,7 @@ from django.contrib.auth.models import User from django.test import TestCase -from malaria.models import Post -from malaria.services import delete_post_by_id, get_post_by_id +from malaria.models import Post, RevPost +from malaria.services import create_revpost, delete_post_by_id, get_post_by_id from webhub.models import Pcuser @@ -35,18 +35,129 @@ def setUp(self): self.p2.save() self.p3.save() + def test_create_revpost(self): + + revpost = create_revpost(self.o1, + self.p1, + self.p1.title_post, + self.p1.description_post) + + self.assertIsNotNone(revpost) + self.assertEqual(RevPost.objects.get(pk=revpost.id), revpost) + self.assertEqual(revpost.owner_rev, self.o1) + self.assertEqual(revpost.owner_rev_post, self.p1) + self.assertEqual(revpost.title_post_rev, self.p1.title_post) + self.assertEqual(revpost.description_post_rev, self.p1.description_post) + self.assertEqual(revpost.title_change, True) + self.assertEqual(revpost.description_change, True) + + revpost = create_revpost(self.o1, + self.p2, + self.p2.title_post, + self.p2.description_post) + + self.assertIsNotNone(revpost) + self.assertEqual(RevPost.objects.get(pk=revpost.id), revpost) + self.assertEqual(revpost.owner_rev, self.o1) + self.assertEqual(revpost.owner_rev_post, self.p2) + self.assertEqual(revpost.title_post_rev, self.p2.title_post) + self.assertEqual(revpost.description_post_rev, self.p2.description_post) + self.assertEqual(revpost.title_change, True) + self.assertEqual(revpost.description_change, True) + + revpost = create_revpost(self.o1, + self.p3, + self.p3.title_post, + self.p3.description_post) + + self.assertIsNotNone(revpost) + self.assertEqual(RevPost.objects.get(pk=revpost.id), revpost) + self.assertEqual(revpost.owner_rev, self.o1) + self.assertEqual(revpost.owner_rev_post, self.p3) + self.assertEqual(revpost.title_post_rev, self.p3.title_post) + self.assertEqual(revpost.description_post_rev, self.p3.description_post) + self.assertEqual(revpost.title_change, True) + self.assertEqual(revpost.description_change, True) + + revpost = create_revpost(None, + self.p1, + self.p1.title_post, + self.p1.description_post) + + self.assertIsNone(revpost) + + revpost = create_revpost(self.o1, + None, + self.p1.title_post, + self.p1.description_post) + + self.assertIsNone(revpost) + + revpost = create_revpost(self.o1, + self.p1, + None, + self.p1.description_post) + + self.assertIsNone(revpost) + + revpost = create_revpost(self.o1, + self.p1, + self.p1.title_post, + None) + + self.assertIsNone(revpost) + + revpost = create_revpost(None, + self.p1, + self.p1.title_post, + None) + + self.assertIsNone(revpost) + + revpost = create_revpost(self.o1, + None, + self.p1.title_post, + None) + + self.assertIsNone(revpost) + + revpost = create_revpost(self.o1, + None, + None, + None) + + self.assertIsNone(revpost) + + revpost = create_revpost(None, + None, + None, + self.p1.description_post) + + self.assertIsNone(revpost) + + revpost = create_revpost(None, + None, + None, + None) + + self.assertIsNone(revpost) + def test_delete_post_by_id(self): self.assertTrue(delete_post_by_id(self.p1.id)) self.assertTrue(delete_post_by_id(self.p2.id)) self.assertTrue(delete_post_by_id(self.p3.id)) + self.assertFalse(delete_post_by_id(-999999)) + self.assertFalse(delete_post_by_id(-1)) self.assertFalse(delete_post_by_id(100)) self.assertFalse(delete_post_by_id(200)) self.assertFalse(delete_post_by_id(300)) self.assertFalse(delete_post_by_id(400)) self.assertFalse(delete_post_by_id(500)) self.assertFalse(delete_post_by_id(600)) + self.assertFalse(delete_post_by_id(999)) + self.assertFalse(delete_post_by_id(999999)) def test_get_post_by_id(self): @@ -74,21 +185,37 @@ def test_get_post_by_id(self): self.assertEqual(post.title_post, self.p3.title_post) self.assertEqual(post.description_post, self.p3.description_post) + self.assertIsNone(get_post_by_id(-999999)) + self.assertIsNone(get_post_by_id(-1)) self.assertIsNone(get_post_by_id(100)) self.assertIsNone(get_post_by_id(200)) self.assertIsNone(get_post_by_id(300)) + self.assertIsNone(get_post_by_id(999)) + self.assertIsNone(get_post_by_id(999999)) + self.assertNotEqual(get_post_by_id(-999999), self.p1) + self.assertNotEqual(get_post_by_id(-1), self.p1) self.assertNotEqual(get_post_by_id(100), self.p1) self.assertNotEqual(get_post_by_id(200), self.p1) self.assertNotEqual(get_post_by_id(300), self.p1) + self.assertNotEqual(get_post_by_id(999), self.p1) + self.assertNotEqual(get_post_by_id(999999), self.p1) + self.assertNotEqual(get_post_by_id(-999999), self.p2) + self.assertNotEqual(get_post_by_id(-1), self.p2) self.assertNotEqual(get_post_by_id(100), self.p2) self.assertNotEqual(get_post_by_id(200), self.p2) self.assertNotEqual(get_post_by_id(300), self.p2) + self.assertNotEqual(get_post_by_id(999), self.p2) + self.assertNotEqual(get_post_by_id(999999), self.p2) + self.assertNotEqual(get_post_by_id(-999999), self.p3) + self.assertNotEqual(get_post_by_id(-1), self.p3) self.assertNotEqual(get_post_by_id(100), self.p3) self.assertNotEqual(get_post_by_id(200), self.p3) self.assertNotEqual(get_post_by_id(300), self.p3) + self.assertNotEqual(get_post_by_id(999), self.p3) + self.assertNotEqual(get_post_by_id(999999), self.p3) self.assertNotEqual(get_post_by_id(self.p1.id), self.p2) self.assertNotEqual(get_post_by_id(self.p1.id), self.p3) From 5498b87f540dce6502265ff16e830874550332c0 Mon Sep 17 00:00:00 2001 From: Irish Medina Date: Mon, 10 Aug 2015 23:21:02 -0500 Subject: [PATCH 20/55] Added unit tests for get_revposts_of_owner function --- malaria/services.py | 8 +- malaria/tests.py | 229 +++++++++++++++++++++++++++++++++++++++++++- malaria/views.py | 4 +- 3 files changed, 231 insertions(+), 10 deletions(-) diff --git a/malaria/services.py b/malaria/services.py index cb09b5fa..5cf681dd 100644 --- a/malaria/services.py +++ b/malaria/services.py @@ -56,12 +56,12 @@ def get_post_by_id(post_id): return post -def get_revpost_of_owner(post_id): +def get_revposts_of_owner(post_id): - revpost = None + revpost_list = None try: - revpost = RevPost.objects.filter(owner_rev_post_id=post_id) + revpost_list = RevPost.objects.filter(owner_rev_post_id=post_id) except ObjectDoesNotExist: pass - return revpost + return revpost_list diff --git a/malaria/tests.py b/malaria/tests.py index f96f8f55..050dac70 100644 --- a/malaria/tests.py +++ b/malaria/tests.py @@ -1,7 +1,7 @@ from django.contrib.auth.models import User from django.test import TestCase from malaria.models import Post, RevPost -from malaria.services import create_revpost, delete_post_by_id, get_post_by_id +from malaria.services import create_revpost, delete_post_by_id, get_post_by_id, get_revposts_of_owner from webhub.models import Pcuser @@ -14,10 +14,18 @@ def setUp(self): password='password', email='') + self.u2 = User.objects.create_superuser(username='admin2', + password='password2', + email='') + self.u1.save() + self.u2.save() self.o1 = Pcuser(user=self.u1) + self.o2 = Pcuser(user=self.u2) + self.o1.save() + self.o2.save() self.p1 = Post(owner=self.o1, title_post="Title 1", @@ -31,9 +39,19 @@ def setUp(self): title_post="Title 3", description_post="Description 3") + self.p4 = Post(owner=self.o2, + title_post="Title 4", + description_post="Description 4") + + self.p5 = Post(owner=self.o2, + title_post="Title 5", + description_post="Description 5") + self.p1.save() self.p2.save() self.p3.save() + self.p4.save() + self.p5.save() def test_create_revpost(self): @@ -47,7 +65,8 @@ def test_create_revpost(self): self.assertEqual(revpost.owner_rev, self.o1) self.assertEqual(revpost.owner_rev_post, self.p1) self.assertEqual(revpost.title_post_rev, self.p1.title_post) - self.assertEqual(revpost.description_post_rev, self.p1.description_post) + self.assertEqual(revpost.description_post_rev, + self.p1.description_post) self.assertEqual(revpost.title_change, True) self.assertEqual(revpost.description_change, True) @@ -61,7 +80,8 @@ def test_create_revpost(self): self.assertEqual(revpost.owner_rev, self.o1) self.assertEqual(revpost.owner_rev_post, self.p2) self.assertEqual(revpost.title_post_rev, self.p2.title_post) - self.assertEqual(revpost.description_post_rev, self.p2.description_post) + self.assertEqual(revpost.description_post_rev, + self.p2.description_post) self.assertEqual(revpost.title_change, True) self.assertEqual(revpost.description_change, True) @@ -75,7 +95,8 @@ def test_create_revpost(self): self.assertEqual(revpost.owner_rev, self.o1) self.assertEqual(revpost.owner_rev_post, self.p3) self.assertEqual(revpost.title_post_rev, self.p3.title_post) - self.assertEqual(revpost.description_post_rev, self.p3.description_post) + self.assertEqual(revpost.description_post_rev, + self.p3.description_post) self.assertEqual(revpost.title_change, True) self.assertEqual(revpost.description_change, True) @@ -225,3 +246,203 @@ def test_get_post_by_id(self): self.assertNotEqual(get_post_by_id(self.p3.id), self.p1) self.assertNotEqual(get_post_by_id(self.p3.id), self.p2) + + def test_get_revposts_of_owner(self): + + revpost_list = get_revposts_of_owner(self.p1.id) + self.assertEqual(len(revpost_list), 0) + + revpost_1 = create_revpost(self.o1, + self.p1, + "Test title 1", + "Test description 1") + revpost_list = get_revposts_of_owner(self.p1.id) + self.assertEqual(len(revpost_list), 1) + self.assertIn(revpost_1, revpost_list) + revpost_compare = RevPost.objects.get(pk=revpost_1.id) + self.assertEqual(revpost_compare.owner_rev, self.o1) + self.assertEqual(revpost_compare.owner_rev_post, self.p1) + self.assertEqual(revpost_compare.title_post_rev, "Test title 1") + self.assertEqual(revpost_compare.description_post_rev, + "Test description 1") + self.assertEqual(revpost_compare.title_change, True) + self.assertEqual(revpost_compare.description_change, True) + + revpost_2 = create_revpost(self.o1, + self.p1, + "Test title 2", + "Test description 2") + revpost_list = get_revposts_of_owner(self.p1.id) + self.assertEqual(len(revpost_list), 2) + self.assertIn(revpost_1, revpost_list) + self.assertIn(revpost_2, revpost_list) + revpost_compare = RevPost.objects.get(pk=revpost_2.id) + self.assertEqual(revpost_compare.owner_rev, self.o1) + self.assertEqual(revpost_compare.owner_rev_post, self.p1) + self.assertEqual(revpost_compare.title_post_rev, "Test title 2") + self.assertEqual(revpost_compare.description_post_rev, + "Test description 2") + self.assertEqual(revpost_compare.title_change, True) + self.assertEqual(revpost_compare.description_change, True) + + revpost_3 = create_revpost(self.o1, + self.p1, + "Test title 3", + "Test description 3") + revpost_list = get_revposts_of_owner(self.p1.id) + self.assertEqual(len(revpost_list), 3) + self.assertIn(revpost_1, revpost_list) + self.assertIn(revpost_2, revpost_list) + self.assertIn(revpost_3, revpost_list) + revpost_compare = RevPost.objects.get(pk=revpost_3.id) + self.assertEqual(revpost_compare.owner_rev, self.o1) + self.assertEqual(revpost_compare.owner_rev_post, self.p1) + self.assertEqual(revpost_compare.title_post_rev, "Test title 3") + self.assertEqual(revpost_compare.description_post_rev, + "Test description 3") + self.assertEqual(revpost_compare.title_change, True) + self.assertEqual(revpost_compare.description_change, True) + + revpost_list = get_revposts_of_owner(self.p2.id) + self.assertEqual(len(revpost_list), 0) + + revpost_1 = create_revpost(self.o1, + self.p2, + "Test title 1", + "Test description 1") + revpost_list = get_revposts_of_owner(self.p2.id) + self.assertEqual(len(revpost_list), 1) + self.assertIn(revpost_1, revpost_list) + revpost_compare = RevPost.objects.get(pk=revpost_1.id) + self.assertEqual(revpost_compare.owner_rev, self.o1) + self.assertEqual(revpost_compare.owner_rev_post, self.p2) + self.assertEqual(revpost_compare.title_post_rev, "Test title 1") + self.assertEqual(revpost_compare.description_post_rev, + "Test description 1") + self.assertEqual(revpost_compare.title_change, True) + self.assertEqual(revpost_compare.description_change, True) + + revpost_2 = create_revpost(self.o1, + self.p2, + "Test title 2", + "Test description 2") + revpost_list = get_revposts_of_owner(self.p2.id) + self.assertEqual(len(revpost_list), 2) + self.assertIn(revpost_1, revpost_list) + self.assertIn(revpost_2, revpost_list) + revpost_compare = RevPost.objects.get(pk=revpost_2.id) + self.assertEqual(revpost_compare.owner_rev, self.o1) + self.assertEqual(revpost_compare.owner_rev_post, self.p2) + self.assertEqual(revpost_compare.title_post_rev, "Test title 2") + self.assertEqual(revpost_compare.description_post_rev, + "Test description 2") + self.assertEqual(revpost_compare.title_change, True) + self.assertEqual(revpost_compare.description_change, True) + + revpost_3 = create_revpost(self.o1, + self.p2, + "Test title 3", + "Test description 3") + revpost_list = get_revposts_of_owner(self.p2.id) + self.assertEqual(len(revpost_list), 3) + self.assertIn(revpost_1, revpost_list) + self.assertIn(revpost_2, revpost_list) + self.assertIn(revpost_3, revpost_list) + revpost_compare = RevPost.objects.get(pk=revpost_3.id) + self.assertEqual(revpost_compare.owner_rev, self.o1) + self.assertEqual(revpost_compare.owner_rev_post, self.p2) + self.assertEqual(revpost_compare.title_post_rev, "Test title 3") + self.assertEqual(revpost_compare.description_post_rev, + "Test description 3") + self.assertEqual(revpost_compare.title_change, True) + self.assertEqual(revpost_compare.description_change, True) + + revpost_list = get_revposts_of_owner(self.p4.id) + self.assertEqual(len(revpost_list), 0) + + revpost_1 = create_revpost(self.o2, + self.p4, + "Test title 1", + "Test description 1") + revpost_list = get_revposts_of_owner(self.p4.id) + self.assertEqual(len(revpost_list), 1) + self.assertIn(revpost_1, revpost_list) + revpost_compare = RevPost.objects.get(pk=revpost_1.id) + self.assertEqual(revpost_compare.owner_rev, self.o2) + self.assertEqual(revpost_compare.owner_rev_post, self.p4) + self.assertEqual(revpost_compare.title_post_rev, "Test title 1") + self.assertEqual(revpost_compare.description_post_rev, + "Test description 1") + self.assertEqual(revpost_compare.title_change, True) + self.assertEqual(revpost_compare.description_change, True) + + revpost_2 = create_revpost(self.o2, + self.p4, + "Test title 2", + "Test description 2") + revpost_list = get_revposts_of_owner(self.p4.id) + self.assertEqual(len(revpost_list), 2) + self.assertIn(revpost_1, revpost_list) + self.assertIn(revpost_2, revpost_list) + revpost_compare = RevPost.objects.get(pk=revpost_2.id) + self.assertEqual(revpost_compare.owner_rev, self.o2) + self.assertEqual(revpost_compare.owner_rev_post, self.p4) + self.assertEqual(revpost_compare.title_post_rev, "Test title 2") + self.assertEqual(revpost_compare.description_post_rev, + "Test description 2") + self.assertEqual(revpost_compare.title_change, True) + self.assertEqual(revpost_compare.description_change, True) + + revpost_1 = create_revpost(self.o2, + self.p5, + "Test title 1", + "Test description 1") + revpost_list = get_revposts_of_owner(self.p5.id) + self.assertEqual(len(revpost_list), 1) + self.assertIn(revpost_1, revpost_list) + revpost_compare = RevPost.objects.get(pk=revpost_1.id) + self.assertEqual(revpost_compare.owner_rev, self.o2) + self.assertEqual(revpost_compare.owner_rev_post, self.p5) + self.assertEqual(revpost_compare.title_post_rev, "Test title 1") + self.assertEqual(revpost_compare.description_post_rev, + "Test description 1") + self.assertEqual(revpost_compare.title_change, True) + self.assertEqual(revpost_compare.description_change, True) + + revpost_2 = create_revpost(self.o2, + self.p5, + "Test title 2", + "Test description 2") + revpost_list = get_revposts_of_owner(self.p5.id) + self.assertEqual(len(revpost_list), 2) + self.assertIn(revpost_1, revpost_list) + self.assertIn(revpost_2, revpost_list) + revpost_compare = RevPost.objects.get(pk=revpost_2.id) + self.assertEqual(revpost_compare.owner_rev, self.o2) + self.assertEqual(revpost_compare.owner_rev_post, self.p5) + self.assertEqual(revpost_compare.title_post_rev, "Test title 2") + self.assertEqual(revpost_compare.description_post_rev, + "Test description 2") + self.assertEqual(revpost_compare.title_change, True) + self.assertEqual(revpost_compare.description_change, True) + + revpost_list = get_revposts_of_owner(-999999) + self.assertEqual(len(revpost_list), 0) + + revpost_list = get_revposts_of_owner(-1) + self.assertEqual(len(revpost_list), 0) + + revpost_list = get_revposts_of_owner(100) + self.assertEqual(len(revpost_list), 0) + + revpost_list = get_revposts_of_owner(200) + self.assertEqual(len(revpost_list), 0) + + revpost_list = get_revposts_of_owner(300) + self.assertEqual(len(revpost_list), 0) + + revpost_list = get_revposts_of_owner(999) + self.assertEqual(len(revpost_list), 0) + + revpost_list = get_revposts_of_owner(999999) + self.assertEqual(len(revpost_list), 0) diff --git a/malaria/views.py b/malaria/views.py index 38340ad9..2eaae05a 100644 --- a/malaria/views.py +++ b/malaria/views.py @@ -4,7 +4,7 @@ from malaria.forms import PostForm from malaria.models import Post from malaria.services import create_post_from_form, create_revpost, \ - delete_post_by_id, get_post_by_id, get_revpost_of_owner + delete_post_by_id, get_post_by_id, get_revposts_of_owner def list_posts(request): @@ -120,7 +120,7 @@ def view_post(request, post_id): return HttpResponseRedirect(reverse('webhub:index')) post = get_post_by_id(post_id) - revpost_list = get_revpost_of_owner(post_id) + revpost_list = get_revposts_of_owner(post_id) # revpost may not exist yet so do not check it if post: return render(request, From 109326c0b9ddde6330f5c6f603deab7b3a6fd600 Mon Sep 17 00:00:00 2001 From: Irish Medina Date: Thu, 13 Aug 2015 21:26:58 -0500 Subject: [PATCH 21/55] Added test cases with an additional owner --- malaria/tests.py | 77 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 75 insertions(+), 2 deletions(-) diff --git a/malaria/tests.py b/malaria/tests.py index 050dac70..f7b5b5be 100644 --- a/malaria/tests.py +++ b/malaria/tests.py @@ -31,7 +31,7 @@ def setUp(self): title_post="Title 1", description_post="Description 1") - self.p2 = Post(owner=self.o1, + self.p2 = Post(owner=self.o2, title_post="Title 2", description_post="Description 2") @@ -43,7 +43,7 @@ def setUp(self): title_post="Title 4", description_post="Description 4") - self.p5 = Post(owner=self.o2, + self.p5 = Post(owner=self.o1, title_post="Title 5", description_post="Description 5") @@ -100,6 +100,79 @@ def test_create_revpost(self): self.assertEqual(revpost.title_change, True) self.assertEqual(revpost.description_change, True) + revpost = create_revpost(self.o2, + self.p1, + self.p1.title_post, + self.p1.description_post) + + self.assertIsNotNone(revpost) + self.assertEqual(RevPost.objects.get(pk=revpost.id), revpost) + self.assertEqual(revpost.owner_rev, self.o2) + self.assertEqual(revpost.owner_rev_post, self.p1) + self.assertEqual(revpost.title_post_rev, self.p1.title_post) + self.assertEqual(revpost.description_post_rev, + self.p1.description_post) + self.assertEqual(revpost.title_change, True) + self.assertEqual(revpost.description_change, True) + + revpost = create_revpost(self.o2, + self.p4, + self.p4.title_post, + self.p4.description_post) + + self.assertIsNotNone(revpost) + self.assertEqual(RevPost.objects.get(pk=revpost.id), revpost) + self.assertEqual(revpost.owner_rev, self.o2) + self.assertEqual(revpost.owner_rev_post, self.p4) + self.assertEqual(revpost.title_post_rev, self.p4.title_post) + self.assertEqual(revpost.description_post_rev, + self.p4.description_post) + self.assertEqual(revpost.title_change, True) + self.assertEqual(revpost.description_change, True) + + revpost = create_revpost(self.o2, + self.p5, + self.p5.title_post, + self.p5.description_post) + + self.assertIsNotNone(revpost) + self.assertEqual(RevPost.objects.get(pk=revpost.id), revpost) + self.assertEqual(revpost.owner_rev, self.o2) + self.assertEqual(revpost.owner_rev_post, self.p5) + self.assertEqual(revpost.title_post_rev, self.p5.title_post) + self.assertEqual(revpost.description_post_rev, + self.p5.description_post) + self.assertEqual(revpost.title_change, True) + self.assertEqual(revpost.description_change, True) + + revpost_list = RevPost.objects.filter(owner_rev_id=self.o1.id) + self.assertIsNotNone(revpost_list) + self.assertEqual(len(revpost_list), 3) + self.assertIsNotNone(RevPost.objects.filter(owner_rev=self.o1, + owner_rev_post=self.p1)) + self.assertIsNotNone(RevPost.objects.filter(owner_rev=self.o1, + owner_rev_post=self.p2)) + self.assertIsNotNone(RevPost.objects.filter(owner_rev=self.o1, + owner_rev_post=self.p3)) + self.assertFalse(RevPost.objects.filter(owner_rev=self.o1, + owner_rev_post=self.p4)) + self.assertFalse(RevPost.objects.filter(owner_rev=self.o1, + owner_rev_post=self.p5)) + + revpost_list = RevPost.objects.filter(owner_rev_id=self.o2.id) + self.assertIsNotNone(revpost_list) + self.assertEqual(len(revpost_list), 3) + self.assertIsNotNone(RevPost.objects.filter(owner_rev=self.o2, + owner_rev_post=self.p1)) + self.assertIsNotNone(RevPost.objects.filter(owner_rev=self.o2, + owner_rev_post=self.p4)) + self.assertIsNotNone(RevPost.objects.filter(owner_rev=self.o2, + owner_rev_post=self.p5)) + self.assertFalse(RevPost.objects.filter(owner_rev=self.o2, + owner_rev_post=self.p2)) + self.assertFalse(RevPost.objects.filter(owner_rev=self.o2, + owner_rev_post=self.p3)) + revpost = create_revpost(None, self.p1, self.p1.title_post, From 41e7a42e6b23ffabe316aea0bf8a8a5e7760a164 Mon Sep 17 00:00:00 2001 From: Irish Medina Date: Thu, 13 Aug 2015 21:29:21 -0500 Subject: [PATCH 22/55] Put import on multiple lines to comply with PEP8 --- malaria/tests.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/malaria/tests.py b/malaria/tests.py index f7b5b5be..83ef34d4 100644 --- a/malaria/tests.py +++ b/malaria/tests.py @@ -1,7 +1,10 @@ from django.contrib.auth.models import User from django.test import TestCase from malaria.models import Post, RevPost -from malaria.services import create_revpost, delete_post_by_id, get_post_by_id, get_revposts_of_owner +from malaria.services import (create_revpost, + delete_post_by_id, + get_post_by_id, + get_revposts_of_owner) from webhub.models import Pcuser From 5b354387b0c7f567597f08820f644532f88434d5 Mon Sep 17 00:00:00 2001 From: Irish Medina Date: Thu, 20 Aug 2015 00:30:25 -0500 Subject: [PATCH 23/55] Added .travis.yml file --- .travis.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..60be448f --- /dev/null +++ b/.travis.yml @@ -0,0 +1,8 @@ +language: python +python: + - "2.6" + - "2.7" +# command to install dependencies +install: "pip install -r requirements.txt" +# command to run tests +script: python manage.py test From 7c86f0f414108f29d73e01a1838554d389d2a854 Mon Sep 17 00:00:00 2001 From: Irish Medina Date: Thu, 20 Aug 2015 00:35:45 -0500 Subject: [PATCH 24/55] Updated .travis.yml --- .travis.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 60be448f..ed7e7197 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,8 @@ language: python python: - "2.6" - "2.7" -# command to install dependencies -install: "pip install -r requirements.txt" -# command to run tests +install: + - "pip install -r requirements.txt" +before_script: + - psql -c "create role myuser with createrole createdb login password 'mypassword';" -U postgres script: python manage.py test From 0693cfaad99472caa7db85f52f43b95647771c00 Mon Sep 17 00:00:00 2001 From: Irish Medina Date: Thu, 20 Aug 2015 00:38:24 -0500 Subject: [PATCH 25/55] Updated .travis.yml --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index ed7e7197..6f468582 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,4 +6,5 @@ install: - "pip install -r requirements.txt" before_script: - psql -c "create role myuser with createrole createdb login password 'mypassword';" -U postgres + - psql -c "create database webapp;" -U postgres script: python manage.py test From 248026f3c51f20e6ccd937e2eb55d1d91d99bb73 Mon Sep 17 00:00:00 2001 From: Irish Medina Date: Thu, 20 Aug 2015 00:47:26 -0500 Subject: [PATCH 26/55] Added Travis CI status image in README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e25f4316..8f175129 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -

Malaria App Project

+

Malaria App Project [![Build Status](https://travis-ci.org/Nerdylicious/app-web-server.svg?branch=master)](https://travis-ci.org/Nerdylicious/app-web-server)

The malaria-app-readme repository is intended to be the central repo for discussions, decision making, and feedback about the project goals and features so that the user experience across platforms is uniform. Comments and coding for a specific platform can happen at the repositories linked to below. From 98eb4ee9075505e76555900014c7854bab919f43 Mon Sep 17 00:00:00 2001 From: Irish Medina Date: Thu, 20 Aug 2015 00:49:28 -0500 Subject: [PATCH 27/55] Added Travis CI status image in README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8f175129..2a253261 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ -

Malaria App Project [![Build Status](https://travis-ci.org/Nerdylicious/app-web-server.svg?branch=master)](https://travis-ci.org/Nerdylicious/app-web-server)

+Malaria App Project [![Build Status](https://travis-ci.org/Nerdylicious/app-web-server.svg?branch=master)](https://travis-ci.org/Nerdylicious/app-web-server) +============== The malaria-app-readme repository is intended to be the central repo for discussions, decision making, and feedback about the project goals and features so that the user experience across platforms is uniform. Comments and coding for a specific platform can happen at the repositories linked to below. From 6ae95a158b6ee217448a13d57bc5328e2137d67b Mon Sep 17 00:00:00 2001 From: Irish Medina Date: Thu, 20 Aug 2015 00:53:06 -0500 Subject: [PATCH 28/55] Update .travis.yml file Updated .travis.yml file to make my build pass --- .travis.yml | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index b3f649d4..6f468582 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,13 +2,9 @@ language: python python: - "2.6" - "2.7" - - "3.2" - - "3.3" - - "3.4" - - "nightly" - -# command to install dependencies -install: "pip install -r requirements.txt" - -# command to run tests -script: nosetests +install: + - "pip install -r requirements.txt" +before_script: + - psql -c "create role myuser with createrole createdb login password 'mypassword';" -U postgres + - psql -c "create database webapp;" -U postgres +script: python manage.py test From 50f00e0347ec4621f766c5d826a677c031096823 Mon Sep 17 00:00:00 2001 From: Irish Medina Date: Thu, 20 Aug 2015 01:08:26 -0500 Subject: [PATCH 29/55] Update .travis.yml file so that builds are sent to container-based infrastructure --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 6f468582..ff6705a5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,4 @@ +sudo: false language: python python: - "2.6" From 2c2bb8ac0ac7b0b406b8bd0c2da7756e3aabffdc Mon Sep 17 00:00:00 2001 From: Irish Medina Date: Thu, 20 Aug 2015 01:22:41 -0500 Subject: [PATCH 30/55] Updated .travis.yml file --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 6f468582..ff6705a5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,4 @@ +sudo: false language: python python: - "2.6" From 298b99bba219f0efa5e348b89a1e08821aa000ec Mon Sep 17 00:00:00 2001 From: medhach Date: Wed, 15 Jun 2016 22:30:02 +0530 Subject: [PATCH 31/55] PeaceTrack App removed --- infohub/settings.py | 1 - infohub/urls.py | 1 - peacetrack/__init__.py | 0 peacetrack/checker.py | 36 - peacetrack/models.py | 203 - peacetrack/serializers.py | 95 - peacetrack/tests.py | 8 - .../ui/bootstrap/css/bootstrap-theme.css | 347 - .../ui/bootstrap/css/bootstrap-theme.css.map | 1 - .../ui/bootstrap/css/bootstrap-theme.min.css | 7 - peacetrack/ui/bootstrap/css/bootstrap.css | 5785 ----------------- peacetrack/ui/bootstrap/css/bootstrap.css.map | 1 - peacetrack/ui/bootstrap/css/bootstrap.min.css | 7 - .../fonts/glyphicons-halflings-regular.eot | Bin 20335 -> 0 bytes .../fonts/glyphicons-halflings-regular.svg | 229 - .../fonts/glyphicons-halflings-regular.ttf | Bin 41280 -> 0 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 23320 -> 0 bytes peacetrack/ui/bootstrap/js/bootstrap.js | 1951 ------ peacetrack/ui/bootstrap/js/bootstrap.min.js | 6 - peacetrack/ui/footer.html | 65 - peacetrack/ui/header.html | 45 - peacetrack/ui/peacetrack.html | 28 - peacetrack/ui/summary.html | 89 - peacetrack/ui/volunteer.html | 61 - peacetrack/urls.py | 22 - peacetrack/views.py | 676 -- ui/dashboard.html | 20 - webhub/admin.py | 15 +- webhub/serializers.py | 67 - webhub/urls.py | 14 - 30 files changed, 1 insertion(+), 9779 deletions(-) delete mode 100644 peacetrack/__init__.py delete mode 100755 peacetrack/checker.py delete mode 100644 peacetrack/models.py delete mode 100644 peacetrack/serializers.py delete mode 100644 peacetrack/tests.py delete mode 100644 peacetrack/ui/bootstrap/css/bootstrap-theme.css delete mode 100644 peacetrack/ui/bootstrap/css/bootstrap-theme.css.map delete mode 100644 peacetrack/ui/bootstrap/css/bootstrap-theme.min.css delete mode 100644 peacetrack/ui/bootstrap/css/bootstrap.css delete mode 100644 peacetrack/ui/bootstrap/css/bootstrap.css.map delete mode 100644 peacetrack/ui/bootstrap/css/bootstrap.min.css delete mode 100644 peacetrack/ui/bootstrap/fonts/glyphicons-halflings-regular.eot delete mode 100644 peacetrack/ui/bootstrap/fonts/glyphicons-halflings-regular.svg delete mode 100644 peacetrack/ui/bootstrap/fonts/glyphicons-halflings-regular.ttf delete mode 100644 peacetrack/ui/bootstrap/fonts/glyphicons-halflings-regular.woff delete mode 100644 peacetrack/ui/bootstrap/js/bootstrap.js delete mode 100644 peacetrack/ui/bootstrap/js/bootstrap.min.js delete mode 100644 peacetrack/ui/footer.html delete mode 100644 peacetrack/ui/header.html delete mode 100644 peacetrack/ui/peacetrack.html delete mode 100644 peacetrack/ui/summary.html delete mode 100644 peacetrack/ui/volunteer.html delete mode 100644 peacetrack/urls.py delete mode 100644 peacetrack/views.py diff --git a/infohub/settings.py b/infohub/settings.py index 77152166..7144b28e 100644 --- a/infohub/settings.py +++ b/infohub/settings.py @@ -31,7 +31,6 @@ 'infohub', 'malaria', 'malaria_api', - 'peacetrack', 'webhub', ) diff --git a/infohub/urls.py b/infohub/urls.py index c0aac6ae..30d2947a 100644 --- a/infohub/urls.py +++ b/infohub/urls.py @@ -8,6 +8,5 @@ url(r'^', include('webhub.urls')), url(r'^docs/', include('rest_framework_swagger.urls')), url(r'^malaria/', include('malaria.urls', namespace='malaria')), - url(r'^peacetrack/', include('peacetrack.urls')), url(r'^webhub/', include('webhub.urls', namespace='webhub')), ) diff --git a/peacetrack/__init__.py b/peacetrack/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/peacetrack/checker.py b/peacetrack/checker.py deleted file mode 100755 index 531d428d..00000000 --- a/peacetrack/checker.py +++ /dev/null @@ -1,36 +0,0 @@ -#Version : Phython/Django 2.7.6, PostgreSQL 9.3.4 -#Author : Vaibhavi Desai -#Github username : desaivaibhavi -#email : ranihaileydesai@gmail.com - -from django.http import HttpResponse -from django.utils import timezone -from webhub.models import * -from django.views.decorators.csrf import csrf_exempt -import datetime -from django.contrib.auth import authenticate, login, logout -from django.contrib.auth.models import User -from django.shortcuts import redirect -from django.db.models import Count, Min, Sum, Avg -import uuid -import jinja2 -from jinja2.ext import loopcontrols - -jinja_environ = jinja2.Environment(loader=jinja2.FileSystemLoader(['ui']), extensions=[loopcontrols]) - -#Checker function used to see if user is logged in and verified etc. Made separately instead of writing repeatedly -def check(request): - - #Check if user is logged in - if not request.user.is_authenticated(): - return HttpResponse(jinja_environ.get_template('index.html').render({"pcuser":None})) - - #Check if user has an associated rider - #(This will be false if the admin logs in) - try: - request.user.pcuser - except: - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, - "text":'

No Pcuser associated! Add a pcuser from admin

'})) - - return None diff --git a/peacetrack/models.py b/peacetrack/models.py deleted file mode 100644 index 47f7373e..00000000 --- a/peacetrack/models.py +++ /dev/null @@ -1,203 +0,0 @@ -#Version : Phython/Django 2.7.6, PostgreSQL 9.3.4 -#Author : Vaibhavi Desai -#Github username : desaivaibhavi -#email : ranihaileydesai@gmail.com - -from django.db import models -from django import forms -from django.utils import timezone -from django.contrib.auth.models import User -import os -from uuid import uuid4 -from paths import cpspath - - -#Peacetrack begins here - -class Region(models.Model): - #Name of the region - region_name = models.CharField(max_length=300) - - def __unicode__(self): - return self.region_name - -class Sector(models.Model): - #Name of the sector - sector_name = models.CharField(max_length=300) - #Description of the sector - sector_desc = models.CharField(max_length=3000) - #Code of the sector - sector_code = models.CharField(max_length=300) - - def __unicode__(self): - return self.sector_name - - -class PTPost(models.Model): - #Name of the post - post_name = models.CharField(max_length=300) - #The region with which the post is associated - post_region = models.ForeignKey(Region, null=False, related_name='post_region') - #many to many relationship with the Sector - sector = models.ManyToManyField(Sector) - - def __unicode__(self): - return self.post_name - -class Project(models.Model): - #Name of the project - project_name = models.CharField(max_length=300) - #Purpose of the project - project_purpose = models.CharField(max_length=3000) - #The sector with which the project is associated - project_sector = models.OneToOneField(Sector, primary_key=True) - - def __unicode__(self): - return self.project_name - -class Goal(models.Model): - #Name of the goal - goal_name = models.CharField(max_length=300) - #Title of the goal - goal_title = models.CharField(max_length=1000) - #Statement of the goal - goal_stmt = models.CharField(max_length=3000) - #The project with which the goal is associated - goal_project = models.ForeignKey(Region, null=False, related_name='goal_project') - - def __unicode__(self): - return self.goal_name - -class Objective(models.Model): - #Name of the objective - obj_name = models.CharField(max_length=300) - #Title of the objective - obj_title = models.CharField(max_length=1000) - #Statement of the objective - obj_stmt = models.CharField(max_length=3000) - #The goal with which the objective is associated - obj_goal = models.ForeignKey(Goal, null=False, related_name='obj_goal') - - def __unicode__(self): - return self.obj_name - -class Indicator(models.Model): - #The objective with which the indicator is associated - ind_obj = models.ForeignKey(Objective, null=False, related_name='ind_obj') - #Indicator description - #Indicator type (SI/PDI/SO/PD) - #0 - SI - #1 - PDI - #2 - SO - #3 - PD - ind_type_1 = models.CharField(max_length="100", default="None", null=False) - #Indicator type (Outcome/Output) - #true - Outcome - #false - Output - ind_type_2 = models.BooleanField(default=True) - - def __unicode__(self): - return self.ind_type_1 - - - -class Output(models.Model): - #The sector with which the output is associated - output_sector = models.ForeignKey(Sector, null=False, related_name='output_sector') - #The country(post) with which the output is associated - output_ptpost= models.ForeignKey(PTPost, null=False, related_name='output_ptpost') - #The indicator with which the output is associated - output_ind= models.ForeignKey(Indicator, null=False, related_name='output_ind') - #integer (the output) - output_value = models.IntegerField() - - def __unicode__(self): - return unicode(self.output_value) - - -class Outcome(models.Model): - #The sector with which the outcome is associated - outcome_sector = models.ForeignKey(Sector, null=False, related_name='outcome_sector') - #The country(post) with which the outcome is associated - outcome_ptpost= models.ForeignKey(PTPost, null=False, related_name='outcome_ptpost') - #The indicator with which the outcome is associated - outcome_ind= models.ForeignKey(Indicator, null=False, related_name='outcome_ind') - #integer (the outcome) - outcome_value = models.IntegerField() - - def __unicode__(self): - return unicode(self.outcome_value) - - -class Cohort(models.Model): - #name - cohort_name = models.CharField(max_length=300) - #short description - cohort_desc = models.CharField(max_length=3000) - #no of members - cohort_no_of_members = models.IntegerField() - #age range - cohort_age = models.CharField(max_length=30) - #no of males - cohort_males = models.IntegerField() - #no of females - cohort_females = models.IntegerField() - #position within the community - cohort_pos = models.CharField(max_length=30) - #other relevant notes - cohort_notes = models.CharField(max_length=3000) - - def __unicode__(self): - return unicode(self.cohort_name) - -class Activity(models.Model): - #title of the activity - activity_title = models.CharField(max_length=300) - #short description - activity_desc = models.CharField(max_length=3000) - #relevant cohort name - activity_cohort = models.ForeignKey(Cohort, null=False, related_name='activity_cohort') - #date & time of the activity creation - activity_created = models.DateTimeField(auto_now_add=True) - #output with which the activity is associated - activity_output = models.ForeignKey(Output, null=False, related_name='activity_output') - - def __unicode__(self): - return self.activity_title - -class Measurement(models.Model): - #title of the Measurement - meas_title = models.CharField(max_length=300) - #short description of the Measurement - meas_desc = models.CharField(max_length=3000) - #relevant cohort name - meas_cohort = models.ForeignKey(Output, null=False, related_name='meas_cohort') - #date & time of the Measurement creation - meas_created = models.DateTimeField(auto_now_add=True) - #outcome with which the Measurement is associated - meas_outcome = models.ForeignKey(Outcome, null=False, related_name='meas_outcome') - - def __unicode__(self): - return self.meas_title - - - -class Volunteer(models.Model): - #username - vol_name = models.CharField(max_length=300) - #email - vol_email = models.CharField(max_length=300) - #sector - vol_sector = models.ForeignKey(Sector, null=False, related_name='vol_sector') - #country - vol_ptpost = models.ForeignKey(PTPost, null=False, related_name='vol_ptpost') - #activity - vol_activity = models.ManyToManyField(Activity) - #measurement - vol_meas = models.ManyToManyField(Measurement) - #cohort - vol_cohort = models.ManyToManyField(Cohort) - - def __unicode__(self): - return self.vol_name - diff --git a/peacetrack/serializers.py b/peacetrack/serializers.py deleted file mode 100644 index b594bfaf..00000000 --- a/peacetrack/serializers.py +++ /dev/null @@ -1,95 +0,0 @@ -from django.contrib.auth.models import User -from webhub.models import * - -from rest_framework import serializers - -class UserSerializer(serializers.HyperlinkedModelSerializer): - class Meta: - model = User - fields = ('url', 'username', 'email','id') - - -class PcuserSerializer(serializers.ModelSerializer): - class Meta: - model = Pcuser - fields = ('user', 'location', 'phone', 'gender','id') - -class PostSerializer(serializers.ModelSerializer): - class Meta: - model = Post - fields = ('owner', 'title_post', 'description_post', 'created','updated','id') - - -class RevPostSerializer(serializers.ModelSerializer): - class Meta: - model = RevPost - fields = ('owner_rev_post', 'owner_rev', 'title_post_rev', 'description_post_rev', 'created','id','title_change','description_change','id') - -#Peacetrack begins here - -class RegionSerializer(serializers.ModelSerializer): - class Meta: - model = Region - fields = ('region_name','id') - - -class SectorSerializer(serializers.ModelSerializer): - class Meta: - model = Sector - fields = ('sector_name','sector_desc','sector_code','id') - -class PTPostSerializer(serializers.ModelSerializer): - class Meta: - model = PTPost - fields = ('post_name','post_region','sector','id') - -class ProjectSerializer(serializers.ModelSerializer): - class Meta: - model = Project - fields = ('project_name','project_purpose','project_sector') - -class GoalSerializer(serializers.ModelSerializer): - class Meta: - model = Goal - fields = ('goal_name','goal_title','goal_stmt','goal_project','id') - -class ObjectiveSerializer(serializers.ModelSerializer): - class Meta: - model = Objective - fields = ('obj_name','obj_title','obj_stmt','obj_goal','id') - -class IndicatorSerializer(serializers.ModelSerializer): - class Meta: - model = Indicator - fields = ('ind_obj','ind_type_1','ind_type_2','id') - -class OutputSerializer(serializers.ModelSerializer): - class Meta: - model = Output - fields = ('output_sector','output_ptpost','output_ind','output_value','id') - - -class OutcomeSerializer(serializers.ModelSerializer): - class Meta: - model = Outcome - fields = ('outcome_sector','outcome_ptpost','outcome_ind','outcome_value','id') - -class ActivitySerializer(serializers.ModelSerializer): - class Meta: - model = Activity - fields = ('activity_title','activity_desc','activity_cohort','activity_created','activity_output','id') - -class MeasurementSerializer(serializers.ModelSerializer): - class Meta: - model = Measurement - fields = ('meas_title','meas_desc','meas_cohort','meas_created','meas_outcome','id') - -class CohortSerializer(serializers.ModelSerializer): - class Meta: - model = Cohort - fields = ('cohort_name','cohort_desc','cohort_no_of_members','cohort_age','cohort_males','cohort_females','cohort_pos','cohort_notes','id') - -class VolunteerSerializer(serializers.ModelSerializer): - class Meta: - model = Volunteer - fields = ('vol_name','vol_sector','vol_ptpost','vol_activity','vol_meas','vol_cohort','id') \ No newline at end of file diff --git a/peacetrack/tests.py b/peacetrack/tests.py deleted file mode 100644 index 8cece824..00000000 --- a/peacetrack/tests.py +++ /dev/null @@ -1,8 +0,0 @@ -#Version : Phython/Django 2.7.6, PostgreSQL 9.3.4 -#Author : Vaibhavi Desai -#Github username : desaivaibhavi -#email : ranihaileydesai@gmail.com - -from django.test import TestCase - -# Create your tests here. diff --git a/peacetrack/ui/bootstrap/css/bootstrap-theme.css b/peacetrack/ui/bootstrap/css/bootstrap-theme.css deleted file mode 100644 index a4069929..00000000 --- a/peacetrack/ui/bootstrap/css/bootstrap-theme.css +++ /dev/null @@ -1,347 +0,0 @@ -/*! - * Bootstrap v3.1.1 (http://getbootstrap.com) - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ - -.btn-default, -.btn-primary, -.btn-success, -.btn-info, -.btn-warning, -.btn-danger { - text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); -} -.btn-default:active, -.btn-primary:active, -.btn-success:active, -.btn-info:active, -.btn-warning:active, -.btn-danger:active, -.btn-default.active, -.btn-primary.active, -.btn-success.active, -.btn-info.active, -.btn-warning.active, -.btn-danger.active { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); -} -.btn:active, -.btn.active { - background-image: none; -} -.btn-default { - text-shadow: 0 1px 0 #fff; - background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); - background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #dbdbdb; - border-color: #ccc; -} -.btn-default:hover, -.btn-default:focus { - background-color: #e0e0e0; - background-position: 0 -15px; -} -.btn-default:active, -.btn-default.active { - background-color: #e0e0e0; - border-color: #dbdbdb; -} -.btn-primary { - background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #2b669a; -} -.btn-primary:hover, -.btn-primary:focus { - background-color: #2d6ca2; - background-position: 0 -15px; -} -.btn-primary:active, -.btn-primary.active { - background-color: #2d6ca2; - border-color: #2b669a; -} -.btn-success { - background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); - background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #3e8f3e; -} -.btn-success:hover, -.btn-success:focus { - background-color: #419641; - background-position: 0 -15px; -} -.btn-success:active, -.btn-success.active { - background-color: #419641; - border-color: #3e8f3e; -} -.btn-info { - background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); - background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #28a4c9; -} -.btn-info:hover, -.btn-info:focus { - background-color: #2aabd2; - background-position: 0 -15px; -} -.btn-info:active, -.btn-info.active { - background-color: #2aabd2; - border-color: #28a4c9; -} -.btn-warning { - background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); - background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #e38d13; -} -.btn-warning:hover, -.btn-warning:focus { - background-color: #eb9316; - background-position: 0 -15px; -} -.btn-warning:active, -.btn-warning.active { - background-color: #eb9316; - border-color: #e38d13; -} -.btn-danger { - background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); - background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #b92c28; -} -.btn-danger:hover, -.btn-danger:focus { - background-color: #c12e2a; - background-position: 0 -15px; -} -.btn-danger:active, -.btn-danger.active { - background-color: #c12e2a; - border-color: #b92c28; -} -.thumbnail, -.img-thumbnail { - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); - box-shadow: 0 1px 2px rgba(0, 0, 0, .075); -} -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - background-color: #e8e8e8; - background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); - background-repeat: repeat-x; -} -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - background-color: #357ebd; - background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); - background-repeat: repeat-x; -} -.navbar-default { - background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); - background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); -} -.navbar-default .navbar-nav > .active > a { - background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%); - background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0); - background-repeat: repeat-x; - -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); - box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); -} -.navbar-brand, -.navbar-nav > li > a { - text-shadow: 0 1px 0 rgba(255, 255, 255, .25); -} -.navbar-inverse { - background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); - background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; -} -.navbar-inverse .navbar-nav > .active > a { - background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%); - background-image: linear-gradient(to bottom, #222 0%, #282828 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0); - background-repeat: repeat-x; - -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); - box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); -} -.navbar-inverse .navbar-brand, -.navbar-inverse .navbar-nav > li > a { - text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); -} -.navbar-static-top, -.navbar-fixed-top, -.navbar-fixed-bottom { - border-radius: 0; -} -.alert { - text-shadow: 0 1px 0 rgba(255, 255, 255, .2); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); -} -.alert-success { - background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); - background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); - background-repeat: repeat-x; - border-color: #b2dba1; -} -.alert-info { - background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); - background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); - background-repeat: repeat-x; - border-color: #9acfea; -} -.alert-warning { - background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); - background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); - background-repeat: repeat-x; - border-color: #f5e79e; -} -.alert-danger { - background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); - background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); - background-repeat: repeat-x; - border-color: #dca7a7; -} -.progress { - background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); - background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); - background-repeat: repeat-x; -} -.progress-bar { - background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); - background-repeat: repeat-x; -} -.progress-bar-success { - background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); - background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); - background-repeat: repeat-x; -} -.progress-bar-info { - background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); - background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); - background-repeat: repeat-x; -} -.progress-bar-warning { - background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); - background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); - background-repeat: repeat-x; -} -.progress-bar-danger { - background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); - background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); - background-repeat: repeat-x; -} -.list-group { - border-radius: 4px; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); - box-shadow: 0 1px 2px rgba(0, 0, 0, .075); -} -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - text-shadow: 0 -1px 0 #3071a9; - background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0); - background-repeat: repeat-x; - border-color: #3278b3; -} -.panel { - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); - box-shadow: 0 1px 2px rgba(0, 0, 0, .05); -} -.panel-default > .panel-heading { - background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); - background-repeat: repeat-x; -} -.panel-primary > .panel-heading { - background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); - background-repeat: repeat-x; -} -.panel-success > .panel-heading { - background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); - background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); - background-repeat: repeat-x; -} -.panel-info > .panel-heading { - background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); - background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); - background-repeat: repeat-x; -} -.panel-warning > .panel-heading { - background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); - background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); - background-repeat: repeat-x; -} -.panel-danger > .panel-heading { - background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); - background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); - background-repeat: repeat-x; -} -.well { - background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); - background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); - background-repeat: repeat-x; - border-color: #dcdcdc; - -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); - box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); -} -/*# sourceMappingURL=bootstrap-theme.css.map */ diff --git a/peacetrack/ui/bootstrap/css/bootstrap-theme.css.map b/peacetrack/ui/bootstrap/css/bootstrap-theme.css.map deleted file mode 100644 index b36fc9a4..00000000 --- a/peacetrack/ui/bootstrap/css/bootstrap-theme.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["less/theme.less","less/mixins.less"],"names":[],"mappings":"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","sourcesContent":["\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-bg, 5%); @end-color: darken(@navbar-default-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-bg; @end-color: lighten(@navbar-inverse-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n}\n\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","//\n// Mixins\n// --------------------------------------------------\n\n\n// Utilities\n// -------------------------\n\n// Clearfix\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n// contenteditable attribute is included anywhere else in the document.\n// Otherwise it causes space to appear at the top and bottom of elements\n// that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n// `:before` to contain the top-margins of child elements.\n.clearfix() {\n &:before,\n &:after {\n content: \" \"; // 1\n display: table; // 2\n }\n &:after {\n clear: both;\n }\n}\n\n// WebKit-style focus\n.tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n\n// Center-align a block level element\n.center-block() {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n\n// Sizing shortcuts\n.size(@width; @height) {\n width: @width;\n height: @height;\n}\n.square(@size) {\n .size(@size; @size);\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n &::-moz-placeholder { color: @color; // Firefox\n opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Text overflow\n// Requires inline-block or block for proper styling\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n// CSS image replacement\n//\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. Note\n// that we cannot chain the mixins together in Less, so they are repeated.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (will be removed in v4)\n.hide-text() {\n font: ~\"0/0\" a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n// New mixin to use as of v3.0.1\n.text-hide() {\n .hide-text();\n}\n\n\n\n// CSS3 PROPERTIES\n// --------------------------------------------------\n\n// Single side border-radius\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support the\n// standard `box-shadow` property.\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Transitions\n.transition(@transition) {\n -webkit-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n// Transformations\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n transform: rotate(@degrees);\n}\n.scale(@ratio; @ratio-y...) {\n -webkit-transform: scale(@ratio, @ratio-y);\n -ms-transform: scale(@ratio, @ratio-y); // IE9 only\n transform: scale(@ratio, @ratio-y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n transform: translate(@x, @y);\n}\n.skew(@x; @y) {\n -webkit-transform: skew(@x, @y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n transform: skew(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// User select\n// For selecting text on the page\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n\n// Resize anything\n.resizable(@direction) {\n resize: @direction; // Options: horizontal, vertical, both\n overflow: auto; // Safari fix\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Opacity\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n\n\n\n// GRADIENTS\n// --------------------------------------------------\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, color-stop(@start-color @start-percent), color-stop(@end-color @end-percent)); // Safari 5.1-6, Chrome 10+\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n\n// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n\n\n\n// Retina images\n//\n// Short retina mixin for setting background-image and -size\n\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// COMPONENT MIXINS\n// --------------------------------------------------\n\n// Horizontal dividers\n// -------------------------\n// Dividers (basically an hr) within dropdowns and nav lists\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n\n// Panels\n// -------------------------\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n border-color: @border;\n\n & > .panel-heading {\n color: @heading-text-color;\n background-color: @heading-bg-color;\n border-color: @heading-border;\n\n + .panel-collapse .panel-body {\n border-top-color: @border;\n }\n }\n & > .panel-footer {\n + .panel-collapse .panel-body {\n border-bottom-color: @border;\n }\n }\n}\n\n// Alerts\n// -------------------------\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\n }\n}\n\n// Tables\n// -------------------------\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n\n// List Groups\n// -------------------------\n.list-group-item-variant(@state; @background; @color) {\n .list-group-item-@{state} {\n color: @color;\n background-color: @background;\n\n a& {\n color: @color;\n\n .list-group-item-heading { color: inherit; }\n\n &:hover,\n &:focus {\n color: @color;\n background-color: darken(@background, 5%);\n }\n &.active,\n &.active:hover,\n &.active:focus {\n color: #fff;\n background-color: @color;\n border-color: @color;\n }\n }\n }\n}\n\n// Button variants\n// -------------------------\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:hover,\n &:focus,\n &:active,\n &.active,\n .open .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 8%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &:active,\n &.active {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n// -------------------------\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n\n// Pagination\n// -------------------------\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n\n// Labels\n// -------------------------\n.label-variant(@color) {\n background-color: @color;\n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\n}\n\n// Contextual backgrounds\n// -------------------------\n.bg-variant(@color) {\n background-color: @color;\n a&:hover {\n background-color: darken(@color, 10%);\n }\n}\n\n// Typography\n// -------------------------\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover {\n color: darken(@color, 10%);\n }\n}\n\n// Navbar vertical align\n// -------------------------\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n\n// Progress bars\n// -------------------------\n.progress-bar-variant(@color) {\n background-color: @color;\n .progress-striped & {\n #gradient > .striped();\n }\n}\n\n// Responsive utilities\n// -------------------------\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n display: block !important;\n table& { display: table; }\n tr& { display: table-row !important; }\n th&,\n td& { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n display: none !important;\n}\n\n\n// Grid System\n// -----------\n\n// Centered container element\n.container-fixed() {\n margin-right: auto;\n margin-left: auto;\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: (@gutter / -2);\n margin-right: (@gutter / -2);\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n @media (min-width: @screen-xs-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-xs-column-push(@columns) {\n @media (min-width: @screen-xs-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-xs-column-pull(@columns) {\n @media (min-width: @screen-xs-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n\n// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n // Color the label and help text\n .help-block,\n .control-label,\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline {\n color: @text-color;\n }\n // Set the border and box shadow on specific inputs to match\n .form-control {\n border-color: @border-color;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n &:focus {\n border-color: darken(@border-color, 10%);\n @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\n .box-shadow(@shadow);\n }\n }\n // Set validation states also for addons\n .input-group-addon {\n color: @text-color;\n border-color: @border-color;\n background-color: @background-color;\n }\n // Optional feedback icon\n .form-control-feedback {\n color: @text-color;\n }\n}\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-focus-border` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n\n.form-control-focus(@color: @input-border-focus) {\n @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n &:focus {\n border-color: @color;\n outline: 0;\n .box-shadow(~\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\");\n }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. ``\n// element gets special love because it's special, and that's a fact!\n\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n height: @input-height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n\n select& {\n height: @input-height;\n line-height: @input-height;\n }\n\n textarea&,\n select[multiple]& {\n height: auto;\n }\n}\n","//\n// Variables\n// --------------------------------------------------\n\n\n//== Colors\n//\n//## Gray and brand colors for use across Bootstrap.\n\n@gray-darker: lighten(#000, 13.5%); // #222\n@gray-dark: lighten(#000, 20%); // #333\n@gray: lighten(#000, 33.5%); // #555\n@gray-light: lighten(#000, 60%); // #999\n@gray-lighter: lighten(#000, 93.5%); // #eee\n\n@brand-primary: #428bca;\n@brand-success: #5cb85c;\n@brand-info: #5bc0de;\n@brand-warning: #f0ad4e;\n@brand-danger: #d9534f;\n\n\n//== Scaffolding\n//\n// ## Settings for some of the most global styles.\n\n//** Background color for ``.\n@body-bg: #fff;\n//** Global text color on ``.\n@text-color: @gray-dark;\n\n//** Global textual link color.\n@link-color: @brand-primary;\n//** Link hover color set via `darken()` function.\n@link-hover-color: darken(@link-color, 15%);\n\n\n//== Typography\n//\n//## Font, line-height, and color for body text, headings, and more.\n\n@font-family-sans-serif: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n@font-family-serif: Georgia, \"Times New Roman\", Times, serif;\n//** Default monospace fonts for ``, ``, and `
`.\n@font-family-monospace:   Menlo, Monaco, Consolas, \"Courier New\", monospace;\n@font-family-base:        @font-family-sans-serif;\n\n@font-size-base:          14px;\n@font-size-large:         ceil((@font-size-base * 1.25)); // ~18px\n@font-size-small:         ceil((@font-size-base * 0.85)); // ~12px\n\n@font-size-h1:            floor((@font-size-base * 2.6)); // ~36px\n@font-size-h2:            floor((@font-size-base * 2.15)); // ~30px\n@font-size-h3:            ceil((@font-size-base * 1.7)); // ~24px\n@font-size-h4:            ceil((@font-size-base * 1.25)); // ~18px\n@font-size-h5:            @font-size-base;\n@font-size-h6:            ceil((@font-size-base * 0.85)); // ~12px\n\n//** Unit-less `line-height` for use in components like buttons.\n@line-height-base:        1.428571429; // 20/14\n//** Computed \"line-height\" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.\n@line-height-computed:    floor((@font-size-base * @line-height-base)); // ~20px\n\n//** By default, this inherits from the ``.\n@headings-font-family:    inherit;\n@headings-font-weight:    500;\n@headings-line-height:    1.1;\n@headings-color:          inherit;\n\n\n//-- Iconography\n//\n//## Specify custom locations of the include Glyphicons icon font. Useful for those including Bootstrap via Bower.\n\n@icon-font-path:          \"../fonts/\";\n@icon-font-name:          \"glyphicons-halflings-regular\";\n@icon-font-svg-id:        \"glyphicons_halflingsregular\";\n\n//== Components\n//\n//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).\n\n@padding-base-vertical:     6px;\n@padding-base-horizontal:   12px;\n\n@padding-large-vertical:    10px;\n@padding-large-horizontal:  16px;\n\n@padding-small-vertical:    5px;\n@padding-small-horizontal:  10px;\n\n@padding-xs-vertical:       1px;\n@padding-xs-horizontal:     5px;\n\n@line-height-large:         1.33;\n@line-height-small:         1.5;\n\n@border-radius-base:        4px;\n@border-radius-large:       6px;\n@border-radius-small:       3px;\n\n//** Global color for active items (e.g., navs or dropdowns).\n@component-active-color:    #fff;\n//** Global background color for active items (e.g., navs or dropdowns).\n@component-active-bg:       @brand-primary;\n\n//** Width of the `border` for generating carets that indicator dropdowns.\n@caret-width-base:          4px;\n//** Carets increase slightly in size for larger components.\n@caret-width-large:         5px;\n\n\n//== Tables\n//\n//## Customizes the `.table` component with basic values, each used across all table variations.\n\n//** Padding for ``s and ``s.\n@table-cell-padding:            8px;\n//** Padding for cells in `.table-condensed`.\n@table-condensed-cell-padding:  5px;\n\n//** Default background color used for all tables.\n@table-bg:                      transparent;\n//** Background color used for `.table-striped`.\n@table-bg-accent:               #f9f9f9;\n//** Background color used for `.table-hover`.\n@table-bg-hover:                #f5f5f5;\n@table-bg-active:               @table-bg-hover;\n\n//** Border color for table and cell borders.\n@table-border-color:            #ddd;\n\n\n//== Buttons\n//\n//## For each of Bootstrap's buttons, define text, background and border color.\n\n@btn-font-weight:                normal;\n\n@btn-default-color:              #333;\n@btn-default-bg:                 #fff;\n@btn-default-border:             #ccc;\n\n@btn-primary-color:              #fff;\n@btn-primary-bg:                 @brand-primary;\n@btn-primary-border:             darken(@btn-primary-bg, 5%);\n\n@btn-success-color:              #fff;\n@btn-success-bg:                 @brand-success;\n@btn-success-border:             darken(@btn-success-bg, 5%);\n\n@btn-info-color:                 #fff;\n@btn-info-bg:                    @brand-info;\n@btn-info-border:                darken(@btn-info-bg, 5%);\n\n@btn-warning-color:              #fff;\n@btn-warning-bg:                 @brand-warning;\n@btn-warning-border:             darken(@btn-warning-bg, 5%);\n\n@btn-danger-color:               #fff;\n@btn-danger-bg:                  @brand-danger;\n@btn-danger-border:              darken(@btn-danger-bg, 5%);\n\n@btn-link-disabled-color:        @gray-light;\n\n\n//== Forms\n//\n//##\n\n//** `` background color\n@input-bg:                       #fff;\n//** `` background color\n@input-bg-disabled:              @gray-lighter;\n\n//** Text color for ``s\n@input-color:                    @gray;\n//** `` border color\n@input-border:                   #ccc;\n//** `` border radius\n@input-border-radius:            @border-radius-base;\n//** Border color for inputs on focus\n@input-border-focus:             #66afe9;\n\n//** Placeholder text color\n@input-color-placeholder:        @gray-light;\n\n//** Default `.form-control` height\n@input-height-base:              (@line-height-computed + (@padding-base-vertical * 2) + 2);\n//** Large `.form-control` height\n@input-height-large:             (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);\n//** Small `.form-control` height\n@input-height-small:             (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);\n\n@legend-color:                   @gray-dark;\n@legend-border-color:            #e5e5e5;\n\n//** Background color for textual input addons\n@input-group-addon-bg:           @gray-lighter;\n//** Border color for textual input addons\n@input-group-addon-border-color: @input-border;\n\n\n//== Dropdowns\n//\n//## Dropdown menu container and contents.\n\n//** Background for the dropdown menu.\n@dropdown-bg:                    #fff;\n//** Dropdown menu `border-color`.\n@dropdown-border:                rgba(0,0,0,.15);\n//** Dropdown menu `border-color` **for IE8**.\n@dropdown-fallback-border:       #ccc;\n//** Divider color for between dropdown items.\n@dropdown-divider-bg:            #e5e5e5;\n\n//** Dropdown link text color.\n@dropdown-link-color:            @gray-dark;\n//** Hover color for dropdown links.\n@dropdown-link-hover-color:      darken(@gray-dark, 5%);\n//** Hover background for dropdown links.\n@dropdown-link-hover-bg:         #f5f5f5;\n\n//** Active dropdown menu item text color.\n@dropdown-link-active-color:     @component-active-color;\n//** Active dropdown menu item background color.\n@dropdown-link-active-bg:        @component-active-bg;\n\n//** Disabled dropdown menu item background color.\n@dropdown-link-disabled-color:   @gray-light;\n\n//** Text color for headers within dropdown menus.\n@dropdown-header-color:          @gray-light;\n\n// Note: Deprecated @dropdown-caret-color as of v3.1.0\n@dropdown-caret-color:           #000;\n\n\n//-- Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n//\n// Note: These variables are not generated into the Customizer.\n\n@zindex-navbar:            1000;\n@zindex-dropdown:          1000;\n@zindex-popover:           1010;\n@zindex-tooltip:           1030;\n@zindex-navbar-fixed:      1030;\n@zindex-modal-background:  1040;\n@zindex-modal:             1050;\n\n\n//== Media queries breakpoints\n//\n//## Define the breakpoints at which your layout will change, adapting to different screen sizes.\n\n// Extra small screen / phone\n// Note: Deprecated @screen-xs and @screen-phone as of v3.0.1\n@screen-xs:                  480px;\n@screen-xs-min:              @screen-xs;\n@screen-phone:               @screen-xs-min;\n\n// Small screen / tablet\n// Note: Deprecated @screen-sm and @screen-tablet as of v3.0.1\n@screen-sm:                  768px;\n@screen-sm-min:              @screen-sm;\n@screen-tablet:              @screen-sm-min;\n\n// Medium screen / desktop\n// Note: Deprecated @screen-md and @screen-desktop as of v3.0.1\n@screen-md:                  992px;\n@screen-md-min:              @screen-md;\n@screen-desktop:             @screen-md-min;\n\n// Large screen / wide desktop\n// Note: Deprecated @screen-lg and @screen-lg-desktop as of v3.0.1\n@screen-lg:                  1200px;\n@screen-lg-min:              @screen-lg;\n@screen-lg-desktop:          @screen-lg-min;\n\n// So media queries don't overlap when required, provide a maximum\n@screen-xs-max:              (@screen-sm-min - 1);\n@screen-sm-max:              (@screen-md-min - 1);\n@screen-md-max:              (@screen-lg-min - 1);\n\n\n//== Grid system\n//\n//## Define your custom responsive grid.\n\n//** Number of columns in the grid.\n@grid-columns:              12;\n//** Padding between columns. Gets divided in half for the left and right.\n@grid-gutter-width:         30px;\n// Navbar collapse\n//** Point at which the navbar becomes uncollapsed.\n@grid-float-breakpoint:     @screen-sm-min;\n//** Point at which the navbar begins collapsing.\n@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);\n\n\n//== Container sizes\n//\n//## Define the maximum width of `.container` for different screen sizes.\n\n// Small screen / tablet\n@container-tablet:             ((720px + @grid-gutter-width));\n//** For `@screen-sm-min` and up.\n@container-sm:                 @container-tablet;\n\n// Medium screen / desktop\n@container-desktop:            ((940px + @grid-gutter-width));\n//** For `@screen-md-min` and up.\n@container-md:                 @container-desktop;\n\n// Large screen / wide desktop\n@container-large-desktop:      ((1140px + @grid-gutter-width));\n//** For `@screen-lg-min` and up.\n@container-lg:                 @container-large-desktop;\n\n\n//== Navbar\n//\n//##\n\n// Basics of a navbar\n@navbar-height:                    50px;\n@navbar-margin-bottom:             @line-height-computed;\n@navbar-border-radius:             @border-radius-base;\n@navbar-padding-horizontal:        floor((@grid-gutter-width / 2));\n@navbar-padding-vertical:          ((@navbar-height - @line-height-computed) / 2);\n@navbar-collapse-max-height:       340px;\n\n@navbar-default-color:             #777;\n@navbar-default-bg:                #f8f8f8;\n@navbar-default-border:            darken(@navbar-default-bg, 6.5%);\n\n// Navbar links\n@navbar-default-link-color:                #777;\n@navbar-default-link-hover-color:          #333;\n@navbar-default-link-hover-bg:             transparent;\n@navbar-default-link-active-color:         #555;\n@navbar-default-link-active-bg:            darken(@navbar-default-bg, 6.5%);\n@navbar-default-link-disabled-color:       #ccc;\n@navbar-default-link-disabled-bg:          transparent;\n\n// Navbar brand label\n@navbar-default-brand-color:               @navbar-default-link-color;\n@navbar-default-brand-hover-color:         darken(@navbar-default-brand-color, 10%);\n@navbar-default-brand-hover-bg:            transparent;\n\n// Navbar toggle\n@navbar-default-toggle-hover-bg:           #ddd;\n@navbar-default-toggle-icon-bar-bg:        #888;\n@navbar-default-toggle-border-color:       #ddd;\n\n\n// Inverted navbar\n// Reset inverted navbar basics\n@navbar-inverse-color:                      @gray-light;\n@navbar-inverse-bg:                         #222;\n@navbar-inverse-border:                     darken(@navbar-inverse-bg, 10%);\n\n// Inverted navbar links\n@navbar-inverse-link-color:                 @gray-light;\n@navbar-inverse-link-hover-color:           #fff;\n@navbar-inverse-link-hover-bg:              transparent;\n@navbar-inverse-link-active-color:          @navbar-inverse-link-hover-color;\n@navbar-inverse-link-active-bg:             darken(@navbar-inverse-bg, 10%);\n@navbar-inverse-link-disabled-color:        #444;\n@navbar-inverse-link-disabled-bg:           transparent;\n\n// Inverted navbar brand label\n@navbar-inverse-brand-color:                @navbar-inverse-link-color;\n@navbar-inverse-brand-hover-color:          #fff;\n@navbar-inverse-brand-hover-bg:             transparent;\n\n// Inverted navbar toggle\n@navbar-inverse-toggle-hover-bg:            #333;\n@navbar-inverse-toggle-icon-bar-bg:         #fff;\n@navbar-inverse-toggle-border-color:        #333;\n\n\n//== Navs\n//\n//##\n\n//=== Shared nav styles\n@nav-link-padding:                          10px 15px;\n@nav-link-hover-bg:                         @gray-lighter;\n\n@nav-disabled-link-color:                   @gray-light;\n@nav-disabled-link-hover-color:             @gray-light;\n\n@nav-open-link-hover-color:                 #fff;\n\n//== Tabs\n@nav-tabs-border-color:                     #ddd;\n\n@nav-tabs-link-hover-border-color:          @gray-lighter;\n\n@nav-tabs-active-link-hover-bg:             @body-bg;\n@nav-tabs-active-link-hover-color:          @gray;\n@nav-tabs-active-link-hover-border-color:   #ddd;\n\n@nav-tabs-justified-link-border-color:            #ddd;\n@nav-tabs-justified-active-link-border-color:     @body-bg;\n\n//== Pills\n@nav-pills-border-radius:                   @border-radius-base;\n@nav-pills-active-link-hover-bg:            @component-active-bg;\n@nav-pills-active-link-hover-color:         @component-active-color;\n\n\n//== Pagination\n//\n//##\n\n@pagination-color:                     @link-color;\n@pagination-bg:                        #fff;\n@pagination-border:                    #ddd;\n\n@pagination-hover-color:               @link-hover-color;\n@pagination-hover-bg:                  @gray-lighter;\n@pagination-hover-border:              #ddd;\n\n@pagination-active-color:              #fff;\n@pagination-active-bg:                 @brand-primary;\n@pagination-active-border:             @brand-primary;\n\n@pagination-disabled-color:            @gray-light;\n@pagination-disabled-bg:               #fff;\n@pagination-disabled-border:           #ddd;\n\n\n//== Pager\n//\n//##\n\n@pager-bg:                             @pagination-bg;\n@pager-border:                         @pagination-border;\n@pager-border-radius:                  15px;\n\n@pager-hover-bg:                       @pagination-hover-bg;\n\n@pager-active-bg:                      @pagination-active-bg;\n@pager-active-color:                   @pagination-active-color;\n\n@pager-disabled-color:                 @pagination-disabled-color;\n\n\n//== Jumbotron\n//\n//##\n\n@jumbotron-padding:              30px;\n@jumbotron-color:                inherit;\n@jumbotron-bg:                   @gray-lighter;\n@jumbotron-heading-color:        inherit;\n@jumbotron-font-size:            ceil((@font-size-base * 1.5));\n\n\n//== Form states and alerts\n//\n//## Define colors for form feedback states and, by default, alerts.\n\n@state-success-text:             #3c763d;\n@state-success-bg:               #dff0d8;\n@state-success-border:           darken(spin(@state-success-bg, -10), 5%);\n\n@state-info-text:                #31708f;\n@state-info-bg:                  #d9edf7;\n@state-info-border:              darken(spin(@state-info-bg, -10), 7%);\n\n@state-warning-text:             #8a6d3b;\n@state-warning-bg:               #fcf8e3;\n@state-warning-border:           darken(spin(@state-warning-bg, -10), 5%);\n\n@state-danger-text:              #a94442;\n@state-danger-bg:                #f2dede;\n@state-danger-border:            darken(spin(@state-danger-bg, -10), 5%);\n\n\n//== Tooltips\n//\n//##\n\n//** Tooltip max width\n@tooltip-max-width:           200px;\n//** Tooltip text color\n@tooltip-color:               #fff;\n//** Tooltip background color\n@tooltip-bg:                  #000;\n@tooltip-opacity:             .9;\n\n//** Tooltip arrow width\n@tooltip-arrow-width:         5px;\n//** Tooltip arrow color\n@tooltip-arrow-color:         @tooltip-bg;\n\n\n//== Popovers\n//\n//##\n\n//** Popover body background color\n@popover-bg:                          #fff;\n//** Popover maximum width\n@popover-max-width:                   276px;\n//** Popover border color\n@popover-border-color:                rgba(0,0,0,.2);\n//** Popover fallback border color\n@popover-fallback-border-color:       #ccc;\n\n//** Popover title background color\n@popover-title-bg:                    darken(@popover-bg, 3%);\n\n//** Popover arrow width\n@popover-arrow-width:                 10px;\n//** Popover arrow color\n@popover-arrow-color:                 #fff;\n\n//** Popover outer arrow width\n@popover-arrow-outer-width:           (@popover-arrow-width + 1);\n//** Popover outer arrow color\n@popover-arrow-outer-color:           fadein(@popover-border-color, 5%);\n//** Popover outer arrow fallback color\n@popover-arrow-outer-fallback-color:  darken(@popover-fallback-border-color, 20%);\n\n\n//== Labels\n//\n//##\n\n//** Default label background color\n@label-default-bg:            @gray-light;\n//** Primary label background color\n@label-primary-bg:            @brand-primary;\n//** Success label background color\n@label-success-bg:            @brand-success;\n//** Info label background color\n@label-info-bg:               @brand-info;\n//** Warning label background color\n@label-warning-bg:            @brand-warning;\n//** Danger label background color\n@label-danger-bg:             @brand-danger;\n\n//** Default label text color\n@label-color:                 #fff;\n//** Default text color of a linked label\n@label-link-hover-color:      #fff;\n\n\n//== Modals\n//\n//##\n\n//** Padding applied to the modal body\n@modal-inner-padding:         20px;\n\n//** Padding applied to the modal title\n@modal-title-padding:         15px;\n//** Modal title line-height\n@modal-title-line-height:     @line-height-base;\n\n//** Background color of modal content area\n@modal-content-bg:                             #fff;\n//** Modal content border color\n@modal-content-border-color:                   rgba(0,0,0,.2);\n//** Modal content border color **for IE8**\n@modal-content-fallback-border-color:          #999;\n\n//** Modal backdrop background color\n@modal-backdrop-bg:           #000;\n//** Modal backdrop opacity\n@modal-backdrop-opacity:      .5;\n//** Modal header border color\n@modal-header-border-color:   #e5e5e5;\n//** Modal footer border color\n@modal-footer-border-color:   @modal-header-border-color;\n\n@modal-lg:                    900px;\n@modal-md:                    600px;\n@modal-sm:                    300px;\n\n\n//== Alerts\n//\n//## Define alert colors, border radius, and padding.\n\n@alert-padding:               15px;\n@alert-border-radius:         @border-radius-base;\n@alert-link-font-weight:      bold;\n\n@alert-success-bg:            @state-success-bg;\n@alert-success-text:          @state-success-text;\n@alert-success-border:        @state-success-border;\n\n@alert-info-bg:               @state-info-bg;\n@alert-info-text:             @state-info-text;\n@alert-info-border:           @state-info-border;\n\n@alert-warning-bg:            @state-warning-bg;\n@alert-warning-text:          @state-warning-text;\n@alert-warning-border:        @state-warning-border;\n\n@alert-danger-bg:             @state-danger-bg;\n@alert-danger-text:           @state-danger-text;\n@alert-danger-border:         @state-danger-border;\n\n\n//== Progress bars\n//\n//##\n\n//** Background color of the whole progress component\n@progress-bg:                 #f5f5f5;\n//** Progress bar text color\n@progress-bar-color:          #fff;\n\n//** Default progress bar color\n@progress-bar-bg:             @brand-primary;\n//** Success progress bar color\n@progress-bar-success-bg:     @brand-success;\n//** Warning progress bar color\n@progress-bar-warning-bg:     @brand-warning;\n//** Danger progress bar color\n@progress-bar-danger-bg:      @brand-danger;\n//** Info progress bar color\n@progress-bar-info-bg:        @brand-info;\n\n\n//== List group\n//\n//##\n\n//** Background color on `.list-group-item`\n@list-group-bg:                 #fff;\n//** `.list-group-item` border color\n@list-group-border:             #ddd;\n//** List group border radius\n@list-group-border-radius:      @border-radius-base;\n\n//** Background color of single list elements on hover\n@list-group-hover-bg:           #f5f5f5;\n//** Text color of active list elements\n@list-group-active-color:       @component-active-color;\n//** Background color of active list elements\n@list-group-active-bg:          @component-active-bg;\n//** Border color of active list elements\n@list-group-active-border:      @list-group-active-bg;\n@list-group-active-text-color:  lighten(@list-group-active-bg, 40%);\n\n@list-group-link-color:         #555;\n@list-group-link-heading-color: #333;\n\n\n//== Panels\n//\n//##\n\n@panel-bg:                    #fff;\n@panel-body-padding:          15px;\n@panel-border-radius:         @border-radius-base;\n\n//** Border color for elements within panels\n@panel-inner-border:          #ddd;\n@panel-footer-bg:             #f5f5f5;\n\n@panel-default-text:          @gray-dark;\n@panel-default-border:        #ddd;\n@panel-default-heading-bg:    #f5f5f5;\n\n@panel-primary-text:          #fff;\n@panel-primary-border:        @brand-primary;\n@panel-primary-heading-bg:    @brand-primary;\n\n@panel-success-text:          @state-success-text;\n@panel-success-border:        @state-success-border;\n@panel-success-heading-bg:    @state-success-bg;\n\n@panel-info-text:             @state-info-text;\n@panel-info-border:           @state-info-border;\n@panel-info-heading-bg:       @state-info-bg;\n\n@panel-warning-text:          @state-warning-text;\n@panel-warning-border:        @state-warning-border;\n@panel-warning-heading-bg:    @state-warning-bg;\n\n@panel-danger-text:           @state-danger-text;\n@panel-danger-border:         @state-danger-border;\n@panel-danger-heading-bg:     @state-danger-bg;\n\n\n//== Thumbnails\n//\n//##\n\n//** Padding around the thumbnail image\n@thumbnail-padding:           4px;\n//** Thumbnail background color\n@thumbnail-bg:                @body-bg;\n//** Thumbnail border color\n@thumbnail-border:            #ddd;\n//** Thumbnail border radius\n@thumbnail-border-radius:     @border-radius-base;\n\n//** Custom text color for thumbnail captions\n@thumbnail-caption-color:     @text-color;\n//** Padding around the thumbnail caption\n@thumbnail-caption-padding:   9px;\n\n\n//== Wells\n//\n//##\n\n@well-bg:                     #f5f5f5;\n@well-border:                 darken(@well-bg, 7%);\n\n\n//== Badges\n//\n//##\n\n@badge-color:                 #fff;\n//** Linked badge text color on hover\n@badge-link-hover-color:      #fff;\n@badge-bg:                    @gray-light;\n\n//** Badge text color in active nav link\n@badge-active-color:          @link-color;\n//** Badge background color in active nav link\n@badge-active-bg:             #fff;\n\n@badge-font-weight:           bold;\n@badge-line-height:           1;\n@badge-border-radius:         10px;\n\n\n//== Breadcrumbs\n//\n//##\n\n@breadcrumb-padding-vertical:   8px;\n@breadcrumb-padding-horizontal: 15px;\n//** Breadcrumb background color\n@breadcrumb-bg:                 #f5f5f5;\n//** Breadcrumb text color\n@breadcrumb-color:              #ccc;\n//** Text color of current page in the breadcrumb\n@breadcrumb-active-color:       @gray-light;\n//** Textual separator for between breadcrumb elements\n@breadcrumb-separator:          \"/\";\n\n\n//== Carousel\n//\n//##\n\n@carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6);\n\n@carousel-control-color:                      #fff;\n@carousel-control-width:                      15%;\n@carousel-control-opacity:                    .5;\n@carousel-control-font-size:                  20px;\n\n@carousel-indicator-active-bg:                #fff;\n@carousel-indicator-border-color:             #fff;\n\n@carousel-caption-color:                      #fff;\n\n\n//== Close\n//\n//##\n\n@close-font-weight:           bold;\n@close-color:                 #000;\n@close-text-shadow:           0 1px 0 #fff;\n\n\n//== Code\n//\n//##\n\n@code-color:                  #c7254e;\n@code-bg:                     #f9f2f4;\n\n@kbd-color:                   #fff;\n@kbd-bg:                      #333;\n\n@pre-bg:                      #f5f5f5;\n@pre-color:                   @gray-dark;\n@pre-border-color:            #ccc;\n@pre-scrollable-max-height:   340px;\n\n\n//== Type\n//\n//##\n\n//** Text muted color\n@text-muted:                  @gray-light;\n//** Abbreviations and acronyms border color\n@abbr-border-color:           @gray-light;\n//** Headings small color\n@headings-small-color:        @gray-light;\n//** Blockquote small color\n@blockquote-small-color:      @gray-light;\n//** Blockquote font size\n@blockquote-font-size:        (@font-size-base * 1.25);\n//** Blockquote border color\n@blockquote-border-color:     @gray-lighter;\n//** Page header border color\n@page-header-border-color:    @gray-lighter;\n\n\n//== Miscellaneous\n//\n//##\n\n//** Horizontal line color.\n@hr-border:                   @gray-lighter;\n\n//** Horizontal offset for forms and lists.\n@component-offset-horizontal: 180px;\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n  display: block;\n  padding: @thumbnail-padding;\n  margin-bottom: @line-height-computed;\n  line-height: @line-height-base;\n  background-color: @thumbnail-bg;\n  border: 1px solid @thumbnail-border;\n  border-radius: @thumbnail-border-radius;\n  .transition(all .2s ease-in-out);\n\n  > img,\n  a > img {\n    &:extend(.img-responsive);\n    margin-left: auto;\n    margin-right: auto;\n  }\n\n  // Add a hover state for linked versions only\n  a&:hover,\n  a&:focus,\n  a&.active {\n    border-color: @link-color;\n  }\n\n  // Image captions\n  .caption {\n    padding: @thumbnail-caption-padding;\n    color: @thumbnail-caption-color;\n  }\n}\n","//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n  position: relative;\n}\n\n.carousel-inner {\n  position: relative;\n  overflow: hidden;\n  width: 100%;\n\n  > .item {\n    display: none;\n    position: relative;\n    .transition(.6s ease-in-out left);\n\n    // Account for jankitude on images\n    > img,\n    > a > img {\n      &:extend(.img-responsive);\n      line-height: 1;\n    }\n  }\n\n  > .active,\n  > .next,\n  > .prev { display: block; }\n\n  > .active {\n    left: 0;\n  }\n\n  > .next,\n  > .prev {\n    position: absolute;\n    top: 0;\n    width: 100%;\n  }\n\n  > .next {\n    left: 100%;\n  }\n  > .prev {\n    left: -100%;\n  }\n  > .next.left,\n  > .prev.right {\n    left: 0;\n  }\n\n  > .active.left {\n    left: -100%;\n  }\n  > .active.right {\n    left: 100%;\n  }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  width: @carousel-control-width;\n  .opacity(@carousel-control-opacity);\n  font-size: @carousel-control-font-size;\n  color: @carousel-control-color;\n  text-align: center;\n  text-shadow: @carousel-text-shadow;\n  // We can't have this transition here because WebKit cancels the carousel\n  // animation if you trip this while in the middle of another animation.\n\n  // Set gradients for backgrounds\n  &.left {\n    #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));\n  }\n  &.right {\n    left: auto;\n    right: 0;\n    #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));\n  }\n\n  // Hover/focus state\n  &:hover,\n  &:focus {\n    outline: none;\n    color: @carousel-control-color;\n    text-decoration: none;\n    .opacity(.9);\n  }\n\n  // Toggles\n  .icon-prev,\n  .icon-next,\n  .glyphicon-chevron-left,\n  .glyphicon-chevron-right {\n    position: absolute;\n    top: 50%;\n    z-index: 5;\n    display: inline-block;\n  }\n  .icon-prev,\n  .glyphicon-chevron-left {\n    left: 50%;\n  }\n  .icon-next,\n  .glyphicon-chevron-right {\n    right: 50%;\n  }\n  .icon-prev,\n  .icon-next {\n    width:  20px;\n    height: 20px;\n    margin-top: -10px;\n    margin-left: -10px;\n    font-family: serif;\n  }\n\n  .icon-prev {\n    &:before {\n      content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n    }\n  }\n  .icon-next {\n    &:before {\n      content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n    }\n  }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  margin-left: -30%;\n  padding-left: 0;\n  list-style: none;\n  text-align: center;\n\n  li {\n    display: inline-block;\n    width:  10px;\n    height: 10px;\n    margin: 1px;\n    text-indent: -999px;\n    border: 1px solid @carousel-indicator-border-color;\n    border-radius: 10px;\n    cursor: pointer;\n\n    // IE8-9 hack for event handling\n    //\n    // Internet Explorer 8-9 does not support clicks on elements without a set\n    // `background-color`. We cannot use `filter` since that's not viewed as a\n    // background color by the browser. Thus, a hack is needed.\n    //\n    // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n    // set alpha transparency for the best results possible.\n    background-color: #000 \\9; // IE8\n    background-color: rgba(0,0,0,0); // IE9\n  }\n  .active {\n    margin: 0;\n    width:  12px;\n    height: 12px;\n    background-color: @carousel-indicator-active-bg;\n  }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n  position: absolute;\n  left: 15%;\n  right: 15%;\n  bottom: 20px;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: @carousel-caption-color;\n  text-align: center;\n  text-shadow: @carousel-text-shadow;\n  & .btn {\n    text-shadow: none; // No shadow for button elements in carousel-caption\n  }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n\n  // Scale up the controls a smidge\n  .carousel-control {\n    .glyphicon-chevron-left,\n    .glyphicon-chevron-right,\n    .icon-prev,\n    .icon-next {\n      width: 30px;\n      height: 30px;\n      margin-top: -15px;\n      margin-left: -15px;\n      font-size: 30px;\n    }\n  }\n\n  // Show and left align the captions\n  .carousel-caption {\n    left: 20%;\n    right: 20%;\n    padding-bottom: 30px;\n  }\n\n  // Move up the indicators\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  font-family: @headings-font-family;\n  font-weight: @headings-font-weight;\n  line-height: @headings-line-height;\n  color: @headings-color;\n\n  small,\n  .small {\n    font-weight: normal;\n    line-height: 1;\n    color: @headings-small-color;\n  }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n  margin-top: @line-height-computed;\n  margin-bottom: (@line-height-computed / 2);\n\n  small,\n  .small {\n    font-size: 65%;\n  }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n  margin-top: (@line-height-computed / 2);\n  margin-bottom: (@line-height-computed / 2);\n\n  small,\n  .small {\n    font-size: 75%;\n  }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n  margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n  margin-bottom: @line-height-computed;\n  font-size: floor((@font-size-base * 1.15));\n  font-weight: 200;\n  line-height: 1.4;\n\n  @media (min-width: @screen-sm-min) {\n    font-size: (@font-size-base * 1.5);\n  }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: 14px base font * 85% = about 12px\nsmall,\n.small  { font-size: 85%; }\n\n// Undo browser default styling\ncite    { font-style: normal; }\n\n// Alignment\n.text-left           { text-align: left; }\n.text-right          { text-align: right; }\n.text-center         { text-align: center; }\n.text-justify        { text-align: justify; }\n\n// Contextual colors\n.text-muted {\n  color: @text-muted;\n}\n.text-primary {\n  .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n  .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n  .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n  .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n  .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n  // Given the contrast here, this is the only class to have its color inverted\n  // automatically.\n  color: #fff;\n  .bg-variant(@brand-primary);\n}\n.bg-success {\n  .bg-variant(@state-success-bg);\n}\n.bg-info {\n  .bg-variant(@state-info-bg);\n}\n.bg-warning {\n  .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n  .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n  padding-bottom: ((@line-height-computed / 2) - 1);\n  margin: (@line-height-computed * 2) 0 @line-height-computed;\n  border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// --------------------------------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n  margin-top: 0;\n  margin-bottom: (@line-height-computed / 2);\n  ul,\n  ol {\n    margin-bottom: 0;\n  }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n  .list-unstyled();\n  margin-left: -5px;\n\n  > li {\n    display: inline-block;\n    padding-left: 5px;\n    padding-right: 5px;\n  }\n}\n\n// Description Lists\ndl {\n  margin-top: 0; // Remove browser default\n  margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n  line-height: @line-height-base;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n@media (min-width: @grid-float-breakpoint) {\n  .dl-horizontal {\n    dt {\n      float: left;\n      width: (@component-offset-horizontal - 20);\n      clear: left;\n      text-align: right;\n      .text-overflow();\n    }\n    dd {\n      margin-left: @component-offset-horizontal;\n      &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n    }\n  }\n}\n\n// MISC\n// ----\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\n\n// Blockquotes\nblockquote {\n  padding: (@line-height-computed / 2) @line-height-computed;\n  margin: 0 0 @line-height-computed;\n  font-size: @blockquote-font-size;\n  border-left: 5px solid @blockquote-border-color;\n\n  p,\n  ul,\n  ol {\n    &:last-child {\n      margin-bottom: 0;\n    }\n  }\n\n  // Note: Deprecated small and .small as of v3.1.0\n  // Context: https://github.com/twbs/bootstrap/issues/11660\n  footer,\n  small,\n  .small {\n    display: block;\n    font-size: 80%; // back to default font-size\n    line-height: @line-height-base;\n    color: @blockquote-small-color;\n\n    &:before {\n      content: '\\2014 \\00A0'; // em dash, nbsp\n    }\n  }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  border-right: 5px solid @blockquote-border-color;\n  border-left: 0;\n  text-align: right;\n\n  // Account for citation\n  footer,\n  small,\n  .small {\n    &:before { content: ''; }\n    &:after {\n      content: '\\00A0 \\2014'; // nbsp, em dash\n    }\n  }\n}\n\n// Quotes\nblockquote:before,\nblockquote:after {\n  content: \"\";\n}\n\n// Addresses\naddress {\n  margin-bottom: @line-height-computed;\n  font-style: normal;\n  line-height: @line-height-base;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n  font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: @code-color;\n  background-color: @code-bg;\n  white-space: nowrap;\n  border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: @kbd-color;\n  background-color: @kbd-bg;\n  border-radius: @border-radius-small;\n  box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n}\n\n// Blocks of code\npre {\n  display: block;\n  padding: ((@line-height-computed - 1) / 2);\n  margin: 0 0 (@line-height-computed / 2);\n  font-size: (@font-size-base - 1); // 14px to 13px\n  line-height: @line-height-base;\n  word-break: break-all;\n  word-wrap: break-word;\n  color: @pre-color;\n  background-color: @pre-bg;\n  border: 1px solid @pre-border-color;\n  border-radius: @border-radius-base;\n\n  // Account for some code outputs that place code tags in pre tags\n  code {\n    padding: 0;\n    font-size: inherit;\n    color: inherit;\n    white-space: pre-wrap;\n    background-color: transparent;\n    border-radius: 0;\n  }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n  max-height: @pre-scrollable-max-height;\n  overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n  .container-fixed();\n\n  @media (min-width: @screen-sm-min) {\n    width: @container-sm;\n  }\n  @media (min-width: @screen-md-min) {\n    width: @container-md;\n  }\n  @media (min-width: @screen-lg-min) {\n    width: @container-lg;\n  }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n  .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n  .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n  .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n  .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n  .make-grid(lg);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n  max-width: 100%;\n  background-color: @table-bg;\n}\nth {\n  text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n  width: 100%;\n  margin-bottom: @line-height-computed;\n  // Cells\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: @table-cell-padding;\n        line-height: @line-height-base;\n        vertical-align: top;\n        border-top: 1px solid @table-border-color;\n      }\n    }\n  }\n  // Bottom align for column headings\n  > thead > tr > th {\n    vertical-align: bottom;\n    border-bottom: 2px solid @table-border-color;\n  }\n  // Remove top border from thead by default\n  > caption + thead,\n  > colgroup + thead,\n  > thead:first-child {\n    > tr:first-child {\n      > th,\n      > td {\n        border-top: 0;\n      }\n    }\n  }\n  // Account for multiple tbody instances\n  > tbody + tbody {\n    border-top: 2px solid @table-border-color;\n  }\n\n  // Nesting\n  .table {\n    background-color: @body-bg;\n  }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: @table-condensed-cell-padding;\n      }\n    }\n  }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n  border: 1px solid @table-border-color;\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        border: 1px solid @table-border-color;\n      }\n    }\n  }\n  > thead > tr {\n    > th,\n    > td {\n      border-bottom-width: 2px;\n    }\n  }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n  > tbody > tr:nth-child(odd) {\n    > td,\n    > th {\n      background-color: @table-bg-accent;\n    }\n  }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n  > tbody > tr:hover {\n    > td,\n    > th {\n      background-color: @table-bg-hover;\n    }\n  }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n  position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n  float: none;\n  display: table-column;\n}\ntable {\n  td,\n  th {\n    &[class*=\"col-\"] {\n      position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n      float: none;\n      display: table-cell;\n    }\n  }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n@media (max-width: @screen-xs-max) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: (@line-height-computed * 0.75);\n    overflow-y: hidden;\n    overflow-x: scroll;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid @table-border-color;\n    -webkit-overflow-scrolling: touch;\n\n    // Tighten up spacing\n    > .table {\n      margin-bottom: 0;\n\n      // Ensure the content doesn't wrap\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th,\n          > td {\n            white-space: nowrap;\n          }\n        }\n      }\n    }\n\n    // Special overrides for the bordered tables\n    > .table-bordered {\n      border: 0;\n\n      // Nuke the appropriate borders so that the parent can handle them\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th:first-child,\n          > td:first-child {\n            border-left: 0;\n          }\n          > th:last-child,\n          > td:last-child {\n            border-right: 0;\n          }\n        }\n      }\n\n      // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n      // chances are there will be only one `tr` in a `thead` and that would\n      // remove the border altogether.\n      > tbody,\n      > tfoot {\n        > tr:last-child {\n          > th,\n          > td {\n            border-bottom: 0;\n          }\n        }\n      }\n\n    }\n  }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n  padding: 0;\n  margin: 0;\n  border: 0;\n  // Chrome and Firefox set a `min-width: -webkit-min-content;` on fieldsets,\n  // so we reset that to ensure it behaves more like a standard block element.\n  // See https://github.com/twbs/bootstrap/issues/12359.\n  min-width: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: @line-height-computed;\n  font-size: (@font-size-base * 1.5);\n  line-height: inherit;\n  color: @legend-color;\n  border: 0;\n  border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n  display: inline-block;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n  .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9; /* IE8-9 */\n  line-height: normal;\n}\n\n// Set the height of file controls to match text inputs\ninput[type=\"file\"] {\n  display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n  height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  .tab-focus();\n}\n\n// Adjust output element\noutput {\n  display: block;\n  padding-top: (@padding-base-vertical + 1);\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n  padding: @padding-base-vertical @padding-base-horizontal;\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @input-color;\n  background-color: @input-bg;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid @input-border;\n  border-radius: @input-border-radius;\n  .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n  .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n  // Customize the `:focus` state to imitate native WebKit styles.\n  .form-control-focus();\n\n  // Placeholder\n  .placeholder();\n\n  // Disabled and read-only inputs\n  //\n  // HTML5 says that controls under a fieldset > legend:first-child won't be\n  // disabled if the fieldset is disabled. Due to implementation difficulty, we\n  // don't honor that edge case; we style them as disabled anyway.\n  &[disabled],\n  &[readonly],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n    background-color: @input-bg-disabled;\n    opacity: 1; // iOS fix for unreadable disabled content\n  }\n\n  // Reset height for `textarea`s\n  textarea& {\n    height: auto;\n  }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\n\n\n// Special styles for iOS date input\n//\n// In Mobile Safari, date inputs require a pixel line-height that matches the\n// given height of the input.\n\ninput[type=\"date\"] {\n  line-height: @input-height-base;\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n  margin-bottom: 15px;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n  display: block;\n  min-height: @line-height-computed; // clear the floating input if there is no label text\n  margin-top: 10px;\n  margin-bottom: 10px;\n  padding-left: 20px;\n  label {\n    display: inline;\n    font-weight: normal;\n    cursor: pointer;\n  }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  float: left;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  vertical-align: middle;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n//\n// Note: Neither radios nor checkboxes can be readonly.\ninput[type=\"radio\"],\ninput[type=\"checkbox\"],\n.radio,\n.radio-inline,\n.checkbox,\n.checkbox-inline {\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n  }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n\n.input-sm {\n  .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n.input-lg {\n  .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n.has-feedback {\n  // Enable absolute positioning\n  position: relative;\n\n  // Ensure icons don't overlap text\n  .form-control {\n    padding-right: (@input-height-base * 1.25);\n  }\n\n  // Feedback icon (requires .glyphicon classes)\n  .form-control-feedback {\n    position: absolute;\n    top: (@line-height-computed + 5); // Height of the `label` and its margin\n    right: 0;\n    display: block;\n    width: @input-height-base;\n    height: @input-height-base;\n    line-height: @input-height-base;\n    text-align: center;\n  }\n}\n\n// Feedback states\n.has-success {\n  .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n.has-warning {\n  .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n.has-error {\n  .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n  margin-bottom: 0; // Remove default margin from `p`\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n  display: block; // account for any element using help-block\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: lighten(@text-color, 25%); // lighten the text some for contrast\n}\n\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n\n  // Kick in the inline\n  @media (min-width: @screen-sm-min) {\n    // Inline-block all the things for \"inline\"\n    .form-group {\n      display: inline-block;\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // In navbar-form, allow folks to *not* use `.form-group`\n    .form-control {\n      display: inline-block;\n      width: auto; // Prevent labels from stacking above inputs in `.form-group`\n      vertical-align: middle;\n    }\n    // Input groups need that 100% width though\n    .input-group > .form-control {\n      width: 100%;\n    }\n\n    .control-label {\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // Remove default margin on radios/checkboxes that were used for stacking, and\n    // then undo the floating of radios and checkboxes to match (which also avoids\n    // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).\n    .radio,\n    .checkbox {\n      display: inline-block;\n      margin-top: 0;\n      margin-bottom: 0;\n      padding-left: 0;\n      vertical-align: middle;\n    }\n    .radio input[type=\"radio\"],\n    .checkbox input[type=\"checkbox\"] {\n      float: none;\n      margin-left: 0;\n    }\n\n    // Validation states\n    //\n    // Reposition the icon because it's now within a grid column and columns have\n    // `position: relative;` on them. Also accounts for the grid gutter padding.\n    .has-feedback .form-control-feedback {\n      top: 0;\n    }\n  }\n}\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n  // Consistent vertical alignment of labels, radios, and checkboxes\n  .control-label,\n  .radio,\n  .checkbox,\n  .radio-inline,\n  .checkbox-inline {\n    margin-top: 0;\n    margin-bottom: 0;\n    padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n  }\n  // Account for padding we're adding to ensure the alignment and of help text\n  // and other content below items\n  .radio,\n  .checkbox {\n    min-height: (@line-height-computed + (@padding-base-vertical + 1));\n  }\n\n  // Make form groups behave like rows\n  .form-group {\n    .make-row();\n  }\n\n  .form-control-static {\n    padding-top: (@padding-base-vertical + 1);\n  }\n\n  // Only right align form labels here when the columns stop stacking\n  @media (min-width: @screen-sm-min) {\n    .control-label {\n      text-align: right;\n    }\n  }\n\n  // Validation states\n  //\n  // Reposition the icon because it's now within a grid column and columns have\n  // `position: relative;` on them. Also accounts for the grid gutter padding.\n  .has-feedback .form-control-feedback {\n    top: 0;\n    right: (@grid-gutter-width / 2);\n  }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n  display: inline-block;\n  margin-bottom: 0; // For input.btn\n  font-weight: @btn-font-weight;\n  text-align: center;\n  vertical-align: middle;\n  cursor: pointer;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  white-space: nowrap;\n  .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base);\n  .user-select(none);\n\n  &,\n  &:active,\n  &.active {\n    &:focus {\n      .tab-focus();\n    }\n  }\n\n  &:hover,\n  &:focus {\n    color: @btn-default-color;\n    text-decoration: none;\n  }\n\n  &:active,\n  &.active {\n    outline: 0;\n    background-image: none;\n    .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n  }\n\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n    pointer-events: none; // Future-proof disabling of clicks\n    .opacity(.65);\n    .box-shadow(none);\n  }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n  .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n  .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n  .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n  .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n  .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n  .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n  color: @link-color;\n  font-weight: normal;\n  cursor: pointer;\n  border-radius: 0;\n\n  &,\n  &:active,\n  &[disabled],\n  fieldset[disabled] & {\n    background-color: transparent;\n    .box-shadow(none);\n  }\n  &,\n  &:hover,\n  &:focus,\n  &:active {\n    border-color: transparent;\n  }\n  &:hover,\n  &:focus {\n    color: @link-hover-color;\n    text-decoration: underline;\n    background-color: transparent;\n  }\n  &[disabled],\n  fieldset[disabled] & {\n    &:hover,\n    &:focus {\n      color: @btn-link-disabled-color;\n      text-decoration: none;\n    }\n  }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n  // line-height: ensure even-numbered height of button next to large input\n  .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n.btn-sm {\n  // line-height: ensure proper height of button next to small input\n  .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n.btn-xs {\n  .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n  display: block;\n  width: 100%;\n  padding-left: 0;\n  padding-right: 0;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n  &.btn-block {\n    width: 100%;\n  }\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle; // match .btn alignment given font-size hack above\n  > .btn {\n    position: relative;\n    float: left;\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active,\n    &.active {\n      z-index: 2;\n    }\n    &:focus {\n      // Remove focus outline when dropdown JS adds it after closing the menu\n      outline: none;\n    }\n  }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n  .btn + .btn,\n  .btn + .btn-group,\n  .btn-group + .btn,\n  .btn-group + .btn-group {\n    margin-left: -1px;\n  }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n  margin-left: -5px; // Offset the first child's margin\n  &:extend(.clearfix all);\n\n  .btn-group,\n  .input-group {\n    float: left;\n  }\n  > .btn,\n  > .btn-group,\n  > .input-group {\n    margin-left: 5px;\n  }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n  margin-left: 0;\n  &:not(:last-child):not(.dropdown-toggle) {\n    .border-right-radius(0);\n  }\n}\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    .border-right-radius(0);\n  }\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n  .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n  padding-left: 8px;\n  padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-left: 12px;\n  padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n  .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n  // Show no shadow for `.btn-link` since it has no other button styles.\n  &.btn-link {\n    .box-shadow(none);\n  }\n}\n\n\n// Reposition the caret\n.btn .caret {\n  margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n  border-width: @caret-width-large @caret-width-large 0;\n  border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n  border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n  > .btn,\n  > .btn-group,\n  > .btn-group > .btn {\n    display: block;\n    float: none;\n    width: 100%;\n    max-width: 100%;\n  }\n\n  // Clear floats so dropdown menus can be properly placed\n  > .btn-group {\n    &:extend(.clearfix all);\n    > .btn {\n      float: none;\n    }\n  }\n\n  > .btn + .btn,\n  > .btn + .btn-group,\n  > .btn-group + .btn,\n  > .btn-group + .btn-group {\n    margin-top: -1px;\n    margin-left: 0;\n  }\n}\n\n.btn-group-vertical > .btn {\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n  &:first-child:not(:last-child) {\n    border-top-right-radius: @border-radius-base;\n    .border-bottom-radius(0);\n  }\n  &:last-child:not(:first-child) {\n    border-bottom-left-radius: @border-radius-base;\n    .border-top-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    .border-bottom-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  .border-top-radius(0);\n}\n\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n  > .btn,\n  > .btn-group {\n    float: none;\n    display: table-cell;\n    width: 1%;\n  }\n  > .btn-group .btn {\n    width: 100%;\n  }\n}\n\n\n// Checkbox and radio options\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  display: none;\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552.\n\n.fade {\n  opacity: 0;\n  .transition(opacity .15s linear);\n  &.in {\n    opacity: 1;\n  }\n}\n\n.collapse {\n  display: none;\n  &.in {\n    display: block;\n  }\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  .transition(height .35s ease);\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n//  Star\n\n// Import the fonts\n@font-face {\n  font-family: 'Glyphicons Halflings';\n  src: ~\"url('@{icon-font-path}@{icon-font-name}.eot')\";\n  src: ~\"url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype')\",\n       ~\"url('@{icon-font-path}@{icon-font-name}.woff') format('woff')\",\n       ~\"url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype')\",\n       ~\"url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg')\";\n}\n\n// Catchall baseclass\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk               { &:before { content: \"\\2a\"; } }\n.glyphicon-plus                   { &:before { content: \"\\2b\"; } }\n.glyphicon-euro                   { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus                  { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud                  { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope               { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil                 { &:before { content: \"\\270f\"; } }\n.glyphicon-glass                  { &:before { content: \"\\e001\"; } }\n.glyphicon-music                  { &:before { content: \"\\e002\"; } }\n.glyphicon-search                 { &:before { content: \"\\e003\"; } }\n.glyphicon-heart                  { &:before { content: \"\\e005\"; } }\n.glyphicon-star                   { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty             { &:before { content: \"\\e007\"; } }\n.glyphicon-user                   { &:before { content: \"\\e008\"; } }\n.glyphicon-film                   { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large               { &:before { content: \"\\e010\"; } }\n.glyphicon-th                     { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list                { &:before { content: \"\\e012\"; } }\n.glyphicon-ok                     { &:before { content: \"\\e013\"; } }\n.glyphicon-remove                 { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in                { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out               { &:before { content: \"\\e016\"; } }\n.glyphicon-off                    { &:before { content: \"\\e017\"; } }\n.glyphicon-signal                 { &:before { content: \"\\e018\"; } }\n.glyphicon-cog                    { &:before { content: \"\\e019\"; } }\n.glyphicon-trash                  { &:before { content: \"\\e020\"; } }\n.glyphicon-home                   { &:before { content: \"\\e021\"; } }\n.glyphicon-file                   { &:before { content: \"\\e022\"; } }\n.glyphicon-time                   { &:before { content: \"\\e023\"; } }\n.glyphicon-road                   { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt           { &:before { content: \"\\e025\"; } }\n.glyphicon-download               { &:before { content: \"\\e026\"; } }\n.glyphicon-upload                 { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox                  { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle            { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat                 { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh                { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt               { &:before { content: \"\\e032\"; } }\n.glyphicon-lock                   { &:before { content: \"\\e033\"; } }\n.glyphicon-flag                   { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones             { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off             { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down            { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up              { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode                 { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode                { &:before { content: \"\\e040\"; } }\n.glyphicon-tag                    { &:before { content: \"\\e041\"; } }\n.glyphicon-tags                   { &:before { content: \"\\e042\"; } }\n.glyphicon-book                   { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark               { &:before { content: \"\\e044\"; } }\n.glyphicon-print                  { &:before { content: \"\\e045\"; } }\n.glyphicon-camera                 { &:before { content: \"\\e046\"; } }\n.glyphicon-font                   { &:before { content: \"\\e047\"; } }\n.glyphicon-bold                   { &:before { content: \"\\e048\"; } }\n.glyphicon-italic                 { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height            { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width             { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left             { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center           { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right            { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify          { &:before { content: \"\\e055\"; } }\n.glyphicon-list                   { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left            { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right           { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video         { &:before { content: \"\\e059\"; } }\n.glyphicon-picture                { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker             { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust                 { &:before { content: \"\\e063\"; } }\n.glyphicon-tint                   { &:before { content: \"\\e064\"; } }\n.glyphicon-edit                   { &:before { content: \"\\e065\"; } }\n.glyphicon-share                  { &:before { content: \"\\e066\"; } }\n.glyphicon-check                  { &:before { content: \"\\e067\"; } }\n.glyphicon-move                   { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward          { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward          { &:before { content: \"\\e070\"; } }\n.glyphicon-backward               { &:before { content: \"\\e071\"; } }\n.glyphicon-play                   { &:before { content: \"\\e072\"; } }\n.glyphicon-pause                  { &:before { content: \"\\e073\"; } }\n.glyphicon-stop                   { &:before { content: \"\\e074\"; } }\n.glyphicon-forward                { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward           { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward           { &:before { content: \"\\e077\"; } }\n.glyphicon-eject                  { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left           { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right          { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign              { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign             { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign            { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign                { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign          { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign              { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot             { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle          { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle              { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle             { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left             { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right            { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up               { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down             { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt              { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full            { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small           { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign       { &:before { content: \"\\e101\"; } }\n.glyphicon-gift                   { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf                   { &:before { content: \"\\e103\"; } }\n.glyphicon-fire                   { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open               { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close              { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign           { &:before { content: \"\\e107\"; } }\n.glyphicon-plane                  { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar               { &:before { content: \"\\e109\"; } }\n.glyphicon-random                 { &:before { content: \"\\e110\"; } }\n.glyphicon-comment                { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet                 { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up             { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down           { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet                { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart          { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close           { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open            { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical        { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal      { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd                    { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn               { &:before { content: \"\\e122\"; } }\n.glyphicon-bell                   { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate            { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up              { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down            { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right             { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left              { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up                { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down              { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right     { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left      { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up        { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down      { &:before { content: \"\\e134\"; } }\n.glyphicon-globe                  { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench                 { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks                  { &:before { content: \"\\e137\"; } }\n.glyphicon-filter                 { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase              { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen             { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard              { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip              { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty            { &:before { content: \"\\e143\"; } }\n.glyphicon-link                   { &:before { content: \"\\e144\"; } }\n.glyphicon-phone                  { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin                { &:before { content: \"\\e146\"; } }\n.glyphicon-usd                    { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp                    { &:before { content: \"\\e149\"; } }\n.glyphicon-sort                   { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet       { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt   { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order          { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt      { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes     { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked              { &:before { content: \"\\e157\"; } }\n.glyphicon-expand                 { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down          { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up            { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in                 { &:before { content: \"\\e161\"; } }\n.glyphicon-flash                  { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out                { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window             { &:before { content: \"\\e164\"; } }\n.glyphicon-record                 { &:before { content: \"\\e165\"; } }\n.glyphicon-save                   { &:before { content: \"\\e166\"; } }\n.glyphicon-open                   { &:before { content: \"\\e167\"; } }\n.glyphicon-saved                  { &:before { content: \"\\e168\"; } }\n.glyphicon-import                 { &:before { content: \"\\e169\"; } }\n.glyphicon-export                 { &:before { content: \"\\e170\"; } }\n.glyphicon-send                   { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk            { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved           { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove          { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save            { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open            { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card            { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer               { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery                { &:before { content: \"\\e179\"; } }\n.glyphicon-header                 { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed             { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone               { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt              { &:before { content: \"\\e183\"; } }\n.glyphicon-tower                  { &:before { content: \"\\e184\"; } }\n.glyphicon-stats                  { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video               { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video               { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles              { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo           { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby            { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1              { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1              { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1              { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark         { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark      { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download         { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload           { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer           { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous         { &:before { content: \"\\e200\"; } }\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top:   @caret-width-base solid;\n  border-right: @caret-width-base solid transparent;\n  border-left:  @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropdown {\n  position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n  outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: @zindex-dropdown;\n  display: none; // none by default, but block on \"open\" of the menu\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0; // override default ul\n  list-style: none;\n  font-size: @font-size-base;\n  background-color: @dropdown-bg;\n  border: 1px solid @dropdown-fallback-border; // IE8 fallback\n  border: 1px solid @dropdown-border;\n  border-radius: @border-radius-base;\n  .box-shadow(0 6px 12px rgba(0,0,0,.175));\n  background-clip: padding-box;\n\n  // Aligns the dropdown menu to right\n  //\n  // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n  &.pull-right {\n    right: 0;\n    left: auto;\n  }\n\n  // Dividers (basically an hr) within the dropdown\n  .divider {\n    .nav-divider(@dropdown-divider-bg);\n  }\n\n  // Links within the dropdown menu\n  > li > a {\n    display: block;\n    padding: 3px 20px;\n    clear: both;\n    font-weight: normal;\n    line-height: @line-height-base;\n    color: @dropdown-link-color;\n    white-space: nowrap; // prevent links from randomly breaking onto new lines\n  }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    color: @dropdown-link-hover-color;\n    background-color: @dropdown-link-hover-bg;\n  }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n  &,\n  &:hover,\n  &:focus {\n    color: @dropdown-link-active-color;\n    text-decoration: none;\n    outline: 0;\n    background-color: @dropdown-link-active-bg;\n  }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n  &,\n  &:hover,\n  &:focus {\n    color: @dropdown-link-disabled-color;\n  }\n}\n// Nuke hover/focus effects\n.dropdown-menu > .disabled > a {\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    background-color: transparent;\n    background-image: none; // Remove CSS gradient\n    .reset-filter();\n    cursor: not-allowed;\n  }\n}\n\n// Open state for the dropdown\n.open {\n  // Show the menu\n  > .dropdown-menu {\n    display: block;\n  }\n\n  // Remove the outline when :focus is triggered\n  > a {\n    outline: 0;\n  }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n  left: auto; // Reset the default from `.dropdown-menu`\n  right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n  left: 0;\n  right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: @font-size-small;\n  line-height: @line-height-base;\n  color: @dropdown-header-color;\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  top: 0;\n  z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n  // Reverse the caret\n  .caret {\n    border-top: 0;\n    border-bottom: @caret-width-base solid;\n    content: \"\";\n  }\n  // Different positioning for bottom up menu\n  .dropdown-menu {\n    top: auto;\n    bottom: 100%;\n    margin-bottom: 1px;\n  }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-right {\n    .dropdown-menu {\n      .dropdown-menu-right();\n    }\n    // Necessary for overrides of the default right aligned menu.\n    // Will remove come v4 in all likelihood.\n    .dropdown-menu-left {\n      .dropdown-menu-left();\n    }\n  }\n}\n\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n  position: relative; // For dropdowns\n  display: table;\n  border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n  // Undo padding and float of grid classes\n  &[class*=\"col-\"] {\n    float: none;\n    padding-left: 0;\n    padding-right: 0;\n  }\n\n  .form-control {\n    // Ensure that the input is always above the *appended* addon button for\n    // proper border colors.\n    position: relative;\n    z-index: 2;\n\n    // IE9 fubars the placeholder attribute in text inputs and the arrows on\n    // select elements in input groups. To fix it, we float the input. Details:\n    // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n    float: left;\n\n    width: 100%;\n    margin-bottom: 0;\n  }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn { .input-lg(); }\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn { .input-sm(); }\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n  padding: @padding-base-vertical @padding-base-horizontal;\n  font-size: @font-size-base;\n  font-weight: normal;\n  line-height: 1;\n  color: @input-color;\n  text-align: center;\n  background-color: @input-group-addon-bg;\n  border: 1px solid @input-group-addon-border-color;\n  border-radius: @border-radius-base;\n\n  // Sizing\n  &.input-sm {\n    padding: @padding-small-vertical @padding-small-horizontal;\n    font-size: @font-size-small;\n    border-radius: @border-radius-small;\n  }\n  &.input-lg {\n    padding: @padding-large-vertical @padding-large-horizontal;\n    font-size: @font-size-large;\n    border-radius: @border-radius-large;\n  }\n\n  // Nuke default margins from checkboxes and radios to vertically center within.\n  input[type=\"radio\"],\n  input[type=\"checkbox\"] {\n    margin-top: 0;\n  }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  .border-right-radius(0);\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  .border-left-radius(0);\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n  position: relative;\n  // Jankily prevent input button groups from wrapping with `white-space` and\n  // `font-size` in combination with `inline-block` on buttons.\n  font-size: 0;\n  white-space: nowrap;\n\n  // Negative margin for spacing, position for bringing hovered/focused/actived\n  // element above the siblings.\n  > .btn {\n    position: relative;\n    + .btn {\n      margin-left: -1px;\n    }\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active {\n      z-index: 2;\n    }\n  }\n\n  // Negative margin to only have a 1px border between the two\n  &:first-child {\n    > .btn,\n    > .btn-group {\n      margin-right: -1px;\n    }\n  }\n  &:last-child {\n    > .btn,\n    > .btn-group {\n      margin-left: -1px;\n    }\n  }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n  margin-bottom: 0;\n  padding-left: 0; // Override default ul/ol\n  list-style: none;\n  &:extend(.clearfix all);\n\n  > li {\n    position: relative;\n    display: block;\n\n    > a {\n      position: relative;\n      display: block;\n      padding: @nav-link-padding;\n      &:hover,\n      &:focus {\n        text-decoration: none;\n        background-color: @nav-link-hover-bg;\n      }\n    }\n\n    // Disabled state sets text to gray and nukes hover/tab effects\n    &.disabled > a {\n      color: @nav-disabled-link-color;\n\n      &:hover,\n      &:focus {\n        color: @nav-disabled-link-hover-color;\n        text-decoration: none;\n        background-color: transparent;\n        cursor: not-allowed;\n      }\n    }\n  }\n\n  // Open dropdowns\n  .open > a {\n    &,\n    &:hover,\n    &:focus {\n      background-color: @nav-link-hover-bg;\n      border-color: @link-color;\n    }\n  }\n\n  // Nav dividers (deprecated with v3.0.1)\n  //\n  // This should have been removed in v3 with the dropping of `.nav-list`, but\n  // we missed it. We don't currently support this anywhere, but in the interest\n  // of maintaining backward compatibility in case you use it, it's deprecated.\n  .nav-divider {\n    .nav-divider();\n  }\n\n  // Prevent IE8 from misplacing imgs\n  //\n  // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n  > li > a > img {\n    max-width: none;\n  }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n  border-bottom: 1px solid @nav-tabs-border-color;\n  > li {\n    float: left;\n    // Make the list-items overlay the bottom border\n    margin-bottom: -1px;\n\n    // Actual tabs (as links)\n    > a {\n      margin-right: 2px;\n      line-height: @line-height-base;\n      border: 1px solid transparent;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n      &:hover {\n        border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n      }\n    }\n\n    // Active state, and its :hover to override normal :hover\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @nav-tabs-active-link-hover-color;\n        background-color: @nav-tabs-active-link-hover-bg;\n        border: 1px solid @nav-tabs-active-link-hover-border-color;\n        border-bottom-color: transparent;\n        cursor: default;\n      }\n    }\n  }\n  // pulling this in mainly for less shorthand\n  &.nav-justified {\n    .nav-justified();\n    .nav-tabs-justified();\n  }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n  > li {\n    float: left;\n\n    // Links rendered as pills\n    > a {\n      border-radius: @nav-pills-border-radius;\n    }\n    + li {\n      margin-left: 2px;\n    }\n\n    // Active state\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @nav-pills-active-link-hover-color;\n        background-color: @nav-pills-active-link-hover-bg;\n      }\n    }\n  }\n}\n\n\n// Stacked pills\n.nav-stacked {\n  > li {\n    float: none;\n    + li {\n      margin-top: 2px;\n      margin-left: 0; // no need for this gap between nav items\n    }\n  }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n  width: 100%;\n\n  > li {\n    float: none;\n     > a {\n      text-align: center;\n      margin-bottom: 5px;\n    }\n  }\n\n  > .dropdown .dropdown-menu {\n    top: auto;\n    left: auto;\n  }\n\n  @media (min-width: @screen-sm-min) {\n    > li {\n      display: table-cell;\n      width: 1%;\n      > a {\n        margin-bottom: 0;\n      }\n    }\n  }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n  border-bottom: 0;\n\n  > li > a {\n    // Override margin from .nav-tabs\n    margin-right: 0;\n    border-radius: @border-radius-base;\n  }\n\n  > .active > a,\n  > .active > a:hover,\n  > .active > a:focus {\n    border: 1px solid @nav-tabs-justified-link-border-color;\n  }\n\n  @media (min-width: @screen-sm-min) {\n    > li > a {\n      border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n    }\n    > .active > a,\n    > .active > a:hover,\n    > .active > a:focus {\n      border-bottom-color: @nav-tabs-justified-active-link-border-color;\n    }\n  }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n  > .tab-pane {\n    display: none;\n  }\n  > .active {\n    display: block;\n  }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n  // make dropdown border overlap tab border\n  margin-top: -1px;\n  // Remove the top rounded corners here since there is a hard edge above the menu\n  .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n  position: relative;\n  min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n  margin-bottom: @navbar-margin-bottom;\n  border: 1px solid transparent;\n\n  // Prevent floats from breaking the navbar\n  &:extend(.clearfix all);\n\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: @navbar-border-radius;\n  }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n  &:extend(.clearfix all);\n\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n  }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n  max-height: @navbar-collapse-max-height;\n  overflow-x: visible;\n  padding-right: @navbar-padding-horizontal;\n  padding-left:  @navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n  &:extend(.clearfix all);\n  -webkit-overflow-scrolling: touch;\n\n  &.in {\n    overflow-y: auto;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    width: auto;\n    border-top: 0;\n    box-shadow: none;\n\n    &.collapse {\n      display: block !important;\n      height: auto !important;\n      padding-bottom: 0; // Override default setting\n      overflow: visible !important;\n    }\n\n    &.in {\n      overflow-y: visible;\n    }\n\n    // Undo the collapse side padding for navbars with containers to ensure\n    // alignment of right-aligned contents.\n    .navbar-fixed-top &,\n    .navbar-static-top &,\n    .navbar-fixed-bottom & {\n      padding-left: 0;\n      padding-right: 0;\n    }\n  }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n  > .navbar-header,\n  > .navbar-collapse {\n    margin-right: -@navbar-padding-horizontal;\n    margin-left:  -@navbar-padding-horizontal;\n\n    @media (min-width: @grid-float-breakpoint) {\n      margin-right: 0;\n      margin-left:  0;\n    }\n  }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n  z-index: @zindex-navbar;\n  border-width: 0 0 1px;\n\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: @zindex-navbar-fixed;\n\n  // Undo the rounded corners\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0; // override .navbar defaults\n  border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n  float: left;\n  padding: @navbar-padding-vertical @navbar-padding-horizontal;\n  font-size: @font-size-large;\n  line-height: @line-height-computed;\n  height: @navbar-height;\n\n  &:hover,\n  &:focus {\n    text-decoration: none;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    .navbar > .container &,\n    .navbar > .container-fluid & {\n      margin-left: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n  position: relative;\n  float: right;\n  margin-right: @navbar-padding-horizontal;\n  padding: 9px 10px;\n  .navbar-vertical-align(34px);\n  background-color: transparent;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  border-radius: @border-radius-base;\n\n  // We remove the `outline` here, but later compensate by attaching `:hover`\n  // styles to `:focus`.\n  &:focus {\n    outline: none;\n  }\n\n  // Bars\n  .icon-bar {\n    display: block;\n    width: 22px;\n    height: 2px;\n    border-radius: 1px;\n  }\n  .icon-bar + .icon-bar {\n    margin-top: 4px;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    display: none;\n  }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n  margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n  > li > a {\n    padding-top:    10px;\n    padding-bottom: 10px;\n    line-height: @line-height-computed;\n  }\n\n  @media (max-width: @grid-float-breakpoint-max) {\n    // Dropdowns get custom display when collapsed\n    .open .dropdown-menu {\n      position: static;\n      float: none;\n      width: auto;\n      margin-top: 0;\n      background-color: transparent;\n      border: 0;\n      box-shadow: none;\n      > li > a,\n      .dropdown-header {\n        padding: 5px 15px 5px 25px;\n      }\n      > li > a {\n        line-height: @line-height-computed;\n        &:hover,\n        &:focus {\n          background-image: none;\n        }\n      }\n    }\n  }\n\n  // Uncollapse the nav\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n    margin: 0;\n\n    > li {\n      float: left;\n      > a {\n        padding-top:    @navbar-padding-vertical;\n        padding-bottom: @navbar-padding-vertical;\n      }\n    }\n\n    &.navbar-right:last-child {\n      margin-right: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-left  { .pull-left(); }\n  .navbar-right { .pull-right(); }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n  margin-left: -@navbar-padding-horizontal;\n  margin-right: -@navbar-padding-horizontal;\n  padding: 10px @navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n  .box-shadow(@shadow);\n\n  // Mixin behavior for optimum display\n  .form-inline();\n\n  .form-group {\n    @media (max-width: @grid-float-breakpoint-max) {\n      margin-bottom: 5px;\n    }\n  }\n\n  // Vertically center in expanded, horizontal navbar\n  .navbar-vertical-align(@input-height-base);\n\n  // Undo 100% width for pull classes\n  @media (min-width: @grid-float-breakpoint) {\n    width: auto;\n    border: 0;\n    margin-left: 0;\n    margin-right: 0;\n    padding-top: 0;\n    padding-bottom: 0;\n    .box-shadow(none);\n\n    // Outdent the form if last child to line up with content down the page\n    &.navbar-right:last-child {\n      margin-right: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n  .navbar-vertical-align(@input-height-base);\n\n  &.btn-sm {\n    .navbar-vertical-align(@input-height-small);\n  }\n  &.btn-xs {\n    .navbar-vertical-align(22);\n  }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n  .navbar-vertical-align(@line-height-computed);\n\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n    margin-left: @navbar-padding-horizontal;\n    margin-right: @navbar-padding-horizontal;\n\n    // Outdent the form if last child to line up with content down the page\n    &.navbar-right:last-child {\n      margin-right: 0;\n    }\n  }\n}\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n  background-color: @navbar-default-bg;\n  border-color: @navbar-default-border;\n\n  .navbar-brand {\n    color: @navbar-default-brand-color;\n    &:hover,\n    &:focus {\n      color: @navbar-default-brand-hover-color;\n      background-color: @navbar-default-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: @navbar-default-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: @navbar-default-link-color;\n\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-hover-color;\n        background-color: @navbar-default-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-active-color;\n        background-color: @navbar-default-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-disabled-color;\n        background-color: @navbar-default-link-disabled-bg;\n      }\n    }\n  }\n\n  .navbar-toggle {\n    border-color: @navbar-default-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: @navbar-default-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: @navbar-default-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: @navbar-default-border;\n  }\n\n  // Dropdown menu items\n  .navbar-nav {\n    // Remove background color from open dropdown\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: @navbar-default-link-active-bg;\n        color: @navbar-default-link-active-color;\n      }\n    }\n\n    @media (max-width: @grid-float-breakpoint-max) {\n      // Dropdowns get custom display when collapsed\n      .open .dropdown-menu {\n        > li > a {\n          color: @navbar-default-link-color;\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-hover-color;\n            background-color: @navbar-default-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-active-color;\n            background-color: @navbar-default-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-disabled-color;\n            background-color: @navbar-default-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n\n  // Links in navbars\n  //\n  // Add a class to ensure links outside the navbar nav are colored correctly.\n\n  .navbar-link {\n    color: @navbar-default-link-color;\n    &:hover {\n      color: @navbar-default-link-hover-color;\n    }\n  }\n\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n  background-color: @navbar-inverse-bg;\n  border-color: @navbar-inverse-border;\n\n  .navbar-brand {\n    color: @navbar-inverse-brand-color;\n    &:hover,\n    &:focus {\n      color: @navbar-inverse-brand-hover-color;\n      background-color: @navbar-inverse-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: @navbar-inverse-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: @navbar-inverse-link-color;\n\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-hover-color;\n        background-color: @navbar-inverse-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-active-color;\n        background-color: @navbar-inverse-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-disabled-color;\n        background-color: @navbar-inverse-link-disabled-bg;\n      }\n    }\n  }\n\n  // Darken the responsive nav toggle\n  .navbar-toggle {\n    border-color: @navbar-inverse-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: @navbar-inverse-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: @navbar-inverse-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: darken(@navbar-inverse-bg, 7%);\n  }\n\n  // Dropdowns\n  .navbar-nav {\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: @navbar-inverse-link-active-bg;\n        color: @navbar-inverse-link-active-color;\n      }\n    }\n\n    @media (max-width: @grid-float-breakpoint-max) {\n      // Dropdowns get custom display\n      .open .dropdown-menu {\n        > .dropdown-header {\n          border-color: @navbar-inverse-border;\n        }\n        .divider {\n          background-color: @navbar-inverse-border;\n        }\n        > li > a {\n          color: @navbar-inverse-link-color;\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-hover-color;\n            background-color: @navbar-inverse-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-active-color;\n            background-color: @navbar-inverse-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-disabled-color;\n            background-color: @navbar-inverse-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n  .navbar-link {\n    color: @navbar-inverse-link-color;\n    &:hover {\n      color: @navbar-inverse-link-hover-color;\n    }\n  }\n\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n  .clearfix();\n}\n.center-block {\n  .center-block();\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n  position: fixed;\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n  padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n  margin-bottom: @line-height-computed;\n  list-style: none;\n  background-color: @breadcrumb-bg;\n  border-radius: @border-radius-base;\n\n  > li {\n    display: inline-block;\n\n    + li:before {\n      content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n      padding: 0 5px;\n      color: @breadcrumb-color;\n    }\n  }\n\n  > .active {\n    color: @breadcrumb-active-color;\n  }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: @line-height-computed 0;\n  border-radius: @border-radius-base;\n\n  > li {\n    display: inline; // Remove list-style and block-level defaults\n    > a,\n    > span {\n      position: relative;\n      float: left; // Collapse white-space\n      padding: @padding-base-vertical @padding-base-horizontal;\n      line-height: @line-height-base;\n      text-decoration: none;\n      color: @pagination-color;\n      background-color: @pagination-bg;\n      border: 1px solid @pagination-border;\n      margin-left: -1px;\n    }\n    &:first-child {\n      > a,\n      > span {\n        margin-left: 0;\n        .border-left-radius(@border-radius-base);\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        .border-right-radius(@border-radius-base);\n      }\n    }\n  }\n\n  > li > a,\n  > li > span {\n    &:hover,\n    &:focus {\n      color: @pagination-hover-color;\n      background-color: @pagination-hover-bg;\n      border-color: @pagination-hover-border;\n    }\n  }\n\n  > .active > a,\n  > .active > span {\n    &,\n    &:hover,\n    &:focus {\n      z-index: 2;\n      color: @pagination-active-color;\n      background-color: @pagination-active-bg;\n      border-color: @pagination-active-border;\n      cursor: default;\n    }\n  }\n\n  > .disabled {\n    > span,\n    > span:hover,\n    > span:focus,\n    > a,\n    > a:hover,\n    > a:focus {\n      color: @pagination-disabled-color;\n      background-color: @pagination-disabled-bg;\n      border-color: @pagination-disabled-border;\n      cursor: not-allowed;\n    }\n  }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n  .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n  .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small);\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n  padding-left: 0;\n  margin: @line-height-computed 0;\n  list-style: none;\n  text-align: center;\n  &:extend(.clearfix all);\n  li {\n    display: inline;\n    > a,\n    > span {\n      display: inline-block;\n      padding: 5px 14px;\n      background-color: @pager-bg;\n      border: 1px solid @pager-border;\n      border-radius: @pager-border-radius;\n    }\n\n    > a:hover,\n    > a:focus {\n      text-decoration: none;\n      background-color: @pager-hover-bg;\n    }\n  }\n\n  .next {\n    > a,\n    > span {\n      float: right;\n    }\n  }\n\n  .previous {\n    > a,\n    > span {\n      float: left;\n    }\n  }\n\n  .disabled {\n    > a,\n    > a:hover,\n    > a:focus,\n    > span {\n      color: @pager-disabled-color;\n      background-color: @pager-bg;\n      cursor: not-allowed;\n    }\n  }\n\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: @label-color;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n\n  // Add hover effects, but only for links\n  &[href] {\n    &:hover,\n    &:focus {\n      color: @label-link-hover-color;\n      text-decoration: none;\n      cursor: pointer;\n    }\n  }\n\n  // Empty labels collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for labels in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n  .label-variant(@label-default-bg);\n}\n\n.label-primary {\n  .label-variant(@label-primary-bg);\n}\n\n.label-success {\n  .label-variant(@label-success-bg);\n}\n\n.label-info {\n  .label-variant(@label-info-bg);\n}\n\n.label-warning {\n  .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n  .label-variant(@label-danger-bg);\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base classes\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: @font-size-small;\n  font-weight: @badge-font-weight;\n  color: @badge-color;\n  line-height: @badge-line-height;\n  vertical-align: baseline;\n  white-space: nowrap;\n  text-align: center;\n  background-color: @badge-bg;\n  border-radius: @badge-border-radius;\n\n  // Empty badges collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for badges in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n  .btn-xs & {\n    top: 0;\n    padding: 1px 5px;\n  }\n}\n\n// Hover state, but only for links\na.badge {\n  &:hover,\n  &:focus {\n    color: @badge-link-hover-color;\n    text-decoration: none;\n    cursor: pointer;\n  }\n}\n\n// Account for counters in navs\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: @badge-active-color;\n  background-color: @badge-active-bg;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n  padding: @jumbotron-padding;\n  margin-bottom: @jumbotron-padding;\n  color: @jumbotron-color;\n  background-color: @jumbotron-bg;\n\n  h1,\n  .h1 {\n    color: @jumbotron-heading-color;\n  }\n  p {\n    margin-bottom: (@jumbotron-padding / 2);\n    font-size: @jumbotron-font-size;\n    font-weight: 200;\n  }\n\n  .container & {\n    border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n  }\n\n  .container {\n    max-width: 100%;\n  }\n\n  @media screen and (min-width: @screen-sm-min) {\n    padding-top:    (@jumbotron-padding * 1.6);\n    padding-bottom: (@jumbotron-padding * 1.6);\n\n    .container & {\n      padding-left:  (@jumbotron-padding * 2);\n      padding-right: (@jumbotron-padding * 2);\n    }\n\n    h1,\n    .h1 {\n      font-size: (@font-size-base * 4.5);\n    }\n  }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n  padding: @alert-padding;\n  margin-bottom: @line-height-computed;\n  border: 1px solid transparent;\n  border-radius: @alert-border-radius;\n\n  // Headings for larger alerts\n  h4 {\n    margin-top: 0;\n    // Specified for the h4 to prevent conflicts of changing @headings-color\n    color: inherit;\n  }\n  // Provide class for links that match alerts\n  .alert-link {\n    font-weight: @alert-link-font-weight;\n  }\n\n  // Improve alignment and spacing of inner content\n  > p,\n  > ul {\n    margin-bottom: 0;\n  }\n  > p + p {\n    margin-top: 5px;\n  }\n}\n\n// Dismissable alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable {\n padding-right: (@alert-padding + 20);\n\n  // Adjust close link position\n  .close {\n    position: relative;\n    top: -2px;\n    right: -21px;\n    color: inherit;\n  }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n  .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n.alert-info {\n  .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n.alert-warning {\n  .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n.alert-danger {\n  .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n  overflow: hidden;\n  height: @line-height-computed;\n  margin-bottom: @line-height-computed;\n  background-color: @progress-bg;\n  border-radius: @border-radius-base;\n  .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: @font-size-small;\n  line-height: @line-height-computed;\n  color: @progress-bar-color;\n  text-align: center;\n  background-color: @progress-bar-bg;\n  .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n  .transition(width .6s ease);\n}\n\n// Striped bars\n.progress-striped .progress-bar {\n  #gradient > .striped();\n  background-size: 40px 40px;\n}\n\n// Call animation for the active one\n.progress.active .progress-bar {\n  .animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n  .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n  .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n  .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n  .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Media objects\n// Source: http://stubbornella.org/content/?p=497\n// --------------------------------------------------\n\n\n// Common styles\n// -------------------------\n\n// Clear the floats\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n\n// Proper spacing between instances of .media\n.media,\n.media .media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n\n// For images and videos, set to block\n.media-object {\n  display: block;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n  margin: 0 0 5px;\n}\n\n\n// Media image alignment\n// -------------------------\n\n.media {\n  > .pull-left {\n    margin-right: 10px;\n  }\n  > .pull-right {\n    margin-left: 10px;\n  }\n}\n\n\n// Media list variation\n// -------------------------\n\n// Undo default ul/ol styles\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on 
    ,
      , or
      .\n\n.list-group {\n // No need to set list-style: none; since .list-group-item is block level\n margin-bottom: 20px;\n padding-left: 0; // reset padding because ul and ol\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n // Place the border on the list items and negative margin up for better styling\n margin-bottom: -1px;\n background-color: @list-group-bg;\n border: 1px solid @list-group-border;\n\n // Round the first and last items\n &:first-child {\n .border-top-radius(@list-group-border-radius);\n }\n &:last-child {\n margin-bottom: 0;\n .border-bottom-radius(@list-group-border-radius);\n }\n\n // Align badges within list items\n > .badge {\n float: right;\n }\n > .badge + .badge {\n margin-right: 5px;\n }\n}\n\n\n// Linked list items\n//\n// Use anchor elements instead of `li`s or `div`s to create linked list items.\n// Includes an extra `.active` modifier class for showing selected items.\n\na.list-group-item {\n color: @list-group-link-color;\n\n .list-group-item-heading {\n color: @list-group-link-heading-color;\n }\n\n // Hover state\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: @list-group-hover-bg;\n }\n\n // Active class on item itself, not parent\n &.active,\n &.active:hover,\n &.active:focus {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: @list-group-active-color;\n background-color: @list-group-active-bg;\n border-color: @list-group-active-border;\n\n // Force color to inherit for custom content\n .list-group-item-heading {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-active-text-color;\n }\n }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n.list-group-item-variant(success; @state-success-bg; @state-success-text);\n.list-group-item-variant(info; @state-info-bg; @state-info-text);\n.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);\n.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\n\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n","//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n margin-bottom: @line-height-computed;\n background-color: @panel-bg;\n border: 1px solid transparent;\n border-radius: @panel-border-radius;\n .box-shadow(0 1px 1px rgba(0,0,0,.05));\n}\n\n// Panel contents\n.panel-body {\n padding: @panel-body-padding;\n &:extend(.clearfix all);\n}\n\n// Optional heading\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n .border-top-radius((@panel-border-radius - 1));\n\n > .dropdown .dropdown-toggle {\n color: inherit;\n }\n}\n\n// Within heading, strip any `h*` tag of its default margins for spacing.\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: ceil((@font-size-base * 1.125));\n color: inherit;\n\n > a {\n color: inherit;\n }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n padding: 10px 15px;\n background-color: @panel-footer-bg;\n border-top: 1px solid @panel-inner-border;\n .border-bottom-radius((@panel-border-radius - 1));\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n > .list-group {\n margin-bottom: 0;\n\n .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n }\n\n // Add border top radius for first one\n &:first-child {\n .list-group-item:first-child {\n border-top: 0;\n .border-top-radius((@panel-border-radius - 1));\n }\n }\n // Add border bottom radius for last one\n &:last-child {\n .list-group-item:last-child {\n border-bottom: 0;\n .border-bottom-radius((@panel-border-radius - 1));\n }\n }\n }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n .list-group-item:first-child {\n border-top-width: 0;\n }\n}\n\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n > .table,\n > .table-responsive > .table {\n margin-bottom: 0;\n }\n // Add border top radius for first one\n > .table:first-child,\n > .table-responsive:first-child > .table:first-child {\n .border-top-radius((@panel-border-radius - 1));\n\n > thead:first-child,\n > tbody:first-child {\n > tr:first-child {\n td:first-child,\n th:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-top-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n // Add border bottom radius for last one\n > .table:last-child,\n > .table-responsive:last-child > .table:last-child {\n .border-bottom-radius((@panel-border-radius - 1));\n\n > tbody:last-child,\n > tfoot:last-child {\n > tr:last-child {\n td:first-child,\n th:first-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-bottom-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n > .panel-body + .table,\n > .panel-body + .table-responsive {\n border-top: 1px solid @table-border-color;\n }\n > .table > tbody:first-child > tr:first-child th,\n > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n }\n > .table-bordered,\n > .table-responsive > .table-bordered {\n border: 0;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n > thead,\n > tbody {\n > tr:first-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n > tbody,\n > tfoot {\n > tr:last-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n }\n > .table-responsive {\n border: 0;\n margin-bottom: 0;\n }\n}\n\n\n// Collapsable panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n margin-bottom: @line-height-computed;\n\n // Tighten up margin so it's only between panels\n .panel {\n margin-bottom: 0;\n border-radius: @panel-border-radius;\n overflow: hidden; // crop contents when collapsed\n + .panel {\n margin-top: 5px;\n }\n }\n\n .panel-heading {\n border-bottom: 0;\n + .panel-collapse .panel-body {\n border-top: 1px solid @panel-inner-border;\n }\n }\n .panel-footer {\n border-top: 0;\n + .panel-collapse .panel-body {\n border-bottom: 1px solid @panel-inner-border;\n }\n }\n}\n\n\n// Contextual variations\n.panel-default {\n .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);\n}\n.panel-primary {\n .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);\n}\n.panel-success {\n .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);\n}\n.panel-info {\n .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);\n}\n.panel-warning {\n .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);\n}\n.panel-danger {\n .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);\n}\n","//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: @well-bg;\n border: 1px solid @well-border;\n border-radius: @border-radius-base;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));\n blockquote {\n border-color: #ddd;\n border-color: rgba(0,0,0,.15);\n }\n}\n\n// Sizes\n.well-lg {\n padding: 24px;\n border-radius: @border-radius-large;\n}\n.well-sm {\n padding: 9px;\n border-radius: @border-radius-small;\n}\n","//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n float: right;\n font-size: (@font-size-base * 1.5);\n font-weight: @close-font-weight;\n line-height: 1;\n color: @close-color;\n text-shadow: @close-text-shadow;\n .opacity(.2);\n\n &:hover,\n &:focus {\n color: @close-color;\n text-decoration: none;\n cursor: pointer;\n .opacity(.5);\n }\n\n // Additional properties for button version\n // iOS requires the button element instead of an anchor tag.\n // If you want the anchor version, it requires `href=\"#\"`.\n button& {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n }\n}\n","//\n// Modals\n// --------------------------------------------------\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n display: none;\n overflow: auto;\n overflow-y: scroll;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal;\n -webkit-overflow-scrolling: touch;\n\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n\n // When fading in the modal, animate it to slide down\n &.fade .modal-dialog {\n .translate(0, -25%);\n .transition-transform(~\"0.3s ease-out\");\n }\n &.in .modal-dialog { .translate(0, 0)}\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n background-color: @modal-content-bg;\n border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n border: 1px solid @modal-content-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 3px 9px rgba(0,0,0,.5));\n background-clip: padding-box;\n // Remove focus outline from opened modal\n outline: none;\n}\n\n// Modal background\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal-background;\n background-color: @modal-backdrop-bg;\n // Fade for backdrop\n &.fade { .opacity(0); }\n &.in { .opacity(@modal-backdrop-opacity); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n padding: @modal-title-padding;\n border-bottom: 1px solid @modal-header-border-color;\n min-height: (@modal-title-padding + @modal-title-line-height);\n}\n// Close icon\n.modal-header .close {\n margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n margin: 0;\n line-height: @modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n padding: @modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n margin-top: 15px;\n padding: (@modal-inner-padding - 1) @modal-inner-padding @modal-inner-padding;\n text-align: right; // right align buttons\n border-top: 1px solid @modal-footer-border-color;\n &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons\n\n // Properly space out buttons\n .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n }\n // but override that for button groups\n .btn-group .btn + .btn {\n margin-left: -1px;\n }\n // and override it for block buttons as well\n .btn-block + .btn-block {\n margin-left: 0;\n }\n}\n\n// Scale up the modal\n@media (min-width: @screen-sm-min) {\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n width: @modal-md;\n margin: 30px auto;\n }\n .modal-content {\n .box-shadow(0 5px 15px rgba(0,0,0,.5));\n }\n\n // Modal sizes\n .modal-sm { width: @modal-sm; }\n}\n\n@media (min-width: @screen-md-min) {\n .modal-lg { width: @modal-lg; }\n}\n","//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n position: absolute;\n z-index: @zindex-tooltip;\n display: block;\n visibility: visible;\n font-size: @font-size-small;\n line-height: 1.4;\n .opacity(0);\n\n &.in { .opacity(@tooltip-opacity); }\n &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; }\n &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; }\n &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; }\n &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: @tooltip-max-width;\n padding: 3px 8px;\n color: @tooltip-color;\n text-align: center;\n text-decoration: none;\n background-color: @tooltip-bg;\n border-radius: @border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip {\n &.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-left .tooltip-arrow {\n bottom: 0;\n left: @tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-right .tooltip-arrow {\n bottom: 0;\n right: @tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;\n border-right-color: @tooltip-arrow-color;\n }\n &.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-left-color: @tooltip-arrow-color;\n }\n &.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-left .tooltip-arrow {\n top: 0;\n left: @tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-right .tooltip-arrow {\n top: 0;\n right: @tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n}\n","//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: @zindex-popover;\n display: none;\n max-width: @popover-max-width;\n padding: 1px;\n text-align: left; // Reset given new insertion method\n background-color: @popover-bg;\n background-clip: padding-box;\n border: 1px solid @popover-fallback-border-color;\n border: 1px solid @popover-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 5px 10px rgba(0,0,0,.2));\n\n // Overrides for proper insertion\n white-space: normal;\n\n // Offset the popover to account for the popover arrow\n &.top { margin-top: -@popover-arrow-width; }\n &.right { margin-left: @popover-arrow-width; }\n &.bottom { margin-top: @popover-arrow-width; }\n &.left { margin-left: -@popover-arrow-width; }\n}\n\n.popover-title {\n margin: 0; // reset heading margin\n padding: 8px 14px;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 18px;\n background-color: @popover-title-bg;\n border-bottom: 1px solid darken(@popover-title-bg, 5%);\n border-radius: 5px 5px 0 0;\n}\n\n.popover-content {\n padding: 9px 14px;\n}\n\n// Arrows\n//\n// .arrow is outer, .arrow:after is inner\n\n.popover > .arrow {\n &,\n &:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n }\n}\n.popover > .arrow {\n border-width: @popover-arrow-outer-width;\n}\n.popover > .arrow:after {\n border-width: @popover-arrow-width;\n content: \"\";\n}\n\n.popover {\n &.top > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-top-color: @popover-arrow-outer-color;\n bottom: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n bottom: 1px;\n margin-left: -@popover-arrow-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-color;\n }\n }\n &.right > .arrow {\n top: 50%;\n left: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-right-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n left: 1px;\n bottom: -@popover-arrow-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-color;\n }\n }\n &.bottom > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-bottom-color: @popover-arrow-outer-color;\n top: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n top: 1px;\n margin-left: -@popover-arrow-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-color;\n }\n }\n\n &.left > .arrow {\n top: 50%;\n right: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-right-width: 0;\n border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-left-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: @popover-arrow-color;\n bottom: -@popover-arrow-width;\n }\n }\n\n}\n","//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: http://getbootstrap.com/getting-started/#browsers\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@-ms-viewport {\n width: device-width;\n}\n\n\n// Visibility utilities\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n .responsive-invisibility();\n}\n\n.visible-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-visibility();\n }\n}\n.visible-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-visibility();\n }\n}\n.visible-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-visibility();\n }\n}\n.visible-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-visibility();\n }\n}\n\n.hidden-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-invisibility();\n }\n}\n.hidden-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-invisibility();\n }\n}\n.hidden-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-invisibility();\n }\n}\n.hidden-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-invisibility();\n }\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n.visible-print {\n .responsive-invisibility();\n\n @media print {\n .responsive-visibility();\n }\n}\n\n.hidden-print {\n @media print {\n .responsive-invisibility();\n }\n}\n"]} \ No newline at end of file diff --git a/peacetrack/ui/bootstrap/css/bootstrap.min.css b/peacetrack/ui/bootstrap/css/bootstrap.min.css deleted file mode 100644 index 679272d2..00000000 --- a/peacetrack/ui/bootstrap/css/bootstrap.min.css +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap v3.1.1 (http://getbootstrap.com) - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ - -/*! normalize.css v3.0.0 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,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:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}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{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{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-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@media print{*{text-shadow:none!important;color:#000!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-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}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.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;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}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,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#999}h1,.h1,h2,.h2,h3,.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,.h4,h5,.h5,h6,.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:200;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-muted{color:#999}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}.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 p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#999}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}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;white-space:nowrap;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;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{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{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:0}.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:0}.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-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{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:0}.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:0}.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-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{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:0}.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:0}.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-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{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:0}.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:0}.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{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{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>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;overflow-x:scroll;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width: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;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=radio],input[type=checkbox]{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=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;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,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[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date]{line-height:34px}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:20px;margin-top:10px;margin-bottom:10px;padding-left:20px}.radio label,.checkbox label{display:inline;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.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}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.has-feedback .form-control-feedback{position:absolute;top:25px;right:0;display:block;width:34px;height:34px;line-height:34px;text-align:center}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{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;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{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;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{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;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.form-control-static{margin-bottom: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 .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{float:none;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-control-static{padding-top:7px}@media (min-width:768px){.form-horizontal .control-label{text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;border-color:#adadad}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{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:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{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:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{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:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#428bca;font-weight:400;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@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.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:"\2a"}.glyphicon-plus:before{content:"\2b"}.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"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{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;list-style:none;font-size:14px;background-color:#fff;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);background-clip:padding-box}.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:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#428bca}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#999}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.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-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-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-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>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right: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-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.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-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.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.33;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}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].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}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control: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=radio],.input-group-addon input[type=checkbox]{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:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-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:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-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:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{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{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.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:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.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:hover,.nav-tabs.nav-justified>.active>a:focus{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:hover,.nav-tabs.nav-justified>.active>a:focus{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:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.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{text-align:center;margin-bottom:5px}.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:hover,.nav-tabs-justified>.active>a:focus{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:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-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{max-height:340px;overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;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-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{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-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{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;padding:15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;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;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{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-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 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);margin-top:8px;margin-bottom:8px}@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 .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{float:none;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{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-left:15px;margin-right:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{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:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{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:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{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:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@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:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.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{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.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;line-height:1.42857143;text-decoration:none;color:#428bca;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.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:hover,.pager li>a:focus{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:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;background-color:#fff;cursor:not-allowed}.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}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#999}.label-default[href]:hover,.label-default[href]:focus{background-color:gray}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#999;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding: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}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-left:60px;padding-right: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:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.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{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.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}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;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:#428bca;-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;transition:width .6s ease}.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: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-size:40px 40px}.progress.active .progress-bar{-webkit-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: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: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: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: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,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.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-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}a.list-group-item.active .list-group-item-heading,a.list-group-item.active:hover .list-group-item-heading,a.list-group-item.active:focus .list-group-item-heading{color:inherit}a.list-group-item.active .list-group-item-text,a.list-group-item.active:hover .list-group-item-text,a.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{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-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>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{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.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 td:first-child,.panel>.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 td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th: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 th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.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 td:last-child,.panel>.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 td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th: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 th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.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 td:first-child,.panel>.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 td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.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 td:last-child,.panel>.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 td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.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{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px;overflow:hidden}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.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-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.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-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-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-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-footer+.panel-collapse .panel-body{border-bottom-color:#ebccd1}.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;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:auto;overflow-y:scroll;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:20px}.modal-footer{margin-top:15px;padding:19px 20px 20px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@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:1030;display:block;visibility:visible;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;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{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;right: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;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#fff;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);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:400;line-height:18px;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{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;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{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.5) 0),color-stop(rgba(0,0,0,.0001) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.0001) 0),color-stop(rgba(0,0,0,.5) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.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%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;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-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right: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;visibility:hidden!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!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}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}@media print{.hidden-print{display:none!important}} \ No newline at end of file diff --git a/peacetrack/ui/bootstrap/fonts/glyphicons-halflings-regular.eot b/peacetrack/ui/bootstrap/fonts/glyphicons-halflings-regular.eot deleted file mode 100644 index 4a4ca865d67e86f961bc6e2ef00bffa4e34bb9ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20335 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

      !oRptb@n+ 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 diff --git a/peacetrack/ui/bootstrap/fonts/glyphicons-halflings-regular.svg b/peacetrack/ui/bootstrap/fonts/glyphicons-halflings-regular.svg deleted file mode 100644 index e3e2dc73..00000000 --- a/peacetrack/ui/bootstrap/fonts/glyphicons-halflings-regular.svg +++ /dev/null @@ -1,229 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/peacetrack/ui/bootstrap/fonts/glyphicons-halflings-regular.ttf b/peacetrack/ui/bootstrap/fonts/glyphicons-halflings-regular.ttf deleted file mode 100644 index 67fa00bf83801d2fa568546b982c80d27f6ef74e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41280 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

      PBK;&Wcg|NX{>QR@W3{K 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 diff --git a/peacetrack/ui/bootstrap/fonts/glyphicons-halflings-regular.woff b/peacetrack/ui/bootstrap/fonts/glyphicons-halflings-regular.woff deleted file mode 100644 index 8c54182aa5d4d1ab3c9171976b615c1dcb1dc187..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23320 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 mX4Rts (this.$items.length - 1) || pos < 0) return - - if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) - if (activeIndex == pos) return this.pause().cycle() - - return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) - } - - Carousel.prototype.pause = function (e) { - e || (this.paused = true) - - if (this.$element.find('.next, .prev').length && $.support.transition) { - this.$element.trigger($.support.transition.end) - this.cycle(true) - } - - this.interval = clearInterval(this.interval) - - return this - } - - Carousel.prototype.next = function () { - if (this.sliding) return - return this.slide('next') - } - - Carousel.prototype.prev = function () { - if (this.sliding) return - return this.slide('prev') - } - - Carousel.prototype.slide = function (type, next) { - var $active = this.$element.find('.item.active') - var $next = next || $active[type]() - var isCycling = this.interval - var direction = type == 'next' ? 'left' : 'right' - var fallback = type == 'next' ? 'first' : 'last' - var that = this - - if (!$next.length) { - if (!this.options.wrap) return - $next = this.$element.find('.item')[fallback]() - } - - if ($next.hasClass('active')) return this.sliding = false - - var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction }) - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - - this.sliding = true - - isCycling && this.pause() - - if (this.$indicators.length) { - this.$indicators.find('.active').removeClass('active') - this.$element.one('slid.bs.carousel', function () { - var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) - $nextIndicator && $nextIndicator.addClass('active') - }) - } - - if ($.support.transition && this.$element.hasClass('slide')) { - $next.addClass(type) - $next[0].offsetWidth // force reflow - $active.addClass(direction) - $next.addClass(direction) - $active - .one($.support.transition.end, function () { - $next.removeClass([type, direction].join(' ')).addClass('active') - $active.removeClass(['active', direction].join(' ')) - that.sliding = false - setTimeout(function () { that.$element.trigger('slid.bs.carousel') }, 0) - }) - .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000) - } else { - $active.removeClass('active') - $next.addClass('active') - this.sliding = false - this.$element.trigger('slid.bs.carousel') - } - - isCycling && this.cycle() - - return this - } - - - // CAROUSEL PLUGIN DEFINITION - // ========================== - - var old = $.fn.carousel - - $.fn.carousel = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.carousel') - var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) - var action = typeof option == 'string' ? option : options.slide - - if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) - if (typeof option == 'number') data.to(option) - else if (action) data[action]() - else if (options.interval) data.pause().cycle() - }) - } - - $.fn.carousel.Constructor = Carousel - - - // CAROUSEL NO CONFLICT - // ==================== - - $.fn.carousel.noConflict = function () { - $.fn.carousel = old - return this - } - - - // CAROUSEL DATA-API - // ================= - - $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { - var $this = $(this), href - var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 - var options = $.extend({}, $target.data(), $this.data()) - var slideIndex = $this.attr('data-slide-to') - if (slideIndex) options.interval = false - - $target.carousel(options) - - if (slideIndex = $this.attr('data-slide-to')) { - $target.data('bs.carousel').to(slideIndex) - } - - e.preventDefault() - }) - - $(window).on('load', function () { - $('[data-ride="carousel"]').each(function () { - var $carousel = $(this) - $carousel.carousel($carousel.data()) - }) - }) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: collapse.js v3.1.1 - * http://getbootstrap.com/javascript/#collapse - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // COLLAPSE PUBLIC CLASS DEFINITION - // ================================ - - var Collapse = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, Collapse.DEFAULTS, options) - this.transitioning = null - - if (this.options.parent) this.$parent = $(this.options.parent) - if (this.options.toggle) this.toggle() - } - - Collapse.DEFAULTS = { - toggle: true - } - - Collapse.prototype.dimension = function () { - var hasWidth = this.$element.hasClass('width') - return hasWidth ? 'width' : 'height' - } - - Collapse.prototype.show = function () { - if (this.transitioning || this.$element.hasClass('in')) return - - var startEvent = $.Event('show.bs.collapse') - this.$element.trigger(startEvent) - if (startEvent.isDefaultPrevented()) return - - var actives = this.$parent && this.$parent.find('> .panel > .in') - - if (actives && actives.length) { - var hasData = actives.data('bs.collapse') - if (hasData && hasData.transitioning) return - actives.collapse('hide') - hasData || actives.data('bs.collapse', null) - } - - var dimension = this.dimension() - - this.$element - .removeClass('collapse') - .addClass('collapsing') - [dimension](0) - - this.transitioning = 1 - - var complete = function () { - this.$element - .removeClass('collapsing') - .addClass('collapse in') - [dimension]('auto') - this.transitioning = 0 - this.$element.trigger('shown.bs.collapse') - } - - if (!$.support.transition) return complete.call(this) - - var scrollSize = $.camelCase(['scroll', dimension].join('-')) - - this.$element - .one($.support.transition.end, $.proxy(complete, this)) - .emulateTransitionEnd(350) - [dimension](this.$element[0][scrollSize]) - } - - Collapse.prototype.hide = function () { - if (this.transitioning || !this.$element.hasClass('in')) return - - var startEvent = $.Event('hide.bs.collapse') - this.$element.trigger(startEvent) - if (startEvent.isDefaultPrevented()) return - - var dimension = this.dimension() - - this.$element - [dimension](this.$element[dimension]()) - [0].offsetHeight - - this.$element - .addClass('collapsing') - .removeClass('collapse') - .removeClass('in') - - this.transitioning = 1 - - var complete = function () { - this.transitioning = 0 - this.$element - .trigger('hidden.bs.collapse') - .removeClass('collapsing') - .addClass('collapse') - } - - if (!$.support.transition) return complete.call(this) - - this.$element - [dimension](0) - .one($.support.transition.end, $.proxy(complete, this)) - .emulateTransitionEnd(350) - } - - Collapse.prototype.toggle = function () { - this[this.$element.hasClass('in') ? 'hide' : 'show']() - } - - - // COLLAPSE PLUGIN DEFINITION - // ========================== - - var old = $.fn.collapse - - $.fn.collapse = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.collapse') - var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) - - if (!data && options.toggle && option == 'show') option = !option - if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.collapse.Constructor = Collapse - - - // COLLAPSE NO CONFLICT - // ==================== - - $.fn.collapse.noConflict = function () { - $.fn.collapse = old - return this - } - - - // COLLAPSE DATA-API - // ================= - - $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) { - var $this = $(this), href - var target = $this.attr('data-target') - || e.preventDefault() - || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 - var $target = $(target) - var data = $target.data('bs.collapse') - var option = data ? 'toggle' : $this.data() - var parent = $this.attr('data-parent') - var $parent = parent && $(parent) - - if (!data || !data.transitioning) { - if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed') - $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') - } - - $target.collapse(option) - }) - -}(jQuery); - -/* ======================================================================== - * Bootstrap: dropdown.js v3.1.1 - * http://getbootstrap.com/javascript/#dropdowns - * ======================================================================== - * Copyright 2011-2014 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // DROPDOWN CLASS DEFINITION - // ========================= - - var backdrop = '.dropdown-backdrop' - var toggle = '[data-toggle=dropdown]' - var Dropdown = function (element) { - $(element).on('click.bs.dropdown', this.toggle) - } - - Dropdown.prototype.toggle = function (e) { - var $this = $(this) - - if ($this.is('.disabled, :disabled')) return - - var $parent = getParent($this) - var isActive = $parent.hasClass('open') - - clearMenus() - - if (!isActive) { - if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { - // if mobile we use a backdrop because click events don't delegate - $('

      -
      -
      -
      -

      PeaceTrack

      - -
      -
      -
      -
      -
      Tiborem udÄ›lá nám Helenka nakrájí a Å¡tyry pláty, pÄ›knÄ› nahrubo, LáÄa se vaří. Trochu mouky jen zezhora to spojit. Nudle sou dozlatova.


      - -
      -
      - -
      -
      - -
      -
      -

      {% include "footer.html" %} diff --git a/webhub/admin.py b/webhub/admin.py index 49a181b7..491b4cdb 100644 --- a/webhub/admin.py +++ b/webhub/admin.py @@ -1,21 +1,8 @@ from django.contrib import admin from malaria.models import Post, RevPost -from peacetrack.models import * from webhub.models import * admin.site.register(Pcuser) admin.site.register(Post) admin.site.register(RevPost) -admin.site.register(Region) -admin.site.register(Sector) -admin.site.register(PTPost) -admin.site.register(Project) -admin.site.register(Goal) -admin.site.register(Objective) -admin.site.register(Indicator) -admin.site.register(Output) -admin.site.register(Outcome) -admin.site.register(Activity) -admin.site.register(Measurement) -admin.site.register(Cohort) -admin.site.register(Volunteer) + diff --git a/webhub/serializers.py b/webhub/serializers.py index 2a665adc..d29f1017 100644 --- a/webhub/serializers.py +++ b/webhub/serializers.py @@ -1,6 +1,5 @@ from django.contrib.auth.models import User from webhub.models import * -from peacetrack.models import * from rest_framework import serializers @@ -13,69 +12,3 @@ class PcuserSerializer(serializers.ModelSerializer): class Meta: model = Pcuser fields = ('user', 'location', 'phone', 'gender','id') - -class RegionSerializer(serializers.ModelSerializer): - class Meta: - model = Region - fields = ('region_name','id') - -class SectorSerializer(serializers.ModelSerializer): - class Meta: - model = Sector - fields = ('sector_name','sector_desc','sector_code','id') - -class PTPostSerializer(serializers.ModelSerializer): - class Meta: - model = PTPost - fields = ('post_name','post_region','sector','id') - -class ProjectSerializer(serializers.ModelSerializer): - class Meta: - model = Project - fields = ('project_name','project_purpose','project_sector') - -class GoalSerializer(serializers.ModelSerializer): - class Meta: - model = Goal - fields = ('goal_name','goal_title','goal_stmt','goal_project','id') - -class ObjectiveSerializer(serializers.ModelSerializer): - class Meta: - model = Objective - fields = ('obj_name','obj_title','obj_stmt','obj_goal','id') - -class IndicatorSerializer(serializers.ModelSerializer): - class Meta: - model = Indicator - fields = ('ind_obj','ind_type_1','ind_type_2','id') - -class OutputSerializer(serializers.ModelSerializer): - class Meta: - model = Output - fields = ('output_sector','output_ptpost','output_ind','output_value','id') - - -class OutcomeSerializer(serializers.ModelSerializer): - class Meta: - model = Outcome - fields = ('outcome_sector','outcome_ptpost','outcome_ind','outcome_value','id') - -class ActivitySerializer(serializers.ModelSerializer): - class Meta: - model = Activity - fields = ('activity_title','activity_desc','activity_cohort','activity_created','activity_output','id') - -class MeasurementSerializer(serializers.ModelSerializer): - class Meta: - model = Measurement - fields = ('meas_title','meas_desc','meas_cohort','meas_created','meas_outcome','id') - -class CohortSerializer(serializers.ModelSerializer): - class Meta: - model = Cohort - fields = ('cohort_name','cohort_desc','cohort_no_of_members','cohort_age','cohort_males','cohort_females','cohort_pos','cohort_notes','id') - -class VolunteerSerializer(serializers.ModelSerializer): - class Meta: - model = Volunteer - fields = ('vol_name','vol_sector','vol_ptpost','vol_activity','vol_meas','vol_cohort','id') diff --git a/webhub/urls.py b/webhub/urls.py index 81a85716..01771c11 100644 --- a/webhub/urls.py +++ b/webhub/urls.py @@ -1,25 +1,11 @@ from django.conf.urls import patterns, url, include from rest_framework import routers from malaria_api import views as malaria_api_views -from peacetrack import views as peacetrack_views from webhub import views router = routers.DefaultRouter() router.register(r'users', views.UserViewSet) router.register(r'posts', malaria_api_views.PostViewSet) -router.register(r'regions', peacetrack_views.RegionViewSet) -router.register(r'sectors', peacetrack_views.SectorViewSet) -router.register(r'ptposts', peacetrack_views.PTPostViewSet) -router.register(r'projects', peacetrack_views.ProjectViewSet) -router.register(r'goals', peacetrack_views.GoalViewSet) -router.register(r'objectives', peacetrack_views.ObjectiveViewSet) -router.register(r'indicators', peacetrack_views.IndicatorViewSet) -router.register(r'outputs', peacetrack_views.OutputViewSet) -router.register(r'outcomes', peacetrack_views.OutcomeViewSet) -router.register(r'activity', peacetrack_views.ActivityViewSet) -router.register(r'measurement', peacetrack_views.MeasurementViewSet) -router.register(r'cohort', peacetrack_views.CohortViewSet) -router.register(r'volunteer', peacetrack_views.VolunteerViewSet) urlpatterns = patterns( '', From de68179d485af85179256da94a6c57d5c6ba1cad Mon Sep 17 00:00:00 2001 From: medhach Date: Sat, 18 Jun 2016 17:32:43 +0530 Subject: [PATCH 32/55] Moved registration functionality to own django app --- infohub/settings.py | 1 + infohub/urls.py | 1 + malaria/models.py | 3 +- malaria/tests.py | 2 +- malaria_api/tests.py | 2 +- signup/__init__.py | 0 signup/admin.py | 4 + signup/models.py | 25 +++ signup/templates/signup/footer.html | 65 ++++++++ signup/templates/signup/header.html | 29 ++++ signup/templates/signup/notice.html | 23 +++ {ui => signup/templates/signup}/redirect.html | 0 {ui => signup/templates/signup}/signup.html | 0 signup/tests.py | 3 + signup/urls.py | 0 signup/views.py | 157 ++++++++++++++++++ webhub/admin.py | 1 - webhub/checker.py | 2 +- webhub/models.py | 39 ----- webhub/serializers.py | 4 +- webhub/urls.py | 11 +- webhub/views.py | 138 --------------- 22 files changed, 320 insertions(+), 190 deletions(-) create mode 100644 signup/__init__.py create mode 100644 signup/admin.py create mode 100644 signup/models.py create mode 100644 signup/templates/signup/footer.html create mode 100644 signup/templates/signup/header.html create mode 100644 signup/templates/signup/notice.html rename {ui => signup/templates/signup}/redirect.html (100%) rename {ui => signup/templates/signup}/signup.html (100%) create mode 100644 signup/tests.py create mode 100644 signup/urls.py create mode 100644 signup/views.py diff --git a/infohub/settings.py b/infohub/settings.py index 7144b28e..de11b114 100644 --- a/infohub/settings.py +++ b/infohub/settings.py @@ -32,6 +32,7 @@ 'malaria', 'malaria_api', 'webhub', + 'signup', ) MIDDLEWARE_CLASSES = ( diff --git a/infohub/urls.py b/infohub/urls.py index 30d2947a..6b47764a 100644 --- a/infohub/urls.py +++ b/infohub/urls.py @@ -9,4 +9,5 @@ url(r'^docs/', include('rest_framework_swagger.urls')), url(r'^malaria/', include('malaria.urls', namespace='malaria')), url(r'^webhub/', include('webhub.urls', namespace='webhub')), + url(r'^signup/', include('signup.urls', namespace='signup')), ) diff --git a/malaria/models.py b/malaria/models.py index 8fb18016..486b4fd3 100644 --- a/malaria/models.py +++ b/malaria/models.py @@ -1,7 +1,6 @@ from django.db import models from django.core.validators import RegexValidator -from webhub.models import Pcuser - +from signup.models import Pcuser class Post(models.Model): # The owner of the post diff --git a/malaria/tests.py b/malaria/tests.py index 83ef34d4..c5de0a2f 100644 --- a/malaria/tests.py +++ b/malaria/tests.py @@ -5,7 +5,7 @@ delete_post_by_id, get_post_by_id, get_revposts_of_owner) -from webhub.models import Pcuser +from signup.models import Pcuser class MalariaTests(TestCase): diff --git a/malaria_api/tests.py b/malaria_api/tests.py index 66b429a8..59d58689 100644 --- a/malaria_api/tests.py +++ b/malaria_api/tests.py @@ -8,7 +8,7 @@ from rest_framework.test import APITestCase from malaria.models import Post from malaria_api.serializers import PostSerializer -from webhub.models import Pcuser +from signup.models import Pcuser class PostAPITestCase(APITestCase): diff --git a/signup/__init__.py b/signup/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/signup/admin.py b/signup/admin.py new file mode 100644 index 00000000..7c814676 --- /dev/null +++ b/signup/admin.py @@ -0,0 +1,4 @@ +from django.contrib import admin +from .models import Pcuser + +admin.site.register(Pcuser) \ No newline at end of file diff --git a/signup/models.py b/signup/models.py new file mode 100644 index 00000000..217ee61f --- /dev/null +++ b/signup/models.py @@ -0,0 +1,25 @@ +from django.db import models +from django.contrib.auth.models import User +import os + + +# Django provides a table called user that stores basic user information like username, password and email id. +class Pcuser(models.Model): + #username + user = models.OneToOneField(User) + #location + location = models.CharField(max_length=300) + #phone number + phone = models.CharField(max_length=150) + #gender + gender = models.CharField(max_length=10) + #for reset_password + reset_pass = models.CharField(default="",max_length=320) + + #verification status + #1 - unverified + #any other number = verification code + verified = models.CharField(max_length=100) + + def __unicode__(self): + return self.user.username \ No newline at end of file diff --git a/signup/templates/signup/footer.html b/signup/templates/signup/footer.html new file mode 100644 index 00000000..b15b8db9 --- /dev/null +++ b/signup/templates/signup/footer.html @@ -0,0 +1,65 @@ + + + + + + + + + + +
      + + +
      + About Peace Corps  |   + Policies  |   + Important Details  |   + Help   +

      +
      +
      + + + + + + + + +

      ©2014 PeaceCrops

      + + Return to Top +
      \ No newline at end of file diff --git a/signup/templates/signup/header.html b/signup/templates/signup/header.html new file mode 100644 index 00000000..ba6aa5df --- /dev/null +++ b/signup/templates/signup/header.html @@ -0,0 +1,29 @@ + + + diff --git a/signup/templates/signup/notice.html b/signup/templates/signup/notice.html new file mode 100644 index 00000000..d0fccd8d --- /dev/null +++ b/signup/templates/signup/notice.html @@ -0,0 +1,23 @@ + + + + + + Notice + + + {% include "header.html" %} +







      +

      {{text}}

      +

      {{text1}}

      +












      + {% include "footer.html" %} + + + + diff --git a/ui/redirect.html b/signup/templates/signup/redirect.html similarity index 100% rename from ui/redirect.html rename to signup/templates/signup/redirect.html diff --git a/ui/signup.html b/signup/templates/signup/signup.html similarity index 100% rename from ui/signup.html rename to signup/templates/signup/signup.html diff --git a/signup/tests.py b/signup/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/signup/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/signup/urls.py b/signup/urls.py new file mode 100644 index 00000000..e69de29b diff --git a/signup/views.py b/signup/views.py new file mode 100644 index 00000000..ddfaa970 --- /dev/null +++ b/signup/views.py @@ -0,0 +1,157 @@ +import jinja2 +import smtplib +import uuid +from django.http import HttpResponse +from django.contrib.auth import authenticate, login, logout +from django.views.decorators.csrf import csrf_exempt +from django.contrib.auth.models import User +from jinja2.ext import loopcontrols +from rest_framework import viewsets +from rest_framework import status +from rest_framework.decorators import api_view +from rest_framework.response import Response +from webhub.checker import check +from webhub.models import * +from webhub.serializers import * +from webhub import views as webhub_view + + +jinja_environ = jinja2.Environment(loader=jinja2.FileSystemLoader(['signup/templates/signup']), extensions=[loopcontrols]) + + +#Calls the signup page. If the user us already logged in, s/he will be redirected to dashboard. +def signup_page(request): + if request.user.is_authenticated(): + redirect_url = "/" + if 'redirect_url' in request.REQUEST.keys(): + redirect_url = request.REQUEST['redirect_url'] + return HttpResponse(jinja_environ.get_template('redirect.html').render({"pcuser":None,"redirect_url":redirect_url})) + + else: + return HttpResponse(jinja_environ.get_template('signup.html').render({"pcuser":None})) + + +#Called when a user clicks submit button in signup. Here a verification mail is also sent to the user. +@csrf_exempt +def signup_do(request): + if request.user.is_authenticated(): + logout(request) + redirect_url = "/" + if 'redirect_url' in request.REQUEST.keys(): + redirect_url = request.REQUEST['redirect_url'] + return HttpResponse(jinja_environ.get_template('redirect.html').render({"pcuser":None,"redirect_url":redirect_url})) + + username = request.REQUEST['username'] + password = request.REQUEST['password'] + confirmpassword = request.REQUEST['confirmpassword'] + + if password <> confirmpassword: + return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, + "text":'

      Passwords don\'t match. Please Enter again.

      Click OK to go back to signup page.

      ',"link":'/signup_page/'})) + + first_name = request.REQUEST['first_name'] + last_name = request.REQUEST['last_name'] + phone = request.REQUEST['phone'] + email = request.REQUEST['email'] + gender = request.REQUEST['gender'] + location = request.REQUEST['location'] + + try: + if len(User.objects.filter(email=email))<>0: + return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, + "text":'

      Someone has already registered using this email.

      If you have forgotten your password, click

      Click here to go back to signup page.

      ',"link":'0'})) + except: + pass + + if '@' not in email or '.' not in email: + return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, + "text":'

      Invalid email, please Enter again.

      Go Back or click OK to go to signup page.

      ',"link":"/signup_page/"})) + + + if first_name == "": + first_name = username + + user = User.objects.create_user(username, email, password) + user.first_name = first_name + user.last_name = last_name + user.save() + entry = Pcuser(user=user, phone=phone, gender=gender, location=location, verified = uuid.uuid4().hex) + + entry.save() + #send email to user + webhub_view.login_do(request) + send_verification_email(request) + + return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, + "text":'

      Verification email sent. check your inbox and verify the account.

      ',"text1":'

      Go Back or click OK to go to signup page.

      ',"link":'/signup_page/'})) + + + +#Function to send verification mail to user's email after he signs up. +def send_verification_email(request): + if not request.user.is_authenticated(): + return HttpResponse(jinja_environ.get_template('index.html').render({"pcuser":None})) + + try: + request.user.pcuser + except: + return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, + "text":'No Pcuser associated!. Please go back or click to go to the homepage' , "link": '/signup_page/'})) + entry=request.user + subject = 'Peace Corps Verification Email' + msg = 'Subject: %s \n\nYour email has been registered on pchub.com.\nPlease\ + click on the following link to verify (or copy paste it in your browser if needed)\n\n\ + %s/verify?code=%s\n\nIf you have not registered on our website, please ignore.' % (subject, website, entry.pcuser.verified) + + x = send_email(msg, entry.email) + if x[0]==0: + return x[1] + + return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, "text":'

      Verification Email sent! Please Check your email inbox.

      To re-send verification email, click here.

      Click here to go to the homepage and log-in again

      ', "link":'0'})) + + + +#Function to send emails using google smtplib. Takes email id and message as input. +def send_email(msg, email): + gmailLogin = 'pc.mobile.control.center' + gmailPas = 'alphadeltaepsilon' + fro = gmailLogin + "@gmail.com" + + to = email + + server = smtplib.SMTP_SSL('smtp.googlemail.com',SMTP_PORT) + a = server.login( gmailLogin, gmailPas) + server.sendmail(fro, to,msg) + return (1,1) + + +#Called when a user enters verification code and clicks on submit. Checks the verification code with database. +def verify(request): + if not request.user.is_authenticated(): + return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, + "text":'Verification Successful.',"text1":'Go to homepage' , "link": '/'})) +# return HttpResponse(jinja_environ.get_template('index.html').render({"pcuser":Non, +# "code":request.REQUEST['code']})) +# index(request) + try: + request.user.pcuser + except: + return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, + "text":'

      No Pcuser associated.

      ',"text1":'

      Please click here to go to the homepage

      ',"link":'/'})) + + code = request.REQUEST['code'] + pcuser = request.user.pcuser + if pcuser.verified == '1': + return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, + "text":'

      Verification successful.

      ',"text1":'

      Click here to go to the homepage

      ',"link":'/'})) + elif code == pcuser.verified: + pcuser.verified = '1' + pcuser.save() + return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, + "text":'

      Verification successful.

      ',"text1":'

      Click here to go to the homepage

      ',"link":'/'})) + + return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, + "text":'

      Verification Failed.

      ',"text1":'

      Please go back or click here to go to the homepage

      ',"link":'/'})) + + + diff --git a/webhub/admin.py b/webhub/admin.py index 491b4cdb..c54b749d 100644 --- a/webhub/admin.py +++ b/webhub/admin.py @@ -2,7 +2,6 @@ from malaria.models import Post, RevPost from webhub.models import * -admin.site.register(Pcuser) admin.site.register(Post) admin.site.register(RevPost) diff --git a/webhub/checker.py b/webhub/checker.py index 531d428d..38a85aed 100755 --- a/webhub/checker.py +++ b/webhub/checker.py @@ -5,7 +5,7 @@ from django.http import HttpResponse from django.utils import timezone -from webhub.models import * +from signup.models import * from django.views.decorators.csrf import csrf_exempt import datetime from django.contrib.auth import authenticate, login, logout diff --git a/webhub/models.py b/webhub/models.py index 53b5997f..e69de29b 100644 --- a/webhub/models.py +++ b/webhub/models.py @@ -1,39 +0,0 @@ -from django.db import models -from django.contrib.auth.models import User - -import os - -# To update the filename of the newly uploaded photo -def update_filename(instance, filename): - path = '/vagrant/submit/media/propics/' - format = instance.user.username + ".jpg" - return os.path.join(path, format) - - - -# Django provides a table called user that stores basic user information like username, password and email id. -class Pcuser(models.Model): - #username - user = models.OneToOneField(User) - #location - location = models.CharField(max_length=300) - #phone number - phone = models.CharField(max_length=150) - #gender - gender = models.CharField(max_length=10) - #for reset_password - reset_pass = models.CharField(default="",max_length=320) - - - #path to default user image - image = models.CharField(max_length=300, default="http://i.imgur.com/dnjclWV.png") - #image - imageobj = models.ImageField(upload_to=update_filename) - - #verification status - #1 - unverified - #any other number = verification code - verified = models.CharField(max_length=100) - - def __unicode__(self): - return self.user.username diff --git a/webhub/serializers.py b/webhub/serializers.py index d29f1017..790e4fed 100644 --- a/webhub/serializers.py +++ b/webhub/serializers.py @@ -1,5 +1,5 @@ from django.contrib.auth.models import User -from webhub.models import * +from signup.models import * from rest_framework import serializers @@ -11,4 +11,4 @@ class Meta: class PcuserSerializer(serializers.ModelSerializer): class Meta: model = Pcuser - fields = ('user', 'location', 'phone', 'gender','id') + fields = ('user', 'location', 'phone', 'gender','id') \ No newline at end of file diff --git a/webhub/urls.py b/webhub/urls.py index 01771c11..f31cb239 100644 --- a/webhub/urls.py +++ b/webhub/urls.py @@ -2,6 +2,7 @@ from rest_framework import routers from malaria_api import views as malaria_api_views from webhub import views +from signup import views as signup_views router = routers.DefaultRouter() router.register(r'users', views.UserViewSet) @@ -16,16 +17,16 @@ views.dashboard, name='dashboard'), url(r'^signup_page/$', - views.signup_page, + signup_views.signup_page, name='signup_page'), url(r'^signup_do/$', - views.signup_do, + signup_views.signup_do, name='signup_do'), url(r'^send_verification_email/$', - views.send_verification_email, + signup_views.send_verification_email, name='send_verification_email'), url(r'^send_email/$', - views.send_email, + signup_views.send_email, name='send_email'), url(r'^login_do/$', views.login_do, @@ -49,7 +50,7 @@ views.forgot_pass, name='forgot_pass'), url(r'^verify/$', - views.verify, + signup_views.verify, name='verify'), url(r'^reset_pass_page/$', views.reset_pass_page, diff --git a/webhub/views.py b/webhub/views.py index 66f3c692..6fcfd826 100644 --- a/webhub/views.py +++ b/webhub/views.py @@ -85,144 +85,6 @@ def dashboard(request): } return HttpResponse(jinja_environ.get_template('dashboard.html').render(template_values)) - -#Calls the signup page. If the user us already logged in, s/he will be redirected to dashboard. -def signup_page(request): - if request.user.is_authenticated(): - redirect_url = "/" - if 'redirect_url' in request.REQUEST.keys(): - redirect_url = request.REQUEST['redirect_url'] - return HttpResponse(jinja_environ.get_template('redirect.html').render({"pcuser":None,"redirect_url":redirect_url})) - - else: - return HttpResponse(jinja_environ.get_template('signup.html').render({"pcuser":None})) - - -#Called when a user clicks submit button in signup. Here a verification mail is also sent to the user. -@csrf_exempt -def signup_do(request): - if request.user.is_authenticated(): - logout(request) - redirect_url = "/" - if 'redirect_url' in request.REQUEST.keys(): - redirect_url = request.REQUEST['redirect_url'] - return HttpResponse(jinja_environ.get_template('redirect.html').render({"pcuser":None,"redirect_url":redirect_url})) - - username = request.REQUEST['username'] - password = request.REQUEST['password'] - confirmpassword = request.REQUEST['confirmpassword'] - - if password <> confirmpassword: - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, - "text":'

      Passwords don\'t match. Please Enter again.

      Click OK to go back to signup page.

      ',"link":'/signup_page/'})) - - first_name = request.REQUEST['first_name'] - last_name = request.REQUEST['last_name'] - phone = request.REQUEST['phone'] - email = request.REQUEST['email'] - gender = request.REQUEST['gender'] - location = request.REQUEST['location'] - - try: - if len(User.objects.filter(email=email))<>0: - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, - "text":'

      Someone has already registered using this email.

      If you have forgotten your password, click

      Click here to go back to signup page.

      ',"link":'0'})) - except: - pass - - if '@' not in email or '.' not in email: - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, - "text":'

      Invalid email, please Enter again.

      Go Back or click OK to go to signup page.

      ',"link":"/signup_page/"})) - - - if first_name == "": - first_name = username - - user = User.objects.create_user(username, email, password) - user.first_name = first_name - user.last_name = last_name - user.save() - entry = Pcuser(user=user, phone=phone, gender=gender, location=location, verified = uuid.uuid4().hex) - - entry.save() - #send email to user - login_do(request) - send_verification_email(request) - - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, - "text":'

      Verification email sent. check your inbox and verify the account.

      ',"text1":'

      Go Back or click OK to go to signup page.

      ',"link":'/signup_page/'})) - - - -#Function to send verification mail to user's email after he signs up. -def send_verification_email(request): - if not request.user.is_authenticated(): - return HttpResponse(jinja_environ.get_template('index.html').render({"pcuser":None})) - - try: - request.user.pcuser - except: - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, - "text":'No Pcuser associated!. Please go back or click to go to the homepage' , "link": '/'})) - entry=request.user - subject = 'Peace Corps Verification Email' - msg = 'Subject: %s \n\nYour email has been registered on pchub.com.\nPlease\ - click on the following link to verify (or copy paste it in your browser if needed)\n\n\ - %s/verify?code=%s\n\nIf you have not registered on our website, please ignore.' % (subject, website, entry.pcuser.verified) - - x = send_email(msg, entry.email) - if x[0]==0: - return x[1] - - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, "text":'

      Verification Email sent! Please Check your email inbox.

      To re-send verification email, click here.

      Click here to go to the homepage and log-in again

      ', "link":'0'})) - - - -#Function to send emails using google smtplib. Takes email id and message as input. -def send_email(msg, email): - gmailLogin = 'pc.mobile.control.center' - gmailPas = 'alphadeltaepsilon' - fro = gmailLogin + "@gmail.com" - - to = email - - server = smtplib.SMTP_SSL('smtp.googlemail.com',SMTP_PORT) - a = server.login( gmailLogin, gmailPas) - server.sendmail(fro, to,msg) - return (1,1) - - -#Called when a user enters verification code and clicks on submit. Checks the verification code with database. -def verify(request): - if not request.user.is_authenticated(): - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, - "text":'Verification Successful.',"text1":'Go to homepage' , "link": '/'})) -# return HttpResponse(jinja_environ.get_template('index.html').render({"pcuser":Non, -# "code":request.REQUEST['code']})) -# index(request) - try: - request.user.pcuser - except: - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":None, - "text":'

      No Pcuser associated.

      ',"text1":'

      Please click here to go to the homepage

      ',"link":'/'})) - - code = request.REQUEST['code'] - pcuser = request.user.pcuser - if pcuser.verified == '1': - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, - "text":'

      Verification successful.

      ',"text1":'

      Click here to go to the homepage

      ',"link":'/'})) - elif code == pcuser.verified: - pcuser.verified = '1' - pcuser.save() - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, - "text":'

      Verification successful.

      ',"text1":'

      Click here to go to the homepage

      ',"link":'/'})) - - return HttpResponse(jinja_environ.get_template('notice.html').render({"pcuser":request.user.pcuser, - "text":'

      Verification Failed.

      ',"text1":'

      Please go back or click here to go to the homepage

      ',"link":'/'})) - - - - #Called when a user clicks login button. @csrf_exempt def login_do(request): From d6d9d072e19fbecaa84929bbe1a839995087056e Mon Sep 17 00:00:00 2001 From: medhach Date: Sun, 19 Jun 2016 12:24:03 +0530 Subject: [PATCH 33/55] Allow ' in Post description --- malaria/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/malaria/models.py b/malaria/models.py index 486b4fd3..2a225267 100644 --- a/malaria/models.py +++ b/malaria/models.py @@ -14,7 +14,7 @@ class Post(models.Model): description_post = models.TextField(max_length=20000, validators=[ RegexValidator( - r'^[(A-Z)|(a-z)|(0-9)|(\n)|(\s)|(\.)|(,)|(\-)|(_)|(!)|(:)|(%)]+$' + r'^[(A-Z)|(a-z)|(0-9)|(\n)|(\s)|(\.)|(,)|(\-)|(_)|(!)|(:)|(%)|(\')]+$' )] ) # link to important documents From d7e59e5a3eb26e311ed4bfe520260325899b92c0 Mon Sep 17 00:00:00 2001 From: medhach Date: Sun, 19 Jun 2016 12:25:43 +0530 Subject: [PATCH 34/55] Separated CSS from HTML. --- signup/templates/signup/signup.html | 10 +++++++++- ui/change_password.html | 10 +++++++++- ui/dashboard.html | 20 +++++++++++++++++--- ui/edit_profile.html | 10 +++++++++- 4 files changed, 44 insertions(+), 6 deletions(-) diff --git a/signup/templates/signup/signup.html b/signup/templates/signup/signup.html index 96f0c797..aeecf401 100644 --- a/signup/templates/signup/signup.html +++ b/signup/templates/signup/signup.html @@ -10,6 +10,14 @@ Sign Up + @@ -18,7 +26,7 @@
      -
      +

      Sign Up Form

      diff --git a/ui/change_password.html b/ui/change_password.html index 914c56c2..3da7c49d 100644 --- a/ui/change_password.html +++ b/ui/change_password.html @@ -10,6 +10,14 @@ Change Password + @@ -19,7 +27,7 @@
      -
      +

      diff --git a/ui/dashboard.html b/ui/dashboard.html index 6c70cf3c..2c6ad439 100644 --- a/ui/dashboard.html +++ b/ui/dashboard.html @@ -9,6 +9,20 @@ Dashboard + {% include "header.html" %} @@ -22,7 +36,7 @@

      PEACE CORPS HUB


      -
      +

      Malaria

      @@ -30,11 +44,11 @@
      -
      Tiborem udÄ›lá nám Helenka nakrájí a Å¡tyry pláty, pÄ›knÄ› nahrubo, LáÄa se vaří. Trochu mouky jen zezhora to spojit. Nudle sou dozlatova.


      +
      The Malaria Mobile App was developed to help keep our Peace Corps Volunteers safe in places that are high risk of acquiring malaria.


      - +
      diff --git a/ui/edit_profile.html b/ui/edit_profile.html index a47fc45d..d85be67d 100644 --- a/ui/edit_profile.html +++ b/ui/edit_profile.html @@ -11,13 +11,21 @@ Edit Profile | {{pcuser.user.first_name}} + {% include "header.html" %}





      -
      +

      Edit Profile


      From 8d1cb0becbf300e1f78f6123802061fd9e949e72 Mon Sep 17 00:00:00 2001 From: medhach Date: Wed, 22 Jun 2016 00:17:05 +0530 Subject: [PATCH 35/55] Made necessary changes in signup app --- .../signup/bootstrap/css/bootstrap-theme.css | 347 + .../bootstrap/css/bootstrap-theme.css.map | 1 + .../bootstrap/css/bootstrap-theme.min.css | 7 + .../signup/bootstrap/css/bootstrap.css | 5785 +++++++++++++++++ .../signup/bootstrap/css/bootstrap.css.map | 1 + .../signup/bootstrap/css/bootstrap.min.css | 7 + .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20335 bytes .../fonts/glyphicons-halflings-regular.svg | 229 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 41280 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23320 bytes .../signup/bootstrap/js/bootstrap.js | 1951 ++++++ .../signup/bootstrap/js/bootstrap.min.js | 6 + signup/views.py | 5 + 13 files changed, 8339 insertions(+) create mode 100644 signup/templates/signup/bootstrap/css/bootstrap-theme.css create mode 100644 signup/templates/signup/bootstrap/css/bootstrap-theme.css.map create mode 100644 signup/templates/signup/bootstrap/css/bootstrap-theme.min.css create mode 100644 signup/templates/signup/bootstrap/css/bootstrap.css create mode 100644 signup/templates/signup/bootstrap/css/bootstrap.css.map create mode 100644 signup/templates/signup/bootstrap/css/bootstrap.min.css create mode 100644 signup/templates/signup/bootstrap/fonts/glyphicons-halflings-regular.eot create mode 100644 signup/templates/signup/bootstrap/fonts/glyphicons-halflings-regular.svg create mode 100644 signup/templates/signup/bootstrap/fonts/glyphicons-halflings-regular.ttf create mode 100644 signup/templates/signup/bootstrap/fonts/glyphicons-halflings-regular.woff create mode 100644 signup/templates/signup/bootstrap/js/bootstrap.js create mode 100644 signup/templates/signup/bootstrap/js/bootstrap.min.js diff --git a/signup/templates/signup/bootstrap/css/bootstrap-theme.css b/signup/templates/signup/bootstrap/css/bootstrap-theme.css new file mode 100644 index 00000000..a4069929 --- /dev/null +++ b/signup/templates/signup/bootstrap/css/bootstrap-theme.css @@ -0,0 +1,347 @@ +/*! + * Bootstrap v3.1.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +.btn-default, +.btn-primary, +.btn-success, +.btn-info, +.btn-warning, +.btn-danger { + text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); +} +.btn-default:active, +.btn-primary:active, +.btn-success:active, +.btn-info:active, +.btn-warning:active, +.btn-danger:active, +.btn-default.active, +.btn-primary.active, +.btn-success.active, +.btn-info.active, +.btn-warning.active, +.btn-danger.active { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn:active, +.btn.active { + background-image: none; +} +.btn-default { + text-shadow: 0 1px 0 #fff; + background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #dbdbdb; + border-color: #ccc; +} +.btn-default:hover, +.btn-default:focus { + background-color: #e0e0e0; + background-position: 0 -15px; +} +.btn-default:active, +.btn-default.active { + background-color: #e0e0e0; + border-color: #dbdbdb; +} +.btn-primary { + background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #2b669a; +} +.btn-primary:hover, +.btn-primary:focus { + background-color: #2d6ca2; + background-position: 0 -15px; +} +.btn-primary:active, +.btn-primary.active { + background-color: #2d6ca2; + border-color: #2b669a; +} +.btn-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #3e8f3e; +} +.btn-success:hover, +.btn-success:focus { + background-color: #419641; + background-position: 0 -15px; +} +.btn-success:active, +.btn-success.active { + background-color: #419641; + border-color: #3e8f3e; +} +.btn-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #28a4c9; +} +.btn-info:hover, +.btn-info:focus { + background-color: #2aabd2; + background-position: 0 -15px; +} +.btn-info:active, +.btn-info.active { + background-color: #2aabd2; + border-color: #28a4c9; +} +.btn-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #e38d13; +} +.btn-warning:hover, +.btn-warning:focus { + background-color: #eb9316; + background-position: 0 -15px; +} +.btn-warning:active, +.btn-warning.active { + background-color: #eb9316; + border-color: #e38d13; +} +.btn-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #b92c28; +} +.btn-danger:hover, +.btn-danger:focus { + background-color: #c12e2a; + background-position: 0 -15px; +} +.btn-danger:active, +.btn-danger.active { + background-color: #c12e2a; + border-color: #b92c28; +} +.thumbnail, +.img-thumbnail { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + background-color: #e8e8e8; + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + background-color: #357ebd; + background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); + background-repeat: repeat-x; +} +.navbar-default { + background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); + background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); +} +.navbar-default .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); +} +.navbar-brand, +.navbar-nav > li > a { + text-shadow: 0 1px 0 rgba(255, 255, 255, .25); +} +.navbar-inverse { + background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; +} +.navbar-inverse .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%); + background-image: linear-gradient(to bottom, #222 0%, #282828 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); +} +.navbar-inverse .navbar-brand, +.navbar-inverse .navbar-nav > li > a { + text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); +} +.navbar-static-top, +.navbar-fixed-top, +.navbar-fixed-bottom { + border-radius: 0; +} +.alert { + text-shadow: 0 1px 0 rgba(255, 255, 255, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); +} +.alert-success { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); + background-repeat: repeat-x; + border-color: #b2dba1; +} +.alert-info { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); + background-repeat: repeat-x; + border-color: #9acfea; +} +.alert-warning { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); + background-repeat: repeat-x; + border-color: #f5e79e; +} +.alert-danger { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); + background-repeat: repeat-x; + border-color: #dca7a7; +} +.progress { + background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar { + background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); + background-repeat: repeat-x; +} +.list-group { + border-radius: 4px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + text-shadow: 0 -1px 0 #3071a9; + background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0); + background-repeat: repeat-x; + border-color: #3278b3; +} +.panel { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: 0 1px 2px rgba(0, 0, 0, .05); +} +.panel-default > .panel-heading { + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.panel-primary > .panel-heading { + background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); + background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); + background-repeat: repeat-x; +} +.panel-success > .panel-heading { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); + background-repeat: repeat-x; +} +.panel-info > .panel-heading { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); + background-repeat: repeat-x; +} +.panel-warning > .panel-heading { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); + background-repeat: repeat-x; +} +.panel-danger > .panel-heading { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); + background-repeat: repeat-x; +} +.well { + background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; + border-color: #dcdcdc; + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); +} +/*# sourceMappingURL=bootstrap-theme.css.map */ diff --git a/signup/templates/signup/bootstrap/css/bootstrap-theme.css.map b/signup/templates/signup/bootstrap/css/bootstrap-theme.css.map new file mode 100644 index 00000000..b36fc9a4 --- /dev/null +++ b/signup/templates/signup/bootstrap/css/bootstrap-theme.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["less/theme.less","less/mixins.less"],"names":[],"mappings":"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","sourcesContent":["\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-bg, 5%); @end-color: darken(@navbar-default-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-bg; @end-color: lighten(@navbar-inverse-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n}\n\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","//\n// Mixins\n// --------------------------------------------------\n\n\n// Utilities\n// -------------------------\n\n// Clearfix\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n// contenteditable attribute is included anywhere else in the document.\n// Otherwise it causes space to appear at the top and bottom of elements\n// that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n// `:before` to contain the top-margins of child elements.\n.clearfix() {\n &:before,\n &:after {\n content: \" \"; // 1\n display: table; // 2\n }\n &:after {\n clear: both;\n }\n}\n\n// WebKit-style focus\n.tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n\n// Center-align a block level element\n.center-block() {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n\n// Sizing shortcuts\n.size(@width; @height) {\n width: @width;\n height: @height;\n}\n.square(@size) {\n .size(@size; @size);\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n &::-moz-placeholder { color: @color; // Firefox\n opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Text overflow\n// Requires inline-block or block for proper styling\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n// CSS image replacement\n//\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. Note\n// that we cannot chain the mixins together in Less, so they are repeated.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (will be removed in v4)\n.hide-text() {\n font: ~\"0/0\" a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n// New mixin to use as of v3.0.1\n.text-hide() {\n .hide-text();\n}\n\n\n\n// CSS3 PROPERTIES\n// --------------------------------------------------\n\n// Single side border-radius\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support the\n// standard `box-shadow` property.\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Transitions\n.transition(@transition) {\n -webkit-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n// Transformations\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n transform: rotate(@degrees);\n}\n.scale(@ratio; @ratio-y...) {\n -webkit-transform: scale(@ratio, @ratio-y);\n -ms-transform: scale(@ratio, @ratio-y); // IE9 only\n transform: scale(@ratio, @ratio-y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n transform: translate(@x, @y);\n}\n.skew(@x; @y) {\n -webkit-transform: skew(@x, @y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n transform: skew(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// User select\n// For selecting text on the page\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n\n// Resize anything\n.resizable(@direction) {\n resize: @direction; // Options: horizontal, vertical, both\n overflow: auto; // Safari fix\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Opacity\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n\n\n\n// GRADIENTS\n// --------------------------------------------------\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, color-stop(@start-color @start-percent), color-stop(@end-color @end-percent)); // Safari 5.1-6, Chrome 10+\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n\n// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n\n\n\n// Retina images\n//\n// Short retina mixin for setting background-image and -size\n\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// COMPONENT MIXINS\n// --------------------------------------------------\n\n// Horizontal dividers\n// -------------------------\n// Dividers (basically an hr) within dropdowns and nav lists\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n\n// Panels\n// -------------------------\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n border-color: @border;\n\n & > .panel-heading {\n color: @heading-text-color;\n background-color: @heading-bg-color;\n border-color: @heading-border;\n\n + .panel-collapse .panel-body {\n border-top-color: @border;\n }\n }\n & > .panel-footer {\n + .panel-collapse .panel-body {\n border-bottom-color: @border;\n }\n }\n}\n\n// Alerts\n// -------------------------\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\n }\n}\n\n// Tables\n// -------------------------\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n\n// List Groups\n// -------------------------\n.list-group-item-variant(@state; @background; @color) {\n .list-group-item-@{state} {\n color: @color;\n background-color: @background;\n\n a& {\n color: @color;\n\n .list-group-item-heading { color: inherit; }\n\n &:hover,\n &:focus {\n color: @color;\n background-color: darken(@background, 5%);\n }\n &.active,\n &.active:hover,\n &.active:focus {\n color: #fff;\n background-color: @color;\n border-color: @color;\n }\n }\n }\n}\n\n// Button variants\n// -------------------------\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:hover,\n &:focus,\n &:active,\n &.active,\n .open .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 8%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &:active,\n &.active {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n// -------------------------\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n\n// Pagination\n// -------------------------\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n\n// Labels\n// -------------------------\n.label-variant(@color) {\n background-color: @color;\n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\n}\n\n// Contextual backgrounds\n// -------------------------\n.bg-variant(@color) {\n background-color: @color;\n a&:hover {\n background-color: darken(@color, 10%);\n }\n}\n\n// Typography\n// -------------------------\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover {\n color: darken(@color, 10%);\n }\n}\n\n// Navbar vertical align\n// -------------------------\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n\n// Progress bars\n// -------------------------\n.progress-bar-variant(@color) {\n background-color: @color;\n .progress-striped & {\n #gradient > .striped();\n }\n}\n\n// Responsive utilities\n// -------------------------\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n display: block !important;\n table& { display: table; }\n tr& { display: table-row !important; }\n th&,\n td& { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n display: none !important;\n}\n\n\n// Grid System\n// -----------\n\n// Centered container element\n.container-fixed() {\n margin-right: auto;\n margin-left: auto;\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: (@gutter / -2);\n margin-right: (@gutter / -2);\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n @media (min-width: @screen-xs-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-xs-column-push(@columns) {\n @media (min-width: @screen-xs-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-xs-column-pull(@columns) {\n @media (min-width: @screen-xs-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n\n// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n // Color the label and help text\n .help-block,\n .control-label,\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline {\n color: @text-color;\n }\n // Set the border and box shadow on specific inputs to match\n .form-control {\n border-color: @border-color;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n &:focus {\n border-color: darken(@border-color, 10%);\n @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\n .box-shadow(@shadow);\n }\n }\n // Set validation states also for addons\n .input-group-addon {\n color: @text-color;\n border-color: @border-color;\n background-color: @background-color;\n }\n // Optional feedback icon\n .form-control-feedback {\n color: @text-color;\n }\n}\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-focus-border` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n\n.form-control-focus(@color: @input-border-focus) {\n @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n &:focus {\n border-color: @color;\n outline: 0;\n .box-shadow(~\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\");\n }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. ``\n// element gets special love because it's special, and that's a fact!\n\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n height: @input-height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n\n select& {\n height: @input-height;\n line-height: @input-height;\n }\n\n textarea&,\n select[multiple]& {\n height: auto;\n }\n}\n","//\n// Variables\n// --------------------------------------------------\n\n\n//== Colors\n//\n//## Gray and brand colors for use across Bootstrap.\n\n@gray-darker: lighten(#000, 13.5%); // #222\n@gray-dark: lighten(#000, 20%); // #333\n@gray: lighten(#000, 33.5%); // #555\n@gray-light: lighten(#000, 60%); // #999\n@gray-lighter: lighten(#000, 93.5%); // #eee\n\n@brand-primary: #428bca;\n@brand-success: #5cb85c;\n@brand-info: #5bc0de;\n@brand-warning: #f0ad4e;\n@brand-danger: #d9534f;\n\n\n//== Scaffolding\n//\n// ## Settings for some of the most global styles.\n\n//** Background color for ``.\n@body-bg: #fff;\n//** Global text color on ``.\n@text-color: @gray-dark;\n\n//** Global textual link color.\n@link-color: @brand-primary;\n//** Link hover color set via `darken()` function.\n@link-hover-color: darken(@link-color, 15%);\n\n\n//== Typography\n//\n//## Font, line-height, and color for body text, headings, and more.\n\n@font-family-sans-serif: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n@font-family-serif: Georgia, \"Times New Roman\", Times, serif;\n//** Default monospace fonts for ``, ``, and `
      `.\n@font-family-monospace:   Menlo, Monaco, Consolas, \"Courier New\", monospace;\n@font-family-base:        @font-family-sans-serif;\n\n@font-size-base:          14px;\n@font-size-large:         ceil((@font-size-base * 1.25)); // ~18px\n@font-size-small:         ceil((@font-size-base * 0.85)); // ~12px\n\n@font-size-h1:            floor((@font-size-base * 2.6)); // ~36px\n@font-size-h2:            floor((@font-size-base * 2.15)); // ~30px\n@font-size-h3:            ceil((@font-size-base * 1.7)); // ~24px\n@font-size-h4:            ceil((@font-size-base * 1.25)); // ~18px\n@font-size-h5:            @font-size-base;\n@font-size-h6:            ceil((@font-size-base * 0.85)); // ~12px\n\n//** Unit-less `line-height` for use in components like buttons.\n@line-height-base:        1.428571429; // 20/14\n//** Computed \"line-height\" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.\n@line-height-computed:    floor((@font-size-base * @line-height-base)); // ~20px\n\n//** By default, this inherits from the ``.\n@headings-font-family:    inherit;\n@headings-font-weight:    500;\n@headings-line-height:    1.1;\n@headings-color:          inherit;\n\n\n//-- Iconography\n//\n//## Specify custom locations of the include Glyphicons icon font. Useful for those including Bootstrap via Bower.\n\n@icon-font-path:          \"../fonts/\";\n@icon-font-name:          \"glyphicons-halflings-regular\";\n@icon-font-svg-id:        \"glyphicons_halflingsregular\";\n\n//== Components\n//\n//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).\n\n@padding-base-vertical:     6px;\n@padding-base-horizontal:   12px;\n\n@padding-large-vertical:    10px;\n@padding-large-horizontal:  16px;\n\n@padding-small-vertical:    5px;\n@padding-small-horizontal:  10px;\n\n@padding-xs-vertical:       1px;\n@padding-xs-horizontal:     5px;\n\n@line-height-large:         1.33;\n@line-height-small:         1.5;\n\n@border-radius-base:        4px;\n@border-radius-large:       6px;\n@border-radius-small:       3px;\n\n//** Global color for active items (e.g., navs or dropdowns).\n@component-active-color:    #fff;\n//** Global background color for active items (e.g., navs or dropdowns).\n@component-active-bg:       @brand-primary;\n\n//** Width of the `border` for generating carets that indicator dropdowns.\n@caret-width-base:          4px;\n//** Carets increase slightly in size for larger components.\n@caret-width-large:         5px;\n\n\n//== Tables\n//\n//## Customizes the `.table` component with basic values, each used across all table variations.\n\n//** Padding for ``s and ``s.\n@table-cell-padding:            8px;\n//** Padding for cells in `.table-condensed`.\n@table-condensed-cell-padding:  5px;\n\n//** Default background color used for all tables.\n@table-bg:                      transparent;\n//** Background color used for `.table-striped`.\n@table-bg-accent:               #f9f9f9;\n//** Background color used for `.table-hover`.\n@table-bg-hover:                #f5f5f5;\n@table-bg-active:               @table-bg-hover;\n\n//** Border color for table and cell borders.\n@table-border-color:            #ddd;\n\n\n//== Buttons\n//\n//## For each of Bootstrap's buttons, define text, background and border color.\n\n@btn-font-weight:                normal;\n\n@btn-default-color:              #333;\n@btn-default-bg:                 #fff;\n@btn-default-border:             #ccc;\n\n@btn-primary-color:              #fff;\n@btn-primary-bg:                 @brand-primary;\n@btn-primary-border:             darken(@btn-primary-bg, 5%);\n\n@btn-success-color:              #fff;\n@btn-success-bg:                 @brand-success;\n@btn-success-border:             darken(@btn-success-bg, 5%);\n\n@btn-info-color:                 #fff;\n@btn-info-bg:                    @brand-info;\n@btn-info-border:                darken(@btn-info-bg, 5%);\n\n@btn-warning-color:              #fff;\n@btn-warning-bg:                 @brand-warning;\n@btn-warning-border:             darken(@btn-warning-bg, 5%);\n\n@btn-danger-color:               #fff;\n@btn-danger-bg:                  @brand-danger;\n@btn-danger-border:              darken(@btn-danger-bg, 5%);\n\n@btn-link-disabled-color:        @gray-light;\n\n\n//== Forms\n//\n//##\n\n//** `` background color\n@input-bg:                       #fff;\n//** `` background color\n@input-bg-disabled:              @gray-lighter;\n\n//** Text color for ``s\n@input-color:                    @gray;\n//** `` border color\n@input-border:                   #ccc;\n//** `` border radius\n@input-border-radius:            @border-radius-base;\n//** Border color for inputs on focus\n@input-border-focus:             #66afe9;\n\n//** Placeholder text color\n@input-color-placeholder:        @gray-light;\n\n//** Default `.form-control` height\n@input-height-base:              (@line-height-computed + (@padding-base-vertical * 2) + 2);\n//** Large `.form-control` height\n@input-height-large:             (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);\n//** Small `.form-control` height\n@input-height-small:             (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);\n\n@legend-color:                   @gray-dark;\n@legend-border-color:            #e5e5e5;\n\n//** Background color for textual input addons\n@input-group-addon-bg:           @gray-lighter;\n//** Border color for textual input addons\n@input-group-addon-border-color: @input-border;\n\n\n//== Dropdowns\n//\n//## Dropdown menu container and contents.\n\n//** Background for the dropdown menu.\n@dropdown-bg:                    #fff;\n//** Dropdown menu `border-color`.\n@dropdown-border:                rgba(0,0,0,.15);\n//** Dropdown menu `border-color` **for IE8**.\n@dropdown-fallback-border:       #ccc;\n//** Divider color for between dropdown items.\n@dropdown-divider-bg:            #e5e5e5;\n\n//** Dropdown link text color.\n@dropdown-link-color:            @gray-dark;\n//** Hover color for dropdown links.\n@dropdown-link-hover-color:      darken(@gray-dark, 5%);\n//** Hover background for dropdown links.\n@dropdown-link-hover-bg:         #f5f5f5;\n\n//** Active dropdown menu item text color.\n@dropdown-link-active-color:     @component-active-color;\n//** Active dropdown menu item background color.\n@dropdown-link-active-bg:        @component-active-bg;\n\n//** Disabled dropdown menu item background color.\n@dropdown-link-disabled-color:   @gray-light;\n\n//** Text color for headers within dropdown menus.\n@dropdown-header-color:          @gray-light;\n\n// Note: Deprecated @dropdown-caret-color as of v3.1.0\n@dropdown-caret-color:           #000;\n\n\n//-- Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n//\n// Note: These variables are not generated into the Customizer.\n\n@zindex-navbar:            1000;\n@zindex-dropdown:          1000;\n@zindex-popover:           1010;\n@zindex-tooltip:           1030;\n@zindex-navbar-fixed:      1030;\n@zindex-modal-background:  1040;\n@zindex-modal:             1050;\n\n\n//== Media queries breakpoints\n//\n//## Define the breakpoints at which your layout will change, adapting to different screen sizes.\n\n// Extra small screen / phone\n// Note: Deprecated @screen-xs and @screen-phone as of v3.0.1\n@screen-xs:                  480px;\n@screen-xs-min:              @screen-xs;\n@screen-phone:               @screen-xs-min;\n\n// Small screen / tablet\n// Note: Deprecated @screen-sm and @screen-tablet as of v3.0.1\n@screen-sm:                  768px;\n@screen-sm-min:              @screen-sm;\n@screen-tablet:              @screen-sm-min;\n\n// Medium screen / desktop\n// Note: Deprecated @screen-md and @screen-desktop as of v3.0.1\n@screen-md:                  992px;\n@screen-md-min:              @screen-md;\n@screen-desktop:             @screen-md-min;\n\n// Large screen / wide desktop\n// Note: Deprecated @screen-lg and @screen-lg-desktop as of v3.0.1\n@screen-lg:                  1200px;\n@screen-lg-min:              @screen-lg;\n@screen-lg-desktop:          @screen-lg-min;\n\n// So media queries don't overlap when required, provide a maximum\n@screen-xs-max:              (@screen-sm-min - 1);\n@screen-sm-max:              (@screen-md-min - 1);\n@screen-md-max:              (@screen-lg-min - 1);\n\n\n//== Grid system\n//\n//## Define your custom responsive grid.\n\n//** Number of columns in the grid.\n@grid-columns:              12;\n//** Padding between columns. Gets divided in half for the left and right.\n@grid-gutter-width:         30px;\n// Navbar collapse\n//** Point at which the navbar becomes uncollapsed.\n@grid-float-breakpoint:     @screen-sm-min;\n//** Point at which the navbar begins collapsing.\n@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);\n\n\n//== Container sizes\n//\n//## Define the maximum width of `.container` for different screen sizes.\n\n// Small screen / tablet\n@container-tablet:             ((720px + @grid-gutter-width));\n//** For `@screen-sm-min` and up.\n@container-sm:                 @container-tablet;\n\n// Medium screen / desktop\n@container-desktop:            ((940px + @grid-gutter-width));\n//** For `@screen-md-min` and up.\n@container-md:                 @container-desktop;\n\n// Large screen / wide desktop\n@container-large-desktop:      ((1140px + @grid-gutter-width));\n//** For `@screen-lg-min` and up.\n@container-lg:                 @container-large-desktop;\n\n\n//== Navbar\n//\n//##\n\n// Basics of a navbar\n@navbar-height:                    50px;\n@navbar-margin-bottom:             @line-height-computed;\n@navbar-border-radius:             @border-radius-base;\n@navbar-padding-horizontal:        floor((@grid-gutter-width / 2));\n@navbar-padding-vertical:          ((@navbar-height - @line-height-computed) / 2);\n@navbar-collapse-max-height:       340px;\n\n@navbar-default-color:             #777;\n@navbar-default-bg:                #f8f8f8;\n@navbar-default-border:            darken(@navbar-default-bg, 6.5%);\n\n// Navbar links\n@navbar-default-link-color:                #777;\n@navbar-default-link-hover-color:          #333;\n@navbar-default-link-hover-bg:             transparent;\n@navbar-default-link-active-color:         #555;\n@navbar-default-link-active-bg:            darken(@navbar-default-bg, 6.5%);\n@navbar-default-link-disabled-color:       #ccc;\n@navbar-default-link-disabled-bg:          transparent;\n\n// Navbar brand label\n@navbar-default-brand-color:               @navbar-default-link-color;\n@navbar-default-brand-hover-color:         darken(@navbar-default-brand-color, 10%);\n@navbar-default-brand-hover-bg:            transparent;\n\n// Navbar toggle\n@navbar-default-toggle-hover-bg:           #ddd;\n@navbar-default-toggle-icon-bar-bg:        #888;\n@navbar-default-toggle-border-color:       #ddd;\n\n\n// Inverted navbar\n// Reset inverted navbar basics\n@navbar-inverse-color:                      @gray-light;\n@navbar-inverse-bg:                         #222;\n@navbar-inverse-border:                     darken(@navbar-inverse-bg, 10%);\n\n// Inverted navbar links\n@navbar-inverse-link-color:                 @gray-light;\n@navbar-inverse-link-hover-color:           #fff;\n@navbar-inverse-link-hover-bg:              transparent;\n@navbar-inverse-link-active-color:          @navbar-inverse-link-hover-color;\n@navbar-inverse-link-active-bg:             darken(@navbar-inverse-bg, 10%);\n@navbar-inverse-link-disabled-color:        #444;\n@navbar-inverse-link-disabled-bg:           transparent;\n\n// Inverted navbar brand label\n@navbar-inverse-brand-color:                @navbar-inverse-link-color;\n@navbar-inverse-brand-hover-color:          #fff;\n@navbar-inverse-brand-hover-bg:             transparent;\n\n// Inverted navbar toggle\n@navbar-inverse-toggle-hover-bg:            #333;\n@navbar-inverse-toggle-icon-bar-bg:         #fff;\n@navbar-inverse-toggle-border-color:        #333;\n\n\n//== Navs\n//\n//##\n\n//=== Shared nav styles\n@nav-link-padding:                          10px 15px;\n@nav-link-hover-bg:                         @gray-lighter;\n\n@nav-disabled-link-color:                   @gray-light;\n@nav-disabled-link-hover-color:             @gray-light;\n\n@nav-open-link-hover-color:                 #fff;\n\n//== Tabs\n@nav-tabs-border-color:                     #ddd;\n\n@nav-tabs-link-hover-border-color:          @gray-lighter;\n\n@nav-tabs-active-link-hover-bg:             @body-bg;\n@nav-tabs-active-link-hover-color:          @gray;\n@nav-tabs-active-link-hover-border-color:   #ddd;\n\n@nav-tabs-justified-link-border-color:            #ddd;\n@nav-tabs-justified-active-link-border-color:     @body-bg;\n\n//== Pills\n@nav-pills-border-radius:                   @border-radius-base;\n@nav-pills-active-link-hover-bg:            @component-active-bg;\n@nav-pills-active-link-hover-color:         @component-active-color;\n\n\n//== Pagination\n//\n//##\n\n@pagination-color:                     @link-color;\n@pagination-bg:                        #fff;\n@pagination-border:                    #ddd;\n\n@pagination-hover-color:               @link-hover-color;\n@pagination-hover-bg:                  @gray-lighter;\n@pagination-hover-border:              #ddd;\n\n@pagination-active-color:              #fff;\n@pagination-active-bg:                 @brand-primary;\n@pagination-active-border:             @brand-primary;\n\n@pagination-disabled-color:            @gray-light;\n@pagination-disabled-bg:               #fff;\n@pagination-disabled-border:           #ddd;\n\n\n//== Pager\n//\n//##\n\n@pager-bg:                             @pagination-bg;\n@pager-border:                         @pagination-border;\n@pager-border-radius:                  15px;\n\n@pager-hover-bg:                       @pagination-hover-bg;\n\n@pager-active-bg:                      @pagination-active-bg;\n@pager-active-color:                   @pagination-active-color;\n\n@pager-disabled-color:                 @pagination-disabled-color;\n\n\n//== Jumbotron\n//\n//##\n\n@jumbotron-padding:              30px;\n@jumbotron-color:                inherit;\n@jumbotron-bg:                   @gray-lighter;\n@jumbotron-heading-color:        inherit;\n@jumbotron-font-size:            ceil((@font-size-base * 1.5));\n\n\n//== Form states and alerts\n//\n//## Define colors for form feedback states and, by default, alerts.\n\n@state-success-text:             #3c763d;\n@state-success-bg:               #dff0d8;\n@state-success-border:           darken(spin(@state-success-bg, -10), 5%);\n\n@state-info-text:                #31708f;\n@state-info-bg:                  #d9edf7;\n@state-info-border:              darken(spin(@state-info-bg, -10), 7%);\n\n@state-warning-text:             #8a6d3b;\n@state-warning-bg:               #fcf8e3;\n@state-warning-border:           darken(spin(@state-warning-bg, -10), 5%);\n\n@state-danger-text:              #a94442;\n@state-danger-bg:                #f2dede;\n@state-danger-border:            darken(spin(@state-danger-bg, -10), 5%);\n\n\n//== Tooltips\n//\n//##\n\n//** Tooltip max width\n@tooltip-max-width:           200px;\n//** Tooltip text color\n@tooltip-color:               #fff;\n//** Tooltip background color\n@tooltip-bg:                  #000;\n@tooltip-opacity:             .9;\n\n//** Tooltip arrow width\n@tooltip-arrow-width:         5px;\n//** Tooltip arrow color\n@tooltip-arrow-color:         @tooltip-bg;\n\n\n//== Popovers\n//\n//##\n\n//** Popover body background color\n@popover-bg:                          #fff;\n//** Popover maximum width\n@popover-max-width:                   276px;\n//** Popover border color\n@popover-border-color:                rgba(0,0,0,.2);\n//** Popover fallback border color\n@popover-fallback-border-color:       #ccc;\n\n//** Popover title background color\n@popover-title-bg:                    darken(@popover-bg, 3%);\n\n//** Popover arrow width\n@popover-arrow-width:                 10px;\n//** Popover arrow color\n@popover-arrow-color:                 #fff;\n\n//** Popover outer arrow width\n@popover-arrow-outer-width:           (@popover-arrow-width + 1);\n//** Popover outer arrow color\n@popover-arrow-outer-color:           fadein(@popover-border-color, 5%);\n//** Popover outer arrow fallback color\n@popover-arrow-outer-fallback-color:  darken(@popover-fallback-border-color, 20%);\n\n\n//== Labels\n//\n//##\n\n//** Default label background color\n@label-default-bg:            @gray-light;\n//** Primary label background color\n@label-primary-bg:            @brand-primary;\n//** Success label background color\n@label-success-bg:            @brand-success;\n//** Info label background color\n@label-info-bg:               @brand-info;\n//** Warning label background color\n@label-warning-bg:            @brand-warning;\n//** Danger label background color\n@label-danger-bg:             @brand-danger;\n\n//** Default label text color\n@label-color:                 #fff;\n//** Default text color of a linked label\n@label-link-hover-color:      #fff;\n\n\n//== Modals\n//\n//##\n\n//** Padding applied to the modal body\n@modal-inner-padding:         20px;\n\n//** Padding applied to the modal title\n@modal-title-padding:         15px;\n//** Modal title line-height\n@modal-title-line-height:     @line-height-base;\n\n//** Background color of modal content area\n@modal-content-bg:                             #fff;\n//** Modal content border color\n@modal-content-border-color:                   rgba(0,0,0,.2);\n//** Modal content border color **for IE8**\n@modal-content-fallback-border-color:          #999;\n\n//** Modal backdrop background color\n@modal-backdrop-bg:           #000;\n//** Modal backdrop opacity\n@modal-backdrop-opacity:      .5;\n//** Modal header border color\n@modal-header-border-color:   #e5e5e5;\n//** Modal footer border color\n@modal-footer-border-color:   @modal-header-border-color;\n\n@modal-lg:                    900px;\n@modal-md:                    600px;\n@modal-sm:                    300px;\n\n\n//== Alerts\n//\n//## Define alert colors, border radius, and padding.\n\n@alert-padding:               15px;\n@alert-border-radius:         @border-radius-base;\n@alert-link-font-weight:      bold;\n\n@alert-success-bg:            @state-success-bg;\n@alert-success-text:          @state-success-text;\n@alert-success-border:        @state-success-border;\n\n@alert-info-bg:               @state-info-bg;\n@alert-info-text:             @state-info-text;\n@alert-info-border:           @state-info-border;\n\n@alert-warning-bg:            @state-warning-bg;\n@alert-warning-text:          @state-warning-text;\n@alert-warning-border:        @state-warning-border;\n\n@alert-danger-bg:             @state-danger-bg;\n@alert-danger-text:           @state-danger-text;\n@alert-danger-border:         @state-danger-border;\n\n\n//== Progress bars\n//\n//##\n\n//** Background color of the whole progress component\n@progress-bg:                 #f5f5f5;\n//** Progress bar text color\n@progress-bar-color:          #fff;\n\n//** Default progress bar color\n@progress-bar-bg:             @brand-primary;\n//** Success progress bar color\n@progress-bar-success-bg:     @brand-success;\n//** Warning progress bar color\n@progress-bar-warning-bg:     @brand-warning;\n//** Danger progress bar color\n@progress-bar-danger-bg:      @brand-danger;\n//** Info progress bar color\n@progress-bar-info-bg:        @brand-info;\n\n\n//== List group\n//\n//##\n\n//** Background color on `.list-group-item`\n@list-group-bg:                 #fff;\n//** `.list-group-item` border color\n@list-group-border:             #ddd;\n//** List group border radius\n@list-group-border-radius:      @border-radius-base;\n\n//** Background color of single list elements on hover\n@list-group-hover-bg:           #f5f5f5;\n//** Text color of active list elements\n@list-group-active-color:       @component-active-color;\n//** Background color of active list elements\n@list-group-active-bg:          @component-active-bg;\n//** Border color of active list elements\n@list-group-active-border:      @list-group-active-bg;\n@list-group-active-text-color:  lighten(@list-group-active-bg, 40%);\n\n@list-group-link-color:         #555;\n@list-group-link-heading-color: #333;\n\n\n//== Panels\n//\n//##\n\n@panel-bg:                    #fff;\n@panel-body-padding:          15px;\n@panel-border-radius:         @border-radius-base;\n\n//** Border color for elements within panels\n@panel-inner-border:          #ddd;\n@panel-footer-bg:             #f5f5f5;\n\n@panel-default-text:          @gray-dark;\n@panel-default-border:        #ddd;\n@panel-default-heading-bg:    #f5f5f5;\n\n@panel-primary-text:          #fff;\n@panel-primary-border:        @brand-primary;\n@panel-primary-heading-bg:    @brand-primary;\n\n@panel-success-text:          @state-success-text;\n@panel-success-border:        @state-success-border;\n@panel-success-heading-bg:    @state-success-bg;\n\n@panel-info-text:             @state-info-text;\n@panel-info-border:           @state-info-border;\n@panel-info-heading-bg:       @state-info-bg;\n\n@panel-warning-text:          @state-warning-text;\n@panel-warning-border:        @state-warning-border;\n@panel-warning-heading-bg:    @state-warning-bg;\n\n@panel-danger-text:           @state-danger-text;\n@panel-danger-border:         @state-danger-border;\n@panel-danger-heading-bg:     @state-danger-bg;\n\n\n//== Thumbnails\n//\n//##\n\n//** Padding around the thumbnail image\n@thumbnail-padding:           4px;\n//** Thumbnail background color\n@thumbnail-bg:                @body-bg;\n//** Thumbnail border color\n@thumbnail-border:            #ddd;\n//** Thumbnail border radius\n@thumbnail-border-radius:     @border-radius-base;\n\n//** Custom text color for thumbnail captions\n@thumbnail-caption-color:     @text-color;\n//** Padding around the thumbnail caption\n@thumbnail-caption-padding:   9px;\n\n\n//== Wells\n//\n//##\n\n@well-bg:                     #f5f5f5;\n@well-border:                 darken(@well-bg, 7%);\n\n\n//== Badges\n//\n//##\n\n@badge-color:                 #fff;\n//** Linked badge text color on hover\n@badge-link-hover-color:      #fff;\n@badge-bg:                    @gray-light;\n\n//** Badge text color in active nav link\n@badge-active-color:          @link-color;\n//** Badge background color in active nav link\n@badge-active-bg:             #fff;\n\n@badge-font-weight:           bold;\n@badge-line-height:           1;\n@badge-border-radius:         10px;\n\n\n//== Breadcrumbs\n//\n//##\n\n@breadcrumb-padding-vertical:   8px;\n@breadcrumb-padding-horizontal: 15px;\n//** Breadcrumb background color\n@breadcrumb-bg:                 #f5f5f5;\n//** Breadcrumb text color\n@breadcrumb-color:              #ccc;\n//** Text color of current page in the breadcrumb\n@breadcrumb-active-color:       @gray-light;\n//** Textual separator for between breadcrumb elements\n@breadcrumb-separator:          \"/\";\n\n\n//== Carousel\n//\n//##\n\n@carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6);\n\n@carousel-control-color:                      #fff;\n@carousel-control-width:                      15%;\n@carousel-control-opacity:                    .5;\n@carousel-control-font-size:                  20px;\n\n@carousel-indicator-active-bg:                #fff;\n@carousel-indicator-border-color:             #fff;\n\n@carousel-caption-color:                      #fff;\n\n\n//== Close\n//\n//##\n\n@close-font-weight:           bold;\n@close-color:                 #000;\n@close-text-shadow:           0 1px 0 #fff;\n\n\n//== Code\n//\n//##\n\n@code-color:                  #c7254e;\n@code-bg:                     #f9f2f4;\n\n@kbd-color:                   #fff;\n@kbd-bg:                      #333;\n\n@pre-bg:                      #f5f5f5;\n@pre-color:                   @gray-dark;\n@pre-border-color:            #ccc;\n@pre-scrollable-max-height:   340px;\n\n\n//== Type\n//\n//##\n\n//** Text muted color\n@text-muted:                  @gray-light;\n//** Abbreviations and acronyms border color\n@abbr-border-color:           @gray-light;\n//** Headings small color\n@headings-small-color:        @gray-light;\n//** Blockquote small color\n@blockquote-small-color:      @gray-light;\n//** Blockquote font size\n@blockquote-font-size:        (@font-size-base * 1.25);\n//** Blockquote border color\n@blockquote-border-color:     @gray-lighter;\n//** Page header border color\n@page-header-border-color:    @gray-lighter;\n\n\n//== Miscellaneous\n//\n//##\n\n//** Horizontal line color.\n@hr-border:                   @gray-lighter;\n\n//** Horizontal offset for forms and lists.\n@component-offset-horizontal: 180px;\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n  display: block;\n  padding: @thumbnail-padding;\n  margin-bottom: @line-height-computed;\n  line-height: @line-height-base;\n  background-color: @thumbnail-bg;\n  border: 1px solid @thumbnail-border;\n  border-radius: @thumbnail-border-radius;\n  .transition(all .2s ease-in-out);\n\n  > img,\n  a > img {\n    &:extend(.img-responsive);\n    margin-left: auto;\n    margin-right: auto;\n  }\n\n  // Add a hover state for linked versions only\n  a&:hover,\n  a&:focus,\n  a&.active {\n    border-color: @link-color;\n  }\n\n  // Image captions\n  .caption {\n    padding: @thumbnail-caption-padding;\n    color: @thumbnail-caption-color;\n  }\n}\n","//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n  position: relative;\n}\n\n.carousel-inner {\n  position: relative;\n  overflow: hidden;\n  width: 100%;\n\n  > .item {\n    display: none;\n    position: relative;\n    .transition(.6s ease-in-out left);\n\n    // Account for jankitude on images\n    > img,\n    > a > img {\n      &:extend(.img-responsive);\n      line-height: 1;\n    }\n  }\n\n  > .active,\n  > .next,\n  > .prev { display: block; }\n\n  > .active {\n    left: 0;\n  }\n\n  > .next,\n  > .prev {\n    position: absolute;\n    top: 0;\n    width: 100%;\n  }\n\n  > .next {\n    left: 100%;\n  }\n  > .prev {\n    left: -100%;\n  }\n  > .next.left,\n  > .prev.right {\n    left: 0;\n  }\n\n  > .active.left {\n    left: -100%;\n  }\n  > .active.right {\n    left: 100%;\n  }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  width: @carousel-control-width;\n  .opacity(@carousel-control-opacity);\n  font-size: @carousel-control-font-size;\n  color: @carousel-control-color;\n  text-align: center;\n  text-shadow: @carousel-text-shadow;\n  // We can't have this transition here because WebKit cancels the carousel\n  // animation if you trip this while in the middle of another animation.\n\n  // Set gradients for backgrounds\n  &.left {\n    #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));\n  }\n  &.right {\n    left: auto;\n    right: 0;\n    #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));\n  }\n\n  // Hover/focus state\n  &:hover,\n  &:focus {\n    outline: none;\n    color: @carousel-control-color;\n    text-decoration: none;\n    .opacity(.9);\n  }\n\n  // Toggles\n  .icon-prev,\n  .icon-next,\n  .glyphicon-chevron-left,\n  .glyphicon-chevron-right {\n    position: absolute;\n    top: 50%;\n    z-index: 5;\n    display: inline-block;\n  }\n  .icon-prev,\n  .glyphicon-chevron-left {\n    left: 50%;\n  }\n  .icon-next,\n  .glyphicon-chevron-right {\n    right: 50%;\n  }\n  .icon-prev,\n  .icon-next {\n    width:  20px;\n    height: 20px;\n    margin-top: -10px;\n    margin-left: -10px;\n    font-family: serif;\n  }\n\n  .icon-prev {\n    &:before {\n      content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n    }\n  }\n  .icon-next {\n    &:before {\n      content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n    }\n  }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  margin-left: -30%;\n  padding-left: 0;\n  list-style: none;\n  text-align: center;\n\n  li {\n    display: inline-block;\n    width:  10px;\n    height: 10px;\n    margin: 1px;\n    text-indent: -999px;\n    border: 1px solid @carousel-indicator-border-color;\n    border-radius: 10px;\n    cursor: pointer;\n\n    // IE8-9 hack for event handling\n    //\n    // Internet Explorer 8-9 does not support clicks on elements without a set\n    // `background-color`. We cannot use `filter` since that's not viewed as a\n    // background color by the browser. Thus, a hack is needed.\n    //\n    // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n    // set alpha transparency for the best results possible.\n    background-color: #000 \\9; // IE8\n    background-color: rgba(0,0,0,0); // IE9\n  }\n  .active {\n    margin: 0;\n    width:  12px;\n    height: 12px;\n    background-color: @carousel-indicator-active-bg;\n  }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n  position: absolute;\n  left: 15%;\n  right: 15%;\n  bottom: 20px;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: @carousel-caption-color;\n  text-align: center;\n  text-shadow: @carousel-text-shadow;\n  & .btn {\n    text-shadow: none; // No shadow for button elements in carousel-caption\n  }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n\n  // Scale up the controls a smidge\n  .carousel-control {\n    .glyphicon-chevron-left,\n    .glyphicon-chevron-right,\n    .icon-prev,\n    .icon-next {\n      width: 30px;\n      height: 30px;\n      margin-top: -15px;\n      margin-left: -15px;\n      font-size: 30px;\n    }\n  }\n\n  // Show and left align the captions\n  .carousel-caption {\n    left: 20%;\n    right: 20%;\n    padding-bottom: 30px;\n  }\n\n  // Move up the indicators\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  font-family: @headings-font-family;\n  font-weight: @headings-font-weight;\n  line-height: @headings-line-height;\n  color: @headings-color;\n\n  small,\n  .small {\n    font-weight: normal;\n    line-height: 1;\n    color: @headings-small-color;\n  }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n  margin-top: @line-height-computed;\n  margin-bottom: (@line-height-computed / 2);\n\n  small,\n  .small {\n    font-size: 65%;\n  }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n  margin-top: (@line-height-computed / 2);\n  margin-bottom: (@line-height-computed / 2);\n\n  small,\n  .small {\n    font-size: 75%;\n  }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n  margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n  margin-bottom: @line-height-computed;\n  font-size: floor((@font-size-base * 1.15));\n  font-weight: 200;\n  line-height: 1.4;\n\n  @media (min-width: @screen-sm-min) {\n    font-size: (@font-size-base * 1.5);\n  }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: 14px base font * 85% = about 12px\nsmall,\n.small  { font-size: 85%; }\n\n// Undo browser default styling\ncite    { font-style: normal; }\n\n// Alignment\n.text-left           { text-align: left; }\n.text-right          { text-align: right; }\n.text-center         { text-align: center; }\n.text-justify        { text-align: justify; }\n\n// Contextual colors\n.text-muted {\n  color: @text-muted;\n}\n.text-primary {\n  .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n  .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n  .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n  .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n  .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n  // Given the contrast here, this is the only class to have its color inverted\n  // automatically.\n  color: #fff;\n  .bg-variant(@brand-primary);\n}\n.bg-success {\n  .bg-variant(@state-success-bg);\n}\n.bg-info {\n  .bg-variant(@state-info-bg);\n}\n.bg-warning {\n  .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n  .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n  padding-bottom: ((@line-height-computed / 2) - 1);\n  margin: (@line-height-computed * 2) 0 @line-height-computed;\n  border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// --------------------------------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n  margin-top: 0;\n  margin-bottom: (@line-height-computed / 2);\n  ul,\n  ol {\n    margin-bottom: 0;\n  }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n  .list-unstyled();\n  margin-left: -5px;\n\n  > li {\n    display: inline-block;\n    padding-left: 5px;\n    padding-right: 5px;\n  }\n}\n\n// Description Lists\ndl {\n  margin-top: 0; // Remove browser default\n  margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n  line-height: @line-height-base;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n@media (min-width: @grid-float-breakpoint) {\n  .dl-horizontal {\n    dt {\n      float: left;\n      width: (@component-offset-horizontal - 20);\n      clear: left;\n      text-align: right;\n      .text-overflow();\n    }\n    dd {\n      margin-left: @component-offset-horizontal;\n      &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n    }\n  }\n}\n\n// MISC\n// ----\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\n\n// Blockquotes\nblockquote {\n  padding: (@line-height-computed / 2) @line-height-computed;\n  margin: 0 0 @line-height-computed;\n  font-size: @blockquote-font-size;\n  border-left: 5px solid @blockquote-border-color;\n\n  p,\n  ul,\n  ol {\n    &:last-child {\n      margin-bottom: 0;\n    }\n  }\n\n  // Note: Deprecated small and .small as of v3.1.0\n  // Context: https://github.com/twbs/bootstrap/issues/11660\n  footer,\n  small,\n  .small {\n    display: block;\n    font-size: 80%; // back to default font-size\n    line-height: @line-height-base;\n    color: @blockquote-small-color;\n\n    &:before {\n      content: '\\2014 \\00A0'; // em dash, nbsp\n    }\n  }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  border-right: 5px solid @blockquote-border-color;\n  border-left: 0;\n  text-align: right;\n\n  // Account for citation\n  footer,\n  small,\n  .small {\n    &:before { content: ''; }\n    &:after {\n      content: '\\00A0 \\2014'; // nbsp, em dash\n    }\n  }\n}\n\n// Quotes\nblockquote:before,\nblockquote:after {\n  content: \"\";\n}\n\n// Addresses\naddress {\n  margin-bottom: @line-height-computed;\n  font-style: normal;\n  line-height: @line-height-base;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n  font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: @code-color;\n  background-color: @code-bg;\n  white-space: nowrap;\n  border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: @kbd-color;\n  background-color: @kbd-bg;\n  border-radius: @border-radius-small;\n  box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n}\n\n// Blocks of code\npre {\n  display: block;\n  padding: ((@line-height-computed - 1) / 2);\n  margin: 0 0 (@line-height-computed / 2);\n  font-size: (@font-size-base - 1); // 14px to 13px\n  line-height: @line-height-base;\n  word-break: break-all;\n  word-wrap: break-word;\n  color: @pre-color;\n  background-color: @pre-bg;\n  border: 1px solid @pre-border-color;\n  border-radius: @border-radius-base;\n\n  // Account for some code outputs that place code tags in pre tags\n  code {\n    padding: 0;\n    font-size: inherit;\n    color: inherit;\n    white-space: pre-wrap;\n    background-color: transparent;\n    border-radius: 0;\n  }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n  max-height: @pre-scrollable-max-height;\n  overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n  .container-fixed();\n\n  @media (min-width: @screen-sm-min) {\n    width: @container-sm;\n  }\n  @media (min-width: @screen-md-min) {\n    width: @container-md;\n  }\n  @media (min-width: @screen-lg-min) {\n    width: @container-lg;\n  }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n  .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n  .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n  .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n  .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n  .make-grid(lg);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n  max-width: 100%;\n  background-color: @table-bg;\n}\nth {\n  text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n  width: 100%;\n  margin-bottom: @line-height-computed;\n  // Cells\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: @table-cell-padding;\n        line-height: @line-height-base;\n        vertical-align: top;\n        border-top: 1px solid @table-border-color;\n      }\n    }\n  }\n  // Bottom align for column headings\n  > thead > tr > th {\n    vertical-align: bottom;\n    border-bottom: 2px solid @table-border-color;\n  }\n  // Remove top border from thead by default\n  > caption + thead,\n  > colgroup + thead,\n  > thead:first-child {\n    > tr:first-child {\n      > th,\n      > td {\n        border-top: 0;\n      }\n    }\n  }\n  // Account for multiple tbody instances\n  > tbody + tbody {\n    border-top: 2px solid @table-border-color;\n  }\n\n  // Nesting\n  .table {\n    background-color: @body-bg;\n  }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: @table-condensed-cell-padding;\n      }\n    }\n  }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n  border: 1px solid @table-border-color;\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        border: 1px solid @table-border-color;\n      }\n    }\n  }\n  > thead > tr {\n    > th,\n    > td {\n      border-bottom-width: 2px;\n    }\n  }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n  > tbody > tr:nth-child(odd) {\n    > td,\n    > th {\n      background-color: @table-bg-accent;\n    }\n  }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n  > tbody > tr:hover {\n    > td,\n    > th {\n      background-color: @table-bg-hover;\n    }\n  }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n  position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n  float: none;\n  display: table-column;\n}\ntable {\n  td,\n  th {\n    &[class*=\"col-\"] {\n      position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n      float: none;\n      display: table-cell;\n    }\n  }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n@media (max-width: @screen-xs-max) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: (@line-height-computed * 0.75);\n    overflow-y: hidden;\n    overflow-x: scroll;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid @table-border-color;\n    -webkit-overflow-scrolling: touch;\n\n    // Tighten up spacing\n    > .table {\n      margin-bottom: 0;\n\n      // Ensure the content doesn't wrap\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th,\n          > td {\n            white-space: nowrap;\n          }\n        }\n      }\n    }\n\n    // Special overrides for the bordered tables\n    > .table-bordered {\n      border: 0;\n\n      // Nuke the appropriate borders so that the parent can handle them\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th:first-child,\n          > td:first-child {\n            border-left: 0;\n          }\n          > th:last-child,\n          > td:last-child {\n            border-right: 0;\n          }\n        }\n      }\n\n      // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n      // chances are there will be only one `tr` in a `thead` and that would\n      // remove the border altogether.\n      > tbody,\n      > tfoot {\n        > tr:last-child {\n          > th,\n          > td {\n            border-bottom: 0;\n          }\n        }\n      }\n\n    }\n  }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n  padding: 0;\n  margin: 0;\n  border: 0;\n  // Chrome and Firefox set a `min-width: -webkit-min-content;` on fieldsets,\n  // so we reset that to ensure it behaves more like a standard block element.\n  // See https://github.com/twbs/bootstrap/issues/12359.\n  min-width: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: @line-height-computed;\n  font-size: (@font-size-base * 1.5);\n  line-height: inherit;\n  color: @legend-color;\n  border: 0;\n  border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n  display: inline-block;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n  .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9; /* IE8-9 */\n  line-height: normal;\n}\n\n// Set the height of file controls to match text inputs\ninput[type=\"file\"] {\n  display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n  height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  .tab-focus();\n}\n\n// Adjust output element\noutput {\n  display: block;\n  padding-top: (@padding-base-vertical + 1);\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n  padding: @padding-base-vertical @padding-base-horizontal;\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @input-color;\n  background-color: @input-bg;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid @input-border;\n  border-radius: @input-border-radius;\n  .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n  .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n  // Customize the `:focus` state to imitate native WebKit styles.\n  .form-control-focus();\n\n  // Placeholder\n  .placeholder();\n\n  // Disabled and read-only inputs\n  //\n  // HTML5 says that controls under a fieldset > legend:first-child won't be\n  // disabled if the fieldset is disabled. Due to implementation difficulty, we\n  // don't honor that edge case; we style them as disabled anyway.\n  &[disabled],\n  &[readonly],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n    background-color: @input-bg-disabled;\n    opacity: 1; // iOS fix for unreadable disabled content\n  }\n\n  // Reset height for `textarea`s\n  textarea& {\n    height: auto;\n  }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\n\n\n// Special styles for iOS date input\n//\n// In Mobile Safari, date inputs require a pixel line-height that matches the\n// given height of the input.\n\ninput[type=\"date\"] {\n  line-height: @input-height-base;\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n  margin-bottom: 15px;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n  display: block;\n  min-height: @line-height-computed; // clear the floating input if there is no label text\n  margin-top: 10px;\n  margin-bottom: 10px;\n  padding-left: 20px;\n  label {\n    display: inline;\n    font-weight: normal;\n    cursor: pointer;\n  }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  float: left;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  vertical-align: middle;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n//\n// Note: Neither radios nor checkboxes can be readonly.\ninput[type=\"radio\"],\ninput[type=\"checkbox\"],\n.radio,\n.radio-inline,\n.checkbox,\n.checkbox-inline {\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n  }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n\n.input-sm {\n  .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n.input-lg {\n  .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n.has-feedback {\n  // Enable absolute positioning\n  position: relative;\n\n  // Ensure icons don't overlap text\n  .form-control {\n    padding-right: (@input-height-base * 1.25);\n  }\n\n  // Feedback icon (requires .glyphicon classes)\n  .form-control-feedback {\n    position: absolute;\n    top: (@line-height-computed + 5); // Height of the `label` and its margin\n    right: 0;\n    display: block;\n    width: @input-height-base;\n    height: @input-height-base;\n    line-height: @input-height-base;\n    text-align: center;\n  }\n}\n\n// Feedback states\n.has-success {\n  .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n.has-warning {\n  .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n.has-error {\n  .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n  margin-bottom: 0; // Remove default margin from `p`\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n  display: block; // account for any element using help-block\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: lighten(@text-color, 25%); // lighten the text some for contrast\n}\n\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n\n  // Kick in the inline\n  @media (min-width: @screen-sm-min) {\n    // Inline-block all the things for \"inline\"\n    .form-group {\n      display: inline-block;\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // In navbar-form, allow folks to *not* use `.form-group`\n    .form-control {\n      display: inline-block;\n      width: auto; // Prevent labels from stacking above inputs in `.form-group`\n      vertical-align: middle;\n    }\n    // Input groups need that 100% width though\n    .input-group > .form-control {\n      width: 100%;\n    }\n\n    .control-label {\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // Remove default margin on radios/checkboxes that were used for stacking, and\n    // then undo the floating of radios and checkboxes to match (which also avoids\n    // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).\n    .radio,\n    .checkbox {\n      display: inline-block;\n      margin-top: 0;\n      margin-bottom: 0;\n      padding-left: 0;\n      vertical-align: middle;\n    }\n    .radio input[type=\"radio\"],\n    .checkbox input[type=\"checkbox\"] {\n      float: none;\n      margin-left: 0;\n    }\n\n    // Validation states\n    //\n    // Reposition the icon because it's now within a grid column and columns have\n    // `position: relative;` on them. Also accounts for the grid gutter padding.\n    .has-feedback .form-control-feedback {\n      top: 0;\n    }\n  }\n}\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n  // Consistent vertical alignment of labels, radios, and checkboxes\n  .control-label,\n  .radio,\n  .checkbox,\n  .radio-inline,\n  .checkbox-inline {\n    margin-top: 0;\n    margin-bottom: 0;\n    padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n  }\n  // Account for padding we're adding to ensure the alignment and of help text\n  // and other content below items\n  .radio,\n  .checkbox {\n    min-height: (@line-height-computed + (@padding-base-vertical + 1));\n  }\n\n  // Make form groups behave like rows\n  .form-group {\n    .make-row();\n  }\n\n  .form-control-static {\n    padding-top: (@padding-base-vertical + 1);\n  }\n\n  // Only right align form labels here when the columns stop stacking\n  @media (min-width: @screen-sm-min) {\n    .control-label {\n      text-align: right;\n    }\n  }\n\n  // Validation states\n  //\n  // Reposition the icon because it's now within a grid column and columns have\n  // `position: relative;` on them. Also accounts for the grid gutter padding.\n  .has-feedback .form-control-feedback {\n    top: 0;\n    right: (@grid-gutter-width / 2);\n  }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n  display: inline-block;\n  margin-bottom: 0; // For input.btn\n  font-weight: @btn-font-weight;\n  text-align: center;\n  vertical-align: middle;\n  cursor: pointer;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  white-space: nowrap;\n  .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base);\n  .user-select(none);\n\n  &,\n  &:active,\n  &.active {\n    &:focus {\n      .tab-focus();\n    }\n  }\n\n  &:hover,\n  &:focus {\n    color: @btn-default-color;\n    text-decoration: none;\n  }\n\n  &:active,\n  &.active {\n    outline: 0;\n    background-image: none;\n    .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n  }\n\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n    pointer-events: none; // Future-proof disabling of clicks\n    .opacity(.65);\n    .box-shadow(none);\n  }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n  .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n  .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n  .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n  .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n  .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n  .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n  color: @link-color;\n  font-weight: normal;\n  cursor: pointer;\n  border-radius: 0;\n\n  &,\n  &:active,\n  &[disabled],\n  fieldset[disabled] & {\n    background-color: transparent;\n    .box-shadow(none);\n  }\n  &,\n  &:hover,\n  &:focus,\n  &:active {\n    border-color: transparent;\n  }\n  &:hover,\n  &:focus {\n    color: @link-hover-color;\n    text-decoration: underline;\n    background-color: transparent;\n  }\n  &[disabled],\n  fieldset[disabled] & {\n    &:hover,\n    &:focus {\n      color: @btn-link-disabled-color;\n      text-decoration: none;\n    }\n  }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n  // line-height: ensure even-numbered height of button next to large input\n  .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n.btn-sm {\n  // line-height: ensure proper height of button next to small input\n  .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n.btn-xs {\n  .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n  display: block;\n  width: 100%;\n  padding-left: 0;\n  padding-right: 0;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n  &.btn-block {\n    width: 100%;\n  }\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle; // match .btn alignment given font-size hack above\n  > .btn {\n    position: relative;\n    float: left;\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active,\n    &.active {\n      z-index: 2;\n    }\n    &:focus {\n      // Remove focus outline when dropdown JS adds it after closing the menu\n      outline: none;\n    }\n  }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n  .btn + .btn,\n  .btn + .btn-group,\n  .btn-group + .btn,\n  .btn-group + .btn-group {\n    margin-left: -1px;\n  }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n  margin-left: -5px; // Offset the first child's margin\n  &:extend(.clearfix all);\n\n  .btn-group,\n  .input-group {\n    float: left;\n  }\n  > .btn,\n  > .btn-group,\n  > .input-group {\n    margin-left: 5px;\n  }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n  margin-left: 0;\n  &:not(:last-child):not(.dropdown-toggle) {\n    .border-right-radius(0);\n  }\n}\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    .border-right-radius(0);\n  }\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n  .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n  padding-left: 8px;\n  padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-left: 12px;\n  padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n  .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n  // Show no shadow for `.btn-link` since it has no other button styles.\n  &.btn-link {\n    .box-shadow(none);\n  }\n}\n\n\n// Reposition the caret\n.btn .caret {\n  margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n  border-width: @caret-width-large @caret-width-large 0;\n  border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n  border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n  > .btn,\n  > .btn-group,\n  > .btn-group > .btn {\n    display: block;\n    float: none;\n    width: 100%;\n    max-width: 100%;\n  }\n\n  // Clear floats so dropdown menus can be properly placed\n  > .btn-group {\n    &:extend(.clearfix all);\n    > .btn {\n      float: none;\n    }\n  }\n\n  > .btn + .btn,\n  > .btn + .btn-group,\n  > .btn-group + .btn,\n  > .btn-group + .btn-group {\n    margin-top: -1px;\n    margin-left: 0;\n  }\n}\n\n.btn-group-vertical > .btn {\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n  &:first-child:not(:last-child) {\n    border-top-right-radius: @border-radius-base;\n    .border-bottom-radius(0);\n  }\n  &:last-child:not(:first-child) {\n    border-bottom-left-radius: @border-radius-base;\n    .border-top-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    .border-bottom-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  .border-top-radius(0);\n}\n\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n  > .btn,\n  > .btn-group {\n    float: none;\n    display: table-cell;\n    width: 1%;\n  }\n  > .btn-group .btn {\n    width: 100%;\n  }\n}\n\n\n// Checkbox and radio options\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  display: none;\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552.\n\n.fade {\n  opacity: 0;\n  .transition(opacity .15s linear);\n  &.in {\n    opacity: 1;\n  }\n}\n\n.collapse {\n  display: none;\n  &.in {\n    display: block;\n  }\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  .transition(height .35s ease);\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n//  Star\n\n// Import the fonts\n@font-face {\n  font-family: 'Glyphicons Halflings';\n  src: ~\"url('@{icon-font-path}@{icon-font-name}.eot')\";\n  src: ~\"url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype')\",\n       ~\"url('@{icon-font-path}@{icon-font-name}.woff') format('woff')\",\n       ~\"url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype')\",\n       ~\"url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg')\";\n}\n\n// Catchall baseclass\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk               { &:before { content: \"\\2a\"; } }\n.glyphicon-plus                   { &:before { content: \"\\2b\"; } }\n.glyphicon-euro                   { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus                  { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud                  { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope               { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil                 { &:before { content: \"\\270f\"; } }\n.glyphicon-glass                  { &:before { content: \"\\e001\"; } }\n.glyphicon-music                  { &:before { content: \"\\e002\"; } }\n.glyphicon-search                 { &:before { content: \"\\e003\"; } }\n.glyphicon-heart                  { &:before { content: \"\\e005\"; } }\n.glyphicon-star                   { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty             { &:before { content: \"\\e007\"; } }\n.glyphicon-user                   { &:before { content: \"\\e008\"; } }\n.glyphicon-film                   { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large               { &:before { content: \"\\e010\"; } }\n.glyphicon-th                     { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list                { &:before { content: \"\\e012\"; } }\n.glyphicon-ok                     { &:before { content: \"\\e013\"; } }\n.glyphicon-remove                 { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in                { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out               { &:before { content: \"\\e016\"; } }\n.glyphicon-off                    { &:before { content: \"\\e017\"; } }\n.glyphicon-signal                 { &:before { content: \"\\e018\"; } }\n.glyphicon-cog                    { &:before { content: \"\\e019\"; } }\n.glyphicon-trash                  { &:before { content: \"\\e020\"; } }\n.glyphicon-home                   { &:before { content: \"\\e021\"; } }\n.glyphicon-file                   { &:before { content: \"\\e022\"; } }\n.glyphicon-time                   { &:before { content: \"\\e023\"; } }\n.glyphicon-road                   { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt           { &:before { content: \"\\e025\"; } }\n.glyphicon-download               { &:before { content: \"\\e026\"; } }\n.glyphicon-upload                 { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox                  { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle            { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat                 { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh                { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt               { &:before { content: \"\\e032\"; } }\n.glyphicon-lock                   { &:before { content: \"\\e033\"; } }\n.glyphicon-flag                   { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones             { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off             { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down            { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up              { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode                 { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode                { &:before { content: \"\\e040\"; } }\n.glyphicon-tag                    { &:before { content: \"\\e041\"; } }\n.glyphicon-tags                   { &:before { content: \"\\e042\"; } }\n.glyphicon-book                   { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark               { &:before { content: \"\\e044\"; } }\n.glyphicon-print                  { &:before { content: \"\\e045\"; } }\n.glyphicon-camera                 { &:before { content: \"\\e046\"; } }\n.glyphicon-font                   { &:before { content: \"\\e047\"; } }\n.glyphicon-bold                   { &:before { content: \"\\e048\"; } }\n.glyphicon-italic                 { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height            { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width             { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left             { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center           { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right            { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify          { &:before { content: \"\\e055\"; } }\n.glyphicon-list                   { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left            { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right           { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video         { &:before { content: \"\\e059\"; } }\n.glyphicon-picture                { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker             { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust                 { &:before { content: \"\\e063\"; } }\n.glyphicon-tint                   { &:before { content: \"\\e064\"; } }\n.glyphicon-edit                   { &:before { content: \"\\e065\"; } }\n.glyphicon-share                  { &:before { content: \"\\e066\"; } }\n.glyphicon-check                  { &:before { content: \"\\e067\"; } }\n.glyphicon-move                   { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward          { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward          { &:before { content: \"\\e070\"; } }\n.glyphicon-backward               { &:before { content: \"\\e071\"; } }\n.glyphicon-play                   { &:before { content: \"\\e072\"; } }\n.glyphicon-pause                  { &:before { content: \"\\e073\"; } }\n.glyphicon-stop                   { &:before { content: \"\\e074\"; } }\n.glyphicon-forward                { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward           { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward           { &:before { content: \"\\e077\"; } }\n.glyphicon-eject                  { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left           { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right          { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign              { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign             { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign            { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign                { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign          { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign              { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot             { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle          { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle              { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle             { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left             { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right            { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up               { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down             { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt              { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full            { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small           { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign       { &:before { content: \"\\e101\"; } }\n.glyphicon-gift                   { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf                   { &:before { content: \"\\e103\"; } }\n.glyphicon-fire                   { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open               { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close              { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign           { &:before { content: \"\\e107\"; } }\n.glyphicon-plane                  { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar               { &:before { content: \"\\e109\"; } }\n.glyphicon-random                 { &:before { content: \"\\e110\"; } }\n.glyphicon-comment                { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet                 { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up             { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down           { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet                { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart          { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close           { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open            { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical        { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal      { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd                    { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn               { &:before { content: \"\\e122\"; } }\n.glyphicon-bell                   { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate            { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up              { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down            { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right             { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left              { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up                { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down              { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right     { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left      { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up        { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down      { &:before { content: \"\\e134\"; } }\n.glyphicon-globe                  { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench                 { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks                  { &:before { content: \"\\e137\"; } }\n.glyphicon-filter                 { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase              { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen             { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard              { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip              { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty            { &:before { content: \"\\e143\"; } }\n.glyphicon-link                   { &:before { content: \"\\e144\"; } }\n.glyphicon-phone                  { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin                { &:before { content: \"\\e146\"; } }\n.glyphicon-usd                    { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp                    { &:before { content: \"\\e149\"; } }\n.glyphicon-sort                   { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet       { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt   { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order          { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt      { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes     { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked              { &:before { content: \"\\e157\"; } }\n.glyphicon-expand                 { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down          { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up            { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in                 { &:before { content: \"\\e161\"; } }\n.glyphicon-flash                  { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out                { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window             { &:before { content: \"\\e164\"; } }\n.glyphicon-record                 { &:before { content: \"\\e165\"; } }\n.glyphicon-save                   { &:before { content: \"\\e166\"; } }\n.glyphicon-open                   { &:before { content: \"\\e167\"; } }\n.glyphicon-saved                  { &:before { content: \"\\e168\"; } }\n.glyphicon-import                 { &:before { content: \"\\e169\"; } }\n.glyphicon-export                 { &:before { content: \"\\e170\"; } }\n.glyphicon-send                   { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk            { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved           { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove          { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save            { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open            { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card            { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer               { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery                { &:before { content: \"\\e179\"; } }\n.glyphicon-header                 { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed             { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone               { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt              { &:before { content: \"\\e183\"; } }\n.glyphicon-tower                  { &:before { content: \"\\e184\"; } }\n.glyphicon-stats                  { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video               { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video               { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles              { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo           { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby            { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1              { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1              { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1              { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark         { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark      { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download         { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload           { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer           { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous         { &:before { content: \"\\e200\"; } }\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top:   @caret-width-base solid;\n  border-right: @caret-width-base solid transparent;\n  border-left:  @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropdown {\n  position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n  outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: @zindex-dropdown;\n  display: none; // none by default, but block on \"open\" of the menu\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0; // override default ul\n  list-style: none;\n  font-size: @font-size-base;\n  background-color: @dropdown-bg;\n  border: 1px solid @dropdown-fallback-border; // IE8 fallback\n  border: 1px solid @dropdown-border;\n  border-radius: @border-radius-base;\n  .box-shadow(0 6px 12px rgba(0,0,0,.175));\n  background-clip: padding-box;\n\n  // Aligns the dropdown menu to right\n  //\n  // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n  &.pull-right {\n    right: 0;\n    left: auto;\n  }\n\n  // Dividers (basically an hr) within the dropdown\n  .divider {\n    .nav-divider(@dropdown-divider-bg);\n  }\n\n  // Links within the dropdown menu\n  > li > a {\n    display: block;\n    padding: 3px 20px;\n    clear: both;\n    font-weight: normal;\n    line-height: @line-height-base;\n    color: @dropdown-link-color;\n    white-space: nowrap; // prevent links from randomly breaking onto new lines\n  }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    color: @dropdown-link-hover-color;\n    background-color: @dropdown-link-hover-bg;\n  }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n  &,\n  &:hover,\n  &:focus {\n    color: @dropdown-link-active-color;\n    text-decoration: none;\n    outline: 0;\n    background-color: @dropdown-link-active-bg;\n  }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n  &,\n  &:hover,\n  &:focus {\n    color: @dropdown-link-disabled-color;\n  }\n}\n// Nuke hover/focus effects\n.dropdown-menu > .disabled > a {\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    background-color: transparent;\n    background-image: none; // Remove CSS gradient\n    .reset-filter();\n    cursor: not-allowed;\n  }\n}\n\n// Open state for the dropdown\n.open {\n  // Show the menu\n  > .dropdown-menu {\n    display: block;\n  }\n\n  // Remove the outline when :focus is triggered\n  > a {\n    outline: 0;\n  }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n  left: auto; // Reset the default from `.dropdown-menu`\n  right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n  left: 0;\n  right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: @font-size-small;\n  line-height: @line-height-base;\n  color: @dropdown-header-color;\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  top: 0;\n  z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n  // Reverse the caret\n  .caret {\n    border-top: 0;\n    border-bottom: @caret-width-base solid;\n    content: \"\";\n  }\n  // Different positioning for bottom up menu\n  .dropdown-menu {\n    top: auto;\n    bottom: 100%;\n    margin-bottom: 1px;\n  }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-right {\n    .dropdown-menu {\n      .dropdown-menu-right();\n    }\n    // Necessary for overrides of the default right aligned menu.\n    // Will remove come v4 in all likelihood.\n    .dropdown-menu-left {\n      .dropdown-menu-left();\n    }\n  }\n}\n\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n  position: relative; // For dropdowns\n  display: table;\n  border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n  // Undo padding and float of grid classes\n  &[class*=\"col-\"] {\n    float: none;\n    padding-left: 0;\n    padding-right: 0;\n  }\n\n  .form-control {\n    // Ensure that the input is always above the *appended* addon button for\n    // proper border colors.\n    position: relative;\n    z-index: 2;\n\n    // IE9 fubars the placeholder attribute in text inputs and the arrows on\n    // select elements in input groups. To fix it, we float the input. Details:\n    // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n    float: left;\n\n    width: 100%;\n    margin-bottom: 0;\n  }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn { .input-lg(); }\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn { .input-sm(); }\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n  padding: @padding-base-vertical @padding-base-horizontal;\n  font-size: @font-size-base;\n  font-weight: normal;\n  line-height: 1;\n  color: @input-color;\n  text-align: center;\n  background-color: @input-group-addon-bg;\n  border: 1px solid @input-group-addon-border-color;\n  border-radius: @border-radius-base;\n\n  // Sizing\n  &.input-sm {\n    padding: @padding-small-vertical @padding-small-horizontal;\n    font-size: @font-size-small;\n    border-radius: @border-radius-small;\n  }\n  &.input-lg {\n    padding: @padding-large-vertical @padding-large-horizontal;\n    font-size: @font-size-large;\n    border-radius: @border-radius-large;\n  }\n\n  // Nuke default margins from checkboxes and radios to vertically center within.\n  input[type=\"radio\"],\n  input[type=\"checkbox\"] {\n    margin-top: 0;\n  }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  .border-right-radius(0);\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  .border-left-radius(0);\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n  position: relative;\n  // Jankily prevent input button groups from wrapping with `white-space` and\n  // `font-size` in combination with `inline-block` on buttons.\n  font-size: 0;\n  white-space: nowrap;\n\n  // Negative margin for spacing, position for bringing hovered/focused/actived\n  // element above the siblings.\n  > .btn {\n    position: relative;\n    + .btn {\n      margin-left: -1px;\n    }\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active {\n      z-index: 2;\n    }\n  }\n\n  // Negative margin to only have a 1px border between the two\n  &:first-child {\n    > .btn,\n    > .btn-group {\n      margin-right: -1px;\n    }\n  }\n  &:last-child {\n    > .btn,\n    > .btn-group {\n      margin-left: -1px;\n    }\n  }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n  margin-bottom: 0;\n  padding-left: 0; // Override default ul/ol\n  list-style: none;\n  &:extend(.clearfix all);\n\n  > li {\n    position: relative;\n    display: block;\n\n    > a {\n      position: relative;\n      display: block;\n      padding: @nav-link-padding;\n      &:hover,\n      &:focus {\n        text-decoration: none;\n        background-color: @nav-link-hover-bg;\n      }\n    }\n\n    // Disabled state sets text to gray and nukes hover/tab effects\n    &.disabled > a {\n      color: @nav-disabled-link-color;\n\n      &:hover,\n      &:focus {\n        color: @nav-disabled-link-hover-color;\n        text-decoration: none;\n        background-color: transparent;\n        cursor: not-allowed;\n      }\n    }\n  }\n\n  // Open dropdowns\n  .open > a {\n    &,\n    &:hover,\n    &:focus {\n      background-color: @nav-link-hover-bg;\n      border-color: @link-color;\n    }\n  }\n\n  // Nav dividers (deprecated with v3.0.1)\n  //\n  // This should have been removed in v3 with the dropping of `.nav-list`, but\n  // we missed it. We don't currently support this anywhere, but in the interest\n  // of maintaining backward compatibility in case you use it, it's deprecated.\n  .nav-divider {\n    .nav-divider();\n  }\n\n  // Prevent IE8 from misplacing imgs\n  //\n  // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n  > li > a > img {\n    max-width: none;\n  }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n  border-bottom: 1px solid @nav-tabs-border-color;\n  > li {\n    float: left;\n    // Make the list-items overlay the bottom border\n    margin-bottom: -1px;\n\n    // Actual tabs (as links)\n    > a {\n      margin-right: 2px;\n      line-height: @line-height-base;\n      border: 1px solid transparent;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n      &:hover {\n        border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n      }\n    }\n\n    // Active state, and its :hover to override normal :hover\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @nav-tabs-active-link-hover-color;\n        background-color: @nav-tabs-active-link-hover-bg;\n        border: 1px solid @nav-tabs-active-link-hover-border-color;\n        border-bottom-color: transparent;\n        cursor: default;\n      }\n    }\n  }\n  // pulling this in mainly for less shorthand\n  &.nav-justified {\n    .nav-justified();\n    .nav-tabs-justified();\n  }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n  > li {\n    float: left;\n\n    // Links rendered as pills\n    > a {\n      border-radius: @nav-pills-border-radius;\n    }\n    + li {\n      margin-left: 2px;\n    }\n\n    // Active state\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @nav-pills-active-link-hover-color;\n        background-color: @nav-pills-active-link-hover-bg;\n      }\n    }\n  }\n}\n\n\n// Stacked pills\n.nav-stacked {\n  > li {\n    float: none;\n    + li {\n      margin-top: 2px;\n      margin-left: 0; // no need for this gap between nav items\n    }\n  }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n  width: 100%;\n\n  > li {\n    float: none;\n     > a {\n      text-align: center;\n      margin-bottom: 5px;\n    }\n  }\n\n  > .dropdown .dropdown-menu {\n    top: auto;\n    left: auto;\n  }\n\n  @media (min-width: @screen-sm-min) {\n    > li {\n      display: table-cell;\n      width: 1%;\n      > a {\n        margin-bottom: 0;\n      }\n    }\n  }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n  border-bottom: 0;\n\n  > li > a {\n    // Override margin from .nav-tabs\n    margin-right: 0;\n    border-radius: @border-radius-base;\n  }\n\n  > .active > a,\n  > .active > a:hover,\n  > .active > a:focus {\n    border: 1px solid @nav-tabs-justified-link-border-color;\n  }\n\n  @media (min-width: @screen-sm-min) {\n    > li > a {\n      border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n    }\n    > .active > a,\n    > .active > a:hover,\n    > .active > a:focus {\n      border-bottom-color: @nav-tabs-justified-active-link-border-color;\n    }\n  }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n  > .tab-pane {\n    display: none;\n  }\n  > .active {\n    display: block;\n  }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n  // make dropdown border overlap tab border\n  margin-top: -1px;\n  // Remove the top rounded corners here since there is a hard edge above the menu\n  .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n  position: relative;\n  min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n  margin-bottom: @navbar-margin-bottom;\n  border: 1px solid transparent;\n\n  // Prevent floats from breaking the navbar\n  &:extend(.clearfix all);\n\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: @navbar-border-radius;\n  }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n  &:extend(.clearfix all);\n\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n  }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n  max-height: @navbar-collapse-max-height;\n  overflow-x: visible;\n  padding-right: @navbar-padding-horizontal;\n  padding-left:  @navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n  &:extend(.clearfix all);\n  -webkit-overflow-scrolling: touch;\n\n  &.in {\n    overflow-y: auto;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    width: auto;\n    border-top: 0;\n    box-shadow: none;\n\n    &.collapse {\n      display: block !important;\n      height: auto !important;\n      padding-bottom: 0; // Override default setting\n      overflow: visible !important;\n    }\n\n    &.in {\n      overflow-y: visible;\n    }\n\n    // Undo the collapse side padding for navbars with containers to ensure\n    // alignment of right-aligned contents.\n    .navbar-fixed-top &,\n    .navbar-static-top &,\n    .navbar-fixed-bottom & {\n      padding-left: 0;\n      padding-right: 0;\n    }\n  }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n  > .navbar-header,\n  > .navbar-collapse {\n    margin-right: -@navbar-padding-horizontal;\n    margin-left:  -@navbar-padding-horizontal;\n\n    @media (min-width: @grid-float-breakpoint) {\n      margin-right: 0;\n      margin-left:  0;\n    }\n  }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n  z-index: @zindex-navbar;\n  border-width: 0 0 1px;\n\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: @zindex-navbar-fixed;\n\n  // Undo the rounded corners\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0; // override .navbar defaults\n  border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n  float: left;\n  padding: @navbar-padding-vertical @navbar-padding-horizontal;\n  font-size: @font-size-large;\n  line-height: @line-height-computed;\n  height: @navbar-height;\n\n  &:hover,\n  &:focus {\n    text-decoration: none;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    .navbar > .container &,\n    .navbar > .container-fluid & {\n      margin-left: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n  position: relative;\n  float: right;\n  margin-right: @navbar-padding-horizontal;\n  padding: 9px 10px;\n  .navbar-vertical-align(34px);\n  background-color: transparent;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  border-radius: @border-radius-base;\n\n  // We remove the `outline` here, but later compensate by attaching `:hover`\n  // styles to `:focus`.\n  &:focus {\n    outline: none;\n  }\n\n  // Bars\n  .icon-bar {\n    display: block;\n    width: 22px;\n    height: 2px;\n    border-radius: 1px;\n  }\n  .icon-bar + .icon-bar {\n    margin-top: 4px;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    display: none;\n  }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n  margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n  > li > a {\n    padding-top:    10px;\n    padding-bottom: 10px;\n    line-height: @line-height-computed;\n  }\n\n  @media (max-width: @grid-float-breakpoint-max) {\n    // Dropdowns get custom display when collapsed\n    .open .dropdown-menu {\n      position: static;\n      float: none;\n      width: auto;\n      margin-top: 0;\n      background-color: transparent;\n      border: 0;\n      box-shadow: none;\n      > li > a,\n      .dropdown-header {\n        padding: 5px 15px 5px 25px;\n      }\n      > li > a {\n        line-height: @line-height-computed;\n        &:hover,\n        &:focus {\n          background-image: none;\n        }\n      }\n    }\n  }\n\n  // Uncollapse the nav\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n    margin: 0;\n\n    > li {\n      float: left;\n      > a {\n        padding-top:    @navbar-padding-vertical;\n        padding-bottom: @navbar-padding-vertical;\n      }\n    }\n\n    &.navbar-right:last-child {\n      margin-right: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-left  { .pull-left(); }\n  .navbar-right { .pull-right(); }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n  margin-left: -@navbar-padding-horizontal;\n  margin-right: -@navbar-padding-horizontal;\n  padding: 10px @navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n  .box-shadow(@shadow);\n\n  // Mixin behavior for optimum display\n  .form-inline();\n\n  .form-group {\n    @media (max-width: @grid-float-breakpoint-max) {\n      margin-bottom: 5px;\n    }\n  }\n\n  // Vertically center in expanded, horizontal navbar\n  .navbar-vertical-align(@input-height-base);\n\n  // Undo 100% width for pull classes\n  @media (min-width: @grid-float-breakpoint) {\n    width: auto;\n    border: 0;\n    margin-left: 0;\n    margin-right: 0;\n    padding-top: 0;\n    padding-bottom: 0;\n    .box-shadow(none);\n\n    // Outdent the form if last child to line up with content down the page\n    &.navbar-right:last-child {\n      margin-right: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n  .navbar-vertical-align(@input-height-base);\n\n  &.btn-sm {\n    .navbar-vertical-align(@input-height-small);\n  }\n  &.btn-xs {\n    .navbar-vertical-align(22);\n  }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n  .navbar-vertical-align(@line-height-computed);\n\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n    margin-left: @navbar-padding-horizontal;\n    margin-right: @navbar-padding-horizontal;\n\n    // Outdent the form if last child to line up with content down the page\n    &.navbar-right:last-child {\n      margin-right: 0;\n    }\n  }\n}\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n  background-color: @navbar-default-bg;\n  border-color: @navbar-default-border;\n\n  .navbar-brand {\n    color: @navbar-default-brand-color;\n    &:hover,\n    &:focus {\n      color: @navbar-default-brand-hover-color;\n      background-color: @navbar-default-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: @navbar-default-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: @navbar-default-link-color;\n\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-hover-color;\n        background-color: @navbar-default-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-active-color;\n        background-color: @navbar-default-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-disabled-color;\n        background-color: @navbar-default-link-disabled-bg;\n      }\n    }\n  }\n\n  .navbar-toggle {\n    border-color: @navbar-default-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: @navbar-default-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: @navbar-default-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: @navbar-default-border;\n  }\n\n  // Dropdown menu items\n  .navbar-nav {\n    // Remove background color from open dropdown\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: @navbar-default-link-active-bg;\n        color: @navbar-default-link-active-color;\n      }\n    }\n\n    @media (max-width: @grid-float-breakpoint-max) {\n      // Dropdowns get custom display when collapsed\n      .open .dropdown-menu {\n        > li > a {\n          color: @navbar-default-link-color;\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-hover-color;\n            background-color: @navbar-default-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-active-color;\n            background-color: @navbar-default-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-disabled-color;\n            background-color: @navbar-default-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n\n  // Links in navbars\n  //\n  // Add a class to ensure links outside the navbar nav are colored correctly.\n\n  .navbar-link {\n    color: @navbar-default-link-color;\n    &:hover {\n      color: @navbar-default-link-hover-color;\n    }\n  }\n\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n  background-color: @navbar-inverse-bg;\n  border-color: @navbar-inverse-border;\n\n  .navbar-brand {\n    color: @navbar-inverse-brand-color;\n    &:hover,\n    &:focus {\n      color: @navbar-inverse-brand-hover-color;\n      background-color: @navbar-inverse-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: @navbar-inverse-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: @navbar-inverse-link-color;\n\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-hover-color;\n        background-color: @navbar-inverse-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-active-color;\n        background-color: @navbar-inverse-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-disabled-color;\n        background-color: @navbar-inverse-link-disabled-bg;\n      }\n    }\n  }\n\n  // Darken the responsive nav toggle\n  .navbar-toggle {\n    border-color: @navbar-inverse-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: @navbar-inverse-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: @navbar-inverse-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: darken(@navbar-inverse-bg, 7%);\n  }\n\n  // Dropdowns\n  .navbar-nav {\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: @navbar-inverse-link-active-bg;\n        color: @navbar-inverse-link-active-color;\n      }\n    }\n\n    @media (max-width: @grid-float-breakpoint-max) {\n      // Dropdowns get custom display\n      .open .dropdown-menu {\n        > .dropdown-header {\n          border-color: @navbar-inverse-border;\n        }\n        .divider {\n          background-color: @navbar-inverse-border;\n        }\n        > li > a {\n          color: @navbar-inverse-link-color;\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-hover-color;\n            background-color: @navbar-inverse-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-active-color;\n            background-color: @navbar-inverse-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-disabled-color;\n            background-color: @navbar-inverse-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n  .navbar-link {\n    color: @navbar-inverse-link-color;\n    &:hover {\n      color: @navbar-inverse-link-hover-color;\n    }\n  }\n\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n  .clearfix();\n}\n.center-block {\n  .center-block();\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n  position: fixed;\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n  padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n  margin-bottom: @line-height-computed;\n  list-style: none;\n  background-color: @breadcrumb-bg;\n  border-radius: @border-radius-base;\n\n  > li {\n    display: inline-block;\n\n    + li:before {\n      content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n      padding: 0 5px;\n      color: @breadcrumb-color;\n    }\n  }\n\n  > .active {\n    color: @breadcrumb-active-color;\n  }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: @line-height-computed 0;\n  border-radius: @border-radius-base;\n\n  > li {\n    display: inline; // Remove list-style and block-level defaults\n    > a,\n    > span {\n      position: relative;\n      float: left; // Collapse white-space\n      padding: @padding-base-vertical @padding-base-horizontal;\n      line-height: @line-height-base;\n      text-decoration: none;\n      color: @pagination-color;\n      background-color: @pagination-bg;\n      border: 1px solid @pagination-border;\n      margin-left: -1px;\n    }\n    &:first-child {\n      > a,\n      > span {\n        margin-left: 0;\n        .border-left-radius(@border-radius-base);\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        .border-right-radius(@border-radius-base);\n      }\n    }\n  }\n\n  > li > a,\n  > li > span {\n    &:hover,\n    &:focus {\n      color: @pagination-hover-color;\n      background-color: @pagination-hover-bg;\n      border-color: @pagination-hover-border;\n    }\n  }\n\n  > .active > a,\n  > .active > span {\n    &,\n    &:hover,\n    &:focus {\n      z-index: 2;\n      color: @pagination-active-color;\n      background-color: @pagination-active-bg;\n      border-color: @pagination-active-border;\n      cursor: default;\n    }\n  }\n\n  > .disabled {\n    > span,\n    > span:hover,\n    > span:focus,\n    > a,\n    > a:hover,\n    > a:focus {\n      color: @pagination-disabled-color;\n      background-color: @pagination-disabled-bg;\n      border-color: @pagination-disabled-border;\n      cursor: not-allowed;\n    }\n  }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n  .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n  .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small);\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n  padding-left: 0;\n  margin: @line-height-computed 0;\n  list-style: none;\n  text-align: center;\n  &:extend(.clearfix all);\n  li {\n    display: inline;\n    > a,\n    > span {\n      display: inline-block;\n      padding: 5px 14px;\n      background-color: @pager-bg;\n      border: 1px solid @pager-border;\n      border-radius: @pager-border-radius;\n    }\n\n    > a:hover,\n    > a:focus {\n      text-decoration: none;\n      background-color: @pager-hover-bg;\n    }\n  }\n\n  .next {\n    > a,\n    > span {\n      float: right;\n    }\n  }\n\n  .previous {\n    > a,\n    > span {\n      float: left;\n    }\n  }\n\n  .disabled {\n    > a,\n    > a:hover,\n    > a:focus,\n    > span {\n      color: @pager-disabled-color;\n      background-color: @pager-bg;\n      cursor: not-allowed;\n    }\n  }\n\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: @label-color;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n\n  // Add hover effects, but only for links\n  &[href] {\n    &:hover,\n    &:focus {\n      color: @label-link-hover-color;\n      text-decoration: none;\n      cursor: pointer;\n    }\n  }\n\n  // Empty labels collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for labels in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n  .label-variant(@label-default-bg);\n}\n\n.label-primary {\n  .label-variant(@label-primary-bg);\n}\n\n.label-success {\n  .label-variant(@label-success-bg);\n}\n\n.label-info {\n  .label-variant(@label-info-bg);\n}\n\n.label-warning {\n  .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n  .label-variant(@label-danger-bg);\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base classes\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: @font-size-small;\n  font-weight: @badge-font-weight;\n  color: @badge-color;\n  line-height: @badge-line-height;\n  vertical-align: baseline;\n  white-space: nowrap;\n  text-align: center;\n  background-color: @badge-bg;\n  border-radius: @badge-border-radius;\n\n  // Empty badges collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n\n  // Quick fix for badges in buttons\n  .btn & {\n    position: relative;\n    top: -1px;\n  }\n  .btn-xs & {\n    top: 0;\n    padding: 1px 5px;\n  }\n}\n\n// Hover state, but only for links\na.badge {\n  &:hover,\n  &:focus {\n    color: @badge-link-hover-color;\n    text-decoration: none;\n    cursor: pointer;\n  }\n}\n\n// Account for counters in navs\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: @badge-active-color;\n  background-color: @badge-active-bg;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n  padding: @jumbotron-padding;\n  margin-bottom: @jumbotron-padding;\n  color: @jumbotron-color;\n  background-color: @jumbotron-bg;\n\n  h1,\n  .h1 {\n    color: @jumbotron-heading-color;\n  }\n  p {\n    margin-bottom: (@jumbotron-padding / 2);\n    font-size: @jumbotron-font-size;\n    font-weight: 200;\n  }\n\n  .container & {\n    border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n  }\n\n  .container {\n    max-width: 100%;\n  }\n\n  @media screen and (min-width: @screen-sm-min) {\n    padding-top:    (@jumbotron-padding * 1.6);\n    padding-bottom: (@jumbotron-padding * 1.6);\n\n    .container & {\n      padding-left:  (@jumbotron-padding * 2);\n      padding-right: (@jumbotron-padding * 2);\n    }\n\n    h1,\n    .h1 {\n      font-size: (@font-size-base * 4.5);\n    }\n  }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n  padding: @alert-padding;\n  margin-bottom: @line-height-computed;\n  border: 1px solid transparent;\n  border-radius: @alert-border-radius;\n\n  // Headings for larger alerts\n  h4 {\n    margin-top: 0;\n    // Specified for the h4 to prevent conflicts of changing @headings-color\n    color: inherit;\n  }\n  // Provide class for links that match alerts\n  .alert-link {\n    font-weight: @alert-link-font-weight;\n  }\n\n  // Improve alignment and spacing of inner content\n  > p,\n  > ul {\n    margin-bottom: 0;\n  }\n  > p + p {\n    margin-top: 5px;\n  }\n}\n\n// Dismissable alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable {\n padding-right: (@alert-padding + 20);\n\n  // Adjust close link position\n  .close {\n    position: relative;\n    top: -2px;\n    right: -21px;\n    color: inherit;\n  }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n  .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n.alert-info {\n  .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n.alert-warning {\n  .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n.alert-danger {\n  .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n  overflow: hidden;\n  height: @line-height-computed;\n  margin-bottom: @line-height-computed;\n  background-color: @progress-bg;\n  border-radius: @border-radius-base;\n  .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: @font-size-small;\n  line-height: @line-height-computed;\n  color: @progress-bar-color;\n  text-align: center;\n  background-color: @progress-bar-bg;\n  .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n  .transition(width .6s ease);\n}\n\n// Striped bars\n.progress-striped .progress-bar {\n  #gradient > .striped();\n  background-size: 40px 40px;\n}\n\n// Call animation for the active one\n.progress.active .progress-bar {\n  .animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n  .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n  .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n  .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n  .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Media objects\n// Source: http://stubbornella.org/content/?p=497\n// --------------------------------------------------\n\n\n// Common styles\n// -------------------------\n\n// Clear the floats\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n\n// Proper spacing between instances of .media\n.media,\n.media .media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n\n// For images and videos, set to block\n.media-object {\n  display: block;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n  margin: 0 0 5px;\n}\n\n\n// Media image alignment\n// -------------------------\n\n.media {\n  > .pull-left {\n    margin-right: 10px;\n  }\n  > .pull-right {\n    margin-left: 10px;\n  }\n}\n\n\n// Media list variation\n// -------------------------\n\n// Undo default ul/ol styles\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on