From 120d76f7f0d2fe5b444d17ddb552d10090b52377 Mon Sep 17 00:00:00 2001 From: Michael Wood Date: Mon, 23 Sep 2024 18:32:52 +0100 Subject: [PATCH 01/27] WIP --- 360-ds | 2 +- .../static/dataexplore/css/bootstrap-360.css | 5 - cove/cove_360/static/dataexplore/css/main.css | 435 ++++++++- .../{ => images}/360-giving-logo.svg | 0 .../dataexplore/images/360insights-color.svg | 1 - .../dataexplore/images/linkedin-logo.svg | 40 + .../static/dataexplore/js/tab-switcher.js | 49 + cove/cove_360/templates/cove_360/500.html | 25 + .../cove_360/additional_codelist_values.html | 32 + .../cove_360/additional_fields_table.html | 13 + .../cove_360/additional_fields_table_all.html | 79 ++ cove/cove_360/templates/cove_360/base.html | 177 ++-- .../templates/cove_360/common_errors.html | 10 +- .../{ => components}/cookie_consent.html | 2 +- .../cove_360/components/explore/accuracy.html | 91 ++ .../cove_360/components/explore/summary.html | 205 +++++ .../components/explore/usefulness.html | 94 ++ .../cove_360/components/explore/validity.html | 103 +++ .../cove_360/components/explore_checking.html | 112 +++ .../components/explore_publishing.html | 116 +++ .../templates/cove_360/components/footer.html | 77 ++ .../templates/cove_360/data_loading.html | 88 +- cove/cove_360/templates/cove_360/error.html | 30 + .../templates/cove_360/error_extra.html | 2 + cove/cove_360/templates/cove_360/explore.html | 834 +----------------- cove/cove_360/templates/cove_360/footer.html | 89 -- cove/cove_360/templates/cove_360/home.html | 65 ++ cove/cove_360/templates/cove_360/input.html | 183 ++-- .../templates/cove_360/input_old.html | 42 + .../templates/cove_360/modal_errors.html | 68 ++ .../templates/cove_360/modal_list.html | 15 + .../templates/cove_360/more_info.html | 12 - .../templates/cove_360/page_header.html | 38 + .../cove_360/publisher_not_found.html | 43 +- .../templates/cove_360/publishing.html | 27 + cove/cove_360/templates/cove_360/stats.html | 35 + cove/cove_360/templates/cove_360/terms.html | 31 + .../templates/cove_360/terms_conditions.html | 17 + .../cove_360/terms_conditions_intro.html | 22 + .../templates/cove_360/terms_cookies.html | 37 + .../cove_360/terms_cookies_link_matmo.html | 1 + .../cove_360/terms_cookies_links.html | 4 + .../cove_360/terms_cookies_we_use.html | 5 + .../cove_360/terms_data_deleting.html | 9 + .../cove_360/terms_data_uploaded.html | 10 + .../templates/cove_360/terms_disclaimer.html | 6 + .../templates/cove_360/terms_links.html | 3 + .../templates/cove_360/terms_privacy.html | 22 + .../cove_360/terms_privacy_intro.html | 18 + .../templates/cove_360/terms_security.html | 3 + ...tracker_data_controller_international.html | 0 .../cove_360/terms_tracker_matmo.html | 23 + .../terms_tracker_no_international.html | 1 + .../cove_360/terms_tracker_sentry.html | 19 + .../cove_360/terms_tracker_server.html | 16 + .../templates/cove_360/terms_trackers.html | 11 + .../templates/cove_360/validation_table.html | 16 +- cove/cove_360/views.py | 34 +- cove/cove_project/urls.py | 4 +- lib360dataquality/cove/threesixtygiving.py | 10 + 60 files changed, 2286 insertions(+), 1275 deletions(-) delete mode 100644 cove/cove_360/static/dataexplore/css/bootstrap-360.css rename cove/cove_360/static/dataexplore/{ => images}/360-giving-logo.svg (100%) delete mode 100644 cove/cove_360/static/dataexplore/images/360insights-color.svg create mode 100644 cove/cove_360/static/dataexplore/images/linkedin-logo.svg create mode 100644 cove/cove_360/static/dataexplore/js/tab-switcher.js create mode 100644 cove/cove_360/templates/cove_360/500.html create mode 100644 cove/cove_360/templates/cove_360/additional_codelist_values.html create mode 100644 cove/cove_360/templates/cove_360/additional_fields_table.html create mode 100644 cove/cove_360/templates/cove_360/additional_fields_table_all.html rename cove/cove_360/templates/cove_360/{ => components}/cookie_consent.html (96%) create mode 100644 cove/cove_360/templates/cove_360/components/explore/accuracy.html create mode 100644 cove/cove_360/templates/cove_360/components/explore/summary.html create mode 100644 cove/cove_360/templates/cove_360/components/explore/usefulness.html create mode 100644 cove/cove_360/templates/cove_360/components/explore/validity.html create mode 100644 cove/cove_360/templates/cove_360/components/explore_checking.html create mode 100644 cove/cove_360/templates/cove_360/components/explore_publishing.html create mode 100644 cove/cove_360/templates/cove_360/components/footer.html create mode 100644 cove/cove_360/templates/cove_360/error.html create mode 100644 cove/cove_360/templates/cove_360/error_extra.html delete mode 100644 cove/cove_360/templates/cove_360/footer.html create mode 100644 cove/cove_360/templates/cove_360/home.html create mode 100644 cove/cove_360/templates/cove_360/input_old.html create mode 100644 cove/cove_360/templates/cove_360/modal_errors.html create mode 100644 cove/cove_360/templates/cove_360/modal_list.html create mode 100644 cove/cove_360/templates/cove_360/page_header.html create mode 100644 cove/cove_360/templates/cove_360/publishing.html create mode 100644 cove/cove_360/templates/cove_360/stats.html create mode 100644 cove/cove_360/templates/cove_360/terms.html create mode 100644 cove/cove_360/templates/cove_360/terms_conditions.html create mode 100644 cove/cove_360/templates/cove_360/terms_conditions_intro.html create mode 100644 cove/cove_360/templates/cove_360/terms_cookies.html create mode 100644 cove/cove_360/templates/cove_360/terms_cookies_link_matmo.html create mode 100644 cove/cove_360/templates/cove_360/terms_cookies_links.html create mode 100644 cove/cove_360/templates/cove_360/terms_cookies_we_use.html create mode 100644 cove/cove_360/templates/cove_360/terms_data_deleting.html create mode 100644 cove/cove_360/templates/cove_360/terms_data_uploaded.html create mode 100644 cove/cove_360/templates/cove_360/terms_disclaimer.html create mode 100644 cove/cove_360/templates/cove_360/terms_links.html create mode 100644 cove/cove_360/templates/cove_360/terms_privacy.html create mode 100644 cove/cove_360/templates/cove_360/terms_privacy_intro.html create mode 100644 cove/cove_360/templates/cove_360/terms_security.html create mode 100644 cove/cove_360/templates/cove_360/terms_tracker_data_controller_international.html create mode 100644 cove/cove_360/templates/cove_360/terms_tracker_matmo.html create mode 100644 cove/cove_360/templates/cove_360/terms_tracker_no_international.html create mode 100644 cove/cove_360/templates/cove_360/terms_tracker_sentry.html create mode 100644 cove/cove_360/templates/cove_360/terms_tracker_server.html create mode 100644 cove/cove_360/templates/cove_360/terms_trackers.html diff --git a/360-ds b/360-ds index de307c8..41fcb85 160000 --- a/360-ds +++ b/360-ds @@ -1 +1 @@ -Subproject commit de307c87b0eeba4d5ab8f673783f0e73b5ff613c +Subproject commit 41fcb85bb48b9f153928a4ebffc55a0d1f2b4ef9 diff --git a/cove/cove_360/static/dataexplore/css/bootstrap-360.css b/cove/cove_360/static/dataexplore/css/bootstrap-360.css deleted file mode 100644 index 3962807..0000000 --- a/cove/cove_360/static/dataexplore/css/bootstrap-360.css +++ /dev/null @@ -1,5 +0,0 @@ -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */@import url("https://fonts.googleapis.com/css?family=Lato:400,700,400italic");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{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;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;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/bootstrap/glyphicons-halflings-regular.eot");src:url("../fonts/bootstrap/glyphicons-halflings-regular.eot?#iefix") format("embedded-opentype"),url("../fonts/bootstrap/glyphicons-halflings-regular.woff2") format("woff2"),url("../fonts/bootstrap/glyphicons-halflings-regular.woff") format("woff"),url("../fonts/bootstrap/glyphicons-halflings-regular.ttf") format("truetype"),url("../fonts/bootstrap/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:"\002a"}.glyphicon-plus:before{content:"\002b"}.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:"Lato","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:15px;line-height:1.42857;color:#2C3E50;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#2e666b;text-decoration:none}a:hover,a:focus{color:#2e666b;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857;background-color:#fff;border:1px solid #ecf0f1;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}.img-circle{border-radius:50%}hr{margin-top:21px;margin-bottom:21px;border:0;border-top:1px solid #ecf0f1}.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:"Assistant",sans-serif;font-weight:100;line-height:1.1;color:inherit}h1 small,h1 .small,h2 small,h2 .small,h3 small,h3 .small,h4 small,h4 .small,h5 small,h5 .small,h6 small,h6 .small,.h1 small,.h1 .small,.h2 small,.h2 .small,.h3 small,.h3 .small,.h4 small,.h4 .small,.h5 small,.h5 .small,.h6 small,.h6 .small{font-weight:normal;line-height:1;color:#7b8a8b}h1,.h1,h2,.h2,h3,.h3{margin-top:21px;margin-bottom:10.5px}h1 small,h1 .small,.h1 small,.h1 .small,h2 small,h2 .small,.h2 small,.h2 .small,h3 small,h3 .small,.h3 small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10.5px;margin-bottom:10.5px}h4 small,h4 .small,.h4 small,.h4 .small,h5 small,h5 .small,.h5 small,.h5 .small,h6 small,h6 .small,.h6 small,.h6 .small{font-size:75%}h1,.h1{font-size:39px}h2,.h2{font-size:32px}h3,.h3{font-size:26px}h4,.h4{font-size:19px}h5,.h5{font-size:15px}h6,.h6{font-size:13px}p{margin:0 0 10.5px}.lead{margin-bottom:21px;font-size:17px;font-weight:300;line-height:1.4}@media (min-width: 768px){.lead{font-size:22.5px}}small,.small{font-size:100%}mark,.mark{background-color:#F39C12;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,.initialism{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#b4bcc2}.text-primary{color:#2C3E50}a.text-primary:hover,a.text-primary:focus{color:#1a252f}.text-success{color:#fff}a.text-success:hover,a.text-success:focus{color:#e6e6e6}.text-info{color:#fff}a.text-info:hover,a.text-info:focus{color:#e6e6e6}.text-warning{color:#fff}a.text-warning:hover,a.text-warning:focus{color:#e6e6e6}.text-danger{color:#fff}a.text-danger:hover,a.text-danger:focus{color:#e6e6e6}.bg-primary{color:#fff}.bg-primary{background-color:#2C3E50}a.bg-primary:hover,a.bg-primary:focus{background-color:#1a252f}.bg-success{background-color:#2e666b}a.bg-success:hover,a.bg-success:focus{background-color:#1f4447}.bg-info{background-color:#ADADAD}a.bg-info:hover,a.bg-info:focus{background-color:#949494}.bg-warning{background-color:#F39C12}a.bg-warning:hover,a.bg-warning:focus{background-color:#c87f0a}.bg-danger{background-color:#E74C3C}a.bg-danger:hover,a.bg-danger:focus{background-color:#d62c1a}.page-header{padding-bottom:9.5px;margin:42px 0 21px;border-bottom:1px solid rgba(0,0,0,0)}ul,ol{margin-top:0;margin-bottom:10.5px}ul ul,ul ol,ol ul,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:21px}dt,dd{line-height:1.42857}dt{font-weight:bold}dd{margin-left:0}.dl-horizontal dd:before,.dl-horizontal dd:after{content:" ";display:table}.dl-horizontal dd:after{clear:both}@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 #b4bcc2}.initialism{font-size:90%}blockquote{padding:10.5px 21px;margin:0 0 21px;font-size:18.75px;border-left:5px solid #ecf0f1}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.42857;color:#b4bcc2}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 #ecf0f1;border-left:0;text-align:right}.blockquote-reverse footer:before,.blockquote-reverse small:before,.blockquote-reverse .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,.blockquote-reverse small:after,.blockquote-reverse .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:21px;font-style:normal;line-height:1.42857}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;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;box-shadow:none}pre{display:block;padding:10px;margin:0 0 10.5px;font-size:14px;line-height:1.42857;word-break:break-all;word-wrap:break-word;color:#7b8a8b;background-color:#ecf0f1;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}.container:before,.container:after{content:" ";display:table}.container:after{clear:both}@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}.container-fluid:before,.container-fluid:after{content:" ";display:table}.container-fluid:after{clear:both}.row{margin-left:-15px;margin-right:-15px}.row:before,.row:after{content:" ";display:table}.row:after{clear:both}.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-1{width:8.33333%}.col-xs-2{width:16.66667%}.col-xs-3{width:25%}.col-xs-4{width:33.33333%}.col-xs-5{width:41.66667%}.col-xs-6{width:50%}.col-xs-7{width:58.33333%}.col-xs-8{width:66.66667%}.col-xs-9{width:75%}.col-xs-10{width:83.33333%}.col-xs-11{width:91.66667%}.col-xs-12{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:8.33333%}.col-xs-pull-2{right:16.66667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.33333%}.col-xs-pull-5{right:41.66667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.33333%}.col-xs-pull-8{right:66.66667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.33333%}.col-xs-pull-11{right:91.66667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:8.33333%}.col-xs-push-2{left:16.66667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.33333%}.col-xs-push-5{left:41.66667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.33333%}.col-xs-push-8{left:66.66667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.33333%}.col-xs-push-11{left:91.66667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0%}.col-xs-offset-1{margin-left:8.33333%}.col-xs-offset-2{margin-left:16.66667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.33333%}.col-xs-offset-5{margin-left:41.66667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.33333%}.col-xs-offset-8{margin-left:66.66667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.33333%}.col-xs-offset-11{margin-left:91.66667%}.col-xs-offset-12{margin-left:100%}@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-1{width:8.33333%}.col-sm-2{width:16.66667%}.col-sm-3{width:25%}.col-sm-4{width:33.33333%}.col-sm-5{width:41.66667%}.col-sm-6{width:50%}.col-sm-7{width:58.33333%}.col-sm-8{width:66.66667%}.col-sm-9{width:75%}.col-sm-10{width:83.33333%}.col-sm-11{width:91.66667%}.col-sm-12{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:8.33333%}.col-sm-pull-2{right:16.66667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333%}.col-sm-pull-5{right:41.66667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.33333%}.col-sm-pull-8{right:66.66667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333%}.col-sm-pull-11{right:91.66667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:8.33333%}.col-sm-push-2{left:16.66667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333%}.col-sm-push-5{left:41.66667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.33333%}.col-sm-push-8{left:66.66667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333%}.col-sm-push-11{left:91.66667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0%}.col-sm-offset-1{margin-left:8.33333%}.col-sm-offset-2{margin-left:16.66667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333%}.col-sm-offset-5{margin-left:41.66667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.33333%}.col-sm-offset-8{margin-left:66.66667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333%}.col-sm-offset-11{margin-left:91.66667%}.col-sm-offset-12{margin-left:100%}}@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-1{width:8.33333%}.col-md-2{width:16.66667%}.col-md-3{width:25%}.col-md-4{width:33.33333%}.col-md-5{width:41.66667%}.col-md-6{width:50%}.col-md-7{width:58.33333%}.col-md-8{width:66.66667%}.col-md-9{width:75%}.col-md-10{width:83.33333%}.col-md-11{width:91.66667%}.col-md-12{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.33333%}.col-md-pull-2{right:16.66667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333%}.col-md-pull-5{right:41.66667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.33333%}.col-md-pull-8{right:66.66667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333%}.col-md-pull-11{right:91.66667%}.col-md-pull-12{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.33333%}.col-md-push-2{left:16.66667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333%}.col-md-push-5{left:41.66667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.33333%}.col-md-push-8{left:66.66667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333%}.col-md-push-11{left:91.66667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0%}.col-md-offset-1{margin-left:8.33333%}.col-md-offset-2{margin-left:16.66667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333%}.col-md-offset-5{margin-left:41.66667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.33333%}.col-md-offset-8{margin-left:66.66667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333%}.col-md-offset-11{margin-left:91.66667%}.col-md-offset-12{margin-left:100%}}@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-1{width:8.33333%}.col-lg-2{width:16.66667%}.col-lg-3{width:25%}.col-lg-4{width:33.33333%}.col-lg-5{width:41.66667%}.col-lg-6{width:50%}.col-lg-7{width:58.33333%}.col-lg-8{width:66.66667%}.col-lg-9{width:75%}.col-lg-10{width:83.33333%}.col-lg-11{width:91.66667%}.col-lg-12{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.33333%}.col-lg-pull-2{right:16.66667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333%}.col-lg-pull-5{right:41.66667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.33333%}.col-lg-pull-8{right:66.66667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333%}.col-lg-pull-11{right:91.66667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.33333%}.col-lg-push-2{left:16.66667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333%}.col-lg-push-5{left:41.66667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.33333%}.col-lg-push-8{left:66.66667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333%}.col-lg-push-11{left:91.66667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0%}.col-lg-offset-1{margin-left:8.33333%}.col-lg-offset-2{margin-left:16.66667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333%}.col-lg-offset-5{margin-left:41.66667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.33333%}.col-lg-offset-8{margin-left:66.66667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333%}.col-lg-offset-11{margin-left:91.66667%}.col-lg-offset-12{margin-left:100%}}table{background-color:rgba(0,0,0,0)}caption{padding-top:8px;padding-bottom:8px;color:#b4bcc2;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:21px}.table>thead>tr>th,.table>thead>tr>td,.table>tbody>tr>th,.table>tbody>tr>td,.table>tfoot>tr>th,.table>tfoot>tr>td{padding:8px;line-height:1.42857;vertical-align:top;border-top:1px solid #ecf0f1}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ecf0f1}.table>caption+thead>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>th,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ecf0f1}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ecf0f1}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>tfoot>tr>td{border:1px solid #ecf0f1}.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:#ecf0f1}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>thead>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th{background-color:#ecf0f1}.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:#dde4e6}.table>thead>tr>td.success,.table>thead>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th{background-color:#2e666b}.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:#265559}.table>thead>tr>td.info,.table>thead>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th{background-color:#ADADAD}.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:#a0a0a0}.table>thead>tr>td.warning,.table>thead>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th{background-color:#F39C12}.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:#e08e0b}.table>thead>tr>td.danger,.table>thead>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th{background-color:#E74C3C}.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:#e43725}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width: 767px){.table-responsive{width:100%;margin-bottom:15.75px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ecf0f1}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>th,.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>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th: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>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th: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>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.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:21px;font-size:22.5px;line-height:inherit;color:#2C3E50;border:0;border-bottom:1px solid rgba(0,0,0,0)}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:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:11px;font-size:15px;line-height:1.42857;color:#2C3E50}.form-control{display:block;width:100%;height:45px;padding:10px 15px;font-size:15px;line-height:1.42857;color:#2C3E50;background-color:#fff;background-image:none;border:1px solid #dce4ec;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 0.15s,box-shadow ease-in-out 0.15s;-o-transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s}.form-control:focus{border-color:#2C3E50;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(44,62,80,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(44,62,80,0.6)}.form-control::-moz-placeholder{color:#acb6c0;opacity:1}.form-control:-ms-input-placeholder{color:#acb6c0}.form-control::-webkit-input-placeholder{color:#acb6c0}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#ecf0f1;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:45px}input[type="date"].input-sm,.input-group-sm>[type="date"].form-control,.input-group-sm>[type="date"].input-group-addon,.input-group-sm>.input-group-btn>[type="date"].btn,.input-group-sm input[type="date"],input[type="time"].input-sm,.input-group-sm>[type="time"].form-control,.input-group-sm>[type="time"].input-group-addon,.input-group-sm>.input-group-btn>[type="time"].btn,.input-group-sm input[type="time"],input[type="datetime-local"].input-sm,.input-group-sm>[type="datetime-local"].form-control,.input-group-sm>[type="datetime-local"].input-group-addon,.input-group-sm>.input-group-btn>[type="datetime-local"].btn,.input-group-sm input[type="datetime-local"],input[type="month"].input-sm,.input-group-sm>[type="month"].form-control,.input-group-sm>[type="month"].input-group-addon,.input-group-sm>.input-group-btn>[type="month"].btn,.input-group-sm input[type="month"]{line-height:38px}input[type="date"].input-lg,.input-group-lg>[type="date"].form-control,.input-group-lg>[type="date"].input-group-addon,.input-group-lg>.input-group-btn>[type="date"].btn,.input-group-lg input[type="date"],input[type="time"].input-lg,.input-group-lg>[type="time"].form-control,.input-group-lg>[type="time"].input-group-addon,.input-group-lg>.input-group-btn>[type="time"].btn,.input-group-lg input[type="time"],input[type="datetime-local"].input-lg,.input-group-lg>[type="datetime-local"].form-control,.input-group-lg>[type="datetime-local"].input-group-addon,.input-group-lg>.input-group-btn>[type="datetime-local"].btn,.input-group-lg input[type="datetime-local"],input[type="month"].input-lg,.input-group-lg>[type="month"].form-control,.input-group-lg>[type="month"].input-group-addon,.input-group-lg>.input-group-btn>[type="month"].btn,.input-group-lg input[type="month"]{line-height:66px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:21px;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="radio"].disabled,fieldset[disabled] input[type="radio"],input[type="checkbox"][disabled],input[type="checkbox"].disabled,fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,fieldset[disabled] .radio-inline,.checkbox-inline.disabled,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,fieldset[disabled] .radio label,.checkbox.disabled label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:11px;padding-bottom:11px;margin-bottom:0;min-height:36px}.form-control-static.input-lg,.input-group-lg>.form-control-static.form-control,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.form-control-static.input-sm,.input-group-sm>.form-control-static.form-control,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn{padding-left:0;padding-right:0}.input-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:38px;padding:6px 9px;font-size:15px;line-height:1.5;border-radius:3px}select.input-sm,.input-group-sm>select.form-control,.input-group-sm>select.input-group-addon,.input-group-sm>.input-group-btn>select.btn{height:38px;line-height:38px}textarea.input-sm,.input-group-sm>textarea.form-control,.input-group-sm>textarea.input-group-addon,.input-group-sm>.input-group-btn>textarea.btn,select[multiple].input-sm,.input-group-sm>[multiple].form-control,.input-group-sm>[multiple].input-group-addon,.input-group-sm>.input-group-btn>[multiple].btn{height:auto}.form-group-sm .form-control{height:38px;padding:6px 9px;font-size:15px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:38px;line-height:38px}.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control{height:auto}.form-group-sm .form-control-static{height:38px;min-height:36px;padding:7px 9px;font-size:15px;line-height:1.5}.input-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:66px;padding:18px 27px;font-size:19px;line-height:1.33333;border-radius:6px}select.input-lg,.input-group-lg>select.form-control,.input-group-lg>select.input-group-addon,.input-group-lg>.input-group-btn>select.btn{height:66px;line-height:66px}textarea.input-lg,.input-group-lg>textarea.form-control,.input-group-lg>textarea.input-group-addon,.input-group-lg>.input-group-btn>textarea.btn,select[multiple].input-lg,.input-group-lg>[multiple].form-control,.input-group-lg>[multiple].input-group-addon,.input-group-lg>.input-group-btn>[multiple].btn{height:auto}.form-group-lg .form-control{height:66px;padding:18px 27px;font-size:19px;line-height:1.33333;border-radius:6px}.form-group-lg select.form-control{height:66px;line-height:66px}.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control{height:auto}.form-group-lg .form-control-static{height:66px;min-height:40px;padding:19px 27px;font-size:19px;line-height:1.33333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:56.25px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:45px;height:45px;line-height:45px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg>.form-control+.form-control-feedback,.input-group-lg>.input-group-addon+.form-control-feedback,.input-group-lg>.input-group-btn>.btn+.form-control-feedback,.input-group-lg+.form-control-feedback,.form-group-lg .form-control+.form-control-feedback{width:66px;height:66px;line-height:66px}.input-sm+.form-control-feedback,.input-group-sm>.form-control+.form-control-feedback,.input-group-sm>.input-group-addon+.form-control-feedback,.input-group-sm>.input-group-btn>.btn+.form-control-feedback,.input-group-sm+.form-control-feedback,.form-group-sm .form-control+.form-control-feedback{width:38px;height:38px;line-height:38px}.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:#fff}.has-success .form-control{border-color:#fff;-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:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.has-success .input-group-addon{color:#fff;border-color:#fff;background-color:#2e666b}.has-success .form-control-feedback{color:#fff}.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:#fff}.has-warning .form-control{border-color:#fff;-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:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.has-warning .input-group-addon{color:#fff;border-color:#fff;background-color:#F39C12}.has-warning .form-control-feedback{color:#fff}.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:#fff}.has-error .form-control{border-color:#fff;-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:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.has-error .input-group-addon{color:#fff;border-color:#fff;background-color:#E74C3C}.has-error .form-control-feedback{color:#fff}.has-feedback label~.form-control-feedback{top:26px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#597ea2}@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:11px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:32px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{content:" ";display:table}.form-horizontal .form-group:after{clear:both}@media (min-width: 768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:11px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width: 768px){.form-horizontal .form-group-lg .control-label{padding-top:19px;font-size:19px}}@media (min-width: 768px){.form-horizontal .form-group-sm .control-label{padding-top:7px;font-size:15px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:10px 15px;font-size:15px;line-height:1.42857;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn.focus,.btn:active:focus,.btn:active.focus,.btn.active:focus,.btn.active.focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#fff;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:#fff;background-color:#95a5a6;border-color:#95a5a6}.btn-default:focus,.btn-default.focus{color:#fff;background-color:#798d8f;border-color:#566566}.btn-default:hover{color:#fff;background-color:#798d8f;border-color:#74898a}.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{color:#fff;background-color:#798d8f;border-color:#74898a}.btn-default:active:hover,.btn-default:active:focus,.btn-default:active.focus,.btn-default.active:hover,.btn-default.active:focus,.btn-default.active.focus,.open>.btn-default.dropdown-toggle:hover,.open>.btn-default.dropdown-toggle:focus,.open>.btn-default.dropdown-toggle.focus{color:#fff;background-color:#687b7c;border-color:#566566}.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{background-image:none}.btn-default.disabled:hover,.btn-default.disabled:focus,.btn-default.disabled.focus,.btn-default[disabled]:hover,.btn-default[disabled]:focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default:hover,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default.focus{background-color:#95a5a6;border-color:#95a5a6}.btn-default .badge{color:#95a5a6;background-color:#fff}.btn-primary{color:#fff;background-color:#2C3E50;border-color:#2C3E50}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#1a252f;border-color:#000}.btn-primary:hover{color:#fff;background-color:#1a252f;border-color:#161f29}.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{color:#fff;background-color:#1a252f;border-color:#161f29}.btn-primary:active:hover,.btn-primary:active:focus,.btn-primary:active.focus,.btn-primary.active:hover,.btn-primary.active:focus,.btn-primary.active.focus,.open>.btn-primary.dropdown-toggle:hover,.open>.btn-primary.dropdown-toggle:focus,.open>.btn-primary.dropdown-toggle.focus{color:#fff;background-color:#0d1318;border-color:#000}.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{background-image:none}.btn-primary.disabled:hover,.btn-primary.disabled:focus,.btn-primary.disabled.focus,.btn-primary[disabled]:hover,.btn-primary[disabled]:focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary:hover,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary.focus{background-color:#2C3E50;border-color:#2C3E50}.btn-primary .badge{color:#2C3E50;background-color:#fff}.btn-success{color:#fff;background-color:#2e666b;border-color:#2e666b}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#1f4447;border-color:#081112}.btn-success:hover{color:#fff;background-color:#1f4447;border-color:#1c3d40}.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#1f4447;border-color:#1c3d40}.btn-success:active:hover,.btn-success:active:focus,.btn-success:active.focus,.btn-success.active:hover,.btn-success.active:focus,.btn-success.active.focus,.open>.btn-success.dropdown-toggle:hover,.open>.btn-success.dropdown-toggle:focus,.open>.btn-success.dropdown-toggle.focus{color:#fff;background-color:#142c2e;border-color:#081112}.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{background-image:none}.btn-success.disabled:hover,.btn-success.disabled:focus,.btn-success.disabled.focus,.btn-success[disabled]:hover,.btn-success[disabled]:focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success:hover,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success.focus{background-color:#2e666b;border-color:#2e666b}.btn-success .badge{color:#2e666b;background-color:#fff}.btn-info{color:#fff;background-color:#ADADAD;border-color:#ADADAD}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#949494;border-color:#6d6d6d}.btn-info:hover{color:#fff;background-color:#949494;border-color:#8e8e8e}.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#949494;border-color:#8e8e8e}.btn-info:active:hover,.btn-info:active:focus,.btn-info:active.focus,.btn-info.active:hover,.btn-info.active:focus,.btn-info.active.focus,.open>.btn-info.dropdown-toggle:hover,.open>.btn-info.dropdown-toggle:focus,.open>.btn-info.dropdown-toggle.focus{color:#fff;background-color:#828282;border-color:#6d6d6d}.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{background-image:none}.btn-info.disabled:hover,.btn-info.disabled:focus,.btn-info.disabled.focus,.btn-info[disabled]:hover,.btn-info[disabled]:focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info:hover,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info.focus{background-color:#ADADAD;border-color:#ADADAD}.btn-info .badge{color:#ADADAD;background-color:#fff}.btn-warning{color:#fff;background-color:#F39C12;border-color:#F39C12}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#c87f0a;border-color:#7f5006}.btn-warning:hover{color:#fff;background-color:#c87f0a;border-color:#be780a}.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#c87f0a;border-color:#be780a}.btn-warning:active:hover,.btn-warning:active:focus,.btn-warning:active.focus,.btn-warning.active:hover,.btn-warning.active:focus,.btn-warning.active.focus,.open>.btn-warning.dropdown-toggle:hover,.open>.btn-warning.dropdown-toggle:focus,.open>.btn-warning.dropdown-toggle.focus{color:#fff;background-color:#a66908;border-color:#7f5006}.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{background-image:none}.btn-warning.disabled:hover,.btn-warning.disabled:focus,.btn-warning.disabled.focus,.btn-warning[disabled]:hover,.btn-warning[disabled]:focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning:hover,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning.focus{background-color:#F39C12;border-color:#F39C12}.btn-warning .badge{color:#F39C12;background-color:#fff}.btn-danger{color:#fff;background-color:#E74C3C;border-color:#E74C3C}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#d62c1a;border-color:#921e12}.btn-danger:hover{color:#fff;background-color:#d62c1a;border-color:#cd2a19}.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#d62c1a;border-color:#cd2a19}.btn-danger:active:hover,.btn-danger:active:focus,.btn-danger:active.focus,.btn-danger.active:hover,.btn-danger.active:focus,.btn-danger.active.focus,.open>.btn-danger.dropdown-toggle:hover,.open>.btn-danger.dropdown-toggle:focus,.open>.btn-danger.dropdown-toggle.focus{color:#fff;background-color:#b62516;border-color:#921e12}.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{background-image:none}.btn-danger.disabled:hover,.btn-danger.disabled:focus,.btn-danger.disabled.focus,.btn-danger[disabled]:hover,.btn-danger[disabled]:focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger:hover,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger.focus{background-color:#E74C3C;border-color:#E74C3C}.btn-danger .badge{color:#E74C3C;background-color:#fff}.btn-link{color:#2e666b;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:#2e666b;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:hover,fieldset[disabled] .btn-link:focus{color:#b4bcc2;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:18px 27px;font-size:19px;line-height:1.33333;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:6px 9px;font-size:15px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:15px;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 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.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;transition-property:height,visibility;-webkit-transition-duration:0.35s;transition-duration:0.35s;-webkit-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:15px;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);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9.5px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857;color:#7b8a8b;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#fff;background-color:#2C3E50}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#2C3E50}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#b4bcc2}.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:15px;line-height:1.42857;color:#b4bcc2;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{right:0;left:auto}.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>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.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:before,.btn-toolbar:after{content:" ";display:table}.btn-toolbar:after{clear:both}.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,.btn-group-lg.btn-group>.btn+.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,.btn-group-lg>.btn .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret,.dropup .btn-group-lg>.btn .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:before,.btn-group-vertical>.btn-group:after{content:" ";display:table}.btn-group-vertical>.btn-group:after{clear:both}.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-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-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 input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[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 .form-control:focus{z-index:3}.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:10px 15px;font-size:15px;font-weight:normal;line-height:1;color:#2C3E50;text-align:center;background-color:#ecf0f1;border:1px solid #dce4ec;border-radius:4px}.input-group-addon.input-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:6px 9px;font-size:15px;border-radius:3px}.input-group-addon.input-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:18px 27px;font-size:19px;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:before,.nav:after{content:" ";display:table}.nav:after{clear:both}.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:#ecf0f1}.nav>li.disabled>a{color:#b4bcc2}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#b4bcc2;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#ecf0f1;border-color:#2e666b}.nav .nav-divider{height:1px;margin:9.5px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ecf0f1}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#ecf0f1 #ecf0f1 #ecf0f1}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#2C3E50;background-color:#fff;border:1px solid #ecf0f1;border-bottom-color:transparent;cursor:default}.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:#2C3E50}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified,.nav-tabs.nav-justified{width:100%}.nav-justified>li,.nav-tabs.nav-justified>li{float:none}.nav-justified>li>a,.nav-tabs.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,.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified,.nav-tabs.nav-justified{border-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ecf0f1}@media (min-width: 768px){.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ecf0f1;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs.nav-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:80px;margin-bottom:21px;border:1px solid transparent}.navbar:before,.navbar:after{content:" ";display:table}.navbar:after{clear:both}@media (min-width: 768px){.navbar{border-radius:0}}.navbar-header:before,.navbar-header:after{content:" ";display:table}.navbar-header:after{clear:both}@media (min-width: 768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse:before,.navbar-collapse:after{content:" ";display:table}.navbar-collapse:after{clear:both}.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}}.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>.navbar-collapse,.container-fluid>.navbar-header,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width: 768px){.container>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-header,.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:29.5px 15px;font-size:19px;line-height:21px;height:80px}.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:23px;margin-bottom:23px;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:14.75px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:21px}@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:21px}.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:29.5px;padding-bottom:29.5px}}.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:17.5px;margin-bottom:17.5px}@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:0;border-top-left-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:17.5px;margin-bottom:17.5px}.navbar-btn.btn-sm,.btn-group-sm>.navbar-btn.btn{margin-top:21px;margin-bottom:21px}.navbar-btn.btn-xs,.btn-group-xs>.navbar-btn.btn{margin-top:29px;margin-bottom:29px}.navbar-text{margin-top:29.5px;margin-bottom:29.5px}@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:#2C3E50;border-color:rgba(0,0,0,0)}.navbar-default .navbar-brand{color:#fff}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#2e666b;background-color:rgba(0,0,0,0)}.navbar-default .navbar-text{color:#fff}.navbar-default .navbar-nav>li>a{color:#fff}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#2e666b;background-color:rgba(0,0,0,0)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#fff;background-color:#1a252f}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:rgba(0,0,0,0)}.navbar-default .navbar-toggle{border-color:#1a252f}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#1a252f}.navbar-default .navbar-toggle .icon-bar{background-color:#fff}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:rgba(0,0,0,0)}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#1a252f;color:#fff}@media (max-width: 767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#fff}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#2e666b;background-color:rgba(0,0,0,0)}.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:#fff;background-color:#1a252f}.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:rgba(0,0,0,0)}}.navbar-default .navbar-link{color:#fff}.navbar-default .navbar-link:hover{color:#2e666b}.navbar-default .btn-link{color:#fff}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#2e666b}.navbar-default .btn-link[disabled]:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:hover,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#2e666b;border-color:rgba(0,0,0,0)}.navbar-inverse .navbar-brand{color:#fff}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#2C3E50;background-color:rgba(0,0,0,0)}.navbar-inverse .navbar-text{color:#fff}.navbar-inverse .navbar-nav>li>a{color:#fff}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#2C3E50;background-color:rgba(0,0,0,0)}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#265559}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#ccc;background-color:rgba(0,0,0,0)}.navbar-inverse .navbar-toggle{border-color:#1f4447}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#1f4447}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#234e52}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#265559;color:#fff}@media (max-width: 767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:rgba(0,0,0,0)}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:rgba(0,0,0,0)}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#fff}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#2C3E50;background-color:rgba(0,0,0,0)}.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:#265559}.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:#ccc;background-color:rgba(0,0,0,0)}}.navbar-inverse .navbar-link{color:#fff}.navbar-inverse .navbar-link:hover{color:#2C3E50}.navbar-inverse .btn-link{color:#fff}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#2C3E50}.navbar-inverse .btn-link[disabled]:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:hover,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#ccc}.breadcrumb{padding:8px 15px;margin-bottom:21px;list-style:none;background-color:#ecf0f1;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/ ";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#95a5a6}.pagination{display:inline-block;padding-left:0;margin:21px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:10px 15px;line-height:1.42857;text-decoration:none;color:#fff;background-color:#2e666b;border:1px solid rgba(0,0,0,0);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>a:focus,.pagination>li>span:hover,.pagination>li>span:focus{z-index:2;color:#fff;background-color:#173336;border-color:rgba(0,0,0,0)}.pagination>.active>a,.pagination>.active>a:hover,.pagination>.active>a:focus,.pagination>.active>span,.pagination>.active>span:hover,.pagination>.active>span:focus{z-index:3;color:#fff;background-color:#173336;border-color:rgba(0,0,0,0);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:#ecf0f1;background-color:#4599a1;border-color:rgba(0,0,0,0);cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:18px 27px;font-size:19px;line-height:1.33333}.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:6px 9px;font-size:15px;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:21px 0;list-style:none;text-align:center}.pager:before,.pager:after{content:" ";display:table}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#2e666b;border:1px solid rgba(0,0,0,0);border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#173336}.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:#fff;background-color:#2e666b;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}.label:empty{display:none}.btn .label{position:relative;top:-1px}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label-default{background-color:#95a5a6}.label-default[href]:hover,.label-default[href]:focus{background-color:#798d8f}.label-primary{background-color:#2C3E50}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#1a252f}.label-success{background-color:#2e666b}.label-success[href]:hover,.label-success[href]:focus{background-color:#1f4447}.label-info{background-color:#ADADAD}.label-info[href]:hover,.label-info[href]:focus{background-color:#949494}.label-warning{background-color:#F39C12}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#c87f0a}.label-danger{background-color:#E74C3C}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#d62c1a}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:15px;font-weight:bold;color:#fff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#2C3E50;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}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#2C3E50;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}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#ecf0f1}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:23px;font-weight:200}.jumbotron>hr{border-top-color:#cfd9db}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px;padding-left:15px;padding-right:15px}.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:68px}}.thumbnail{display:block;padding:4px;margin-bottom:21px;line-height:1.42857;background-color:#fff;border:1px solid #ecf0f1;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}.thumbnail>img,.thumbnail a>img{display:block;max-width:100%;height:auto;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px;color:#2C3E50}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#2e666b}.alert{padding:15px;margin-bottom:21px;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:#2e666b;border-color:#2e666b;color:#fff}.alert-success hr{border-top-color:#265559}.alert-success .alert-link{color:#e6e6e6}.alert-info{background-color:#ADADAD;border-color:#ADADAD;color:#fff}.alert-info hr{border-top-color:#a0a0a0}.alert-info .alert-link{color:#e6e6e6}.alert-warning{background-color:#F39C12;border-color:#F39C12;color:#fff}.alert-warning hr{border-top-color:#e08e0b}.alert-warning .alert-link{color:#e6e6e6}.alert-danger{background-color:#E74C3C;border-color:#E74C3C;color:#fff}.alert-danger hr{border-top-color:#e43725}.alert-danger .alert-link{color:#e6e6e6}@-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:21px;margin-bottom:21px;background-color:#ecf0f1;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:15px;line-height:21px;color:#fff;text-align:center;background-color:#2C3E50;-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}.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-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:#2e666b}.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:#ADADAD}.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:#F39C12}.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:#E74C3C}.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 #ecf0f1}.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,a.list-group-item:focus,button.list-group-item:hover,button.list-group-item:focus{text-decoration:none;color:#555;background-color:#ecf0f1}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:#ecf0f1;color:#b4bcc2;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:#b4bcc2}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#2C3E50;border-color:#2C3E50}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>.small{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:#8aa4be}.list-group-item-success{color:#fff;background-color:#2e666b}a.list-group-item-success,button.list-group-item-success{color:#fff}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,a.list-group-item-success:focus,button.list-group-item-success:hover,button.list-group-item-success:focus{color:#fff;background-color:#265559}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active,button.list-group-item-success.active:hover,button.list-group-item-success.active:focus{color:#fff;background-color:#fff;border-color:#fff}.list-group-item-info{color:#fff;background-color:#ADADAD}a.list-group-item-info,button.list-group-item-info{color:#fff}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,a.list-group-item-info:focus,button.list-group-item-info:hover,button.list-group-item-info:focus{color:#fff;background-color:#a0a0a0}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active,button.list-group-item-info.active:hover,button.list-group-item-info.active:focus{color:#fff;background-color:#fff;border-color:#fff}.list-group-item-warning{color:#fff;background-color:#F39C12}a.list-group-item-warning,button.list-group-item-warning{color:#fff}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,a.list-group-item-warning:focus,button.list-group-item-warning:hover,button.list-group-item-warning:focus{color:#fff;background-color:#e08e0b}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active,button.list-group-item-warning.active:hover,button.list-group-item-warning.active:focus{color:#fff;background-color:#fff;border-color:#fff}.list-group-item-danger{color:#fff;background-color:#E74C3C}a.list-group-item-danger,button.list-group-item-danger{color:#fff}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,a.list-group-item-danger:focus,button.list-group-item-danger:hover,button.list-group-item-danger:focus{color:#fff;background-color:#e43725}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active,button.list-group-item-danger.active:hover,button.list-group-item-danger.active:focus{color:#fff;background-color:#fff;border-color:#fff}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:21px;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-body:before,.panel-body:after{content:" ";display:table}.panel-body:after{clear:both}.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:17px;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:#ecf0f1;border-top:1px solid #ecf0f1;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:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead: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:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{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:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{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:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{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 #ecf0f1}.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-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th: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-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th: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-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:21px}.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 #ecf0f1}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ecf0f1}.panel-default{border-color:#ecf0f1}.panel-default>.panel-heading{color:#2C3E50;background-color:#ecf0f1;border-color:#ecf0f1}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ecf0f1}.panel-default>.panel-heading .badge{color:#ecf0f1;background-color:#2C3E50}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ecf0f1}.panel-primary{border-color:#2C3E50}.panel-primary>.panel-heading{color:#fff;background-color:#2C3E50;border-color:#2C3E50}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#2C3E50}.panel-primary>.panel-heading .badge{color:#2C3E50;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#2C3E50}.panel-success{border-color:#2e666b}.panel-success>.panel-heading{color:#fff;background-color:#2e666b;border-color:#2e666b}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#2e666b}.panel-success>.panel-heading .badge{color:#2e666b;background-color:#fff}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#2e666b}.panel-info{border-color:#ADADAD}.panel-info>.panel-heading{color:#fff;background-color:#ADADAD;border-color:#ADADAD}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ADADAD}.panel-info>.panel-heading .badge{color:#ADADAD;background-color:#fff}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ADADAD}.panel-warning{border-color:#F39C12}.panel-warning>.panel-heading{color:#fff;background-color:#F39C12;border-color:#F39C12}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#F39C12}.panel-warning>.panel-heading .badge{color:#F39C12;background-color:#fff}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#F39C12}.panel-danger{border-color:#E74C3C}.panel-danger>.panel-heading{color:#fff;background-color:#E74C3C;border-color:#E74C3C}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#E74C3C}.panel-danger>.panel-heading .badge{color:#E74C3C;background-color:#fff}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#E74C3C}.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:#ecf0f1;border:1px solid rgba(0,0,0,0);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:22.5px;font-weight:bold;line-height:1;color:#000;text-shadow:none;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;-moz-transition:-moz-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);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}.modal-header:before,.modal-header:after{content:" ";display:table}.modal-header:after{clear:both}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857}.modal-body{position:relative;padding:20px}.modal-footer{padding:20px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer:before,.modal-footer:after{content:" ";display:table}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.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:"Lato","Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857;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:15px;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:"Lato","Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857;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:15px;background-color:#fff;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:15px;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:fadein(rgba(0,0,0,0.2), 5%);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:fadein(rgba(0,0,0,0.2), 5%)}.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:fadein(rgba(0,0,0,0.2), 5%);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:fadein(rgba(0,0,0,0.2), 5%)}.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:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto;line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform 0.6s ease-in-out;-moz-transition:-moz-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;-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;-moz-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);background-color:rgba(0,0,0,0)}.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: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: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:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix: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{display:none !important}.visible-sm{display:none !important}.visible-md{display:none !important}.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}}body{background-color:white}.expand-collapse-all{text-align:right;padding-top:100px}.panel-title.panel-title-explore{font-size:30px;cursor:pointer}.panel-title.panel-title-explore small{font-weight:100;font-size:45%}.panel-title.panel-title-explore .glyphicon-collapse-down,.panel-title.panel-title-explore .glyphicon-collapse-up{padding-right:0px;line-height:33px;color:#666}.panel-title.panel-title-explore span.glyphicon-save::before{color:#666}.panel-title.panel-title-explore span.glyphicon-list-alt::before{color:#666;vertical-align:text-bottom}.font-tick{font-family:'tick';margin-right:5px}.font-tick.tick{color:green}.font-tick.tick::after{content:'\2713'}.font-tick.cross{color:red}.font-tick.cross::after{content:'\2715'}.font-tick.question{color:orange}.font-tick.question::after{content:'?'}ul.pagination a{padding:4px;font-size:80%}.explore-help{margin:12px 35px}.panel-body p.icon-indent{text-indent:20px}.panel-body p.icon-indent span{color:#666 !important}.info-faq{cursor:pointer;margin-top:20px;font-size:16px;color:#050505;margin-bottom:20px}.info-faq span{font-size:12px;color:#ff9222}.highlight-background-text{background-color:#E7EBE8 !important}.navbar{border-width:0}.navbar-default .badge{background-color:#fff;color:#2C3E50}.navbar-inverse .badge{background-color:#fff;color:#2e666b}.navbar-brand{color:#FFF;font-family:'Ostrich Sans',sans-serif;font-size:48px;letter-spacing:2px;line-height:1.9em;padding:0px 12px}@media (min-width: 768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:0}}.navbar-brand:hover{color:#FFF !important}.navbar-header{margin-left:10px}.btn{border-width:2px}.btn:active{-webkit-box-shadow:none;box-shadow:none}.btn-group.open .dropdown-toggle{-webkit-box-shadow:none;box-shadow:none}.text-primary,.text-primary:hover{color:#2C3E50}.text-success,.text-success:hover{color:#2e666b}.text-danger,.text-danger:hover{color:#E74C3C}.text-warning,.text-warning:hover{color:#F39C12}.text-info,.text-info:hover{color:#ADADAD}h1,.h1,h2,.h2,h3,.h3{margin-top:21px;margin-bottom:10.5px}h1 small,h1 .small,.h1 small,.h1 .small,h2 small,h2 .small,.h2 small,.h2 .small,h3 small,h3 .small,.h3 small,.h3 .small{font-size:85%}h4,.h4,h5,.h5,h6,.h6{margin-top:10.5px;margin-bottom:10.5px}h4 small,h4 .small,.h4 small,.h4 .small,h5 small,h5 .small,.h5 small,.h5 .small,h6 small,h6 .small,.h6 small,.h6 .small{font-size:95%}table a:not(.btn),.table a:not(.btn){text-decoration:underline}table .dropdown-menu a,.table .dropdown-menu a{text-decoration:none}table .success,table .warning,table .danger,table .info,.table .success,.table .warning,.table .danger,.table .info{color:#fff}table .success>th>a,table .success>td>a,table .success>a,table .warning>th>a,table .warning>td>a,table .warning>a,table .danger>th>a,table .danger>td>a,table .danger>a,table .info>th>a,table .info>td>a,table .info>a,.table .success>th>a,.table .success>td>a,.table .success>a,.table .warning>th>a,.table .warning>td>a,.table .warning>a,.table .danger>th>a,.table .danger>td>a,.table .danger>a,.table .info>th>a,.table .info>td>a,.table .info>a{color:#fff}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,.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 #ecf0f1}.form-control,input{border-width:2px;-webkit-box-shadow:none;box-shadow:none}.form-control:focus,input:focus{-webkit-box-shadow:none;box-shadow:none}.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,.has-warning .form-control-feedback{color:#F39C12}.has-warning .form-control,.has-warning .form-control:focus{border:2px solid #F39C12}.has-warning .input-group-addon{border-color:#F39C12}.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,.has-error .form-control-feedback{color:#E74C3C}.has-error .form-control,.has-error .form-control:focus{border:2px solid #E74C3C}.has-error .input-group-addon{border-color:#E74C3C}.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,.has-success .form-control-feedback{color:#2e666b}.has-success .form-control,.has-success .form-control:focus{border:2px solid #2e666b}.has-success .input-group-addon{border-color:#2e666b}::-webkit-input-placeholder{font-style:italic}::-moz-placeholder{font-style:italic}:-ms-input-placeholder{font-style:italic}input:-moz-placeholder{font-style:italic}.container-wrapper{background-color:#2e666b;margin-top:-21px;padding-top:15px}.search-box{left:18px}.search-icon{right:18px;z-index:1000;position:relative}.large-search{display:inline-block;vertical-align:top;width:79%;margin:0 auto;padding:10px 20px;border-radius:12px;border:2px solid #e5831e;background-color:#FFF;font-size:28px;height:79px}.large-search-icon{position:absolute;right:38px;top:12px}.search-help{font-size:1.1em;color:#663a0e;padding-top:10px;margin:0 auto;margin-bottom:20px;text-align:center}@media (min-width: 1400px){.col-vlg-offset-1{width:1300px;margin-left:auto;margin-right:auto}}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{border-color:transparent}.pager a,.pager a:hover{color:#fff}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{background-color:#4599a1}.close{color:#fff;text-decoration:none;opacity:0.4}.close:hover,.close:focus{color:#fff;opacity:1}.alert .alert-link{color:#fff;text-decoration:underline}.progress{height:10px;-webkit-box-shadow:none;box-shadow:none}.progress .progress-bar{font-size:10px;line-height:10px}.well{-webkit-box-shadow:none;box-shadow:none}a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{border-color:#ecf0f1}a.list-group-item-success.active{background-color:#2e666b}a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{background-color:#265559}a.list-group-item-warning.active{background-color:#F39C12}a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{background-color:#e08e0b}a.list-group-item-danger.active{background-color:#E74C3C}a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{background-color:#e43725}.panel-default .close{color:#2C3E50}.modal .close{color:#2C3E50}.popover{color:#2C3E50}html{font-size:initial} diff --git a/cove/cove_360/static/dataexplore/css/main.css b/cove/cove_360/static/dataexplore/css/main.css index f9ba046..2ddef0f 100644 --- a/cove/cove_360/static/dataexplore/css/main.css +++ b/cove/cove_360/static/dataexplore/css/main.css @@ -163,14 +163,11 @@ sup { a { color: var(--color-accent); - text-decoration: none; -webkit-text-decoration-skip: objects; } a:hover, a:focus { - color: var(--color-accent); - text-decoration: none; } + color: var(--color-accent); } a:active { - color: var(--color-orange); - text-decoration: none; } + color: var(--color-orange); } a:not([href]):not([tabindex]) { color: inherit; @@ -401,6 +398,9 @@ template, [hidden] { overflow: hidden; white-space: nowrap; } +.margin-top\:0 { + margin-top: 0 !important; } + .margin-top\:05 { margin-top: .5rem !important; } @@ -545,6 +545,15 @@ template, [hidden] { .padding-bottom\:5 { padding-bottom: 5rem !important; } +.padding\:0 { + padding: 0 !important; } + +.justify-content-end { + justify-content: end; } + +.white-wash { + background-color: white !important; } + :root { --gray-05-hsl: 0, 0%, 95%; --gray-10-hsl: 0, 0%, 90%; @@ -822,7 +831,9 @@ template, [hidden] { a { font-weight: 400; - color: hsl(var(--teal-dark-hsl), 1); } + color: hsl(var(--teal-dark-hsl), 1); + text-decoration: underline; + text-underline-position: under; } a:hover { color: hsl(var(--orange-dark-hsl), 1); } a:active { @@ -852,7 +863,7 @@ a { color: var(--text-color); display: inline-block; border-radius: 3px; - padding: 6px 24px 8px; + padding: 6px 24px 6px; font-size: 1rem; font-weight: 400; background-color: var(--bg-color); @@ -863,7 +874,7 @@ a { border-width: 1px; font-size: .9rem; } .button.button--large { - padding: 10px 32px 12px; + padding: 10px 32px 10px; border-width: 3px; font-size: 1.3rem; } .button.button--unstyled { @@ -871,19 +882,43 @@ a { padding: 0; } .button.button--white { --border-color: hsla(var(--white-hsl), 1); - --text-color: hsla(var(--white-hsl), 1); } + --text-color: hsla(var(--white-hsl), 1); + --bg-color: transparent; } .button.button--orange { --border-color: var(--color-orange); - --text-color: hsla(var(--orange-dark-hsl), 1); } + --text-color: hsla(var(--orange-dark-hsl), 1); + --bg-color: transparent; } + .button.button--orange.button--solid { + --text-color: hsla(var(--white-hsl), 1); + --bg-color: var(--color-orange); } .button.button--teal { --border-color: var(--color-teal); - --text-color: hsla(var(--teal-dark-hsl), 1); } + --text-color: hsla(var(--teal-dark-hsl), 1); + --bg-color: transparent; } + .button.button--teal.button--solid { + --text-color: hsla(var(--white-hsl), 1); + --bg-color: var(--color-teal); } + .button.button--teal-dark { + --border-color: var(--color-teal-dark); + --text-color: hsla(var(--teal-dark-hsl), 1); + --bg-color: transparent; } + .button.button--teal-dark.button--solid { + --text-color: hsla(var(--white-hsl), 1); + --bg-color: var(--color-teal-dark); } .button.button--yellow { --border-color: var(--color-yellow); - --text-color: var(--color-yellow-dark); } + --text-color: var(--color-yellow-dark); + --bg-color: transparent; } + .button.button--yellow.button--solid { + --text-color: hsla(var(--base-hsl), 1); + --bg-color: var(--color-yellow); } .button.button--red { --border-color: var(--color-red); - --text-color: var(--color-red); } + --text-color: var(--color-red); + --bg-color: transparent; } + .button.button--red.button--solid { + --text-color: hsla(var(--white-hsl), 1); + --bg-color: var(--color-red); } .button.button--black { --border-color: var(--color-black); --bg-color: var(--color-black); @@ -891,6 +926,11 @@ a { .button.button--disabled { opacity: .3 !important; pointer-events: none !important; } + .button.button--disabled.button--solid { + --text-color: hsla(var(--base-hsl), 1); + --bg-color: var(--base-hsl); } + .button.bold { + font-weight: bold; } .code-block { padding: 0 16px; @@ -1014,8 +1054,7 @@ a { margin-bottom: 38px; } .page-title__id a { font-size: 24px; - font-weight: 400; - text-decoration: underline; } + font-weight: 400; } .pager { font-size: 16px; @@ -1486,12 +1525,6 @@ p { font-weight: 400; color: var(--color-teal-dark); } -p > a { - text-decoration: underline; } - -ul > li > a { - text-decoration: underline; } - .accordion__trigger { cursor: pointer; } @@ -1511,7 +1544,6 @@ ul > li > a { --scale: 127; --bar-bg-color: hsla(var(--yellow-hsl), 1); } .bar-chart__item { - --value: 0; display: flex; padding-bottom: 8px; } .bar-chart__bar { @@ -1527,8 +1559,7 @@ ul > li > a { background-color: var(--bar-bg-color); width: var(--width); } .bar-chart__bar > span:after { - counter-reset: value var(--value); - content: counter(value); + content: attr(data-val); position: absolute; left: calc(100% + 8px); } .bar-chart__label { @@ -1680,7 +1711,7 @@ ul > li > a { content: ''; width: 10px; height: 10px; - background: url("/images/checkmark-icon.svg") no-repeat; + background: url("../images/checkmark-icon.svg") no-repeat; background-size: cover; border-radius: 2px; position: absolute; @@ -1848,7 +1879,7 @@ ul > li > a { .filter-list--with-checkboxes .filter-list__form--checkbox-item label::after { content: ''; position: absolute; - background: url("/images/checkmark-icon.svg") no-repeat; + background: url("../images/checkmark-icon.svg") no-repeat; background-size: cover; left: 10px; top: 10px; @@ -1940,6 +1971,304 @@ ul > li > a { border-radius: 3px; padding: 2px 6px; } +form.generic-form { + /*********** Baseline, reset styles ***********/ + /* Removes default focus */ + /******** Chrome, Safari, Opera and Edge Chromium styles ********/ + /* slider track */ + /* slider thumb */ + /*********** Firefox styles ***********/ + /* slider track */ + /* slider thumb */ } + form.generic-form label { + font-size: 1.1875rem; + line-height: 1.3157894737; + font-weight: 400; + display: block; + margin-top: 1.3rem; + margin-bottom: 0rem; } + form.generic-form.fixed-width input[type=text], + form.generic-form.fixed-width input[type=email], + form.generic-form.fixed-width input[type=color], + form.generic-form.fixed-width input[type=url], + form.generic-form.fixed-width input[type=search], + form.generic-form.fixed-width input[type=tel], + form.generic-form.fixed-width input[type=number], + form.generic-form.fixed-width input[type=date], + form.generic-form.fixed-width input[type=datetime-local], + form.generic-form.fixed-width input[type=week], + form.generic-form.fixed-width input[type=time], + form.generic-form.fixed-width input[type=password], + form.generic-form.fixed-width input[type=month], + form.generic-form.fixed-width input[type=file], + form.generic-form.fixed-width textarea, + form.generic-form.fixed-width select { + width: 450px; + max-width: 100%; } + form.generic-form input[type=text], + form.generic-form input[type=email], + form.generic-form input[type=color], + form.generic-form input[type=url], + form.generic-form input[type=search], + form.generic-form input[type=tel], + form.generic-form input[type=number], + form.generic-form input[type=date], + form.generic-form input[type=datetime-local], + form.generic-form input[type=week], + form.generic-form input[type=time], + form.generic-form input[type=password], + form.generic-form input[type=month], + form.generic-form input[type=file], + form.generic-form textarea, + form.generic-form select { + font-size: 1.1875rem; + line-height: 1.3157894737; + margin-top: 5px; + padding: 5px; + width: auto; + min-width: 25%; + border: 2px solid hsl(var(--base-hsl), 1); + color: hsl(var(--base-hsl), 1); + background-color: #fff; + display: block; } + form.generic-form input[type=text]:focus, + form.generic-form input[type=email]:focus, + form.generic-form input[type=color]:focus, + form.generic-form input[type=url]:focus, + form.generic-form input[type=search]:focus, + form.generic-form input[type=tel]:focus, + form.generic-form input[type=number]:focus, + form.generic-form input[type=date]:focus, + form.generic-form input[type=datetime-local]:focus, + form.generic-form input[type=week]:focus, + form.generic-form input[type=time]:focus, + form.generic-form input[type=password]:focus, + form.generic-form input[type=month]:focus, + form.generic-form input[type=file]:focus, + form.generic-form textarea:focus, + form.generic-form select:focus { + outline: 2px solid hsl(var(--yellow-hsl), 1); + outline-offset: 0; + -webkit-box-shadow: inset 0 0 0 2px; + box-shadow: inset 0 0 0 2px; } + form.generic-form input[type=text]:focus:required, + form.generic-form input[type=email]:focus:required, + form.generic-form input[type=color]:focus:required, + form.generic-form input[type=url]:focus:required, + form.generic-form input[type=search]:focus:required, + form.generic-form input[type=tel]:focus:required, + form.generic-form input[type=number]:focus:required, + form.generic-form input[type=date]:focus:required, + form.generic-form input[type=datetime-local]:focus:required, + form.generic-form input[type=week]:focus:required, + form.generic-form input[type=time]:focus:required, + form.generic-form input[type=password]:focus:required, + form.generic-form input[type=month]:focus:required, + form.generic-form input[type=file]:focus:required, + form.generic-form textarea:focus:required, + form.generic-form select:focus:required { + outline: 2px solid hsl(var(--orange-hsl), 1); } + form.generic-form input[type=text]::placeholder, + form.generic-form input[type=email]::placeholder, + form.generic-form input[type=color]::placeholder, + form.generic-form input[type=url]::placeholder, + form.generic-form input[type=search]::placeholder, + form.generic-form input[type=tel]::placeholder, + form.generic-form input[type=number]::placeholder, + form.generic-form input[type=date]::placeholder, + form.generic-form input[type=datetime-local]::placeholder, + form.generic-form input[type=week]::placeholder, + form.generic-form input[type=time]::placeholder, + form.generic-form input[type=password]::placeholder, + form.generic-form input[type=month]::placeholder, + form.generic-form input[type=file]::placeholder, + form.generic-form textarea::placeholder, + form.generic-form select::placeholder { + color: hsl(var(--base-hsl), 0.7); } + form.generic-form input[type=text].full-width, + form.generic-form input[type=email].full-width, + form.generic-form input[type=color].full-width, + form.generic-form input[type=url].full-width, + form.generic-form input[type=search].full-width, + form.generic-form input[type=tel].full-width, + form.generic-form input[type=number].full-width, + form.generic-form input[type=date].full-width, + form.generic-form input[type=datetime-local].full-width, + form.generic-form input[type=week].full-width, + form.generic-form input[type=time].full-width, + form.generic-form input[type=password].full-width, + form.generic-form input[type=month].full-width, + form.generic-form input[type=file].full-width, + form.generic-form textarea.full-width, + form.generic-form select.full-width { + width: 100%; } + form.generic-form label.required::after { + content: " *"; + color: hsl(var(--red-hsl), 1); } + form.generic-form .note { + display: block; + margin-top: 0.3rem; + color: hsl(var(--base-hsl), 0.7); } + form.generic-form input[type=search] { + border-radius: 8px; } + form.generic-form input[type=color] { + width: 80px; + min-width: initial; + height: 38px; + padding: 2px; } + form.generic-form input[type="range"] { + -webkit-appearance: none; + appearance: none; + background: transparent; + cursor: pointer; } + form.generic-form input[type="range"]:focus { + outline: none; } + form.generic-form input[type="range"]::-webkit-slider-runnable-track { + background-color: hsl(var(--teal-hsl), 1); + border-radius: 0.5rem; + height: 0.5rem; } + form.generic-form input[type="range"]::-webkit-slider-thumb { + -webkit-appearance: none; + /* Override default look */ + appearance: none; + margin-top: -4px; + /* Centers thumb on the track */ + background-color: hsl(var(--base-hsl), 1); + border-radius: 0.5rem; + height: 1rem; + width: 1rem; } + form.generic-form input[type="range"]:focus::-webkit-slider-thumb { + outline: 3px solid hsl(var(--yellow-hsl), 1); + outline-offset: 0.125rem; } + form.generic-form input[type="range"]::-moz-range-track { + background-color: hsl(var(--teal-hsl), 1); + border-radius: 0.5rem; + height: 0.5rem; } + form.generic-form input[type="range"]::-moz-range-thumb { + background-color: hsl(var(--base-hsl), 1); + border: none; + /*Removes extra border that FF applies*/ + border-radius: 0.5rem; + height: 1rem; + width: 1rem; } + form.generic-form input[type="range"]:focus::-moz-range-thumb { + outline: 3px solid hsl(var(--yellow-hsl), 1); + outline-offset: 0.125rem; } + form.generic-form .checkbox, + form.generic-form .radio { + display: block; + position: relative; + min-height: 40px; + margin-bottom: 10px; + padding-left: 40px; + clear: left; } + form.generic-form .checkbox input[type=checkbox], + form.generic-form .checkbox input[type=radio], + form.generic-form .radio input[type=checkbox], + form.generic-form .radio input[type=radio] { + cursor: pointer; + position: absolute; + z-index: 1; + top: -2px; + left: -2px; + width: 44px; + height: 44px; + margin: 0; + opacity: 0; } + form.generic-form .checkbox label::before, + form.generic-form .radio label::before { + content: ""; + display: block; + position: absolute; + top: 0; + left: 0; + width: 34px; + height: 34px; + border: 2px solid hsl(var(--base-hsl), 1); + margin-right: 0.5rem; + background-color: #fff; + cursor: pointer; } + form.generic-form .checkbox input[type=checkbox]:checked + label::after, + form.generic-form .checkbox input[type=radio]:checked + label::after, + form.generic-form .radio input[type=checkbox]:checked + label::after, + form.generic-form .radio input[type=radio]:checked + label::after { + opacity: 1; } + form.generic-form .checkbox label, + form.generic-form .radio label { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + padding: 5px 6px 5px; + cursor: pointer; + -ms-touch-action: manipulation; + touch-action: manipulation; } + form.generic-form .checkbox label::after, + form.generic-form .radio label::after { + content: ""; + -webkit-box-sizing: border-box; + box-sizing: border-box; + position: absolute; + top: 12px; + left: 7px; + width: 19px; + height: 9px; + -webkit-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + transform: rotate(-45deg); + border: solid; + border-top-color: currentcolor; + border-top-width: medium; + border-right-width: medium; + border-bottom-width: medium; + border-left-width: medium; + border-width: 0 0 5px 5px; + border-top-color: rgba(0, 0, 0, 0); + opacity: 0; + background: rgba(0, 0, 0, 0); } + form.generic-form .radio label::before { + border-radius: 50%; } + form.generic-form .radio label::after { + content: ""; + position: absolute; + top: 8px; + left: 8px; + width: 0; + height: 0; + border: 9px solid currentcolor; + border-radius: 50%; + opacity: 0; + background: currentcolor; } + form.generic-form input[type=button], + form.generic-form input[type=reset], + form.generic-form button { + --border-color: hsla(var(--orange-hsl), 1); + --bg-color: #fff; + --text-color: hsla(var(--orange-hsl), 1); + border: 2px solid var(--border-color); + color: var(--text-color); + display: inline-block; + border-radius: 3px; + padding: 6px 24px 6px; + font-size: 1rem; + font-weight: 400; + background-color: var(--bg-color); + text-decoration: none; + cursor: pointer; } + form.generic-form input[type=submit] { + --border-color: hsla(var(--orange-hsl), 1); + --text-color: #fff; + --bg-color: hsla(var(--orange-hsl), 1); + border: 2px solid var(--border-color); + color: var(--text-color); + display: inline-block; + border-radius: 3px; + padding: 6px 24px 6px; + font-size: 1rem; + font-weight: 400; + background-color: var(--bg-color); + text-decoration: none; + cursor: pointer; } + .frame { --n: 9; --d: 16; @@ -2165,7 +2494,7 @@ body.modal--shown { .search-summary--description { color: #153634; background: #F4D569; - font-size: 1rem; + font-size: 1.125rem; line-height: 120%; font-weight: 500; padding: 1rem; @@ -2997,8 +3326,6 @@ a.base-card:hover:before { .footer ul { list-style-type: none; padding: 0; } - .footer ul a { - text-decoration: none; } .footer a { color: hsl(var(--white-hsl), 1); text-decoration: underline; @@ -3333,18 +3660,38 @@ a.base-card:hover:before { .grid--five-columns { grid-template-columns: repeat(5, 1fr); } } +@media (min-width: 36em) { + .grid--six-columns { + grid-template-columns: repeat(6, 1fr); } } + +@media (min-width: 36em) { + .grid--seven-columns { + grid-template-columns: repeat(7, 1fr); } } + .grid__2 { grid-column: auto / span 2; } .grid__3 { grid-column: auto / span 3; } +.grid__4 { + grid-column: auto / span 4; } + .grid__5 { grid-column: auto / span 5; } +.grid__6 { + grid-column: auto / span 6; } + +.grid__7 { + grid-column: auto / span 7; } + .grid__all { grid-column: 1 / -1; } +.grid.max-width__100 { + max-width: 100%; } + .slick-dots { position: absolute; display: block; @@ -3630,7 +3977,7 @@ a.base-card:hover:before { .media-card__content_no_image { justify-content: center; padding: 20px; - width: 100%; } + width: 100vw; } .media-card__image-wrapper { width: 30%; max-width: 320px; @@ -3946,9 +4293,7 @@ a.base-card:hover:before { .prose a { font-weight: inherit; - color: hsl(var(--teal-dark-hsl), 1); - text-decoration: underline; - text-underline-position: under; } + color: hsl(var(--teal-dark-hsl), 1); } .prose a:hover { background-color: hsl(var(--teal-hsl), 0.1); } .prose a.button { @@ -4386,6 +4731,8 @@ a.base-card:hover:before { background: hsl(var(--teal-hsl), 1) !important; } .search-block--recipients { background: hsl(var(--yellow-hsl), 1) !important; } + .search-block--no-padding { + padding: 0; } .search-block__description { text-align: center; font-size: 24px; @@ -4689,6 +5036,11 @@ a.base-card:hover:before { .sort-filters select.sort-filters__filter-active { color: #153634; } +.clear-all { + border: none; + height: 35px; + width: 100px; } + .subscribe-section { background-color: hsl(var(--yellow-hsl), 1); padding: 24px; } @@ -4771,9 +5123,6 @@ a.base-card:hover:before { list-style: none; margin: 0; } -.top-bar a { - text-decoration: none; } - .top-bar { --panel-width: 280px; } @media (min-width: 36em) { @@ -5088,6 +5437,7 @@ a.base-card:hover:before { display: none; } } .grantnav-search__content { + overflow-x: auto; padding-top: 0px; width: 100%; } @media (min-width: 60em) { @@ -5189,3 +5539,16 @@ a.base-card:hover:before { display: flex; justify-content: center; margin-bottom: 48px; } + +@media (min-width: 1690px) { + .sidebar-container { + max-width: 1690px; + margin: 0 auto; } } + +.sidebar-adjacent-content { + margin-left: -176px; + margin-right: 176px; } + @media (max-width: 1690px) { + .sidebar-adjacent-content { + margin-left: 0; + margin-right: 0; } } diff --git a/cove/cove_360/static/dataexplore/360-giving-logo.svg b/cove/cove_360/static/dataexplore/images/360-giving-logo.svg similarity index 100% rename from cove/cove_360/static/dataexplore/360-giving-logo.svg rename to cove/cove_360/static/dataexplore/images/360-giving-logo.svg diff --git a/cove/cove_360/static/dataexplore/images/360insights-color.svg b/cove/cove_360/static/dataexplore/images/360insights-color.svg deleted file mode 100644 index 332e9c5..0000000 --- a/cove/cove_360/static/dataexplore/images/360insights-color.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cove/cove_360/static/dataexplore/images/linkedin-logo.svg b/cove/cove_360/static/dataexplore/images/linkedin-logo.svg new file mode 100644 index 0000000..e149999 --- /dev/null +++ b/cove/cove_360/static/dataexplore/images/linkedin-logo.svg @@ -0,0 +1,40 @@ + + + + + + + diff --git a/cove/cove_360/static/dataexplore/js/tab-switcher.js b/cove/cove_360/static/dataexplore/js/tab-switcher.js new file mode 100644 index 0000000..207fd73 --- /dev/null +++ b/cove/cove_360/static/dataexplore/js/tab-switcher.js @@ -0,0 +1,49 @@ +const allTabs = [ + 'summary', + 'validity', + 'accuracy', + 'usefulness', + 'upload', + 'link', + 'paste', +]; + +(function() { + /* tab switching mechanism -> click handler > */ + + /* Find all the Links */ + for (const tab of allTabs){ + /* For each type (e.g. 'paste') add a click handler and set state */ + for (const tabLink of document.querySelectorAll(`a[href="#${tab}"]`)){ + tabLink.addEventListener('click', (event) => { + event.preventDefault(); + /* We do this manually to avoid page jumping position to the href/id */ + window.location.hash = `#${tab}`; + + /* Remove active from all tabs */ + for (const otherTabs of document.getElementsByClassName('tab')) { + otherTabs.classList.remove('tab--active'); + } + /* Add active to our tab */ + document.getElementById(`${tab}-tab-link`).parentElement.classList.toggle('tab--active'); + + for (const tabContents of document.getElementsByClassName('tab-content')) { + tabContents.setAttribute('style', 'display:none'); + } + + document.getElementById(`${tab}-tab`).setAttribute('style', 'display: block') + }); + } + } +})(); + +(function(){ + + /* Resume the tab selection state from the window hash on page load. + * substring to remove the # to match values in allTabs array. + */ + if (allTabs.includes(window.location.hash.substring(1))) { + document.querySelector(`a[href="${window.location.hash}"]`).click(); + } + +})(); \ No newline at end of file diff --git a/cove/cove_360/templates/cove_360/500.html b/cove/cove_360/templates/cove_360/500.html new file mode 100644 index 0000000..890d25f --- /dev/null +++ b/cove/cove_360/templates/cove_360/500.html @@ -0,0 +1,25 @@ +{% extends app_base_template %} +{% load i18n %} +{% block content %} + +
+
+

+ {% trans 'Internal Server Error' %} +

+
+
+
+ +{% endblock %} + +{% block extrapiwik %} +{% if piwik.dimension_map.page_type %} +_paq.push(['setCustomDimension', {{piwik.dimension_map.page_type}}, '500 error']); +{% endif %} +{% endblock %} diff --git a/cove/cove_360/templates/cove_360/additional_codelist_values.html b/cove/cove_360/templates/cove_360/additional_codelist_values.html new file mode 100644 index 0000000..8ae13df --- /dev/null +++ b/cove/cove_360/templates/cove_360/additional_codelist_values.html @@ -0,0 +1,32 @@ +{% load i18n %} +{% load cove_tags %} + + + + + + + + + + + + {% for path, detail in additional_codelist_values.items %} + + + + + + {% endfor %} + +
{% trans 'Field' %}{% trans 'Path to Field' %}{% trans 'Codelist' %}{% trans 'Additional Values Used' %}
{{detail.field}} {{detail.path}} + {{detail.codelist}} + {% if detail.codelist_amend_urls %} + ( + {% for symbol, url in detail.codelist_amend_urls %} + {{symbol}} + {% endfor %} + ) + {% endif %} + + {{detail.values|join:", "}}
diff --git a/cove/cove_360/templates/cove_360/additional_fields_table.html b/cove/cove_360/templates/cove_360/additional_fields_table.html new file mode 100644 index 0000000..cbcd55d --- /dev/null +++ b/cove/cove_360/templates/cove_360/additional_fields_table.html @@ -0,0 +1,13 @@ +{% load i18n %} +{% load cove_tags %} + + + + + {% for path, error, count in data_only %} + + + + {% endfor %} + +
{% trans 'Field' %} {% trans 'Path to Field' %} {% trans 'Usage Count' %}
{{error}} {{path}} {{count}}
diff --git a/cove/cove_360/templates/cove_360/additional_fields_table_all.html b/cove/cove_360/templates/cove_360/additional_fields_table_all.html new file mode 100644 index 0000000..afb2b2e --- /dev/null +++ b/cove/cove_360/templates/cove_360/additional_fields_table_all.html @@ -0,0 +1,79 @@ +{% load i18n %} +{% load cove_tags %} + + + + + + + + + + + + + {% for full_path, info in additional_fields.items %} + {% if info.root_additional_field %} + + + + + + + + {% endif %} + {% endfor %} + +
{% trans 'Field' %} {% trans 'Path to Field' %} {% trans 'Usage Count' %} {% trans 'Examples (first 3)' %} {% trans 'Child Fields' %}
{{info.field_name}}{{info.path}}{{info.count}} + {% for example in info.examples %} + {{example}}
+ {% endfor %} +
+ {% if info.additional_field_descendance %} + {{info.additional_field_descendance|length}} + {% trans "(See child fields)" %} + {% endif %} +
+ + +{% for parent_full_path, parent_info in additional_fields.items %} + {% if parent_info.root_additional_field and parent_info.additional_field_descendance %} + + {% endif %} +{% endfor %} diff --git a/cove/cove_360/templates/cove_360/base.html b/cove/cove_360/templates/cove_360/base.html index 1446bed..5dec16e 100644 --- a/cove/cove_360/templates/cove_360/base.html +++ b/cove/cove_360/templates/cove_360/base.html @@ -1,120 +1,83 @@ -{% extends 'base.html' %} {% load i18n %} {% load static %} -{% block banner %} -{% endblock banner %} + + + + + + + + + -{% block heading %} -
-
- -
-
- -
Convert, Validate, Explore 360Giving Data
-
-
-{% endblock %} + 360Giving Data Quality Tool + + + -{% block language_select %}{% endblock %} + +
+
+ -{% block bootstrap_css %} - - - - - - -{% endblock %} +
+ + +
+
+
+
+
+
+ +
+

{% block hero_title %}Data Quality Tool{% endblock %}

+

{% block hero_blurb %}Convert, Validate, Explore 360 Giving Data.{% endblock %}

+
+
+
+
+
+
+
+ {% block content %} + {% endblock %} +
-{% block bottomcontent1 %} + {% if not DEBUG %} + {% include "cove_360/components/cookie_consent.html" %} + {% endif %} -
-
-

{% blocktrans %}How to check your data{% endblocktrans %}

- {% comment %}Translators: Paragraph that describes the application{% endcomment %} -

{% blocktrans %}Upload, paste or provide a link to data using the 360Giving Data Standard format, and this application will check whether it is valid 360Giving data, and provide feedback so that you can check for errors and see ways to improve its quality.{% endblocktrans %}

-

{% blocktrans %}The tool will convert between JSON, Excel and CSV formats, allowing you to download the original file, and the converted versions.{% endblocktrans %}

-

{% blocktrans %}This tool will: {% endblocktrans %}

-

{% blocktrans %} Check your data is valid.{% endblocktrans %}

-

{% blocktrans %}The term ‘valid‘ means the data includes the 10 core fields and the information has all the correct data formatting that is required by 360Giving Data Standard. When it passes these checks, you will know that it is formatted for use alongside other valid 360Giving data and can be included in 360Giving tools, such as GrantNav and 360Insights.{% endblocktrans %}

-

{% blocktrans %}It will not: {% endblocktrans %}

-

{% blocktrans %} Check your data is accurate.{% endblocktrans %}

-

{% blocktrans %} Check the data against your own open data policy.{% endblocktrans %}

-

{% blocktrans %} This means there may be further checks you need to carry out to make sure the information is accurate, and that the data does not include information that is unsuitable for publishing as open data. Read more about what to consider when publishing open grants data.{% endblocktrans %}

- {% if request.path == "/" %} -

{% blocktrans %}Further guidance{% endblocktrans %}

-

{% blocktrans %}Read about common data errors and what causes them in the Common Errors section.{% endblocktrans %}

-

{% blocktrans %}To preview how this tool works, try{% endblocktrans %}

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

{% blocktrans %}Formats{% endblocktrans %}

-

{% blocktrans %}The application accepts data in the formats set out in the {% endblocktrans %}360Giving Data Standard guidance.

-

{% blocktrans %}Acceptable files are: {% endblocktrans %}

-
    -
  • {% blocktrans %}Summary Spreadsheet - OpenDocument Spreadsheet, Excel, CSV (UTF-8, Windows-1252 and ISO-8859-1 encodings supported){% endblocktrans %}
  • -
  • {% blocktrans %}JSON built to the 360Giving JSON schema (UTF-8 encoding supported){% endblocktrans %}
  • -
  • {% blocktrans %}Multi-table data package - Excel{% endblocktrans %}
  • -
-
-
+ {% include "cove_360/components/footer.html" %} -
-
-

{% blocktrans %}How to submit your data{% endblocktrans %}

-

{% blocktrans %} - Once 360Giving data has been published by an organisation, the file must be added to the 360Giving Data Registry so that the data to appear in 360Giving’s tools such as GrantNav and 360Insights. - {% endblocktrans %} -

-

{% blocktrans %} - Publishers of 360Giving data can add their valid 360Giving data files to the Data Registry using the 360Giving data file submission form. - {% endblocktrans %} -

-

{% blocktrans %}The submission form allows users to:{% endblocktrans %}

-
    -
  • Update an existing Data Registry entry with an updated version of an existing file
  • -
  • Add an entry for a new file to the Data Registry
  • -
-

Only publishers with an authorised website domain can use this submission process.

+ -

Authorised domains

-

By default, the website domain used by existing publishers to host their 360Giving data files will be authorised.

-

Organisations that publish 360Giving data for the first time can also use the 360Giving data file submission process once they have registered their website domain with 360Giving. To register to your website domain prior to publishing for the first time please contact 360Giving Helpdesk via support@threesixtygiving.org.

-

Publishers can opt out of authorising their website domain and using the 360Giving data file submission process on request.

-

Which domains are not authorised?

-

Data files published on multi-user hosting platforms like open data repositories, or file sharing services Google Sheets or Dropbox, cannot be authorised for use with the 360Giving data file submission process because the domain cannot be authorised as being unique to a particular organisation.

-

Files published in this way can be added to the 360Giving Data Registry by emailing 360Giving Helpdesk via support@threesixtygiving.org.

-

Further guidance

-

Read our full guidance on how to use the 360Giving data submission process.

- -
-
-{% endblock %} - -{% block bottomcontent2 %} - -{% if not DEBUG %} -{% include "cove_360/cookie_consent.html" %} -{% endif %} -{% include "cove_360/more_info.html" %} -{% include "cove_360/footer.html" %} -{% endblock %} + + \ No newline at end of file diff --git a/cove/cove_360/templates/cove_360/common_errors.html b/cove/cove_360/templates/cove_360/common_errors.html index fa109ee..874efe2 100644 --- a/cove/cove_360/templates/cove_360/common_errors.html +++ b/cove/cove_360/templates/cove_360/common_errors.html @@ -1,4 +1,4 @@ -{% extends 'base.html' %} +{% extends request.current_app_base_template %} {% load i18n %} {% block content %} @@ -16,7 +16,7 @@

{% trans "Invalid 'uri' found" %}

{% blocktrans %}What is a URI? Short for “Uniform Resource Identifier” it is a sequence of characters that distinguishes one resource from another. A URL — short for “Uniform Resource Locator” — is a specific type of URI.{% endblocktrans %}

{% blocktrans %}When the 360Giving Data Standard requires data to be provided in the format of a URI, this will mean you will very likely be providing a URL — or website address.{% endblocktrans %}

- +

{% trans "Date is not in the correct format" %}

@@ -105,7 +105,7 @@

{% trans "(something) is missing but is required" %}

- +

{% trans "Invalid code found in (something)" %}

{% blocktrans %}In the 360Giving Data Standard, there are three fields that require publishers to use values from a predefined list. When we validate people's data, we check the values of those fields against those lists.{% endblocktrans %}

@@ -129,8 +129,8 @@

{% trans "Invalid code found in (something)" %}

{% blocktrans %}The currency and country code lists are referenced in the 360Giving JSON Schemas and the field descriptions link to the code lists on third-party websites.{% endblocktrans %}

- - + +

{% trans "Field x is not a string" %}

{% blocktrans %}Data in the 360Giving Data Standard is expected to be provided in a certain format.{% endblocktrans %}

diff --git a/cove/cove_360/templates/cove_360/cookie_consent.html b/cove/cove_360/templates/cove_360/components/cookie_consent.html similarity index 96% rename from cove/cove_360/templates/cove_360/cookie_consent.html rename to cove/cove_360/templates/cove_360/components/cookie_consent.html index 7b2eee2..f9b4b07 100644 --- a/cove/cove_360/templates/cove_360/cookie_consent.html +++ b/cove/cove_360/templates/cove_360/components/cookie_consent.html @@ -31,7 +31,7 @@ } function noCookieConsent() { - document.cookie = "noEnhancedAnalytics=1 ;max-age=2592000 ;domain=threesixtygiving.org"; + document.cookie = "noEnhancedAnalytics=1; max-age=2592000; domain=threesixtygiving.org"; } document.addEventListener('DOMContentLoaded', function(){ diff --git a/cove/cove_360/templates/cove_360/components/explore/accuracy.html b/cove/cove_360/templates/cove_360/components/explore/accuracy.html new file mode 100644 index 0000000..68e69d8 --- /dev/null +++ b/cove/cove_360/templates/cove_360/components/explore/accuracy.html @@ -0,0 +1,91 @@ +{% load i18n %} +{% load humanize %} +{% load cove_tags %} + +

Data Accuracy

+ + {% if quality_accuracy_errored %} +

{% blocktrans %}Quality accuracy checks failed due to an issue with the data. Fix some validation errors first.{% endblocktrans %}

+ {% else %} + +

+ {% if quality_accuracy_checks %} +

{% blocktrans %}These checks highlight areas where your data may be incorrect or need further attention.{% endblocktrans %}

+ {% blocktrans %} +

For each check we give feedback on the issue and what steps may be taken to resolve it.

+

Receiving this feedback does not mean the data is invalid, and it can be ignored when not relevant.

+ {% endblocktrans %} +
+ + + + + + + + + + {% for message, json_location, spreadsheet_location in quality_accuracy_checks %} + + + + {% if file_type == 'xlsx' or file_type == 'csv' %} + + {% else %} + + {% endif %} + + {% endfor %} + +
{% trans 'Passed' %}{% trans 'Check Description' %} {% trans 'First 3 Locations' %}
close + {{ message.heading }}

{{ message.message }} +
+
    + {% for location in spreadsheet_location|slice:":3" %} +
  • Sheet: {{location.sheet}} Row: {{location.row_number}} {% if location.header %} Header: {{location.header}} {% endif %}
  • + {% endfor %} + {% if spreadsheet_location|length > 3 %} +
  • see all
  • + {% endif %} +
+
+
    + {% for location in json_location|slice:":3" %} +
  • {{location}}
  • + {% endfor %} + {% if json_location|length > 3 %} +
  • see all
  • + {% endif %} +
+
+ {% else %} +

No accuracy issues found.

+ {% endif %} + +

What is working well

+ {% if quality_accuracy_checks_passed %} +

Congratulations, {{quality_accuracy_checks_passed|length}} data accuracy checks passed.

+ + + + + + {% for passed_test in quality_accuracy_checks_passed %} + + + + + {% endfor %} +
PassedTest
check{{passed_test}}
+ {% endif %} +{% for message, json_location, spreadsheet_location in quality_accuracy_checks %} +{% with msg=message.heading %} +{% if file_type == 'json' %} +{% cove_modal_errors className="quality_accuracy-checks-"|concat:forloop.counter modalTitle=msg errorList=json_location file_type=file_type full_table=False %} +{% else %} +{% cove_modal_errors className="quality_accuracy-checks-"|concat:forloop.counter modalTitle=msg errorList=spreadsheet_location file_type=file_type full_table=False %} +{% endif %} +{% endwith %} +{% endfor %} + +{% endif %} {# Quality accuracy errored #} \ No newline at end of file diff --git a/cove/cove_360/templates/cove_360/components/explore/summary.html b/cove/cove_360/templates/cove_360/components/explore/summary.html new file mode 100644 index 0000000..c9d5ad3 --- /dev/null +++ b/cove/cove_360/templates/cove_360/components/explore/summary.html @@ -0,0 +1,205 @@ +{% load i18n %} +{% load humanize %} +{% load cove_tags %} + +

{% trans "Summary" %}

+ + {% if validation_errors or additional_closed_codelist_values %} +
+

+ {% trans "This data does not use the 360Giving Data Standard correctly" %} ({% blocktrans count n_errors=validation_and_closed_codelist_errors_count %} {{n_errors}} Error.{% plural %}{{n_errors}} Errors {% endblocktrans %}) +

+

{% trans "Sorry your data is not yet using the 360Giving Data Standard. We used the " %} + 360Giving JSON Package Schema {% trans "to check this." %} + See Validity for further details. +

+
+ {% else %} +
+

{% trans "This data uses the 360Giving Data Standard correctly" %}

+

+ {% trans "Congratulations! Your data is using the 360Giving Data Standard. We used the " %} + 360Giving JSON Package Schema + {% trans "to check this." %} +

+
+ {% endif %} +
+

+ The file '{{file_name}}' was + {% if source_url %} + {% trans "downloaded from " %} {{source_url}} + {% else %} + {% trans "uploaded " %} + {% endif %} + {% trans "on " %} {{created_date}} at {{created_time}}. +

+ + {% if metadata %} + +

Metadata

+
+
+ {% if metadata.publisher %} + Publisher: {{metadata.publisher.name}} ({{metadata.publisher.identifier}})
+ {% endif %} + {% if metadata.accessURL %} + Website that contains this Dataset: {{metadata.accessURL}}
+ {% endif %} + {% if metadata.identifier %} + Dataset Identifier: {{metadata.identifier}}
+ {% endif %} + {% if metadata.version %} + 360 Giving Schema Version: {{metadata.version}}
+ {% endif %} + {% if metadata.license %} + License: {{metadata.license}}
+ {% endif %} + {% if extension_metadatas %} + Extensions: {% for extension_metadata in extension_metadatas %}{{extension_metadata.id}} {% endfor %}
+ {% endif %} +
+
+ {% if metadata.publisher.logo %} + + {% endif %} +
+
+ {% endif %} + + {% if metadata.downloadURL or metadata.title %} +

+ {% if metadata.title %} + {{metadata.title}} + {% endif %} + {% if metadata.downloadURL %} + Original Data Download + {% endif %} +

+ {% endif %} + {% if metadata.description %} +

+ {{metadata.description}} +

+ {% endif %} + +

This file contains

+ +

{% trans "Use this section to get an overview of the data and check if this was what you were expecting to see." %}

+ + +

{% blocktrans %}Do these results look correct?{% endblocktrans %}

+ +

{% blocktrans %}If any of this information appears incorrect, the feedback below will help you to investigate what happened. {% endblocktrans %}

+ +

{% blocktrans %}About the feedback{% endblocktrans %}

+

{% blocktrans %}The feedback is split into several sections. Use the small arrow icon on the far right side to display or hide the details for each section.{% endblocktrans %}

+ +

A maximum of 10 additional checks can be displayed at once.

+

The check your data section allows you to review the data itself to help identify any issues.

+

If you make changes to the data prompted by this feedback, return here to upload the updated file for a new check. It may take several iterations to get the data to a state you are happy with and are ready to publish as open data.

+ +

Getting further help

+

You can read about common data errors and what causes them in the Common Errors section.

+

Visit our Data Quality Dashboard to see the data quality of 360Giving data as a whole and for each individual publisher. If you have already published data, you can view your own publisher page there too. It provides insights into the key features that make the data useful for analysis to help publishers to identify opportunities for their data to be improved.

+ + {% if conversion == 'flattenable' %} +
+ + {% csrf_token %} +
+ {% endif %} + +{% if conversion == 'unflatten' or conversion == 'flatten'%} +

+ {% if conversion_warning_messages or conversion_error %} + {% trans "Data conversion unsuccessful - " %} + {% else %} + {% trans "Data conversion successful" %} + {% endif %} + {% if conversion_warning_messages %} + {% blocktrans count n_warnings=conversion_warning_messages|length %}{{n_warnings}} Error has been found{% plural %}{{n_warnings}} Errors have been found{% endblocktrans %} + {% endif %} +

+ + {% if conversion == 'unflatten' %} +

{% trans "Before checking your data we needed to convert it to JSON" %}{% if conversion_error or conversion_warning_messages %}{% blocktrans %} but we were not able to do this successfully{% endblocktrans %}{% endif %}.

+ {% blocktrans %}This tool converts data into JSON because the 360Giving Data Standard uses a JSON Schema to describe the standard in a technical way.{% endblocktrans %}
+ {% if conversion_error %} + {% blocktrans %}If a file cannot be converted to JSON it indicates that it cannot be correctly mapped to the standard and needs to be reviewed. If this is the case you should check the file and re-upload it once you’ve fixed the problem. The conversion errors below will give an indication of where the issue is.{% endblocktrans %} + {% endif %} + {% else %} +

We have converted your JSON data into spreadsheet format.

+ {% if conversion_error %} +

{% blocktrans %}The JSON data could not be converted to spreadsheet due to the following error: {{conversion_error}}{% endblocktrans %}

+ {% include 'error_extra.html' %} + {% endif %} + {% endif %} + {% if conversion_warning_messages %} +
+

{% trans "Conversion errors:" %}

+ +

{% trans "Please resolve this error, as well as any others found, and test the data again." %}

+ {% endif %} +{% endif %} diff --git a/cove/cove_360/templates/cove_360/components/explore/usefulness.html b/cove/cove_360/templates/cove_360/components/explore/usefulness.html new file mode 100644 index 0000000..361314f --- /dev/null +++ b/cove/cove_360/templates/cove_360/components/explore/usefulness.html @@ -0,0 +1,94 @@ +{% load i18n %} +{% load humanize %} +{% load cove_tags %} + +{% if usefulness_checks_count %} +

Usefulness Opportunities

+ {% if usefulness_checks_errored %} +

{% blocktrans %}Usefulness checks failed due to an issue with the data. Fix some validation errors first.{% endblocktrans %}

+ {% endif %} + + {% if usefulness_checks %} +

+ We identified {% blocktrans count n_usefulness_checks=usefulness_checks_count %} usefulness opportunity{% plural %}{{n_usefulness_checks}} usefulness opportunities{% endblocktrans %}. + {% blocktrans %}These usefulness checks highlight ways the data could be made more useful.{% endblocktrans %} +

+ + {% blocktrans %} +

These are the key features that make the data useful for analysis, which we recommend including in 360Giving data whenever possible.

+

Receiving this feedback does not mean the data is invalid and it can be ignored when not relevant.

+

Visit our Data Quality Dashboard to see the data quality of 360Giving data as a whole and for each individual publisher. If you have already published data, you can view your own publisher page there too. It provides insights into the key features that make the data useful for analysis to help publishers to identify opportunities for their data to be improved.

+ {% endblocktrans %} + + + + + + + + + + {% for message, json_location, spreadsheet_location in usefulness_checks %} + + + + {% if file_type == 'xlsx' or file_type == 'csv' %} + + {% else %} + + {% endif %} + + {% endfor %} + +
{% trans 'Passed' %}{% trans 'Check Description' %} {% trans 'First 3 Locations' %}
close + {{ message.heading }}

{{ message.message }} +
+
    + {% for location in spreadsheet_location|slice:":3" %} +
  • Sheet: {{location.sheet}} Row: {{location.row_number}} {% if location.header %} Header: {{location.header}} {% endif %}
  • + {% endfor %} + {% if spreadsheet_location|length > 3 %} +
  • see all
  • + {% endif %} +
+
+
    + {% for location in json_location|slice:":3" %} +
  • {{location}}
  • + {% endfor %} + {% if json_location|length > 3 %} +
  • see all
  • + {% endif %} +
+
+ {% endif %} + {% for message, json_location, spreadsheet_location in usefulness_checks %} + {% with msg=message.heading %} + {% if file_type == 'json' %} + {% cove_modal_errors className="usefulness-checks-"|concat:forloop.counter modalTitle=msg errorList=json_location file_type=file_type full_table=False %} + {% else %} + {% cove_modal_errors className="usefulness-checks-"|concat:forloop.counter modalTitle=msg errorList=spreadsheet_location file_type=file_type full_table=False %} + {% endif %} + {% endwith %} + {% endfor %} + + {% else %} +

No usefulness opportunities detected.

+ {% endif %} + +

What is working well

+ {% if usefulness_checks_passed %} +

Congratulations, {{usefulness_checks_passed|length}} usefulness checks passed.

+ + + + + + {% for passed_test in usefulness_checks_passed %} + + + + + {% endfor %} +
PassedTest
check{{passed_test}}
+ {% endif %} \ No newline at end of file diff --git a/cove/cove_360/templates/cove_360/components/explore/validity.html b/cove/cove_360/templates/cove_360/components/explore/validity.html new file mode 100644 index 0000000..d23470b --- /dev/null +++ b/cove/cove_360/templates/cove_360/components/explore/validity.html @@ -0,0 +1,103 @@ +{% load i18n %} +{% load humanize %} +{% load cove_tags %} + +

Validation + {% if validation_errors or additional_codelist_values %} + Failed + {% else %} + Passed + {% endif %} +

+ +

+ {% if validation_errors or additional_closed_codelist_values %} + {% trans "Validation failed means that the data does not meet " %} + {% else %} + {% trans "Validation passed means that the data meets " %} + {% endif %} + {% blocktrans %}the requirements of the 360Giving Data Standard.{% endblocktrans %} + {% blocktrans %} Making sure your data uses the standard correctly is important. Otherwise it cannot be used alongside other valid 360Giving data and cannot be included in 360Giving tools, such as GrantNav and 360Insights.{% endblocktrans %} +

+ + {% if extension_metadatas %} +

{% trans "The 360Giving Data Standard was extended using these extensions:" %}

+
    + {% for extension_metadata in extension_metadatas %} +
  1. {{extension_metadata.title}} ({{extension_metadata.id}})
  2. + {% endfor %} +
+ {% endif %} + + {% if validation_errors or additional_closed_codelist_values %} +

{% trans "The following errors are preventing your data from being valid 360Giving data. Please use the feedback below to find and resolve the issues in your file" %}

+ + {% with validation_errors=validation_errors_grouped.required error_prefix='required-' %} + {% if validation_errors %} + +

Missing Fields

+

Some or all of your entries were missing fields which are required by the 360Giving Data Standard.

+ {% include "cove_360/validation_table.html" %} + + + {% for error_json, error_extra in validation_errors %} + {% with error=error_json|json_decode %} + {% cove_modal_errors className="validation-errors-"|concat:error_prefix|concat:forloop.counter modalTitle=error.message errorList=error_extra.values file_type=file_type full_table=True %} + {% endwith %} + {% endfor %} + {% endif %} + {% endwith %} + {% with validation_errors=validation_errors_grouped.format error_prefix='format-' %} + {% if validation_errors %} + + +

Incorrect Formats

+ + +

Some or all of your entries have incorrectly formatted data.

+ {% include "cove_360/validation_table.html" %} + + + {% for error_json, error_extra in validation_errors %} + {% with error=error_json|json_decode %} + {% cove_modal_errors className="validation-errors-"|concat:error_prefix|concat:forloop.counter modalTitle=error.message errorList=error_extra.values file_type=file_type full_table=True %} + {% endwith %} + {% endfor %} + {% endif %} + {% endwith %} + {% if additional_closed_codelist_values %} + + +

{% trans 'Codelist Errors' %}

+ + + +

Some or all of your entries do not use the 360Giving Data Standard codelists correctly.

+

{% blocktrans %}The fields below use closed codelists. When using these fields, you must use one of the pre-defined codelist values. If you use a value that is not on the relevant codelist, your data will not pass structural checks.{% endblocktrans %}

+ +

+ {% with additional_codelist_values=additional_closed_codelist_values %} + + {% endwith %} + + + {% endif %} + {% endif %} + {% with validation_errors=validation_errors_grouped.other error_prefix='other-' %} + {% if validation_errors %} + + +

Other

+ + +

Other validation errors.

+ {% include "cove_360/validation_table.html" %} + + + {% for error_json, error_extra in validation_errors %} + {% with error=error_json|json_decode %} + {% cove_modal_errors className="validation-errors-"|concat:error_prefix|concat:forloop.counter modalTitle=error.message errorList=error_extra.values file_type=file_type full_table=True %} + {% endwith %} + {% endfor %} + {% endif %} + {% endwith %} \ No newline at end of file diff --git a/cove/cove_360/templates/cove_360/components/explore_checking.html b/cove/cove_360/templates/cove_360/components/explore_checking.html new file mode 100644 index 0000000..83600bd --- /dev/null +++ b/cove/cove_360/templates/cove_360/components/explore_checking.html @@ -0,0 +1,112 @@ +{% load i18n %} {% load humanize %} {% load cove_tags %} + + + +
+
+
+
+
+

+ {{validation_and_closed_codelist_errors_count}} +

+

Validity errors to fix

+
+
+
+ +
+
+
+

{{quality_accuracy_checks_count}}

+

Potential accuracy issue

+
+
+
+ +
+
+
+

{{usefulness_checks_count }}

+

Usefulness opportunities

+
+
+
+
+ + +
+ + + + + +
+ {% include "cove_360/components/explore/summary.html" %} +
+ + + + + + +
+ +
\ No newline at end of file diff --git a/cove/cove_360/templates/cove_360/components/explore_publishing.html b/cove/cove_360/templates/cove_360/components/explore_publishing.html new file mode 100644 index 0000000..ce8d8de --- /dev/null +++ b/cove/cove_360/templates/cove_360/components/explore_publishing.html @@ -0,0 +1,116 @@ +{% load i18n %} + +

{% trans "Submit your data" %}

+ +
+
+

+ {{validation_and_closed_codelist_errors_count}} +

+

Validity errors to fix before submitting

+
+
+ +{% if data_status.can_publish %} +

{% trans "Submitting for: " %}{{publisher.name}}

+

{% trans "The data was checked and can now be submitted to the 360Giving Data Registry." %}

+

+ {% trans "Click the 'Submit your file' to fill out the 360Giving data file submission form. " %} + {% trans "Guidance about using the submission form." %} +

+
+ + +
+ + Submit your file + +{% endif %} {# Data passed, Domain not recognised/approved #} +{% if data_status.passed and not data_status.can_publish %} +

+ {% blocktrans %} Sorry you aren't able to submit this file because the domain + name of the website hosting your file ({{source_url_domain}}) is not + authorised for publishing 360Giving data. {% endblocktrans %} +

+

+ {% blocktrans %} Please email 360Giving Helpdesk via + support@threesixtygiving.org + with the link to the file you want to submit to the Data Registry. + {% endblocktrans %} +

+{% endif %} {# Validation failed #} {% if not data_status.passed %} +

+ {% blocktrans %}Sorry you aren't able to submit this file because it is not + valid 360Giving data.{% endblocktrans %} +

+

+ {% blocktrans %} Follow the feedback below to make the amendments needed to + your data. Once your data passes the Data Quality tool checks, upload the + updated file to your website and then restart the 360Giving data file + submission process. The data did not pass the checks and cannot be published. + See results below. {% endblocktrans %} +

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

Report

+{% include "cove_360/components/explore/summary.html" %} +
+{% include "cove_360/components/explore/validity.html" %} +
+{% include "cove_360/components/explore/accuracy.html" %} +
+{% include "cove_360/components/explore/usefulness.html" %} + + diff --git a/cove/cove_360/templates/cove_360/components/footer.html b/cove/cove_360/templates/cove_360/components/footer.html new file mode 100644 index 0000000..46c5319 --- /dev/null +++ b/cove/cove_360/templates/cove_360/components/footer.html @@ -0,0 +1,77 @@ +{% load i18n %} +{% load static %} + + \ No newline at end of file diff --git a/cove/cove_360/templates/cove_360/data_loading.html b/cove/cove_360/templates/cove_360/data_loading.html index 1b57d0f..acc8925 100644 --- a/cove/cove_360/templates/cove_360/data_loading.html +++ b/cove/cove_360/templates/cove_360/data_loading.html @@ -4,54 +4,56 @@ {% block explore_content %} -
-
-

Data processing is in progress

-

Upload data complete, data is now processing … - spinner -

-
    -
  • Converting data into machine readable format (JSON)
  • -
  • Running validation tests
  • -
  • Running quality tests
  • -
-
-
- -{% endblock %} - -{% block extrafooterscript %} - - {% endblock %} \ No newline at end of file diff --git a/cove/cove_360/templates/cove_360/error.html b/cove/cove_360/templates/cove_360/error.html new file mode 100644 index 0000000..899f0ed --- /dev/null +++ b/cove/cove_360/templates/cove_360/error.html @@ -0,0 +1,30 @@ +{% extends request.current_app_base_template %} +{% load i18n %} +{% block content %} + +
+
+ + {{ sub_title }} +
+
+ {{ msg | linebreaks }} + + {% include 'error_extra.html' %} +
+
+ + + + + +{% endblock %} + +{% block extrapiwik %} + +{% if piwik.dimension_map.page_type %} +_paq.push(['setCustomDimension', {{piwik.dimension_map.page_type}}, 'caught error']); +{% endif %} +{% endblock %} diff --git a/cove/cove_360/templates/cove_360/error_extra.html b/cove/cove_360/templates/cove_360/error_extra.html new file mode 100644 index 0000000..8be3804 --- /dev/null +++ b/cove/cove_360/templates/cove_360/error_extra.html @@ -0,0 +1,2 @@ +{% load i18n %} +

{% blocktrans %}If you think this is a bug, you can file an issue publicly on GitHub or {% endblocktrans %}{% trans "get in touch via email" %}{% if request.sentry.id %}, {% blocktrans %}referencing this error as {% endblocktrans %}{{ request.sentry.id }}{% endif %}. diff --git a/cove/cove_360/templates/cove_360/explore.html b/cove/cove_360/templates/cove_360/explore.html index 729f01a..9ccb540 100644 --- a/cove/cove_360/templates/cove_360/explore.html +++ b/cove/cove_360/templates/cove_360/explore.html @@ -1,828 +1,16 @@ {% extends 'explore.html' %} -{% load i18n %} -{% load humanize %} -{% load cove_tags %} -{% block header_button %} -{{block.super}} -

-{% endblock %} +{% if "self_publishing" in data_status.supplied_data.parameters %} + {% block hero_title %}Data submission tool{% endblock %} + {% block hero_blurb %}Submit your 360Giving data file be included in the 360Giving Data Registry{% endblock %} +{% endif %} -{% block explore_content %} +{% block content %} - {% block data_supplied %} +{% if "self_publishing" in data_status.supplied_data.parameters %} + {% include "cove_360/components/explore_publishing.html" %} +{% else %} + {% include "cove_360/components/explore_checking.html" %} +{% endif %} - {% if "self_publishing" in data_status.supplied_data.parameters %} -
-
-

- {% if data_status.can_publish %} - - {% endif %} - {% trans "Submit your data" %}

-
-
- {% if data_status.can_publish %} -

{% trans "Submitting for:" %} {{publisher.name}}

-

{% trans "The data was checked and can now be submitted to the 360Giving Data Registry." %}

-

{% trans "Click the 'Submit your file' to fill out the 360Giving data file submission form. " %} {% trans "Guidance about using the submission form." %}

- Submit your file - {% endif %} - - {# Data passed, Domain not recognised/approved #} - {% if data_status.passed and not data_status.can_publish %} -

- {% blocktrans %} - Sorry you aren't able to submit this file because the domain name of the website hosting your file ({{source_url_domain}}) is not authorised for publishing 360Giving data. - {% endblocktrans %} -

-

- {% blocktrans %} - Please email 360Giving Helpdesk via support@threesixtygiving.org with the link to the file you want to submit to the Data Registry. - {% endblocktrans %} -

- {% endif %} - - {# Validation failed #} - {% if not data_status.passed %} -

{% blocktrans %}Sorry you aren't able to submit this file because it is not valid 360Giving data.{% endblocktrans %}

-

- {% blocktrans %} - Follow the feedback below to make the amendments needed to your data. Once your data passes the Data Quality tool checks, upload the updated file to your website and then restart the 360Giving data file submission process. - The data did not pass the checks and cannot be published. See results below. - {% endblocktrans %} -

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

- - {% trans "Summary: Your data at a glance" %} - -

-
-
-
-

- {% trans "Use this section to get an overview of the data and check if this was what you were expecting to see." %} -

-
-

- {% trans "A file was " %} - {% if source_url %} - {% trans "downloaded from " %} {{source_url}} - {% else %} - {% trans "uploaded " %} - {% endif %} - {% trans "on " %} {{created_date}}. -

- - {% if metadata %} -
- {% if metadata.publisher.logo %} -
- -
- {% endif %} -
- {% if metadata.publisher %} - Publisher: {{metadata.publisher.name}} ({{metadata.publisher.identifier}})
- {% endif %} - {% if metadata.accessURL %} - Website that contains this Dataset: {{metadata.accessURL}}
- {% endif %} - {% if metadata.identifier %} - Dataset Identifier: {{metadata.identifier}}
- {% endif %} - {% if metadata.version %} - 360 Giving Schema Version: {{metadata.version}}
- {% endif %} - {% if metadata.license %} - License: {{metadata.license}}
- {% endif %} - {% if extension_metadatas %} - Extensions: {% for extension_metadata in extension_metadatas %}{{extension_metadata.id}} {% endfor %}
- {% endif %} -
-
-
- {% endif %} - - {% if metadata.downloadURL or metadata.title %} -

- {% if metadata.title %} - {{metadata.title}} - {% endif %} - {% if metadata.downloadURL %} - Original Data Download - {% endif %} -

- {% endif %} - {% if metadata.description %} -

- {{metadata.description}} -

- {% endif %} - -
-

This file contains

-
    -
  • - {% blocktrans count n_funders=grants_aggregates.distinct_funding_org_identifier|length|default:0 %}Data about {{n_funders}} funder{% plural %}Data about {{n_funders}} funders{% endblocktrans %} -
  • -
  • - {% blocktrans count n_grants=grants_aggregates.count|default:0 %}There is {{n_grants}} grant{% plural %}There are {{n_grants}} grants {% endblocktrans %} - {% blocktrans count n_recipients=grants_aggregates.distinct_recipient_org_identifier|length|default:0 %}to {{n_recipients}} recipient organisation and {% plural %}to {{n_recipients}} recipient organisations and{% endblocktrans %} - {% blocktrans count n_recipients_individuals=grants_aggregates.recipient_individuals_count|default:0 %}{{n_recipients_individuals}} to a recipient individual {% plural %}{{n_recipients_individuals}} to recipient individuals{% endblocktrans %}. -
  • -
  • - {% blocktrans count n_grants=grants_aggregates.count|default:0 %}The grant was awarded {% plural %}The grants were awarded {% endblocktrans %} - {% if grants_aggregates.min_award_date == grants_aggregates.max_award_date %} - {% blocktrans with start_date=grants_aggregates.min_award_date %}on {{start_date}}.{% endblocktrans %} - {% else %} - {% blocktrans with start_date=grants_aggregates.min_award_date end_date=grants_aggregates.max_award_date %}between {{start_date}} and {{end_date}}.{% endblocktrans %} -
  • - {% endif %} - {% if metadata.issued %} -
  • - The file was issued on {{metadata.issued|slice:":10"}} -
  • - {% endif %} - {% if metadata.modified %} -
  • - The file was modified on {{metadata.modified|slice:":10"}} -
  • - {% endif %} - {% for currency_code, currency_aggregates in grants_aggregates.currencies.items %} -
  • - {% if currency_aggregates.count == 1 %} - {% if currency_aggregates.count == grants_aggregates.count %} - {% trans "The grant" %} - {% else %} - {% trans "1 grant" %} - {% endif %} - {% blocktrans with amount_awarded=currency_aggregates.total_amount|intcomma currency_symbol=currency_aggregates.currency_symbol|safe %} was awarded in {{currency_code}} with a value of {{currency_symbol}}{{amount_awarded}}.{% endblocktrans %} - {% else %} - {% if currency_aggregates.count == grants_aggregates.count %} - {% trans "The grants" %} - {% else %} - {{currency_aggregates.count}} {% trans "grants" %} - {% endif %} - {% blocktrans with n_grants=currency_aggregates.count total_amount=currency_aggregates.total_amount|intcomma max_amount=currency_aggregates.max_amount|intcomma min_amount=currency_aggregates.min_amount|intcomma currency_symbol=currency_aggregates.currency_symbol|safe %} were awarded in {{currency_code}} with a total value of {{currency_symbol}}{{total_amount}} and individual awards ranging from {{currency_symbol}}{{min_amount}} (lowest) to {{currency_symbol}}{{max_amount}} (highest).{% endblocktrans %} - {% endif %} -
  • - {% endfor %} - {% if csv_encoding and csv_encoding != "utf-8-sig" %} -
  • - {% blocktrans %} This file is not 'utf-8' encoded (it is {{csv_encoding}} encoded).{% endblocktrans %} -
  • - {% endif %} -
- -
-

{% blocktrans %}Do these results look correct?{% endblocktrans %}

-
    -
  • {% blocktrans %}Do the numbers of funders, grants and recipients match what you expect?{% endblocktrans %}
  • -
  • {% blocktrans %}Are the dates for the right time period?{% endblocktrans %}
  • -
  • {% blocktrans %}Do the currency and total value figures show the correct amounts?{% endblocktrans %}
  • -
-

{% blocktrans %}If any of this information appears incorrect, the feedback below will help you to investigate what happened. {% endblocktrans %}

- -
-

{% blocktrans %}About the feedback{% endblocktrans %}

-

{% blocktrans %}The feedback is split into several sections. Use the small arrow icon on the far right side to display or hide the details for each section.{% endblocktrans %}

-
    -
  • {% blocktrans %}a red cross indicates warnings or errors. These types of issues must be resolved before the data can be published and used alongside other valid 360Giving data. {% endblocktrans %}
  • -
  • {% blocktrans %}a green tick indicates that the file is valid 360Giving data. {% endblocktrans %}
  • -
  • {% blocktrans %}a question mark indicates additional checks which suggest ways to improve the quality or usefulness of the data. {% endblocktrans %}
  • -
-

A maximum of 10 additional checks can be displayed at once.

-

The check your data section allows you to review the data itself to help identify any issues.

-

If you make changes to the data prompted by this feedback, return here to upload the updated file for a new check. It may take several iterations to get the data to a state you are happy with and are ready to publish as open data.

- -
-

Getting further help

-

You can read about common data errors and what causes them in the Common Errors section.

-

Visit our Data Quality Dashboard to see the data quality of 360Giving data as a whole and for each individual publisher. If you have already published data, you can view your own publisher page there too. It provides insights into the key features that make the data useful for analysis to help publishers to identify opportunities for their data to be improved.

- - {% if conversion == 'flattenable' %} -
- - {% csrf_token %} -
- {% endif %} -
-
-
- {% endblock data_supplied %} - - {% block conversion %} - {% if conversion == 'unflatten' or conversion == 'flatten'%} -
-
-

- {% if conversion_warning_messages or conversion_error %} - - {% trans "Data conversion unsuccessful - " %} - {% else %} - - {% trans "Data conversion successful" %} - {% endif %} - {% if conversion_warning_messages %} - {% blocktrans count n_warnings=conversion_warning_messages|length %}{{n_warnings}} Error has been found{% plural %}{{n_warnings}} Errors have been found{% endblocktrans %} - {% endif %} - -

-
-
-
- {% if conversion == 'unflatten' %} -

{% trans "Before checking your data we needed to convert it to JSON" %}{% if conversion_error or conversion_warning_messages %}{% blocktrans %} but we were not able to do this successfully{% endblocktrans %}{% endif %}.

-
{% blocktrans %}This tool converts data into JSON because the 360Giving Data Standard uses a JSON Schema to describe the standard in a technical way.{% endblocktrans %}
- {% if conversion_error %} - {% blocktrans %}If a file cannot be converted to JSON it indicates that it cannot be correctly mapped to the standard and needs to be reviewed. If this is the case you should check the file and re-upload it once you’ve fixed the problem. The conversion errors below will give an indication of where the issue is.{% endblocktrans %} - {% endif %} -
- {% else %} -

We have converted your JSON data into spreadsheet format.

- {% if conversion_error %} -

{% blocktrans %}The JSON data could not be converted to spreadsheet due to the following error: {{conversion_error}}{% endblocktrans %}

- {% include 'error_extra.html' %} - {% endif %} - {% endif %} - {% if conversion_warning_messages %} -
-

{% trans "Conversion errors:" %}

-
    - {% for warning_message in conversion_warning_messages %} -
  • {{warning_message}}
  • - {% endfor %} -
-

{% trans "Please resolve this error, as well as any others found, and test the data again." %}

- {% endif %} -
-
-
- {% endif %} - {% endblock conversion %} - - {% block validation %} -
-
-

- {% if validation_errors or additional_closed_codelist_values %} - - {% trans "This data does not use the 360Giving Data Standard correctly" %} {% blocktrans count n_errors=validation_and_closed_codelist_errors_count %} {{n_errors}} Error.{% plural %}{{n_errors}} Errors {% endblocktrans %} - {% else %} - - {% trans "This data uses the 360Giving Data Standard correctly" %} - {% endif %} - -

-
-
-
-

- {% if validation_errors or additional_closed_codelist_values %} - {% trans "Sorry your data is not yet using the 360Giving Data Standard. We used the " %} - {% else %} - {% trans "Congratulations! Your data is using the 360Giving Data Standard. We used the " %} - {% endif %} - 360Giving JSON Package Schema - {% trans "to check this." %} -

-
{% trans "This means that the data" %} - {% if validation_errors or additional_closed_codelist_values %} - {% trans " does not meet " %} - {% else %} - {% trans " meets " %} - {% endif %} - - {% blocktrans %}the requirements of the 360Giving Data Standard.{% endblocktrans %} - {% blocktrans %} Making sure your data uses the standard correctly is important. Otherwise it cannot be used alongside other valid 360Giving data and cannot be included in 360Giving tools, such as GrantNav and 360Insights.{% endblocktrans %} -
- - {% if extension_metadatas %} -

{% trans "The 360Giving Data Standard was extended using these extensions:" %}

-
    - {% for extension_metadata in extension_metadatas %} -
  1. {{extension_metadata.title}} ({{extension_metadata.id}})
  2. - {% endfor %} -
- {% endif %} - - {% if validation_errors or additional_closed_codelist_values %} -
-

 {% trans "The following errors are preventing your data from being valid 360Giving data. Please use the feedback below to find and resolve the issues in your file" %}

-
- {% with validation_errors=validation_errors_grouped.required error_prefix='required-' %} - {% if validation_errors %} -
-
-

Missing Fields

-
-
-

Some or all of your entries were missing fields which are required by the 360Giving Data Standard.

- {% include "cove_360/validation_table.html" %} -
-
- {% for error_json, error_extra in validation_errors %} - {% with error=error_json|json_decode %} - {% cove_modal_errors className="validation-errors-"|concat:error_prefix|concat:forloop.counter modalTitle=error.message errorList=error_extra.values file_type=file_type full_table=True %} - {% endwith %} - {% endfor %} - {% endif %} - {% endwith %} - {% with validation_errors=validation_errors_grouped.format error_prefix='format-' %} - {% if validation_errors %} -
-
-

Incorrect Formats

-
-
-

Some or all of your entries have incorrectly formatted data.

- {% include "cove_360/validation_table.html" %} -
-
- {% for error_json, error_extra in validation_errors %} - {% with error=error_json|json_decode %} - {% cove_modal_errors className="validation-errors-"|concat:error_prefix|concat:forloop.counter modalTitle=error.message errorList=error_extra.values file_type=file_type full_table=True %} - {% endwith %} - {% endfor %} - {% endif %} - {% endwith %} - {% if additional_closed_codelist_values %} -
-
-

{% trans 'Codelist Errors' %}

-
-
-
-

Some or all of your entries do not use the 360Giving Data Standard codelists correctly.

-

{% blocktrans %}The fields below use closed codelists. When using these fields, you must use one of the pre-defined codelist values. If you use a value that is not on the relevant codelist, your data will not pass structural checks.{% endblocktrans %}

-
-

- {% with additional_codelist_values=additional_closed_codelist_values %} -
{% include "additional_codelist_values.html" %}
- {% endwith %} -
-
- {% endif %} - {% endif %} - {% with validation_errors=validation_errors_grouped.other error_prefix='other-' %} - {% if validation_errors %} -
-
-

Other

-
-
-

Other validation errors.

- {% include "cove_360/validation_table.html" %} -
-
- {% for error_json, error_extra in validation_errors %} - {% with error=error_json|json_decode %} - {% cove_modal_errors className="validation-errors-"|concat:error_prefix|concat:forloop.counter modalTitle=error.message errorList=error_extra.values file_type=file_type full_table=True %} - {% endwith %} - {% endfor %} - {% endif %} - {% endwith %} -
-
-
- {% endblock validation %} - - - {% block quality_accuracy %} - {% if quality_accuracy_checks_count %} -
-
-

- - {% trans "Data Quality Check: Incorrect values" %} - {% blocktrans count n_quality_accuracy_checks=quality_accuracy_checks_count %}{{n_quality_accuracy_checks}} Incorrect value check{% plural %}{{n_quality_accuracy_checks}} Incorrect value checks{% endblocktrans %} - -

-
-
- {% if quality_accuracy_checks_errored %} -
-
-
- {% blocktrans %}Quality checks failed due to an issue with the data. Fix some validation errors first.{% endblocktrans %} -
-
-
- {% endif %} - {% if quality_accuracy_checks %} -

{% blocktrans %}These checks highlight areas where your data may be incorrect or need further attention.{% endblocktrans %}

-
-
- {% blocktrans %} -

For each check we give feedback on the issue and what steps may be taken to resolve it.

-

Receiving this feedback does not mean the data is invalid, and it can be ignored when not relevant.

- {% endblocktrans %} -
-
- - - - - - - - - {% for message, json_location, spreadsheet_location in quality_accuracy_checks %} - - - {% if file_type == 'xlsx' or file_type == 'csv' %} - - {% else %} - - {% endif %} - - {% endfor %} - -
{% trans 'Check Description' %} {% trans 'First 3 Locations' %}
- {{ message.heading }}
{{ message.message }} -
-
    - {% for location in spreadsheet_location|slice:":3" %} -
  • Sheet: {{location.sheet}} Row: {{location.row_number}} {% if location.header %} Header: {{location.header}} {% endif %}
  • - {% endfor %} - {% if spreadsheet_location|length > 3 %} -
  • see all
  • - {% endif %} -
-
-
    - {% for location in json_location|slice:":3" %} -
  • {{location}}
  • - {% endfor %} - {% if json_location|length > 3 %} -
  • see all
  • - {% endif %} -
-
- {% endif %} -
- {% for message, json_location, spreadsheet_location in quality_accuracy_checks %} - {% with msg=message.heading %} - {% if file_type == 'json' %} - {% cove_modal_errors className="quality_accuracy-checks-"|concat:forloop.counter modalTitle=msg errorList=json_location file_type=file_type full_table=False %} - {% else %} - {% cove_modal_errors className="quality_accuracy-checks-"|concat:forloop.counter modalTitle=msg errorList=spreadsheet_location file_type=file_type full_table=False %} - {% endif %} - {% endwith %} - {% endfor %} -
- {% endif %} - {% endblock quality_accuracy %} - - {% block usefulness %} - {% if usefulness_checks_count %} -
-
-

- - {% trans "Data Quality Check: Usefulness" %} - {% blocktrans count n_usefulness_checks=usefulness_checks_count %} Usefulness checks{% plural %}{{n_usefulness_checks}} Usefulness checks{% endblocktrans %} - -

-
-
- {% if usefulness_checks_errored %} -
-
-
- {% blocktrans %}Usefulness checks failed due to an issue with the data. Fix some validation errors first.{% endblocktrans %} -
-
-
- {% endif %} - {% if usefulness_checks %} -

{% blocktrans %}These checks highlight ways the data could be made more useful.{% endblocktrans %}

-
-
- {% blocktrans %} -

These are the key features that make the data useful for analysis, which we recommend including in 360Giving data whenever possible.

-

Receiving this feedback does not mean the data is invalid and it can be ignored when not relevant.

-

Visit our Data Quality Dashboard to see the data quality of 360Giving data as a whole and for each individual publisher. If you have already published data, you can view your own publisher page there too. It provides insights into the key features that make the data useful for analysis to help publishers to identify opportunities for their data to be improved.

- - {% endblocktrans %} -
-
- - - - - - - - - {% for message, json_location, spreadsheet_location in usefulness_checks %} - - - {% if file_type == 'xlsx' or file_type == 'csv' %} - - {% else %} - - {% endif %} - - {% endfor %} - -
{% trans 'Check Description' %} {% trans 'First 3 Locations' %}
- {{ message.heading }}
{{ message.message }} -
-
    - {% for location in spreadsheet_location|slice:":3" %} -
  • Sheet: {{location.sheet}} Row: {{location.row_number}} {% if location.header %} Header: {{location.header}} {% endif %}
  • - {% endfor %} - {% if spreadsheet_location|length > 3 %} -
  • see all
  • - {% endif %} -
-
-
    - {% for location in json_location|slice:":3" %} -
  • {{location}}
  • - {% endfor %} - {% if json_location|length > 3 %} -
  • see all
  • - {% endif %} -
-
- {% endif %} -
- {% for message, json_location, spreadsheet_location in usefulness_checks %} - {% with msg=message.heading %} - {% if file_type == 'json' %} - {% cove_modal_errors className="usefulness-checks-"|concat:forloop.counter modalTitle=msg errorList=json_location file_type=file_type full_table=False %} - {% else %} - {% cove_modal_errors className="usefulness-checks-"|concat:forloop.counter modalTitle=msg errorList=spreadsheet_location file_type=file_type full_table=False %} - {% endif %} - {% endwith %} - {% endfor %} -
- {% endif %} - {% endblock usefulness %} - - {% block additional_fields %} - {% if additional_fields_count %} -
-
-

- - {% trans "Additional Fields" %} - {% blocktrans count n_additional_fields=additional_fields_count %} Additional fields{% plural %}{{n_additional_fields}} Additional fields{% endblocktrans %} - -

-
-
- {% if data_only %} -
-

{% blocktrans %} Additional fields which do not use 360Giving Data Standard titles were found in your data.{% endblocktrans %}

-

{% blocktrans %} You are welcome to include additional fields in your data, however please check the field title(s) shown below to confirm if they are intended additions and not the result of spelling or formatting mistakes in the title. Please refer to the Common Errors section to see the correctly formatted field titles for the required fields. {% endblocktrans %}

- {% include "additional_fields_table.html" %} - {% endif %} -
- {% for message, json_location, spreadsheet_location in additional_checks %} - {% with msg=message.heading %} - {% if file_type == 'json' %} - {% cove_modal_errors className="additional-checks-"|concat:forloop.counter modalTitle=msg errorList=json_location file_type=file_type full_table=False %} - {% else %} - {% cove_modal_errors className="additional-checks-"|concat:forloop.counter modalTitle=msg errorList=spreadsheet_location file_type=file_type full_table=False %} - {% endif %} - {% endwith %} - {% endfor %} -
- {% endif %} - {% endblock additional_fields %} - - {% block review %} -
-
-

- {% trans "Check your data" %} {% blocktrans count n_grants=grants_aggregates.count|default:0 %}{{n_grants}} Grant{% plural %}{{n_grants}} Grants{% endblocktrans %} - -

-
-
-
-

{% trans "Review your data." %}

-
- We recommend having a look over your data here. This table shows how the data looks after it has been converted. - {% if conversion_warning_messages or validation_errors or additional_fields_count %} - If anything seems unexpected this may be caused by any errors or warnings shown above. - {% endif %} -
-

{% trans "Click on the numbers below to see a list of unique identifiers." %}

- -
-
-
-
-
-

- {% trans 'Grants Table' %} -

-
-
- - - - - - - - - - - - {% for grant in grants|slice:":5000" %} - - - - - - - - {% endfor %} - -
idtitlecurrencyamountAwardeddateModified
{{grant.id}}{{grant.title }}{{grant.currency}}{{grant.amountAwarded}}{{grant.dateModified}}
-
-
-
-
-
-
-
- {% cove_modal_list className="unique-ids" modalTitle="Unique IDs" itemList=grants_aggregates.unique_ids %} - {% cove_modal_list className="distinct-funding-org-identifier" modalTitle="Funder Organisation IDs" itemList=grants_aggregates.distinct_funding_org_identifier %} - {% cove_modal_list className="distinct-recipient-org-identifier" modalTitle="Recipient Organisation IDs" itemList=grants_aggregates.distinct_recipient_org_identifier %} - {% endblock review %} - - {% block download_and_share %} -
-
-

- {% trans "Download data and share these results" %} - -

-
-
-
-

Share

-

{% trans "You can share these test results with others by using the following url:" %}

-
- {{ current_url }} -

{% trans "If your data is not suitable for sharing publicly, then you should treat this url with care. Only share it with people who have permission to access the data." %}

-
-

{% trans "After 7 days, the link will expire and the data will be deleted from our servers - so the results will no longer be available. You can revisit these results until then." %}

-

Download

-

{% trans "This application converts data in Excel and CSV format into JSON format, allowing you download the converted version." %}

-

{% trans "If your file is originally in JSON format select ‘Convert to Spreadsheet’ in the summary section to create an Excel version of the file." %}

- {% if not conversion_error and conversion != 'flattenable' %} -

{% trans "We provide the following formats to download:" %}

- - {% else %} -

(No downloads available as the conversion hasn't happened, or has errored).

- {% endif %} - {% if user.is_authenticated %} - - {% endif %} -
-
-
- {% endblock download_and_share %} - -{% endblock explore_content %} - -{% block extrafooterscript %} - {{ block.super }} - -{% endblock extrafooterscript %} - - -{% comment %} - -{% cove_modal_list className="duplicate-id-modal" modalTitle="Duplicate IDs" itemList=grants_aggregates.duplicate_ids %} -{% cove_modal_list className="funding-org-identifier-prefixes" modalTitle="Funding Organisation ID Prefixes" itemList=grants_aggregates.funding_org_identifier_prefixes %} -{% cove_modal_list className="funding-org-identifiers-unrecognised-prefixes" modalTitle="Unrecognised Funding Organisation ID Prefixes" itemList=grants_aggregates.funding_org_identifiers_unrecognised_prefixes %} -{% cove_modal_list className="recipient-org-identifier-prefixes" modalTitle="Recipient Organisation ID Prefixes" itemList=grants_aggregates.recipient_org_identifier_prefixes %} -{% cove_modal_list className="recipient-org-identifiers-unrecognised-prefixes" modalTitle="Unrecognised Recipient Organisation ID Prefixes" itemList=grants_aggregates.recipient_org_identifiers_unrecognised_prefixes %} - - -{% endcomment %} +{% endblock %} \ No newline at end of file diff --git a/cove/cove_360/templates/cove_360/footer.html b/cove/cove_360/templates/cove_360/footer.html deleted file mode 100644 index 2b9cc90..0000000 --- a/cove/cove_360/templates/cove_360/footer.html +++ /dev/null @@ -1,89 +0,0 @@ -{% load i18n %} -{% load static %} - - diff --git a/cove/cove_360/templates/cove_360/home.html b/cove/cove_360/templates/cove_360/home.html new file mode 100644 index 0000000..62228dd --- /dev/null +++ b/cove/cove_360/templates/cove_360/home.html @@ -0,0 +1,65 @@ +{% extends 'base.html' %} +{% block 'content' %} +
+
+

{% blocktrans %}How to check your data{% endblocktrans %}

+ {% comment %}Translators: Paragraph that describes the application{% endcomment %} +

{% blocktrans %}Upload, paste or provide a link to data using the 360Giving Data Standard format, and this application will check whether it is valid 360Giving data, and provide feedback so that you can check for errors and see ways to improve its quality.{% endblocktrans %}

+

{% blocktrans %}The tool will convert between JSON, Excel and CSV formats, allowing you to download the original file, and the converted versions.{% endblocktrans %}

+

{% blocktrans %}This tool will: {% endblocktrans %}

+

{% blocktrans %} Check your data is valid.{% endblocktrans %}

+

{% blocktrans %}The term ‘valid‘ means the data includes the 10 core fields and the information has all the correct data formatting that is required by 360Giving Data Standard. When it passes these checks, you will know that it is formatted for use alongside other valid 360Giving data and can be included in 360Giving tools, such as GrantNav and 360Insights.{% endblocktrans %}

+

{% blocktrans %}It will not: {% endblocktrans %}

+

{% blocktrans %} Check your data is accurate.{% endblocktrans %}

+

{% blocktrans %} Check the data against your own open data policy.{% endblocktrans %}

+

{% blocktrans %} This means there may be further checks you need to carry out to make sure the information is accurate, and that the data does not include information that is unsuitable for publishing as open data. Read more about what to consider when publishing open grants data.{% endblocktrans %}

+ {% if request.path == "/" %} +

{% blocktrans %}Further guidance{% endblocktrans %}

+

{% blocktrans %}Read about common data errors and what causes them in the Common Errors section.{% endblocktrans %}

+

{% blocktrans %}To preview how this tool works, try loading some sample data.{% endblocktrans%}

+ {% endif %} +

{% blocktrans %}Formats{% endblocktrans %}

+

{% blocktrans %}The application accepts data in the formats set out in the {% endblocktrans %}360Giving Data Standard guidance.

+

{% blocktrans %}Acceptable files are: {% endblocktrans %}

+
    +
  • {% blocktrans %}Summary Spreadsheet - OpenDocument Spreadsheet, Excel, CSV (UTF-8, Windows-1252 and ISO-8859-1 encodings supported){% endblocktrans %}
  • +
  • {% blocktrans %}JSON built to the 360Giving JSON schema (UTF-8 encoding supported){% endblocktrans %}
  • +
  • {% blocktrans %}Multi-table data package - Excel{% endblocktrans %}
  • +
+
+
+ +
+
+

{% blocktrans %}How to submit your data{% endblocktrans %}

+

{% blocktrans %} + Once 360Giving data has been published by an organisation, the file must be added to the 360Giving Data Registry so that the data to appear in 360Giving’s tools such as GrantNav and 360Insights. + {% endblocktrans %} +

+

{% blocktrans %} + Publishers of 360Giving data can add their valid 360Giving data files to the Data Registry using the 360Giving data file submission form. + {% endblocktrans %} +

+

{% blocktrans %}The submission form allows users to:{% endblocktrans %}

+
    +
  • Update an existing Data Registry entry with an updated version of an existing file
  • +
  • Add an entry for a new file to the Data Registry
  • +
+

Only publishers with an authorised website domain can use this submission process.

+ +

Authorised domains

+

By default, the website domain used by existing publishers to host their 360Giving data files will be authorised.

+

Organisations that publish 360Giving data for the first time can also use the 360Giving data file submission process once they have registered their website domain with 360Giving. To register to your website domain prior to publishing for the first time please contact 360Giving Helpdesk via support@threesixtygiving.org.

+

Publishers can opt out of authorising their website domain and using the 360Giving data file submission process on request.

+

Which domains are not authorised?

+

Data files published on multi-user hosting platforms like open data repositories, or file sharing services Google Sheets or Dropbox, cannot be authorised for use with the 360Giving data file submission process because the domain cannot be authorised as being unique to a particular organisation.

+

Files published in this way can be added to the 360Giving Data Registry by emailing 360Giving Helpdesk via support@threesixtygiving.org.

+

Further guidance

+

Read our full guidance on how to use the 360Giving data submission process.

+ +
+
+ + + +{% endblock %} \ No newline at end of file diff --git a/cove/cove_360/templates/cove_360/input.html b/cove/cove_360/templates/cove_360/input.html index be8bbd8..eaab486 100644 --- a/cove/cove_360/templates/cove_360/input.html +++ b/cove/cove_360/templates/cove_360/input.html @@ -1,139 +1,86 @@ {% extends request.current_app_base_template %} -{% load bootstrap3 %} {% load i18n %} -{# For original input.html see lib-cove-web/cove/templates/input.html #} +{% load bootstrap3 %} {# this is needed for lib-cove-web stuff #} +{% block content %} -{% block precontent %} -
-
-

Check your data

-

Upload or provide a link to a file, or paste JSON to check and convert your data and get feedback on whether it is valid 360Giving data.

-
-
-{% endblock %} + +

Check your data

+

Upload or provide a link to a file, or paste JSON to check and convert your data and get feedback on whether it is valid 360Giving data.

-{% block content %} - -
+
{% if 'upload' in input_methods %} -
- -
-
-
{% csrf_token %} - {% bootstrap_form forms.upload_form %} - {% buttons %} - - {% endbuttons %} -
-
-
-
+ + + {% trans "Upload" %} + + {% endif %} + {% if 'url' in input_methods %} -
- -
-
-
{% csrf_token %} - {% bootstrap_form forms.url_form %} - {% buttons %} - - {% endbuttons %} -
-
-
-
+ + + {% trans "Link" %} + + {% endif %} + {% if 'text' in input_methods %} -
- -
-
-
{% csrf_token %} - {% bootstrap_form forms.text_form %} - {% buttons %} - - {% endbuttons %} -
-
-
+ + + {% trans "Paste" %} + + {% endif %} -
+ +
-{% endblock %} -{% block postcontent %} -{% if DATA_SUBMISSION_ENABLED %} -
-
-

Submit your data

-

Submit your 360Giving data file to the 360Giving Data Registry. Your file will also be checked to make sure you are submitting valid 360Giving data.

+{% if 'upload' in input_methods %} +
+
{% csrf_token %} + {% bootstrap_form forms.upload_form %} + {% buttons %} -
-
+ + {% endbuttons %} + +
+{% endif %} -
-
-
- {% csrf_token %} - -
- - -
-
- -

Read our guidance on how to submit your data.

-
-
-
+{% if 'url' in input_methods %} + {% endif %} -{% endblock %} -{% block extrafooterscript %} - -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/cove/cove_360/templates/cove_360/input_old.html b/cove/cove_360/templates/cove_360/input_old.html new file mode 100644 index 0000000..5336ef3 --- /dev/null +++ b/cove/cove_360/templates/cove_360/input_old.html @@ -0,0 +1,42 @@ +{% extends "input_base.html" %} + +{% block precontent %} +
+
+

Check your data

+

Upload or provide a link to a file, or paste JSON to check and convert your data and get feedback on whether it is valid 360Giving data.

+
+
+{% endblock %} + +{% block postcontent %} +{% if DATA_SUBMISSION_ENABLED %} +
+
+

Submit your data

+

Submit your 360Giving data file to the 360Giving Data Registry. Your file will also be checked to make sure you are submitting valid 360Giving data.

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

Read our guidance on how to submit your data.

+
+
+
+
+{% endif %} + +{% endblock %} diff --git a/cove/cove_360/templates/cove_360/modal_errors.html b/cove/cove_360/templates/cove_360/modal_errors.html new file mode 100644 index 0000000..373fb95 --- /dev/null +++ b/cove/cove_360/templates/cove_360/modal_errors.html @@ -0,0 +1,68 @@ +{% load i18n %} +{% load cove_tags %} + diff --git a/cove/cove_360/templates/cove_360/modal_list.html b/cove/cove_360/templates/cove_360/modal_list.html new file mode 100644 index 0000000..ada43a5 --- /dev/null +++ b/cove/cove_360/templates/cove_360/modal_list.html @@ -0,0 +1,15 @@ + diff --git a/cove/cove_360/templates/cove_360/more_info.html b/cove/cove_360/templates/cove_360/more_info.html index 6499417..4baac63 100644 --- a/cove/cove_360/templates/cove_360/more_info.html +++ b/cove/cove_360/templates/cove_360/more_info.html @@ -31,15 +31,3 @@

{% blocktrans %}More Information {% endblocktrans %}

- diff --git a/cove/cove_360/templates/cove_360/page_header.html b/cove/cove_360/templates/cove_360/page_header.html new file mode 100644 index 0000000..90da630 --- /dev/null +++ b/cove/cove_360/templates/cove_360/page_header.html @@ -0,0 +1,38 @@ +{% load i18n %} +{% block page_header %} + +{% endblock %} diff --git a/cove/cove_360/templates/cove_360/publisher_not_found.html b/cove/cove_360/templates/cove_360/publisher_not_found.html index fe396f8..f1949a3 100644 --- a/cove/cove_360/templates/cove_360/publisher_not_found.html +++ b/cove/cove_360/templates/cove_360/publisher_not_found.html @@ -1,30 +1,25 @@ -{% extends "explore.html" %} +{% extends "base.html" %} {% load i18n %} {% block content %} -
-
-

- {% if data_status.can_publish %} - - {% endif %} - {% trans "Submit your data" %}

-
-
-

{% blocktrans %}Sorry you aren't able to submit this file because the domain name of the website hosting your file ({{source_url_domain}}) is not authorised for publishing 360Giving data.{% endblocktrans %}

-

{% blocktrans %}Please email 360Giving helpdesk via support@threesixtygiving.org with the link to the file you want to submit to the Data Registry.{% endblocktrans %}

-
-
+

Problem submitting your data

+
+

{% blocktrans %}Sorry you aren't able to submit this file because the domain name of the website hosting your file + ({{source_url_domain}}) is not authorised for publishing 360Giving data.{% endblocktrans %}

+

{% blocktrans %}Please email 360Giving helpdesk via support@threesixtygiving.org with the link to the file you want to + submit to the Data Registry.{% endblocktrans %}

+
- + _paq.push(['trackEvent', 'Status', validation, source]); + _paq.push(['trackPageView']); + }) + {% endblock %} diff --git a/cove/cove_360/templates/cove_360/publishing.html b/cove/cove_360/templates/cove_360/publishing.html new file mode 100644 index 0000000..8c01537 --- /dev/null +++ b/cove/cove_360/templates/cove_360/publishing.html @@ -0,0 +1,27 @@ +{% extends request.current_app_base_template %} + +{% block hero_title %}Data submission tool{% endblock %} +{% block hero_blurb %}Submit your 360Giving data file to be included in the 360Giving Data Registry and tools{% endblock %} + +{% block content %} + +{% if DATA_SUBMISSION_ENABLED %} +

Submit your data

+

Submit your 360Giving data file to the 360Giving Data Registry. The file will be checked using the Data Quality Tool to check it is valid 360Giving data.

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

Read our guidance on how to submit your data.

+{% else %} +

Data submission for publishing is not enabled on this instance of the Data Quality Tool.

+{% endif %} + +{% endblock %} \ No newline at end of file diff --git a/cove/cove_360/templates/cove_360/stats.html b/cove/cove_360/templates/cove_360/stats.html new file mode 100644 index 0000000..b94c08e --- /dev/null +++ b/cove/cove_360/templates/cove_360/stats.html @@ -0,0 +1,35 @@ +{% extends 'base.html' %} +{% load i18n %} +{% block content %} +

{% trans "Usage stats" %}

+ + + + + + + + + + + + + {% for num_days, total, by_form in upload_by_time_by_form %} + + + + + + + + {% endfor %} + + + + + + + + +
{% trans "Upload" %}{% trans "Link" %}{% trans "Paste" %}{% trans "Total" %}
{% blocktrans %}Last{% endblocktrans %} {{num_days}} {% blocktrans %}days{% endblocktrans %}{{by_form.upload_form|default:"0"}}{{by_form.url_form|default:"0"}}{{by_form.text_form|default:"0"}}{{total}}
{% trans "Ever" %}{{total_by_form.upload_form|default:"0"}}{{total_by_form.url_form|default:"0"}}{{total_by_form.text_form|default:"0"}}{{uploaded}}
+{% endblock content %} diff --git a/cove/cove_360/templates/cove_360/terms.html b/cove/cove_360/templates/cove_360/terms.html new file mode 100644 index 0000000..cae6974 --- /dev/null +++ b/cove/cove_360/templates/cove_360/terms.html @@ -0,0 +1,31 @@ +{% extends 'base.html' %} +{% load i18n %} +{% block content %} + {% with app=request.current_app %} +
+ {% comment %} + The content is split into many small templates. + This is so if one cove instance wants to change only one small bit of the page, they can do so by providing replacement templates of only the bit they want to change. + For example, a cove instance may want to keep most of the page the same but add legal content for another tracker. + {% endcomment %} + + {% include "terms_conditions.html" %} + + {% include "terms_cookies.html" %} + + {% include "terms_privacy.html" %} + + {% include "terms_trackers.html" %} + + {% include "terms_data_uploaded.html" %} + + {% include "terms_data_deleting.html" %} + + {% include "terms_security.html" %} + + {% include "terms_links.html" %} + + {% include "terms_disclaimer.html" %} +
+ {% endwith %} +{% endblock %} diff --git a/cove/cove_360/templates/cove_360/terms_conditions.html b/cove/cove_360/templates/cove_360/terms_conditions.html new file mode 100644 index 0000000..9e35206 --- /dev/null +++ b/cove/cove_360/templates/cove_360/terms_conditions.html @@ -0,0 +1,17 @@ + +

Terms & conditions

+ +{% include "terms_conditions_intro.html" %} + +

The use of this website is subject to the following terms of use:

+ +

The content of the pages of this website is for your general information and use only. It is subject to change without notice.

+ +

Neither we nor any third parties provide any warranty or guarantee as to the accuracy, timeliness, performance, completeness or suitability of the information and materials found or offered on this website for any particular purpose. You acknowledge that such information and materials may contain inaccuracies or errors and we expressly exclude liability for any such inaccuracies or errors to the fullest extent permitted by law. +Your use of any information or materials on this website is entirely at your own risk, for which we shall not be liable. It shall be your own responsibility to ensure that any products, services or information available through this website meet your specific requirements. +This website contains material which is owned by or licensed to us. This material includes, but is not limited to, the design, layout, look, appearance and graphics. Reproduction is prohibited other than in accordance with the copyright notice, which forms part of these terms and conditions. +All trademarks reproduced in this website which are not the property of, or licensed to, the operator are acknowledged on the website. +Unauthorised use of this website may give rise to a claim for damages and/or be a criminal offence. +From time to time this website may also include links to other websites. These links are provided for your convenience to provide further information. They do not signify that we endorse the website(s). We have no responsibility for the content of the linked website(s). +Your use of this website and any dispute arising out of such use of the website is subject to the laws of England, Northern Ireland, Scotland and Wales.

+ diff --git a/cove/cove_360/templates/cove_360/terms_conditions_intro.html b/cove/cove_360/templates/cove_360/terms_conditions_intro.html new file mode 100644 index 0000000..ba37058 --- /dev/null +++ b/cove/cove_360/templates/cove_360/terms_conditions_intro.html @@ -0,0 +1,22 @@ +

+This web application is free software designed to help people check data published to the +{% if app == 'cove_360' %}360Giving Standard.{% endif %} +{% if app == 'cove_iati' %}IATI data standard.{% endif %} +

+ +

It is offered as service WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

+ +

+If you continue to browse and use this website, you are agreeing to comply with and be bound by the following terms and conditions of use, which together with our privacy notice govern + {% if app == 'cove_360' %}360Giving's{% endif %} + {% if app == 'cove_iati' %}Open Data Services Co-operative Limited's{% endif %} + relationship with you in relation to this website. If you disagree with any part of these terms and conditions, please do not use our website. +

+ +{% if app == 'cove_iati' %} +

The term 'Open Data Services Co-operative Limited' or 'us' or 'we' refers to the owner of the website. Our company registration number is 09506232. Our registered address is 1st Floor, Holyoake House, Hanover Street, Manchester, Greater Manchester, England, M60 0AS. You can contact us by email company@opendataservices.coop. There is more company information on the Open Data Services Co-operative Limited page at Open Corporates. The term 'you' refers to the user or viewer of our website.

+{% elif app == 'cove_360' %} +

The term ‘360Giving’ or ‘us’ or ‘we’ refers to the owner of the website. Our company registration number is 09668396. Our registered address is 360Giving, c/o Esmée Fairbairn Foundation, King's Place, 90 York Way, London, N1 9AG. You can contact us by email info@threesixtygiving.org.

+

The site is operated by Open Data Services Co-operative Limited.

+

The term 'Open Data Services Co-operative Limited' refers to the operator of the website on behalf of 360Giving. Open Data Services Co-operative Limited's company registration number is 09506232. Their registered address is 1st Floor, Holyoake House, Hanover Street, Manchester, Greater Manchester, England, M60 0AS. Email: company@opendataservices.coop

+{% endif %} diff --git a/cove/cove_360/templates/cove_360/terms_cookies.html b/cove/cove_360/templates/cove_360/terms_cookies.html new file mode 100644 index 0000000..1dbc9be --- /dev/null +++ b/cove/cove_360/templates/cove_360/terms_cookies.html @@ -0,0 +1,37 @@ + +

How we use cookies

+

A cookie is a small file which asks permission to be placed on your computer's hard drive. Once you agree, the file is added and the cookie helps analyse web traffic or lets you know when you visit a particular site.

+ +

Cookies allow web applications to respond to you as an individual. The web application can tailor its operations to your needs, likes and dislikes by gathering and remembering information about your preferences. A cookie in no way gives us access to your computer or any information about you, other than the data you choose to share with us.

+ +

You can choose to accept or decline cookies. Most web browsers automatically accept cookies, but you can usually modify your browser setting to decline cookies if you prefer. This may prevent you from taking full advantage of the website.

+ +

In this website we use cookies to:

+ +
    +
  • Help us analyse how our website is used.
  • +
  • To ensure other sites can’t “forge” requests.
  • +
  • Remember your choices within the application, for your convenience.
  • +
+ +{% include "terms_cookies_we_use.html" %} + + +

If you do allow cookies to be used, Matomo uses 1st party cookies, set on the domain of this website. Cookies created by Matomo start with:

+
    +
  • _pk_ref
  • +
  • _pk_cvar
  • +
  • _pk_id
  • +
  • _pk_ses
  • +
+ +{% include "terms_cookies_links.html" %} + + +

The application is built using Django and we use that framework to set the following cookies:

+
    {% comment %}Translators: csrftoken and sessionid are names of cookies and do not need translation {% endcomment %} +
  • csrftoken - (to prevent cross site scripting attacks https://docs.djangoproject.com/en/1.8/ref/csrf/#how-it-works)
  • +
  • sessionid - (you will get this if you interact with the application, so that we can save the things you have done, e.g. select a language)"
  • +
+ +

If you choose not to accept these cookies the application may not work for you.

diff --git a/cove/cove_360/templates/cove_360/terms_cookies_link_matmo.html b/cove/cove_360/templates/cove_360/terms_cookies_link_matmo.html new file mode 100644 index 0000000..b446b2a --- /dev/null +++ b/cove/cove_360/templates/cove_360/terms_cookies_link_matmo.html @@ -0,0 +1 @@ +

See: http://piwik.org/faq/general/faq_146/ for more information.

diff --git a/cove/cove_360/templates/cove_360/terms_cookies_links.html b/cove/cove_360/templates/cove_360/terms_cookies_links.html new file mode 100644 index 0000000..a3afe6c --- /dev/null +++ b/cove/cove_360/templates/cove_360/terms_cookies_links.html @@ -0,0 +1,4 @@ +{% include "terms_cookies_link_matmo.html" %} + +{% include "terms_cookies_link_google_analytics.html" %} + diff --git a/cove/cove_360/templates/cove_360/terms_cookies_we_use.html b/cove/cove_360/templates/cove_360/terms_cookies_we_use.html new file mode 100644 index 0000000..a200a7c --- /dev/null +++ b/cove/cove_360/templates/cove_360/terms_cookies_we_use.html @@ -0,0 +1,5 @@ +

+ We use Matomo {% if google_analytics_id %}and Google Analytics{% endif %} to analyse usage of our website (see "Understanding website visitor and traffic patterns" section below). + This uses cookies to identify you (anonymously) as the same user, so that we can analyse our web traffic better. + E.g. it allows us to count how many users we have, instead of just total page views or analyse what pages people commonly visit together. +

diff --git a/cove/cove_360/templates/cove_360/terms_data_deleting.html b/cove/cove_360/templates/cove_360/terms_data_deleting.html new file mode 100644 index 0000000..f9026d8 --- /dev/null +++ b/cove/cove_360/templates/cove_360/terms_data_deleting.html @@ -0,0 +1,9 @@ + +

Deleting our copies of the files

+

When you provide data to the application we store the data you have provided in order to process it for you. We also enable derived versions of the data to be downloaded. Those derived versions and the original data are stored on our server.

+ +

After a period of time we will delete those files from our server, meaning they are no-longer available for download.

+ +

Information about how long files will be stored is made available to users directly through the interface, but will be for no longer than one year from the date of submission.

+ +

If you believe that any information we are holding on you is incorrect or incomplete, please write to or email us as soon as possible at the above address. We will promptly correct any information found to be incorrect.

diff --git a/cove/cove_360/templates/cove_360/terms_data_uploaded.html b/cove/cove_360/templates/cove_360/terms_data_uploaded.html new file mode 100644 index 0000000..4d15ff6 --- /dev/null +++ b/cove/cove_360/templates/cove_360/terms_data_uploaded.html @@ -0,0 +1,10 @@ + +

Data uploaded to this website

+ +

This application is designed so that people can submit files to the application, allow the application to process them and to then display information about them, generate alternative file formats of the original data, and provide those files for download.

+ +

Please do not submit any non-public personal data to this application.

+ +

We do not make use of any of the data within the files for purposes other than to create reports for you about the data you have submitted and to review the operation and output of the website.

+ +

We do create and store metadata about your use of the application, and about the files/data that you have uploaded in order to monitor how the application is being used.

diff --git a/cove/cove_360/templates/cove_360/terms_disclaimer.html b/cove/cove_360/templates/cove_360/terms_disclaimer.html new file mode 100644 index 0000000..2eecc27 --- /dev/null +++ b/cove/cove_360/templates/cove_360/terms_disclaimer.html @@ -0,0 +1,6 @@ + +

Website disclaimer

+

The information contained in this website is for general information purposes only. The information is provided by us and while we endeavour to keep the information up to date and correct, we make no representations or warranties of any kind, express or implied, about the completeness, accuracy, reliability, suitability or availability with respect to the website or the information, products, services, or related graphics contained on the website for any purpose. Any reliance you place on such information is therefore strictly at your own risk. +In no event will we be liable for any loss or damage including without limitation, indirect or consequential loss or damage, or any loss or damage whatsoever arising from loss of data or profits arising out of, or in connection with, the use of this website. +Through this website you are able to link to other websites which are not under the control of us. We have no control over the nature, content and availability of those sites. The inclusion of any links does not necessarily imply a recommendation or endorse the views expressed within them. +Every effort is made to keep the website up and running smoothly. However, we take no responsibility for, and will not be liable for, the website being temporarily unavailable due to technical issues beyond our control.

diff --git a/cove/cove_360/templates/cove_360/terms_links.html b/cove/cove_360/templates/cove_360/terms_links.html new file mode 100644 index 0000000..3f3bd2c --- /dev/null +++ b/cove/cove_360/templates/cove_360/terms_links.html @@ -0,0 +1,3 @@ + +

Links to other websites

+

Our website may contain links to other websites of interest. However, once you have used these links to leave our site, you should note that we do not have any control over that other website. Therefore, we cannot be responsible for the protection and privacy of any information which you provide whilst visiting such sites and such sites are not governed by this privacy statement. You should exercise caution and look at the privacy statement applicable to the website in question.

diff --git a/cove/cove_360/templates/cove_360/terms_privacy.html b/cove/cove_360/templates/cove_360/terms_privacy.html new file mode 100644 index 0000000..05b7fc6 --- /dev/null +++ b/cove/cove_360/templates/cove_360/terms_privacy.html @@ -0,0 +1,22 @@ + + +

Privacy Notice

+ +{% include "terms_privacy_intro.html" %} + +

You have the following rights concerning this data:

    +
  • Right to be informed, which is the purpose of this privacy notice
  • +
  • Right to Access, Rectification, Erasure, and to Restrict Processing. Note that the right to Erasure and Restrict Processing are balanced against our legitimate interests. Where relevant, you need to provide information to re-identify yourself from our pseudonymised data, see GDPR Article 11
  • +
  • Right to object to our processing.
  • +

+ +

Our supervisory authority is the ICO in the UK. You have the right to lodge a complaint with them.

+ +

We process personal data for the following purposes:

    +
  • Understanding website visitor and traffic patterns
  • +
  • Understanding server behaviour
  • +
  • Identifying and being alerted to software errors
  • +

+ +We rely on legitimate interests (GDPR Article 6(1)(f)) as the lawful basis for this processing. Details about the type of data, the purpose of the processing and legitimate interests, and the storage and retention of the data are set out below. + diff --git a/cove/cove_360/templates/cove_360/terms_privacy_intro.html b/cove/cove_360/templates/cove_360/terms_privacy_intro.html new file mode 100644 index 0000000..f2079ee --- /dev/null +++ b/cove/cove_360/templates/cove_360/terms_privacy_intro.html @@ -0,0 +1,18 @@ +

+{% if app == 'cove_360' %}360Giving{% endif %} +{% if app == 'cove_iati' %}Open Data Services Co-operative Limited{% endif %} +is committed to ensuring that your privacy is protected. This privacy notice sets out how we collect and process any personal data when you use this website.

+ +

We may change this notice from time to time by updating this page. This notice is effective from 24th May 2018.

+ +

Data controller:
+{% if app == 'cove_360' %} + 360Giving, c/o Esmée Fairbairn Foundation, King's Place, 90 York Way, London, N1 9AG. +{% elif app == 'cove_iati' %} + Open Data Services Co-operative Limited, 1st Floor, Holyoake House, Hanover Street, Manchester, Greater Manchester, England, M60 0AS. inbox+opendataservices+443f+data-protection@plan.io. +{% endif %} +
Contact us if would like a copy of the information held on you or if you believe that any information we are holding on you is incorrect or incomplete. +{% if app == 'cove_360' %} + You can contact us by email at: info@threesixtygiving.org +{% endif %} +

diff --git a/cove/cove_360/templates/cove_360/terms_security.html b/cove/cove_360/templates/cove_360/terms_security.html new file mode 100644 index 0000000..8ed54d7 --- /dev/null +++ b/cove/cove_360/templates/cove_360/terms_security.html @@ -0,0 +1,3 @@ + +

Security

+

We are committed to ensuring that your information is secure. In order to prevent unauthorised access or disclosure, we have put in place suitable physical, electronic and managerial procedures to safeguard and secure the information we collect online.

diff --git a/cove/cove_360/templates/cove_360/terms_tracker_data_controller_international.html b/cove/cove_360/templates/cove_360/terms_tracker_data_controller_international.html new file mode 100644 index 0000000..e69de29 diff --git a/cove/cove_360/templates/cove_360/terms_tracker_matmo.html b/cove/cove_360/templates/cove_360/terms_tracker_matmo.html new file mode 100644 index 0000000..5b04c2c --- /dev/null +++ b/cove/cove_360/templates/cove_360/terms_tracker_matmo.html @@ -0,0 +1,23 @@ + + + +

Personal data we collect:

    +
  • Your IP address - this is pseudonymised by redacting the second half of the address
  • +
  • Referrer (what page you arrived at one of our web pages from)
  • +
  • Information about your device, OS and browser
  • +
We do not use this data to personally identify individuals, but it is possible that it could be used to do so, particularly if combined with other datasets.

+ +

You can opt out of this processing: +If you have set your web browser to "I do not want to be tracked" (DoNotTrack is enabled) then Matomo will not track your visit.

+ +

Matomo also it’s own opt out mechanism:

+ + + +

Data processors: {% if app != 'cove_iati' %}Open Data Services Co-operative Limited, {% endif %}Bytemark.

+ +{% include "terms_tracker_data_controller_international.html" %} + +{% include "terms_tracker_no_international.html" %} + +

The data is kept indefinitely, in pseudonymised form.

diff --git a/cove/cove_360/templates/cove_360/terms_tracker_no_international.html b/cove/cove_360/templates/cove_360/terms_tracker_no_international.html new file mode 100644 index 0000000..e1e08f3 --- /dev/null +++ b/cove/cove_360/templates/cove_360/terms_tracker_no_international.html @@ -0,0 +1 @@ +

No data is transferred to third countries or international organisations.

diff --git a/cove/cove_360/templates/cove_360/terms_tracker_sentry.html b/cove/cove_360/templates/cove_360/terms_tracker_sentry.html new file mode 100644 index 0000000..0f67bc6 --- /dev/null +++ b/cove/cove_360/templates/cove_360/terms_tracker_sentry.html @@ -0,0 +1,19 @@ +{% if sentry_dsn %} + +

Identifying and being alerted to software errors

+ When an error occurs on our site, we record details about the visit that caused it. We use Sentry for this. + +

Data we collect:

    +
  • Your IP address
  • +
  • User agent (information about the OS and browser that you use)
  • +
  • Referrer (what page you arrived at one of our web pages from)
  • +
We do not use this data to personally identify individuals, but it is possible that it could be used to do so, particularly if combined with other datasets.

+ +

Data processors: {% if app != 'cove_iati' %}Open Data Services Co-operative Limited, {% endif %}Sentry (Functional Software, Inc.)

+ + {% include "terms_tracker_data_controller_international.html" %} + +

Data is transferred to Functional Software, Inc. who are based in the USA.

+

The data is kept for 90 days.

+ +{% endif %} diff --git a/cove/cove_360/templates/cove_360/terms_tracker_server.html b/cove/cove_360/templates/cove_360/terms_tracker_server.html new file mode 100644 index 0000000..5764daf --- /dev/null +++ b/cove/cove_360/templates/cove_360/terms_tracker_server.html @@ -0,0 +1,16 @@ +

Understanding server behaviour

+We collect data about your visits to the website in server logs. This is for the purpose of debugging network issues, monitoring server usage, and identifying malicious usage. + +

Personal data we collect:

    +
  • Your IP address
  • +
  • User agent (information about the OS and browser that you use)
  • +
  • Referrer (what page you arrived at one of our web pages from)
  • +
We do not use this data to personally identify individuals, but it is possible that it could be used to do so, particularly if combined with other datasets.

+ +

Data processors: {% if app != 'cove_iati' %}Open Data Services Co-operative Limited, {% endif %}Bytemark.

+ +{% include "terms_tracker_data_controller_international.html" %} + +{% include "terms_tracker_no_international.html" %} + +

The data is kept indefinitely.

diff --git a/cove/cove_360/templates/cove_360/terms_trackers.html b/cove/cove_360/templates/cove_360/terms_trackers.html new file mode 100644 index 0000000..5a19678 --- /dev/null +++ b/cove/cove_360/templates/cove_360/terms_trackers.html @@ -0,0 +1,11 @@ +

Understanding website visitor and traffic patterns

+ +

We collect data about your visits to the website, for the purpose of analysing how the website is used, so that we can improve it. A self hosted copy of Matomo is used for this.

+ +{% include "terms_tracker_matmo.html" %} + +{% include "terms_tracker_google_analytics.html" %} + +{% include "terms_tracker_server.html" %} + +{% include "terms_tracker_sentry.html" %} diff --git a/cove/cove_360/templates/cove_360/validation_table.html b/cove/cove_360/templates/cove_360/validation_table.html index 0f8ef37..b16a5cd 100644 --- a/cove/cove_360/templates/cove_360/validation_table.html +++ b/cove/cove_360/templates/cove_360/validation_table.html @@ -2,20 +2,22 @@ {% load cove_tags %} - - - - - + + + + + + {% if file_type != 'xlsx' and file_type != 'csv' %} - + {% endif %} - + {% for error_json, error_extra in validation_errors %} {% with error=error_json|json_decode %} + {% if file_type == 'xlsx' or file_type == 'csv' %} - @@ -52,7 +52,7 @@

Usefulness Opportunities

  • {{location}}
  • {% endfor %} {% if json_location|length > 3 %} -
  • see all
  • +
  • {% endif %} @@ -65,9 +65,9 @@

    Usefulness Opportunities

    {% for message, json_location, spreadsheet_location in usefulness_checks %} {% with msg=message.heading %} {% if file_type == 'json' %} - {% cove_modal_errors className="usefulness-checks-"|concat:forloop.counter modalTitle=msg errorList=json_location file_type=file_type full_table=False %} + {% cove_360_modal_errors className="usefulness-checks-"|concat:forloop.counter modalTitle=msg errorList=json_location file_type=file_type full_table=False %} {% else %} - {% cove_modal_errors className="usefulness-checks-"|concat:forloop.counter modalTitle=msg errorList=spreadsheet_location file_type=file_type full_table=False %} + {% cove_360_modal_errors className="usefulness-checks-"|concat:forloop.counter modalTitle=msg errorList=spreadsheet_location file_type=file_type full_table=False %} {% endif %} {% endwith %} {% endfor %} diff --git a/cove/cove_360/templates/cove_360/components/explore/validity.html b/cove/cove_360/templates/cove_360/components/explore/validity.html index dec4de5..6ce6e98 100644 --- a/cove/cove_360/templates/cove_360/components/explore/validity.html +++ b/cove/cove_360/templates/cove_360/components/explore/validity.html @@ -3,7 +3,7 @@ {% load cove_tags %}

    Validation - {% if validation_errors or additional_codelist_values %} + {% if validation_and_closed_codelist_errors_count > 0 %} Failed {% else %} Passed @@ -11,7 +11,7 @@

    Validation

    - {% if validation_errors or additional_closed_codelist_values %} + {% if validation_and_closed_codelist_errors_count > 0 %} {% trans "Validation failed means that the data does not meet " %} {% else %} {% trans "Validation passed means that the data meets " %} @@ -42,7 +42,7 @@

    Missing Fields

    {% for error_json, error_extra in validation_errors %} {% with error=error_json|json_decode %} - {% cove_modal_errors className="validation-errors-"|concat:error_prefix|concat:forloop.counter modalTitle=error.message errorList=error_extra.values file_type=file_type full_table=True %} + {% cove_360_modal_errors className="validation-errors-"|concat:error_prefix|concat:forloop.counter modalTitle=error.message errorList=error_extra.values file_type=file_type full_table=True %} {% endwith %} {% endfor %} {% endif %} @@ -60,7 +60,7 @@

    Incorrect Formats

    {% for error_json, error_extra in validation_errors %} {% with error=error_json|json_decode %} - {% cove_modal_errors className="validation-errors-"|concat:error_prefix|concat:forloop.counter modalTitle=error.message errorList=error_extra.values file_type=file_type full_table=True %} + {% cove_360_modal_errors className="validation-errors-"|concat:error_prefix|concat:forloop.counter modalTitle=error.message errorList=error_extra.values file_type=file_type full_table=True %} {% endwith %} {% endfor %} {% endif %} @@ -95,7 +95,7 @@

    Other

    {% for error_json, error_extra in validation_errors %} {% with error=error_json|json_decode %} - {% cove_modal_errors className="validation-errors-"|concat:error_prefix|concat:forloop.counter modalTitle=error.message errorList=error_extra.values file_type=file_type full_table=True %} + {% cove_360_modal_errors className="validation-errors-"|concat:error_prefix|concat:forloop.counter modalTitle=error.message errorList=error_extra.values file_type=file_type full_table=True %} {% endwith %} {% endfor %} {% endif %} diff --git a/cove/cove_360/templates/cove_360/components/explore_checking.html b/cove/cove_360/templates/cove_360/components/explore_checking.html index c865672..0f1e9dc 100644 --- a/cove/cove_360/templates/cove_360/components/explore_checking.html +++ b/cove/cove_360/templates/cove_360/components/explore_checking.html @@ -11,13 +11,17 @@ {% trans 'JSON' as JSON %} {% trans 'XML' as XML %} + + +

    Checking file "{{file_name}}"

    +
    @@ -96,6 +100,7 @@

    {{usefulness_checks_count }}

    + + +

    Report

    {% include "cove_360/components/explore/summary.html" %}
    @@ -80,6 +89,8 @@

    Report

    {% include "cove_360/components/explore/accuracy.html" %}
    {% include "cove_360/components/explore/usefulness.html" %} +#} +{% endcomment %}
    {% trans 'Error Description' %}{% trans 'Error Count' %}{% trans 'First 3 Examples' %}
    {% trans 'Passed' %}{% trans 'Error Description' %}{% trans 'Error Count' %}{% trans 'First 3 Examples' %}{% trans 'Location of first 3 errors' %}{% trans 'Location of first 3 errors' %}
    close

    {{ error | html_error_msg }} diff --git a/cove/cove_360/views.py b/cove/cove_360/views.py index 25c13b3..2a3321e 100644 --- a/cove/cove_360/views.py +++ b/cove/cove_360/views.py @@ -13,7 +13,7 @@ from django.conf import settings from django.http import HttpResponse, JsonResponse from django.shortcuts import redirect, render -from django.utils.html import format_html +from django.utils.html import format_html, mark_safe from django.utils.translation import ugettext_lazy as _ from django.core.cache import cache @@ -189,11 +189,41 @@ def explore_360(request, pk, template='cove_360/explore.html'): data_status.passed = context['validation_errors_count'] == 0 data_status.save() - cache.set(pk, context) + import pprint + pprint.pprint(context, stream=open("/tmp/dqt.py", "w"), indent=2) + + pprint.pprint(TEST_CLASSES) + + try: + context["quality_accuracy_checks_passed"] = create_passed_tests_context_data(context["quality_accuracy_checks"], TEST_CLASSES["quality_accuracy"]) + except Exception: + context["quality_accuracy_errored"] = True + + try: + context["usefulness_checks_passed"] = create_passed_tests_context_data(context["usefulness_checks"], TEST_CLASSES["usefulness"]) + except Exception: + context["usefulness_errored"] = True + + cache.set(pk, context) return render(request, template, context) +def create_passed_tests_context_data(failed_tests, available_tests): + + passed_tests_names = [test[0]["type"] for test in failed_tests] + passed_test_case_headings = [] + + for test in available_tests: + if test.__name__ in passed_tests_names: + continue + # We instantiate the test with no data to be able to utilise the heading formatting code + passed_test_case = test(grants=[], aggregates={"count": 0, "recipient_individuals_count": 0}) + passed_test_case_headings.append(mark_safe(passed_test_case.format_heading_count(test.check_text["heading"]))) + + return passed_test_case_headings + + def common_errors(request): return render(request, 'cove_360/common_errors.html') diff --git a/cove/cove_project/urls.py b/cove/cove_project/urls.py index 6870092..59f9e8a 100644 --- a/cove/cove_project/urls.py +++ b/cove/cove_project/urls.py @@ -2,6 +2,7 @@ from django.conf.urls.static import static from django.conf import settings from django.urls import path +from django.views.generic import TemplateView from cove.urls import urlpatterns, handler500 # noqa: F401 @@ -15,7 +16,8 @@ path("api/results/", cove_360.api.ResultsApiView.as_view(), name="api-results"), url(r'^xhr_results_ready/(.+)$', cove_360.views.results_ready, name='xhr_results_ready'), url(r'^common_errors', cove_360.views.common_errors, name='common_errors'), - url(r'^additional_checks', cove_360.views.additional_checks, name='additional_checks') + url(r'^additional_checks', cove_360.views.additional_checks, name='additional_checks'), + path("publishing/", TemplateView.as_view(template_name="cove_360/publishing.html"), name="publishing"), ] urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/lib360dataquality/cove/threesixtygiving.py b/lib360dataquality/cove/threesixtygiving.py index e787d3e..47f9610 100644 --- a/lib360dataquality/cove/threesixtygiving.py +++ b/lib360dataquality/cove/threesixtygiving.py @@ -586,6 +586,15 @@ def format_heading_count(self, message, test_class_type=None, verb="have"): 2 grants have + message or 3 grants contain + message. """ noun = "grant" if self.count == 1 else "grants" + + # Positive result - "what is working well" + # Avoid double negative + if not message.startswith("not have") and message.startswith("not") and self.count == 0: + message = message[len("not"):] + if message.startswith("not have") and self.count == 0: + verb = "do" + # End positive result flip + if verb == "have": verb = "has" if self.count == 1 else verb elif verb == "do": @@ -593,6 +602,7 @@ def format_heading_count(self, message, test_class_type=None, verb="have"): else: # Naively! verb = verb + "s" if self.count == 1 else verb + return "{} {} {} {}".format( self.get_heading_count(test_class_type), noun, verb, message ) From f73bed3d5775e8ffd0f5aaed265445dfd9403de9 Mon Sep 17 00:00:00 2001 From: Michael Wood Date: Fri, 22 Nov 2024 18:15:25 +0000 Subject: [PATCH 02/27] WIP --- .../static/dataexplore/js/tab-switcher.js | 12 ++ .../cove_360/components/cookie_consent.html | 2 +- .../cove_360/components/explore/summary.html | 36 ++++- .../cove_360/components/explore_checking.html | 16 +- cove/cove_360/templates/cove_360/input.html | 6 +- cove/cove_360/tests_functional.py | 137 +++--------------- cove/cove_360/views.py | 1 - 7 files changed, 84 insertions(+), 126 deletions(-) diff --git a/cove/cove_360/static/dataexplore/js/tab-switcher.js b/cove/cove_360/static/dataexplore/js/tab-switcher.js index 207fd73..ee861de 100644 --- a/cove/cove_360/static/dataexplore/js/tab-switcher.js +++ b/cove/cove_360/static/dataexplore/js/tab-switcher.js @@ -38,6 +38,18 @@ const allTabs = [ })(); (function(){ + /* If "?open-all=true" is passed show all tabs on the page at once + and ignore any resuming of the tab state. + */ + const params = new URLSearchParams(window.location.search); + + if (params.get("open-all")){ + for (const tab of document.getElementsByClassName("tab-content")){ + tab.removeAttribute("style"); + } + + return; + } /* Resume the tab selection state from the window hash on page load. * substring to remove the # to match values in allTabs array. diff --git a/cove/cove_360/templates/cove_360/components/cookie_consent.html b/cove/cove_360/templates/cove_360/components/cookie_consent.html index f9b4b07..00212f4 100644 --- a/cove/cove_360/templates/cove_360/components/cookie_consent.html +++ b/cove/cove_360/templates/cove_360/components/cookie_consent.html @@ -59,4 +59,4 @@

    Metadata

    {% endif %} - {% endif %} + {% endif %} {# end if the file had a metadata tab #} {% if metadata.downloadURL or metadata.title %}

    @@ -77,6 +77,7 @@

    {% endif %}

    {% endif %} + {% if metadata.description %}

    {{metadata.description}} @@ -99,8 +100,35 @@

    This file contains

    {% blocktrans with start_date=grants_aggregates.min_award_date %}on {{start_date}}.{% endblocktrans %} {% else %} {% blocktrans with start_date=grants_aggregates.min_award_date end_date=grants_aggregates.max_award_date %}between {{start_date}} and {{end_date}}.{% endblocktrans %} + {% endif %} - {% endif %} + +
  • + {% trans "Unique grant identifiers:" %}  + + {% if grants_aggregates.unique_ids|length %}{% endif %} + {{ grants_aggregates.unique_ids|length}} + {% if grants_aggregates.unique_ids|length %}{% endif %} + +
  • +
  • + {% trans "Unique funder organisation identifiers:" %}  + + {% if grants_aggregates.distinct_funding_org_identifier|length %}{% endif %} + {{ grants_aggregates.distinct_funding_org_identifier|length}} + {% if grants_aggregates.distinct_funding_org_identifier|length %} + {% endif %} + +
  • +
  • + {% trans "Unique recipient organisation identifiers:" %}  + + {% if grants_aggregates.distinct_recipient_org_identifier|length %}{% endif %} + {{ grants_aggregates.distinct_recipient_org_identifier|length}} + {% if grants_aggregates.distinct_recipient_org_identifier|length %}{% endif %} + +
  • + {% if metadata.issued %}
  • The file was issued on {{metadata.issued|slice:":10"}} @@ -203,3 +231,7 @@

    {% trans "Please resolve this error, as well as any others found, and test the data again." %}

    {% endif %} {% endif %} + + {% cove_modal_list className="unique-ids" modalTitle="Unique IDs" itemList=grants_aggregates.unique_ids %} + {% cove_modal_list className="distinct-funding-org-identifier" modalTitle="Funder Organisation IDs" itemList=grants_aggregates.distinct_funding_org_identifier %} + {% cove_modal_list className="distinct-recipient-org-identifier" modalTitle="Recipient Organisation IDs" itemList=grants_aggregates.distinct_recipient_org_identifier %} \ No newline at end of file diff --git a/cove/cove_360/templates/cove_360/components/explore_checking.html b/cove/cove_360/templates/cove_360/components/explore_checking.html index 83600bd..dc9f27a 100644 --- a/cove/cove_360/templates/cove_360/components/explore_checking.html +++ b/cove/cove_360/templates/cove_360/components/explore_checking.html @@ -109,4 +109,18 @@

    {{usefulness_checks_count }}

    -
    \ No newline at end of file +
    + + \ No newline at end of file diff --git a/cove/cove_360/templates/cove_360/input.html b/cove/cove_360/templates/cove_360/input.html index eaab486..e698431 100644 --- a/cove/cove_360/templates/cove_360/input.html +++ b/cove/cove_360/templates/cove_360/input.html @@ -47,7 +47,7 @@

    Check your data

    {% bootstrap_form forms.upload_form %} {% buttons %} - {% endbuttons %} @@ -60,7 +60,7 @@

    Check your data

    {% csrf_token %} {% bootstrap_form forms.url_form %} {% buttons %} - {% endbuttons %} @@ -73,7 +73,7 @@

    Check your data

    {% csrf_token %} {% bootstrap_form forms.text_form %} {% buttons %} - {% endbuttons %} diff --git a/cove/cove_360/tests_functional.py b/cove/cove_360/tests_functional.py index 79ab707..6853ef8 100644 --- a/cove/cove_360/tests_functional.py +++ b/cove/cove_360/tests_functional.py @@ -38,7 +38,8 @@ def wait_for_results_page(browser): def browser(request): if BROWSER == 'ChromeHeadless': chrome_options = Options() - chrome_options.add_argument("--headless") + if not os.environ.get("UI"): + chrome_options.add_argument("--headless") # uncomment this if "DevToolsActivePort" error # chrome_options.add_argument("--remote-debugging-port=9222") browser = webdriver.Chrome(chrome_options=chrome_options) @@ -58,11 +59,11 @@ def server_url(request, live_server): @pytest.mark.parametrize(('source_filename', 'expected_text', 'conversion_successful'), [ - ('fundingproviders-grants_fixed_2_grants.json', ['A file was downloaded from', - 'There are 4 grants to 2 recipient organisations and 0 to recipient individuals', + ('fundingproviders-grants_fixed_2_grants.json', ['There are 4 grants to 2 recipient organisations and 0 to recipient individuals', 'The grants were awarded in GBP with a total value of £662,990 and individual awards ranging from £152,505 (lowest) to £178,990 (highest)', 'Convert to Spreadsheet', - 'data does not use the 360Giving Data Standard correctly 15 Errors', + 'data does not use the 360Giving Data Standard correctly', + '15 Errors', 'your data is not yet using the 360Giving Data Standard', 'Incorrect Formats', 'Non-unique id values', @@ -70,7 +71,7 @@ def server_url(request, live_server): 'Unique grant identifiers: 2', 'Unique funder organisation identifiers: 1', '360G-fundingproviders-000002/X/00/X'], True), - ('fundingproviders-grants_broken_grants.json', ['data does not use the 360Giving Data Standard correctly 15 Errors', + ('fundingproviders-grants_broken_grants.json', ['data does not use the 360Giving Data Standard correctly (15 Errors)', 'Check your data 4 Grants', 'Unique funder organisation identifiers: 2', 'Unique recipient organisation identifiers: 2', @@ -80,7 +81,7 @@ def server_url(request, live_server): 'The grants were awarded in GBP with a total value of £331,495', # check that there's no errors after the heading 'Data conversion successful\nBefore checking', - 'data does not use the 360Giving Data Standard correctly 7 Errors', + 'data does not use the 360Giving Data Standard correctly (7 Errors)', 'description is missing but required', 'Sheet: grants Row: 2', 'Check your data 2 Grants', @@ -89,7 +90,7 @@ def server_url(request, live_server): '360G-fundingproviders-000002/X/00/X'], True), # Test conversion warnings are shown ('tenders_releases_2_releases.xlsx', ['Data conversion unsuccessful - 5 Errors have been found', - 'data does not use the 360Giving Data Standard correctly 76 Errors', + 'data does not use the 360Giving Data Standard correctly (76 Errors)', 'You may have a duplicate Identifier: We couldn\'t merge these rows with the id "1": field "ocid" in sheet "items": one cell has the value: "PW-14-00627094", the other cell has the value: "PW-14-00629344"' ], True), # Test that titles that aren't in the rollup are converted correctly @@ -189,13 +190,8 @@ def test_explore_360_url_input(server_url, browser, httpserver, source_filename, with open(os.path.join('cove_360', 'fixtures', source_filename), 'rb') as fp: httpserver.serve_content(fp.read()) - if 'CUSTOM_SERVER_URL' in os.environ: - # Use urls pointing to GitHub if we have a custom (probably non local) server URL - source_url = 'https://raw.githubusercontent.com/ThreeSixtyGiving/dataquality/main/cove/cove_360/fixtures/' + source_filename - if authed: - pytest.skip() - else: - source_url = httpserver.url + PREFIX_360 + source_filename + + source_url = httpserver.url + PREFIX_360 + source_filename if authed: User = get_user_model() @@ -203,34 +199,24 @@ def test_explore_360_url_input(server_url, browser, httpserver, source_filename, force_login(user, browser, server_url) browser.get(server_url) + browser.find_element_by_class_name("cookie-consent-no").click() - browser.find_element_by_partial_link_text('Link').click() - time.sleep(0.5) - browser.find_element_by_id('id_source_url').send_keys(source_url) - browser.find_element_by_css_selector("#fetchURL > div.form-group > button.btn.btn-primary").click() + + browser.find_element_by_id("link-tab-link").click() + browser.find_element_by_id("id_source_url").send_keys(source_url) + browser.find_element_by_id("submit-link-btn").click() # Wait for the various redirects after click wait_for_results_page(browser) - data_url = browser.current_url - - # Click and un-collapse all explore sections - all_sections = browser.find_elements_by_class_name('panel-heading') + # reload results page with ?open-all=true to see all values at once + browser.get(f"{browser.current_url}?open-all=true") browser.find_element_by_class_name("cookie-consent-no").click() - for section in all_sections: - if section.get_attribute('data-toggle') == "collapse" and section.get_attribute('aria-expanded') != 'true': - section.click() - time.sleep(0.5) # Do the assertions - check_url_input_result_page(server_url, browser, httpserver, source_filename, expected_text, conversion_successful, authed) - - if conversion_successful: - # Expand all sections with the expand all button this time - browser.find_element_by_link_text('Expand all').click() - browser.get(data_url + '/advanced') - assert 'Advanced view' in browser.find_element_by_tag_name('body').text + a = input() + check_url_input_result_page(server_url, browser, httpserver, source_filename, expected_text, conversion_successful, authed) def check_url_input_result_page(server_url, browser, httpserver, source_filename, expected_text, conversion_successful, authed): @@ -379,91 +365,6 @@ def mockflatten(input_name, output_name, *args, **kwargs): assert conversion_title.find_element_by_class_name('font-tick').get_attribute('class') == 'font-tick tick' -@pytest.mark.parametrize(('link_text', 'url'), [ - ('360Giving', 'https://www.threesixtygiving.org/'), - ('Publisher Guidance', 'https://standard.threesixtygiving.org/en/latest/'), - ('Common Errors', 'common_errors'), - ]) -def test_footer_360(server_url, browser, link_text, url): - browser.get(server_url) - link = browser.find_element_by_link_text(link_text) - href = link.get_attribute("href") - assert url in href - - -def test_index_page_360(server_url, browser): - browser.get(server_url) - assert 'Data Quality Tool' in browser.find_element_by_class_name('title360').text - assert 'How to check your data' in browser.find_element_by_tag_name('body').text - assert 'Summary Spreadsheet - ' in browser.find_element_by_tag_name('body').text - assert 'JSON built to the 360Giving JSON schema' in browser.find_element_by_tag_name('body').text - assert 'Multi-table data package - Excel' in browser.find_element_by_tag_name('body').text - assert '360Giving' in browser.find_element_by_tag_name('body').text - - -@pytest.mark.parametrize(('link_text', 'url'), [ - ('360Giving Data Standard guidance', 'https://standard.threesixtygiving.org/en/latest/technical/reference/#reference'), - ('Excel', 'https://threesixtygiving-standard.readthedocs.io/en/latest/_static/summary-table/360-giving-schema-titles.xlsx'), - ('CSV', 'https://standard.threesixtygiving.org/en/latest/technical/templates-csv/'), - ('360Giving JSON schema', 'https://standard.threesixtygiving.org/en/latest/reference/#giving-json-schemas'), - ('Multi-table data package - Excel', 'https://threesixtygiving-standard.readthedocs.io/en/latest/_static/multi-table/360-giving-schema-fields.xlsx') - ]) -def test_index_page_360_links(server_url, browser, link_text, url): - browser.get(server_url) - link = browser.find_element_by_link_text(link_text) - href = link.get_attribute("href") - assert url in href - - -def test_common_index_elements(server_url, browser): - browser.get(server_url) - browser.find_element_by_css_selector('#more-information .panel-title').click() - time.sleep(0.5) - assert 'What happens to the data I provide to this site?' in browser.find_element_by_tag_name('body').text - assert 'Why do you delete data after seven days?' in browser.find_element_by_tag_name('body').text - assert 'Why provide converted versions?' in browser.find_element_by_tag_name('body').text - assert 'Terms & Conditions' in browser.find_element_by_tag_name('body').text - assert '360Giving' in browser.find_element_by_tag_name('body').text - - -def test_terms_page(server_url, browser): - browser.get(server_url + 'terms/') - assert 'Open Data Services Co-operative Limited' in browser.find_element_by_tag_name('body').text - assert 'Open Data Services Limited' not in browser.find_element_by_tag_name('body').text - assert '360Giving' in browser.find_element_by_tag_name('body').text - - -def test_accordion(server_url, browser): - browser.get(server_url) - - def buttons(): - return [b.is_displayed() for b in browser.find_elements(By.CSS_SELECTOR, "#accordion button")] - - time.sleep(0.5) - assert buttons() == [True, False, False] - assert 'Upload a file' in browser.find_elements_by_tag_name('label')[0].text - browser.find_element_by_class_name("cookie-consent-no").click() - browser.find_element_by_partial_link_text('Link').click() - browser.implicitly_wait(1) - time.sleep(0.5) - assert buttons() == [False, True, False] - browser.find_element_by_partial_link_text('Paste').click() - time.sleep(0.5) - assert buttons() == [False, False, True] - assert 'Paste (JSON only)' in browser.find_elements_by_tag_name('label')[2].text - - # Now test that the whole banner is clickable - browser.find_element_by_id('headingOne').click() - time.sleep(0.5) - assert buttons() == [True, False, False] - browser.find_element_by_id('headingTwo').click() - time.sleep(0.5) - assert buttons() == [False, True, False] - browser.find_element_by_id('headingThree').click() - time.sleep(0.5) - assert buttons() == [False, False, True] - - @pytest.mark.parametrize(('source_filename'), [ ('fundingproviders-grants_fixed_2_grants.json'), ]) diff --git a/cove/cove_360/views.py b/cove/cove_360/views.py index 2a3321e..7985637 100644 --- a/cove/cove_360/views.py +++ b/cove/cove_360/views.py @@ -204,7 +204,6 @@ def explore_360(request, pk, template='cove_360/explore.html'): except Exception: context["usefulness_errored"] = True - cache.set(pk, context) return render(request, template, context) From 3eee83fcafda81628e769c0cda043fa97c07d64e Mon Sep 17 00:00:00 2001 From: Michael Wood Date: Mon, 25 Nov 2024 15:19:55 +0000 Subject: [PATCH 03/27] wip --- .../cove_360/components/explore/summary.html | 45 +++++++++++++++++- .../cove_360/components/explore_checking.html | 21 +++++---- .../components/explore_publishing.html | 11 +++++ .../templates/cove_360/data_loading.html | 46 +++++++++++-------- cove/cove_360/tests_functional.py | 23 ++++------ 5 files changed, 100 insertions(+), 46 deletions(-) diff --git a/cove/cove_360/templates/cove_360/components/explore/summary.html b/cove/cove_360/templates/cove_360/components/explore/summary.html index 7d0d5d5..84aedcd 100644 --- a/cove/cove_360/templates/cove_360/components/explore/summary.html +++ b/cove/cove_360/templates/cove_360/components/explore/summary.html @@ -234,4 +234,47 @@

    {% cove_modal_list className="unique-ids" modalTitle="Unique IDs" itemList=grants_aggregates.unique_ids %} {% cove_modal_list className="distinct-funding-org-identifier" modalTitle="Funder Organisation IDs" itemList=grants_aggregates.distinct_funding_org_identifier %} - {% cove_modal_list className="distinct-recipient-org-identifier" modalTitle="Recipient Organisation IDs" itemList=grants_aggregates.distinct_recipient_org_identifier %} \ No newline at end of file + {% cove_modal_list className="distinct-recipient-org-identifier" modalTitle="Recipient Organisation IDs" itemList=grants_aggregates.distinct_recipient_org_identifier %} + + +

    + {% trans "Download data and share these results" %} +

    +

    Share

    +

    {% trans "You can share these test results with others by using the following url:" %}

    +

    {{ current_url }} + +

    +

    {% trans "If your data is not suitable for sharing publicly, then you should treat this url with care. Only share it with people who have permission to access the data." %}

    +

    {% trans "After 7 days, the link will expire and the data will be deleted from our servers - so the results will no longer be available. You can revisit these results until then." %}

    +

    Download

    +

    {% trans "This application converts data in Excel and CSV format into JSON format, allowing you download the converted version." %}

    +

    {% trans "If your file is originally in JSON format select ‘Convert to Spreadsheet’ in the summary section to create an Excel version of the file." %}

    + {% if not conversion_error and conversion != 'flattenable' %} +

    {% trans "We provide the following formats to download:" %}

    + + {% else %} +

    (No downloads available as the conversion hasn't happened, or has errored).

    + {% endif %} + {% if user.is_authenticated %} +

    Original file download for admin users

    +

    Warning, this is the original file uploaded. Do not download if you don't trust whoever sent you a link to this page, it could contain a virus. Note that this box and this download link are only visible to admin users, not others you share this page with.

    + + {% endif %} \ No newline at end of file diff --git a/cove/cove_360/templates/cove_360/components/explore_checking.html b/cove/cove_360/templates/cove_360/components/explore_checking.html index dc9f27a..8ceb6d1 100644 --- a/cove/cove_360/templates/cove_360/components/explore_checking.html +++ b/cove/cove_360/templates/cove_360/components/explore_checking.html @@ -1,5 +1,16 @@ {% load i18n %} {% load humanize %} {% load cove_tags %} +{% trans 'Converted from Original' as converted %} +{% trans 'Original' as original %} +{% trans 'Excel Spreadsheet (.xlsx)' as xlsx %} +{% trans 'OpenDocument Spreadsheet (.ods)' as ods %} +{% trans 'CSV Spreadsheet (.csv)' as csv %} +{% trans 'Excel Spreadsheet (.xlsx) with titles' as xlsx_titles %} +{% trans 'OpenDocument Spreadsheet (.ods) with titles' as ods_titles %} +{# Translators: JSON probably does not need a transalation: http://www.json.org/ #} +{% trans 'JSON' as JSON %} +{% trans 'XML' as XML %} +
    {{usefulness_checks_count }}
    \ No newline at end of file diff --git a/cove/cove_360/templates/cove_360/components/explore_publishing.html b/cove/cove_360/templates/cove_360/components/explore_publishing.html index ce8d8de..0ae5f5f 100644 --- a/cove/cove_360/templates/cove_360/components/explore_publishing.html +++ b/cove/cove_360/templates/cove_360/components/explore_publishing.html @@ -1,5 +1,16 @@ {% load i18n %} +{% trans 'Converted from Original' as converted %} +{% trans 'Original' as original %} +{% trans 'Excel Spreadsheet (.xlsx)' as xlsx %} +{% trans 'OpenDocument Spreadsheet (.ods)' as ods %} +{% trans 'CSV Spreadsheet (.csv)' as csv %} +{% trans 'Excel Spreadsheet (.xlsx) with titles' as xlsx_titles %} +{% trans 'OpenDocument Spreadsheet (.ods) with titles' as ods_titles %} +{# Translators: JSON probably does not need a transalation: http://www.json.org/ #} +{% trans 'JSON' as JSON %} +{% trans 'XML' as XML %} +

    {% trans "Submit your data" %}

    diff --git a/cove/cove_360/templates/cove_360/data_loading.html b/cove/cove_360/templates/cove_360/data_loading.html index acc8925..41bd4c7 100644 --- a/cove/cove_360/templates/cove_360/data_loading.html +++ b/cove/cove_360/templates/cove_360/data_loading.html @@ -27,30 +27,36 @@

    Data processing is in progress

    // Start the results processing if it returns in time // If it doesn't, it will fail silently and rely on the polling mechanism -fetch(resultsUrl) - .then((response) => { - if (response.ok) { + +(async function(){ + +try { + const response = await fetch(resultsUrl); + if (response.ok) { + window.location.href = resultsUrl; + } else { + throw Error(`Server has errored ${response.statusText}`); + } +} catch (error) { + console.error("Error fetching results:", error); + window.location.href = resultsUrl; +} + +})(); + + +async function updateStatus() { + try { + const response = await fetch(pollUrl); + const data = response.json(); + if (data.done) { + clearInterval(poller); window.location.href = resultsUrl; } - }) - .catch((error) => { - console.error("Error fetching results:", error); - }); - -function updateStatus() { - fetch(pollUrl) - .then((response) => response.json()) - .then((data) => { - if (data.done) { - clearInterval(poller); - window.location.href = resultsUrl; - } - console.log(data); - }) - .catch((error) => { + } catch { console.error("Error updating status:", error); window.location.href = resultsUrl; - }); + } } const poller = setInterval(updateStatus, 5000); diff --git a/cove/cove_360/tests_functional.py b/cove/cove_360/tests_functional.py index 6853ef8..1b5d476 100644 --- a/cove/cove_360/tests_functional.py +++ b/cove/cove_360/tests_functional.py @@ -71,33 +71,34 @@ def server_url(request, live_server): 'Unique grant identifiers: 2', 'Unique funder organisation identifiers: 1', '360G-fundingproviders-000002/X/00/X'], True), - ('fundingproviders-grants_broken_grants.json', ['data does not use the 360Giving Data Standard correctly (15 Errors)', - 'Check your data 4 Grants', + ('fundingproviders-grants_broken_grants.json', ['data does not use the 360Giving Data Standard correctly', + '15 Errors', 'Unique funder organisation identifiers: 2', 'Unique recipient organisation identifiers: 2', '360G-fundingproviders-000002/X/00/X'], True), - ('fundingproviders-grants_2_grants.xlsx', ['Data about 1 funder', + ('fundingproviders-grants_2_grants.xlsx', ['1 funding organisation', 'There are 2 grants to 1 recipient organisation and 0 to recipient individuals', 'The grants were awarded in GBP with a total value of £331,495', # check that there's no errors after the heading 'Data conversion successful\nBefore checking', - 'data does not use the 360Giving Data Standard correctly (7 Errors)', + 'data does not use the 360Giving Data Standard correctly', + '7 Errors', 'description is missing but required', 'Sheet: grants Row: 2', - 'Check your data 2 Grants', 'Unique funder organisation identifiers: 1', 'Unique recipient organisation identifiers: 1', '360G-fundingproviders-000002/X/00/X'], True), # Test conversion warnings are shown ('tenders_releases_2_releases.xlsx', ['Data conversion unsuccessful - 5 Errors have been found', - 'data does not use the 360Giving Data Standard correctly (76 Errors)', + 'data does not use the 360Giving Data Standard correctly', + '76 Errors', 'You may have a duplicate Identifier: We couldn\'t merge these rows with the id "1": field "ocid" in sheet "items": one cell has the value: "PW-14-00627094", the other cell has the value: "PW-14-00629344"' ], True), # Test that titles that aren't in the rollup are converted correctly # (See @check_url_input_result_page). ('fundingproviders-grants_2_grants_titleswithoutrollup.xlsx', [], True), # Test a 360 csv in cp1252 encoding - ('fundingproviders-grants_2_grants_cp1252.csv', ['Data about 1 funder', + ('fundingproviders-grants_2_grants_cp1252.csv', ['1 funding organisation', 'There are 2 grants to 1 recipient organisation and 0 to recipient individuals', 'The grants were awarded in GBP with a total value of £331,495', 'This file is not \'utf-8\' encoded (it is cp1252 encoded)'], True), @@ -214,8 +215,6 @@ def test_explore_360_url_input(server_url, browser, httpserver, source_filename, browser.find_element_by_class_name("cookie-consent-no").click() # Do the assertions - - a = input() check_url_input_result_page(server_url, browser, httpserver, source_filename, expected_text, conversion_successful, authed) @@ -232,9 +231,6 @@ def check_url_input_result_page(server_url, browser, httpserver, source_filename if source_filename == 'validation_errors-3.json': assert 'UNSAFE' not in body_text - assert 'Data Quality Tool' in browser.find_element_by_class_name('title360').text - assert '360Giving' in browser.find_element_by_tag_name('body').text - if conversion_successful: if source_filename.endswith('.json'): if authed: @@ -260,9 +256,6 @@ def check_url_input_result_page(server_url, browser, httpserver, source_filename converted_file = browser.find_element_by_link_text("JSON (Converted from Original)").get_attribute("href") assert "unflattened.json" in browser.find_element_by_link_text("JSON (Converted from Original)").get_attribute("href") - # Test for Load New File button - assert 'Load New File' in body_text - if authed: assert 'Note that this box and this download link are only visible to admin users' in body_text From 1a951b133e0d74ad4a575d8c216ed6c828333133 Mon Sep 17 00:00:00 2001 From: Michael Wood Date: Thu, 28 Nov 2024 10:52:13 +0000 Subject: [PATCH 04/27] lint --- .github/workflows/lint.yml | 3 + .../static/dataexplore/js/tab-switcher.js | 111 +++++++++--------- .../cove_360/components/cookie_consent.html | 30 ++--- .../cove_360/components/explore_checking.html | 1 - .../components/explore_publishing.html | 37 +++--- .../cove_360/publisher_not_found.html | 11 +- 6 files changed, 95 insertions(+), 98 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 6c8ae35..559737b 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -19,3 +19,6 @@ jobs: ${{ runner.os }}-pip- - run: pip install -r requirements_dev.txt - run: flake8 + + - run: npm install + - run: ./node_modules/eslint/bin/eslint.js --ext .js --ext .html grantnav/frontend/templates/** \ No newline at end of file diff --git a/cove/cove_360/static/dataexplore/js/tab-switcher.js b/cove/cove_360/static/dataexplore/js/tab-switcher.js index ee861de..d60a65b 100644 --- a/cove/cove_360/static/dataexplore/js/tab-switcher.js +++ b/cove/cove_360/static/dataexplore/js/tab-switcher.js @@ -1,61 +1,60 @@ const allTabs = [ - 'summary', - 'validity', - 'accuracy', - 'usefulness', - 'upload', - 'link', - 'paste', + 'summary', + 'validity', + 'accuracy', + 'usefulness', + 'upload', + 'link', + 'paste' ]; -(function() { - /* tab switching mechanism -> click handler > */ - - /* Find all the Links */ - for (const tab of allTabs){ - /* For each type (e.g. 'paste') add a click handler and set state */ - for (const tabLink of document.querySelectorAll(`a[href="#${tab}"]`)){ - tabLink.addEventListener('click', (event) => { - event.preventDefault(); - /* We do this manually to avoid page jumping position to the href/id */ - window.location.hash = `#${tab}`; - - /* Remove active from all tabs */ - for (const otherTabs of document.getElementsByClassName('tab')) { - otherTabs.classList.remove('tab--active'); - } - /* Add active to our tab */ - document.getElementById(`${tab}-tab-link`).parentElement.classList.toggle('tab--active'); - - for (const tabContents of document.getElementsByClassName('tab-content')) { - tabContents.setAttribute('style', 'display:none'); - } - - document.getElementById(`${tab}-tab`).setAttribute('style', 'display: block') - }); - } - } +(function () { + /* tab switching mechanism -> click handler > */ + + /* Find all the Links */ + for (const tab of allTabs) { + /* For each type (e.g. 'paste') add a click handler and set state */ + for (const tabLink of document.querySelectorAll(`a[href="#${tab}"]`)) { + tabLink.addEventListener('click', (event) => { + event.preventDefault(); + /* We do this manually to avoid page jumping position to the href/id */ + window.location.hash = `#${tab}`; + + /* Remove active from all tabs */ + for (const otherTabs of document.getElementsByClassName('tab')) { + otherTabs.classList.remove('tab--active'); + } + /* Add active to our tab */ + document.getElementById(`${tab}-tab-link`).parentElement.classList.toggle('tab--active'); + + for (const tabContents of document.getElementsByClassName('tab-content')) { + tabContents.setAttribute('style', 'display:none'); + } + + document.getElementById(`${tab}-tab`).setAttribute('style', 'display: block'); + }); + } + } })(); -(function(){ - /* If "?open-all=true" is passed show all tabs on the page at once - and ignore any resuming of the tab state. - */ - const params = new URLSearchParams(window.location.search); - - if (params.get("open-all")){ - for (const tab of document.getElementsByClassName("tab-content")){ - tab.removeAttribute("style"); - } - - return; - } - - /* Resume the tab selection state from the window hash on page load. - * substring to remove the # to match values in allTabs array. - */ - if (allTabs.includes(window.location.hash.substring(1))) { - document.querySelector(`a[href="${window.location.hash}"]`).click(); - } - -})(); \ No newline at end of file +(function () { + /* If "?open-all=true" is passed show all tabs on the page at once + and ignore any resuming of the tab state. + */ + const params = new URLSearchParams(window.location.search); + + if (params.get('open-all')) { + for (const tab of document.getElementsByClassName('tab-content')) { + tab.removeAttribute('style'); + } + + return; + } + + /* Resume the tab selection state from the window hash on page load. + * substring to remove the # to match values in allTabs array. + */ + if (allTabs.includes(window.location.hash.substring(1))) { + document.querySelector(`a[href="${window.location.hash}"]`).click(); + } +})(); diff --git a/cove/cove_360/templates/cove_360/components/cookie_consent.html b/cove/cove_360/templates/cove_360/components/cookie_consent.html index 00212f4..74f9964 100644 --- a/cove/cove_360/templates/cove_360/components/cookie_consent.html +++ b/cove/cove_360/templates/cove_360/components/cookie_consent.html @@ -22,27 +22,27 @@
    diff --git a/cove/cove_360/templates/cove_360/components/explore_checking.html b/cove/cove_360/templates/cove_360/components/explore_checking.html index 8ceb6d1..c865672 100644 --- a/cove/cove_360/templates/cove_360/components/explore_checking.html +++ b/cove/cove_360/templates/cove_360/components/explore_checking.html @@ -123,5 +123,4 @@

    {{usefulness_checks_count }}

    \ No newline at end of file diff --git a/cove/cove_360/templates/cove_360/components/explore_publishing.html b/cove/cove_360/templates/cove_360/components/explore_publishing.html index 0ae5f5f..19bbcf0 100644 --- a/cove/cove_360/templates/cove_360/components/explore_publishing.html +++ b/cove/cove_360/templates/cove_360/components/explore_publishing.html @@ -86,42 +86,39 @@

    Report

    {% include "cove_360/components/explore/usefulness.html" %} diff --git a/cove/cove_360/templates/cove_360/publisher_not_found.html b/cove/cove_360/templates/cove_360/publisher_not_found.html index f1949a3..70bf2d0 100644 --- a/cove/cove_360/templates/cove_360/publisher_not_found.html +++ b/cove/cove_360/templates/cove_360/publisher_not_found.html @@ -12,14 +12,13 @@

    Problem submitting your data

    {% endblock %} From dae6f670660b14f926e71a389f06808115f10a57 Mon Sep 17 00:00:00 2001 From: Michael Wood Date: Thu, 28 Nov 2024 12:03:58 +0000 Subject: [PATCH 05/27] wip --- .eslintrc | 23 +++++++++++++++++++++++ package.json | 14 ++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 .eslintrc create mode 100644 package.json diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..fc052dc --- /dev/null +++ b/.eslintrc @@ -0,0 +1,23 @@ +{ + "root": true, + "env": { + "browser": true, + "es2021": true, + "jquery": true + }, + "plugins": [ + "html" + ], + "parserOptions": { + "ecmaVersion": "latest" + }, + "extends": [ + "eslint-config-semistandard" + ], + "globals": { + "URI": "readonly" + }, + "rules": { + "comma-dangle": "error", + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..bfd33bf --- /dev/null +++ b/package.json @@ -0,0 +1,14 @@ +{ + "devDependencies": { + "eslint": "^8.29.0", + "eslint-config-semistandard": "^17.0.0", + "eslint-config-standard": "^17.0.0", + "eslint-plugin-html": "^7.1.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-n": "^15.6.0", + "eslint-plugin-promise": "^6.1.1" + }, + "engines": { + "node": ">=14.0.0" + } +} From 0a806955392f5045fde1693e348fd6ab6394be7e Mon Sep 17 00:00:00 2001 From: Michael Wood Date: Mon, 2 Dec 2024 16:59:13 +0000 Subject: [PATCH 06/27] wip --- .../cove_360/components/explore/summary.html | 29 +++++++----- cove/cove_360/tests_functional.py | 45 +++++++++++-------- 2 files changed, 44 insertions(+), 30 deletions(-) diff --git a/cove/cove_360/templates/cove_360/components/explore/summary.html b/cove/cove_360/templates/cove_360/components/explore/summary.html index 84aedcd..204492b 100644 --- a/cove/cove_360/templates/cove_360/components/explore/summary.html +++ b/cove/cove_360/templates/cove_360/components/explore/summary.html @@ -188,15 +188,11 @@

    Getting further help

    You can read about common data errors and what causes them in the Common Errors section.

    Visit our Data Quality Dashboard to see the data quality of 360Giving data as a whole and for each individual publisher. If you have already published data, you can view your own publisher page there too. It provides insights into the key features that make the data useful for analysis to help publishers to identify opportunities for their data to be improved.

    - {% if conversion == 'flattenable' %} - - - {% csrf_token %} - - {% endif %} -{% if conversion == 'unflatten' or conversion == 'flatten'%} -

    +
    +

    Data Conversion

    + {% if conversion == 'unflatten' or conversion == 'flatten'%} +

    {% if conversion_warning_messages or conversion_error %} {% trans "Data conversion unsuccessful - " %} {% else %} @@ -205,7 +201,7 @@

    {% if conversion_warning_messages %} {% blocktrans count n_warnings=conversion_warning_messages|length %}{{n_warnings}} Error has been found{% plural %}{{n_warnings}} Errors have been found{% endblocktrans %} {% endif %} -

    +

    {% if conversion == 'unflatten' %}

    {% trans "Before checking your data we needed to convert it to JSON" %}{% if conversion_error or conversion_warning_messages %}{% blocktrans %} but we were not able to do this successfully{% endblocktrans %}{% endif %}.

    @@ -243,13 +239,21 @@

    Share

    {% trans "You can share these test results with others by using the following url:" %}

    {{ current_url }} - +

    {% trans "If your data is not suitable for sharing publicly, then you should treat this url with care. Only share it with people who have permission to access the data." %}

    {% trans "After 7 days, the link will expire and the data will be deleted from our servers - so the results will no longer be available. You can revisit these results until then." %}

    -

    Download

    +

    Download

    {% trans "This application converts data in Excel and CSV format into JSON format, allowing you download the converted version." %}

    {% trans "If your file is originally in JSON format select ‘Convert to Spreadsheet’ in the summary section to create an Excel version of the file." %}

    + + {% if conversion == 'flattenable' %} +
    + + {% csrf_token %} +
    + {% endif %} + {% if not conversion_error and conversion != 'flattenable' %}

    {% trans "We provide the following formats to download:" %}

    - {% endif %} \ No newline at end of file + {% endif %} +
    \ No newline at end of file diff --git a/cove/cove_360/tests_functional.py b/cove/cove_360/tests_functional.py index 1b5d476..86648f9 100644 --- a/cove/cove_360/tests_functional.py +++ b/cove/cove_360/tests_functional.py @@ -5,7 +5,7 @@ import requests from selenium import webdriver from selenium.webdriver.common.by import By -from selenium.common.exceptions import NoSuchElementException +from selenium.common.exceptions import NoSuchElementException, ElementNotInteractableException from seleniumlogin import force_login import time import os @@ -36,15 +36,18 @@ def wait_for_results_page(browser): @pytest.fixture(scope="module") def browser(request): - if BROWSER == 'ChromeHeadless': + if BROWSER == 'Chrome': chrome_options = Options() - if not os.environ.get("UI"): - chrome_options.add_argument("--headless") + browser = webdriver.Chrome(chrome_options=chrome_options) + elif BROWSER == 'ChromeHeadless': + chrome_options = Options() + chrome_options.add_argument("--headless") # uncomment this if "DevToolsActivePort" error # chrome_options.add_argument("--remote-debugging-port=9222") browser = webdriver.Chrome(chrome_options=chrome_options) else: browser = getattr(webdriver, BROWSER)() + browser.implicitly_wait(3) request.addfinalizer(lambda: browser.quit()) return browser @@ -289,10 +292,6 @@ def check_url_input_result_page(server_url, browser, httpserver, source_filename ]) @pytest.mark.parametrize('flatten_or_unflatten', ['flatten', 'unflatten']) def test_flattentool_warnings(server_url, browser, httpserver, monkeypatch, warning_args, flatten_or_unflatten, iserror): - # If we're testing a remove server then we can't run this test as we can't - # set up the mocks - if 'CUSTOM_SERVER_URL' in os.environ: - pytest.skip() if flatten_or_unflatten == 'flatten': source_filename = 'example.json' else: @@ -324,12 +323,29 @@ def mockflatten(input_name, output_name, *args, **kwargs): # flattentool behaviour with a mock below httpserver.serve_content('{}') source_url = httpserver.url + '/' + source_filename - browser.get(server_url + '?source_url=' + source_url) + + browser.get(server_url) + + browser.find_element_by_id("link-tab-link").click() + browser.find_element_by_id("id_source_url").send_keys(source_url) + browser.find_element_by_id("submit-link-btn").click() + + wait_for_results_page(browser) + + browser.find_element_by_class_name("cookie-consent-no").click() + # The file conversion stuff is in the summary section of the results + # (which is the default tab) if source_filename.endswith('.json'): browser.find_element_by_name("flatten").click() - time.sleep(3) + time.sleep(2) + + try: + browser.find_element_by_class_name("cookie-consent-no").click() + except ElementNotInteractableException: + # Happens if already dismissed + pass assert 'Warning' not in browser.find_element_by_tag_name("body").text @@ -343,19 +359,12 @@ def mockflatten(input_name, output_name, *args, **kwargs): assert warning_heading in conversion_title_text else: assert warning_heading in conversion_title_text - # should be a cross - assert conversion_title.find_element_by_class_name('font-tick').get_attribute('class') == 'font-tick cross' - browser.find_element_by_class_name("cookie-consent-no").click() - conversion_title.click() - time.sleep(2) - assert warning_args[0] in browser.find_element_by_id('conversion-body').text + assert warning_args[0] in browser.find_element_by_id('conversion-area').text else: if flatten_or_unflatten == 'flatten': assert warning_heading not in conversion_title_text else: assert warning_heading not in conversion_title_text - # should be a tick - assert conversion_title.find_element_by_class_name('font-tick').get_attribute('class') == 'font-tick tick' @pytest.mark.parametrize(('source_filename'), [ From 569fd6fa3ebd349215bd50b2ea35a0e7fcfdef55 Mon Sep 17 00:00:00 2001 From: Michael Wood Date: Mon, 2 Dec 2024 17:02:15 +0000 Subject: [PATCH 07/27] wip --- .github/workflows/lint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 559737b..cbd19c4 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -21,4 +21,4 @@ jobs: - run: flake8 - run: npm install - - run: ./node_modules/eslint/bin/eslint.js --ext .js --ext .html grantnav/frontend/templates/** \ No newline at end of file + - run: ./node_modules/eslint/bin/eslint.js --ext .js --ext .html cove/cove_360/** From 4e56b0ce49fc37fa5d420980130c91428d550daa Mon Sep 17 00:00:00 2001 From: Michael Wood Date: Mon, 2 Dec 2024 17:40:44 +0000 Subject: [PATCH 08/27] wip --- cove/cove_360/context_processors.py | 1 + cove/cove_360/templates/cove_360/base.html | 2 +- cove/cove_360/tests_functional.py | 65 ++++++---------------- cove/cove_project/settings.py | 5 ++ 4 files changed, 25 insertions(+), 48 deletions(-) diff --git a/cove/cove_360/context_processors.py b/cove/cove_360/context_processors.py index 26de178..bf6047e 100644 --- a/cove/cove_360/context_processors.py +++ b/cove/cove_360/context_processors.py @@ -5,4 +5,5 @@ def additional_context(request): return { "DATA_SUBMISSION_ENABLED": settings.DATA_SUBMISSION_ENABLED, "DEBUG": settings.DEBUG, + "DISABLE_COOKIE_POPUP": settings.DISABLE_COOKIE_POPUP, } diff --git a/cove/cove_360/templates/cove_360/base.html b/cove/cove_360/templates/cove_360/base.html index 5dec16e..e4fc7af 100644 --- a/cove/cove_360/templates/cove_360/base.html +++ b/cove/cove_360/templates/cove_360/base.html @@ -71,7 +71,7 @@

    {% block hero_title %}Data Quality Tool{% endblock %} - {% if not DEBUG %} + {% if DEBUG == True or DISABLE_COOKIE_POPUP == False %} {% include "cove_360/components/cookie_consent.html" %} {% endif %} diff --git a/cove/cove_360/tests_functional.py b/cove/cove_360/tests_functional.py index 86648f9..d3e679f 100644 --- a/cove/cove_360/tests_functional.py +++ b/cove/cove_360/tests_functional.py @@ -20,6 +20,8 @@ PREFIX_360 = os.environ.get('PREFIX_360', '/') +settings.DISABLE_COOKIE_POPUP = True + # Ensure the correct version of chromedriver is installed try: chromedriver_autoinstaller.install() @@ -204,8 +206,6 @@ def test_explore_360_url_input(server_url, browser, httpserver, source_filename, browser.get(server_url) - browser.find_element_by_class_name("cookie-consent-no").click() - browser.find_element_by_id("link-tab-link").click() browser.find_element_by_id("id_source_url").send_keys(source_url) browser.find_element_by_id("submit-link-btn").click() @@ -215,7 +215,6 @@ def test_explore_360_url_input(server_url, browser, httpserver, source_filename, # reload results page with ?open-all=true to see all values at once browser.get(f"{browser.current_url}?open-all=true") - browser.find_element_by_class_name("cookie-consent-no").click() # Do the assertions check_url_input_result_page(server_url, browser, httpserver, source_filename, expected_text, conversion_successful, authed) @@ -332,7 +331,6 @@ def mockflatten(input_name, output_name, *args, **kwargs): wait_for_results_page(browser) - browser.find_element_by_class_name("cookie-consent-no").click() # The file conversion stuff is in the summary section of the results # (which is the default tab) @@ -341,12 +339,6 @@ def mockflatten(input_name, output_name, *args, **kwargs): time.sleep(2) - try: - browser.find_element_by_class_name("cookie-consent-no").click() - except ElementNotInteractableException: - # Happens if already dismissed - pass - assert 'Warning' not in browser.find_element_by_tag_name("body").text warning_heading = "Data conversion unsuccessful - 1 Error has been found" @@ -380,17 +372,17 @@ def test_error_modal(server_url, browser, httpserver, source_filename): source_url = httpserver.url + '/' + source_filename browser.get(server_url) - browser.find_element_by_class_name("cookie-consent-no").click() - browser.find_element_by_partial_link_text('Link').click() - time.sleep(0.5) - browser.find_element_by_id('id_source_url').send_keys(source_url) - browser.find_element_by_css_selector("#fetchURL > div.form-group > button.btn.btn-primary").click() - time.sleep(1) + browser.find_element_by_id("link-tab-link").click() + browser.find_element_by_id("id_source_url").send_keys(source_url) + browser.find_element_by_id("submit-link-btn").click() + + wait_for_results_page(browser) + + #FIXME Modals not working # Click and un-collapse all explore sections all_sections = browser.find_elements_by_class_name('panel-heading') - browser.find_element_by_class_name("cookie-consent-no").click() for section in all_sections: if section.get_attribute('data-toggle') == "collapse" and section.get_attribute('aria-expanded') != 'true': section.click() @@ -432,7 +424,6 @@ def test_check_schema_link_on_result_page(server_url, browser, httpserver, sourc source_url = httpserver.url + '/' + source_filename browser.get(server_url) - browser.find_element_by_class_name("cookie-consent-no").click() browser.find_element_by_partial_link_text('Link').click() time.sleep(0.5) browser.find_element_by_id('id_source_url').send_keys(source_url) @@ -442,7 +433,6 @@ def test_check_schema_link_on_result_page(server_url, browser, httpserver, sourc # Click and un-collapse all explore sections all_sections = browser.find_elements_by_class_name('panel-heading') - browser.find_element_by_class_name("cookie-consent-no").click() for section in all_sections: if section.get_attribute('data-toggle') == "collapse" and section.get_attribute('aria-expanded') != 'true': section.click() @@ -531,9 +521,6 @@ def test_publishing_invalid_domain(server_url, browser): browser.get(server_url) - # Dismiss the cookie popup - browser.find_element_by_class_name("cookie-consent-no").click() - url_input = browser.find_element(By.CSS_SELECTOR, "#self-publishing-form input[type='url']") url_input.send_keys("https://raw.githubusercontent.com/OpenDataServices/grantnav-sampledata/master/grantnav-20180903134856.json") @@ -557,7 +544,6 @@ def test_codelist_validation(server_url, browser, httpserver): source_url = httpserver.url + '/' + source_filename browser.get(server_url) - browser.find_element_by_class_name("cookie-consent-no").click() browser.find_element_by_partial_link_text('Link').click() time.sleep(0.5) browser.find_element_by_id('id_source_url').send_keys(source_url) @@ -565,9 +551,6 @@ def test_codelist_validation(server_url, browser, httpserver): time.sleep(1) - browser.find_element_by_class_name("cookie-consent-no").click() - time.sleep(0.5) - # Click and un-collapse validation section browser.find_element_by_id('validation-panel-heading').click() time.sleep(0.5) @@ -590,7 +573,6 @@ def test_oneof_validation(server_url, browser, httpserver): source_url = httpserver.url + '/' + source_filename browser.get(server_url) - browser.find_element_by_class_name("cookie-consent-no").click() browser.find_element_by_partial_link_text('Link').click() time.sleep(0.5) browser.find_element_by_id('id_source_url').send_keys(source_url) @@ -598,9 +580,6 @@ def test_oneof_validation(server_url, browser, httpserver): time.sleep(1) - browser.find_element_by_class_name("cookie-consent-no").click() - time.sleep(0.5) - # Click and un-collapse validation section browser.find_element_by_id('validation-panel-heading').click() time.sleep(0.5) @@ -645,30 +624,22 @@ def test_quality_checks(server_url, browser, httpserver, source_filename, expect source_url = httpserver.url + '/' + source_filename browser.get(server_url) - browser.find_element_by_class_name("cookie-consent-no").click() - browser.find_element_by_partial_link_text('Link').click() - time.sleep(0.5) - browser.find_element_by_id('id_source_url').send_keys(source_url) - browser.find_element_by_css_selector("#fetchURL > div.form-group > button.btn.btn-primary").click() - time.sleep(1) + browser.find_element_by_id("link-tab-link").click() + browser.find_element_by_id("id_source_url").send_keys(source_url) + browser.find_element_by_id("submit-link-btn").click() - browser.find_element_by_class_name("cookie-consent-no").click() - time.sleep(0.5) + wait_for_results_page() - try: - # Click and un-collapse quality accuracy section - browser.find_element_by_id('quality-accuracy-panel-heading').click() - time.sleep(0.5) + # reload results page with ?open-all=true to see all values at once + browser.get(f"{browser.current_url}?open-all=true") - quality_accuracy_body_text = browser.find_element_by_id('quality-accuracy-body').text - except NoSuchElementException: - quality_accuracy_body_text = "" + body_text = browser.find_element_by_tag_name('body').text for expected_text in expected_texts: - assert expected_text in quality_accuracy_body_text, f"Expected: '{expected_text}'\nGot: '{quality_accuracy_body_text}'" + assert expected_text in body_text, f"Expected: '{expected_text}'\nGot: '{body_text}'" for unexpected_text in unexpected_texts: - assert unexpected_text not in quality_accuracy_body_text + assert unexpected_text not in body_text def test_file_submission(server_url, browser, httpserver): diff --git a/cove/cove_project/settings.py b/cove/cove_project/settings.py index a477fe1..6f65cbd 100644 --- a/cove/cove_project/settings.py +++ b/cove/cove_project/settings.py @@ -127,3 +127,8 @@ if "true" in os.environ.get("DATA_SUBMISSION_ENABLED", "").lower(): DATA_SUBMISSION_ENABLED = True + +DISABLE_COOKIE_POPUP = False + +if "true" in os.environ.get("DISABLE_COOKIE_POPUP", "").lower(): + DISABLE_COOKIE_POPUP = True From 32825ffd4a4b8f8d9aeb1f09979a000d326d6d47 Mon Sep 17 00:00:00 2001 From: Michael Wood Date: Mon, 2 Dec 2024 18:23:38 +0000 Subject: [PATCH 09/27] wip --- cove/cove_360/templates/cove_360/500.html | 17 +-- cove/cove_360/tests_functional.py | 126 ++++++---------------- 2 files changed, 33 insertions(+), 110 deletions(-) diff --git a/cove/cove_360/templates/cove_360/500.html b/cove/cove_360/templates/cove_360/500.html index 890d25f..941ac3e 100644 --- a/cove/cove_360/templates/cove_360/500.html +++ b/cove/cove_360/templates/cove_360/500.html @@ -1,25 +1,14 @@ -{% extends app_base_template %} +{% extends 'base.html' %} {% load i18n %} {% block content %} -
    -
    -

    - {% trans 'Internal Server Error' %} +

    + {% trans 'Internal Server Error' %}

    -
    -

    {% blocktrans %}Something went wrong with your request. This could be due to a bug in the application and/or the data you supplied.{% endblocktrans %}

    {% if request.sentry.id %}

    {% blocktrans %}This error has been automatically reported to our development team. If you {% endblocktrans %}{% trans "get in touch" %}, {% blocktrans %}please reference this error as {% endblocktrans %}{{ request.sentry.id }}.

    {% endif %} -
    -
    {% endblock %} -{% block extrapiwik %} -{% if piwik.dimension_map.page_type %} -_paq.push(['setCustomDimension', {{piwik.dimension_map.page_type}}, '500 error']); -{% endif %} -{% endblock %} diff --git a/cove/cove_360/tests_functional.py b/cove/cove_360/tests_functional.py index d3e679f..7581819 100644 --- a/cove/cove_360/tests_functional.py +++ b/cove/cove_360/tests_functional.py @@ -365,11 +365,8 @@ def mockflatten(input_name, output_name, *args, **kwargs): def test_error_modal(server_url, browser, httpserver, source_filename): with open(os.path.join('cove_360', 'fixtures', source_filename), 'rb') as fp: httpserver.serve_content(fp.read()) - if 'CUSTOM_SERVER_URL' in os.environ: - # Use urls pointing to GitHub if we have a custom (probably non local) server URL - source_url = 'https://raw.githubusercontent.com/ThreeSixtyGiving/dataquality/main/cove/cove_360/fixtures/' + source_filename - else: - source_url = httpserver.url + '/' + source_filename + + source_url = httpserver.url + '/' + source_filename browser.get(server_url) @@ -411,37 +408,6 @@ def test_error_modal(server_url, browser, httpserver, source_filename): assert len(table_rows) == 4 -@pytest.mark.parametrize(('source_filename', 'expected_text'), [ - ('fundingproviders-grants_fixed_2_grants.json', '360Giving JSON Package Schema') - ]) -def test_check_schema_link_on_result_page(server_url, browser, httpserver, source_filename, expected_text): - with open(os.path.join('cove_360', 'fixtures', source_filename), 'rb') as fp: - httpserver.serve_content(fp.read()) - if 'CUSTOM_SERVER_URL' in os.environ: - # Use urls pointing to GitHub if we have a custom (probably non local) server URL - source_url = 'https://raw.githubusercontent.com/ThreeSixtyGiving/dataquality/main/cove/cove_360/fixtures/' + source_filename - else: - source_url = httpserver.url + '/' + source_filename - - browser.get(server_url) - browser.find_element_by_partial_link_text('Link').click() - time.sleep(0.5) - browser.find_element_by_id('id_source_url').send_keys(source_url) - browser.find_element_by_css_selector("#fetchURL > div.form-group > button.btn.btn-primary").click() - - time.sleep(1) - - # Click and un-collapse all explore sections - all_sections = browser.find_elements_by_class_name('panel-heading') - for section in all_sections: - if section.get_attribute('data-toggle') == "collapse" and section.get_attribute('aria-expanded') != 'true': - section.click() - time.sleep(0.5) - schema_link = browser.find_element_by_link_text(expected_text) - schema_link.click() - browser.find_element_by_id('giving-json-schemas') - - @pytest.mark.parametrize(('data_url'), [ reverse_lazy('results', args=['0']), reverse_lazy('results', args=['324ea8eb-f080-43ce-a8c1-9f47b28162f3']), @@ -450,47 +416,25 @@ def test_url_invalid_dataset_request(server_url, browser, data_url): # Test a badly formed hexadecimal UUID string # Trim the / off reverse_lazy result as server_url has trailing slash to avoid # e.g. //results/0 + browser.get("%s%s" % (server_url, data_url[1:])) assert "We don't seem to be able to find the data you requested." in browser.find_element_by_tag_name('body').text # Test for well formed UUID that doesn't identify any dataset that exists browser.get("%s%s" % (server_url, reverse_lazy('results', args=['38e267ce-d395-46ba-acbf-2540cdd0c810'])[1:])) assert "We don't seem to be able to find the data you requested." in browser.find_element_by_tag_name('body').text assert '360Giving' in browser.find_element_by_tag_name('body').text - #363 - Tests there is padding round the 'go to home' button - success_button = browser.find_element_by_class_name('success-button') - assert success_button.value_of_css_property('padding-bottom') == '20px' def test_500_error(server_url, browser): browser.get(server_url + 'test/500') # Check that our nice error message is there assert 'Something went wrong' in browser.find_element_by_tag_name('body').text - # Check for the exclamation icon - # This helps to check that the theme including the css has been loaded - # properly - icon_span = browser.find_element_by_class_name('panel-danger').find_element_by_tag_name('span') - assert 'Glyphicons Halflings' in icon_span.value_of_css_property('font-family') - assert icon_span.value_of_css_property('color') == 'rgba(255, 255, 255, 1)' def test_common_errors_page(server_url, browser): browser.get(server_url + 'common_errors/') - assert "Common Errors" in browser.find_element_by_tag_name('h2').text - assert '360Giving' in browser.find_element_by_tag_name('h1').text - - -@pytest.mark.parametrize(('anchor_text'), [ - ('uri'), - ('date-time'), - ('required'), - ('enum'), - ('string'), - ('number') - ]) -def test_common_errors_page_anchors(server_url, browser, anchor_text): - # Checks we have sections for each our error messages - browser.get(server_url + 'common_errors/') - browser.find_element_by_id(anchor_text) + assert "Common Errors" in browser.find_element_by_tag_name('body').text + assert '360Giving' in browser.find_element_by_tag_name('body').text def test_favicon(server_url, browser): @@ -544,21 +488,20 @@ def test_codelist_validation(server_url, browser, httpserver): source_url = httpserver.url + '/' + source_filename browser.get(server_url) - browser.find_element_by_partial_link_text('Link').click() - time.sleep(0.5) - browser.find_element_by_id('id_source_url').send_keys(source_url) - browser.find_element_by_css_selector("#fetchURL > div.form-group > button.btn.btn-primary").click() - time.sleep(1) + browser.find_element_by_id("link-tab-link").click() + browser.find_element_by_id("id_source_url").send_keys(source_url) + browser.find_element_by_id("submit-link-btn").click() + + wait_for_results_page(browser) + # reload results page with ?open-all=true to see all values at once + browser.get(f"{browser.current_url}?open-all=true") - # Click and un-collapse validation section - browser.find_element_by_id('validation-panel-heading').click() - time.sleep(0.5) + body_text = browser.find_element_by_name("body") - validation_body_text = browser.find_element_by_id('validation-body').text - assert "Codelist Errors" in validation_body_text - assert "BAD" in validation_body_text - assert "FRG010" not in validation_body_text + assert "Codelist Errors" in body_text + assert "BAD" in body_text + assert "FRG010" not in body_text def test_oneof_validation(server_url, browser, httpserver): @@ -566,28 +509,22 @@ def test_oneof_validation(server_url, browser, httpserver): with open(os.path.join('cove_360', 'fixtures', source_filename), 'rb') as fp: httpserver.serve_content(fp.read()) - if 'CUSTOM_SERVER_URL' in os.environ: - # Use urls pointing to GitHub if we have a custom (probably non local) server URL - source_url = 'https://raw.githubusercontent.com/ThreeSixtyGiving/dataquality/main/cove/cove_360/fixtures/' + source_filename - else: - source_url = httpserver.url + '/' + source_filename + + source_url = httpserver.url + '/' + source_filename browser.get(server_url) - browser.find_element_by_partial_link_text('Link').click() - time.sleep(0.5) - browser.find_element_by_id('id_source_url').send_keys(source_url) - browser.find_element_by_css_selector("#fetchURL > div.form-group > button.btn.btn-primary").click() - time.sleep(1) + browser.find_element_by_id("link-tab-link").click() + browser.find_element_by_id("id_source_url").send_keys(source_url) + browser.find_element_by_id("submit-link-btn").click() + + wait_for_results_page(browser) + # reload results page with ?open-all=true to see all values at once + browser.get(f"{browser.current_url}?open-all=true") - # Click and un-collapse validation section - browser.find_element_by_id('validation-panel-heading').click() - time.sleep(0.5) + body_text = browser.find_element_by_tag_name("body").text - validation_body_text = browser.find_element_by_id('validation-body').text - assert "Only 1 of recipientOrganization or recipientIndividual is permitted, but both are present" in validation_body_text - validation_body_html = browser.find_element_by_id("validation-body").get_attribute("innerHTML") - assert "Only 1 of recipientOrganization or recipientIndividual is permitted, but both are present" in validation_body_html + assert "Only 1 of recipientOrganization or recipientIndividual is permitted, but both are present" in body_text @pytest.mark.parametrize(('source_filename', 'expected_texts', 'unexpected_texts'), [ @@ -617,11 +554,8 @@ def test_oneof_validation(server_url, browser, httpserver): def test_quality_checks(server_url, browser, httpserver, source_filename, expected_texts, unexpected_texts): with open(os.path.join('cove_360', 'fixtures', source_filename), 'rb') as fp: httpserver.serve_content(fp.read()) - if 'CUSTOM_SERVER_URL' in os.environ: - # Use urls pointing to GitHub if we have a custom (probably non local) server URL - source_url = 'https://raw.githubusercontent.com/ThreeSixtyGiving/dataquality/main/cove/cove_360/fixtures/' + source_filename - else: - source_url = httpserver.url + '/' + source_filename + + source_url = httpserver.url + '/' + source_filename browser.get(server_url) @@ -629,7 +563,7 @@ def test_quality_checks(server_url, browser, httpserver, source_filename, expect browser.find_element_by_id("id_source_url").send_keys(source_url) browser.find_element_by_id("submit-link-btn").click() - wait_for_results_page() + wait_for_results_page(browser) # reload results page with ?open-all=true to see all values at once browser.get(f"{browser.current_url}?open-all=true") From 69ad49f82656e10785ee519e02bbf51b6d3f871f Mon Sep 17 00:00:00 2001 From: Michael Wood Date: Tue, 3 Dec 2024 20:47:40 +0000 Subject: [PATCH 10/27] wip --- cove/cove_360/tests_functional.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/cove/cove_360/tests_functional.py b/cove/cove_360/tests_functional.py index 7581819..0865f44 100644 --- a/cove/cove_360/tests_functional.py +++ b/cove/cove_360/tests_functional.py @@ -481,11 +481,8 @@ def test_codelist_validation(server_url, browser, httpserver): with open(os.path.join('cove_360', 'fixtures', source_filename), 'rb') as fp: httpserver.serve_content(fp.read()) - if 'CUSTOM_SERVER_URL' in os.environ: - # Use urls pointing to GitHub if we have a custom (probably non local) server URL - source_url = 'https://raw.githubusercontent.com/ThreeSixtyGiving/dataquality/main/cove/cove_360/fixtures/' + source_filename - else: - source_url = httpserver.url + '/' + source_filename + + source_url = httpserver.url + '/' + source_filename browser.get(server_url) @@ -497,7 +494,7 @@ def test_codelist_validation(server_url, browser, httpserver): # reload results page with ?open-all=true to see all values at once browser.get(f"{browser.current_url}?open-all=true") - body_text = browser.find_element_by_name("body") + body_text = browser.find_element_by_tag_name("body").text assert "Codelist Errors" in body_text assert "BAD" in body_text From efa57fd86926f0c46eff6b57b354bdc5767c8a32 Mon Sep 17 00:00:00 2001 From: Michael Wood Date: Wed, 4 Dec 2024 11:16:40 +0000 Subject: [PATCH 11/27] wip --- cove/cove_360/templates/cove_360/input.html | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/cove/cove_360/templates/cove_360/input.html b/cove/cove_360/templates/cove_360/input.html index e698431..75036ea 100644 --- a/cove/cove_360/templates/cove_360/input.html +++ b/cove/cove_360/templates/cove_360/input.html @@ -11,7 +11,13 @@

    Check your data

    -

    Upload or provide a link to a file, or paste JSON to check and convert your data and get feedback on whether it is valid 360Giving data.

    +

    Upload or provide a link to a file, or paste JSON to check and convert your data and get feedback on whether it is valid 360Giving data. +To preview how this tool works, try loading some sample data.

    +
    {% if 'upload' in input_methods %} @@ -81,6 +87,7 @@

    Check your data

    {% endif %} +

    Or submit your data for publication.

    {% endblock %} From a7f6d544d8770b9fd02a03a6177fc1bd9e8d9771 Mon Sep 17 00:00:00 2001 From: Michael Wood Date: Wed, 4 Dec 2024 12:41:26 +0000 Subject: [PATCH 12/27] wip --- cove/cove_360/fixtures/publishers.json | 3 +- .../cove_360/components/explore/validity.html | 3 +- cove/cove_360/templates/cove_360/input.html | 2 +- .../cove_360/publisher_not_found.html | 6 +- cove/cove_360/tests_functional.py | 129 +++++++++--------- cove/cove_360/views.py | 1 + 6 files changed, 74 insertions(+), 70 deletions(-) diff --git a/cove/cove_360/fixtures/publishers.json b/cove/cove_360/fixtures/publishers.json index 6592cc6..90a9952 100644 --- a/cove/cove_360/fixtures/publishers.json +++ b/cove/cove_360/fixtures/publishers.json @@ -9,7 +9,8 @@ "self_publish": { "enabled": true, "authorised_domains": [ - "test-data.360dev1.vs.mythic-beasts.com" + "test-data.360dev1.vs.mythic-beasts.com", + "www.threesixtygiving.org" ] } } diff --git a/cove/cove_360/templates/cove_360/components/explore/validity.html b/cove/cove_360/templates/cove_360/components/explore/validity.html index d23470b..dec4de5 100644 --- a/cove/cove_360/templates/cove_360/components/explore/validity.html +++ b/cove/cove_360/templates/cove_360/components/explore/validity.html @@ -75,9 +75,8 @@

    {% trans 'Codelist Errors' %}

    Some or all of your entries do not use the 360Giving Data Standard codelists correctly.

    {% blocktrans %}The fields below use closed codelists. When using these fields, you must use one of the pre-defined codelist values. If you use a value that is not on the relevant codelist, your data will not pass structural checks.{% endblocktrans %}

    -

    {% with additional_codelist_values=additional_closed_codelist_values %} - + {% include "additional_codelist_values.html" %} {% endwith %} diff --git a/cove/cove_360/templates/cove_360/input.html b/cove/cove_360/templates/cove_360/input.html index 75036ea..d8bbd60 100644 --- a/cove/cove_360/templates/cove_360/input.html +++ b/cove/cove_360/templates/cove_360/input.html @@ -11,7 +11,7 @@

    Check your data

    -

    Upload or provide a link to a file, or paste JSON to check and convert your data and get feedback on whether it is valid 360Giving data. +

    Upload, provide a link to a file, or paste JSON to check and convert your data and get feedback on whether it is valid 360Giving data. To preview how this tool works, try loading some sample data.

  • `s and ``s. -$table-cell-padding: 8px !default; -//** Padding for cells in `.table-condensed`. -$table-condensed-cell-padding: 5px !default; - -//** Default background color used for all tables. -$table-bg: transparent !default; -//** Background color used for `.table-striped`. -$table-bg-accent: #f9f9f9 !default; -//** Background color used for `.table-hover`. -$table-bg-hover: $gray-lighter !default; -$table-bg-active: $table-bg-hover !default; - -//** Border color for table and cell borders. -$table-border-color: $gray-lighter !default; - - -//== Buttons -// -//## For each of Bootstrap's buttons, define text, background and border color. - -$btn-font-weight: normal !default; - -$btn-default-color: #fff !default; -$btn-default-bg: $gray !default; -$btn-default-border: $btn-default-bg !default; - -$btn-primary-color: $btn-default-color !default; -$btn-primary-bg: $brand-primary !default; -$btn-primary-border: $btn-primary-bg !default; - -$btn-success-color: $btn-default-color !default; -$btn-success-bg: $brand-success !default; -$btn-success-border: $btn-success-bg !default; - -$btn-info-color: $btn-default-color !default; -$btn-info-bg: $brand-info !default; -$btn-info-border: $btn-info-bg !default; - -$btn-warning-color: $btn-default-color !default; -$btn-warning-bg: $brand-warning !default; -$btn-warning-border: $btn-warning-bg !default; - -$btn-danger-color: $btn-default-color !default; -$btn-danger-bg: $brand-danger !default; -$btn-danger-border: $btn-danger-bg !default; - -$btn-link-disabled-color: $gray-light !default; - -// Allows for customizing button radius independently from global border radius -$btn-border-radius-base: $border-radius-base !default; -$btn-border-radius-large: $border-radius-large !default; -$btn-border-radius-small: $border-radius-small !default; - - -//== Forms -// -//## - -//** `` background color -$input-bg: #fff !default; -//** `` background color -$input-bg-disabled: $gray-lighter !default; - -//** Text color for ``s -$input-color: $text-color !default; -//** `` border color -$input-border: #dce4ec !default; - -// TODO: Rename `$input-border-radius` to `$input-border-radius-base` in v4 -//** Default `.form-control` border radius -// This has no effect on ``s in CSS. -$input-border-radius: $border-radius-base !default; -//** Large `.form-control` border radius -$input-border-radius-large: $border-radius-large !default; -//** Small `.form-control` border radius -$input-border-radius-small: $border-radius-small !default; - -//** Border color for inputs on focus -$input-border-focus: $brand-primary !default; - -//** Placeholder text color -$input-color-placeholder: #acb6c0 !default; - -//** Default `.form-control` height -$input-height-base: ($line-height-computed + ($padding-base-vertical * 2) + 4) !default; -//** Large `.form-control` height -$input-height-large: (ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 4) !default; -//** Small `.form-control` height -$input-height-small: (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 4) !default; - -//** `.form-group` margin -$form-group-margin-bottom: 15px !default; - -$legend-color: $text-color !default; -$legend-border-color: transparent !default; - -//** Background color for textual input addons -$input-group-addon-bg: $gray-lighter !default; -//** Border color for textual input addons -$input-group-addon-border-color: $input-border !default; - -//** Disabled cursor for form controls and buttons. -$cursor-disabled: not-allowed !default; - - -//== Dropdowns -// -//## Dropdown menu container and contents. - -//** Background for the dropdown menu. -$dropdown-bg: #fff !default; -//** Dropdown menu `border-color`. -$dropdown-border: rgba(0,0,0,.15) !default; -//** Dropdown menu `border-color` **for IE8**. -$dropdown-fallback-border: #ccc !default; -//** Divider color for between dropdown items. -$dropdown-divider-bg: #e5e5e5 !default; - -//** Dropdown link text color. -$dropdown-link-color: $gray-dark !default; -//** Hover color for dropdown links. -$dropdown-link-hover-color: #fff !default; -//** Hover background for dropdown links. -$dropdown-link-hover-bg: $component-active-bg !default; - -//** Active dropdown menu item text color. -$dropdown-link-active-color: #fff !default; -//** Active dropdown menu item background color. -$dropdown-link-active-bg: $component-active-bg !default; - -//** Disabled dropdown menu item background color. -$dropdown-link-disabled-color: $gray-light !default; - -//** Text color for headers within dropdown menus. -$dropdown-header-color: $gray-light !default; - -//** Deprecated `$dropdown-caret-color` as of v3.1.0 -$dropdown-caret-color: #000 !default; - - -//-- Z-index master list -// -// Warning: Avoid customizing these values. They're used for a bird's eye view -// of components dependent on the z-axis and are designed to all work together. -// -// Note: These variables are not generated into the Customizer. - -$zindex-navbar: 1000 !default; -$zindex-dropdown: 1000 !default; -$zindex-popover: 1060 !default; -$zindex-tooltip: 1070 !default; -$zindex-navbar-fixed: 1030 !default; -$zindex-modal-background: 1040 !default; -$zindex-modal: 1050 !default; - - -//== Media queries breakpoints -// -//## Define the breakpoints at which your layout will change, adapting to different screen sizes. - -// Extra small screen / phone -//** Deprecated `$screen-xs` as of v3.0.1 -$screen-xs: 480px !default; -//** Deprecated `$screen-xs-min` as of v3.2.0 -$screen-xs-min: $screen-xs !default; -//** Deprecated `$screen-phone` as of v3.0.1 -$screen-phone: $screen-xs-min !default; - -// Small screen / tablet -//** Deprecated `$screen-sm` as of v3.0.1 -$screen-sm: 768px !default; -$screen-sm-min: $screen-sm !default; -//** Deprecated `$screen-tablet` as of v3.0.1 -$screen-tablet: $screen-sm-min !default; - -// Medium screen / desktop -//** Deprecated `$screen-md` as of v3.0.1 -$screen-md: 992px !default; -$screen-md-min: $screen-md !default; -//** Deprecated `$screen-desktop` as of v3.0.1 -$screen-desktop: $screen-md-min !default; - -// Large screen / wide desktop -//** Deprecated `$screen-lg` as of v3.0.1 -$screen-lg: 1200px !default; -$screen-lg-min: $screen-lg !default; -//** Deprecated `$screen-lg-desktop` as of v3.0.1 -$screen-lg-desktop: $screen-lg-min !default; - -// So media queries don't overlap when required, provide a maximum -$screen-xs-max: ($screen-sm-min - 1) !default; -$screen-sm-max: ($screen-md-min - 1) !default; -$screen-md-max: ($screen-lg-min - 1) !default; - - -//== Grid system -// -//## Define your custom responsive grid. - -//** Number of columns in the grid. -$grid-columns: 12 !default; -//** Padding between columns. Gets divided in half for the left and right. -$grid-gutter-width: 30px !default; -// Navbar collapse -//** Point at which the navbar becomes uncollapsed. -$grid-float-breakpoint: $screen-sm-min !default; -//** Point at which the navbar begins collapsing. -$grid-float-breakpoint-max: ($grid-float-breakpoint - 1) !default; - - -//== Container sizes -// -//## Define the maximum width of `.container` for different screen sizes. - -// Small screen / tablet -$container-tablet: (720px + $grid-gutter-width) !default; -//** For `$screen-sm-min` and up. -$container-sm: $container-tablet !default; - -// Medium screen / desktop -$container-desktop: (940px + $grid-gutter-width) !default; -//** For `$screen-md-min` and up. -$container-md: $container-desktop !default; - -// Large screen / wide desktop -$container-large-desktop: (1140px + $grid-gutter-width) !default; -//** For `$screen-lg-min` and up. -$container-lg: $container-large-desktop !default; - - -//== Navbar -// -//## - -// Basics of a navbar -$navbar-height: 80px !default; -$navbar-margin-bottom: $line-height-computed !default; -$navbar-border-radius: 0; -$navbar-padding-horizontal: floor(($grid-gutter-width / 2)) !default; -$navbar-padding-vertical: (($navbar-height - $line-height-computed) / 2) !default; -$navbar-collapse-max-height: 340px !default; - -$navbar-default-color: #fff !default; -$navbar-default-bg: $brand-primary !default; -$navbar-default-border: transparent !default; - -// Navbar links -$navbar-default-link-color: #fff !default; -$navbar-default-link-hover-color: $brand-success !default; -$navbar-default-link-hover-bg: transparent !default; -$navbar-default-link-active-color: #fff !default; -$navbar-default-link-active-bg: darken($navbar-default-bg, 10%) !default; -$navbar-default-link-disabled-color: #ccc !default; -$navbar-default-link-disabled-bg: transparent !default; - -// Navbar brand label -$navbar-default-brand-color: $navbar-default-link-color !default; -$navbar-default-brand-hover-color: $navbar-default-link-hover-color !default; -$navbar-default-brand-hover-bg: transparent !default; - -// Navbar toggle -$navbar-default-toggle-hover-bg: darken($navbar-default-bg, 10%) !default; -$navbar-default-toggle-icon-bar-bg: #fff !default; -$navbar-default-toggle-border-color: darken($navbar-default-bg, 10%) !default; - - -//=== Inverted navbar -// Reset inverted navbar basics -$navbar-inverse-color: #fff !default; -$navbar-inverse-bg: $brand-success !default; -$navbar-inverse-border: transparent !default; - -// Inverted navbar links -$navbar-inverse-link-color: #fff !default; -$navbar-inverse-link-hover-color: $brand-primary !default; -$navbar-inverse-link-hover-bg: transparent !default; -$navbar-inverse-link-active-color: #fff !default; -$navbar-inverse-link-active-bg: darken($navbar-inverse-bg, 5%) !default; -$navbar-inverse-link-disabled-color: #ccc !default; -$navbar-inverse-link-disabled-bg: transparent !default; - -// Inverted navbar brand label -$navbar-inverse-brand-color: $navbar-inverse-link-color !default; -$navbar-inverse-brand-hover-color: $navbar-inverse-link-hover-color !default; -$navbar-inverse-brand-hover-bg: transparent !default; - -// Inverted navbar toggle -$navbar-inverse-toggle-hover-bg: darken($navbar-inverse-bg, 10%) !default; -$navbar-inverse-toggle-icon-bar-bg: #fff !default; -$navbar-inverse-toggle-border-color: darken($navbar-inverse-bg, 10%) !default; - - -//== Navs -// -//## - -//=== Shared nav styles -$nav-link-padding: 10px 15px !default; -$nav-link-hover-bg: $gray-lighter !default; - -$nav-disabled-link-color: $gray-light !default; -$nav-disabled-link-hover-color: $gray-light !default; - -//== Tabs -$nav-tabs-border-color: $gray-lighter !default; - -$nav-tabs-link-hover-border-color: $gray-lighter !default; - -$nav-tabs-active-link-hover-bg: $body-bg !default; -$nav-tabs-active-link-hover-color: $brand-primary !default; -$nav-tabs-active-link-hover-border-color: $gray-lighter !default; - -$nav-tabs-justified-link-border-color: $gray-lighter !default; -$nav-tabs-justified-active-link-border-color: $body-bg !default; - -//== Pills -$nav-pills-border-radius: $border-radius-base !default; -$nav-pills-active-link-hover-bg: $component-active-bg !default; -$nav-pills-active-link-hover-color: $component-active-color !default; - - -//== Pagination -// -//## - -$pagination-color: #fff !default; -$pagination-bg: $brand-success !default; -$pagination-border: transparent !default; - -$pagination-hover-color: #fff !default; -$pagination-hover-bg: darken($brand-success, 15%) !default; -$pagination-hover-border: transparent !default; - -$pagination-active-color: #fff !default; -$pagination-active-bg: darken($brand-success, 15%) !default; -$pagination-active-border: transparent !default; - -$pagination-disabled-color: $gray-lighter !default; -$pagination-disabled-bg: lighten($brand-success, 15%) !default; -$pagination-disabled-border: transparent !default; - - -//== Pager -// -//## - -$pager-bg: $pagination-bg !default; -$pager-border: $pagination-border !default; -$pager-border-radius: 15px !default; - -$pager-hover-bg: $pagination-hover-bg !default; - -$pager-active-bg: $pagination-active-bg !default; -$pager-active-color: $pagination-active-color !default; - -$pager-disabled-color: #fff !default; - - -//== Jumbotron -// -//## - -$jumbotron-padding: 30px !default; -$jumbotron-color: inherit !default; -$jumbotron-bg: $gray-lighter !default; -$jumbotron-heading-color: inherit !default; -$jumbotron-font-size: ceil(($font-size-base * 1.5)) !default; -$jumbotron-heading-font-size: ceil(($font-size-base * 4.5)) !default; - - -//== Form states and alerts -// -//## Define colors for form feedback states and, by default, alerts. - -$state-success-text: #fff !default; -$state-success-bg: $brand-success !default; -$state-success-border: $brand-success !default; - -$state-info-text: #fff !default; -$state-info-bg: $brand-info !default; -$state-info-border: $brand-info !default; - -$state-warning-text: #fff !default; -$state-warning-bg: $brand-warning !default; -$state-warning-border: $brand-warning !default; - -$state-danger-text: #fff !default; -$state-danger-bg: $brand-danger !default; -$state-danger-border: $brand-danger !default; - - -//== Tooltips -// -//## - -//** Tooltip max width -$tooltip-max-width: 200px !default; -//** Tooltip text color -$tooltip-color: #fff !default; -//** Tooltip background color -$tooltip-bg: #000 !default; -$tooltip-opacity: .9 !default; - -//** Tooltip arrow width -$tooltip-arrow-width: 5px !default; -//** Tooltip arrow color -$tooltip-arrow-color: $tooltip-bg !default; - - -//== Popovers -// -//## - -//** Popover body background color -$popover-bg: #fff !default; -//** Popover maximum width -$popover-max-width: 276px !default; -//** Popover border color -$popover-border-color: rgba(0,0,0,.2) !default; -//** Popover fallback border color -$popover-fallback-border-color: #ccc !default; - -//** Popover title background color -$popover-title-bg: darken($popover-bg, 3%) !default; - -//** Popover arrow width -$popover-arrow-width: 10px !default; -//** Popover arrow color -$popover-arrow-color: $popover-bg !default; - -//** Popover outer arrow width -$popover-arrow-outer-width: ($popover-arrow-width + 1) !default; -//** Popover outer arrow color -$popover-arrow-outer-color: fadein($popover-border-color, 5%) !default; -//** Popover outer arrow fallback color -$popover-arrow-outer-fallback-color: darken($popover-fallback-border-color, 20%) !default; - - -//== Labels -// -//## - -//** Default label background color -$label-default-bg: $btn-default-bg !default; -//** Primary label background color -$label-primary-bg: $brand-primary !default; -//** Success label background color -$label-success-bg: $brand-success !default; -//** Info label background color -$label-info-bg: $brand-info !default; -//** Warning label background color -$label-warning-bg: $brand-warning !default; -//** Danger label background color -$label-danger-bg: $brand-danger !default; - -//** Default label text color -$label-color: #fff !default; -//** Default text color of a linked label -$label-link-hover-color: #fff !default; - - -//== Modals -// -//## - -//** Padding applied to the modal body -$modal-inner-padding: 20px !default; - -//** Padding applied to the modal title -$modal-title-padding: 15px !default; -//** Modal title line-height -$modal-title-line-height: $line-height-base !default; - -//** Background color of modal content area -$modal-content-bg: #fff !default; -//** Modal content border color -$modal-content-border-color: rgba(0,0,0,.2) !default; -//** Modal content border color **for IE8** -$modal-content-fallback-border-color: #999 !default; - -//** Modal backdrop background color -$modal-backdrop-bg: #000 !default; -//** Modal backdrop opacity -$modal-backdrop-opacity: .5 !default; -//** Modal header border color -$modal-header-border-color: #e5e5e5 !default; -//** Modal footer border color -$modal-footer-border-color: $modal-header-border-color !default; - -$modal-lg: 900px !default; -$modal-md: 600px !default; -$modal-sm: 300px !default; - - -//== Alerts -// -//## Define alert colors, border radius, and padding. - -$alert-padding: 15px !default; -$alert-border-radius: $border-radius-base !default; -$alert-link-font-weight: bold !default; - -$alert-success-bg: $state-success-bg !default; -$alert-success-text: $state-success-text !default; -$alert-success-border: $state-success-border !default; - -$alert-info-bg: $state-info-bg !default; -$alert-info-text: $state-info-text !default; -$alert-info-border: $state-info-border !default; - -$alert-warning-bg: $state-warning-bg !default; -$alert-warning-text: $state-warning-text !default; -$alert-warning-border: $state-warning-border !default; - -$alert-danger-bg: $state-danger-bg !default; -$alert-danger-text: $state-danger-text !default; -$alert-danger-border: $state-danger-border !default; - - -//== Progress bars -// -//## - -//** Background color of the whole progress component -$progress-bg: $gray-lighter !default; -//** Progress bar text color -$progress-bar-color: #fff !default; -//** Variable for setting rounded corners on progress bar. -$progress-border-radius: $border-radius-base !default; - -//** Default progress bar color -$progress-bar-bg: $brand-primary !default; -//** Success progress bar color -$progress-bar-success-bg: $brand-success !default; -//** Warning progress bar color -$progress-bar-warning-bg: $brand-warning !default; -//** Danger progress bar color -$progress-bar-danger-bg: $brand-danger !default; -//** Info progress bar color -$progress-bar-info-bg: $brand-info !default; - - -//== List group -// -//## - -//** Background color on `.list-group-item` -$list-group-bg: #fff !default; -//** `.list-group-item` border color -$list-group-border: $gray-lighter !default; -//** List group border radius -$list-group-border-radius: $border-radius-base !default; - -//** Background color of single list items on hover -$list-group-hover-bg: $gray-lighter !default; -//** Text color of active list items -$list-group-active-color: $component-active-color !default; -//** Background color of active list items -$list-group-active-bg: $component-active-bg !default; -//** Border color of active list elements -$list-group-active-border: $list-group-active-bg !default; -//** Text color for content within active list items -$list-group-active-text-color: lighten($list-group-active-bg, 40%) !default; - -//** Text color of disabled list items -$list-group-disabled-color: $gray-light !default; -//** Background color of disabled list items -$list-group-disabled-bg: $gray-lighter !default; -//** Text color for content within disabled list items -$list-group-disabled-text-color: $list-group-disabled-color !default; - -$list-group-link-color: #555 !default; -$list-group-link-hover-color: $list-group-link-color !default; -$list-group-link-heading-color: #333 !default; - - -//== Panels -// -//## - -$panel-bg: #fff !default; -$panel-body-padding: 15px !default; -$panel-heading-padding: 10px 15px !default; -$panel-footer-padding: $panel-heading-padding !default; -$panel-border-radius: $border-radius-base !default; - -//** Border color for elements within panels -$panel-inner-border: $gray-lighter !default; -$panel-footer-bg: $gray-lighter !default; - -$panel-default-text: $text-color !default; -$panel-default-border: $gray-lighter !default; -$panel-default-heading-bg: $gray-lighter !default; - -$panel-primary-text: #fff !default; -$panel-primary-border: $brand-primary !default; -$panel-primary-heading-bg: $brand-primary !default; - -$panel-success-text: $state-success-text !default; -$panel-success-border: $state-success-border !default; -$panel-success-heading-bg: $state-success-bg !default; - -$panel-info-text: $state-info-text !default; -$panel-info-border: $state-info-border !default; -$panel-info-heading-bg: $state-info-bg !default; - -$panel-warning-text: $state-warning-text !default; -$panel-warning-border: $state-warning-border !default; -$panel-warning-heading-bg: $state-warning-bg !default; - -$panel-danger-text: $state-danger-text !default; -$panel-danger-border: $state-danger-border !default; -$panel-danger-heading-bg: $state-danger-bg !default; - - -//== Thumbnails -// -//## - -//** Padding around the thumbnail image -$thumbnail-padding: 4px !default; -//** Thumbnail background color -$thumbnail-bg: $body-bg !default; -//** Thumbnail border color -$thumbnail-border: $gray-lighter !default; -//** Thumbnail border radius -$thumbnail-border-radius: $border-radius-base !default; - -//** Custom text color for thumbnail captions -$thumbnail-caption-color: $text-color !default; -//** Padding around the thumbnail caption -$thumbnail-caption-padding: 9px !default; - - -//== Wells -// -//## - -$well-bg: $gray-lighter !default; -$well-border: transparent !default; - - -//== Badges -// -//## - -$badge-color: #fff !default; -//** Linked badge text color on hover -$badge-link-hover-color: #fff !default; -$badge-bg: $brand-primary !default; - -//** Badge text color in active nav link -$badge-active-color: $brand-primary !default; -//** Badge background color in active nav link -$badge-active-bg: #fff !default; - -$badge-font-weight: bold !default; -$badge-line-height: 1 !default; -$badge-border-radius: 10px !default; - - -//== Breadcrumbs -// -//## - -$breadcrumb-padding-vertical: 8px !default; -$breadcrumb-padding-horizontal: 15px !default; -//** Breadcrumb background color -$breadcrumb-bg: $gray-lighter !default; -//** Breadcrumb text color -$breadcrumb-color: #ccc !default; -//** Text color of current page in the breadcrumb -$breadcrumb-active-color: $gray !default; -//** Textual separator for between breadcrumb elements -$breadcrumb-separator: "/" !default; - - -//== Carousel -// -//## - -$carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6) !default; - -$carousel-control-color: #fff !default; -$carousel-control-width: 15% !default; -$carousel-control-opacity: .5 !default; -$carousel-control-font-size: 20px !default; - -$carousel-indicator-active-bg: #fff !default; -$carousel-indicator-border-color: #fff !default; - -$carousel-caption-color: #fff !default; - - -//== Close -// -//## - -$close-font-weight: bold !default; -$close-color: #000 !default; -$close-text-shadow: none !default; - - -//== Code -// -//## - -$code-color: #c7254e !default; -$code-bg: #f9f2f4 !default; - -$kbd-color: #fff !default; -$kbd-bg: #333 !default; - -$pre-bg: $gray-lighter !default; -$pre-color: $gray-dark !default; -$pre-border-color: #ccc !default; -$pre-scrollable-max-height: 340px !default; - - -//== Type -// -//## - -//** Horizontal offset for forms and lists. -$component-offset-horizontal: 180px !default; -//** Text muted color -$text-muted: $gray-light !default; -//** Abbreviations and acronyms border color -$abbr-border-color: $gray-light !default; -//** Headings small color -$headings-small-color: $gray-dark !default; -//** Blockquote small color -$blockquote-small-color: $gray-light !default; -//** Blockquote font size -$blockquote-font-size: ($font-size-base * 1.25) !default; -//** Blockquote border color -$blockquote-border-color: $gray-lighter !default; -//** Page header border color -$page-header-border-color: transparent !default; -//** Width of horizontal description list titles -$dl-horizontal-offset: $component-offset-horizontal !default; -//** Point at which .dl-horizontal becomes horizontal -$dl-horizontal-breakpoint: $grid-float-breakpoint !default; -//** Horizontal line color. -$hr-border: $gray-lighter !default; diff --git a/cove/cove_360/sass/_custom-360.scss b/cove/cove_360/sass/_custom-360.scss deleted file mode 100644 index cea0954..0000000 --- a/cove/cove_360/sass/_custom-360.scss +++ /dev/null @@ -1,543 +0,0 @@ -// Flatly 3.3.5 -// Bootswatch -// ----------------------------------------------------- -// Cove custom - -// Example search terms - -body { - background-color: white -} - -.expand-collapse-all { - text-align: right; - padding-top: 100px; -} - -.panel-title.panel-title-explore { - font-size: 30px; - cursor: pointer; - - & small { - font-weight: 100; - font-size: 45%; - } - - & .glyphicon-collapse-down, & .glyphicon-collapse-up { - padding-right: 0px; - line-height: 33px; - color: #666; - } - - & span.glyphicon-save::before, { - color: #666; - } - - & span.glyphicon-list-alt::before { - color: #666; - vertical-align: text-bottom; - } -} - -.font-tick { - font-family: 'tick'; - margin-right: 5px; - - &.tick { - color: green; - - &::after { - content: '\2713'; - } - } - - &.cross { - color: red; - - &::after { - content: '\2715'; - } - } - - &.question { - color: orange; - - &::after { - content: '?'; - } - } -} - -ul.pagination a{ - padding: 4px; - font-size: 80%; -} - -.explore-help { - margin: 12px 35px; -} - -.panel-body p.icon-indent { - text-indent: 20px; - - & span { - color: #666 !important; - } -} - -.info-faq { - cursor: pointer; - margin-top:20px; - font-size: 16px; - color: #050505; - margin-bottom: 20px; - & span { - font-size:12px; - color: #ff9222; - } -} - -.highlight-background-text { - background-color: #E7EBE8 !important; -} - - -//////////// - -$web-font-path: "https://fonts.googleapis.com/css?family=Lato:400,700,400italic" !default; -@import url($web-font-path); - -// Navbar ===================================================================== - -.navbar { - border-width: 0; - - &-default { - - .badge { - background-color: #fff; - color: $navbar-default-bg; - } - } - - &-inverse { - - .badge { - background-color: #fff; - color: $navbar-inverse-bg; - } - } - - &-brand { - //grantnav changes - color: #FFF; - font-family: 'Ostrich Sans',sans-serif; - font-size: 48px; - letter-spacing: 2px; - line-height: 1.9em; - padding: 0px 12px; - @media (min-width: $grid-float-breakpoint) { - .navbar > .container &, - .navbar > .container-fluid & { - margin-left: 0; - } - } - &:hover { - color: #FFF !important - } - //grantnav - } - - &-header { - margin-left: 10px; - } -} - - -// Buttons ==================================================================== - -.btn { - border-width: 2px; -} - -.btn:active { - @include box-shadow(none); -} - -.btn-group.open .dropdown-toggle { - @include box-shadow(none); -} - -// Typography ================================================================= - -.text-primary, -.text-primary:hover { - color: $brand-primary; -} - -.text-success, -.text-success:hover { - color: $brand-success; -} - -.text-danger, -.text-danger:hover { - color: $brand-danger; -} - -.text-warning, -.text-warning:hover { - color: $brand-warning; -} - -.text-info, -.text-info:hover { - color: $brand-info; -} - -// grantnav -h1, .h1, -h2, .h2, -h3, .h3 { - margin-top: $line-height-computed; - margin-bottom: ($line-height-computed / 2); - - small, - .small { - font-size: 85%; - } -} -h4, .h4, -h5, .h5, -h6, .h6 { - margin-top: ($line-height-computed / 2); - margin-bottom: ($line-height-computed / 2); - - small, - .small { - font-size: 95%; - } -} -// - -// Tables ===================================================================== - -table, -.table { - - a:not(.btn) { - text-decoration: underline; - } - - .dropdown-menu a { - text-decoration: none; - } - - .success, - .warning, - .danger, - .info { - color: #fff; - - > th > a, - > td > a, - > a { - color: #fff; - } - } - - > thead > tr > th, - > tbody > tr > th, - > tfoot > tr > th, - > thead > tr > td, - > tbody > tr > td, - > tfoot > tr > td { - } - - &-bordered > thead > tr > th, - &-bordered > tbody > tr > th, - &-bordered > tfoot > tr > th, - &-bordered > thead > tr > td, - &-bordered > tbody > tr > td, - &-bordered > tfoot > tr > td { - border: 1px solid $table-border-color; - } -} - -// Forms ====================================================================== - -.form-control, -input { - border-width: 2px; - @include box-shadow(none); - - &:focus { - @include box-shadow(none); - } -} - -.has-warning { - .help-block, - .control-label, - .radio, - .checkbox, - .radio-inline, - .checkbox-inline, - &.radio label, - &.checkbox label, - &.radio-inline label, - &.checkbox-inline label, - .form-control-feedback { - color: $brand-warning; - } - - .form-control, - .form-control:focus { - border: 2px solid $brand-warning; - } - - .input-group-addon { - border-color: $brand-warning; - } -} - -.has-error { - .help-block, - .control-label, - .radio, - .checkbox, - .radio-inline, - .checkbox-inline, - &.radio label, - &.checkbox label, - &.radio-inline label, - &.checkbox-inline label, - .form-control-feedback { - color: $brand-danger; - } - - .form-control, - .form-control:focus { - border: 2px solid $brand-danger; - } - - .input-group-addon { - border-color: $brand-danger; - } -} - -.has-success { - .help-block, - .control-label, - .radio, - .checkbox, - .radio-inline, - .checkbox-inline, - &.radio label, - &.checkbox label, - &.radio-inline label, - &.checkbox-inline label, - .form-control-feedback { - color: $brand-success; - } - - .form-control, - .form-control:focus { - border: 2px solid $brand-success; - } - - .input-group-addon { - border-color: $brand-success; - } -} - -//grantnav - -::-webkit-input-placeholder {font-style:italic} -::-moz-placeholder {font-style:italic} /* firefox 19+ */ -:-ms-input-placeholder {font-style:italic} /* ie */ -input:-moz-placeholder {font-style:italic} - -.container-wrapper { - background-color: $brand-success; - margin-top: -21px; - padding-top: 15px; -} - -.search-box { - left: 18px; -} - -.search-icon { - right: 18px; - z-index: 1000; - position: relative; -} - -// Main search bar on landing page -.large-search { - display: inline-block; - vertical-align: top; - width: 79%; - margin: 0 auto; - padding: 10px 20px; - border-radius: 12px; - border: 2px solid #e5831e; - background-color: #FFF; - font-size: 28px; - height: 79px; -} - -.large-search-icon { - position: absolute; - right: 38px; - top: 12px; -} - -// Example search terms container -.search-help { - font-size: 1.1em; - color: #663a0e; - padding-top: 10px; - margin: 0 auto; - margin-bottom: 20px; - text-align: center; -} - -.col-vlg-offset-1 { - @media (min-width: 1400px) { - width: 1300px; - margin-left: auto; - margin-right: auto; - } -} -// - -// Navs ======================================================================= - -.nav { - .open > a, - .open > a:hover, - .open > a:focus { - border-color: transparent; - } -} - -.pager { - a, - a:hover { - color: #fff; - } - - .disabled { - &>a, - &>a:hover, - &>a:focus, - &>span { - background-color: $pagination-disabled-bg; - } - } -} - -// Indicators ================================================================= - -.close { - color: #fff; - text-decoration: none; - opacity: 0.4; - - &:hover, - &:focus { - color: #fff; - opacity: 1; - } -} - -.alert { - - .alert-link { - color: #fff; - text-decoration: underline; - } -} - -// Progress bars ============================================================== - -.progress { - height: 10px; - @include box-shadow(none); - .progress-bar { - font-size: 10px; - line-height: 10px; - } -} - -// Containers ================================================================= - -.well { - @include box-shadow(none); -} - -a.list-group-item { - - &.active, - &.active:hover, - &.active:focus { - border-color: $list-group-border; - } - - &-success { - &.active { - background-color: $state-success-bg; - } - - &.active:hover, - &.active:focus { - background-color: darken($state-success-bg, 5%); - } - } - - &-warning { - &.active { - background-color: $state-warning-bg; - } - - &.active:hover, - &.active:focus { - background-color: darken($state-warning-bg, 5%); - } - } - - &-danger { - &.active { - background-color: $state-danger-bg; - } - - &.active:hover, - &.active:focus { - background-color: darken($state-danger-bg, 5%); - } - } -} - -.panel { - &-default { - .close { - color: $text-color; - } - } -} - -.modal { - .close { - color: $text-color; - } -} - -.popover { - color: $text-color; -} - -html { - font-size: initial; -} \ No newline at end of file diff --git a/cove/cove_360/sass/bootstrap/_bootstrap-compass.scss b/cove/cove_360/sass/bootstrap/_bootstrap-compass.scss deleted file mode 100644 index 8fbc3cd..0000000 --- a/cove/cove_360/sass/bootstrap/_bootstrap-compass.scss +++ /dev/null @@ -1,9 +0,0 @@ -@function twbs-font-path($path) { - @return font-url($path, true); -} - -@function twbs-image-path($path) { - @return image-url($path, true); -} - -$bootstrap-sass-asset-helper: true; diff --git a/cove/cove_360/sass/bootstrap/_bootstrap-mincer.scss b/cove/cove_360/sass/bootstrap/_bootstrap-mincer.scss deleted file mode 100644 index 0c4655e..0000000 --- a/cove/cove_360/sass/bootstrap/_bootstrap-mincer.scss +++ /dev/null @@ -1,19 +0,0 @@ -// Mincer asset helper functions -// -// This must be imported into a .css.ejs.scss file. -// Then, <% %>-interpolations will be parsed as strings by Sass, and evaluated by EJS after Sass compilation. - - -@function twbs-font-path($path) { - // do something like following - // from "path/to/font.ext#suffix" to "<%- asset_path(path/to/font.ext)) + #suffix %>" - // from "path/to/font.ext?#suffix" to "<%- asset_path(path/to/font.ext)) + ?#suffix %>" - // or from "path/to/font.ext" just "<%- asset_path(path/to/font.ext)) %>" - @return "<%- asset_path("#{$path}".replace(/[#?].*$/, '')) + "#{$path}".replace(/(^[^#?]*)([#?]?.*$)/, '$2') %>"; -} - -@function twbs-image-path($file) { - @return "<%- asset_path("#{$file}") %>"; -} - -$bootstrap-sass-asset-helper: true; diff --git a/cove/cove_360/sass/bootstrap/_bootstrap-sprockets.scss b/cove/cove_360/sass/bootstrap/_bootstrap-sprockets.scss deleted file mode 100644 index 9fffc1e..0000000 --- a/cove/cove_360/sass/bootstrap/_bootstrap-sprockets.scss +++ /dev/null @@ -1,9 +0,0 @@ -@function twbs-font-path($path) { - @return font-path($path); -} - -@function twbs-image-path($path) { - @return image-path($path); -} - -$bootstrap-sass-asset-helper: true; diff --git a/cove/cove_360/sass/bootstrap/_bootstrap.scss b/cove/cove_360/sass/bootstrap/_bootstrap.scss deleted file mode 100644 index e72d1de..0000000 --- a/cove/cove_360/sass/bootstrap/_bootstrap.scss +++ /dev/null @@ -1,56 +0,0 @@ -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ - -// Core variables and mixins -@import "bootstrap/variables"; -@import "bootstrap/mixins"; - -// Reset and dependencies -@import "bootstrap/normalize"; -@import "bootstrap/print"; -@import "bootstrap/glyphicons"; - -// Core CSS -@import "bootstrap/scaffolding"; -@import "bootstrap/type"; -@import "bootstrap/code"; -@import "bootstrap/grid"; -@import "bootstrap/tables"; -@import "bootstrap/forms"; -@import "bootstrap/buttons"; - -// Components -@import "bootstrap/component-animations"; -@import "bootstrap/dropdowns"; -@import "bootstrap/button-groups"; -@import "bootstrap/input-groups"; -@import "bootstrap/navs"; -@import "bootstrap/navbar"; -@import "bootstrap/breadcrumbs"; -@import "bootstrap/pagination"; -@import "bootstrap/pager"; -@import "bootstrap/labels"; -@import "bootstrap/badges"; -@import "bootstrap/jumbotron"; -@import "bootstrap/thumbnails"; -@import "bootstrap/alerts"; -@import "bootstrap/progress-bars"; -@import "bootstrap/media"; -@import "bootstrap/list-group"; -@import "bootstrap/panels"; -@import "bootstrap/responsive-embed"; -@import "bootstrap/wells"; -@import "bootstrap/close"; - -// Components w/ JavaScript -@import "bootstrap/modals"; -@import "bootstrap/tooltip"; -@import "bootstrap/popovers"; -@import "bootstrap/carousel"; - -// Utility classes -@import "bootstrap/utilities"; -@import "bootstrap/responsive-utilities"; diff --git a/cove/cove_360/sass/bootstrap/bootstrap/_alerts.scss b/cove/cove_360/sass/bootstrap/bootstrap/_alerts.scss deleted file mode 100644 index 7d1e1fd..0000000 --- a/cove/cove_360/sass/bootstrap/bootstrap/_alerts.scss +++ /dev/null @@ -1,73 +0,0 @@ -// -// Alerts -// -------------------------------------------------- - - -// Base styles -// ------------------------- - -.alert { - padding: $alert-padding; - margin-bottom: $line-height-computed; - border: 1px solid transparent; - border-radius: $alert-border-radius; - - // Headings for larger alerts - h4 { - margin-top: 0; - // Specified for the h4 to prevent conflicts of changing $headings-color - color: inherit; - } - - // Provide class for links that match alerts - .alert-link { - font-weight: $alert-link-font-weight; - } - - // Improve alignment and spacing of inner content - > p, - > ul { - margin-bottom: 0; - } - - > p + p { - margin-top: 5px; - } -} - -// Dismissible alerts -// -// Expand the right padding and account for the close button's positioning. - -.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0. -.alert-dismissible { - padding-right: ($alert-padding + 20); - - // Adjust close link position - .close { - position: relative; - top: -2px; - right: -21px; - color: inherit; - } -} - -// Alternate styles -// -// Generate contextual modifier classes for colorizing the alert. - -.alert-success { - @include alert-variant($alert-success-bg, $alert-success-border, $alert-success-text); -} - -.alert-info { - @include alert-variant($alert-info-bg, $alert-info-border, $alert-info-text); -} - -.alert-warning { - @include alert-variant($alert-warning-bg, $alert-warning-border, $alert-warning-text); -} - -.alert-danger { - @include alert-variant($alert-danger-bg, $alert-danger-border, $alert-danger-text); -} diff --git a/cove/cove_360/sass/bootstrap/bootstrap/_badges.scss b/cove/cove_360/sass/bootstrap/bootstrap/_badges.scss deleted file mode 100644 index 70002e0..0000000 --- a/cove/cove_360/sass/bootstrap/bootstrap/_badges.scss +++ /dev/null @@ -1,68 +0,0 @@ -// -// Badges -// -------------------------------------------------- - - -// Base class -.badge { - display: inline-block; - min-width: 10px; - padding: 3px 7px; - font-size: $font-size-small; - font-weight: $badge-font-weight; - color: $badge-color; - line-height: $badge-line-height; - vertical-align: middle; - white-space: nowrap; - text-align: center; - background-color: $badge-bg; - border-radius: $badge-border-radius; - - // Empty badges collapse automatically (not available in IE8) - &:empty { - display: none; - } - - // Quick fix for badges in buttons - .btn & { - position: relative; - top: -1px; - } - - .btn-xs &, - .btn-group-xs > .btn & { - top: 0; - padding: 1px 5px; - } - - // [converter] extracted a& to a.badge - - // Account for badges in navs - .list-group-item.active > &, - .nav-pills > .active > a > & { - color: $badge-active-color; - background-color: $badge-active-bg; - } - - .list-group-item > & { - float: right; - } - - .list-group-item > & + & { - margin-right: 5px; - } - - .nav-pills > li > a > & { - margin-left: 3px; - } -} - -// Hover state, but only for links -a.badge { - &:hover, - &:focus { - color: $badge-link-hover-color; - text-decoration: none; - cursor: pointer; - } -} diff --git a/cove/cove_360/sass/bootstrap/bootstrap/_breadcrumbs.scss b/cove/cove_360/sass/bootstrap/bootstrap/_breadcrumbs.scss deleted file mode 100644 index b61f0c7..0000000 --- a/cove/cove_360/sass/bootstrap/bootstrap/_breadcrumbs.scss +++ /dev/null @@ -1,28 +0,0 @@ -// -// Breadcrumbs -// -------------------------------------------------- - - -.breadcrumb { - padding: $breadcrumb-padding-vertical $breadcrumb-padding-horizontal; - margin-bottom: $line-height-computed; - list-style: none; - background-color: $breadcrumb-bg; - border-radius: $border-radius-base; - - > li { - display: inline-block; - - + li:before { - // [converter] Workaround for https://github.com/sass/libsass/issues/1115 - $nbsp: "\00a0"; - content: "#{$breadcrumb-separator}#{$nbsp}"; // Unicode space added since inline-block means non-collapsing white-space - padding: 0 5px; - color: $breadcrumb-color; - } - } - - > .active { - color: $breadcrumb-active-color; - } -} diff --git a/cove/cove_360/sass/bootstrap/bootstrap/_button-groups.scss b/cove/cove_360/sass/bootstrap/bootstrap/_button-groups.scss deleted file mode 100644 index 4b385f5..0000000 --- a/cove/cove_360/sass/bootstrap/bootstrap/_button-groups.scss +++ /dev/null @@ -1,244 +0,0 @@ -// -// Button groups -// -------------------------------------------------- - -// Make the div behave like a button -.btn-group, -.btn-group-vertical { - position: relative; - display: inline-block; - vertical-align: middle; // match .btn alignment given font-size hack above - > .btn { - position: relative; - float: left; - // Bring the "active" button to the front - &:hover, - &:focus, - &:active, - &.active { - z-index: 2; - } - } -} - -// Prevent double borders when buttons are next to each other -.btn-group { - .btn + .btn, - .btn + .btn-group, - .btn-group + .btn, - .btn-group + .btn-group { - margin-left: -1px; - } -} - -// Optional: Group multiple button groups together for a toolbar -.btn-toolbar { - margin-left: -5px; // Offset the first child's margin - @include clearfix; - - .btn, - .btn-group, - .input-group { - float: left; - } - > .btn, - > .btn-group, - > .input-group { - margin-left: 5px; - } -} - -.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { - border-radius: 0; -} - -// 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 -.btn-group > .btn:first-child { - margin-left: 0; - &:not(:last-child):not(.dropdown-toggle) { - @include border-right-radius(0); - } -} -// Need .dropdown-toggle since :last-child doesn't apply, given that a .dropdown-menu is used immediately after it -.btn-group > .btn:last-child:not(:first-child), -.btn-group > .dropdown-toggle:not(:first-child) { - @include border-left-radius(0); -} - -// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group) -.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, - > .dropdown-toggle { - @include border-right-radius(0); - } -} -.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { - @include border-left-radius(0); -} - -// On active and open, don't show outline -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} - - -// Sizing -// -// Remix the default button sizing classes into new ones for easier manipulation. - -.btn-group-xs > .btn { @extend .btn-xs; } -.btn-group-sm > .btn { @extend .btn-sm; } -.btn-group-lg > .btn { @extend .btn-lg; } - - -// Split button dropdowns -// ---------------------- - -// Give the line between buttons some depth -.btn-group > .btn + .dropdown-toggle { - padding-left: 8px; - padding-right: 8px; -} -.btn-group > .btn-lg + .dropdown-toggle { - padding-left: 12px; - padding-right: 12px; -} - -// The clickable button for toggling the menu -// Remove the gradient and set the same inset shadow as the :active state -.btn-group.open .dropdown-toggle { - @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); - - // Show no shadow for `.btn-link` since it has no other button styles. - &.btn-link { - @include box-shadow(none); - } -} - - -// Reposition the caret -.btn .caret { - margin-left: 0; -} -// Carets in other button sizes -.btn-lg .caret { - border-width: $caret-width-large $caret-width-large 0; - border-bottom-width: 0; -} -// Upside down carets for .dropup -.dropup .btn-lg .caret { - border-width: 0 $caret-width-large $caret-width-large; -} - - -// Vertical button groups -// ---------------------- - -.btn-group-vertical { - > .btn, - > .btn-group, - > .btn-group > .btn { - display: block; - float: none; - width: 100%; - max-width: 100%; - } - - // Clear floats so dropdown menus can be properly placed - > .btn-group { - @include clearfix; - > .btn { - float: none; - } - } - - > .btn + .btn, - > .btn + .btn-group, - > .btn-group + .btn, - > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; - } -} - -.btn-group-vertical > .btn { - &:not(:first-child):not(:last-child) { - border-radius: 0; - } - &:first-child:not(:last-child) { - @include border-top-radius($btn-border-radius-base); - @include border-bottom-radius(0); - } - &:last-child:not(:first-child) { - @include border-top-radius(0); - @include border-bottom-radius($btn-border-radius-base); - } -} -.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, - > .dropdown-toggle { - @include border-bottom-radius(0); - } -} -.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { - @include border-top-radius(0); -} - - -// Justified button groups -// ---------------------- - -.btn-group-justified { - display: table; - width: 100%; - table-layout: fixed; - border-collapse: separate; - > .btn, - > .btn-group { - float: none; - display: table-cell; - width: 1%; - } - > .btn-group .btn { - width: 100%; - } - - > .btn-group .dropdown-menu { - left: auto; - } -} - - -// Checkbox and radio options -// -// In order to support the browser's form validation feedback, powered by the -// `required` attribute, we have to "hide" the inputs via `clip`. We cannot use -// `display: none;` or `visibility: hidden;` as that also hides the popover. -// Simply visually hiding the inputs via `opacity` would leave them clickable in -// certain cases which is prevented by using `clip` and `pointer-events`. -// This way, we ensure a DOM element is visible to position the popover from. -// -// See https://github.com/twbs/bootstrap/pull/12794 and -// https://github.com/twbs/bootstrap/pull/14559 for more information. - -[data-toggle="buttons"] { - > .btn, - > .btn-group > .btn { - input[type="radio"], - input[type="checkbox"] { - position: absolute; - clip: rect(0,0,0,0); - pointer-events: none; - } - } -} diff --git a/cove/cove_360/sass/bootstrap/bootstrap/_buttons.scss b/cove/cove_360/sass/bootstrap/bootstrap/_buttons.scss deleted file mode 100644 index 6452b70..0000000 --- a/cove/cove_360/sass/bootstrap/bootstrap/_buttons.scss +++ /dev/null @@ -1,168 +0,0 @@ -// -// Buttons -// -------------------------------------------------- - - -// Base styles -// -------------------------------------------------- - -.btn { - display: inline-block; - margin-bottom: 0; // For input.btn - font-weight: $btn-font-weight; - text-align: center; - vertical-align: middle; - touch-action: manipulation; - cursor: pointer; - background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 - border: 1px solid transparent; - white-space: nowrap; - @include button-size($padding-base-vertical, $padding-base-horizontal, $font-size-base, $line-height-base, $btn-border-radius-base); - @include user-select(none); - - &, - &:active, - &.active { - &:focus, - &.focus { - @include tab-focus; - } - } - - &:hover, - &:focus, - &.focus { - color: $btn-default-color; - text-decoration: none; - } - - &:active, - &.active { - outline: 0; - background-image: none; - @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); - } - - &.disabled, - &[disabled], - fieldset[disabled] & { - cursor: $cursor-disabled; - @include opacity(.65); - @include box-shadow(none); - } - - // [converter] extracted a& to a.btn -} - -a.btn { - &.disabled, - fieldset[disabled] & { - pointer-events: none; // Future-proof disabling of clicks on `` elements - } -} - - -// Alternate buttons -// -------------------------------------------------- - -.btn-default { - @include button-variant($btn-default-color, $btn-default-bg, $btn-default-border); -} -.btn-primary { - @include button-variant($btn-primary-color, $btn-primary-bg, $btn-primary-border); -} -// Success appears as green -.btn-success { - @include button-variant($btn-success-color, $btn-success-bg, $btn-success-border); -} -// Info appears as blue-green -.btn-info { - @include button-variant($btn-info-color, $btn-info-bg, $btn-info-border); -} -// Warning appears as orange -.btn-warning { - @include button-variant($btn-warning-color, $btn-warning-bg, $btn-warning-border); -} -// Danger and error appear as red -.btn-danger { - @include button-variant($btn-danger-color, $btn-danger-bg, $btn-danger-border); -} - - -// Link buttons -// ------------------------- - -// Make a button look and behave like a link -.btn-link { - color: $link-color; - font-weight: normal; - border-radius: 0; - - &, - &:active, - &.active, - &[disabled], - fieldset[disabled] & { - background-color: transparent; - @include box-shadow(none); - } - &, - &:hover, - &:focus, - &:active { - border-color: transparent; - } - &:hover, - &:focus { - color: $link-hover-color; - text-decoration: $link-hover-decoration; - background-color: transparent; - } - &[disabled], - fieldset[disabled] & { - &:hover, - &:focus { - color: $btn-link-disabled-color; - text-decoration: none; - } - } -} - - -// Button Sizes -// -------------------------------------------------- - -.btn-lg { - // line-height: ensure even-numbered height of button next to large input - @include button-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $line-height-large, $btn-border-radius-large); -} -.btn-sm { - // line-height: ensure proper height of button next to small input - @include button-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $line-height-small, $btn-border-radius-small); -} -.btn-xs { - @include button-size($padding-xs-vertical, $padding-xs-horizontal, $font-size-small, $line-height-small, $btn-border-radius-small); -} - - -// Block button -// -------------------------------------------------- - -.btn-block { - display: block; - width: 100%; -} - -// Vertically space out multiple block buttons -.btn-block + .btn-block { - margin-top: 5px; -} - -// Specificity overrides -input[type="submit"], -input[type="reset"], -input[type="button"] { - &.btn-block { - width: 100%; - } -} diff --git a/cove/cove_360/sass/bootstrap/bootstrap/_carousel.scss b/cove/cove_360/sass/bootstrap/bootstrap/_carousel.scss deleted file mode 100644 index 753d881..0000000 --- a/cove/cove_360/sass/bootstrap/bootstrap/_carousel.scss +++ /dev/null @@ -1,270 +0,0 @@ -// -// Carousel -// -------------------------------------------------- - - -// Wrapper for the slide container and indicators -.carousel { - position: relative; -} - -.carousel-inner { - position: relative; - overflow: hidden; - width: 100%; - - > .item { - display: none; - position: relative; - @include transition(.6s ease-in-out left); - - // Account for jankitude on images - > img, - > a > img { - @include img-responsive; - line-height: 1; - } - - // WebKit CSS3 transforms for supported devices - @media all and (transform-3d), (-webkit-transform-3d) { - @include transition-transform(0.6s ease-in-out); - @include backface-visibility(hidden); - @include perspective(1000px); - - &.next, - &.active.right { - @include translate3d(100%, 0, 0); - left: 0; - } - &.prev, - &.active.left { - @include translate3d(-100%, 0, 0); - left: 0; - } - &.next.left, - &.prev.right, - &.active { - @include translate3d(0, 0, 0); - left: 0; - } - } - } - - > .active, - > .next, - > .prev { - display: block; - } - - > .active { - left: 0; - } - - > .next, - > .prev { - position: absolute; - top: 0; - width: 100%; - } - - > .next { - left: 100%; - } - > .prev { - left: -100%; - } - > .next.left, - > .prev.right { - left: 0; - } - - > .active.left { - left: -100%; - } - > .active.right { - left: 100%; - } - -} - -// Left/right controls for nav -// --------------------------- - -.carousel-control { - position: absolute; - top: 0; - left: 0; - bottom: 0; - width: $carousel-control-width; - @include opacity($carousel-control-opacity); - font-size: $carousel-control-font-size; - color: $carousel-control-color; - text-align: center; - text-shadow: $carousel-text-shadow; - background-color: rgba(0, 0, 0, 0); // Fix IE9 click-thru bug - // We can't have this transition here because WebKit cancels the carousel - // animation if you trip this while in the middle of another animation. - - // Set gradients for backgrounds - &.left { - @include gradient-horizontal($start-color: rgba(0,0,0,.5), $end-color: rgba(0,0,0,.0001)); - } - &.right { - left: auto; - right: 0; - @include gradient-horizontal($start-color: rgba(0,0,0,.0001), $end-color: rgba(0,0,0,.5)); - } - - // Hover/focus state - &:hover, - &:focus { - outline: 0; - color: $carousel-control-color; - text-decoration: none; - @include opacity(.9); - } - - // Toggles - .icon-prev, - .icon-next, - .glyphicon-chevron-left, - .glyphicon-chevron-right { - position: absolute; - top: 50%; - margin-top: -10px; - z-index: 5; - display: inline-block; - } - .icon-prev, - .glyphicon-chevron-left { - left: 50%; - margin-left: -10px; - } - .icon-next, - .glyphicon-chevron-right { - right: 50%; - margin-right: -10px; - } - .icon-prev, - .icon-next { - width: 20px; - height: 20px; - line-height: 1; - font-family: serif; - } - - - .icon-prev { - &:before { - content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039) - } - } - .icon-next { - &:before { - content: '\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A) - } - } -} - -// Optional indicator pips -// -// Add an unordered list with the following class and add a list item for each -// slide your carousel holds. - -.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; - - li { - display: inline-block; - width: 10px; - height: 10px; - margin: 1px; - text-indent: -999px; - border: 1px solid $carousel-indicator-border-color; - border-radius: 10px; - cursor: pointer; - - // IE8-9 hack for event handling - // - // Internet Explorer 8-9 does not support clicks on elements without a set - // `background-color`. We cannot use `filter` since that's not viewed as a - // background color by the browser. Thus, a hack is needed. - // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Internet_Explorer - // - // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we - // set alpha transparency for the best results possible. - background-color: #000 \9; // IE8 - background-color: rgba(0,0,0,0); // IE9 - } - .active { - margin: 0; - width: 12px; - height: 12px; - background-color: $carousel-indicator-active-bg; - } -} - -// Optional captions -// ----------------------------- -// Hidden by default for smaller viewports -.carousel-caption { - position: absolute; - left: 15%; - right: 15%; - bottom: 20px; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: $carousel-caption-color; - text-align: center; - text-shadow: $carousel-text-shadow; - & .btn { - text-shadow: none; // No shadow for button elements in carousel-caption - } -} - - -// Scale up controls for tablets and up -@media screen and (min-width: $screen-sm-min) { - - // Scale up the controls a smidge - .carousel-control { - .glyphicon-chevron-left, - .glyphicon-chevron-right, - .icon-prev, - .icon-next { - width: ($carousel-control-font-size * 1.5); - height: ($carousel-control-font-size * 1.5); - margin-top: ($carousel-control-font-size / -2); - font-size: ($carousel-control-font-size * 1.5); - } - .glyphicon-chevron-left, - .icon-prev { - margin-left: ($carousel-control-font-size / -2); - } - .glyphicon-chevron-right, - .icon-next { - margin-right: ($carousel-control-font-size / -2); - } - } - - // Show and left align the captions - .carousel-caption { - left: 20%; - right: 20%; - padding-bottom: 30px; - } - - // Move up the indicators - .carousel-indicators { - bottom: 20px; - } -} diff --git a/cove/cove_360/sass/bootstrap/bootstrap/_close.scss b/cove/cove_360/sass/bootstrap/bootstrap/_close.scss deleted file mode 100644 index 3b74d8a..0000000 --- a/cove/cove_360/sass/bootstrap/bootstrap/_close.scss +++ /dev/null @@ -1,36 +0,0 @@ -// -// Close icons -// -------------------------------------------------- - - -.close { - float: right; - font-size: ($font-size-base * 1.5); - font-weight: $close-font-weight; - line-height: 1; - color: $close-color; - text-shadow: $close-text-shadow; - @include opacity(.2); - - &:hover, - &:focus { - color: $close-color; - text-decoration: none; - cursor: pointer; - @include opacity(.5); - } - - // [converter] extracted button& to button.close -} - -// Additional properties for button version -// iOS requires the button element instead of an anchor tag. -// If you want the anchor version, it requires `href="#"`. -// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} diff --git a/cove/cove_360/sass/bootstrap/bootstrap/_code.scss b/cove/cove_360/sass/bootstrap/bootstrap/_code.scss deleted file mode 100644 index caa5f06..0000000 --- a/cove/cove_360/sass/bootstrap/bootstrap/_code.scss +++ /dev/null @@ -1,69 +0,0 @@ -// -// Code (inline and block) -// -------------------------------------------------- - - -// Inline and block code styles -code, -kbd, -pre, -samp { - font-family: $font-family-monospace; -} - -// Inline code -code { - padding: 2px 4px; - font-size: 90%; - color: $code-color; - background-color: $code-bg; - border-radius: $border-radius-base; -} - -// User input typically entered via keyboard -kbd { - padding: 2px 4px; - font-size: 90%; - color: $kbd-color; - background-color: $kbd-bg; - border-radius: $border-radius-small; - box-shadow: inset 0 -1px 0 rgba(0,0,0,.25); - - kbd { - padding: 0; - font-size: 100%; - font-weight: bold; - box-shadow: none; - } -} - -// Blocks of code -pre { - display: block; - padding: (($line-height-computed - 1) / 2); - margin: 0 0 ($line-height-computed / 2); - font-size: ($font-size-base - 1); // 14px to 13px - line-height: $line-height-base; - word-break: break-all; - word-wrap: break-word; - color: $pre-color; - background-color: $pre-bg; - border: 1px solid $pre-border-color; - border-radius: $border-radius-base; - - // Account for some code outputs that place code tags in pre tags - code { - padding: 0; - font-size: inherit; - color: inherit; - white-space: pre-wrap; - background-color: transparent; - border-radius: 0; - } -} - -// Enable scrollable blocks of code -.pre-scrollable { - max-height: $pre-scrollable-max-height; - overflow-y: scroll; -} diff --git a/cove/cove_360/sass/bootstrap/bootstrap/_component-animations.scss b/cove/cove_360/sass/bootstrap/bootstrap/_component-animations.scss deleted file mode 100644 index ca3b43c..0000000 --- a/cove/cove_360/sass/bootstrap/bootstrap/_component-animations.scss +++ /dev/null @@ -1,37 +0,0 @@ -// -// Component animations -// -------------------------------------------------- - -// Heads up! -// -// We don't use the `.opacity()` mixin here since it causes a bug with text -// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552. - -.fade { - opacity: 0; - @include transition(opacity .15s linear); - &.in { - opacity: 1; - } -} - -.collapse { - display: none; - - &.in { display: block; } - // [converter] extracted tr&.in to tr.collapse.in - // [converter] extracted tbody&.in to tbody.collapse.in -} - -tr.collapse.in { display: table-row; } - -tbody.collapse.in { display: table-row-group; } - -.collapsing { - position: relative; - height: 0; - overflow: hidden; - @include transition-property(height, visibility); - @include transition-duration(.35s); - @include transition-timing-function(ease); -} diff --git a/cove/cove_360/sass/bootstrap/bootstrap/_dropdowns.scss b/cove/cove_360/sass/bootstrap/bootstrap/_dropdowns.scss deleted file mode 100644 index aac8459..0000000 --- a/cove/cove_360/sass/bootstrap/bootstrap/_dropdowns.scss +++ /dev/null @@ -1,216 +0,0 @@ -// -// Dropdown menus -// -------------------------------------------------- - - -// Dropdown arrow/caret -.caret { - display: inline-block; - width: 0; - height: 0; - margin-left: 2px; - vertical-align: middle; - border-top: $caret-width-base dashed; - border-top: $caret-width-base solid \9; // IE8 - border-right: $caret-width-base solid transparent; - border-left: $caret-width-base solid transparent; -} - -// The dropdown wrapper (div) -.dropup, -.dropdown { - position: relative; -} - -// Prevent the focus on the dropdown toggle when closing dropdowns -.dropdown-toggle:focus { - outline: 0; -} - -// The dropdown menu (ul) -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: $zindex-dropdown; - display: none; // none by default, but block on "open" of the menu - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; // override default ul - list-style: none; - font-size: $font-size-base; - text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer) - background-color: $dropdown-bg; - border: 1px solid $dropdown-fallback-border; // IE8 fallback - border: 1px solid $dropdown-border; - border-radius: $border-radius-base; - @include box-shadow(0 6px 12px rgba(0,0,0,.175)); - background-clip: padding-box; - - // Aligns the dropdown menu to right - // - // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]` - &.pull-right { - right: 0; - left: auto; - } - - // Dividers (basically an hr) within the dropdown - .divider { - @include nav-divider($dropdown-divider-bg); - } - - // Links within the dropdown menu - > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: $line-height-base; - color: $dropdown-link-color; - white-space: nowrap; // prevent links from randomly breaking onto new lines - } -} - -// Hover/Focus state -.dropdown-menu > li > a { - &:hover, - &:focus { - text-decoration: none; - color: $dropdown-link-hover-color; - background-color: $dropdown-link-hover-bg; - } -} - -// Active state -.dropdown-menu > .active > a { - &, - &:hover, - &:focus { - color: $dropdown-link-active-color; - text-decoration: none; - outline: 0; - background-color: $dropdown-link-active-bg; - } -} - -// Disabled state -// -// Gray out text and ensure the hover/focus state remains gray - -.dropdown-menu > .disabled > a { - &, - &:hover, - &:focus { - color: $dropdown-link-disabled-color; - } - - // Nuke hover/focus effects - &:hover, - &:focus { - text-decoration: none; - background-color: transparent; - background-image: none; // Remove CSS gradient - @include reset-filter; - cursor: $cursor-disabled; - } -} - -// Open state for the dropdown -.open { - // Show the menu - > .dropdown-menu { - display: block; - } - - // Remove the outline when :focus is triggered - > a { - outline: 0; - } -} - -// Menu positioning -// -// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown -// menu with the parent. -.dropdown-menu-right { - left: auto; // Reset the default from `.dropdown-menu` - right: 0; -} -// With v3, we enabled auto-flipping if you have a dropdown within a right -// aligned nav component. To enable the undoing of that, we provide an override -// to restore the default dropdown menu alignment. -// -// This is only for left-aligning a dropdown menu within a `.navbar-right` or -// `.pull-right` nav component. -.dropdown-menu-left { - left: 0; - right: auto; -} - -// Dropdown section headers -.dropdown-header { - display: block; - padding: 3px 20px; - font-size: $font-size-small; - line-height: $line-height-base; - color: $dropdown-header-color; - white-space: nowrap; // as with > li > a -} - -// Backdrop to catch body clicks on mobile, etc. -.dropdown-backdrop { - position: fixed; - left: 0; - right: 0; - bottom: 0; - top: 0; - z-index: ($zindex-dropdown - 10); -} - -// Right aligned dropdowns -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} - -// Allow for dropdowns to go bottom up (aka, dropup-menu) -// -// Just add .dropup after the standard .dropdown class and you're set, bro. -// TODO: abstract this so that the navbar fixed styles are not placed here? - -.dropup, -.navbar-fixed-bottom .dropdown { - // Reverse the caret - .caret { - border-top: 0; - border-bottom: $caret-width-base dashed; - border-bottom: $caret-width-base solid \9; // IE8 - content: ""; - } - // Different positioning for bottom up menu - .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 2px; - } -} - - -// Component alignment -// -// Reiterate per navbar.less and the modified component alignment there. - -@media (min-width: $grid-float-breakpoint) { - .navbar-right { - .dropdown-menu { - right: 0; left: auto; - } - // Necessary for overrides of the default right aligned menu. - // Will remove come v4 in all likelihood. - .dropdown-menu-left { - left: 0; right: auto; - } - } -} diff --git a/cove/cove_360/sass/bootstrap/bootstrap/_forms.scss b/cove/cove_360/sass/bootstrap/bootstrap/_forms.scss deleted file mode 100644 index ac26a6a..0000000 --- a/cove/cove_360/sass/bootstrap/bootstrap/_forms.scss +++ /dev/null @@ -1,617 +0,0 @@ -// -// Forms -// -------------------------------------------------- - - -// Normalize non-controls -// -// Restyle and baseline non-control form elements. - -fieldset { - padding: 0; - margin: 0; - border: 0; - // Chrome and Firefox set a `min-width: min-content;` on fieldsets, - // so we reset that to ensure it behaves more like a standard block element. - // See https://github.com/twbs/bootstrap/issues/12359. - min-width: 0; -} - -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: $line-height-computed; - font-size: ($font-size-base * 1.5); - line-height: inherit; - color: $legend-color; - border: 0; - border-bottom: 1px solid $legend-border-color; -} - -label { - display: inline-block; - max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141) - margin-bottom: 5px; - font-weight: bold; -} - - -// Normalize form controls -// -// While most of our form styles require extra classes, some basic normalization -// is required to ensure optimum display with or without those classes to better -// address browser inconsistencies. - -// Override content-box in Normalize (* isn't specific enough) -input[type="search"] { - @include box-sizing(border-box); -} - -// Position radios and checkboxes better -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; // IE8-9 - line-height: normal; -} - -input[type="file"] { - display: block; -} - -// Make range inputs behave like textual form controls -input[type="range"] { - display: block; - width: 100%; -} - -// Make multiple select elements height not fixed -select[multiple], -select[size] { - height: auto; -} - -// Focus for file, radio, and checkbox -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - @include tab-focus; -} - -// Adjust output element -output { - display: block; - padding-top: ($padding-base-vertical + 1); - font-size: $font-size-base; - line-height: $line-height-base; - color: $input-color; -} - - -// Common form controls -// -// Shared size and type resets for form controls. Apply `.form-control` to any -// of the following form controls: -// -// select -// textarea -// input[type="text"] -// input[type="password"] -// input[type="datetime"] -// input[type="datetime-local"] -// input[type="date"] -// input[type="month"] -// input[type="time"] -// input[type="week"] -// input[type="number"] -// input[type="email"] -// input[type="url"] -// input[type="search"] -// input[type="tel"] -// input[type="color"] - -.form-control { - display: block; - width: 100%; - height: $input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border) - padding: $padding-base-vertical $padding-base-horizontal; - font-size: $font-size-base; - line-height: $line-height-base; - color: $input-color; - background-color: $input-bg; - background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 - border: 1px solid $input-border; - border-radius: $input-border-radius; // Note: This has no effect on s in CSS. - @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); - @include transition(border-color ease-in-out .15s, box-shadow ease-in-out .15s); - - // Customize the `:focus` state to imitate native WebKit styles. - @include form-control-focus; - - // Placeholder - @include placeholder; - - // Unstyle the caret on ``s and ``s. -$table-cell-padding: 8px !default; -//** Padding for cells in `.table-condensed`. -$table-condensed-cell-padding: 5px !default; - -//** Default background color used for all tables. -$table-bg: transparent !default; -//** Background color used for `.table-striped`. -$table-bg-accent: #f9f9f9 !default; -//** Background color used for `.table-hover`. -$table-bg-hover: #f5f5f5 !default; -$table-bg-active: $table-bg-hover !default; - -//** Border color for table and cell borders. -$table-border-color: #ddd !default; - - -//== Buttons -// -//## For each of Bootstrap's buttons, define text, background and border color. - -$btn-font-weight: normal !default; - -$btn-default-color: #333 !default; -$btn-default-bg: #fff !default; -$btn-default-border: #ccc !default; - -$btn-primary-color: #fff !default; -$btn-primary-bg: $brand-primary !default; -$btn-primary-border: darken($btn-primary-bg, 5%) !default; - -$btn-success-color: #fff !default; -$btn-success-bg: $brand-success !default; -$btn-success-border: darken($btn-success-bg, 5%) !default; - -$btn-info-color: #fff !default; -$btn-info-bg: $brand-info !default; -$btn-info-border: darken($btn-info-bg, 5%) !default; - -$btn-warning-color: #fff !default; -$btn-warning-bg: $brand-warning !default; -$btn-warning-border: darken($btn-warning-bg, 5%) !default; - -$btn-danger-color: #fff !default; -$btn-danger-bg: $brand-danger !default; -$btn-danger-border: darken($btn-danger-bg, 5%) !default; - -$btn-link-disabled-color: $gray-light !default; - -// Allows for customizing button radius independently from global border radius -$btn-border-radius-base: $border-radius-base !default; -$btn-border-radius-large: $border-radius-large !default; -$btn-border-radius-small: $border-radius-small !default; - - -//== Forms -// -//## - -//** `` background color -$input-bg: #fff !default; -//** `` background color -$input-bg-disabled: $gray-lighter !default; - -//** Text color for ``s -$input-color: $gray !default; -//** `` border color -$input-border: #ccc !default; - -// TODO: Rename `$input-border-radius` to `$input-border-radius-base` in v4 -//** Default `.form-control` border radius -// This has no effect on ``s in CSS. -$input-border-radius: $border-radius-base !default; -//** Large `.form-control` border radius -$input-border-radius-large: $border-radius-large !default; -//** Small `.form-control` border radius -$input-border-radius-small: $border-radius-small !default; - -//** Border color for inputs on focus -$input-border-focus: #66afe9 !default; - -//** Placeholder text color -$input-color-placeholder: #999 !default; - -//** Default `.form-control` height -$input-height-base: ($line-height-computed + ($padding-base-vertical * 2) + 2) !default; -//** Large `.form-control` height -$input-height-large: (ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2) !default; -//** Small `.form-control` height -$input-height-small: (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2) !default; - -//** `.form-group` margin -$form-group-margin-bottom: 15px !default; - -$legend-color: $gray-dark !default; -$legend-border-color: #e5e5e5 !default; - -//** Background color for textual input addons -$input-group-addon-bg: $gray-lighter !default; -//** Border color for textual input addons -$input-group-addon-border-color: $input-border !default; - -//** Disabled cursor for form controls and buttons. -$cursor-disabled: not-allowed !default; - - -//== Dropdowns -// -//## Dropdown menu container and contents. - -//** Background for the dropdown menu. -$dropdown-bg: #fff !default; -//** Dropdown menu `border-color`. -$dropdown-border: rgba(0,0,0,.15) !default; -//** Dropdown menu `border-color` **for IE8**. -$dropdown-fallback-border: #ccc !default; -//** Divider color for between dropdown items. -$dropdown-divider-bg: #e5e5e5 !default; - -//** Dropdown link text color. -$dropdown-link-color: $gray-dark !default; -//** Hover color for dropdown links. -$dropdown-link-hover-color: darken($gray-dark, 5%) !default; -//** Hover background for dropdown links. -$dropdown-link-hover-bg: #f5f5f5 !default; - -//** Active dropdown menu item text color. -$dropdown-link-active-color: $component-active-color !default; -//** Active dropdown menu item background color. -$dropdown-link-active-bg: $component-active-bg !default; - -//** Disabled dropdown menu item background color. -$dropdown-link-disabled-color: $gray-light !default; - -//** Text color for headers within dropdown menus. -$dropdown-header-color: $gray-light !default; - -//** Deprecated `$dropdown-caret-color` as of v3.1.0 -$dropdown-caret-color: #000 !default; - - -//-- Z-index master list -// -// Warning: Avoid customizing these values. They're used for a bird's eye view -// of components dependent on the z-axis and are designed to all work together. -// -// Note: These variables are not generated into the Customizer. - -$zindex-navbar: 1000 !default; -$zindex-dropdown: 1000 !default; -$zindex-popover: 1060 !default; -$zindex-tooltip: 1070 !default; -$zindex-navbar-fixed: 1030 !default; -$zindex-modal-background: 1040 !default; -$zindex-modal: 1050 !default; - - -//== Media queries breakpoints -// -//## Define the breakpoints at which your layout will change, adapting to different screen sizes. - -// Extra small screen / phone -//** Deprecated `$screen-xs` as of v3.0.1 -$screen-xs: 480px !default; -//** Deprecated `$screen-xs-min` as of v3.2.0 -$screen-xs-min: $screen-xs !default; -//** Deprecated `$screen-phone` as of v3.0.1 -$screen-phone: $screen-xs-min !default; - -// Small screen / tablet -//** Deprecated `$screen-sm` as of v3.0.1 -$screen-sm: 768px !default; -$screen-sm-min: $screen-sm !default; -//** Deprecated `$screen-tablet` as of v3.0.1 -$screen-tablet: $screen-sm-min !default; - -// Medium screen / desktop -//** Deprecated `$screen-md` as of v3.0.1 -$screen-md: 992px !default; -$screen-md-min: $screen-md !default; -//** Deprecated `$screen-desktop` as of v3.0.1 -$screen-desktop: $screen-md-min !default; - -// Large screen / wide desktop -//** Deprecated `$screen-lg` as of v3.0.1 -$screen-lg: 1200px !default; -$screen-lg-min: $screen-lg !default; -//** Deprecated `$screen-lg-desktop` as of v3.0.1 -$screen-lg-desktop: $screen-lg-min !default; - -// So media queries don't overlap when required, provide a maximum -$screen-xs-max: ($screen-sm-min - 1) !default; -$screen-sm-max: ($screen-md-min - 1) !default; -$screen-md-max: ($screen-lg-min - 1) !default; - - -//== Grid system -// -//## Define your custom responsive grid. - -//** Number of columns in the grid. -$grid-columns: 12 !default; -//** Padding between columns. Gets divided in half for the left and right. -$grid-gutter-width: 30px !default; -// Navbar collapse -//** Point at which the navbar becomes uncollapsed. -$grid-float-breakpoint: $screen-sm-min !default; -//** Point at which the navbar begins collapsing. -$grid-float-breakpoint-max: ($grid-float-breakpoint - 1) !default; - - -//== Container sizes -// -//## Define the maximum width of `.container` for different screen sizes. - -// Small screen / tablet -$container-tablet: (720px + $grid-gutter-width) !default; -//** For `$screen-sm-min` and up. -$container-sm: $container-tablet !default; - -// Medium screen / desktop -$container-desktop: (940px + $grid-gutter-width) !default; -//** For `$screen-md-min` and up. -$container-md: $container-desktop !default; - -// Large screen / wide desktop -$container-large-desktop: (1140px + $grid-gutter-width) !default; -//** For `$screen-lg-min` and up. -$container-lg: $container-large-desktop !default; - - -//== Navbar -// -//## - -// Basics of a navbar -$navbar-height: 50px !default; -$navbar-margin-bottom: $line-height-computed !default; -$navbar-border-radius: $border-radius-base !default; -$navbar-padding-horizontal: floor(($grid-gutter-width / 2)) !default; -$navbar-padding-vertical: (($navbar-height - $line-height-computed) / 2) !default; -$navbar-collapse-max-height: 340px !default; - -$navbar-default-color: #777 !default; -$navbar-default-bg: #f8f8f8 !default; -$navbar-default-border: darken($navbar-default-bg, 6.5%) !default; - -// Navbar links -$navbar-default-link-color: #777 !default; -$navbar-default-link-hover-color: #333 !default; -$navbar-default-link-hover-bg: transparent !default; -$navbar-default-link-active-color: #555 !default; -$navbar-default-link-active-bg: darken($navbar-default-bg, 6.5%) !default; -$navbar-default-link-disabled-color: #ccc !default; -$navbar-default-link-disabled-bg: transparent !default; - -// Navbar brand label -$navbar-default-brand-color: $navbar-default-link-color !default; -$navbar-default-brand-hover-color: darken($navbar-default-brand-color, 10%) !default; -$navbar-default-brand-hover-bg: transparent !default; - -// Navbar toggle -$navbar-default-toggle-hover-bg: #ddd !default; -$navbar-default-toggle-icon-bar-bg: #888 !default; -$navbar-default-toggle-border-color: #ddd !default; - - -//=== Inverted navbar -// Reset inverted navbar basics -$navbar-inverse-color: lighten($gray-light, 15%) !default; -$navbar-inverse-bg: #222 !default; -$navbar-inverse-border: darken($navbar-inverse-bg, 10%) !default; - -// Inverted navbar links -$navbar-inverse-link-color: lighten($gray-light, 15%) !default; -$navbar-inverse-link-hover-color: #fff !default; -$navbar-inverse-link-hover-bg: transparent !default; -$navbar-inverse-link-active-color: $navbar-inverse-link-hover-color !default; -$navbar-inverse-link-active-bg: darken($navbar-inverse-bg, 10%) !default; -$navbar-inverse-link-disabled-color: #444 !default; -$navbar-inverse-link-disabled-bg: transparent !default; - -// Inverted navbar brand label -$navbar-inverse-brand-color: $navbar-inverse-link-color !default; -$navbar-inverse-brand-hover-color: #fff !default; -$navbar-inverse-brand-hover-bg: transparent !default; - -// Inverted navbar toggle -$navbar-inverse-toggle-hover-bg: #333 !default; -$navbar-inverse-toggle-icon-bar-bg: #fff !default; -$navbar-inverse-toggle-border-color: #333 !default; - - -//== Navs -// -//## - -//=== Shared nav styles -$nav-link-padding: 10px 15px !default; -$nav-link-hover-bg: $gray-lighter !default; - -$nav-disabled-link-color: $gray-light !default; -$nav-disabled-link-hover-color: $gray-light !default; - -//== Tabs -$nav-tabs-border-color: #ddd !default; - -$nav-tabs-link-hover-border-color: $gray-lighter !default; - -$nav-tabs-active-link-hover-bg: $body-bg !default; -$nav-tabs-active-link-hover-color: $gray !default; -$nav-tabs-active-link-hover-border-color: #ddd !default; - -$nav-tabs-justified-link-border-color: #ddd !default; -$nav-tabs-justified-active-link-border-color: $body-bg !default; - -//== Pills -$nav-pills-border-radius: $border-radius-base !default; -$nav-pills-active-link-hover-bg: $component-active-bg !default; -$nav-pills-active-link-hover-color: $component-active-color !default; - - -//== Pagination -// -//## - -$pagination-color: $link-color !default; -$pagination-bg: #fff !default; -$pagination-border: #ddd !default; - -$pagination-hover-color: $link-hover-color !default; -$pagination-hover-bg: $gray-lighter !default; -$pagination-hover-border: #ddd !default; - -$pagination-active-color: #fff !default; -$pagination-active-bg: $brand-primary !default; -$pagination-active-border: $brand-primary !default; - -$pagination-disabled-color: $gray-light !default; -$pagination-disabled-bg: #fff !default; -$pagination-disabled-border: #ddd !default; - - -//== Pager -// -//## - -$pager-bg: $pagination-bg !default; -$pager-border: $pagination-border !default; -$pager-border-radius: 15px !default; - -$pager-hover-bg: $pagination-hover-bg !default; - -$pager-active-bg: $pagination-active-bg !default; -$pager-active-color: $pagination-active-color !default; - -$pager-disabled-color: $pagination-disabled-color !default; - - -//== Jumbotron -// -//## - -$jumbotron-padding: 30px !default; -$jumbotron-color: inherit !default; -$jumbotron-bg: $gray-lighter !default; -$jumbotron-heading-color: inherit !default; -$jumbotron-font-size: ceil(($font-size-base * 1.5)) !default; -$jumbotron-heading-font-size: ceil(($font-size-base * 4.5)) !default; - - -//== Form states and alerts -// -//## Define colors for form feedback states and, by default, alerts. - -$state-success-text: #3c763d !default; -$state-success-bg: #dff0d8 !default; -$state-success-border: darken(adjust-hue($state-success-bg, -10), 5%) !default; - -$state-info-text: #31708f !default; -$state-info-bg: #d9edf7 !default; -$state-info-border: darken(adjust-hue($state-info-bg, -10), 7%) !default; - -$state-warning-text: #8a6d3b !default; -$state-warning-bg: #fcf8e3 !default; -$state-warning-border: darken(adjust-hue($state-warning-bg, -10), 5%) !default; - -$state-danger-text: #a94442 !default; -$state-danger-bg: #f2dede !default; -$state-danger-border: darken(adjust-hue($state-danger-bg, -10), 5%) !default; - - -//== Tooltips -// -//## - -//** Tooltip max width -$tooltip-max-width: 200px !default; -//** Tooltip text color -$tooltip-color: #fff !default; -//** Tooltip background color -$tooltip-bg: #000 !default; -$tooltip-opacity: .9 !default; - -//** Tooltip arrow width -$tooltip-arrow-width: 5px !default; -//** Tooltip arrow color -$tooltip-arrow-color: $tooltip-bg !default; - - -//== Popovers -// -//## - -//** Popover body background color -$popover-bg: #fff !default; -//** Popover maximum width -$popover-max-width: 276px !default; -//** Popover border color -$popover-border-color: rgba(0,0,0,.2) !default; -//** Popover fallback border color -$popover-fallback-border-color: #ccc !default; - -//** Popover title background color -$popover-title-bg: darken($popover-bg, 3%) !default; - -//** Popover arrow width -$popover-arrow-width: 10px !default; -//** Popover arrow color -$popover-arrow-color: $popover-bg !default; - -//** Popover outer arrow width -$popover-arrow-outer-width: ($popover-arrow-width + 1) !default; -//** Popover outer arrow color -$popover-arrow-outer-color: fade_in($popover-border-color, 0.05) !default; -//** Popover outer arrow fallback color -$popover-arrow-outer-fallback-color: darken($popover-fallback-border-color, 20%) !default; - - -//== Labels -// -//## - -//** Default label background color -$label-default-bg: $gray-light !default; -//** Primary label background color -$label-primary-bg: $brand-primary !default; -//** Success label background color -$label-success-bg: $brand-success !default; -//** Info label background color -$label-info-bg: $brand-info !default; -//** Warning label background color -$label-warning-bg: $brand-warning !default; -//** Danger label background color -$label-danger-bg: $brand-danger !default; - -//** Default label text color -$label-color: #fff !default; -//** Default text color of a linked label -$label-link-hover-color: #fff !default; - - -//== Modals -// -//## - -//** Padding applied to the modal body -$modal-inner-padding: 15px !default; - -//** Padding applied to the modal title -$modal-title-padding: 15px !default; -//** Modal title line-height -$modal-title-line-height: $line-height-base !default; - -//** Background color of modal content area -$modal-content-bg: #fff !default; -//** Modal content border color -$modal-content-border-color: rgba(0,0,0,.2) !default; -//** Modal content border color **for IE8** -$modal-content-fallback-border-color: #999 !default; - -//** Modal backdrop background color -$modal-backdrop-bg: #000 !default; -//** Modal backdrop opacity -$modal-backdrop-opacity: .5 !default; -//** Modal header border color -$modal-header-border-color: #e5e5e5 !default; -//** Modal footer border color -$modal-footer-border-color: $modal-header-border-color !default; - -$modal-lg: 900px !default; -$modal-md: 600px !default; -$modal-sm: 300px !default; - - -//== Alerts -// -//## Define alert colors, border radius, and padding. - -$alert-padding: 15px !default; -$alert-border-radius: $border-radius-base !default; -$alert-link-font-weight: bold !default; - -$alert-success-bg: $state-success-bg !default; -$alert-success-text: $state-success-text !default; -$alert-success-border: $state-success-border !default; - -$alert-info-bg: $state-info-bg !default; -$alert-info-text: $state-info-text !default; -$alert-info-border: $state-info-border !default; - -$alert-warning-bg: $state-warning-bg !default; -$alert-warning-text: $state-warning-text !default; -$alert-warning-border: $state-warning-border !default; - -$alert-danger-bg: $state-danger-bg !default; -$alert-danger-text: $state-danger-text !default; -$alert-danger-border: $state-danger-border !default; - - -//== Progress bars -// -//## - -//** Background color of the whole progress component -$progress-bg: #f5f5f5 !default; -//** Progress bar text color -$progress-bar-color: #fff !default; -//** Variable for setting rounded corners on progress bar. -$progress-border-radius: $border-radius-base !default; - -//** Default progress bar color -$progress-bar-bg: $brand-primary !default; -//** Success progress bar color -$progress-bar-success-bg: $brand-success !default; -//** Warning progress bar color -$progress-bar-warning-bg: $brand-warning !default; -//** Danger progress bar color -$progress-bar-danger-bg: $brand-danger !default; -//** Info progress bar color -$progress-bar-info-bg: $brand-info !default; - - -//== List group -// -//## - -//** Background color on `.list-group-item` -$list-group-bg: #fff !default; -//** `.list-group-item` border color -$list-group-border: #ddd !default; -//** List group border radius -$list-group-border-radius: $border-radius-base !default; - -//** Background color of single list items on hover -$list-group-hover-bg: #f5f5f5 !default; -//** Text color of active list items -$list-group-active-color: $component-active-color !default; -//** Background color of active list items -$list-group-active-bg: $component-active-bg !default; -//** Border color of active list elements -$list-group-active-border: $list-group-active-bg !default; -//** Text color for content within active list items -$list-group-active-text-color: lighten($list-group-active-bg, 40%) !default; - -//** Text color of disabled list items -$list-group-disabled-color: $gray-light !default; -//** Background color of disabled list items -$list-group-disabled-bg: $gray-lighter !default; -//** Text color for content within disabled list items -$list-group-disabled-text-color: $list-group-disabled-color !default; - -$list-group-link-color: #555 !default; -$list-group-link-hover-color: $list-group-link-color !default; -$list-group-link-heading-color: #333 !default; - - -//== Panels -// -//## - -$panel-bg: #fff !default; -$panel-body-padding: 15px !default; -$panel-heading-padding: 10px 15px !default; -$panel-footer-padding: $panel-heading-padding !default; -$panel-border-radius: $border-radius-base !default; - -//** Border color for elements within panels -$panel-inner-border: #ddd !default; -$panel-footer-bg: #f5f5f5 !default; - -$panel-default-text: $gray-dark !default; -$panel-default-border: #ddd !default; -$panel-default-heading-bg: #f5f5f5 !default; - -$panel-primary-text: #fff !default; -$panel-primary-border: $brand-primary !default; -$panel-primary-heading-bg: $brand-primary !default; - -$panel-success-text: $state-success-text !default; -$panel-success-border: $state-success-border !default; -$panel-success-heading-bg: $state-success-bg !default; - -$panel-info-text: $state-info-text !default; -$panel-info-border: $state-info-border !default; -$panel-info-heading-bg: $state-info-bg !default; - -$panel-warning-text: $state-warning-text !default; -$panel-warning-border: $state-warning-border !default; -$panel-warning-heading-bg: $state-warning-bg !default; - -$panel-danger-text: $state-danger-text !default; -$panel-danger-border: $state-danger-border !default; -$panel-danger-heading-bg: $state-danger-bg !default; - - -//== Thumbnails -// -//## - -//** Padding around the thumbnail image -$thumbnail-padding: 4px !default; -//** Thumbnail background color -$thumbnail-bg: $body-bg !default; -//** Thumbnail border color -$thumbnail-border: #ddd !default; -//** Thumbnail border radius -$thumbnail-border-radius: $border-radius-base !default; - -//** Custom text color for thumbnail captions -$thumbnail-caption-color: $text-color !default; -//** Padding around the thumbnail caption -$thumbnail-caption-padding: 9px !default; - - -//== Wells -// -//## - -$well-bg: #f5f5f5 !default; -$well-border: darken($well-bg, 7%) !default; - - -//== Badges -// -//## - -$badge-color: #fff !default; -//** Linked badge text color on hover -$badge-link-hover-color: #fff !default; -$badge-bg: $gray-light !default; - -//** Badge text color in active nav link -$badge-active-color: $link-color !default; -//** Badge background color in active nav link -$badge-active-bg: #fff !default; - -$badge-font-weight: bold !default; -$badge-line-height: 1 !default; -$badge-border-radius: 10px !default; - - -//== Breadcrumbs -// -//## - -$breadcrumb-padding-vertical: 8px !default; -$breadcrumb-padding-horizontal: 15px !default; -//** Breadcrumb background color -$breadcrumb-bg: #f5f5f5 !default; -//** Breadcrumb text color -$breadcrumb-color: #ccc !default; -//** Text color of current page in the breadcrumb -$breadcrumb-active-color: $gray-light !default; -//** Textual separator for between breadcrumb elements -$breadcrumb-separator: "/" !default; - - -//== Carousel -// -//## - -$carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6) !default; - -$carousel-control-color: #fff !default; -$carousel-control-width: 15% !default; -$carousel-control-opacity: .5 !default; -$carousel-control-font-size: 20px !default; - -$carousel-indicator-active-bg: #fff !default; -$carousel-indicator-border-color: #fff !default; - -$carousel-caption-color: #fff !default; - - -//== Close -// -//## - -$close-font-weight: bold !default; -$close-color: #000 !default; -$close-text-shadow: 0 1px 0 #fff !default; - - -//== Code -// -//## - -$code-color: #c7254e !default; -$code-bg: #f9f2f4 !default; - -$kbd-color: #fff !default; -$kbd-bg: #333 !default; - -$pre-bg: #f5f5f5 !default; -$pre-color: $gray-dark !default; -$pre-border-color: #ccc !default; -$pre-scrollable-max-height: 340px !default; - - -//== Type -// -//## - -//** Horizontal offset for forms and lists. -$component-offset-horizontal: 180px !default; -//** Text muted color -$text-muted: $gray-light !default; -//** Abbreviations and acronyms border color -$abbr-border-color: $gray-light !default; -//** Headings small color -$headings-small-color: $gray-light !default; -//** Blockquote small color -$blockquote-small-color: $gray-light !default; -//** Blockquote font size -$blockquote-font-size: ($font-size-base * 1.25) !default; -//** Blockquote border color -$blockquote-border-color: $gray-lighter !default; -//** Page header border color -$page-header-border-color: $gray-lighter !default; -//** Width of horizontal description list titles -$dl-horizontal-offset: $component-offset-horizontal !default; -//** Point at which .dl-horizontal becomes horizontal -$dl-horizontal-breakpoint: $grid-float-breakpoint !default; -//** Horizontal line color. -$hr-border: $gray-lighter !default; diff --git a/cove/cove_360/sass/bootstrap/bootstrap/_wells.scss b/cove/cove_360/sass/bootstrap/bootstrap/_wells.scss deleted file mode 100644 index b865711..0000000 --- a/cove/cove_360/sass/bootstrap/bootstrap/_wells.scss +++ /dev/null @@ -1,29 +0,0 @@ -// -// Wells -// -------------------------------------------------- - - -// Base class -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: $well-bg; - border: 1px solid $well-border; - border-radius: $border-radius-base; - @include box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); - blockquote { - border-color: #ddd; - border-color: rgba(0,0,0,.15); - } -} - -// Sizes -.well-lg { - padding: 24px; - border-radius: $border-radius-large; -} -.well-sm { - padding: 9px; - border-radius: $border-radius-small; -} diff --git a/cove/cove_360/sass/bootstrap/bootstrap/mixins/_alerts.scss b/cove/cove_360/sass/bootstrap/bootstrap/mixins/_alerts.scss deleted file mode 100644 index 3faf0b5..0000000 --- a/cove/cove_360/sass/bootstrap/bootstrap/mixins/_alerts.scss +++ /dev/null @@ -1,14 +0,0 @@ -// Alerts - -@mixin alert-variant($background, $border, $text-color) { - background-color: $background; - border-color: $border; - color: $text-color; - - hr { - border-top-color: darken($border, 5%); - } - .alert-link { - color: darken($text-color, 10%); - } -} diff --git a/cove/cove_360/sass/bootstrap/bootstrap/mixins/_background-variant.scss b/cove/cove_360/sass/bootstrap/bootstrap/mixins/_background-variant.scss deleted file mode 100644 index 4c7769e..0000000 --- a/cove/cove_360/sass/bootstrap/bootstrap/mixins/_background-variant.scss +++ /dev/null @@ -1,12 +0,0 @@ -// Contextual backgrounds - -// [converter] $parent hack -@mixin bg-variant($parent, $color) { - #{$parent} { - background-color: $color; - } - a#{$parent}:hover, - a#{$parent}:focus { - background-color: darken($color, 10%); - } -} diff --git a/cove/cove_360/sass/bootstrap/bootstrap/mixins/_border-radius.scss b/cove/cove_360/sass/bootstrap/bootstrap/mixins/_border-radius.scss deleted file mode 100644 index ce19499..0000000 --- a/cove/cove_360/sass/bootstrap/bootstrap/mixins/_border-radius.scss +++ /dev/null @@ -1,18 +0,0 @@ -// Single side border-radius - -@mixin border-top-radius($radius) { - border-top-right-radius: $radius; - border-top-left-radius: $radius; -} -@mixin border-right-radius($radius) { - border-bottom-right-radius: $radius; - border-top-right-radius: $radius; -} -@mixin border-bottom-radius($radius) { - border-bottom-right-radius: $radius; - border-bottom-left-radius: $radius; -} -@mixin border-left-radius($radius) { - border-bottom-left-radius: $radius; - border-top-left-radius: $radius; -} diff --git a/cove/cove_360/sass/bootstrap/bootstrap/mixins/_buttons.scss b/cove/cove_360/sass/bootstrap/bootstrap/mixins/_buttons.scss deleted file mode 100644 index b93f84b..0000000 --- a/cove/cove_360/sass/bootstrap/bootstrap/mixins/_buttons.scss +++ /dev/null @@ -1,65 +0,0 @@ -// Button variants -// -// Easily pump out default styles, as well as :hover, :focus, :active, -// and disabled options for all buttons - -@mixin button-variant($color, $background, $border) { - color: $color; - background-color: $background; - border-color: $border; - - &:focus, - &.focus { - color: $color; - background-color: darken($background, 10%); - border-color: darken($border, 25%); - } - &:hover { - color: $color; - background-color: darken($background, 10%); - border-color: darken($border, 12%); - } - &:active, - &.active, - .open > &.dropdown-toggle { - color: $color; - background-color: darken($background, 10%); - border-color: darken($border, 12%); - - &:hover, - &:focus, - &.focus { - color: $color; - background-color: darken($background, 17%); - border-color: darken($border, 25%); - } - } - &:active, - &.active, - .open > &.dropdown-toggle { - background-image: none; - } - &.disabled, - &[disabled], - fieldset[disabled] & { - &:hover, - &:focus, - &.focus { - background-color: $background; - border-color: $border; - } - } - - .badge { - color: $background; - background-color: $color; - } -} - -// Button sizes -@mixin button-size($padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) { - padding: $padding-vertical $padding-horizontal; - font-size: $font-size; - line-height: $line-height; - border-radius: $border-radius; -} diff --git a/cove/cove_360/sass/bootstrap/bootstrap/mixins/_center-block.scss b/cove/cove_360/sass/bootstrap/bootstrap/mixins/_center-block.scss deleted file mode 100644 index e06fb5e..0000000 --- a/cove/cove_360/sass/bootstrap/bootstrap/mixins/_center-block.scss +++ /dev/null @@ -1,7 +0,0 @@ -// Center-align a block level element - -@mixin center-block() { - display: block; - margin-left: auto; - margin-right: auto; -} diff --git a/cove/cove_360/sass/bootstrap/bootstrap/mixins/_clearfix.scss b/cove/cove_360/sass/bootstrap/bootstrap/mixins/_clearfix.scss deleted file mode 100644 index dc3e2ab..0000000 --- a/cove/cove_360/sass/bootstrap/bootstrap/mixins/_clearfix.scss +++ /dev/null @@ -1,22 +0,0 @@ -// Clearfix -// -// For modern browsers -// 1. The space content is one way to avoid an Opera bug when the -// contenteditable attribute is included anywhere else in the document. -// Otherwise it causes space to appear at the top and bottom of elements -// that are clearfixed. -// 2. The use of `table` rather than `block` is only necessary if using -// `:before` to contain the top-margins of child elements. -// -// Source: http://nicolasgallagher.com/micro-clearfix-hack/ - -@mixin clearfix() { - &:before, - &:after { - content: " "; // 1 - display: table; // 2 - } - &:after { - clear: both; - } -} diff --git a/cove/cove_360/sass/bootstrap/bootstrap/mixins/_forms.scss b/cove/cove_360/sass/bootstrap/bootstrap/mixins/_forms.scss deleted file mode 100644 index 277aa5f..0000000 --- a/cove/cove_360/sass/bootstrap/bootstrap/mixins/_forms.scss +++ /dev/null @@ -1,88 +0,0 @@ -// Form validation states -// -// Used in forms.less to generate the form validation CSS for warnings, errors, -// and successes. - -@mixin form-control-validation($text-color: #555, $border-color: #ccc, $background-color: #f5f5f5) { - // Color the label and help text - .help-block, - .control-label, - .radio, - .checkbox, - .radio-inline, - .checkbox-inline, - &.radio label, - &.checkbox label, - &.radio-inline label, - &.checkbox-inline label { - color: $text-color; - } - // Set the border and box shadow on specific inputs to match - .form-control { - border-color: $border-color; - @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work - &:focus { - border-color: darken($border-color, 10%); - $shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten($border-color, 20%); - @include box-shadow($shadow); - } - } - // Set validation states also for addons - .input-group-addon { - color: $text-color; - border-color: $border-color; - background-color: $background-color; - } - // Optional feedback icon - .form-control-feedback { - color: $text-color; - } -} - - -// Form control focus state -// -// Generate a customized focus state and for any input with the specified color, -// which defaults to the `$input-border-focus` variable. -// -// We highly encourage you to not customize the default value, but instead use -// this to tweak colors on an as-needed basis. This aesthetic change is based on -// WebKit's default styles, but applicable to a wider range of browsers. Its -// usability and accessibility should be taken into account with any change. -// -// Example usage: change the default blue border and shadow to white for better -// contrast against a dark gray background. -@mixin form-control-focus($color: $input-border-focus) { - $color-rgba: rgba(red($color), green($color), blue($color), .6); - &:focus { - border-color: $color; - outline: 0; - @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px $color-rgba); - } -} - -// Form control sizing -// -// Relative text size, padding, and border-radii changes for form controls. For -// horizontal sizing, wrap controls in the predefined grid classes. ` +
    @@ -27,7 +27,7 @@

    Data Accuracy

    {% for message, json_location, spreadsheet_location in quality_accuracy_checks %} - + @@ -38,7 +38,7 @@

    Data Accuracy

  • Sheet: {{location.sheet}} Row: {{location.row_number}} {% if location.header %} Header: {{location.header}} {% endif %}
  • {% endfor %} {% if spreadsheet_location|length > 3 %} -
  • see all
  • +
  • {% endif %} @@ -49,7 +49,7 @@

    Data Accuracy

  • {{location}}
  • {% endfor %} {% if json_location|length > 3 %} -
  • see all
  • +
  • {% endif %} @@ -64,19 +64,7 @@

    Data Accuracy

    What is working well

    {% if quality_accuracy_checks_passed %} -

    Congratulations, {{quality_accuracy_checks_passed|length}} data accuracy checks passed.

    -
    {% trans 'Passed' %}
    close {{ message.heading }}

    {{ message.message }}
    - - - - - {% for passed_test in quality_accuracy_checks_passed %} - - - - - {% endfor %} -
    PassedTest
    check{{passed_test}}
    +

    Congratulations, {{quality_accuracy_checks_passed|length}} of our data accuracy checks passed.

    {% endif %} {% for message, json_location, spreadsheet_location in quality_accuracy_checks %} {% with msg=message.heading %} diff --git a/cove/cove_360/templates/cove_360/components/explore/summary.html b/cove/cove_360/templates/cove_360/components/explore/summary.html index 204492b..256c0e9 100644 --- a/cove/cove_360/templates/cove_360/components/explore/summary.html +++ b/cove/cove_360/templates/cove_360/components/explore/summary.html @@ -2,6 +2,7 @@ {% load humanize %} {% load cove_tags %} +

    {% trans "Summary" %}

    {% if validation_errors or additional_closed_codelist_values %} @@ -26,7 +27,7 @@

    {% trans "This data uses the 360Giving Data Standard co {% endif %}

    - The file '{{file_name}}' was + The file "{{file_name}}" was {% if source_url %} {% trans "downloaded from " %} {{source_url}} {% else %} diff --git a/cove/cove_360/templates/cove_360/components/explore/usefulness.html b/cove/cove_360/templates/cove_360/components/explore/usefulness.html index 361314f..2d50da1 100644 --- a/cove/cove_360/templates/cove_360/components/explore/usefulness.html +++ b/cove/cove_360/templates/cove_360/components/explore/usefulness.html @@ -35,13 +35,13 @@

    Usefulness Opportunities

    {{ message.heading }}

    {{ message.message }}
    +
      {% for location in spreadsheet_location|slice:":3" %}
    • Sheet: {{location.sheet}} Row: {{location.row_number}} {% if location.header %} Header: {{location.header}} {% endif %}
    • {% endfor %} {% if spreadsheet_location|length > 3 %} -
    • see all
    • +
    • {% endif %}