diff --git a/config/plugins/visualizations/mvpapp/config/mvpapp.xml b/config/plugins/visualizations/mvpapp/config/mvpapp.xml
new file mode 100644
index 00000000000..1d595e15952
--- /dev/null
+++ b/config/plugins/visualizations/mvpapp/config/mvpapp.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ HistoryDatasetAssociation
+ MzSQlite
+ dataset_id
+
+
+
+ dataset_id
+
+ mvpapp.mako
+ _blank
+
\ No newline at end of file
diff --git a/config/plugins/visualizations/mvpapp/static/css/Bootstrap-3.3.7/fonts/glyphicons-halflings-regular.eot b/config/plugins/visualizations/mvpapp/static/css/Bootstrap-3.3.7/fonts/glyphicons-halflings-regular.eot
new file mode 100755
index 00000000000..b93a4953fff
Binary files /dev/null and b/config/plugins/visualizations/mvpapp/static/css/Bootstrap-3.3.7/fonts/glyphicons-halflings-regular.eot differ
diff --git a/config/plugins/visualizations/mvpapp/static/css/Bootstrap-3.3.7/fonts/glyphicons-halflings-regular.svg b/config/plugins/visualizations/mvpapp/static/css/Bootstrap-3.3.7/fonts/glyphicons-halflings-regular.svg
new file mode 100755
index 00000000000..94fb5490a2e
--- /dev/null
+++ b/config/plugins/visualizations/mvpapp/static/css/Bootstrap-3.3.7/fonts/glyphicons-halflings-regular.svg
@@ -0,0 +1,288 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/config/plugins/visualizations/mvpapp/static/css/Bootstrap-3.3.7/fonts/glyphicons-halflings-regular.ttf b/config/plugins/visualizations/mvpapp/static/css/Bootstrap-3.3.7/fonts/glyphicons-halflings-regular.ttf
new file mode 100755
index 00000000000..1413fc609ab
Binary files /dev/null and b/config/plugins/visualizations/mvpapp/static/css/Bootstrap-3.3.7/fonts/glyphicons-halflings-regular.ttf differ
diff --git a/config/plugins/visualizations/mvpapp/static/css/Bootstrap-3.3.7/fonts/glyphicons-halflings-regular.woff b/config/plugins/visualizations/mvpapp/static/css/Bootstrap-3.3.7/fonts/glyphicons-halflings-regular.woff
new file mode 100755
index 00000000000..9e612858f80
Binary files /dev/null and b/config/plugins/visualizations/mvpapp/static/css/Bootstrap-3.3.7/fonts/glyphicons-halflings-regular.woff differ
diff --git a/config/plugins/visualizations/mvpapp/static/css/Bootstrap-3.3.7/fonts/glyphicons-halflings-regular.woff2 b/config/plugins/visualizations/mvpapp/static/css/Bootstrap-3.3.7/fonts/glyphicons-halflings-regular.woff2
new file mode 100755
index 00000000000..64539b54c37
Binary files /dev/null and b/config/plugins/visualizations/mvpapp/static/css/Bootstrap-3.3.7/fonts/glyphicons-halflings-regular.woff2 differ
diff --git a/config/plugins/visualizations/mvpapp/static/css/app.css b/config/plugins/visualizations/mvpapp/static/css/app.css
new file mode 100644
index 00000000000..09aa4bbc8eb
--- /dev/null
+++ b/config/plugins/visualizations/mvpapp/static/css/app.css
@@ -0,0 +1,99 @@
+
+body {
+ padding-top: 70px;
+}
+.navbar-fixed-top {
+ background-color: #9e9f9f;
+}
+
+.selected-peptide {
+ background-color: lightblue;
+}
+
+.shadow {
+ -webkit-box-shadow: 1px 1px 2px 3px #ccc; /* Safari 3-4, iOS 4.0.2 - 4.2, Android 2.3+ */
+ -moz-box-shadow: 1px 1px 2px 3px #ccc; /* Firefox 3.5 - 3.6 */
+ box-shadow: 1px 1px 2px 3px #ccc; /* Opera 10.5, IE 9, Firefox 4+, Chrome 6+, iOS 5 */
+ margin: 4px;
+ padding: 4px;
+}
+
+.used-for-filtering {
+ background-color: darkgrey;
+ color: #afd9ee;
+}
+
+.fixed-height-panel {
+ height: 500px;
+ overflow-y: scroll;
+}
+
+.aa {
+ font-family: monospace;
+ font-size: 14pt;
+ border-radius: 5px;
+}
+
+.aa_mod {
+ border-radius:10px 10px 10px 10px;
+ border:solid 1px darkslategray;
+ background-color: darkslategray;
+ color: #cccccc;
+ cursor: pointer;
+}
+
+.aa_header {
+ margin-right: 10px;
+}
+
+
+div .score_name {
+ margin: 5px;
+}
+
+div .selected{
+ background-color: #1c94c4;
+}
+
+a:link {
+ text-decoration: none;
+}
+
+a:visited {
+ text-decoration: none;
+}
+
+a:hover {
+ text-decoration: none;
+}
+
+a:active {
+ text-decoration: none;
+}
+
+path.fdr_path_passed {
+ stroke: black;
+ fill: none;
+ stroke-width: 2px;
+
+}
+
+path.fdr_path_failed {
+ stroke: orange;
+ fill: none;
+ stroke-width: 2px;
+
+}
+
+.panel_test {
+ background-color: red;
+}
+
+.glyphicon-question-sign {
+ cursor: pointer;
+}
+
+.modal-body {
+ max-height: calc(100vh - 212px);
+ overflow-y: auto;
+}
\ No newline at end of file
diff --git a/config/plugins/visualizations/mvpapp/static/css/datatables.min.css b/config/plugins/visualizations/mvpapp/static/css/datatables.min.css
new file mode 100755
index 00000000000..699d3ae1dee
--- /dev/null
+++ b/config/plugins/visualizations/mvpapp/static/css/datatables.min.css
@@ -0,0 +1,22 @@
+/*
+ * This combined file was created by the DataTables downloader builder:
+ * https://datatables.net/download
+ *
+ * To rebuild or modify this file with the latest versions of the included
+ * software please visit:
+ * https://datatables.net/download/#bs-3.3.7/dt-1.10.15
+ *
+ * Included libraries:
+ * Bootstrap 3.3.7, DataTables 1.10.15
+ */
+
+/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(Bootstrap-3.3.7/fonts/glyphicons-halflings-regular.eot);src:url(Bootstrap-3.3.7/fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(Bootstrap-3.3.7/fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(Bootstrap-3.3.7/fonts/glyphicons-halflings-regular.woff) format('woff'),url(Bootstrap-3.3.7/fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(Bootstrap-3.3.7/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
+/*# sourceMappingURL=bootstrap.min.css.map */
+
+table.dataTable{clear:both;margin-top:6px !important;margin-bottom:6px !important;max-width:none !important;border-collapse:separate !important}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper div.dataTables_length label{font-weight:normal;text-align:left;white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{width:75px;display:inline-block}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter label{font-weight:normal;white-space:nowrap;text-align:left}div.dataTables_wrapper div.dataTables_filter input{margin-left:0.5em;display:inline-block;width:auto}div.dataTables_wrapper div.dataTables_info{padding-top:8px;white-space:nowrap}div.dataTables_wrapper div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1em 0;background-color: white}table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting{padding-right:30px}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{position:absolute;bottom:8px;right:8px;display:block;font-family:'Glyphicons Halflings';opacity:0.5}table.dataTable thead .sorting:after{opacity:0.2;content:"\e150"}table.dataTable thead .sorting_asc:after{content:"\e155"}table.dataTable thead .sorting_desc:after{content:"\e156"}table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{color:#eee}div.dataTables_scrollHead table.dataTable{margin-bottom:0 !important}div.dataTables_scrollBody>table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody>table>thead .sorting:after,div.dataTables_scrollBody>table>thead .sorting_asc:after,div.dataTables_scrollBody>table>thead .sorting_desc:after{display:none}div.dataTables_scrollBody>table>tbody>tr:first-child>th,div.dataTables_scrollBody>table>tbody>tr:first-child>td{border-top:none}div.dataTables_scrollFoot>table{margin-top:0 !important;border-top:none}@media screen and (max-width: 767px){div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{text-align:center}}table.dataTable.table-condensed>thead>tr>th{padding-right:20px}table.dataTable.table-condensed .sorting:after,table.dataTable.table-condensed .sorting_asc:after,table.dataTable.table-condensed .sorting_desc:after{top:6px;right:6px}table.table-bordered.dataTable th,table.table-bordered.dataTable td{border-left-width:0}table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable td:last-child,table.table-bordered.dataTable td:last-child{border-right-width:0}table.table-bordered.dataTable tbody th,table.table-bordered.dataTable tbody td{border-bottom-width:0}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0}div.table-responsive>div.dataTables_wrapper>div.row{margin:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:first-child{padding-left:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:last-child{padding-right:0}
+
+
diff --git a/config/plugins/visualizations/mvpapp/static/css/igv.css b/config/plugins/visualizations/mvpapp/static/css/igv.css
new file mode 100644
index 00000000000..77bdb630cfb
--- /dev/null
+++ b/config/plugins/visualizations/mvpapp/static/css/igv.css
@@ -0,0 +1,1076 @@
+.igv-color-swatch {
+ display: flex;
+ flex-flow: row;
+ flex-wrap: wrap;
+ justify-content: center;
+ align-items: center;
+ width: 24px;
+ height: 24px;
+ border-style: solid;
+ border-width: 1px;
+ border-color: transparent; }
+ .igv-color-swatch i.fa {
+ display: block; }
+ .igv-color-swatch i.fa:hover,
+ .igv-color-swatch i.fa:focus,
+ .igv-color-swatch i.fa:active {
+ cursor: pointer;
+ color: #0f0f0f; }
+
+.igv-color-swatch:hover,
+.igv-color-swatch:focus,
+.igv-color-swatch:active {
+ border-color: #dddddd; }
+
+.igv-colorpicker-menu-close-button {
+ display: flex;
+ flex-flow: row;
+ flex-wrap: nowrap;
+ justify-content: flex-end;
+ align-items: center;
+ width: 100%;
+ height: 32px;
+ margin-top: 4px;
+ margin-bottom: 4px;
+ padding-right: 8px; }
+ .igv-colorpicker-menu-close-button i.fa {
+ display: block;
+ margin-left: 4px;
+ margin-right: 4px;
+ color: #5f5f5f; }
+ .igv-colorpicker-menu-close-button i.fa:hover,
+ .igv-colorpicker-menu-close-button i.fa:focus,
+ .igv-colorpicker-menu-close-button i.fa:active {
+ cursor: pointer;
+ color: #0f0f0f; }
+
+.igv-position-absolute {
+ position: absolute;
+ top: 0;
+ left: 0; }
+
+.igv-generic-container {
+ width: 256px;
+ z-index: 5000;
+ background-color: white;
+ border-style: solid;
+ border-width: thin;
+ border-color: #dddddd;
+ cursor: pointer;
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ justify-content: flex-start;
+ align-items: center; }
+ .igv-generic-container div:first-child {
+ display: flex;
+ flex-flow: row;
+ flex-wrap: nowrap;
+ justify-content: flex-end;
+ align-items: center;
+ height: 24px;
+ width: 100%;
+ background-color: #dddddd; }
+ .igv-generic-container div:first-child i.fa {
+ margin-right: 4px;
+ display: block;
+ color: #5f5f5f; }
+ .igv-generic-container div:first-child i.fa:hover,
+ .igv-generic-container div:first-child i.fa:focus,
+ .igv-generic-container div:first-child i.fa:active {
+ cursor: pointer;
+ color: #0f0f0f; }
+
+#igvControlDiv {
+ position: relative; }
+
+#igv-content-header {
+ position: relative;
+ height: 16px;
+ clear: both;
+ margin-top: 10px;
+ white-space: nowrap; }
+ #igv-content-header .igv-ideogram-left-shim {
+ position: relative;
+ height: 100%;
+ width: 50px;
+ display: inline-block;
+ background-color: white; }
+ #igv-content-header .igv-ideogram-content-div {
+ position: relative;
+ height: 100%;
+ display: inline-block;
+ background-color: white; }
+ #igv-content-header .igv-ideogram-content-div canvas {
+ width: 100%;
+ height: 100%; }
+ #igv-content-header .igv-ideogram-content-div-border-right {
+ border-right-color: #292929;
+ border-right-style: solid;
+ border-right-width: 1px; }
+
+.igv-multi-locus-panel-border {
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 1px;
+ background-color: green;
+ border-right-color: #ff0000;
+ border-right-style: solid;
+ border-right-width: 1px; }
+
+#igv-navbar {
+ display: flex;
+ flex-flow: row;
+ flex-wrap: nowrap;
+ justify-content: space-between;
+ align-items: center;
+ margin-top: 2px;
+ margin-bottom: 4px;
+ position: relative;
+ top: 0;
+ left: 0;
+ height: 32px;
+ width: 100%;
+ border-style: solid;
+ border-radius: 3px;
+ border-width: thin;
+ border-color: #bfbfbf;
+ background-color: #f3f3f3; }
+ #igv-navbar i {
+ cursor: pointer;
+ color: #666666; }
+ #igv-navbar i:hover,
+ #igv-navbar i:focus,
+ #igv-navbar i:active {
+ color: #434343; }
+ #igv-navbar #igv-nav-bar-left-container {
+ display: flex;
+ flex-flow: row;
+ flex-wrap: nowrap;
+ justify-content: space-between;
+ align-items: center;
+ height: 32px; }
+ #igv-navbar #igv-nav-bar-left-container #igv-logo {
+ width: 34px;
+ height: 32px;
+ margin-left: 8px;
+ margin-right: 32px; }
+ #igv-navbar #igv-nav-bar-left-container #igv-drag-and-drop-presentation-button {
+ margin-right: 32px; }
+ #igv-navbar #igv-nav-bar-left-container #igv-current_genome {
+ height: 32px;
+ margin-right: 16px;
+ user-select: none;
+ color: #444;
+ font-family: "Open Sans", sans-serif;
+ font-size: 12px;
+ font-weight: 400;
+ line-height: 32px;
+ text-align: center; }
+ #igv-navbar #igv-nav-bar-left-container #igv-genomic-location {
+ display: flex;
+ flex-flow: row;
+ flex-wrap: nowrap;
+ justify-content: space-between;
+ align-items: center;
+ height: 32px; }
+ #igv-navbar #igv-nav-bar-left-container #igv-genomic-location #igv-chromosome-select-widget-container {
+ width: 96px;
+ margin-right: 4px;
+ height: 70%; }
+ #igv-navbar #igv-nav-bar-left-container #igv-genomic-location #igv-chromosome-select-widget-container select {
+ display: block;
+ outline: none;
+ font-family: "Open Sans", sans-serif;
+ font-size: 12px;
+ font-weight: 400;
+ color: #444;
+ width: 100%;
+ height: 100%; }
+ #igv-navbar #igv-nav-bar-left-container #igv-genomic-location #igv-locus-size-group {
+ display: flex;
+ flex-flow: row;
+ flex-wrap: nowrap;
+ justify-content: space-between;
+ align-items: center;
+ height: 75%; }
+ #igv-navbar #igv-nav-bar-left-container #igv-genomic-location #igv-locus-size-group #igv-search-container {
+ width: 260px;
+ display: flex;
+ flex-flow: row;
+ flex-wrap: nowrap;
+ justify-content: flex-start;
+ align-items: center; }
+ #igv-navbar #igv-nav-bar-left-container #igv-genomic-location #igv-locus-size-group #igv-search-container input {
+ display: block;
+ width: 85%;
+ padding-left: 8px;
+ margin-right: 8px;
+ line-height: 20px;
+ text-align: left;
+ font-family: "Open Sans", sans-serif;
+ font-size: 12px;
+ font-weight: 400;
+ color: #444;
+ outline: none;
+ border-style: solid;
+ border-radius: 3px;
+ border-width: thin;
+ border-color: #bfbfbf;
+ background-color: white; }
+ #igv-navbar #igv-nav-bar-left-container #igv-genomic-location #igv-locus-size-group #igv-search-container div {
+ height: 100%; }
+ #igv-navbar #igv-nav-bar-left-container #igv-genomic-location #igv-locus-size-group #igv-search-container div i {
+ font-size: 18px; }
+ #igv-navbar #igv-nav-bar-left-container #igv-genomic-location #igv-locus-size-group #igv-windowsizepanel-content-div {
+ margin-left: 4px;
+ user-select: none;
+ font-family: "Open Sans", sans-serif;
+ font-size: 12px;
+ font-weight: 400;
+ color: #444; }
+ #igv-navbar #igv-nav-bar-right-container {
+ display: flex;
+ flex-flow: row;
+ flex-wrap: nowrap;
+ justify-content: space-between;
+ align-items: center; }
+ #igv-navbar #igv-nav-bar-right-container #igv-nav-bar-toggle-button-container {
+ display: flex;
+ flex-flow: row;
+ flex-wrap: nowrap;
+ justify-content: space-between;
+ align-items: center;
+ margin-right: 8px; }
+ #igv-navbar #igv-nav-bar-right-container #igv-nav-bar-toggle-button-container div {
+ margin-left: 0;
+ margin-right: 4px; }
+ #igv-navbar #igv-nav-bar-right-container #igv-nav-bar-toggle-button-container div:last-child {
+ margin-left: 0;
+ margin-right: 0; }
+ #igv-navbar #igv-nav-bar-right-container #igv-zoom-widget {
+ user-select: none;
+ display: flex;
+ flex-flow: row;
+ flex-wrap: nowrap;
+ justify-content: space-between;
+ align-items: center;
+ width: 44px;
+ margin-left: 16px;
+ margin-right: 8px; }
+ #igv-navbar #igv-nav-bar-right-container #igv-zoom-widget div i {
+ font-size: 24px; }
+
+.igv-nav-bar-button {
+ height: 18px;
+ min-width: 96px;
+ text-transform: capitalize;
+ user-select: none;
+ line-height: 18px;
+ text-align: center;
+ font-family: "Open Sans", sans-serif;
+ font-size: 11px;
+ font-weight: 200;
+ color: #737373;
+ background-color: #f3f3f3;
+ border-color: #737373;
+ border-style: solid;
+ border-width: thin;
+ border-radius: 10px; }
+
+.igv-nav-bar-button-clicked {
+ color: white;
+ background-color: #737373; }
+
+.igv-nav-bar-button:hover {
+ cursor: pointer; }
+
+#igv-logo-nonav {
+ margin-left: 4px;
+ margin-top: 12px;
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 34px;
+ height: 16px; }
+
+.igv-search-results {
+ position: absolute;
+ top: 32px;
+ left: 2px;
+ height: 320px;
+ width: 213px;
+ background-color: white;
+ border-color: #7F7F7F;
+ border-style: solid;
+ border-width: thin;
+ overflow-x: hidden;
+ overflow-y: auto;
+ z-index: 9999; }
+ .igv-search-results tr {
+ font-family: "Open Sans", sans-serif;
+ font-size: small;
+ font-weight: 400;
+ color: #444; }
+ .igv-search-results tr:hover,
+ .igv-search-results tr:focus,
+ .igv-search-results tr:active {
+ cursor: pointer;
+ font-weight: 700;
+ color: #141414; }
+
+.igv-karyo-div {
+ position: relative;
+ left: 0;
+ top: 0;
+ height: 200px; }
+
+.igv-karyo-hide {
+ height: 0;
+ overflow: hidden; }
+
+.igv-karyo-content-div {
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%; }
+
+.igv-karyo-canvas {
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%; }
+
+.igv-root-div {
+ position: relative;
+ left: 0;
+ right: 0;
+ height: auto;
+ margin-left: 10px;
+ margin-right: 10px;
+ padding-top: 4px; }
+
+.igv-content-div {
+ position: relative;
+ width: 100%;
+ height: 100%; }
+
+.igv-track-container-div {
+ position: relative;
+ clear: both; }
+
+.igv-track-div {
+ position: relative;
+ width: 100%;
+ margin-top: 2px;
+ margin-bottom: 2px; }
+
+.igv-viewport-container {
+ position: absolute;
+ left: 50px;
+ right: 50px;
+ height: 100%;
+ white-space: nowrap;
+ overflow-x: hidden;
+ overflow-y: hidden; }
+
+.igv-viewport-div {
+ position: relative;
+ display: inline-block;
+ height: 100%;
+ overflow-x: hidden;
+ overflow-y: hidden; }
+
+.igv-viewport-content-div {
+ position: absolute;
+ width: 100%; }
+
+.igv-viewport-message {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ color: rgba(0, 0, 0, 0.15);
+ font-family: "Open Sans", sans-serif;
+ font-size: 25px;
+ font-weight: bold;
+ user-select: none; }
+
+.igv-whole-genome-container {
+ display: flex;
+ flex-flow: row;
+ flex-wrap: nowrap;
+ justify-content: space-between;
+ width: 100%;
+ height: 100%;
+ background-color: white; }
+ .igv-whole-genome-container div {
+ font-family: "Open Sans", sans-serif;
+ font-size: 10px;
+ font-weight: 400;
+ color: #444;
+ height: 100%;
+ text-align: center;
+ border-right-color: #bfbfbf;
+ border-right-style: solid;
+ border-right-width: thin; }
+ .igv-whole-genome-container div span {
+ display: block;
+ padding-top: 6px;
+ text-overflow: ellipsis; }
+ .igv-whole-genome-container div:last-child {
+ border-right-color: transparent; }
+ .igv-whole-genome-container div:hover,
+ .igv-whole-genome-container div:focus,
+ .igv-whole-genome-container div:active {
+ cursor: pointer;
+ background-color: #efefef; }
+
+.igv-viewport-div-border-right {
+ border-right-color: #292929;
+ border-right-style: solid;
+ border-right-width: 1px; }
+
+.igv-viewport-fa-close {
+ position: absolute;
+ top: 4px;
+ right: 4px;
+ font-size: 16px;
+ color: #666666;
+ z-index: 1000; }
+
+.igv-viewport-fa-close:hover {
+ cursor: pointer;
+ color: #434343; }
+
+.igv-viewport-content-ruler-div {
+ position: absolute;
+ left: 50%;
+ top: 25%;
+ transform: translate(-50%, -25%);
+ font-family: "Open Sans", sans-serif;
+ font-size: 12px;
+ font-weight: 200;
+ text-align: center;
+ min-width: 16px;
+ z-index: 64;
+ color: #0066ff;
+ background-color: white;
+ padding: 1px; }
+
+.igv-viewport-content-ruler-div:hover,
+.igv-viewport-content-ruler-div:focus,
+.igv-viewport-content-ruler-div:active {
+ cursor: pointer;
+ color: white;
+ background-color: #0066ff; }
+
+.igv-viewport-ruler {
+ font-family: "Open Sans", sans-serif;
+ font-size: 10px;
+ font-weight: 200;
+ text-align: center; }
+ .igv-viewport-ruler > div {
+ height: 100%; }
+
+.igv-viewport-sequence {
+ font-family: "Open Sans", sans-serif;
+ font-size: 8px;
+ font-weight: 200;
+ text-align: center; }
+
+.igv-viewport-spinner {
+ pointer-events: none;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ z-index: 1024;
+ color: #737373; }
+
+.igv-ruler-sweeper-div {
+ display: none;
+ pointer-events: none;
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 0;
+ height: 100%;
+ z-index: 99999;
+ background-color: rgba(68, 134, 247, 0.25); }
+
+.igv-right-hand-gutter {
+ position: absolute;
+ right: 0;
+ width: 36px;
+ height: 100%;
+ background: white;
+ text-align: center; }
+ .igv-right-hand-gutter i {
+ position: absolute;
+ top: 0;
+ right: 0;
+ padding-right: 6px;
+ font-size: 20px;
+ cursor: pointer;
+ color: grey; }
+ .igv-right-hand-gutter i:hover,
+ .igv-right-hand-gutter i:focus,
+ .igv-right-hand-gutter i:active {
+ color: #333333; }
+
+.igv-left-hand-gutter {
+ position: absolute;
+ left: 0;
+ width: 50px;
+ height: 100%; }
+ .igv-left-hand-gutter canvas {
+ position: absolute; }
+
+.igv-track-menu-container {
+ background-color: white;
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px; }
+ .igv-track-menu-container div {
+ padding-left: 4px;
+ padding-right: 4px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+ background-color: white; }
+ .igv-track-menu-container div i {
+ padding-right: 2px; }
+ .igv-track-menu-container div:hover,
+ .igv-track-menu-container div:focus,
+ .igv-track-menu-container div:active {
+ cursor: pointer;
+ background-color: #efefef; }
+ .igv-track-menu-container a {
+ color: inherit;
+ text-decoration: none; }
+
+.igv-track-menu-border-top {
+ border-top-color: #a2a2a2;
+ border-top-style: solid;
+ border-top-width: thin; }
+
+.igv-track-menu-category {
+ padding-left: 4px;
+ font-weight: 400; }
+
+.igv-track-drag-scrim {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 256;
+ background-color: rgba(68, 134, 247, 0.25); }
+
+.igv-track-manipulation-handle {
+ cursor: pointer;
+ position: absolute;
+ right: 36px;
+ width: 12px;
+ margin-left: 2px;
+ height: 100%;
+ box-sizing: border-box;
+ font-size: medium;
+ border-color: #c4c4c4;
+ border-style: solid;
+ border-width: thin;
+ border-top-right-radius: 6px;
+ border-bottom-right-radius: 6px;
+ z-index: 512;
+ background-color: #c4c4c4; }
+
+.igv-track-manipulation-handle:hover,
+.igv-track-manipulation-handle:focus,
+.igv-track-manipulation-handle:active {
+ border-color: #7e7e7e;
+ background-color: #7e7e7e; }
+
+.igv-track-label {
+ position: absolute;
+ left: 8px;
+ top: 4px;
+ width: auto;
+ height: auto;
+ max-width: 200px;
+ padding-left: 4px;
+ padding-right: 4px;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ font-family: "Open Sans", sans-serif;
+ font-size: small;
+ font-weight: 400;
+ text-align: center;
+ user-select: none;
+ -moz-user-select: none;
+ -webkit-user-select: none;
+ border-color: #444;
+ border-radius: 2px;
+ border-style: solid;
+ border-width: thin;
+ background-color: white;
+ z-index: 128;
+ cursor: pointer; }
+
+.igv-track-label:hover,
+.igv-track-label:focus,
+.igv-track-label:active {
+ background-color: rgba(0, 0, 0, 0.05); }
+
+.igv-scrollbar-outer-div {
+ position: absolute;
+ top: 0;
+ right: 0;
+ width: 14px;
+ height: 100%;
+ background-color: white; }
+ .igv-scrollbar-outer-div div {
+ position: absolute;
+ top: 0;
+ left: 3px;
+ width: 8px;
+ border-style: solid;
+ border-width: thin;
+ border-color: #c4c4c4;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
+ background-color: white; }
+ .igv-scrollbar-outer-div div:hover,
+ .igv-scrollbar-outer-div div:focus,
+ .igv-scrollbar-outer-div div:active {
+ cursor: pointer;
+ background-color: #c4c4c4; }
+
+.zoom-in-notice-container {
+ position: absolute;
+ top: 25%;
+ left: 50%; }
+ .zoom-in-notice-container div {
+ position: relative;
+ left: -50%;
+ font-family: "Open Sans", sans-serif;
+ font-size: medium;
+ font-weight: 400;
+ color: #3f3f3f;
+ background-color: rgba(255, 255, 255, 0.51);
+ z-index: 64; }
+
+.igv-center-guide {
+ pointer-events: none;
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 50%;
+ width: 8px;
+ z-index: 8;
+ display: none;
+ user-select: none;
+ -moz-user-select: none;
+ -webkit-user-select: none;
+ border-left-style: dashed;
+ border-left-width: thin;
+ border-right-style: dashed;
+ border-right-width: thin; }
+
+.igv-center-guide-wide {
+ background-color: transparent;
+ border-left-color: rgba(127, 127, 127, 0.51);
+ border-right-color: rgba(127, 127, 127, 0.51); }
+
+.igv-center-guide-thin {
+ left: 50%;
+ width: 1px;
+ background-color: transparent;
+ border-left-color: rgba(127, 127, 127, 0.51);
+ border-right-color: transparent;
+ /*background-color: rgba(127, 127, 127, 0.51);*/
+ /*border-left-color: rgba(0,0,0,0);*/
+ /*border-right-color: rgba(0,0,0,0);*/ }
+
+.igv-cursor-tracking-guide {
+ pointer-events: none;
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 50%;
+ width: 1px;
+ z-index: 1;
+ border-left-style: dotted;
+ border-left-width: thin;
+ border-left-color: rgba(127, 127, 127, 0.76);
+ display: none;
+ user-select: none;
+ -moz-user-select: none;
+ -webkit-user-select: none; }
+
+.igv-clickable {
+ cursor: pointer;
+ background-color: white; }
+
+#color-by-tag {
+ color: #444; }
+
+#color-by-tag:hover,
+#color-by-tag:focus,
+#color-by-tag:active {
+ cursor: pointer;
+ padding-left: 2px;
+ padding-right: 2px;
+ color: white;
+ border-color: #444;
+ border-radius: 2px;
+ border-style: solid;
+ border-width: thin;
+ background-color: #7f7f7f; }
+
+.igv-user-feedback {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ width: 36em;
+ height: 27em;
+ margin-top: -9em;
+ /*set to a negative number 1/2 of your height*/
+ margin-left: -15em;
+ /*set to a negative number 1/2 of your width*/
+ background-color: white;
+ border-color: #a2a2a2;
+ border-style: solid;
+ border-width: thin;
+ font-family: "Open Sans", sans-serif;
+ font-size: medium;
+ font-weight: 400;
+ color: #444; }
+ .igv-user-feedback div:first-child {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ width: 100%;
+ height: 32px;
+ border-bottom-color: #a2a2a2;
+ border-bottom-style: solid;
+ border-bottom-width: thin;
+ background-color: white; }
+ .igv-user-feedback div:first-child i {
+ font-size: 20px; }
+ .igv-user-feedback div:first-child i:first-child {
+ position: absolute;
+ top: 0;
+ left: 0;
+ padding: 8px;
+ color: red; }
+ .igv-user-feedback div:first-child i:last-child {
+ position: absolute;
+ top: 0;
+ right: 0;
+ padding: 8px;
+ cursor: pointer;
+ color: grey; }
+ .igv-user-feedback div:first-child i:last-child:hover,
+ .igv-user-feedback div:first-child i:last-child:focus,
+ .igv-user-feedback div:first-child i:last-child:active {
+ color: #333333; }
+ .igv-user-feedback div:last-child {
+ padding-left: 48px;
+ padding-top: 8px;
+ padding-right: 48px;
+ padding-bottom: 8px;
+ position: absolute;
+ top: 33px;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background-color: white; }
+
+.igv-ellipsis {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis; }
+
+.igv-generic-dialog-container {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 300px;
+ height: 200px;
+ font-family: "Open Sans", sans-serif;
+ font-size: medium;
+ font-weight: 200;
+ border-color: #7F7F7F;
+ border-radius: 4px;
+ border-style: solid;
+ border-width: thin;
+ z-index: 2048;
+ background-color: white;
+ display: flex;
+ flex-flow: column;
+ flex-wrap: nowrap;
+ justify-content: flex-start;
+ align-items: center; }
+ .igv-generic-dialog-container .igv-generic-dialog-header {
+ width: 100%;
+ height: 24px;
+ cursor: move;
+ border-color: #c4c4c4;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-style: solid;
+ border-width: thin;
+ background-color: #c4c4c4;
+ display: flex;
+ flex-flow: row;
+ flex-wrap: nowrap;
+ justify-content: flex-end;
+ align-items: center; }
+ .igv-generic-dialog-container .igv-generic-dialog-header div {
+ height: 24px;
+ width: 16px;
+ margin-right: 6px;
+ text-align: center;
+ line-height: 24px;
+ color: #444;
+ font-size: medium; }
+ .igv-generic-dialog-container .igv-generic-dialog-header div:hover {
+ cursor: pointer; }
+ .igv-generic-dialog-container .igv-generic-dialog-one-liner {
+ margin-top: 8px;
+ width: 95%;
+ color: #373737;
+ line-height: 24px;
+ text-align: left;
+ padding-left: 8px;
+ background-color: white; }
+ .igv-generic-dialog-container .igv-generic-dialog-label-input {
+ margin-top: 8px;
+ width: 95%;
+ height: 24px;
+ color: #373737;
+ line-height: 24px;
+ padding-left: 8px;
+ background-color: white;
+ display: flex;
+ flex-flow: row;
+ flex-wrap: nowrap;
+ justify-content: flex-start;
+ align-items: center; }
+ .igv-generic-dialog-container .igv-generic-dialog-label-input div {
+ width: 30%;
+ height: 100%;
+ font-size: 16px;
+ text-align: right;
+ padding-right: 8px;
+ background-color: white; }
+ .igv-generic-dialog-container .igv-generic-dialog-label-input input {
+ display: block;
+ height: 100%;
+ width: 100%;
+ padding-left: 4px;
+ font-family: "Open Sans", sans-serif;
+ font-weight: 400;
+ color: #373737;
+ text-align: left;
+ outline: none;
+ border-style: solid;
+ border-width: thin;
+ border-color: #7F7F7F;
+ background-color: white; }
+ .igv-generic-dialog-container .igv-generic-dialog-label-input input {
+ width: 50%;
+ font-size: 16px; }
+ .igv-generic-dialog-container .igv-generic-dialog-input {
+ margin-top: 8px;
+ width: calc(100% - 16px);
+ height: 24px;
+ color: #373737;
+ line-height: 24px;
+ display: flex;
+ flex-flow: row;
+ flex-wrap: nowrap;
+ justify-content: space-around;
+ align-items: center; }
+ .igv-generic-dialog-container .igv-generic-dialog-input input {
+ display: block;
+ height: 100%;
+ width: 100%;
+ padding-left: 4px;
+ font-family: "Open Sans", sans-serif;
+ font-weight: 400;
+ color: #373737;
+ text-align: left;
+ outline: none;
+ border-style: solid;
+ border-width: thin;
+ border-color: #7F7F7F;
+ background-color: white; }
+ .igv-generic-dialog-container .igv-generic-dialog-input input {
+ font-size: 16px; }
+ .igv-generic-dialog-container .igv-generic-dialog-ok-cancel {
+ width: 100%;
+ height: 28px;
+ display: flex;
+ flex-flow: row;
+ flex-wrap: nowrap;
+ justify-content: space-around;
+ align-items: center; }
+ .igv-generic-dialog-container .igv-generic-dialog-ok-cancel div {
+ margin-top: 32px;
+ color: white;
+ font-family: "Open Sans", sans-serif;
+ font-size: 14px;
+ font-weight: 200;
+ width: 75px;
+ height: 28px;
+ line-height: 28px;
+ text-align: center;
+ border-color: transparent;
+ border-style: solid;
+ border-width: thin;
+ border-radius: 2px; }
+ .igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:first-child {
+ margin-left: 32px;
+ margin-right: 0;
+ background-color: #5ea4e0; }
+ .igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:last-child {
+ margin-left: 0;
+ margin-right: 32px;
+ background-color: #c4c4c4; }
+ .igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:first-child:hover {
+ cursor: pointer;
+ background-color: #3b5c7f; }
+ .igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:last-child:hover {
+ cursor: pointer;
+ background-color: #7f7f7f; }
+ .igv-generic-dialog-container .igv-generic-dialog-ok {
+ width: 100%;
+ height: 36px;
+ margin-top: 32px;
+ display: flex;
+ flex-flow: row;
+ flex-wrap: nowrap;
+ justify-content: space-around;
+ align-items: center; }
+ .igv-generic-dialog-container .igv-generic-dialog-ok div {
+ width: 98px;
+ height: 36px;
+ line-height: 36px;
+ text-align: center;
+ color: white;
+ font-family: "Open Sans", sans-serif;
+ font-size: medium;
+ font-weight: 200;
+ border-color: white;
+ border-style: solid;
+ border-width: thin;
+ border-radius: 4px;
+ background-color: #2B81AF; }
+ .igv-generic-dialog-container .igv-generic-dialog-ok div:hover {
+ cursor: pointer;
+ background-color: #25597f; }
+
+.igv-popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ min-width: 128px;
+ z-index: 4096;
+ font-family: "Open Sans", sans-serif;
+ font-size: small;
+ font-weight: 400;
+ color: #444;
+ background: white;
+ border-radius: 4px;
+ border-color: #7F7F7F;
+ border-style: solid;
+ border-width: thin;
+ display: none; }
+
+.igv-popover-header {
+ position: relative;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 20px;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom-color: #7F7F7F;
+ border-bottom-style: solid;
+ border-bottom-width: thin;
+ background-color: #eee; }
+ .igv-popover-header div {
+ position: absolute;
+ top: 3px;
+ right: 3px;
+ height: 100%;
+ width: 16px;
+ text-align: center;
+ line-height: 100%;
+ cursor: pointer;
+ color: #444;
+ font-size: small; }
+ .igv-popover-header div:hover {
+ color: white; }
+
+.igv-popover-track-popup-content {
+ position: relative;
+ top: 0;
+ left: 0;
+ max-height: 384px;
+ overflow-x: hidden;
+ overflow-y: auto; }
+
+.igv-popover-name-value {
+ cursor: default;
+ text-wrap: none;
+ white-space: nowrap;
+ max-width: 384px; }
+
+.igv-popover-name {
+ font-weight: bold;
+ padding-right: 4px;
+ float: left; }
+
+.igv-popover-value {
+ padding-left: 4px;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ max-width: 256px;
+ display: inline-block; }
+
+.igv-spinner-container {
+ color: #3f3f3f;
+ width: 100%;
+ height: 100%;
+ text-align: center;
+ padding-top: 8px;
+ font-size: 24px;
+ z-index: 512; }
+
+.igv-fa-check-hidden {
+ color: rgba(255, 255, 255, 0); }
+
+.validateTips {
+ border: 1px solid transparent;
+ padding: 0.3em; }
+ .validateTips fieldset {
+ border: 0; }
+
+.igv-spacer-10 {
+ height: 10px;
+ width: 100%;
+ font-size: 0;
+ margin: 0;
+ padding: 0;
+ border: 0;
+ display: block; }
+
+/*# sourceMappingURL=igv.css.map */
diff --git a/config/plugins/visualizations/mvpapp/static/css/igv.css.map b/config/plugins/visualizations/mvpapp/static/css/igv.css.map
new file mode 100644
index 00000000000..acc860086d0
--- /dev/null
+++ b/config/plugins/visualizations/mvpapp/static/css/igv.css.map
@@ -0,0 +1,7 @@
+{
+"version": 3,
+"mappings": "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",
+"sources": ["_igv-colorpicker.scss","_igv-generic-container.scss","igv.scss"],
+"names": [],
+"file": "igv.css"
+}
\ No newline at end of file
diff --git a/config/plugins/visualizations/mvpapp/static/css/img/cursor_logo.png b/config/plugins/visualizations/mvpapp/static/css/img/cursor_logo.png
new file mode 100644
index 00000000000..2f0b5550fb5
Binary files /dev/null and b/config/plugins/visualizations/mvpapp/static/css/img/cursor_logo.png differ
diff --git a/config/plugins/visualizations/mvpapp/static/css/img/cursor_logo.svg b/config/plugins/visualizations/mvpapp/static/css/img/cursor_logo.svg
new file mode 100644
index 00000000000..4bc36909ea0
--- /dev/null
+++ b/config/plugins/visualizations/mvpapp/static/css/img/cursor_logo.svg
@@ -0,0 +1,21 @@
+
+
+
+ dugla_cursor_logo 2
+ Created with Sketch.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/config/plugins/visualizations/mvpapp/static/css/img/igv-logo.svg b/config/plugins/visualizations/mvpapp/static/css/img/igv-logo.svg
new file mode 100644
index 00000000000..2c325c3a76e
--- /dev/null
+++ b/config/plugins/visualizations/mvpapp/static/css/img/igv-logo.svg
@@ -0,0 +1,14 @@
+
+
+
+ IGV
+ Created with Sketch.
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/config/plugins/visualizations/mvpapp/static/css/jquery-ui.min.css b/config/plugins/visualizations/mvpapp/static/css/jquery-ui.min.css
new file mode 100755
index 00000000000..efccc47678c
--- /dev/null
+++ b/config/plugins/visualizations/mvpapp/static/css/jquery-ui.min.css
@@ -0,0 +1,7 @@
+/*! jQuery UI - v1.11.4 - 2015-03-11
+* http://jqueryui.com
+* Includes: core.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, draggable.css, menu.css, progressbar.css, resizable.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=gloss_wave&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=highlight_soft&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=glass&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=diagonals_thick&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=flat&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
+* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
+
+.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,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");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-button{display:inline-block;overflow:hidden;position:relative;text-decoration:none;cursor:pointer}.ui-selectmenu-button span.ui-icon{right:0.5em;left:auto;margin-top:-8px;position:absolute;top:50%}.ui-selectmenu-button span.ui-selectmenu-text{text-align:left;padding:0.4em 2.1em 0.4em 1em;display:block;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #ddd;background:#eee url("images/ui-bg_highlight-soft_100_eeeeee_1x100.png") 50% top repeat-x;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #e78f08;background:#f6a828 url("images/ui-bg_gloss-wave_35_f6a828_500x100.png") 50% 50% repeat-x;color:#fff;font-weight:bold}.ui-widget-header a{color:#fff}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #ccc;background:#f6f6f6 url("images/ui-bg_glass_100_f6f6f6_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#1c94c4}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#1c94c4;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #fbcb09;background:#fdf5ce url("images/ui-bg_glass_100_fdf5ce_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#c77405}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#c77405;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #fbd850;background:#fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#eb8f00}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#eb8f00;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fed22f;background:#ffe45c url("images/ui-bg_highlight-soft_75_ffe45c_1x100.png") 50% top repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#b81900 url("images/ui-bg_diagonals-thick_18_b81900_40x40.png") 50% 50% repeat;color:#fff}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-state-default .ui-icon{background-image:url("images/ui-icons_ef8c08_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_ef8c08_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_ef8c08_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_228ef1_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_ffd27a_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#666 url("images/ui-bg_diagonals-thick_20_666666_40x40.png") 50% 50% repeat;opacity:.5;filter:Alpha(Opacity=50)}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url("images/ui-bg_flat_10_000000_40x100.png") 50% 50% repeat-x;opacity:.2;filter:Alpha(Opacity=20);border-radius:5px}
\ No newline at end of file
diff --git a/config/plugins/visualizations/mvpapp/static/css/lorikeet.css b/config/plugins/visualizations/mvpapp/static/css/lorikeet.css
new file mode 100644
index 00000000000..bd1478a3d7d
--- /dev/null
+++ b/config/plugins/visualizations/mvpapp/static/css/lorikeet.css
@@ -0,0 +1,153 @@
+/*$LastChangedDate$*/
+/*$LastChangedBy$*/
+/*$LastChangedRevision$*/
+
+@media print {
+ .noprint {
+ display:none;
+ }
+}
+
+div.lorikeet {
+ width:100%;
+ background-color: #FFFFFF;
+ color: #000000;
+ font-family: "Trebuchet MS",Arial,sans-serif;
+ font-size: 10pt;
+ font-style: normal;
+ margin: 0;
+ padding: 0;
+}
+
+div.lorikeet div.bar {
+ background-color:#F5F5DC;
+ color:black;
+}
+div.lorikeet td {
+ background-color:#FFFFEF;
+ border:1px solid black;
+ padding: 5px;
+}
+
+div.lorikeet td.optionCell {
+ background-color: white;
+ border: 1px dotted #666666;
+ padding: 5px;
+ margin:5px;
+}
+
+div.lorikeet .link {
+ text-decoration: underline;
+ cursor:pointer;
+ color:sienna;
+}
+div.lorikeet .font_small {
+ font-size: 8pt;
+}
+div.lorikeet .zoom_out_link {
+ background-image: url('../images/lorikeet/zoom_out.png');
+ background-repeat: no-repeat;
+ width:20px;
+ height:20px;
+ cursor:pointer;
+}
+div.lorikeet .zoom_in_link {
+ background-image: url('../images/lorikeet/zoom_in.png');
+ background-repeat: no-repeat;
+ width:20px;
+ height:20px;
+ cursor:pointer;
+}
+
+
+/* THE FOLLOWING STYLES ARE FOR THE TABLE DISPLAYING THE SEQUENCE AND FRAGMENT ION MASS */
+div.lorikeet .ionTable {
+ border-collapse:collapse;
+ border-color:#DDDDDD;
+}
+div.lorikeet .ionTable th {
+ background-color:#BDB76B;
+ border: 1px solid #666666;
+}
+div.lorikeet .ionTable td {
+ border: 1px solid #666666;
+ text-align: center;
+ background-color:#FFFFFF;
+ font-size: 8pt;
+}
+
+/* style for a cell containing a residue from the sequence */
+div.lorikeet .ionTable td.seq {
+ font-weight: bold;
+ background-color:#BDB76B;
+}
+
+/* style for cell containing a modified residue */
+div.lorikeet .ionTable td.modified{
+ background-color:gold;
+}
+
+/* style for cell containing the fragment indices */
+div.lorikeet .ionTable td.numCell {
+ background-color:#F5F5DC;
+ color:#777777;
+}
+
+
+/* style for cell containing a fragment m/z that matches a peak in the scan */
+div.lorikeet .ionTable td.matchIon {
+ font-weight:bold;
+ opacity:0.8;
+ filter: alpha(opacity=80); /*For IE*/
+ -moz-opacity:0.8; /*Old Mozilla browsers*/
+ color:white;
+}
+
+
+/* THE FOLLOWING STYLES ARE FOR THE TABLE DISPLAYING VARIABLE MODIFICATIONS */
+div.lorikeet .varModsTable {
+ border-collapse:collapse;
+}
+
+div.lorikeet .varModsTable td {
+ border: 0px;
+ text-align: left;
+ font-size: 10pt;
+ padding: 1px 5px 1px 0px;
+}
+
+/*
+ * THE FOLLOWING STYLES ARE FOR THE SLIDERS CONTROLLING THE PLOT SIZE
+ */
+
+/*
+ * jQuery UI Slider @VERSION
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Slider#theming
+ */
+.ui-slider { position: relative; text-align: left; }
+.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.0em; height: 0.9em; cursor: default; }
+.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0;}
+
+.ui-slider-horizontal { height: .3em; }
+.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
+.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
+.ui-slider-horizontal .ui-slider-range-min { left: 0; }
+.ui-slider-horizontal .ui-slider-range-max { right: 0; }
+
+.ui-corner-all { -moz-border-radius: 4px/*{cornerRadius}*/; -webkit-border-radius: 4px/*{cornerRadius}*/; border-radius: 4px/*{cornerRadius}*/; }
+.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #d3d3d3/*{borderColorDefault}*/;
+background-image: url('../images/lorikeet/slider_handle.png');
+background-repeat: no-repeat;
+font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; }
+
+/* Component containers
+----------------------------------*/
+.ui-widget { }
+.ui-widget .ui-widget { }
+.ui-widget-content { border: 1px solid #888888/*{borderColorContent}*/; background: #CFCFCF/*{bgColorContent}*/ ; color: #111111/*{fcContent}*/; }
+.ui-widget-content a { color: #000000/*{fcContent}*/; }
\ No newline at end of file
diff --git a/config/plugins/visualizations/mvpapp/static/css/msi.css b/config/plugins/visualizations/mvpapp/static/css/msi.css
new file mode 100644
index 00000000000..5e2e28c858e
--- /dev/null
+++ b/config/plugins/visualizations/mvpapp/static/css/msi.css
@@ -0,0 +1,442 @@
+body {
+ padding-top: 70px;
+}
+.navbar-fixed-top {
+ background-color: #9e9f9f;
+}
+
+.vertical-align {
+ display: flex;
+ align-items: center;
+}
+
+.row{
+ margin-top: 10px;
+ margin-bottom: 15px;
+}
+
+.msi_button {
+ margin-bottom: 10px;
+}
+
+.ui-widget-content {
+ background: none;
+ border: none;
+}
+
+.ui-widget-header {
+ background: rgba(255, 255, 255, 0);
+ border: 1px solid rgba(195, 219, 255, 0);
+}
+
+.score-filter {
+ border: 1px solid #DDD;
+}
+
+.brush .extent {
+ fill-opacity: .125;
+ shape-rendering: crispEdges;
+}
+
+#galaxy_save {
+ background-color: #9e9f9f;
+ color: #337ab7;
+}
+
+.galaxy_file {
+ padding: 10px 10px 10px 10px;
+ background-color: #bbbbbb;
+}
+
+.selected_file {
+ background-color: #4cae4c;
+}
+
+svg {
+ font: 10px sans-serif;
+}
+
+.resize path {
+ fill: #666;
+ fill-opacity: .8;
+ stroke: #000;
+ stroke-width: 1.5px;
+}
+
+path {
+ fill: currentColor;
+ stroke: steelblue;
+ stroke-width: 1.5px;
+}
+
+.axis path,
+.axis line {
+ fill: none;
+ stroke: #000;
+ shape-rendering: crispEdges;
+}
+
+.low_score {
+ color: darkblue;
+}
+.high_score {
+ color: red;
+}
+
+.score-svg-component {
+ background: rgba(195, 219, 255, 0.31);
+}
+
+.glyphicon-ok-circle {
+ color: green;
+}
+
+.glyphicon-ok {
+ color: green;
+}
+
+.pep_seq {
+ font-family: "Courier New", Courier, monospace;
+ font-size: large;
+ font-weight: bold;
+}
+
+.pep_seq_selected {
+ background: rgba(70, 130, 180, 0.62);
+}
+
+#selectable .ui-selecting { background: rgba(70, 130, 180, 0.62); }
+#selectable .ui-selected { background: darkblue; color: white; }
+
+.well {
+ background-color: #DDDDDD;
+ border: 1px solid #DDDDDD;
+}
+
+.btn-group {
+ padding-bottom: 15px;
+}
+
+.p_accession {
+ background-color: rgba(128, 128, 128, 0.04);
+}
+
+.prot-sequence {
+ color: rgba(14, 92, 173, 0.5);
+ max-height: 300px;
+ overflow-y: scroll;
+ overflow-x: scroll;
+}
+
+.pep-cov {
+ color: rgb(14, 92, 173);
+}
+
+.pep-cov-hide {
+ color: transparent;
+}
+
+.inv {
+ color: transparent;
+}
+
+#mod_banner {
+ font-weight: 200;
+ overflow-y: scroll;
+ margin-bottom: 20px
+}
+
+.baseMod {
+ cursor: help;
+ color: rgb(10, 173, 63);
+ font-size: larger;
+ text-shadow: 0 1px 0 #ccc,
+ 0 2px 0 #c9c9c9,
+ 0 3px 0 #bbb,
+ 0 4px 0 #b9b9b9,
+ 0 5px 0 #aaa,
+ 0 6px 1px rgba(0,0,0,.1),
+ 0 0 5px rgba(0,0,0,.1),
+ 0 1px 3px rgba(0,0,0,.3),
+ 0 3px 5px rgba(0,0,0,.2),
+ 0 5px 10px rgba(0,0,0,.25),
+ 0 10px 10px rgba(0,0,0,.2),
+ 0 20px 20px rgba(0,0,0,.15);
+}
+
+.file_picker {
+ cursor: pointer;
+ padding: 2em;
+}
+
+.fdr_score {
+ display: block;
+ width: 400px;
+ padding: 10px;
+ cursor: pointer;
+ background-color: #337ab7;
+}
+
+.fdr_pct_value {
+ display: block;
+ padding: 5px;
+ cursor: pointer;
+}
+
+.detail_table_title {
+ cursor: pointer;
+ padding: 5px;
+}
+
+.scan-mark {
+ padding: 10px;
+}
+
+.u-config {
+ cursor: pointer;
+}
+.config-true {
+ color: green;
+}
+
+.config-false {
+ color: red;
+}
+
+.mod-require {
+ cursor: pointer;
+}
+
+td.details-control {
+ width: 20px;
+ background: url('../images/details_open.png') no-repeat center center;
+ cursor: pointer;
+}
+tr.shown td.details-control {
+ background: url('../images/details_close.png') no-repeat center center;
+}
+
+.app_nav_btn {
+ background-color: transparent;
+ color: #337ab7;
+}
+
+.igv_track_div {
+ padding: 10px;
+}
+
+.igv_load_track {
+ background-color: gainsboro;
+}
+
+.fv-protein {
+ cursor: pointer;
+}
+
+.fv-protein:hover {
+ color: #337ab7;
+}
+
+.fv-seq {
+ font-size: 1.25em;
+}
+
+.fv-entry {
+ background-color: gainsboro;
+ margin: 5px;
+}
+
+.filter-entry {
+ padding: 5px 5px 5px 5px;
+ cursor: pointer;
+}
+
+.filter-entry-selected {
+ background-color: #1b6d85;
+}
+
+/**
+Amino Acid Color Triple Amino Acid Color Triple
+ASP,GLU bright red [230,10,10] CYS,MET yellow [230,230,0]
+LYS,ARG blue [20,90,255] SER,THR orange [250,150,0]
+PHE,TYR mid blue [50,50,170] ASN,GLN cyan [0,220,220]
+GLY light grey [235,235,235] LEU,VAL,ILE green [15,130,15]
+ALA dark grey [200,200,200] TRP pink [180,90,180]
+HIS pale blue [130,130,210] PRO flesh [220,150,130]
+*/
+
+.amino_acid {
+ fill: #feedde;
+ stroke: gray;
+ stroke-width: 1px;
+}
+
+.reference_mismatch {
+ fill: #9c3e0d;
+ stroke: #9c3e0d;
+ stroke-width: 5px;
+}
+
+.align_match {
+ stroke: gray;
+ stroke-width: 1px;
+}
+
+.ctx {
+ fill: #feedde;
+ stroke: gray;
+ stroke-width: 1px;
+}
+
+.asp, .glu {
+ fill: rgb(230, 10, 10);
+}
+
+.lys, .arg {
+ fill: rgb(20, 90, 255);
+}
+
+.phe, .tyr {
+ fill: rgb(50, 50, 170);
+}
+
+.gly {
+ fill: rgb(235, 235, 235);
+}
+
+.ala {
+ fill: rgb(200, 200, 200);
+}
+
+.his {
+ fill: rgb(130, 130, 210);
+}
+
+.cys, .met {
+ fill: rgb(230, 230, 0);
+}
+
+.ser, .thr {
+ fill: rgb(250, 150, 0);
+}
+
+.asn, .gln {
+ fill: rgb(0, 220, 220);
+}
+
+.leu, .val, .ile {
+ fill: rgb(15, 130, 15);
+}
+
+.trp {
+ fill: rgb(180, 90, 180);
+}
+
+.pro {
+ fill: rgb(220, 150, 130);
+}
+
+.aa_residue {
+ text-shadow: 1px 1px 2px white;
+ font-family: monospace;
+ font-size: 18px;
+ fill: black;
+}
+
+.txt_pep {
+ font-family: monospace;
+ font-size: 18px;
+ fill: black;
+}
+
+.offset {
+ font-family: monospace;
+ font-size: 10px;
+ fill: black;
+}
+
+
+
+.psm {
+ fill: #fd8d3c;
+ stroke: gray;
+}
+
+.ctx_psm {
+ fill: #fd8d3c;
+}
+
+.ctx_peptide {
+ fill: #fdbe85;
+}
+
+.peptide {
+ fill: #fdbe85;
+ stroke: gray;
+}
+
+.locator {
+ stroke-width: 100%;
+ stroke: #333333;
+ opacity: 0.2;
+}
+
+.genome_line {
+ stroke: gray;
+ stroke-width: 1;
+ cursor: pointer;
+}
+
+.genome_dummy {
+ stroke-width: 40px;
+ stroke: #a8a8a8;
+ stroke-dasharray: 1,1;
+}
+
+.ptm {
+ fill: #E5E7E9;
+}
+
+text.ptm {
+ fill: #6E2C00;
+ text-shadow: 2px 2px 3px #AEB6BF;
+}
+
+text.itraq4plex {
+ fill: #884EA0;
+ text-shadow: 2px 2px 3px #AEB6BF;
+}
+
+text.oxidation {
+ fill: #2471A3;
+ text-shadow: 2px 2px 3px #AEB6BF;
+}
+
+.mismatch {
+ fill: #018571;
+}
+
+.score_line {
+ fill: none;
+ stroke: steelblue;
+ opacity: 0.5;
+ stroke-width: 4px;
+ cursor: pointer;
+}
+
+.decoy_score_pct {
+ fill: steelblue;
+ opacity: 0.5;
+ stroke: gray;
+ cursor:pointer;
+}
+
+.tooltip {
+ background: steelblue;
+ color: white;
+}
+
+.tooltip-inner {
+ background: steelblue;
+ color:white;
+}
diff --git a/config/plugins/visualizations/mvpapp/static/js/application.js b/config/plugins/visualizations/mvpapp/static/js/application.js
new file mode 100644
index 00000000000..16b9f1b4fbc
--- /dev/null
+++ b/config/plugins/visualizations/mvpapp/static/js/application.js
@@ -0,0 +1,3980 @@
+
+/**
+ * Handles modification provisioning.
+ * Uses chained Promises to efficiently generate all modifications in memory.
+ */
+var PeptideModifications = (function(pm){
+
+ //[iTRAQ4plex]RTLNISHNLH{S:Phospho}LLPEVSPM{K:iTRAQ4plex}NR
+ //Returns an html formatted sequence including modifications for a list of peptide ids found in pepIDs
+ pm.htmlFormatSequences = function (objs) { //pepIDs
+ objs.data.forEach(function(cv){
+ let s = undefined;
+ if (cv['"Sequence"']) {
+ s = cv['"Sequence"'];
+ } else {
+ s = cv['"PEPTIDE_ID"'];
+ }
+
+ s = s.replace(/{([A-Z]):(.+?)}/g, '$1 ');
+ s = s.replace(/\[(\S+?)\]/g, '• ');
+
+ //For older versions
+ s = s.replace(/^([A-Z]){(.+?)}/g,'• $1');
+ s = s.replace(/([A-Z]){(.+?)}/g, '$1 ');
+
+ //For the olders version
+ cv['"Sequence"'] = s;
+ });
+ return objs;
+ };
+ return pm;
+
+}(PeptideModifications || {}));// eslint-disable-line no-use-before-define
+
+
+/**
+ * Handles score summary information. Scores are dynamic and can be quite numerous.
+ *
+ */
+var ScoreSummary = (function(sSum){
+
+ sSum.scoreSummary = {};
+ sSum.rankedScores = null;
+
+ //Generates list of scores ranked by pct of scores present.
+ sSum.getRankedScores = function() {
+ var scoreArray = [];
+ Object.keys(sSum.scoreSummary).forEach(function(cv){
+ scoreArray.push([cv, sSum.scoreSummary[cv].pct_scores_present]);
+ });
+ scoreArray.sort(function(a,b){
+ return b[1] - a[1];
+ });
+ sSum.rankedScores = scoreArray;
+ sSum.publish('RankedScoresAvailable', sSum.rankedScores);
+ };
+
+ sSum.generateScores = function() {
+ var q = 'SELECT score_summary.* from score_summary';
+ var url = sSum.href + '/api/datasets/' +
+ sSum.datasetID + '?data_type=raw_data&provider=sqlite-table&headers=True&query=';
+ var self = this;
+ $.get(url + encodeURIComponent(q), function(data){
+ var scoreNames;
+ data.data.forEach(function (cv, idx) {
+ var obj = {};
+ if (idx === 0) {
+ scoreNames = cv;
+ } else {
+ for (var i = 0; i < scoreNames.length; i++) {
+ obj[scoreNames[i]] = cv[i];
+ }
+ self.scoreSummary[cv[scoreNames.indexOf("score_name")]] = obj;
+ }
+ });
+ sSum.publish("ScoreSummaryComplete", sSum.scoreSummary);
+ });
+ };
+
+ sSum.init = function (confObj) {
+ sSum.href = confObj.href;
+ sSum.datasetID = confObj.datasetID;
+ sSum.generateScores();
+ sSum.subscribe('RequestRankedScores', function(){
+ if (sSum.rankedScores) {
+ sSum.publish('RankedScoresAvailable', sSum.rankedScores);
+ } else {
+ sSum.getRankedScores();
+ }
+ })
+ };
+
+ return sSum;
+}(ScoreSummary || {}));// eslint-disable-line no-use-before-define
+
+/**
+ * Object for building AJAX server-side data providers to a datatable
+ *
+ * confObj.baseQuery is an object:
+ * An example:
+ * {
+ * SELECT: 'pe.Peptide_pkid, p.sequence, COUNT(DISTINCT(pe.DBSequence_pkid)) AS ProteinCount, COUNT(DISTINCT(pe.SpectrumIdentification_pkid)) AS SpectralCount',
+ * FROM: 'PeptideEvidence pe, Peptide p',
+ * WHERE: 'pe.Peptide_pkid = p.pkid',
+ * GROUPBY: 'pe.Peptide_pkid'
+ * }
+ *
+ * confObj.rowIDField indicates that the SQL field named should be the key to the
+ * data row. In gerneral this will be a id field. If present, the field will be marked
+ * as non-visible OPTIONAL
+ */
+function AjaxDataProvider(confObj) { // eslint-disable-line no-unused-vars
+ var self = this;
+
+ this.baseQuery = confObj.baseQuery;
+ this.href = confObj.href;
+ this.historyID = confObj.historyID;
+ this.datasetID = confObj.datasetID;
+ this.rowIDField = confObj.rowIDField;
+ this.columnNames = confObj.columnNames;
+ this.searchColumn = confObj.searchColumn;
+ this.searchTable = confObj.searchTable;
+ this.tableDivID = confObj.tableDivID;
+ this.filtered = false;
+ this.customSQL = confObj.customSQL;
+ this.initCompleteCB = confObj.callBackFN || function(){};
+
+ this.scoreSummary = confObj.scoreSummary || false;
+
+ this.sequenceFormatter = confObj.sequenceFormatter || null;
+
+ this.url = this.href + '/api/datasets/' +
+ this.datasetID + '?data_type=raw_data&provider=sqlite-table&headers=True&query=';
+
+ this.recordsTotal = null;
+ this.recordsFiltered = null;
+ this.scoresByType = {};
+
+ //Need to get score datatypes from the SQLite table
+ (function(){
+ var q = 'SELECT score_summary.score_name, score_summary.score_type FROM score_summary';
+ var s = self;
+ $.get(self.url + encodeURIComponent(q),
+ function(data){
+ data.data.forEach(function (cv) {
+ if (!(cv[1] in s.scoresByType)) {
+ s.scoresByType[cv[1]] = []
+ }
+ s.scoresByType[cv[1]].push(cv[0])
+ });
+ });
+ })();
+
+ this.buildInClause = function (searchStr) {
+ var rStr = ' AND ' + this.searchColumn + ' IN (';
+
+ rStr += searchStr + ')';
+
+ return rStr;
+ };
+
+ this.buildLikeClause = function (searchStr) {
+ let rx = RegExp(/(LIKE \"%[A-Z]*%\")/g);
+ let matches = searchStr.match(rx);
+ let rStr = ' AND ';
+ let colName = this.searchColumn;
+
+ matches.forEach(function(m){
+ rStr += colName + ' ' + m + ' OR ';
+ });
+ rStr = rStr.slice(0, rStr.lastIndexOf(' OR '));
+ return rStr;
+ };
+
+ //---------------------------------------------------------------- Functions
+ this.buildBaseQuery = function (searchReq) {
+ var rStr = null;
+
+ if (this.customSQL) {
+ rStr = this.customSQL;
+ } else {
+ rStr = 'SELECT ' + this.baseQuery.SELECT + ' FROM ' + this.baseQuery.FROM;
+ rStr += this.baseQuery.WHERE ? ' WHERE ' + this.baseQuery.WHERE : '';
+ }
+
+ // Search value can be multiple values within a string.
+ if (searchReq.value) {
+ if (searchReq.value.indexOf("%") > -1) {
+ rStr += this.buildLikeClause(searchReq.value);
+ } else {
+ rStr += this.buildInClause(searchReq.value);
+ }
+ }
+
+ if (!this.customSQL) {
+ rStr += this.baseQuery.GROUPBY ? ' GROUP BY ' + this.baseQuery.GROUPBY : '';
+ }
+
+ return rStr;
+ };
+
+ this.getTotalRecordCount = function (callParms, callbackFN, enclState) {
+ var sStr = this.buildBaseQuery(callParms.search);
+ var finalFn = this.queryData;
+ var parms = callParms;
+ var dFn = callbackFN;
+ var callingState = enclState;
+ $.get(this.url + encodeURIComponent('SELECT COUNT(*) FROM (' + sStr + ')'), function (data) {
+ callingState.recordsTotal = data.data[1][0];
+ callingState.recordsFiltered = callingState.recordsTotal;
+ finalFn(parms, dFn, callingState);
+ });
+ }.bind(this);
+
+ this.getFilteredRecordCount = function (callParms, callbackFN, enclState) {
+ var sStr = this.buildBaseQuery(callParms.search);
+ sStr = 'SELECT COUNT(*) FROM (' + sStr + ')';
+ var nextFN = this.queryData;
+ var parms = callParms;
+ var destFN = callbackFN;
+ var callingState = enclState;
+ $.get(this.url + encodeURIComponent(sStr), function (data) {
+ callingState.recordsFiltered = data.data[1][0];
+ nextFN(parms, destFN, callingState);
+ });
+ };
+
+ //Returns column definitions for the datatable.
+ this.getColumnNames = function () {
+ var rValue = this.columnNames;
+
+ if (this.rowIDField) {
+ rValue.forEach(function (cv) {
+ if (cv.title === this.rowIDField) {
+ cv.visible = false;
+ }
+ }.bind(this));
+ }
+ return rValue;
+ };
+
+ // Helper function for odering based on table request.
+ // {column: 2, dir: "DESC"}
+ this.orderFunction = function (orderArray) {
+ var orderStr = '';
+
+ orderArray.forEach(function (cv) {
+ var isCast = false;
+ var orderColName = this.columnNames[cv.column].title;
+ this.scoresByType.REAL.forEach(function(t){
+ if (orderColName === t) {
+ isCast = true;
+ }
+ });
+ if (isCast) {
+ orderStr += ' ORDER BY CAST(' + this.columnNames[cv.column].data + ' AS REAL) ' +
+ cv.dir + ' ';
+ } else {
+ orderStr += ' ORDER BY ' + this.columnNames[cv.column].data + ' ' +
+ cv.dir + ' ';
+ }
+
+ }.bind(this));
+
+ return orderStr;
+ };
+
+ this.queryData = function (callParms, callbackFN, enclState) {
+ var self = enclState;
+ var sqlStatement = self.buildBaseQuery(callParms.search);
+ var requestParms = callParms;
+ var rowField = self.rowIDField;
+ var formatFunc = self.sequenceFormatter;
+
+ var isNumber = function(n) {
+ return !isNaN(parseFloat(n)) && isFinite(n);
+ };
+
+ // Ordering per callParms
+ sqlStatement += self.orderFunction(requestParms.order);
+
+ //Add limit and offset
+ sqlStatement += ' LIMIT ' + requestParms.length + ' OFFSET ' + requestParms.start;
+
+ $.get(self.url + encodeURIComponent(sqlStatement), function (data) {
+ var retParms = requestParms;
+ var retObj = {};
+ var cNames = data.data[0];
+
+ retObj.draw = retParms.draw;
+ retObj.recordsTotal = this.recordsTotal;
+ retObj.recordsFiltered = this.recordsFiltered;
+ retObj.data = [];
+
+ data.data.slice(1).forEach(function (cv) {
+ var obj = {};
+ cv.forEach(function (d, idx) {
+ var escapedField = '"' + cNames[idx] + '"';
+ if (isNumber(d))
+ {
+ obj[escapedField] = Number.parseFloat(d);
+ } else {
+ obj[escapedField] = d;
+ }
+
+ });
+ if (rowField) {
+ obj.DT_RowId = obj['"' + rowField + '"'];
+ obj.DT_RowData = {
+ key: obj['"' + rowField + '"'],
+ fObj: obj
+ };
+ }
+ retObj.orderable = true;
+ retObj.data.push(obj);
+ });
+ if (formatFunc) {
+ retObj = formatFunc(retObj);
+ }
+ callbackFN(retObj);
+ }.bind(self));
+ };
+
+ /**
+ * Called from the DataTable table.
+ * Need to state check:
+ * - Is this the first call or pagination call. If first,
+ * need to get the total DB count for the base query before
+ * running the base query.
+ * - Is this a call based on filter and its first filter call:
+ * Need to get DB count on base plus filter query, then
+ * run the filter query.
+ * - Is this a clear filter call, that is we are in a filtered state, but
+ * now the user has cleared the filter.
+ * - Ths filter call can never be the absolute first call. Table is rendered
+ * from the first call.
+ *
+ */
+ this.provideData = function (callParms, callbackFN) {
+
+ if (!this.recordsTotal) {
+ this.getTotalRecordCount(callParms, callbackFN, this);
+ } else if ((callParms.search.value.length > 0) && (!this.filtered)) {
+ // Table is asking for a filtered query. It is the first filtered request
+ this.filtered = true;
+ this.getFilteredRecordCount(callParms, callbackFN, this);
+ } else if ((callParms.search.value.length === 0) && (this.filtered)) {
+ // Table is resetting from filtering.
+ this.filtered = false;
+ this.recordsFiltered = this.recordsTotal;
+ this.queryData(callParms, callbackFN, this);
+ } else {
+ this.queryData(callParms, callbackFN, this);
+ }
+ };
+
+ this.fillDOM = function () {
+ var cbFn = this.initCompleteCB;
+ var options = {
+ scrollX: true,
+ dom: 'rtipl',
+ processing: true,
+ serverSide: true,
+ ajax: function (data, callbackFN) {
+ this.provideData(data, callbackFN);
+ }.bind(this),
+ columns: this.getColumnNames()
+ }
+
+ $('#' + this.tableDivID).DataTable(options)
+ .on( 'init.dt', function () {
+ $('#progress-div').empty();
+ cbFn();
+ } );
+ };
+
+ this.generateTable = function () {
+ // Do we need to get column names?
+ if (!this.columnNames) {
+ // Need to dynamically generate column names.
+ $.get(this.url + encodeURIComponent(this.buildBaseQuery({value: ""})) + ' LIMIT 0',
+ function (data) {
+ this.columnNames = [];
+ data.data[0].forEach(function (cn) {
+ var obj = {};
+ obj.data = '"' + cn + '"'; // Some of the feeding applications use illegal characters in their column names.
+ obj.title = cn;
+ this.columnNames.push(obj);
+ }.bind(this));
+ this.fillDOM();
+ }.bind(this));
+ } else {
+ this.fillDOM();
+ }
+
+ };
+
+ // this.clearContents = function() {
+ // let dElem = $('#' + this.tableDivID);
+ // let dt = $(dElem.selector).DataTable();
+ // dt.destroy();
+ // dElem.empty();
+ // this.columnNames = null;
+ // this.recordsTotal = null;
+ // this.recordsFiltered = null;
+ // this.filtered = false;
+ // this.customSQL = null;
+ // };
+}
+
+
+
+/**
+ * Module for handling GUI presentation and data filtering based on the protein FDR threshold used by the
+ * search application.
+ */
+var FDRPresentation = (function(fdr){
+
+ fdr.ignoreScores = ["theoretical mass","tic","score_name"];
+ fdr.scoreName = null;
+ fdr.scoreValue = null;
+ fdr.softwareName = null;
+ fdr.softwareVersion = null;
+ fdr.fdrProtocolName = null;
+ fdr.fdrProtocolValue = null;
+
+ //Use plotly.js for scatter plots
+ fdr.buildPlotlyPlots = function(){
+ Object.keys(FDRPresentation.graphPackage).forEach(function(k, kIdx){
+ //key is score name, eg: PeptideShaker PSM Score
+
+ var passed = {
+ y: FDRPresentation.graphPackage[k].passed,
+ x: Array.from({length: FDRPresentation.graphPackage[k].passed.length}, (x,i) => i),
+ mode: 'markers',
+ type: 'scattergl',
+ name: 'Passed FDR Threshold',
+ hoverinfo: 'y'
+ };
+
+ var failed = {
+ y: FDRPresentation.graphPackage[k].failed,
+ x: Array.from({length: FDRPresentation.graphPackage[k].failed.length}, (x,i) => i),
+ mode: 'markers',
+ type: 'scattergl',
+ name: 'Failed FDR Threshold',
+ hoverinfo: 'y'
+ };
+ var data = [passed, failed];
+ var layout = {
+ title: k,
+ xaxis: {
+ title: 'PSM Index',
+ showticklabels: false
+ },
+ height: 500
+ };
+
+ var forClick = document.getElementById('panel_' + kIdx);
+
+ Plotly.newPlot('panel_' + kIdx, data, layout);
+
+ // forClick.on('plotly_click', function(data){
+ // var filter_yval = 0;
+ // data.points.forEach(function(dp) {
+ // if (dp.y > filter_yval) {
+ // filter_yval = dp.y
+ // }
+ // });
+ // document.getElementById('filter_' + kIdx).innerText = 'Filter data by ' + k + ' score value >= ' + filter_yval;
+ // var node = document.createElement("button");
+ // node.innerText = 'Filter';
+ // node.style = "margin: 5px;";
+ // node.setAttribute('score_name', k);
+ // node.setAttribute('score_value', filter_yval);
+ // node.addEventListener('click', function(){
+ // console.log('Filtering now.');
+ // console.log('using score ' + this.getAttribute('score_name'));
+ // console.log('value of ' + this.getAttribute('score_value'));
+ // })
+ // document.getElementById('filter_' + kIdx).appendChild(node);
+ // })
+
+ });
+ };
+
+ //Get the actual scores for the discovered fields.
+ fdr.getScoreData = function(fieldNames){
+ let qStr = 'SELECT PSM.passThreshold, ';
+ let baseURL = fdr.href + '/api/datasets/' + fdr.datasetID + '?data_type=raw_data&provider=sqlite-table&headers=True&query=';
+ let url = baseURL;
+
+ fieldNames.forEach(function(cv){
+ qStr += 'PSM."' + cv + '",';
+ });
+ qStr = qStr.slice(0, qStr.lastIndexOf(','));
+ qStr += ' FROM psm_entries PSM;';
+ url += encodeURIComponent(qStr);
+
+ $.get(url, function(data) {
+ var graphPackage = {};
+ var fNames = data.data[0].slice(1);
+ data.data[0].slice(1).forEach(function (sn) {
+ graphPackage[sn] = {};
+ graphPackage[sn].passed = [];
+ graphPackage[sn].failed = [];
+ });
+ data.data.slice(1).forEach(function (cv) {
+ cv.slice(1).forEach(function (x, xidx) {
+ if (cv[0] === "true") {
+ graphPackage[fNames[xidx]].passed.push(x);
+ } else {
+ graphPackage[fNames[xidx]].failed.push(x);
+ }
+ });
+ });
+ fNames.forEach(function(y){
+ graphPackage[y].passed.sort(function(a,b){return a-b;});
+ graphPackage[y].failed.sort(function(a,b){return b-a;});
+ });
+ FDRPresentation.graphPackage = graphPackage;
+
+ url = baseURL + encodeURIComponent("SELECT protein_detection_protocol.name,protein_detection_protocol.value, " +
+ " analysis_software.name, analysis_software.version " +
+ " FROM protein_detection_protocol, analysis_software");
+
+ $.get(url, function(data){
+ FDRPresentation.fdrProtocolName = data.data[1][0];
+ FDRPresentation.fdrProtocolValue = data.data[1][1];
+ FDRPresentation.softwareName = data.data[1][2];
+ FDRPresentation.softwareVersion = data.data[1][3];
+ FDRPresentation.preparePlotlyPanel();
+ FDRPresentation.buildPlotlyPlots();
+ $('#' + FDRPresentation.divID).hide(); //Start hidden.
+ FDRPresentation.publish("FDRDataPrepared");
+ });
+ });
+
+ };
+
+ //Get REAL scores that have full coverage. These scores will be used in plots
+ fdr.getScores = function(){
+ let qStr = 'SELECT score_summary.score_name FROM score_summary WHERE score_summary.pct_scores_present = 1 AND \n' +
+ 'score_summary.score_type = "REAL"';
+ let url = fdr.href + '/api/datasets/' + fdr.datasetID + '?data_type=raw_data&provider=sqlite-table&headers=True&query=';
+ url += encodeURIComponent(qStr);
+
+ $.get(url, function(data){
+ var graphScores = [];
+ data.data.slice(1).forEach(function(cv){
+ if (FDRPresentation.ignoreScores.indexOf(cv[0]) === -1) {
+ graphScores.push(cv[0]);
+ }
+ });
+ FDRPresentation.getScoreData(graphScores);
+ });
+
+ };
+
+
+ //Builds GUI panel for Plotly plots
+ fdr.preparePlotlyPanel = function() {
+ let domStr = '
' +
+ '
' +
+ '
' +
+ '
##SOFTWARE_NAME## (##SOFTWARE_VERSION##) ##FDR_PROTOCOL_NAME## at ##FDR_PROTOCOL_VALUE## ' +
+ '##SCORE_DOM##' +
+ '
';
+
+ var sDom = '';
+ Object.keys(FDRPresentation.graphPackage).forEach(function(k, kIdx){
+ sDom += '
';
+ sDom += '
';
+ });
+
+ domStr = domStr.replace('##SCORE_DOM##', sDom);
+ domStr = domStr.replace('##SOFTWARE_NAME##', fdr.softwareName);
+ domStr = domStr.replace('##SOFTWARE_VERSION##', fdr.softwareVersion);
+ domStr = domStr.replace('##FDR_PROTOCOL_NAME##', fdr.fdrProtocolName);
+ domStr = domStr.replace('##FDR_PROTOCOL_VALUE##', fdr.fdrProtocolValue);
+
+ $('#' + fdr.divID).append($.parseHTML(domStr));
+
+ };
+
+ fdr.init = function(confObj){
+ fdr.href = confObj.href;
+ fdr.datasetID = confObj.datasetID;
+ fdr.divID = confObj.divID;
+ fdr.callBackFN = confObj.callBackFN;
+ fdr.getScores();
+ };
+
+ return fdr;
+}(FDRPresentation || {}));//eslint-disable-line no-use-before-define
+
+
+
+/**
+ * User can add tracks to IGV. These tracks are data entries in the current Galaxy history.
+ * This code manages interactions betweem user and Galaxy history.
+ */
+var IGVTrackManager = (function(itm){
+
+ itm.validTrackTypes = ['bed', 'gff', 'gff3', 'gtf', 'wig', 'bigWig', 'bedGraph', 'bam', 'vcf', 'seg'];
+ itm.trackGroups = {'bed': 'annotation', 'gff': 'annotation', 'gff3': 'annotation', 'gtf': 'annotation',
+ 'wig': 'wig', 'bigWig': 'wig', 'bedGraph': 'wig', 'bam': 'alignment', 'vcf': 'variant', 'seg': 'seg'};
+ itm.galaxyTrackFiles = null;
+
+ itm.queryGalaxyHistory = function() {
+ let url = itm.galaxyConfiguration.href +
+ '/api/histories/' + itm.galaxyConfiguration.historyID + '/contents/';
+
+ $.get(url, function(data){
+ let files = [];
+ data.forEach(function(d){
+ let obj = {};
+ if (Object.keys(d).indexOf('extension') > -1 && d.visible) {
+ if (IGVTrackManager.validTrackTypes.indexOf(d.extension.toLowerCase()) > -1) {
+ obj.id = d.id;
+ obj.name = d.name;
+ obj.sourceType = d.extension;
+ obj.trackGroup = itm.trackGroups[d.extension.toLowerCase()];
+
+ if (d.extension.toLowerCase() === 'bam') {
+ obj.indexURL = itm.galaxyConfiguration.href + d.url + '/metadata_file?metadata_file=bam_index';
+ }
+
+ files.push(obj);
+ }
+ }
+ });
+ itm.galaxyTrackFiles = files;
+ itm.publish("ValidTrackFilesAvailable", itm.galaxyTrackFiles);
+ });
+ };
+
+ itm.init = function(confObj){
+
+ itm.galaxyConfiguration = confObj.galaxyConfiguration;
+
+ itm.subscribe("NeedValidTrackFiles", function(){
+ if (itm.galaxyTrackFiles) {
+ itm.publish("ValidTrackFilesAvailable", itm.galaxyTrackFiles);
+ } else {
+ itm.queryGalaxyHistory();
+ }
+ });
+ };
+
+ return itm;
+}(IGVTrackManager || {}));//eslint-disable-line no-use-before-define
+
+const GenomeWarningText = {
+ 'text': '
IGV - Galaxy - Genomes
' +
+ '
The IGV viewer requires access to full genome sequences.
Galaxy can provide access to a genome sequences via the internal API. This allows for the use of custom reference sequences.
' +
+ '
In addition, IGV has a set of reference genomes that are available to all users of the IGV.js tool
' +
+ '
However, the genome associated with the mz.SQLite history entry is not working with the Galaxy API nor is it a standard IGV genome.
' +
+ '
Until this issue is resolved, you will not be able to see a reference sequence in the MVP viewer.
'
+};
+
+/**
+ * Module code for creating and managing the IGV.js browser.
+ *
+ * Galaxy history entry for the MZ.Sqlite _must_ have a valid DBKey assigned.
+ * @param confObj
+ * @constructor
+ */
+function IGVModule(confObj) {
+
+ this.addTrackCB = confObj.addTrackCB;
+ this.igvDiv = confObj.igvDiv;
+ this.data = confObj.data;
+ if (confObj.genome) {
+ this.genome = confObj.genome;
+ } else {
+ this.genome = confObj.dbkey || "hg19"; //A default value // TODO: Really??
+ }
+
+ this.hidden = false;
+ if (confObj.fasta_file) {
+ this.fasta_file = confObj.fasta_file;
+ }
+ if (confObj.fasta_index) {
+ this.fasta_index = confObj.fasta_index;
+ }
+}
+
+//Build all the custom UI surrounding the IGV browser.
+IGVModule.prototype.fillChrome = function () {
+ const IGVOverviewHelp = {
+ 'text': '
Purpose
' +
+ '
The IGV panel is the Broad Institutes IGV viewer for web applications
' +
+ '
At the start, the IGV viewer is centered around the chromosome location you clicked on in the Peptide-Protein Viewer
' +
+ '
You can move about the entire genome from the IGV viewer. In addition you can load tracks based on data files' +
+ ' in your current Galaxy history (for instance: BAM, BED or GTF files).
' +
+ '
Note that you cannot change the underlying genome. The genome is set by your Galaxy history.
'
+ }
+
+ let pStr = '
' +
+ '
Genome: ' + this.genome + '
' +
+ '
Hide ' +
+ '
' +
+ '
' +
+ '
';
+ let self = this;
+
+ $('#' + this.igvDiv).append($.parseHTML(pStr));
+
+ $('#add-track').on('click', function(){
+ self.addTrackCB();
+ });
+
+ $('#igv_overview_help').on('click', function() {
+ BuildHelpPanel.showHelp({
+ 'helpText':IGVOverviewHelp.text,
+ 'title': 'IGV Overview Help'
+ });
+ });
+
+ $('.kill-igv-browser').on('click', function () {
+ self.hidden = true;
+ $('#igvDiv').hide();
+ });
+
+};
+
+IGVModule.prototype.loadTrack = function(o) {
+ igv.browser.loadTrack(o);
+};
+
+IGVModule.prototype.goToLocation = function (loc) {
+ if (this.hidden) {
+ $('#igvDiv').show();
+ }
+ igv.browser.search(loc);
+};
+
+IGVModule.prototype.showBrowser = function () {
+
+ let ref = {};
+ // Are we working from a Galaxy genome or IGV reference?
+ if (this.fasta_file) {
+ ref['fastaURL'] = this.fasta_file;
+ ref['indexURL'] = this.fasta_index;
+ } else {
+ ref['genome'] = this.genome;
+ }
+
+ let options = {
+ reference: ref,
+ locus: this.data.chrom + ":" + this.data.start + "-" + this.data.end
+ };
+ this.fillChrome();
+ igv.createBrowser(document.getElementById("browser-location"), options);
+};
+
+var IGVManager = (function (igm) {
+ let validTrackFiles = null;
+
+ igm.goToLocation = function(strL) {
+ igm.browser.goToLocation(strL);
+ };
+
+ igm.showTrackModal = function(){
+ let s = '
' +
+ '
' +
+ ' ' +
+ '
' +
+ '
Available IGV Tracks:
' +
+ '
' +
+ '
';
+ let trackList = '';
+
+ if (validTrackFiles.length == 0) {
+ $('#igvDiv').prepend('
Sorry, your Galaxy history does not contain a valid IGV track. There is nothing available to load.
');
+ $('#add-track').attr("disabled", "disabled");
+ } else {
+ validTrackFiles.forEach(function(t){
+ trackList += '
' + t.name + '>';
+ });
+ s = s.replace('##TRACK_LIST##', trackList);
+ $('#master_modal').empty().append(s);
+
+ $('.track-id-item').on('click', function(){
+ $(this).toggleClass('selected');
+ });
+
+ $('#btn-load-track').on('click', function(){
+ $('.track-id-item.selected').each(function(){
+ let apiCall = igm.galaxyConfiguration.href + '/api/histories/' +
+ igm.galaxyConfiguration.historyID +'/contents/' + $(this).attr('gid') + '/display';
+ let opts = {};
+ opts.type = $(this).attr('trackGroup');
+ opts.sourceType = $(this).attr('sourcetype');
+ opts.url = apiCall;
+ opts. name = $(this).text();
+ if ($(this).attr('indexURL')) {
+ opts.indexURL = $(this).attr('indexURL');
+ }
+ igm.browser.loadTrack(opts);
+
+ });
+ $('#galaxy-tracks').modal('hide');
+ });
+
+ $('#galaxy-tracks').modal({'backdrop': false});
+ }
+ };
+
+ igm.addIGVTrack = function(){
+ if (validTrackFiles) {
+ igm.showTrackModal(validTrackFiles)
+ } else {
+ igm.subscribe("ValidTrackFilesAvailable", function(d){
+ validTrackFiles = d;
+ igm.showTrackModal(validTrackFiles);
+ });
+ igm.publish("NeedValidTrackFiles");
+ }
+ };
+
+ igm.createNewBrowser = function(confObj){
+ confObj.addTrackCB = igm.addIGVTrack;
+ igm.browser = new IGVModule(confObj);
+ igm.browser.showBrowser();
+ };
+
+
+ //IGV default genome use.
+ // We are here because of a Galaxy API call failure. Fall back to one of the
+ // supported IGV genomes. Otherwise, inform the user we are having an issue.
+ igm.defaultGenomeConfig = function(defaultObject) {
+ let hosted_genomes = [
+ "hg38",
+ "hg19",
+ "hg18",
+ "mm10",
+ "gorGor4",
+ "panTro4",
+ "panPan2",
+ "susScr11",
+ "bosTau8",
+ "canFam3",
+ "rn6",
+ "danRer11",
+ "danRer10",
+ "dm6",
+ "ce11",
+ "sacCer3",
+ ];
+
+ //Do we have an exact match "galaxy dbKey": "mm10" <-> "hosted_genomes": "mm10"?
+ let idx = hosted_genomes.indexOf(defaultObject.genome.toLowerCase());
+ let igv_genome = '';
+ if (idx > -1) {
+ igv_genome = hosted_genomes[idx];
+ defaultObject.igvConfObj.fasta_file = null;
+ defaultObject.igvConfObj.fasta_index = null;
+ defaultObject.igvConfObj.genome = igv_genome;
+ igm.createNewBrowser(defaultObject.igvConfObj);
+ } else {
+ // Got a partial match?? mm9 will match mm10
+ let rx = /\D+/;
+ let galaxy_genome = rx.exec(defaultObject.genome.toLowerCase());
+ for (let i = 0; i < hosted_genomes.length; i++) {
+ let result = rx.exec(hosted_genomes[i]);
+ if (result[0] === galaxy_genome[0]) {
+ // First match and we are out.
+ defaultObject.igvConfObj.fasta_file = null;
+ defaultObject.igvConfObj.fasta_index = null;
+ defaultObject.igvConfObj.genome = result["input"];
+ igm.createNewBrowser(defaultObject.igvConfObj);
+ }
+ }
+ // No matches at all
+ BuildHelpPanel.showHelp({
+ 'helpText':GenomeWarningText.text,
+ 'title': 'Missing Genome: ' + defaultObject.genome
+ });
+ }
+ }
+
+ igm.buildModule = function (confOb) {
+ //Get URI for index file and fasta file, URI call will be based on dbkey.
+ //http://localhost:8080/api/genomes/mmXX/genome_uri
+ let uri = this.galaxyConfiguration.href + '/api/genomes/' +
+ this.galaxyConfiguration.dbkey + '/genome_uri';
+ let cobj = confOb;
+ fetch(uri)
+ .then((resp) => resp.json())
+ .then(function(data){
+ cobj.fasta_file = data["fasta_file"];
+ cobj.fasta_index = data["fasta_index"];
+ igm.createNewBrowser(cobj);
+ }).catch(function(error){
+ // There is an error coming back from the API call. Fallback to IGV functionality.
+ // Use IGV supported genomes only.
+ igm.defaultGenomeConfig({
+ 'genome': cobj.dbkey,
+ 'igvConfObj': cobj
+ });
+ })
+ };
+
+ igm.init = function(confObj) {
+ igm.galaxyConfiguration = confObj.galaxyConfiguration;
+ };
+
+ return igm;
+}(IGVManager || {}));//eslint-disable-line no-use-before-define
+
+/**
+ * Name: PSMProteinViewer.js
+ * Author: mcgo0092@umn.edu
+ * Created: Mar 1 2016
+ *
+ * Description:
+ * This is a D3.js based svg generator. It is meant to show a user
+ * the relationship between user chosen PSM sequences, associated
+ * peptide sequences and the originating protein.
+ *
+ */
+
+let PSMProteinViewer = (function () {
+ /**
+ *
+ * @param confObj The object containing protein information. With the following elements
+ *
+ * baseDiv: '#id' The DOM element to insert all SVGs.
+ * genome: [
+ * {
+ cds_end:143
+ cds_start:0
+ chrom:"15"
+ end:41096310
+ name:"H0YMN5"
+ start:41096167
+ strand:"-"
+ * }
+ * ],
+ * protein: {
+ * sequence: [] Array of peptide sequences
+ * offset: x If the offset should start at something else than 0
+ * name: 'protein name' The protein name.
+ * }
+ * peptideList: [
+ * {
+ * sequence: [], sequence array
+ * offset: int, where does the peptide start on the protein
+ * score: '', string of a score to show in tooltip
+ * } ...
+ * ]
+ * @constructor
+ */
+ function PSMProteinViewer(confObj) {
+
+ var self = this;
+ var viewObject = confObj;
+
+ this.dbkey = confObj.dbkey;
+
+ //Callback function for requesting an MSMS render of a PSM
+ this.msmsRender = confObj.msmsRender;
+
+ //Basic configuration values
+
+ //Holds all the protein information
+ this.proteinObj = confObj.protein;
+ //Holds all the PSMs
+ this.peptideList = confObj.peptideList;
+
+ if (confObj.genome) {
+ this.genomeList = confObj.genome;
+ } else {
+ this.genomeList = [];
+ }
+ ;
+
+
+ this.aaAbrev = {
+ "A": "ala",
+ "R": "arg",
+ "N": "asn",
+ "D": "asp",
+ "C": "cys",
+ "Q": "gln",
+ "E": "glu",
+ "G": "gly",
+ "H": "his",
+ "I": "ile",
+ "L": "leu",
+ "K": "lys",
+ "M": "met",
+ "F": "phe",
+ "P": "pro",
+ "S": "ser",
+ "T": "thr",
+ "W": "trp",
+ "Y": "tyr",
+ "V": "val",
+ "B": "asx",
+ "Z": "glx",
+ "X": "xaa"
+ };
+
+ //Modifications, dynamically set from input
+ this.modifications = [];
+ var boundList = this.modifications;
+ this.peptideList.forEach(function (p) {
+ if (p.hasOwnProperty('mods')) {
+ p.mods.forEach(function (m) {
+ if (boundList.indexOf(m[1]) === -1) {
+ boundList.push(m[1]);
+ }
+ });
+ }
+ });
+
+ //Protein rect size in focus area
+ this.prtSz = 20;
+ //rounded rect
+ this.rXrY = 5;
+ //Opacity
+ this.rectOpacity = .75;
+ //Text Y buffer
+ this.txtYBuffer = 4;
+ //Track where the protein is showing 0 === beginning of protein
+ //This is never > 0, it is the translate x offset
+ this.prtSeqXPos = 0;
+ //Show protein sequence offset every xth aa. Default is every 10th residue
+ this.offsetModal = 10;
+ //maximum Y offset when all peptides are rendered.
+ this.maxFocusY = 0;
+ //protein rect size in context area
+ this.ctxPrtSz = 5;
+ //Holds y coordinates of drawn peptides. Used for packing
+ this.psmExclusions = [];
+
+ this.margin = {left: 50, right: 50, top: 50, bottom: 50};
+
+ //base div for svg, will be overridden by user
+ this.baseDiv = confObj.baseDiv || 'body';
+
+ //div for igv.js viewer
+ this.igvDiv = confObj.igvDiv;
+
+ //Prep for SVG creation
+ //add context and focus divs.
+ $(self.baseDiv).append($.parseHTML('
'));
+ $(self.baseDiv).append($.parseHTML('
'));
+ $(self.baseDiv).append($.parseHTML('
'));
+ $(self.baseDiv).append($.parseHTML('
'));
+
+ //SVG holding protein name and desciption
+ this.prtNameSVG = d3.select('#prt_name')
+ .append('svg')
+ .attr('width', function () {
+ return $('div#prt_name').width() - self.margin.left - self.margin.right;
+ })
+ .attr('height', 50);
+
+ this.genomeSVG = d3.select("#genome")
+ .append('svg')
+ .attr('width', function () {
+ return $('div#prt_name').width() - self.margin.left - self.margin.right;
+ })
+ .attr('height', 50);
+
+ //SVG holding the focus graphics
+ this.focusSVG = d3.select('#focus')
+ .append('svg')
+ .attr('width', function () {
+ return $('div#focus').width() - self.margin.left - self.margin.right;
+ })
+ .attr('height', '100%');
+ //Focus 'g'
+ this.focusGroup = null;
+
+ //SVG holding the context graphics
+ this.contextSVG = d3.select('#context')
+ .append('svg')
+ .attr('width', function () {
+ return $('div#context').width() - self.margin.left - self.margin.right;
+ })
+ .attr('height', '100%');
+
+ //Context 'g'
+ this.contextGroup = null;
+ //Genome group
+ this.genomeGroup = null;
+
+ //Context svg uses a d3 scale.
+ this.ctxXScale = d3.scaleLinear()
+ .domain([0, self.proteinObj.sequence.length])
+ .range([0, parseInt(self.contextSVG.style('width'))]);
+
+ //Rendering functions and helpers -------------------------------------
+
+ //Moves the focus locator line to the corrected position in the context SVG.
+ this.lineRelocator = function () {
+ var newX1 = (-1) * ((self.prtSeqXPos / self.prtSz));
+ var newX2 = newX1 + (Math.floor(parseInt(self.focusSVG.style('width')) / self.prtSz));
+
+ d3.select('line.locator')
+ .attr('x1', self.ctxXScale(newX1))
+ .attr('x2', self.ctxXScale(newX2));
+ };
+
+ //Allows for proper packing of sequences.
+ //No overlapping of peptide sequences in the y direction.
+ this.calcExclusionZone = function (len, offset, sizeOffset) {
+ var factor = 2;
+
+ self.psmExclusions.map(function (cv) {
+ if (((offset <= cv[1]) && (offset >= cv[0])) || ((offset + (len - 1) <= cv[1]) && (offset + (len - 1) >= cv[0]))) {
+ factor += 1;
+ }
+ });
+
+ self.psmExclusions.push([offset, offset + (len - 1)]);
+ return (factor * sizeOffset);
+ };
+
+ this.styleMods = function (data, idx) {
+ var elemIDX = idx;
+ if (data.hasOwnProperty('mods')) {
+ data.mods.forEach(function (aMod) {
+ var offset = aMod[0] === 0 ? 0 : aMod[0] - 1; //TODO: talk to JJ about this crazy offset issue in the DB
+ $('rect.peptide_' + elemIDX + ':eq(' + offset + ')').addClass('ptm');
+ $('text.peptide_' + elemIDX + ':eq(' + offset + ')').addClass(aMod[1].toLowerCase());
+ });
+ }
+ };
+
+ //Rendering functions and helpers -------------------------------------
+
+ //Div for tooltip display used as user hovers
+ this.ttDiv = d3.select("body").append("div")
+ .attr("class", "tooltip")
+ .attr("id", "d3-tooltip")
+ .style("opacity", 0);
+
+ //Actual SVG rendering
+ this.renderSVG = function () {
+
+ //Protein name and description
+ self.prtNameSVG.append('g')
+ .append('text')
+ .text(function () {
+ return self.proteinObj.name;
+ })
+ .attr('x', 0)
+ .attr('y', 20)
+ .attr("font-family", "sans-serif")
+ .attr("font-size", "20px");
+
+
+ //Add drag behavior.
+ self.focusGroup = self.focusSVG.append('g')
+ .attr('transform', 'translate(0,5)')
+ .call(d3.drag().on('drag', function () {
+ self.prtSeqXPos += d3.event.dx;
+ //Confine the sequence line from running off the left
+ if (self.prtSeqXPos > 0) {
+ self.prtSeqXPos = 0;
+ }
+ //Confine the sequence line from running off the right
+ if (Math.abs(self.prtSeqXPos) > (self.proteinObj.sequence.length - 20) * self.prtSz) {
+ self.prtSeqXPos = (-1) * ((self.proteinObj.sequence.length - 20) * self.prtSz);
+ }
+ d3.select(this).attr('transform', 'translate(' + self.prtSeqXPos + ',0)');
+ //move the genome group
+ if (self.genomeGroup) {
+ self.genomeGroup.attr('transform', 'translate(' + self.prtSeqXPos + ',0)');
+ }
+ self.lineRelocator();
+ }));
+
+
+ self.genomeGroup = self.genomeSVG.append('g')
+ .attr('transform', 'translate(0,0)');
+ //Draw the genome schematic, if needed
+ if (self.genomeList.length > 0) {
+
+ //SVG patterns for showing genomic information
+ $('div #genome').find('g').append('' +
+ '' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ');
+
+ self.genomeGroup.selectAll('rect')
+ .data(self.genomeList)
+ .enter().append('rect')
+ .attr('x', function (d) {
+ return (d['cds_start'] / 3) * self.prtSz;
+ })
+ .attr('y', 0)
+ .attr('width', function (d) {
+ var x = (d['cds_end'] / 3) - (d['cds_start'] / 3);
+ return x * self.prtSz;
+ })
+ .attr('height', 8)
+ .attr('class', 'genome_line')
+ .attr('fill', function (d) {
+ if (d['strand'] === '+') {
+ return 'url(#genomePlus)';
+ } else {
+ return 'url(#genomeNeg)'
+ }
+ })
+ .attr('rx', self.rXrY)
+ .attr('ry', self.rXrY)
+ .on('click', function () {
+ let d = d3.select(this).data()[0];
+ let options = {};
+
+ if (PSMProteinViewer.igvModule) {
+ //already created just search
+ IGVManager.goToLocation(d.chrom + ":" + d.start + "-" + d.end);
+ } else {
+ options.igvDiv = self.igvDiv;
+ options.data = d;
+ options.dbkey = self.dbkey;
+ //Does self have a dbkey assigned? If not, inform the
+ //user they must associated the history entry with a
+ //reference genome.
+ if (self.dbkey === "?") {
+ //TODO: modal, message banner or something else besides alert??
+ alert('The mz.sqlite database must be associated with a reference genome');
+ } else {
+ IGVManager.buildModule(options);
+ }
+ PSMProteinViewer.igvModule = true;
+ }
+ })
+ .append('svg:title')
+ .text(function (d) {
+ var s = 'Go to ' + d['chrom'] + ':' + d['start'].toLocaleString() +
+ '-' + d['end'].toLocaleString() + ' on an open IGV browser.';
+ return s;
+ });
+
+
+ self.genomeGroup.selectAll('text')
+ .data(self.genomeList)
+ .enter().append('text')
+ .text(function (d) {
+ return 'Chr: ' + d['chrom'];
+ })
+ .attr('x', function (d) {
+ return ((d['cds_start'] / 3) * self.prtSz) + 3;
+ }
+ )
+ .attr('y', 18)
+ .attr('font-size', '16')
+ .attr('transform', 'translate(0,10)');
+ } else {
+ //Add a 'dummy' genome line to indicate the lack of genomic coordinates.
+ self.genomeSVG.selectAll('line')
+ .data([1])
+ .enter().append('line')
+ .attr('x1', 0)
+ .attr('x2', function () {
+ return $('div#genome').width();
+ })
+ .attr('class', 'genome_dummy')
+ .attr('y1', 0)
+ .attr('y2', 0);
+
+ self.genomeSVG.append('text')
+ .text('No Genomic Coordinates Available')
+ .attr('x', 10)
+ .attr('y', 15)
+ .attr('font-size', "18");
+
+ }
+
+ //Draw variant<->reference comparison ======================================================================
+ self.variantGroup = self.genomeGroup.append('g').attr('transform', 'translate(0,30)');
+ // Alignments
+ // aligns: [[40, 50], [50, 55]]
+ viewObject.variantInformation.aligns.forEach(function (a) {
+ self.variantGroup.append('g').attr('transform', 'translate(0,10)').append('rect')
+ .attr('x', a[0] * self.prtSz)
+ .attr('y', 0)
+ .attr('width', ((a[1] - a[0]) * self.prtSz))
+ .attr('height', 3)
+ .attr('fill', '#9c3e0d')
+ .attr('class', 'align_match')
+ .append('svg:title')
+ .text('Aligned with reference sequence.');
+ });
+
+ // Deletions
+ // Object loc:20 missing:"ELV"
+ viewObject.variantInformation.deletions.forEach(function (v) {
+ self.variantGroup.append('polygon')
+ .attr('points', function () {
+ var idx = v.loc;
+ var a = [idx * self.prtSz, self.prtSz];
+ var b = [a[0] + (self.prtSz / 2), 0];
+ var c = [a[0] - (self.prtSz / 2), 0];
+ return (a.toString() + ' ' + b.toString() + ' ' + c.toString());
+ })
+ .attr('fill', '#9c3e0d')
+ .append('svg:title')
+ .text('Deletion of ' + v.missing + ' from reference seqeunce.');
+ });
+
+ // Additions
+ // additions: [{loc: 30, added: 'ELV'}]
+ viewObject.variantInformation.additions.forEach(function (v) {
+ var offset = v.loc;
+ var addLen = v.added.length;
+ self.variantGroup.append('polygon')
+ .attr('points', function () {
+ var a = [offset * self.prtSz, self.prtSz];
+ var b = [(offset + addLen) * self.prtSz, self.prtSz];
+ var c = [(a[0] + b[0]) / 2, 0];
+ return (a.toString() + ' ' + b.toString() + ' ' + c.toString());
+ })
+ .attr('fill', '#9c3e0d')
+ .append('svg:title')
+ .text('Addition to reference sequence.');
+ });
+ //==========================================================================================================
+
+ //Draw the protein sequence rects
+ self.focusGroup.selectAll('rect')
+ .data(self.proteinObj.sequence)
+ .enter().append('rect')
+ .attr('class', function (d, i) {
+ var rClass = 'amino_acid';
+ var vObj = viewObject;
+ //substituitions: [{loc: 5, ref:'X'},{loc: 10, ref:'X'}],
+ vObj.variantInformation.substitutions.forEach(function (sub) {
+ if (sub.loc === i) {
+ rClass = 'reference_mismatch';
+ }
+ });
+ return rClass;
+ })
+ .attr('x', function (d, i) {
+ return i * self.prtSz;
+ })
+ .attr('y', 0)
+ .attr('rx', self.rXrY)
+ .attr('ry', self.rXrY)
+ .attr('width', self.prtSz)
+ .attr('height', self.prtSz)
+ .attr('opacity', self.rectOpacity);
+
+ //Draw protein residue text
+ self.focusGroup.selectAll('text.aa_residue')
+ .data(self.proteinObj.sequence)
+ .enter().append('text')
+ .attr('class', 'aa_residue')
+ .text(function (d) {
+ return d;
+ })
+ .attr('x', function (d, i) {
+ return (i * self.prtSz) + (self.prtSz / 2.0);
+ })
+ .attr('y', self.prtSz - self.txtYBuffer)
+ .attr('text-anchor', 'middle');
+
+ //Draw sequence offsets. I think it looks better than an axis.
+ self.focusGroup.selectAll('text.offset')
+ .data(self.proteinObj.sequence)
+ .enter().append('text')
+ .attr('class', 'offset')
+ .text(function (d, i) {
+ if (i % self.offsetModal === 0) {
+ return i;
+ }
+ })
+ .attr('x', function (d, i) {
+ return i * self.prtSz + (self.prtSz / 2.0);
+ })
+ .attr('y', 2 * (self.prtSz - self.txtYBuffer))
+ .attr('text-anchor', 'middle');
+
+ //Begin context rendering
+ self.contextGroup = self.contextSVG.append('g')
+ .attr('transform', 'translate(0,0)');
+
+ //Draw the focus locator, want it as the bottom layer so has to draw first.
+ self.contextGroup
+ .append('line')
+ .call(d3.drag().on('drag', function () {
+ var evtX = 0;
+ var numAA = 0;
+ var focusSVGW = parseInt(self.focusSVG.style('width'));
+ var focusW = self.ctxXScale(Math.floor(parseInt(self.focusSVG.style('width')) / self.prtSz));
+
+ //never let locator go beyond left margin
+ evtX = d3.event.x < 0 ? 0.0 : d3.event.x;
+ //never let evtX push locator beyond right margin
+ if ((focusSVGW - evtX) < focusW) {
+ evtX = focusSVGW - Math.ceil(focusW);
+ }
+
+ numAA = Math.ceil(evtX / self.ctxXScale(1));
+
+ d3.select(this)
+ .attr('x1', function () {
+ return self.ctxXScale(numAA);
+ })
+ .attr('x2', function () {
+ return self.ctxXScale(numAA) + self.ctxXScale(Math.floor(parseInt(self.focusSVG.style('width')) / self.prtSz));
+ });
+
+ self.prtSeqXPos = -1 * (Math.floor(numAA * self.prtSz));
+ self.focusGroup.attr('transform', 'translate(' + self.prtSeqXPos + ',5)');
+ if (self.genomeGroup) {
+ self.genomeGroup.attr('transform', 'translate(' + self.prtSeqXPos + ',0)');
+ }
+ })
+ .on('end', function () {
+ self.focusGroup.attr('transform', 'translate(' + self.prtSeqXPos + ',5)');
+ })
+ )
+ .attr('class', 'locator')
+ .attr('x1', 0)
+ .attr('y1', 10)
+ .attr('x2', function () {
+ var vizAA = Math.floor(parseInt(self.focusSVG.style('width')) / self.prtSz);
+ return self.ctxXScale(vizAA);
+ })
+ .attr('y2', 10);
+
+ //Draw the scaled protein sequence
+ self.contextGroup.selectAll('rect.ctx')
+ .data(self.proteinObj.sequence)
+ .enter().append('rect')
+ .attr('class', function () {
+ return "ctx";
+ })
+ .attr('x', function (d, i) {
+ return self.ctxXScale(i);
+ })
+ .attr('y', 0)
+ .attr('width', function () {
+ return self.ctxXScale(1);
+ })
+ .attr('height', self.ctxPrtSz)
+ .on('mouseover', function (d, i) {
+ var ctxWidth = $('div#context').width();
+ var xPxPos = d3.event.pageX;
+
+ self.ttDiv.html(d + " Offset: " + i);
+
+ if (xPxPos > (ctxWidth / 2.0)) {
+ xPxPos -= parseInt(self.ttDiv.style('width'));
+ }
+
+ self.ttDiv.style("left", (xPxPos) + "px")
+ .style("top", (d3.event.pageY - 50) + "px");
+
+ self.ttDiv.transition()
+ .duration(200)
+ .style("opacity", .9);
+
+ })
+ .on("mouseout", function () {
+ self.ttDiv.transition()
+ .duration(500)
+ .style("opacity", 0);
+ });
+
+
+ //Draw PSMs/Peptides onto focus and context svgs
+ self.peptideList.map(function (obj, idx) {
+ var baseY = self.calcExclusionZone(obj.sequence.length, obj.offset, self.prtSz);
+ var tScore;
+ var msmsCallback = self.msmsRender;
+
+ if (obj.score) {
+ tScore = obj.score;
+ } else {
+ tScore = 'No Score';
+ }
+
+ if (baseY > self.maxFocusY) {
+ self.maxFocusY = baseY;
+ }
+
+ self.focusGroup.selectAll("rect.peptide_" + idx)
+ .data(obj.sequence)
+ .enter().append("rect")
+ .attr("class", function (d, i) {
+ var c = obj.class + ' peptide_' + idx;
+ if (obj.mismatch.indexOf(i) > -1) {
+ c += ' mismatch';
+ }
+ return c;
+ })
+ .attr("x", function (d, i) {
+ i += obj.offset;
+ return i * self.prtSz
+ })
+ .attr("y", baseY)
+ .attr("width", self.prtSz)
+ .attr("height", self.prtSz)
+ .attr("opacity", .70);
+
+ self.focusGroup.selectAll("text.peptide_" + idx)
+ .data(obj.sequence)
+ .enter().append("text")
+ .attr('class', 'txt_pep peptide_' + idx)
+ .attr('feature_type', obj.class)
+ .attr('score_val', tScore)
+ .text(function (d) {
+ return d;
+ })
+ .attr("x", function (d, i) {
+ i += obj.offset;
+ return i * self.prtSz + (self.prtSz / 2);
+ })
+ .attr("y", baseY + (self.prtSz - self.txtYBuffer))
+ .attr("text-anchor", "middle")
+ .attr('spectrum_identID', obj.spectrum_identID)
+ .on('click', function () {
+ msmsCallback(d3.select(this).attr('spectrum_identID'));
+ })
+ .on('mouseover', function () {
+ var classes = d3.select(this).attr('class');
+ var xPxPos = d3.event.pageX;
+
+ var scoreTop = $('#focus').position().top;
+ var focusWidth = $('#focus').width();
+
+
+ var ttText = d3.select(this).attr('feature_type').toLowerCase() === 'psm' ? 'Target PSM' : 'PSM';
+ var stHTML = '' + ttText + ' ' +
+ d3.select(this).attr('score_val');
+
+ //Add modifications to tooltip
+ self.modifications.forEach(function (aMod) {
+ if (classes.indexOf(aMod.toLowerCase()) >= 0) {
+ stHTML += 'Modification: ' + aMod + '
';
+ }
+ });
+
+ self.ttDiv.html(stHTML);
+
+ self.ttDiv
+ .style("left", function () {
+ if (xPxPos <= focusWidth / 2) {
+ return (focusWidth / 2) + 'px';
+ } else {
+ return (focusWidth / 4) + 'px';
+ }
+ })
+ .style("top", scoreTop + "px");
+
+ self.ttDiv.transition()
+ .duration(200)
+ .style("opacity", .9);
+
+ })
+ .on("mouseout", function () {
+ self.ttDiv.transition()
+ .duration(500)
+ .style("opacity", 0);
+ });
+
+ //Rects into the context svg
+ baseY = baseY / 4.0;
+ self.contextGroup.selectAll('rect.ctx_psm_' + idx)
+ .data(obj.sequence)
+ .enter()
+ .append('rect')
+ .attr('class', function (d, i) {
+ var c = 'ctx_' + obj.class + ' ctx_psm_' + idx;
+
+ if (obj.mismatch.indexOf(i) > -1) {
+ c += ' mismatch';
+ }
+
+ return c;
+ })
+ .attr('x', function (d, i) {
+ i += obj.offset;
+ return self.ctxXScale(i);
+ })
+ .attr('y', baseY)
+ .attr('width', self.ctxXScale(1))
+ .attr('height', self.ctxPrtSz);
+
+ self.styleMods(obj, idx);
+ });
+
+ //Focus height needs to be set now that everything is drawn
+ self.focusSVG.attr('height', self.maxFocusY + 50);
+ self.contextSVG.attr('height', (self.maxFocusY / 4) + 50); //TODO: ratio of the two rect sizes.
+ }
+
+ }
+
+ return PSMProteinViewer;
+})();
+/* eslint-disable-line no-use-before-define, no-unused-vars */
+
+const PeptideOverviewHelp = {
+ 'text': 'Purpose
' +
+ 'The Peptide Overview panel gives quick access to information about: unique peptide sequences (Sequences), displayed with any covalent modifications to specific amino acids highlighted and annotated via mouse-over, number of PSMs matched to each sequence (Spectra Count) and the number of inferred proteins containing each peptide sequence (Protein Count). Data can be sorted be each of these columns in ascending or descending order.
' +
+ ' ' +
+ 'Actions
' +
+ 'PSMs for Selected Peptides Show PSMs for all selected unique peptide sequences in the Peptide Overview table. All PSMs matching to this peptide are shown, without filtering by scoring metrics. ' +
+ 'PSMs filtered by Score You can filter PSMs by their associated scores. You can filter just the PSMs linked with the selected peptide sequences in the table or filter for PSMs from the entire dataset. To select filtering criteria, a filtering panel will become visible. ' +
+ 'Load from Galaxy You can load a pre-filtered single-column tabular file from Galaxy containing peptide sequences of interest. The column must contain a peptide sequence on each line, one per line. ' +
+ 'Peptide-Protein Viewer Displays a peptide sequence aligned within the overall protein sequence(s) from which it is derived. Other peptides from the dataset also derived from this protein are displayed as well. This viewer also displays genomic coordinates coding for the protein sequence, from which the IGV viewer can be launched. ' +
+ 'Render Generate a Lorikeet view of a single, annotated MS/MS scan for each peptide shown in the overview table. Based on the score selected from the dropdown menu, the highest quality MS/MS spectra matching each peptide will be shown. ' +
+ 'Filter Filter and select peptides based on sequence information query entered in the text box. ' +
+ ' '
+};
+
+const PSMDetailHelp = {
+ 'text': 'Purpose
' +
+ 'This panel contains all the details for a set of selected peptide sequences, including any scoring metrics available for the highest quality PSM for the peptide. Each column is sortable. Click on any row, and the best scoring, annotated MS/MS spectra will be generated for viewing using the Lorikeet tool.
' +
+ 'Actions
' +
+ 'Row Click Click on any peptide sequence in a row to generate the view of the annotated MS/MS spectra matched to this sequence. Clicking on multiple rows will generate separate MS/MS visualizations. '
+};
+
+
+
+/**
+ * Module of code for managing and presenting a peptide-centric view of the mz-sqlite db.
+ */
+var PeptideView = (function (pv) {
+
+ pv.baseQuery = {
+ 'SELECT': 'spectrum_counts.ENCODED_SEQUENCE AS Sequence, spectrum_counts.SPECTRA_COUNT AS "Spectra Count", protein_counts.PROTEIN_COUNT AS "Protein Count", spectrum_counts.peptide_id',
+ 'FROM': 'spectrum_counts, protein_counts',
+ 'WHERE': 'protein_counts.SII_ID = spectrum_counts.SII_ID'
+ };
+ pv.columnValues = '';
+ pv.tableElm = '';
+ pv.visibleScores = [];
+ pv.forPSMRendering = [];
+ pv.filteringFiles = [];
+ pv.candidateFiles = {};
+ pv.candidateFilesPanel = false;
+
+ pv.prepareFilterSequences = function (lst) {
+ if (lst.length > 0) {
+ if (lst.indexOf('%') > -1) {
+ pv.filterByLike(lst.split(/\s|,|;|:/).toLocaleString());
+ } else {
+ pv.filterBySequences(lst.split(/\W/).toLocaleString());
+ }
+
+ } else {
+ console.log('User wants to filter on an empty list');
+ }
+ };
+
+ pv.domEdit = function () {
+ var e = $('#' + pv.baseDiv);
+ e.empty();
+ var tt = "Generate a single MSMS scan for each peptide in the overview table. The best MSMS will be determined by the chosen score.";
+ e.append($.parseHTML(' ' +
+ '
Peptide Overview Help? ' +
+ '
' +
+ '
' +
+ '
' +
+ 'Load from Galaxy ' +
+ 'Peptide-Protein Viewer ' +
+ 'Render Toggle Dropdown ' +
+ '' +
+ '
' +
+ '
' +
+ 'Filter Clear
' +
+ '
' +
+ '
' + pv.tableElm + '
' +
+ '' +
+ '
'));
+ $('.render-btn').attr('disabled', 'disabled');
+
+
+ //Wire
+ $('#psm-filter-ul li').on('click', function () {
+ let type = $(this).attr('value');
+
+ if (type === 'current') {
+ if (pv.forPSMRendering.length === 0) {
+ let table = $('#data-table').DataTable();
+ table.$('tr').toggleClass('selected-peptide');
+ table.$('.selected-peptide').each(function () {
+ pv.forPSMRendering.push(table.$(this).data());
+ });
+ pv.publish("ScoreFilteringRequest", pv.forPSMRendering);
+ }
+ } else {
+ pv.publish("GlobalScoreFilterRequest");
+ }
+
+ $('html, body').animate({
+ scrollTop: ($('#score_filter_div').offset().top)
+ },1000);
+ $('#psm-filtered').tooltip('hide');
+ });
+
+ $('#psm-all').on('click', function () {
+ if (pv.forPSMRendering.length > 0) {
+ pv.appendDetailDOM('Selected Peptides');
+ pv.createDetailTable(pv.forPSMRendering);
+ }
+ });
+
+ //filter code
+ $('button.pep-filter').on('click', function () {
+ if ($(this).text() === 'Filter') {
+ pv.prepareFilterSequences($('input.pep-filter').val())
+ } else {
+ //Clear any existing filtering
+ $('input.pep-filter').val('');
+ $('#data-table').DataTable().search('');
+ $('#data-table').DataTable().draw();
+ }
+
+ });
+
+ //Help panel for peptide overview
+ $('#peptide_overview_help').on('click', function() {
+ BuildHelpPanel.showHelp({
+ 'helpText':PeptideOverviewHelp.text,
+ 'title': 'Peptide Overview Help'
+ });
+ });
+ };
+
+ pv.destroyDetailTable = function () {
+ var el = $('#detail_div');
+ el.empty();
+ };
+
+ pv.appendDetailDOM = function (sequence) {
+ var el = $('#detail_div');
+ el.empty();
+ el.append($.parseHTML(' ' +
+ '
' +
+ '
' +
+ '
PSM Detail for ' + sequence + ' Help? ' +
+ '
' +
+ '
' +
+ '
Peptide-Protein Viewer
' +
+ '
'));
+
+ $('.kill-detail-table').on('click', pv.destroyDetailTable);
+
+ $('#psm_detail_help').on('click', function(){
+ BuildHelpPanel.showHelp(
+ {
+ 'helpText': PSMDetailHelp.text,
+ 'title': 'PSM Details for Selected Unique Peptides'
+ });
+ });
+
+ $('#pep-prot-psm_view').on('click', function () {
+ var ids = [];
+ var data = $('#data-detail-table').DataTable().data();
+ for (var idx = 0; idx < data.length; idx++) {
+ ids.push(data[idx]["\"id\""]);
+ }
+ pv.publish('userRequestsViewInProteins', ids.toString());
+ });
+
+ };
+
+ pv.buildScoreQuery = function () {
+ var q = " psm_entries.id, psm_entries.sequence, psm_entries.spectrumID, psm_entries.spectrumTitle, ";
+ pv.visibleScores.forEach(function (cv) {
+ q += 'psm_entries."' + cv + '",';
+ });
+ q = q.slice(0, q.lastIndexOf(','));
+ return q;
+ };
+
+ //an array of id objects
+ pv.createDetailTable = function (idArray, fStr) {
+ let idStr = '';
+ let filterStr = fStr || null;
+
+ idArray.forEach(function (o) {
+ idStr += '"' + o.key + '",';
+ });
+
+ idStr = idStr.slice(0, idStr.lastIndexOf(','));
+
+ let setDetailRowClick = function () {
+ $('#data-detail-table').find('tbody').on('click', 'tr', function () {
+ $(this).toggleClass('selected-peptide');
+ pv.publish('renderPSMForPeptide', {
+ pkid: $(this).data().key,
+ spectrumID: $(this).data().fObj['"spectrumID"'],
+ spectrumTitle: $(this).data().fObj['"spectrumTitle"']
+ });
+ });
+ };
+
+ let option = {
+ tableDivID: 'data-detail-table',
+ rowIDField: 'id',
+ baseQuery: {
+ 'SELECT': 'psm_entries.*',
+ 'FROM': ' psm_entries',
+ 'WHERE': 'psm_entries.id in (' + idStr + ') '
+ },
+ href: pv.galaxyConfiguration.href,
+ datasetID: pv.galaxyConfiguration.datasetID,
+ callBackFN: setDetailRowClick
+ };
+
+ if (idStr.length === 0) {
+ //Do not restrict psm_entries.id, this is a global request
+ option.baseQuery.WHERE = '';
+ }
+
+ if (fStr) {
+ if (option.baseQuery.WHERE.length === 0) {
+ option.baseQuery.WHERE += ' ' + fStr + ' ';
+ } else {
+ option.baseQuery.WHERE += ' AND ' + fStr + ' ';
+ }
+
+ }
+
+ if (pv.visibleScores.length > 0) {
+ option.baseQuery['SELECT'] = pv.buildScoreQuery();
+ }
+
+ option.scoreSummary = true;
+
+ psmDetailDP = new AjaxDataProvider(option);
+ psmDetailDP.generateTable();
+ //Move to table
+ $('html, body').animate({
+ scrollTop: ($('#detail_div').offset().top)
+ },1000);
+ $('#psm-all').tooltip('hide');
+ };
+
+ pv.wireTable = function () {
+ //Table is initialized
+ pv.publish('dataTableInitialized', {});
+ let table = $('#data-table').DataTable();
+
+ table.on('draw', function () {
+ pv.forPSMRendering = [];
+ });
+
+ $('#data-table tbody').on('click', 'tr', function () {
+ let t = $('#data-table').DataTable();
+ //New approach
+ if ($(this).hasClass('selected-peptide')) {
+ $(this).toggleClass('selected-peptide');
+ let d = t.$(this).data();
+ if (pv.forPSMRendering.indexOf(d) > -1) {
+ pv.forPSMRendering.splice(pv.forPSMRendering.indexOf(d), 1);
+ }
+ } else {
+ //$('#data-table tbody tr').each(function(){$(this).removeClass('selected-peptide')});
+ $(this).addClass('selected-peptide');
+ pv.forPSMRendering.push(t.$(this).data());
+
+ //pv.createDetailTable(t.$('tr.selected-peptide').data());
+ }
+
+ });
+ };
+
+ pv.makeTableAndQuery = function (sqlStr) {
+ pv.domEdit();
+
+ pv.dataProvider = new AjaxDataProvider({
+ baseQuery: sqlStr,
+ rowIDField: 'PEPTIDE_ID',
+ href: pv.galaxyConfiguration.href,
+ datasetID: pv.galaxyConfiguration.datasetID,
+ tableDivID: 'data-table',
+ searchColumn: 'spectrum_counts.SEQUENCE',
+ callBackFN: pv.wireTable,
+ sequenceFormatter: PeptideModifications.htmlFormatSequences,
+ modificationCount: pv.galaxyConfiguration.tableRowCount.peptide_modifications
+ });
+
+ pv.dataProvider.generateTable();
+
+ };
+
+
+ pv.clearSeachFiltering = function () {
+ $('#data-table').DataTable().search('').draw();
+ };
+
+ pv.setSearchFiltering = function (s) {
+ $('#data-table').DataTable().search(s).draw();
+ };
+
+ /**
+ * User wishes to filter by a large list of peptide sequences.
+ * List comes from current Galaxy history.
+ * @param listSeq
+ */
+ pv.filterBySequences = function (listSeq) {
+ let escapedStr = '';
+
+ //Clear any existing filtering
+ PeptideView.clearSeachFiltering();
+
+ listSeq.split(',').forEach(function (cv, idx) {
+ if (idx > 0) {
+ escapedStr += ',"' + cv + '"';
+ } else {
+ escapedStr += '"' + cv + '"';
+ }
+ });
+
+ PeptideView.setSearchFiltering(escapedStr);
+ };
+
+ pv.filterByLike = function (listSeq) {
+ let rStr = '';
+
+ PeptideView.clearSeachFiltering();
+
+ rStr += ' LIKE ' + '"' + listSeq.split(',')[0] + '"';
+
+ PeptideView.setSearchFiltering(rStr);
+ }
+
+ pv.prepareRenderScores = function (data) {
+ var liS = '';
+
+ $('#score-type-ul').empty();
+
+ data.forEach(function (cv) {
+ var s = ' ' + cv + ' ASC';
+ s += '
' + cv + ' DSC';
+
+ if (cv.indexOf('PeptideShaker') > -1) {
+ //prepend in str
+ liS = s.concat(liS);
+ } else {
+ //append in str
+ liS = liS.concat(s);
+ }
+ });
+
+ $('#score-type-ul').append($.parseHTML(liS));
+ $('#score-type-ul li').on('click', function () {
+ var scoreName = $(this).attr('s_name');
+ var sortDir = $(this).attr('s_dir');
+ var rowData = $('#data-table').DataTable().rows().data();
+ var numRows = rowData.length;
+ var idx;
+ var peptides = [];
+
+ for (idx = 0; idx < numRows; idx += 1) {
+ peptides.push(rowData[idx]['"PEPTIDE_ID"']);
+ }
+
+ pv.publish('renderBestPSM', {
+ peptideIDs: peptides.toString(),
+ scoreField: scoreName,
+ sortDir: sortDir
+ });
+ });
+ //Render btn now is operational
+ $('.render-btn').removeAttr("disabled");
+
+ };
+
+ pv.resetTable = function () {
+ let tbl = $('#data-table').DataTable();
+ tbl.destroy();
+ $('#data-table').empty();
+ pv.dataProvider = null;
+ pv.makeTableAndQuery(pv.baseQuery);
+ };
+
+ pv.reBuildTable = function (name, value) {
+ let tbl = $('#data-table').DataTable();
+ let q = {
+ 'SELECT': 'DISTINCT spectrum_counts.ENCODED_SEQUENCE AS Sequence, spectrum_counts.SPECTRA_COUNT AS "Spectra Count", protein_counts.PROTEIN_COUNT AS "Protein Count", spectrum_counts.peptide_id',
+ 'FROM': 'spectrum_counts, protein_counts, psm_entries',
+ 'WHERE': 'protein_counts.SII_ID = spectrum_counts.SII_ID AND psm_entries.id = spectrum_counts.PEPTIDE_ID AND psm_entries."' + name + '" >= ' + value
+ };
+ tbl.destroy();
+ $('#data-table').empty();
+ pv.dataProvider = null;
+ pv.makeTableAndQuery(q);
+ };
+
+ pv.getPeptideFilterSequences = function (files) {
+
+ };
+
+ pv.buildFileSelectPanel = function () {
+ let str = '
' +
+ '
Choose Tabular File(s) for Peptide Filtering
\n' +
+ '
##FILES_HERE##
' +
+ '
';
+
+ let fDiv = '
';
+ Object.keys(pv.candidateFiles).forEach(function (key) {
+ fDiv += '
' + pv.candidateFiles[key]['name'] + '
'
+ });
+ fDiv += '
';
+ str = str.replace('##FILES_HERE##', fDiv);
+
+ $('#overview_row').prepend($.parseHTML(str));
+ $('.candidate-file').on('click', function () {
+ if ($(this).hasClass('shadow')) {
+ $(this).removeClass('shadow');
+ $(this).addClass('used-for-filtering');
+ } else {
+ $(this).addClass('shadow');
+ $(this).removeClass('used-for-filtering');
+ }
+ });
+
+ $('#cancel-this').on('click', function(){
+ $('.candidate-file.used-for-filtering').each(function () {
+ $(this).removeClass('used-for-filtering');
+ $(this).addClass('shadow');
+ });
+ $('#user-filter-list').toggle();
+ });
+
+ $('#filter-with').on('click', function () {
+ pv.filteringFiles = [];
+ $('.candidate-file.used-for-filtering').each(function () {
+ pv.filteringFiles.push(pv.candidateFiles[$(this).attr('dID')]);
+ });
+ if (pv.filteringFiles.length > 0) {
+ pv.publish('ParseCandidateFiles', pv.filteringFiles);
+ }
+ $('#user-filter-list').toggle();
+ });
+
+ pv.candidateFilesPanel = true;
+
+ };
+
+ pv.init = function (confObj) {
+ pv.baseDiv = confObj.baseDiv;
+ pv.galaxyConfiguration = confObj.galaxyConfiguration;
+
+ pv.makeTableAndQuery(pv.baseQuery);
+
+ pv.subscribe('UserRemovedFDRFilter', function () {
+ pv.resetTable();
+ });
+ pv.subscribe('VisibleScores', function (arg) {
+ //These are the scores the user wants to see
+ pv.visibleScores = arg;
+ pv.prepareRenderScores(arg);
+ });
+
+ pv.publish('RequestVisibleScores');
+
+ pv.publish('RequestRankedScores', {});
+
+ pv.subscribe('CandidateFilesParsed', function (arg) { //TODO: this needs to be an accessible function
+ let od = $('#overview_div');
+ pv.filteringFiles = arg.data;
+ od.removeClass('col-md-12');
+ od.addClass('col-md-8');
+ $('#data-table').DataTable().draw();
+ SequenceByFile.init({
+ pageSize: 50,
+ seqData: pv.filteringFiles,
+ elID: 'overview_row',
+ callBack: pv.filterBySequences
+ });
+ });
+
+ pv.subscribe('CandidateFilesAvailable', function (arg) {
+ var b = $('#btn-load-from-galaxy');
+ var bProt = $('#btn-view-in-protein');
+ //Can allow the user to load a peptide file from history.
+ b.removeAttr("disabled");
+
+ arg.forEach(function (cv) {
+ pv.candidateFiles[cv.obj['id']] = cv;
+ });
+
+ b.on('click', function () {
+ if (pv.candidateFilesPanel) {
+ $('#user-filter-list').toggle();
+ } else {
+ pv.buildFileSelectPanel();
+ }
+ });
+ bProt.removeAttr('disabled');
+ bProt.on('click', function () {
+ var ids = [];
+ var data = $('#data-table').DataTable().data();
+ for (var idx = 0; idx < data.length; idx++) {
+ ids.push(data[idx]["\"PEPTIDE_ID\""]);
+ }
+ pv.publish('userRequestsViewInProteins', ids.toString());
+ });
+ });
+
+ pv.subscribe("UserProvidesScoreFiltering", function (data) {
+ pv.appendDetailDOM('Score Filtered PSMs');
+ pv.createDetailTable(data['data'], data['fStr']);
+ //Hide Peptide Overview. User is focusing on filtered PSMs.
+ document.getElementById('overview_div').setAttribute('style', 'display:none');
+ });
+
+ pv.subscribe("UserClearedScoreFilter", function () {
+ //User is finished with filtered PSMs, present Peptide Overview.
+ document.getElementById('overview_div').setAttribute('style', 'display:visible');
+
+ let table = $('#data-table').DataTable();
+ table.$('tr').removeClass('selected-peptide');
+ pv.forPSMRendering = [];
+ });
+
+ $('[data-toggle="tooltip"]').tooltip();
+ };
+
+ return pv;
+
+}(PeptideView || {}));// eslint-disable-line no-use-before-define
+const LorikeetHelp = {
+ 'text': '
Purpose
' +
+ '
The Lorikeet viewer allows users to view and explore the MS/MS spectra which results in matches to specific peptide sequences. Annotated MS/MS are shown for peptide sequences clicked on in the PSM Detail for Selected Peptides window, or those generated using the Render button. Lorikeet allows users to select various attributes of peptide MS/MS spectra to annotate (left side) and view a tabular summary peaks matching to selected fragment ions within the spectrum. More information on Lorikeet is available at GitHub
' +
+ '
Along the top, you can delete, “thumbs up” or “thumbs down” the scan. Scans receiving a thumbs up assignment are tagged, and can be exported back to Galaxy for further analysis if desired.
'
+};
+
+/**
+ * The lorikeet options instance
+ * @constructor
+ */
+function LorikeetInstance(){
+
+ this.options = {
+ "sequence": null,
+ "staticMods": [],
+ "variableMods": [],
+ "ntermMod": 0, // additional mass to be added to the n-term
+ "ctermMod": 0, // additional mass to be added to the c-term
+ "peaks": [],
+ "massError": 0.1,
+ "scanNum": null,
+ "fileName": null,
+ "charge": null,
+ "precursorMz": null,
+ "ms1peaks": null,
+ "ms1scanLabel": null,
+ "precursorPeaks": null,
+ "precursorPeakClickFn": null,
+ "zoomMs1": false,
+ "width": 750, // width of the ms/ms plot
+ "height": 450, // height of the ms/ms plot
+ "extraPeakSeries": [],
+ residueSpecificNeutralLosses: false,
+ showIonTable: true,
+ showViewingOptions: true,
+ showOptionsTable: true, //false
+ showInternalIonOption: true,
+ showInternalIonTable: true,
+ showMHIonOption: false,
+ showAllTable: false,
+ showSequenceInfo: true
+ };
+
+}
+
+
+
+
+/**
+ *
+ * Module for rendering the PSM to Lorikeet
+ *
+ * 1 - Find PSMs associated with a list of peptide ids.
+ * 2 - User has chosen a score to use for ranking.
+ * 3 - Get PSM based on the 'best' scoring for desired score.
+ * 4 - Generate Lorikeet MSMS based on 3
+ *
+ */
+var RenderPSM = (function(rpm){
+
+ rpm.currentSpectra = {};
+ rpm.renderedSpectra = {};
+ rpm.idMapping = {};
+
+ rpm.determineModType = function(arr, type) {
+ rVal = [];
+
+ arr.forEach(function(m){
+ if (m.modType === type) {
+ rVal.push(m);
+ }
+ });
+
+ return rVal;
+ };
+
+ //Determine nature of mod: fixed, variable, cterm or nterm
+ rpm.setModTypes = function(currentSpectra, obj){
+ let sequenceLength = currentSpectra.sequence.length;
+ let mods = [];
+ if (currentSpectra.modifications != undefined) {
+ mods = currentSpectra.modifications;
+ }
+
+ obj.staticMods = [];
+ obj.variableMods = [];
+ obj.ntermMod = 0; // additional mass to be added to the n-term
+ obj.ctermMod = 0; // additional mass to be added to the c-term
+
+ mods.forEach(function(m){
+ let residueMod = true;
+ let am = {};
+ if (m.index === 0) {
+ obj.ntermMod += m.modMass;
+ residueMod = false;
+ }
+ if (m.index === sequenceLength + 1) {
+ obj.ctermMod += m.modMass;
+ residueMod = false;
+ }
+ if (residueMod) {
+ if (m.modType === "fixed") {
+ // Example: [{"modMass":57.0,"aminoAcid":"C"}];
+ am.modMass = m.modMass;
+ am.aminoAcid = m.aminoAcid;
+ obj.staticMods.push(am);
+ } else {
+ //Example: [ {index: 14, modMass: 16.0, aminoAcid: 'M'} ]
+ am.index = m.index;
+ am.modMass = m.modMass;
+ am.aminoAcid = m.aminoAcid;
+ obj.variableMods.push(am);
+ }
+ }
+ });
+
+ };
+
+ rpm.renderSpectrum = function(spectrumID){
+ var slug = '