diff --git a/CHANGELOG.md b/CHANGELOG.md index f27298decf4..09710587cc4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ - [Issue #525](https://github.com/grafana/grafana/issues/525). InfluxDB: Enhanced series aliasing (legend names) with pattern replacements - [Issue #581](https://github.com/grafana/grafana/issues/581). InfluxDB: Add continuous query in series results (series typeahead). - [Issue #584](https://github.com/grafana/grafana/issues/584). InfluxDB: Support for alias & alias patterns when using raw query mode +- [Issue #394](https://github.com/grafana/grafana/issues/394). InfluxDB: Annotation support - [Issue #610](https://github.com/grafana/grafana/issues/610). InfluxDB: Support for InfluxdB v0.8 list series response schemea (series typeahead) - [Issue #604](https://github.com/grafana/grafana/issues/604). Chart: New axis format, 'bps' (SI unit in steps of 1000) useful for network gear metics diff --git a/src/app/app.js b/src/app/app.js index a5fb86865fc..901208ccc24 100644 --- a/src/app/app.js +++ b/src/app/app.js @@ -6,15 +6,15 @@ define([ 'jquery', 'underscore', 'require', - 'elasticjs', + 'config', 'bootstrap', 'angular-sanitize', 'angular-strap', 'angular-dragdrop', 'extend-jquery', - 'bindonce' + 'bindonce', ], -function (angular, $, _, appLevelRequire) { +function (angular, $, _, appLevelRequire, config) { "use strict"; @@ -48,38 +48,9 @@ function (angular, $, _, appLevelRequire) { return module; }; - app.safeApply = function ($scope, fn) { - switch($scope.$$phase) { - case '$apply': - // $digest hasn't started, we should be good - $scope.$eval(fn); - break; - case '$digest': - // waiting to $apply the changes - setTimeout(function () { app.safeApply($scope, fn); }, 10); - break; - default: - // clear to begin an $apply $$phase - $scope.$apply(fn); - break; - } - }; - app.config(function ($routeProvider, $controllerProvider, $compileProvider, $filterProvider, $provide) { - $routeProvider - .when('/dashboard', { - templateUrl: 'app/partials/dashboard.html', - }) - .when('/dashboard/:kbnType/:kbnId', { - templateUrl: 'app/partials/dashboard.html', - }) - .when('/dashboard/:kbnType/:kbnId/:params', { - templateUrl: 'app/partials/dashboard.html' - }) - .otherwise({ - redirectTo: 'dashboard' - }); + $routeProvider.otherwise({ redirectTo: config.default_route }); // this is how the internet told me to dynamically add modules :/ register_fns.controller = $controllerProvider.register; @@ -90,7 +61,6 @@ function (angular, $, _, appLevelRequire) { }); var apps_deps = [ - 'elasticjs.service', '$strap.directives', 'ngSanitize', 'ngDragDrop', @@ -98,7 +68,7 @@ function (angular, $, _, appLevelRequire) { 'pasvaz.bindonce' ]; - var module_types = ['controllers', 'directives', 'factories', 'services', 'services.dashboard', 'filters']; + var module_types = ['controllers', 'directives', 'factories', 'services', 'filters', 'routes']; _.each(module_types, function (type) { var module_name = 'kibana.'+type; @@ -114,13 +84,13 @@ function (angular, $, _, appLevelRequire) { 'directives/all', 'filters/all', 'components/partials', + 'routes/all', ], function () { // bootstrap the app angular .element(document) .ready(function() { - $('body').attr('ng-controller', 'DashCtrl'); angular.bootstrap(document, apps_deps) .invoke(['$rootScope', function ($rootScope) { _.each(pre_boot_modules, function (module) { diff --git a/src/app/components/extend-jquery.js b/src/app/components/extend-jquery.js index 3e7e74b22f7..00fe4666d6f 100644 --- a/src/app/components/extend-jquery.js +++ b/src/app/components/extend-jquery.js @@ -10,18 +10,6 @@ function ($) { $.fn.place_tt = (function () { var defaults = { offset: 5, - css: { - position : 'absolute', - top : -1000, - left : 0, - color : "#c8c8c8", - padding : '10px', - 'font-size': '11pt', - 'font-weight' : 200, - 'background-color': '#1f1f1f', - 'border-radius': '5px', - 'z-index': 9999 - } }; return function (x, y, opts) { @@ -29,7 +17,8 @@ function ($) { return this.each(function () { var $tooltip = $(this), width, height; - $tooltip.css(opts.css); + $tooltip.addClass('grafana-tooltip'); + if (!$.contains(document.body, $tooltip[0])) { $tooltip.appendTo(document.body); } @@ -44,4 +33,4 @@ function ($) { })(); return $; -}); \ No newline at end of file +}); diff --git a/src/app/components/require.config.js b/src/app/components/require.config.js index 906b7b496c7..80ad4326789 100644 --- a/src/app/components/require.config.js +++ b/src/app/components/require.config.js @@ -41,7 +41,6 @@ require.config({ 'jquery.flot.time': '../vendor/jquery/jquery.flot.time', modernizr: '../vendor/modernizr-2.6.1', - elasticjs: '../vendor/elasticjs/elastic-angular-client', 'bootstrap-tagsinput': '../vendor/tagsinput/bootstrap-tagsinput', @@ -101,8 +100,6 @@ require.config({ timepicker: ['jquery', 'bootstrap'], datepicker: ['jquery', 'bootstrap'], - elasticjs: ['angular', '../vendor/elasticjs/elastic'], - 'bootstrap-tagsinput': ['jquery'], }, waitSeconds: 60, diff --git a/src/app/components/settings.js b/src/app/components/settings.js index b3919cb55d7..ad9429f4b3f 100644 --- a/src/app/components/settings.js +++ b/src/app/components/settings.js @@ -25,7 +25,6 @@ function (_, crypto) { default_route : '/dashboard/file/default.json', grafana_index : 'grafana-dash', elasticsearch_all_disabled : false, - timezoneOffset : null, playlist_timespan : "1m", unsaved_changes_warning : true }; diff --git a/src/app/controllers/all.js b/src/app/controllers/all.js index f0c468d1701..2857f6c33c6 100644 --- a/src/app/controllers/all.js +++ b/src/app/controllers/all.js @@ -1,4 +1,5 @@ define([ + './grafanaCtrl', './dash', './dashLoader', './row', diff --git a/src/app/controllers/dash.js b/src/app/controllers/dash.js index b4113a507ac..2381a73c90d 100644 --- a/src/app/controllers/dash.js +++ b/src/app/controllers/dash.js @@ -23,7 +23,6 @@ define([ 'config', 'underscore', 'services/all', - 'services/dashboard/all' ], function (angular, $, config, _) { "use strict"; @@ -31,50 +30,40 @@ function (angular, $, config, _) { var module = angular.module('kibana.controllers'); module.controller('DashCtrl', function( - $scope, $rootScope, $timeout, ejsResource, dashboard, filterSrv, dashboardKeybindings, - alertSrv, panelMove, keyboardManager, grafanaVersion) { + $scope, $rootScope, dashboardKeybindings, filterSrv, dashboard, panelMoveSrv, timer) { - $scope.requiredElasticSearchVersion = ">=0.90.3"; - - $scope.editor = { - index: 0 - }; - - $scope.grafanaVersion = grafanaVersion[0] === '@' ? 'master' : grafanaVersion; - - // For moving stuff around the dashboard. - $scope.panelMoveDrop = panelMove.onDrop; - $scope.panelMoveStart = panelMove.onStart; - $scope.panelMoveStop = panelMove.onStop; - $scope.panelMoveOver = panelMove.onOver; - $scope.panelMoveOut = panelMove.onOut; + $scope.editor = { index: 0 }; $scope.init = function() { - $scope.config = config; - - // Make stuff, including underscore.js available to views - $scope._ = _; - $scope.dashboard = dashboard; - $scope.dashAlerts = alertSrv; - - $scope.filter = filterSrv; - $scope.filter.init(dashboard.current); - - $rootScope.$on("dashboard-loaded", function(event, dashboard) { - $scope.filter.init(dashboard); - }); - - // Clear existing alerts - alertSrv.clearAll(); - - $scope.reset_row(); - - $scope.ejs = ejsResource(config.elasticsearch, config.elasticsearchBasicAuth); - - $scope.bindKeyboardShortcuts(); + $scope.availablePanels = config.panels; + $scope.onAppEvent('setup-dashboard', $scope.setupDashboard); }; - $scope.bindKeyboardShortcuts = dashboardKeybindings.shortcuts; + $scope.setupDashboard = function(event, dashboardData) { + timer.cancel_all(); + + $rootScope.fullscreen = false; + + $scope.dashboard = dashboard.create(dashboardData); + $scope.grafana.style = $scope.dashboard.style; + + $scope.filter = filterSrv; + $scope.filter.init($scope.dashboard); + + var panelMove = panelMoveSrv.create($scope.dashboard); + + $scope.panelMoveDrop = panelMove.onDrop; + $scope.panelMoveStart = panelMove.onStart; + $scope.panelMoveStop = panelMove.onStop; + $scope.panelMoveOver = panelMove.onOver; + $scope.panelMoveOut = panelMove.onOut; + + window.document.title = 'Grafana - ' + $scope.dashboard.title; + + dashboardKeybindings.shortcuts($scope); + + $scope.emitAppEvent("dashboard-loaded", $scope.dashboard); + }; $scope.isPanel = function(obj) { if(!_.isNull(obj) && !_.isUndefined(obj) && !_.isUndefined(obj.type)) { @@ -91,7 +80,7 @@ function (angular, $, config, _) { $scope.add_row_default = function() { $scope.reset_row(); $scope.row.title = 'New row'; - $scope.add_row(dashboard.current, $scope.row); + $scope.add_row($scope.dashboard, $scope.row); }; $scope.reset_row = function() { @@ -131,12 +120,6 @@ function (angular, $, config, _) { return $scope.editorTabs; }; - // This is whoafully incomplete, but will do for now - $scope.parse_error = function(data) { - var _error = data.match("nested: (.*?);"); - return _.isNull(_error) ? data : _error[1]; - }; - $scope.colors = [ "#7EB26D","#EAB839","#6ED0E0","#EF843C","#E24D42","#1F78C1","#BA43A9","#705DA0", //1 "#508642","#CCA300","#447EBC","#C15C17","#890F02","#0A437C","#6D1F62","#584477", //2 diff --git a/src/app/controllers/dashLoader.js b/src/app/controllers/dashLoader.js index d660e6d475a..87f9aa4454e 100644 --- a/src/app/controllers/dashLoader.js +++ b/src/app/controllers/dashLoader.js @@ -1,135 +1,106 @@ define([ 'angular', 'underscore', - 'moment' + 'moment', + 'filesaver' ], function (angular, _, moment) { 'use strict'; var module = angular.module('kibana.controllers'); - module.controller('dashLoader', function($scope, $rootScope, $http, dashboard, alertSrv, $location, playlistSrv) { - $scope.loader = dashboard.current.loader; + module.controller('dashLoader', function($scope, $rootScope, $http, alertSrv, $location, playlistSrv, elastic) { $scope.init = function() { $scope.gist_pattern = /(^\d{5,}$)|(^[a-z0-9]{10,}$)|(gist.github.com(\/*.*)\/[a-z0-9]{5,}\/*$)/; $scope.gist = $scope.gist || {}; $scope.elasticsearch = $scope.elasticsearch || {}; - $rootScope.$on('save-dashboard', function() { - $scope.elasticsearch_save('dashboard', false); + $scope.onAppEvent('save-dashboard', function() { + $scope.saveDashboard(); }); - $rootScope.$on('zoom-out', function() { + $scope.onAppEvent('zoom-out', function() { $scope.zoom(2); }); + }; $scope.exitFullscreen = function() { - $rootScope.$emit('panel-fullscreen-exit'); + $scope.emitAppEvent('panel-fullscreen-exit'); }; $scope.showDropdown = function(type) { - if(_.isUndefined(dashboard.current.loader)) { + if(_.isUndefined($scope.dashboard)) { return true; } - var _l = dashboard.current.loader; + var _l = $scope.dashboard.loader; if(type === 'load') { - return (_l.load_elasticsearch || _l.load_gist || _l.load_local); + return (_l.load_elasticsearch || _l.load_gist); } if(type === 'save') { - return (_l.save_elasticsearch || _l.save_gist || _l.save_local || _l.save_default); - } - if(type === 'share') { - return (_l.save_temp); + return (_l.save_elasticsearch || _l.save_gist); } return false; }; $scope.set_default = function() { - if(dashboard.set_default($location.path())) { - alertSrv.set('Home Set','This page has been set as your default dashboard','success',5000); - } else { - alertSrv.set('Incompatible Browser','Sorry, your browser is too old for this feature','error',5000); - } + window.localStorage.grafanaDashboardDefault = $location.path(); + alertSrv.set('Home Set','This page has been set as your default dashboard','success',5000); }; $scope.purge_default = function() { - if(dashboard.purge_default()) { - alertSrv.set('Local Default Clear','Your default dashboard has been reset to the default', - 'success',5000); - } else { - alertSrv.set('Incompatible Browser','Sorry, your browser is too old for this feature','error',5000); - } + delete window.localStorage.grafanaDashboardDefault; + alertSrv.set('Local Default Clear','Your default dashboard has been reset to the default','success', 5000); }; - $scope.elasticsearch_save = function(type,ttl) { - dashboard.elasticsearch_save(type, dashboard.current.title, ttl) + $scope.saveForSharing = function() { + elastic.saveForSharing($scope.dashboard) .then(function(result) { - if(_.isUndefined(result._id)) { - alertSrv.set('Save failed','Dashboard could not be saved to Elasticsearch','error',5000); - return; - } - alertSrv.set('Dashboard Saved', 'Dashboard has been saved to Elasticsearch as "' + result._id + '"','success', 5000); - if(type === 'temp') { - $scope.share = dashboard.share_link(dashboard.current.title,'temp',result._id); - } + $scope.share = { url: result.url, title: result.title }; - $rootScope.$emit('dashboard-saved', dashboard.current); + }, function(err) { + alertSrv.set('Save for sharing failed', err, 'error',5000); }); }; - $scope.elasticsearch_delete = function(id) { + $scope.saveDashboard = function() { + elastic.saveDashboard($scope.dashboard, $scope.dashboard.title) + .then(function(result) { + alertSrv.set('Dashboard Saved', 'Dashboard has been saved to Elasticsearch as "' + result.title + '"','success', 5000); + + $location.path(result.url); + + $rootScope.$emit('dashboard-saved', $scope.dashboard); + + }, function(err) { + alertSrv.set('Save failed', err, 'error',5000); + }); + }; + + $scope.deleteDashboard = function(id) { if (!confirm('Are you sure you want to delete dashboard?')) { return; } - dashboard.elasticsearch_delete(id).then( - function(result) { - if(!_.isUndefined(result)) { - if(result.found) { - alertSrv.set('Dashboard Deleted',id+' has been deleted','success',5000); - // Find the deleted dashboard in the cached list and remove it - var toDelete = _.where($scope.elasticsearch.dashboards,{_id:id})[0]; - $scope.elasticsearch.dashboards = _.without($scope.elasticsearch.dashboards,toDelete); - } else { - alertSrv.set('Dashboard Not Found','Could not find '+id+' in Elasticsearch','warning',5000); - } - } else { - alertSrv.set('Dashboard Not Deleted','An error occurred deleting the dashboard','error',5000); - } - } - ); - }; - - $scope.save_gist = function() { - dashboard.save_gist($scope.gist.title).then(function(link) { - if (!_.isUndefined(link)) { - $scope.gist.last = link; - alertSrv.set('Gist saved','You will be able to access your exported dashboard file at '+ - ''+link+' in a moment','success'); - } else { - alertSrv.set('Save failed','Gist could not be saved','error',5000); - } + elastic.deleteDashboard(id).then(function(id) { + alertSrv.set('Dashboard Deleted', id + ' has been deleted', 'success', 5000); + }, function() { + alertSrv.set('Dashboard Not Deleted', 'An error occurred deleting the dashboard', 'error', 5000); }); }; - $scope.gist_dblist = function(id) { - dashboard.gist_list(id).then(function(files) { - if (files && files.length > 0) { - $scope.gist.files = files; - } else { - alertSrv.set('Gist Failed','Could not retrieve dashboard list from gist','error',5000); - } - }); + $scope.exportDashboard = function() { + var blob = new Blob([angular.toJson($scope.dashboard, true)], { type: "application/json;charset=utf-8" }); + window.saveAs(blob, $scope.dashboard.title + '-' + new Date().getTime()); }; // function $scope.zoom // factor :: Zoom factor, so 0.5 = cuts timespan in half, 2 doubles timespan $scope.zoom = function(factor) { - var _range = this.filter.timeRange(); + var _range = $scope.filter.timeRange(); var _timespan = (_range.to.valueOf() - _range.from.valueOf()); var _center = _range.to.valueOf() - _timespan/2; @@ -143,23 +114,27 @@ function (angular, _, moment) { _to = Date.now(); } - this.filter.setTime({ + $scope.filter.setTime({ from:moment.utc(_from).toDate(), to:moment.utc(_to).toDate(), }); }; + $scope.styleUpdated = function() { + $scope.grafana.style = $scope.dashboard.style; + }; + $scope.openSaveDropdown = function() { - $scope.isFavorite = playlistSrv.isCurrentFavorite(); + $scope.isFavorite = playlistSrv.isCurrentFavorite($scope.dashboard); }; $scope.markAsFavorite = function() { - playlistSrv.markAsFavorite(); + playlistSrv.markAsFavorite($scope.dashboard); $scope.isFavorite = true; }; $scope.removeAsFavorite = function() { - playlistSrv.removeAsFavorite(dashboard.current); + playlistSrv.removeAsFavorite($scope.dashboard); $scope.isFavorite = false; }; diff --git a/src/app/controllers/grafanaCtrl.js b/src/app/controllers/grafanaCtrl.js new file mode 100644 index 00000000000..17a2beba798 --- /dev/null +++ b/src/app/controllers/grafanaCtrl.js @@ -0,0 +1,35 @@ +define([ + 'angular', + 'config', + 'underscore', +], +function (angular, config, _) { + "use strict"; + + var module = angular.module('kibana.controllers'); + + module.controller('GrafanaCtrl', function($scope, alertSrv, grafanaVersion, $rootScope) { + + $scope.grafanaVersion = grafanaVersion[0] === '@' ? 'master' : grafanaVersion; + + $scope.init = function() { + $scope._ = _; + $scope.dashAlerts = alertSrv; + $scope.grafana = { + style: 'dark' + }; + }; + + $rootScope.onAppEvent = function(name, callback) { + var unbind = $rootScope.$on(name, callback); + this.$on('$destroy', unbind); + }; + + $rootScope.emitAppEvent = function(name, payload) { + $rootScope.$emit(name, payload); + }; + + $scope.init(); + + }); +}); diff --git a/src/app/controllers/graphiteImport.js b/src/app/controllers/graphiteImport.js index e0a0f36389c..5cdd0e086c5 100644 --- a/src/app/controllers/graphiteImport.js +++ b/src/app/controllers/graphiteImport.js @@ -8,7 +8,7 @@ function (angular, app, _) { var module = angular.module('kibana.controllers'); - module.controller('GraphiteImportCtrl', function($scope, $rootScope, $timeout, datasourceSrv, dashboard) { + module.controller('GraphiteImportCtrl', function($scope, $rootScope, $timeout, datasourceSrv) { $scope.init = function() { console.log('hej!'); @@ -68,7 +68,7 @@ function (angular, app, _) { currentRow = angular.copy(rowTemplate); - var newDashboard = angular.copy(dashboard.current); + var newDashboard = angular.copy($scope.dashboard); newDashboard.rows = []; newDashboard.title = state.name; newDashboard.rows.push(currentRow); @@ -96,7 +96,7 @@ function (angular, app, _) { currentRow.panels.push(panel); }); - dashboard.dash_load(newDashboard); + $scope.dashboard.dash_load(newDashboard); } }); diff --git a/src/app/controllers/panelBaseCtrl.js b/src/app/controllers/panelBaseCtrl.js index 24ce1ddd25f..7cb3ed08d16 100644 --- a/src/app/controllers/panelBaseCtrl.js +++ b/src/app/controllers/panelBaseCtrl.js @@ -86,7 +86,7 @@ function (angular, _, $) { $timeout(function() { if (oldTimeRange !== $scope.range) { - $scope.dashboard.refresh(); + $scope.dashboard.emit_refresh(); } else { $scope.$emit('render'); diff --git a/src/app/controllers/row.js b/src/app/controllers/row.js index a4f15c32e53..3b66aa9741c 100644 --- a/src/app/controllers/row.js +++ b/src/app/controllers/row.js @@ -76,12 +76,12 @@ function (angular, app, _) { $scope.delete_row = function() { if (confirm("Are you sure you want to delete this row?")) { - $scope.dashboard.current.rows = _.without($scope.dashboard.current.rows, $scope.row); + $scope.dashboard.rows = _.without($scope.dashboard.rows, $scope.row); } }; $scope.move_row = function(direction) { - var rowsList = $scope.dashboard.current.rows; + var rowsList = $scope.dashboard.rows; var rowIndex = _.indexOf(rowsList, $scope.row); var newIndex = rowIndex + direction; if (newIndex >= 0 && newIndex <= (rowsList.length - 1)) { @@ -116,12 +116,12 @@ function (angular, app, _) { row.panels.push(angular.copy(panel)); } else { - var rowsList = $scope.dashboard.current.rows; + var rowsList = $scope.dashboard.rows; var rowIndex = _.indexOf(rowsList, row); if (rowIndex === rowsList.length - 1) { var newRow = angular.copy($scope.row); newRow.panels = []; - $scope.dashboard.current.rows.push(newRow); + $scope.dashboard.rows.push(newRow); $scope.duplicatePanel(panel, newRow); } else { diff --git a/src/app/controllers/search.js b/src/app/controllers/search.js index 736c500a1e0..9f9d66424d3 100644 --- a/src/app/controllers/search.js +++ b/src/app/controllers/search.js @@ -9,14 +9,14 @@ function (angular, _, config, $) { var module = angular.module('kibana.controllers'); - module.controller('SearchCtrl', function($scope, $rootScope, dashboard, $element, $location) { + module.controller('SearchCtrl', function($scope, $rootScope, $element, $location, elastic) { $scope.init = function() { $scope.giveSearchFocus = 0; $scope.selectedIndex = -1; $scope.results = {dashboards: [], tags: [], metrics: []}; $scope.query = { query: 'title:' }; - $rootScope.$on('open-search', $scope.openSearch); + $scope.onAppEvent('open-search', $scope.openSearch); }; $scope.keyDown = function (evt) { @@ -48,30 +48,40 @@ function (angular, _, config, $) { } }; - $scope.searchDasboards = function(query) { - var request = $scope.ejs.Request().indices(config.grafana_index).types('dashboard'); - var tagsOnly = query.indexOf('tags!:') === 0; + $scope.shareDashboard = function(title, id) { + var baseUrl = window.location.href.replace(window.location.hash,''); + + $scope.share = { + title: title, + url: baseUrl + '#dashboard/elasticsearch/' + encodeURIComponent(id) + }; + }; + + $scope.searchDasboards = function(queryString) { + var tagsOnly = queryString.indexOf('tags!:') === 0; if (tagsOnly) { - var tagsQuery = query.substring(6, query.length); - query = 'tags:' + tagsQuery + '*'; + var tagsQuery = queryString.substring(6, queryString.length); + queryString = 'tags:' + tagsQuery + '*'; } else { - if (query.length === 0) { - query = 'title:'; + if (queryString.length === 0) { + queryString = 'title:'; } - if (query[query.length - 1] !== '*') { - query += '*'; + if (queryString[queryString.length - 1] !== '*') { + queryString += '*'; } } - return request - .query($scope.ejs.QueryStringQuery(query)) - .sort('_uid') - .facet($scope.ejs.TermsFacet("tags").field("tags").order('term').size(50)) - .size(20).doSearch() - .then(function(results) { + var query = { + query: { query_string: { query: queryString } }, + facets: { tags: { terms: { field: "tags", order: "term", size: 50 } } }, + size: 20, + sort: ["_uid"] + }; + return elastic.post('/dashboard/_search', query) + .then(function(results) { if(_.isUndefined(results.hits)) { $scope.results.dashboards = []; $scope.results.tags = []; @@ -114,32 +124,6 @@ function (angular, _, config, $) { $scope.searchDasboards(queryStr); return; } - - queryStr = queryStr.substring(2, queryStr.length); - - var words = queryStr.split(' '); - var query = $scope.ejs.BoolQuery(); - var terms = _.map(words, function(word) { - return $scope.ejs.MatchQuery('metricPath_ng', word).boost(1.2); - }); - - var ngramQuery = $scope.ejs.BoolQuery(); - ngramQuery.must(terms); - - var fieldMatchQuery = $scope.ejs.FieldQuery('metricPath', queryStr + "*").boost(1.2); - query.should([ngramQuery, fieldMatchQuery]); - - var request = $scope.ejs.Request().indices(config.grafana_index).types('metricKey'); - var results = request.query(query).size(20).doSearch(); - - results.then(function(results) { - if (results && results.hits && results.hits.hits.length > 0) { - $scope.results.metrics = { metrics: results.hits.hits }; - } - else { - $scope.results.metrics = { metric: [] }; - } - }); }; $scope.openSearch = function (evt) { @@ -153,7 +137,7 @@ function (angular, _, config, $) { }; $scope.addMetricToCurrentDashboard = function (metricId) { - dashboard.current.rows.push({ + $scope.dashboard.rows.push({ title: '', height: '250px', editable: true, diff --git a/src/app/dashboards/default.json b/src/app/dashboards/default.json index 980fc4d4467..ce46bd6a7de 100644 --- a/src/app/dashboards/default.json +++ b/src/app/dashboards/default.json @@ -92,7 +92,6 @@ ], "editable": true, "failover": false, - "panel_hints": true, "style": "dark", "pulldowns": [ { @@ -138,15 +137,12 @@ "loader": { "save_gist": false, "save_elasticsearch": true, - "save_local": true, "save_default": true, "save_temp": true, "save_temp_ttl_enable": true, "save_temp_ttl": "30d", "load_gist": false, "load_elasticsearch": true, - "load_elasticsearch_size": 20, - "load_local": false, "hide": false }, "refresh": false diff --git a/src/app/dashboards/empty.json b/src/app/dashboards/empty.json index 1cc249cfadd..588c476dd19 100644 --- a/src/app/dashboards/empty.json +++ b/src/app/dashboards/empty.json @@ -68,7 +68,6 @@ "loader": { "save_gist": false, "save_elasticsearch": true, - "save_local": true, "save_default": true, "save_temp": true, "save_temp_ttl_enable": true, @@ -76,7 +75,6 @@ "load_gist": false, "load_elasticsearch": true, "load_elasticsearch_size": 20, - "load_local": false, "hide": false }, "refresh": false diff --git a/src/app/directives/bodyClass.js b/src/app/directives/bodyClass.js index 6cd9bab1346..d26ae71feeb 100644 --- a/src/app/directives/bodyClass.js +++ b/src/app/directives/bodyClass.js @@ -15,8 +15,12 @@ function (angular, app, _) { var lastPulldownVal; var lastHideControlsVal; - $scope.$watch('dashboard.current.pulldowns', function() { - var panel = _.find($scope.dashboard.current.pulldowns, function(pulldown) { return pulldown.enable; }); + $scope.$watch('dashboard.pulldowns', function() { + if (!$scope.dashboard) { + return; + } + + var panel = _.find($scope.dashboard.pulldowns, function(pulldown) { return pulldown.enable; }); var panelEnabled = panel ? panel.enable : false; if (lastPulldownVal !== panelEnabled) { elem.toggleClass('submenu-controls-visible', panelEnabled); @@ -24,8 +28,12 @@ function (angular, app, _) { } }, true); - $scope.$watch('dashboard.current.hideControls', function() { - var hideControls = $scope.dashboard.current.hideControls || $scope.playlist_active; + $scope.$watch('dashboard.hideControls', function() { + if (!$scope.dashboard) { + return; + } + + var hideControls = $scope.dashboard.hideControls || $scope.playlist_active; if (lastHideControlsVal !== hideControls) { elem.toggleClass('hide-controls', hideControls); diff --git a/src/app/directives/dashUpload.js b/src/app/directives/dashUpload.js index c6b4239c0f6..e08734886da 100644 --- a/src/app/directives/dashUpload.js +++ b/src/app/directives/dashUpload.js @@ -6,7 +6,7 @@ function (angular) { var module = angular.module('kibana.directives'); - module.directive('dashUpload', function(timer, dashboard, alertSrv) { + module.directive('dashUpload', function(timer, alertSrv) { return { restrict: 'A', link: function(scope) { @@ -14,7 +14,8 @@ function (angular) { var files = evt.target.files; // FileList object var readerOnload = function() { return function(e) { - dashboard.dash_load(JSON.parse(e.target.result)); + var dashboard = JSON.parse(e.target.result); + scope.emitAppEvent('setup-dashboard', dashboard); scope.$apply(); }; }; @@ -34,4 +35,4 @@ function (angular) { } }; }); -}); \ No newline at end of file +}); diff --git a/src/app/directives/grafanaGraph.js b/src/app/directives/grafanaGraph.js index 06b53cd77a5..424907615ce 100755 --- a/src/app/directives/grafanaGraph.js +++ b/src/app/directives/grafanaGraph.js @@ -10,13 +10,14 @@ function (angular, $, kbn, moment, _) { var module = angular.module('kibana.directives'); - module.directive('grafanaGraph', function($rootScope, dashboard) { + module.directive('grafanaGraph', function($rootScope) { return { restrict: 'A', template: '
', link: function(scope, elem) { var data, plot, annotations; var hiddenData = {}; + var dashboard = scope.dashboard; var legendSideLastValue = null; scope.$on('refresh',function() { @@ -195,7 +196,7 @@ function (angular, $, kbn, moment, _) { var max = _.isUndefined(scope.range.to) ? null : scope.range.to.getTime(); options.xaxis = { - timezone: dashboard.current.timezone, + timezone: dashboard.timezone, show: scope.panel['x-axis'], mode: "time", min: min, @@ -354,7 +355,7 @@ function (angular, $, kbn, moment, _) { value = kbn.getFormatFunction(format, 2)(value); - timestamp = dashboard.current.timezone === 'browser' ? + timestamp = dashboard.timezone === 'browser' ? moment(item.datapoint[0]).format('YYYY-MM-DD HH:mm:ss') : moment.utc(item.datapoint[0]).format('YYYY-MM-DD HH:mm:ss'); $tooltip diff --git a/src/app/panels/annotations/editor.html b/src/app/panels/annotations/editor.html index 38435b5ebf5..e1184193009 100644 --- a/src/app/panels/annotations/editor.html +++ b/src/app/panels/annotations/editor.html @@ -1,4 +1,5 @@ - diff --git a/src/app/panels/annotations/editor.js b/src/app/panels/annotations/editor.js new file mode 100644 index 00000000000..6aa43342cc4 --- /dev/null +++ b/src/app/panels/annotations/editor.js @@ -0,0 +1,68 @@ +/* + +*/ +define([ + 'angular', + 'app', + 'underscore' +], +function (angular, app, _) { + 'use strict'; + + var module = angular.module('kibana.panels.annotations', []); + app.useModule(module); + + module.controller('AnnotationsEditorCtrl', function($scope, datasourceSrv, $rootScope) { + + var annotationDefaults = { + name: '', + datasource: null, + showLine: true, + iconColor: '#C0C6BE', + lineColor: 'rgba(255, 96, 96, 0.592157)', + iconSize: 13, + enable: true + }; + + $scope.init = function() { + $scope.currentAnnotation = angular.copy(annotationDefaults); + $scope.currentIsNew = true; + $scope.datasources = datasourceSrv.getAnnotationSources(); + + if ($scope.datasources.length > 0) { + $scope.currentDatasource = $scope.datasources[0]; + } + }; + + $scope.setDatasource = function() { + $scope.currentAnnotation.datasource = $scope.currentDatasource.name; + }; + + $scope.edit = function(annotation) { + $scope.currentAnnotation = annotation; + $scope.currentIsNew = false; + $scope.currentDatasource = _.findWhere($scope.datasources, { name: annotation.datasource }); + + if (!$scope.currentDatasource) { + $scope.currentDatasource = $scope.datasources[0]; + } + }; + + $scope.update = function() { + $scope.currentAnnotation = angular.copy(annotationDefaults); + $scope.currentIsNew = true; + }; + + $scope.add = function() { + $scope.currentAnnotation.datasource = $scope.currentDatasource.name; + $scope.panel.annotations.push($scope.currentAnnotation); + $scope.currentAnnnotation = angular.copy(annotationDefaults); + }; + + $scope.hide = function (annotation) { + annotation.enable = !annotation.enable; + $rootScope.$broadcast('refresh'); + }; + + }); +}); diff --git a/src/app/panels/annotations/module.js b/src/app/panels/annotations/module.js index 389a9b05d0c..0c63570aabb 100644 --- a/src/app/panels/annotations/module.js +++ b/src/app/panels/annotations/module.js @@ -6,7 +6,8 @@ define([ 'angular', 'app', - 'underscore' + 'underscore', + './editor' ], function (angular, app, _) { 'use strict'; @@ -14,7 +15,7 @@ function (angular, app, _) { var module = angular.module('kibana.panels.annotations', []); app.useModule(module); - module.controller('AnnotationsCtrl', function($scope, dashboard, $rootScope) { + module.controller('AnnotationsCtrl', function($scope, datasourceSrv, $rootScope) { $scope.panelMeta = { status : "Stable", @@ -26,37 +27,7 @@ function (angular, app, _) { annotations: [] }; - var annotationDefaults = { - name: '', - type: 'graphite metric', - showLine: true, - iconColor: '#C0C6BE', - lineColor: 'rgba(255, 96, 96, 0.592157)', - iconSize: 13, - enable: true - }; - - _.defaults($scope.panel,_d); - - $scope.init = function() { - $scope.currentAnnnotation = angular.copy(annotationDefaults); - $scope.currentIsNew = true; - }; - - $scope.edit = function(annotation) { - $scope.currentAnnnotation = annotation; - $scope.currentIsNew = false; - }; - - $scope.update = function() { - $scope.currentAnnnotation = angular.copy(annotationDefaults); - $scope.currentIsNew = true; - }; - - $scope.add = function() { - $scope.panel.annotations.push($scope.currentAnnnotation); - $scope.currentAnnnotation = angular.copy(annotationDefaults); - }; + _.defaults($scope.panel, _d); $scope.hide = function (annotation) { annotation.enable = !annotation.enable; @@ -64,4 +35,5 @@ function (angular, app, _) { }; }); -}); \ No newline at end of file + +}); diff --git a/src/app/panels/filtering/module.js b/src/app/panels/filtering/module.js index 46a88fa0565..16ee9cfafc3 100644 --- a/src/app/panels/filtering/module.js +++ b/src/app/panels/filtering/module.js @@ -43,7 +43,7 @@ function (angular, app, _) { .then(function() { // only refresh in the outermost call if (!recursive) { - $scope.dashboard.refresh(); + $scope.dashboard.emit_refresh(); } }); }; diff --git a/src/app/panels/graph/module.js b/src/app/panels/graph/module.js index 2cb69ffae05..90b828d86c2 100644 --- a/src/app/panels/graph/module.js +++ b/src/app/panels/graph/module.js @@ -271,10 +271,10 @@ function (angular, app, $, _, kbn, moment, timeSeries) { targets: $scope.panel.targets, format: $scope.panel.renderer === 'png' ? 'png' : 'json', maxDataPoints: $scope.resolution, - datasource: $scope.panel.datasource + datasource: $scope.panel.datasource, }; - $scope.annotationsPromise = annotationsSrv.getAnnotations($scope.filter, $scope.rangeUnparsed); + $scope.annotationsPromise = annotationsSrv.getAnnotations($scope.filter, $scope.rangeUnparsed, $scope.dashboard); return $scope.datasource.query($scope.filter, graphiteQuery) .then($scope.dataHandler) diff --git a/src/app/panels/timepicker/module.html b/src/app/panels/timepicker/module.html index ea1759d2141..5c6513bf666 100644 --- a/src/app/panels/timepicker/module.html +++ b/src/app/panels/timepicker/module.html @@ -25,7 +25,7 @@ {{time.to.date | moment:'ago'}} Time filter - refreshed every {{dashboard.current.refresh}} + refreshed every {{dashboard.refresh}} @@ -47,8 +47,8 @@ -
  • - +
  • +
  • diff --git a/src/app/partials/dashLoader.html b/src/app/partials/dashLoader.html index 9e92d0086ce..9652a196fb8 100644 --- a/src/app/partials/dashLoader.html +++ b/src/app/partials/dashLoader.html @@ -16,7 +16,7 @@ -
  • +
  • +
  • + Row editor +
  • +
  • + Delete row +
  • + + -
    -
    +
    -
    + +
    + +
    + +
    +
    + +
    +
    + +
    +
    - -
    + +
    ADD A ROW
    -
    + \ No newline at end of file diff --git a/src/app/partials/dasheditor.html b/src/app/partials/dasheditor.html index 84f03782e87..5524352cf17 100644 --- a/src/app/partials/dasheditor.html +++ b/src/app/partials/dasheditor.html @@ -4,7 +4,7 @@
    -
    +
    @@ -12,21 +12,18 @@
    - +
    - +
    - +
    - -
    -
    - - + +
    @@ -34,7 +31,7 @@
    - + Press enter to a add tag
    @@ -53,10 +50,10 @@ Title - - - - + + + + {{row.title}} @@ -76,43 +73,31 @@
    Save to
    - +
    - -
    -
    - -
    -
    - +
    Load from
    - +
    - -
    -
    - -
    -
    - +
    Sharing
    - +
    -
    - +
    +
    -
    - +
    +
    @@ -122,10 +107,10 @@
    Feature toggles
    -
    +
    -
    +
    @@ -140,7 +125,7 @@
    -
    +
    @@ -156,6 +141,6 @@
    - - + +
    \ No newline at end of file diff --git a/src/app/partials/graphite/annotation_editor.html b/src/app/partials/graphite/annotation_editor.html new file mode 100644 index 00000000000..c5e4a98a84c --- /dev/null +++ b/src/app/partials/graphite/annotation_editor.html @@ -0,0 +1,15 @@ +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + + diff --git a/src/app/partials/influxdb/annotation_editor.html b/src/app/partials/influxdb/annotation_editor.html new file mode 100644 index 00000000000..9bc2bdbca21 --- /dev/null +++ b/src/app/partials/influxdb/annotation_editor.html @@ -0,0 +1,29 @@ +
    +
    +
    InfluxDB Query Example: select text from events where [[timeFilter]]
    +
    + +
    +
    +
    + +
    +
    +
    Column mappings If your influxdb query returns more than one column you need to specify the column names bellow. An annotation event is composed of a title, tags, and an additional text field.
    +
    + + +
    + +
    + + +
    + +
    + + +
    +
    +
    + diff --git a/src/app/partials/roweditor.html b/src/app/partials/roweditor.html index 8a0032aca6b..b55536e893d 100644 --- a/src/app/partials/roweditor.html +++ b/src/app/partials/roweditor.html @@ -48,7 +48,7 @@

    Select Panel Type

    - + Note: This row is full, new panels will wrap to a new line. You should add another row. diff --git a/src/app/partials/search.html b/src/app/partials/search.html index 52656ea9b2f..55eeb8e211a 100644 --- a/src/app/partials/search.html +++ b/src/app/partials/search.html @@ -77,7 +77,7 @@ - + @@ -86,13 +86,13 @@ {{tag}} - +
    - +
  • @@ -104,20 +104,5 @@
  • - -
    -
    Gist Enter a gist number or url
    - -
    - -
    Dashboards in gist:{{gist.url | gistid}} click to load
    -
    No gist dashboards found
    - - - - -
    {{file.title}}
    - -
    - \ No newline at end of file + diff --git a/src/app/routes/all.js b/src/app/routes/all.js new file mode 100644 index 00000000000..17a829f84be --- /dev/null +++ b/src/app/routes/all.js @@ -0,0 +1,7 @@ +define([ + './dashboard-from-es', + './dashboard-from-file', + './dashboard-from-script', + './dashboard-default', +], +function () {}); \ No newline at end of file diff --git a/src/app/routes/dashboard-default.js b/src/app/routes/dashboard-default.js new file mode 100644 index 00000000000..f0366c11e3b --- /dev/null +++ b/src/app/routes/dashboard-default.js @@ -0,0 +1,24 @@ +define([ + 'angular', + 'config' +], +function (angular, config) { + "use strict"; + + var module = angular.module('kibana.routes'); + + module.config(function($routeProvider) { + $routeProvider + .when('/', { + redirectTo: function() { + if (window.localStorage && window.localStorage.grafanaDashboardDefault) { + return window.localStorage.grafanaDashboardDefault; + } + else { + return config.default_route; + } + } + }); + }); + +}); diff --git a/src/app/routes/dashboard-from-es.js b/src/app/routes/dashboard-from-es.js new file mode 100644 index 00000000000..511bb6ac6cf --- /dev/null +++ b/src/app/routes/dashboard-from-es.js @@ -0,0 +1,57 @@ +define([ + 'angular', + 'jquery', + 'config' +], +function (angular, $, config) { + "use strict"; + + var module = angular.module('kibana.routes'); + + module.config(function($routeProvider) { + $routeProvider + .when('/dashboard/elasticsearch/:id', { + templateUrl: 'app/partials/dashboard.html', + controller : 'DashFromElasticProvider', + }) + .when('/dashboard/temp/:id', { + templateUrl: 'app/partials/dashboard.html', + controller : 'DashFromElasticProvider', + }); + }); + + module.controller('DashFromElasticProvider', function($scope, $rootScope, elastic, $routeParams, alertSrv) { + + var elasticsearch_load = function(id) { + var url = '/dashboard/' + id; + + // hack to check if it is a temp dashboard + if (window.location.href.indexOf('dashboard/temp') > 0) { + url = '/temp/' + id; + } + + return elastic.get(url) + .then(function(result) { + if (result._source && result._source.dashboard) { + return angular.fromJson(result._source.dashboard); + } else { + return false; + } + }, function(data, status) { + if(status === 0) { + alertSrv.set('Error',"Could not contact Elasticsearch at " + + config.elasticsearch + ". Please ensure that Elasticsearch is reachable from your browser.",'error'); + } else { + alertSrv.set('Error',"Could not find dashboard " + id, 'error'); + } + return false; + }); + }; + + elasticsearch_load($routeParams.id).then(function(dashboard) { + $scope.emitAppEvent('setup-dashboard', dashboard); + }); + + }); + +}); diff --git a/src/app/routes/dashboard-from-file.js b/src/app/routes/dashboard-from-file.js new file mode 100644 index 00000000000..704be8c3dff --- /dev/null +++ b/src/app/routes/dashboard-from-file.js @@ -0,0 +1,59 @@ +define([ + 'angular', + 'jquery', + 'config', + 'underscore' +], +function (angular, $, config, _) { + "use strict"; + + var module = angular.module('kibana.routes'); + + module.config(function($routeProvider) { + $routeProvider + .when('/dashboard/file/:jsonFile', { + templateUrl: 'app/partials/dashboard.html', + controller : 'DashFromFileProvider', + }); + }); + + module.controller('DashFromFileProvider', function($scope, $rootScope, $http, $routeParams, alertSrv) { + + var renderTemplate = function(json,params) { + var _r; + _.templateSettings = {interpolate : /\{\{(.+?)\}\}/g}; + var template = _.template(json); + var rendered = template({ARGS:params}); + try { + _r = angular.fromJson(rendered); + } catch(e) { + _r = false; + } + return _r; + }; + + var file_load = function(file) { + return $http({ + url: "app/dashboards/"+file.replace(/\.(?!json)/,"/")+'?' + new Date().getTime(), + method: "GET", + transformResponse: function(response) { + return renderTemplate(response,$routeParams); + } + }).then(function(result) { + if(!result) { + return false; + } + return result.data; + },function() { + alertSrv.set('Error',"Could not load dashboards/"+file+". Please make sure it exists" ,'error'); + return false; + }); + }; + + file_load($routeParams.jsonFile).then(function(result) { + $scope.emitAppEvent('setup-dashboard', result); + }); + + }); + +}); diff --git a/src/app/routes/dashboard-from-script.js b/src/app/routes/dashboard-from-script.js new file mode 100644 index 00000000000..3cdd49e017a --- /dev/null +++ b/src/app/routes/dashboard-from-script.js @@ -0,0 +1,61 @@ +define([ + 'angular', + 'jquery', + 'config', + 'underscore', + 'kbn', + 'moment' +], +function (angular, $, config, _, kbn, moment) { + "use strict"; + + var module = angular.module('kibana.routes'); + + module.config(function($routeProvider) { + $routeProvider + .when('/dashboard/script/:jsFile', { + templateUrl: 'app/partials/dashboard.html', + controller : 'DashFromScriptProvider', + }); + }); + + module.controller('DashFromScriptProvider', function($scope, $rootScope, $http, $routeParams, alertSrv, $q) { + + var execute_script = function(result) { + /*jshint -W054 */ + var script_func = new Function('ARGS','kbn','_','moment','window','document','$','jQuery', result.data); + var script_result = script_func($routeParams, kbn, _ , moment, window, document, $, $); + + // Handle async dashboard scripts + if (_.isFunction(script_result)) { + var deferred = $q.defer(); + script_result(function(dashboard) { + $rootScope.$apply(function() { + deferred.resolve({ data: dashboard }); + }); + }); + return deferred.promise; + } + + return { data: script_result }; + }; + + var script_load = function(file) { + var url = 'app/dashboards/'+file.replace(/\.(?!js)/,"/") + '?' + new Date().getTime(); + + return $http({ url: url, method: "GET" }) + .then(execute_script) + .then(null,function(err) { + console.log('Script dashboard error '+ err); + alertSrv.set('Error', "Could not load scripts/"+file+". Please make sure it exists and returns a valid dashboard", 'error'); + return false; + }); + }; + + script_load($routeParams.jsFile).then(function(result) { + $scope.emitAppEvent('setup-dashboard', result.data); + }); + + }); + +}); diff --git a/src/app/services/all.js b/src/app/services/all.js index 53a4f521ac6..b426088bd11 100644 --- a/src/app/services/all.js +++ b/src/app/services/all.js @@ -1,6 +1,5 @@ define([ './alertSrv', - './dashboard', './datasourceSrv', './filterSrv', './timer', @@ -9,5 +8,8 @@ define([ './annotationsSrv', './playlistSrv', './unsavedChangesSrv', + './elasticsearch/es-client', + './dashboard/dashboardKeyBindings', + './dashboard/dashboardModel', ], function () {}); \ No newline at end of file diff --git a/src/app/services/annotationsSrv.js b/src/app/services/annotationsSrv.js index 459b5ff2816..2f15cf763bd 100644 --- a/src/app/services/annotationsSrv.js +++ b/src/app/services/annotationsSrv.js @@ -7,20 +7,14 @@ define([ var module = angular.module('kibana.services'); - module.service('annotationsSrv', function(dashboard, datasourceSrv, $q, alertSrv, $rootScope) { + module.service('annotationsSrv', function(datasourceSrv, $q, alertSrv, $rootScope) { var promiseCached; var annotationPanel; var list = []; + var timezone; this.init = function() { $rootScope.$on('refresh', this.clearCache); - $rootScope.$on('dashboard-loaded', this.dashboardLoaded); - - this.dashboardLoaded(); - }; - - this.dashboardLoaded = function () { - annotationPanel = _.findWhere(dashboard.current.pulldowns, { type: 'annotations' }); }; this.clearCache = function() { @@ -28,7 +22,8 @@ define([ list = []; }; - this.getAnnotations = function(filterSrv, rangeUnparsed) { + this.getAnnotations = function(filterSrv, rangeUnparsed, dashboard) { + annotationPanel = _.findWhere(dashboard.pulldowns, { type: 'annotations' }); if (!annotationPanel.enable) { return $q.when(null); } @@ -37,10 +32,17 @@ define([ return promiseCached; } - var graphiteMetrics = this.getGraphiteMetrics(filterSrv, rangeUnparsed); - var graphiteEvents = this.getGraphiteEvents(rangeUnparsed); + timezone = dashboard.timezone; + var annotations = _.where(annotationPanel.annotations, { enable: true }); - promiseCached = $q.all(graphiteMetrics.concat(graphiteEvents)) + var promises = _.map(annotations, function(annotation) { + var datasource = datasourceSrv.get(annotation.datasource); + return datasource.annotationQuery(annotation, filterSrv, rangeUnparsed) + .then(this.receiveAnnotationResults) + .then(null, errorHandler); + }, this); + + promiseCached = $q.all(promises) .then(function() { return list; }); @@ -48,61 +50,10 @@ define([ return promiseCached; }; - this.getGraphiteEvents = function(rangeUnparsed) { - var annotations = this.getAnnotationsByType('graphite events'); - if (annotations.length === 0) { - return []; + this.receiveAnnotationResults = function(results) { + for (var i = 0; i < results.length; i++) { + addAnnotation(results[i]); } - - var promises = _.map(annotations, function(annotation) { - - return datasourceSrv.default.events({ range: rangeUnparsed, tags: annotation.tags }) - .then(function(results) { - _.each(results.data, function (event) { - addAnnotation({ - annotation: annotation, - time: event.when * 1000, - description: event.what, - tags: event.tags, - data: event.data - }); - }); - }) - .then(null, errorHandler); - }); - - return promises; - }; - - this.getAnnotationsByType = function(type) { - return _.where(annotationPanel.annotations, { - type: type, - enable: true - }); - }; - - this.getGraphiteMetrics = function(filterSrv, rangeUnparsed) { - var annotations = this.getAnnotationsByType('graphite metric'); - if (annotations.length === 0) { - return []; - } - - var promises = _.map(annotations, function(annotation) { - var graphiteQuery = { - range: rangeUnparsed, - targets: [{ target: annotation.target }], - format: 'json', - maxDataPoints: 100 - }; - - var receiveFunc = _.partial(receiveGraphiteMetrics, annotation); - - return datasourceSrv.default.query(filterSrv, graphiteQuery) - .then(receiveFunc) - .then(null, errorHandler); - }); - - return promises; }; function errorHandler(err) { @@ -110,33 +61,23 @@ define([ alertSrv.set('Annotations','Could not fetch annotations','error'); } - function receiveGraphiteMetrics(annotation, results) { - for (var i = 0; i < results.data.length; i++) { - var target = results.data[i]; - - for (var y = 0; y < target.datapoints.length; y++) { - var datapoint = target.datapoints[y]; - - if (datapoint[0]) { - addAnnotation({ - annotation: annotation, - time: datapoint[1] * 1000, - description: target.target - }); - } - } - } - } - function addAnnotation(options) { - var tooltip = "" + options.description + "
    "; + var tooltip = "" + options.title + "
    "; if (options.tags) { tooltip += (options.tags || '') + '
    '; } - tooltip += '' + moment(options.time).format('YYYY-MM-DD HH:mm:ss') + '
    '; - if (options.data) { - tooltip += options.data.replace(/\n/g, '
    '); + + if (timezone === 'browser') { + tooltip += '' + moment(options.time).format('YYYY-MM-DD HH:mm:ss') + '
    '; } + else { + tooltip += '' + moment.utc(options.time).format('YYYY-MM-DD HH:mm:ss') + '
    '; + } + + if (options.text) { + tooltip += options.text.replace(/\n/g, '
    '); + } + tooltip += "
    "; list.push({ diff --git a/src/app/services/dashboard.js b/src/app/services/dashboard.js deleted file mode 100644 index a12a8ad5aa1..00000000000 --- a/src/app/services/dashboard.js +++ /dev/null @@ -1,472 +0,0 @@ -define([ - 'angular', - 'jquery', - 'kbn', - 'underscore', - 'config', - 'moment', - 'modernizr', - 'filesaver' -], -function (angular, $, kbn, _, config, moment, Modernizr) { - 'use strict'; - - var module = angular.module('kibana.services'); - - module.service('dashboard', function( - $routeParams, $http, $rootScope, $injector, $location, $timeout, - ejsResource, timer, alertSrv, $q - ) { - // A hash of defaults to use when loading a dashboard - - var _dash = { - title: "", - tags: [], - style: "dark", - timezone: 'browser', - editable: true, - failover: false, - panel_hints: true, - rows: [], - pulldowns: [{ type: 'templating' }, { type: 'annotations' }], - nav: [{ type: 'timepicker' }], - services: {}, - loader: { - save_gist: false, - save_elasticsearch: true, - save_local: true, - save_default: true, - save_temp: true, - save_temp_ttl_enable: true, - save_temp_ttl: '30d', - load_gist: false, - load_elasticsearch: true, - load_elasticsearch_size: 20, - load_local: false, - hide: false - }, - refresh: false - }; - - // An elasticJS client to use - var ejs = ejsResource(config.elasticsearch, config.elasticsearchBasicAuth); - var gist_pattern = /(^\d{5,}$)|(^[a-z0-9]{10,}$)|(gist.github.com(\/*.*)\/[a-z0-9]{5,}\/*$)/; - - // Store a reference to this - var self = this; - - this.current = _.clone(_dash); - this.last = {}; - this.availablePanels = []; - - $rootScope.$on('$routeChangeSuccess',function() { - // Clear the current dashboard to prevent reloading - self.current = {}; - self.indices = []; - route(); - }); - - var route = function() { - // Is there a dashboard type and id in the URL? - if(!(_.isUndefined($routeParams.kbnType)) && !(_.isUndefined($routeParams.kbnId))) { - var _type = $routeParams.kbnType; - var _id = $routeParams.kbnId; - - switch(_type) { - case ('elasticsearch'): - self.elasticsearch_load('dashboard',_id); - break; - case ('temp'): - self.elasticsearch_load('temp',_id); - break; - case ('file'): - self.file_load(_id); - break; - case('script'): - self.script_load(_id); - break; - case('local'): - self.local_load(); - break; - default: - $location.path(config.default_route); - } - // No dashboard in the URL - } else { - // Check if browser supports localstorage, and if there's an old dashboard. If there is, - // inform the user that they should save their dashboard to Elasticsearch and then set that - // as their default - if (Modernizr.localstorage) { - if(!(_.isUndefined(window.localStorage['dashboard'])) && window.localStorage['dashboard'] !== '') { - $location.path(config.default_route); - alertSrv.set('Saving to browser storage has been replaced',' with saving to Elasticsearch.'+ - ' Click here to load your old dashboard anyway.'); - } else if(!(_.isUndefined(window.localStorage.grafanaDashboardDefault))) { - $location.path(window.localStorage.grafanaDashboardDefault); - } else { - $location.path(config.default_route); - } - // No? Ok, grab the default route, its all we have now - } else { - $location.path(config.default_route); - } - } - }; - - this.refresh = function() { - $rootScope.$broadcast('refresh'); - }; - - var dash_defaults = function(dashboard) { - - _.defaults(dashboard, _dash); - _.defaults(dashboard.loader,_dash.loader); - - var filtering = _.findWhere(dashboard.pulldowns, {type: 'filtering'}); - if (!filtering) { - dashboard.pulldowns.push({ - type: 'filtering', - enable: false - }); - } - - var annotations = _.findWhere(dashboard.pulldowns, {type: 'annotations'}); - if (!annotations) { - dashboard.pulldowns.push({ - type: 'annotations', - enable: false - }); - } - - _.each(dashboard.rows, function(row) { - _.each(row.panels, function(panel) { - if (panel.type === 'graphite') { - panel.type = 'graph'; - } - }); - }); - - return dashboard; - }; - - this.dash_load = function(dashboard) { - // Cancel all timers - timer.cancel_all(); - - // reset fullscreen flag - $rootScope.fullscreen = false; - - // Make sure the dashboard being loaded has everything required - dashboard = dash_defaults(dashboard); - - window.document.title = 'Grafana - ' + dashboard.title; - - // Set the current dashboard - self.current = angular.copy(dashboard); - if(dashboard.refresh) { - self.set_interval(dashboard.refresh); - } - - self.availablePanels = config.panels; - - $rootScope.$emit('dashboard-loaded', self.current); - - return true; - }; - - this.gist_id = function(string) { - if(self.is_gist(string)) { - return string.match(gist_pattern)[0].replace(/.*\//, ''); - } - }; - - this.is_gist = function(string) { - if(!_.isUndefined(string) && string !== '' && !_.isNull(string.match(gist_pattern))) { - return string.match(gist_pattern).length > 0 ? true : false; - } else { - return false; - } - }; - - this.to_file = function() { - var blob = new Blob([angular.toJson(self.current,true)], {type: "application/json;charset=utf-8"}); - // from filesaver.js - window.saveAs(blob, self.current.title+"-"+new Date().getTime()); - return true; - }; - - this.set_default = function(route) { - if (Modernizr.localstorage) { - // Purge any old dashboards - if(!_.isUndefined(window.localStorage['dashboard'])) { - delete window.localStorage['dashboard']; - } - window.localStorage.grafanaDashboardDefault = route; - return true; - } else { - return false; - } - }; - - this.purge_default = function() { - if (Modernizr.localstorage) { - // Purge any old dashboards - if(!_.isUndefined(window.localStorage['dashboard'])) { - - delete window.localStorage['dashboard']; - } - delete window.localStorage.grafanaDashboardDefault; - return true; - } else { - return false; - } - }; - - // TOFIX: Pretty sure this breaks when you're on a saved dashboard already - this.share_link = function(title,type,id) { - return { - location : window.location.href.replace(window.location.hash,""), - type : type, - id : id, - link : window.location.href.replace(window.location.hash,"")+"#dashboard/"+type+"/"+id, - title : title - }; - }; - - var renderTemplate = function(json,params) { - var _r; - _.templateSettings = {interpolate : /\{\{(.+?)\}\}/g}; - var template = _.template(json); - var rendered = template({ARGS:params}); - try { - _r = angular.fromJson(rendered); - } catch(e) { - _r = false; - } - return _r; - }; - - this.local_load = function() { - var dashboard = JSON.parse(window.localStorage['dashboard']); - dashboard.rows.unshift({ - height: "30", - title: "Deprecation Notice", - panels: [ - { - title: 'WARNING: Legacy dashboard', - type: 'text', - span: 12, - mode: 'html', - content: 'This dashboard has been loaded from the browsers local cache. If you use '+ - 'another brower or computer you will not be able to access it! '+ - '\n\n

    Good news!

    Kibana'+ - ' now stores saved dashboards in Elasticsearch. Click the '+ - 'button in the top left to save this dashboard. Then select "Set as Home" from'+ - ' the "advanced" sub menu to automatically use the stored dashboard as your Kibana '+ - 'landing page afterwards'+ - '

    Tip: You may with to remove this row before saving!' - } - ] - }); - self.dash_load(dashboard); - }; - - this.file_load = function(file) { - return $http({ - url: "app/dashboards/"+file.replace(/\.(?!json)/,"/")+'?' + new Date().getTime(), - method: "GET", - transformResponse: function(response) { - return renderTemplate(response,$routeParams); - } - }).then(function(result) { - if(!result) { - return false; - } - self.dash_load(dash_defaults(result.data)); - return true; - },function() { - alertSrv.set('Error',"Could not load dashboards/"+file+". Please make sure it exists" ,'error'); - return false; - }); - }; - - this.elasticsearch_load = function(type,id) { - var options = { - url: config.elasticsearch + "/" + config.grafana_index + "/"+type+"/"+id+'?' + new Date().getTime(), - method: "GET", - transformResponse: function(response) { - return renderTemplate(angular.fromJson(response)._source.dashboard, $routeParams); - } - }; - if (config.elasticsearchBasicAuth) { - options.withCredentials = true; - options.headers = { - "Authorization": "Basic " + config.elasticsearchBasicAuth - }; - } - return $http(options) - .error(function(data, status) { - if(status === 0) { - alertSrv.set('Error',"Could not contact Elasticsearch at "+config.elasticsearch+ - ". Please ensure that Elasticsearch is reachable from your system." ,'error'); - } else { - alertSrv.set('Error',"Could not find "+id+". If you"+ - " are using a proxy, ensure it is configured correctly",'error'); - } - return false; - }).success(function(data) { - self.dash_load(data); - }); - }; - - this.script_load = function(file) { - return $http({ - url: "app/dashboards/"+file.replace(/\.(?!js)/,"/"), - method: "GET" - }) - .then(function(result) { - /*jshint -W054 */ - var script_func = new Function('ARGS','kbn','_','moment','window','document','$','jQuery', result.data); - var script_result = script_func($routeParams,kbn,_,moment, window, document, $, $); - - // Handle async dashboard scripts - if (_.isFunction(script_result)) { - var deferred = $q.defer(); - script_result(function(dashboard) { - $rootScope.$apply(function() { - deferred.resolve({ data: dashboard }); - }); - }); - return deferred.promise; - } - - return { data: script_result }; - }) - .then(function(result) { - if(!result) { - return false; - } - self.dash_load(dash_defaults(result.data)); - return true; - },function() { - alertSrv.set('Error', - "Could not load scripts/"+file+". Please make sure it exists and returns a valid dashboard" , - 'error'); - return false; - }); - }; - - this.elasticsearch_save = function(type,title,ttl) { - // Clone object so we can modify it without influencing the existing obejct - var save = _.clone(self.current); - var id; - - // Change title on object clone - if (type === 'dashboard') { - id = save.title = _.isUndefined(title) ? self.current.title : title; - } - - // Create request with id as title. Rethink this. - var request = ejs.Document(config.grafana_index,type,id).source({ - user: 'guest', - group: 'guest', - title: save.title, - tags: save.tags, - dashboard: angular.toJson(save) - }); - - request = type === 'temp' && ttl ? request.ttl(ttl) : request; - - return request.doIndex( - // Success - function(result) { - if(type === 'dashboard') { - $location.path('/dashboard/elasticsearch/'+title); - } - return result; - }, - // Failure - function() { - return false; - } - ); - }; - - this.elasticsearch_delete = function(id) { - return ejs.Document(config.grafana_index,'dashboard',id).doDelete( - // Success - function(result) { - return result; - }, - // Failure - function() { - return false; - } - ); - }; - - this.save_gist = function(title,dashboard) { - var save = _.clone(dashboard || self.current); - save.title = title || self.current.title; - return $http({ - url: "https://api.github.com/gists", - method: "POST", - data: { - "description": save.title, - "public": false, - "files": { - "kibana-dashboard.json": { - "content": angular.toJson(save,true) - } - } - } - }).then(function(data) { - return data.data.html_url; - }, function() { - return false; - }); - }; - - this.gist_list = function(id) { - return $http.jsonp("https://api.github.com/gists/"+id+"?callback=JSON_CALLBACK" - ).then(function(response) { - var files = []; - _.each(response.data.data.files,function(v) { - try { - var file = JSON.parse(v.content); - files.push(file); - } catch(e) { - return false; - } - }); - return files; - }, function() { - return false; - }); - }; - - this.start_scheduled_refresh = function (after_ms) { - this.cancel_scheduled_refresh(); - self.refresh_timer = timer.register($timeout(function () { - self.start_scheduled_refresh(after_ms); - self.refresh(); - }, after_ms)); - }; - - this.cancel_scheduled_refresh = function () { - timer.cancel(self.refresh_timer); - }; - - this.set_interval = function (interval) { - self.current.refresh = interval; - if (interval) { - var _i = kbn.interval_to_ms(interval); - this.start_scheduled_refresh(_i); - } else { - this.cancel_scheduled_refresh(); - } - }; - - }); - -}); diff --git a/src/app/services/dashboard/all.js b/src/app/services/dashboard/all.js deleted file mode 100644 index f861edb5a8d..00000000000 --- a/src/app/services/dashboard/all.js +++ /dev/null @@ -1,4 +0,0 @@ -define([ - './dashboardKeyBindings', -], -function () {}); diff --git a/src/app/services/dashboard/dashboardKeyBindings.js b/src/app/services/dashboard/dashboardKeyBindings.js index c05bff75504..6e8e0faaf36 100644 --- a/src/app/services/dashboard/dashboardKeyBindings.js +++ b/src/app/services/dashboard/dashboardKeyBindings.js @@ -6,44 +6,54 @@ define([ function(angular, $) { "use strict"; - var module = angular.module('kibana.services.dashboard'); + var module = angular.module('kibana.services'); - module.service('dashboardKeybindings', function($rootScope, keyboardManager, dashboard) { - this.shortcuts = function() { - $rootScope.$on('panel-fullscreen-enter', function() { + module.service('dashboardKeybindings', function($rootScope, keyboardManager) { + + this.shortcuts = function(scope) { + + scope.onAppEvent('panel-fullscreen-enter', function() { $rootScope.fullscreen = true; }); - $rootScope.$on('panel-fullscreen-exit', function() { + scope.onAppEvent('panel-fullscreen-exit', function() { $rootScope.fullscreen = false; }); - $rootScope.$on('dashboard-saved', function() { + scope.onAppEvent('dashboard-saved', function() { if ($rootScope.fullscreen) { - $rootScope.$emit('panel-fullscreen-exit'); + scope.emitAppEvent('panel-fullscreen-exit'); } }); + scope.$on('$destroy', function() { + keyboardManager.unbind('ctrl+f'); + keyboardManager.unbind('ctrl+h'); + keyboardManager.unbind('ctrl+s'); + keyboardManager.unbind('ctrl+r'); + keyboardManager.unbind('ctrl+z'); + keyboardManager.unbind('esc'); + }); + keyboardManager.bind('ctrl+f', function(evt) { - $rootScope.$emit('open-search', evt); + scope.emitAppEvent('open-search', evt); }, { inputDisabled: true }); keyboardManager.bind('ctrl+h', function() { - var current = dashboard.current.hideControls; - dashboard.current.hideControls = !current; - dashboard.current.panel_hints = current; + var current = scope.dashboard.hideControls; + scope.dashboard.hideControls = !current; }, { inputDisabled: true }); keyboardManager.bind('ctrl+s', function(evt) { - $rootScope.$emit('save-dashboard', evt); + scope.emitAppEvent('save-dashboard', evt); }, { inputDisabled: true }); keyboardManager.bind('ctrl+r', function() { - dashboard.refresh(); + scope.dashboard.emit_refresh(); }, { inputDisabled: true }); keyboardManager.bind('ctrl+z', function(evt) { - $rootScope.$emit('zoom-out', evt); + scope.emitAppEvent('zoom-out', evt); }, { inputDisabled: true }); keyboardManager.bind('esc', function() { @@ -51,7 +61,7 @@ function(angular, $) { if (popups.length > 0) { return; } - $rootScope.$emit('panel-fullscreen-exit'); + scope.emitAppEvent('panel-fullscreen-exit'); }, { inputDisabled: true }); }; }); diff --git a/src/app/services/dashboard/dashboardModel.js b/src/app/services/dashboard/dashboardModel.js new file mode 100644 index 00000000000..13c4f913520 --- /dev/null +++ b/src/app/services/dashboard/dashboardModel.js @@ -0,0 +1,99 @@ +define([ + 'angular', + 'jquery', + 'kbn', + 'underscore' +], +function (angular, $, kbn, _) { + 'use strict'; + + var module = angular.module('kibana.services'); + + module.service('dashboard', function(timer, $rootScope, $timeout) { + + function DashboardModel (data) { + + if (!data) { + data = {}; + } + + this.title = data.title; + this.tags = data.tags || []; + this.style = data.style || "dark"; + this.timezone = data.timezone || 'browser'; + this.editable = data.editble || true; + this.rows = data.rows || []; + this.pulldowns = data.pulldowns || []; + this.nav = data.nav || []; + this.services = data.services || {}; + this.loader = data.loader || {}; + + _.defaults(this.loader, { + save_gist: false, + save_elasticsearch: true, + save_default: true, + save_temp: true, + save_temp_ttl_enable: true, + save_temp_ttl: '30d', + load_gist: false, + load_elasticsearch: true, + hide: false + }); + + if (this.nav.length === 0) { + this.nav.push({ type: 'timepicker' }); + } + + if (!_.findWhere(this.pulldowns, {type: 'filtering'})) { + this.pulldowns.push({ type: 'filtering', enable: false }); + } + + if (!_.findWhere(this.pulldowns, {type: 'annotations'})) { + this.pulldowns.push({ type: 'annotations', enable: false }); + } + + _.each(this.rows, function(row) { + _.each(row.panels, function(panel) { + if (panel.type === 'graphite') { + panel.type = 'graph'; + } + }); + }); + } + + var p = DashboardModel.prototype; + + p.emit_refresh = function() { + $rootScope.$broadcast('refresh'); + }; + + p.start_scheduled_refresh = function (after_ms) { + this.cancel_scheduled_refresh(); + this.refresh_timer = timer.register($timeout(function () { + this.start_scheduled_refresh(after_ms); + this.emit_refresh(); + }.bind(this), after_ms)); + }; + + p.cancel_scheduled_refresh = function () { + timer.cancel(this.refresh_timer); + }; + + p.set_interval = function (interval) { + this.refresh = interval; + if (interval) { + var _i = kbn.interval_to_ms(interval); + this.start_scheduled_refresh(_i); + } else { + this.cancel_scheduled_refresh(); + } + }; + + return { + create: function(dashboard) { + return new DashboardModel(dashboard); + } + }; + + }); +}); diff --git a/src/app/services/datasourceSrv.js b/src/app/services/datasourceSrv.js index cccdaca7ae1..1696ee7f20e 100644 --- a/src/app/services/datasourceSrv.js +++ b/src/app/services/datasourceSrv.js @@ -12,13 +12,20 @@ function (angular, _, config) { var module = angular.module('kibana.services'); module.service('datasourceSrv', function($q, filterSrv, $http, GraphiteDatasource, InfluxDatasource, OpenTSDBDatasource) { + var datasources = {}; this.init = function() { - var defaultDatasource = _.findWhere(_.values(config.datasources), { default: true }); - if (!defaultDatasource) { - defaultDatasource = config.datasources[_.keys(config.datasources)[0]]; + _.each(config.datasources, function(value, key) { + datasources[key] = this.datasourceFactory(value); + if (value.default) { + this.default = datasources[key]; + } + }, this); + + if (!this.default) { + this.default = datasources[_.keys(datasources)[0]]; + this.default.default = true; } - this.default = this.datasourceFactory(defaultDatasource); }; this.datasourceFactory = function(ds) { @@ -34,13 +41,22 @@ function (angular, _, config) { this.get = function(name) { if (!name) { return this.default; } + if (datasources[name]) { return datasources[name]; } - var ds = config.datasources[name]; - if (!ds) { - return null; - } + throw "Unable to find datasource: " + name; + }; - return this.datasourceFactory(ds); + this.getAnnotationSources = function() { + var results = []; + _.each(datasources, function(value, key) { + if (value.supportAnnotations) { + results.push({ + name: key, + editorSrc: value.annotationEditorSrc, + }); + } + }); + return results; }; this.listOptions = function() { diff --git a/src/app/services/elasticsearch/es-client.js b/src/app/services/elasticsearch/es-client.js new file mode 100644 index 00000000000..64f84f82095 --- /dev/null +++ b/src/app/services/elasticsearch/es-client.js @@ -0,0 +1,96 @@ +define([ + 'angular', + 'config' +], +function(angular, config) { + "use strict"; + + var module = angular.module('kibana.services'); + + module.service('elastic', function($http) { + + this._request = function(method, url, data) { + var options = { + url: config.elasticsearch + "/" + config.grafana_index + url, + method: method, + data: data + }; + + if (config.elasticsearchBasicAuth) { + options.headers = { + "Authorization": "Basic " + config.elasticsearchBasicAuth + }; + } + + return $http(options); + }; + + this.get = function(url) { + return this._request('GET', url) + .then(function(results) { + return results.data; + }); + }; + + this.post = function(url, data) { + return this._request('POST', url, data) + .then(function(results) { + return results.data; + }); + }; + + this.deleteDashboard = function(id) { + return this._request('DELETE', '/dashboard/' + id) + .then(function(result) { + return result.data._id; + }, function(err) { + throw err.data; + }); + }; + + this.saveForSharing = function(dashboard) { + var data = { + user: 'guest', + group: 'guest', + title: dashboard.title, + tags: dashboard.tags, + dashboard: angular.toJson(dashboard) + }; + + var ttl = dashboard.loader.save_temp_ttl; + + return this._request('POST', '/temp/?ttl=' + ttl, data) + .then(function(result) { + + var baseUrl = window.location.href.replace(window.location.hash,''); + var url = baseUrl + "#dashboard/temp/" + result.data._id; + + return { title: dashboard.title, url: url }; + + }, function(err) { + throw "Failed to save to temp dashboard to elasticsearch " + err.data; + }); + }; + + this.saveDashboard = function(dashboard, title) { + var dashboardClone = angular.copy(dashboard); + title = dashboardClone.title = title ? title : dashboard.title; + + var data = { + user: 'guest', + group: 'guest', + title: title, + tags: dashboardClone.tags, + dashboard: angular.toJson(dashboardClone) + }; + + return this._request('PUT', '/dashboard/' + encodeURIComponent(title), data) + .then(function() { + return { title: title, url: '/dashboard/elasticsearch/' + title }; + }, function(err) { + throw 'Failed to save to elasticsearch ' + err.data; + }); + }; + + }); +}); diff --git a/src/app/services/filterSrv.js b/src/app/services/filterSrv.js index bc17c945110..76b6c0c4051 100644 --- a/src/app/services/filterSrv.js +++ b/src/app/services/filterSrv.js @@ -8,7 +8,7 @@ define([ var module = angular.module('kibana.services'); - module.factory('filterSrv', function(dashboard, $rootScope, $timeout, $routeParams) { + module.factory('filterSrv', function($rootScope, $timeout, $routeParams) { // defaults var _d = { templateParameters: [], @@ -53,16 +53,14 @@ define([ // disable refresh if we have an absolute time if (time.to !== 'now') { this.old_refresh = this.dashboard.refresh; - dashboard.set_interval(false); + this.dashboard.set_interval(false); } else if (this.old_refresh && this.old_refresh !== this.dashboard.refresh) { - dashboard.set_interval(this.old_refresh); + this.dashboard.set_interval(this.old_refresh); this.old_refresh = null; } - $timeout(function() { - dashboard.refresh(); - },0); + $timeout(this.dashboard.emit_refresh, 0); }, timeRange: function(parse) { @@ -96,14 +94,22 @@ define([ this.dashboard = dashboard; this.templateSettings = { interpolate : /\[\[([\s\S]+?)\]\]/g }; - if(dashboard.services && dashboard.services.filter) { - this.time = dashboard.services.filter.time; - this.templateParameters = dashboard.services.filter.list || []; - this.updateTemplateData(true); + if (!this.dashboard.services.filter) { + this.dashboard.services.filter = { + list: [], + time: { + from: '1h', + to: 'now' + } + }; } + this.time = dashboard.services.filter.time; + this.templateParameters = dashboard.services.filter.list || []; + this.updateTemplateData(true); } }; + return result; }); diff --git a/src/app/services/graphite/graphiteDatasource.js b/src/app/services/graphite/graphiteDatasource.js index dd181ef1720..4bf95f65ea2 100644 --- a/src/app/services/graphite/graphiteDatasource.js +++ b/src/app/services/graphite/graphiteDatasource.js @@ -11,7 +11,7 @@ function (angular, _, $, config, kbn, moment) { var module = angular.module('kibana.services'); - module.factory('GraphiteDatasource', function(dashboard, $q, $http) { + module.factory('GraphiteDatasource', function($q, $http) { function GraphiteDatasource(datasource) { this.type = 'graphite'; @@ -20,6 +20,8 @@ function (angular, _, $, config, kbn, moment) { this.editorSrc = 'app/partials/graphite/editor.html'; this.name = datasource.name; this.render_method = datasource.render_method || 'POST'; + this.supportAnnotations = true; + this.annotationEditorSrc = 'app/partials/graphite/annotation_editor.html'; } GraphiteDatasource.prototype.query = function(filterSrv, options) { @@ -55,6 +57,57 @@ function (angular, _, $, config, kbn, moment) { } }; + GraphiteDatasource.prototype.annotationQuery = function(annotation, filterSrv, rangeUnparsed) { + // Graphite metric as annotation + if (annotation.target) { + var graphiteQuery = { + range: rangeUnparsed, + targets: [{ target: annotation.target }], + format: 'json', + maxDataPoints: 100 + }; + + return this.query(filterSrv, graphiteQuery) + .then(function(result) { + var list = []; + + for (var i = 0; i < result.data.length; i++) { + var target = result.data[i]; + + for (var y = 0; y < target.datapoints.length; y++) { + var datapoint = target.datapoints[y]; + if (!datapoint[0]) { continue; } + + list.push({ + annotation: annotation, + time: datapoint[1] * 1000, + title: target.target + }); + } + } + + return list; + }); + } + // Graphite event as annotation + else if (annotation.tags) { + return this.events({ range: rangeUnparsed, tags: annotation.tags }) + .then(function(results) { + var list = []; + for (var i = 0; i < results.data; i++) { + list.push({ + annotation: annotation, + time: event.when * 1000, + title: event.what, + tags: event.tags, + text: event.data + }); + } + return list; + }); + } + }; + GraphiteDatasource.prototype.events = function(options) { try { var tags = ''; diff --git a/src/app/services/influxdb/influxSeries.js b/src/app/services/influxdb/influxSeries.js index bbbe603225c..91466755673 100644 --- a/src/app/services/influxdb/influxSeries.js +++ b/src/app/services/influxdb/influxSeries.js @@ -8,6 +8,7 @@ function (_) { this.seriesList = options.seriesList; this.alias = options.alias; this.groupByField = options.groupByField; + this.annotation = options.annotation; } var p = InfluxSeries.prototype; @@ -65,6 +66,45 @@ function (_) { return output; }; + p.getAnnotations = function () { + var list = []; + var self = this; + + _.each(this.seriesList, function (series) { + var titleCol = null; + var timeCol = null; + var tagsCol = null; + var textCol = null; + + _.each(series.columns, function(column, index) { + if (column === 'time') { timeCol = index; return; } + if (column === 'sequence_number') { return; } + if (!titleCol) { titleCol = index; } + if (column === self.annotation.titleColumn) { titleCol = index; return; } + if (column === self.annotation.tagsColumn) { tagsCol = index; return; } + if (column === self.annotation.textColumn) { textCol = index; return; } + }); + + _.each(series.points, function (point) { + var data = { + annotation: self.annotation, + time: point[timeCol] * 1000, + title: point[titleCol], + tags: point[tagsCol], + text: point[textCol] + }; + + if (tagsCol) { + data.tags = point[tagsCol]; + } + + list.push(data); + }); + }); + + return list; + }; + p.createNameForSeries = function(seriesName, groupByColValue) { var name = this.alias .replace('$s', seriesName); @@ -84,4 +124,4 @@ function (_) { }; return InfluxSeries; -}); \ No newline at end of file +}); diff --git a/src/app/services/influxdb/influxdbDatasource.js b/src/app/services/influxdb/influxdbDatasource.js index b75d0df4391..e37a003d91e 100644 --- a/src/app/services/influxdb/influxdbDatasource.js +++ b/src/app/services/influxdb/influxdbDatasource.js @@ -21,6 +21,9 @@ function (angular, _, kbn, InfluxSeries) { this.templateSettings = { interpolate : /\[\[([\s\S]+?)\]\]/g, }; + + this.supportAnnotations = true; + this.annotationEditorSrc = 'app/partials/influxdb/annotation_editor.html'; } InfluxDatasource.prototype.query = function(filterSrv, options) { @@ -116,6 +119,15 @@ function (angular, _, kbn, InfluxSeries) { }; + InfluxDatasource.prototype.annotationQuery = function(annotation, filterSrv, rangeUnparsed) { + var timeFilter = getTimeFilter({ range: rangeUnparsed }); + var query = _.template(annotation.query, { timeFilter: timeFilter }, this.templateSettings); + + return this.doInfluxRequest(query).then(function(results) { + return new InfluxSeries({ seriesList: results, annotation: annotation }).getAnnotations(); + }); + }; + InfluxDatasource.prototype.listColumns = function(seriesName) { return this.doInfluxRequest('select * from /' + seriesName + '/ limit 1').then(function(data) { if (!data) { diff --git a/src/app/services/panelMove.js b/src/app/services/panelMove.js index 00e68ccd154..5ce0b2ffa24 100644 --- a/src/app/services/panelMove.js +++ b/src/app/services/panelMove.js @@ -7,27 +7,33 @@ function (angular, _) { var module = angular.module('kibana.services'); - module.service('panelMove', function(dashboard, $rootScope) { + module.service('panelMoveSrv', function($rootScope) { + + function PanelMoveSrv(dashboard) { + this.dashboard = dashboard; + _.bindAll(this, 'onStart', 'onOver', 'onOut', 'onDrop', 'onStop', 'cleanup'); + } + + var p = PanelMoveSrv.prototype; /* each of these can take event,ui,data parameters */ - - this.onStart = function() { - dashboard.panelDragging = true; + p.onStart = function() { + this.dashboard.panelDragging = true; $rootScope.$apply(); }; - this.onOver = function() { + p.onOver = function() { $rootScope.$apply(); }; - this.onOut = function() { + p.onOut = function() { $rootScope.$apply(); }; /* Use our own drop logic. the $parent.$parent this is ugly. */ - this.onDrop = function(event,ui,data) { + p.onDrop = function(event,ui,data) { var dragRow = data.draggableScope.$parent.$parent.row.panels, dropRow = data.droppableScope.$parent.$parent.row.panels, @@ -42,26 +48,32 @@ function (angular, _) { dropRow.splice(dropIndex,0,data.dragItem); } - dashboard.panelDragging = false; + this.dashboard.panelDragging = false; // Cleanup nulls/undefined left behind - cleanup(); + this.cleanup(); $rootScope.$apply(); $rootScope.$broadcast('render'); }; - this.onStop = function() { - dashboard.panelDragging = false; - cleanup(); + p.onStop = function() { + this.dashboard.panelDragging = false; + this.cleanup(); $rootScope.$apply(); }; - var cleanup = function () { - _.each(dashboard.current.rows, function(row) { + p.cleanup = function () { + _.each(this.dashboard.rows, function(row) { row.panels = _.without(row.panels,{}); row.panels = _.compact(row.panels); }); }; + return { + create: function(dashboard) { + return new PanelMoveSrv(dashboard); + } + }; + }); }); \ No newline at end of file diff --git a/src/app/services/playlistSrv.js b/src/app/services/playlistSrv.js index ee3a85855bc..ae1b1b3ee28 100644 --- a/src/app/services/playlistSrv.js +++ b/src/app/services/playlistSrv.js @@ -8,7 +8,7 @@ function (angular, _, kbn) { var module = angular.module('kibana.services'); - module.service('playlistSrv', function(dashboard, $location, $rootScope) { + module.service('playlistSrv', function($location, $rootScope) { var timerInstance; var favorites = { dashboards: [] }; @@ -33,17 +33,17 @@ function (angular, _, kbn) { } }; - this.isCurrentFavorite = function() { - return this._find(dashboard.current.title) ? true : false; + this.isCurrentFavorite = function(dashboard) { + return this._find(dashboard.title) ? true : false; }; - this.markAsFavorite = function() { - var existing = this._find(dashboard.current.title); + this.markAsFavorite = function(dashboard) { + var existing = this._find(dashboard.title); this._remove(existing); favorites.dashboards.push({ url: $location.path(), - title: dashboard.current.title + title: dashboard.title }); this._save(); diff --git a/src/app/services/unsavedChangesSrv.js b/src/app/services/unsavedChangesSrv.js index 16b2b07f410..b52824172f7 100644 --- a/src/app/services/unsavedChangesSrv.js +++ b/src/app/services/unsavedChangesSrv.js @@ -12,16 +12,22 @@ function(angular, _, config) { var module = angular.module('kibana.services'); - module.service('unsavedChangesSrv', function($rootScope, $modal, dashboard, $q, $location, $timeout) { + module.service('unsavedChangesSrv', function($rootScope, $modal, $q, $location, $timeout) { + var self = this; var modalScope = $rootScope.$new(); $rootScope.$on("dashboard-loaded", function(event, newDashboard) { - self.original = angular.copy(newDashboard); + // wait for different services to patch the dashboard (missing properties) + $timeout(function() { + self.original = angular.copy(newDashboard); + self.current = newDashboard; + }, 1000); }); $rootScope.$on("dashboard-saved", function(event, savedDashboard) { self.original = angular.copy(savedDashboard); + self.current = savedDashboard; }); $rootScope.$on("$routeChangeSuccess", function() { @@ -39,19 +45,20 @@ function(angular, _, config) { if (self.has_unsaved_changes()) { event.preventDefault(); self.next = next; - self.open_modal(); + + $timeout(self.open_modal); } }); }; this.open_modal = function() { var confirmModal = $modal({ - template: './app/partials/unsaved-changes.html', - persist: true, - show: false, - scope: modalScope, - keyboard: false - }); + template: './app/partials/unsaved-changes.html', + persist: true, + show: false, + scope: modalScope, + keyboard: false + }); $q.when(confirmModal).then(function(modalEl) { modalEl.modal('show'); @@ -63,7 +70,7 @@ function(angular, _, config) { return false; } - var current = angular.copy(dashboard.current); + var current = angular.copy(self.current); var original = self.original; // ignore timespan changes diff --git a/src/config.sample.js b/src/config.sample.js index 98f3ad41ed9..e151a6c311d 100644 --- a/src/config.sample.js +++ b/src/config.sample.js @@ -35,18 +35,6 @@ function (Settings) { // Elasticsearch index for storing dashboards grafana_index: "grafana-dash", - // timezoneOFfset: - // If you experiance problems with zoom, it is probably caused by timezone diff between - // your browser and the graphite-web application. timezoneOffset setting can be used to have Grafana - // translate absolute time ranges to the graphite-web timezone. - // Example: - // If TIME_ZONE in graphite-web config file local_settings.py is set to America/New_York, then set - // timezoneOffset to "-0500" (for UTC - 5 hours) - // Example: - // If TIME_ZONE is set to UTC, set this to "0000" - // - timezoneOffset: null, - // set to false to disable unsaved changes warning unsaved_changes_warning: true, diff --git a/src/css/bootstrap.dark.min.css b/src/css/bootstrap.dark.min.css index f86f7c66e08..79b69f74af4 100644 --- a/src/css/bootstrap.dark.min.css +++ b/src/css/bootstrap.dark.min.css @@ -6,4 +6,4 @@ * http://www.apache.org/licenses/LICENSE-2.0 * * Designed and built with all the love in the world by @mdo and @fat. - */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:"";line-height:0}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{max-width:100%;width:auto\9;height:auto;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{text-shadow:none!important;color:#000!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#bbbfc2;background-color:#161616}a{color:#f2f2f2;text-decoration:none}a:hover,a:focus{color:#fff;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;content:"";line-height:0}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.127659574468085%;*margin-left:2.074468085106383%}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;content:"";line-height:0}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;content:"";line-height:0}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#adafae}a.muted:hover,a.muted:focus{color:#939695}.text-warning{color:#a47e3c}a.text-warning:hover,a.text-warning:focus{color:#7f612e}.text-error{color:#b94a48}a.text-error:hover,a.text-error:focus{color:#953b39}.text-info{color:#09c}a.text-info:hover,a.text-info:focus{color:#007399}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:#fff;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#adafae}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #bbbfc2}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;*zoom:1;padding-left:5px;padding-right:5px}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;content:"";line-height:0}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #303030;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #adafae}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #bbbfc2}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#adafae}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #bbbfc2;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;font-size:12px;color:#303030;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;white-space:nowrap}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#303030;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#adafae}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#000;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;vertical-align:middle}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#4a4a4a;border:1px solid #636363;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(82,168,236,.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(82,168,236,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(82,168,236,.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;*margin-top:0;margin-top:1px \9;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;border:1px solid #636363;background-color:#4a4a4a}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#adafae;background-color:#474747;border-color:#636363;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);cursor:not-allowed}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#788086}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#788086}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#788086}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;content:"";line-height:0}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#555}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#a47e3c}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#a47e3c}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#7f612e;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ceae78;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ceae78;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ceae78}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#a47e3c;background-color:#bbbfc2;border-color:#a47e3c}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#bbbfc2;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#bbbfc2;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#09c}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#09c}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#09c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#007399;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #3cf;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #3cf;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #3cf}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#09c;background-color:#bbbfc2;border-color:#09c}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:transparent;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;content:"";line-height:0}.form-actions:after{clear:both}.help-block,.help-inline{color:#e3e5e6}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding-left:5px}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;vertical-align:middle;font-size:0;white-space:nowrap}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#bbbfc2;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#bf3;border-color:#690}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;*zoom:1;margin-bottom:0;vertical-align:middle}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";line-height:0}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #303030}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #303030}.table .table{background-color:#161616}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #303030;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.table-bordered th,.table-bordered td{border-left:1px solid #303030}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:3px;-moz-border-radius-bottomleft:3px;border-bottom-left-radius:3px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;-moz-border-radius-bottomright:0;border-bottom-right-radius:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:rgba(100,100,100,0.3)}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#303030}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#bbbfc2}.table tbody tr.error>td{background-color:#bbbfc2}.table tbody tr.warning>td{background-color:#bbbfc2}.table tbody tr.info>td{background-color:#bbbfc2}.table-hover tbody tr.success:hover>td{background-color:#aeb2b6}.table-hover tbody tr.error:hover>td{background-color:#aeb2b6}.table-hover tbody tr.warning:hover>td{background-color:#aeb2b6}.table-hover tbody tr.info:hover>td{background-color:#aeb2b6}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat;margin-top:1px}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{background-position:-216px -120px;width:16px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{background-position:-384px -120px;width:16px}.icon-folder-open{background-position:-408px -120px;width:16px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#303030;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:transparent;border-bottom:1px solid #222}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#bbbfc2;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{text-decoration:none;color:#fff;background-color:#2ab2e4;background-image:-moz-linear-gradient(top,#33b5e5,#1dade2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#33b5e5),to(#1dade2));background-image:-webkit-linear-gradient(top,#33b5e5,#1dade2);background-image:-o-linear-gradient(top,#33b5e5,#1dade2);background-image:linear-gradient(to bottom,#33b5e5,#1dade2);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff33b5e5',endColorstr='#ff1dade2',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#2ab2e4;background-image:-moz-linear-gradient(top,#33b5e5,#1dade2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#33b5e5),to(#1dade2));background-image:-webkit-linear-gradient(top,#33b5e5,#1dade2);background-image:-o-linear-gradient(top,#33b5e5,#1dade2);background-image:linear-gradient(to bottom,#33b5e5,#1dade2);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff33b5e5',endColorstr='#ff1dade2',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#adafae}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:default}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#000;margin-top:5px;margin-right:-10px}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-left:20px;padding-right:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#131517;border:1px solid #030303;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well-small{padding:9px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;*zoom:1;padding:4px 12px;margin-bottom:0;font-size:14px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#303030;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#9ea09f;background-image:-moz-linear-gradient(top,#adafae,#868988);background-image:-webkit-gradient(linear,0 0,0 100%,from(#adafae),to(#868988));background-image:-webkit-linear-gradient(top,#adafae,#868988);background-image:-o-linear-gradient(top,#adafae,#868988);background-image:linear-gradient(to bottom,#adafae,#868988);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffadafae',endColorstr='#ff868988',GradientType=0);border-color:#868988 #868988 #606362;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#868988;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #bbb;*border:0;border-bottom-color:#a2a2a2;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#303030;background-color:#868988;*background-color:#797d7b}.btn:active,.btn.active{background-color:#6d706e \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#303030;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#38b7e5;background-image:-moz-linear-gradient(top,#4abde8,#1dade2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#4abde8),to(#1dade2));background-image:-webkit-linear-gradient(top,#4abde8,#1dade2);background-image:-o-linear-gradient(top,#4abde8,#1dade2);background-image:linear-gradient(to bottom,#4abde8,#1dade2);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff4abde8',endColorstr='#ff1dade2',GradientType=0);border-color:#1dade2 #1dade2 #14799e;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#1dade2;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#1dade2;*background-color:#1a9bcb}.btn-primary:active,.btn-primary.active{background-color:#178ab4 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#f58a0f;background-image:-moz-linear-gradient(top,#ff941a,#e67a00);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ff941a),to(#e67a00));background-image:-webkit-linear-gradient(top,#ff941a,#e67a00);background-image:-o-linear-gradient(top,#ff941a,#e67a00);background-image:linear-gradient(to bottom,#ff941a,#e67a00);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff941a',endColorstr='#ffe67a00',GradientType=0);border-color:#e67a00 #e67a00 #995200;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#e67a00;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#e67a00;*background-color:#cc6d00}.btn-warning:active,.btn-warning.active{background-color:#b35f00 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#d10000;background-image:-moz-linear-gradient(top,#e60000,#b30000);background-image:-webkit-gradient(linear,0 0,0 100%,from(#e60000),to(#b30000));background-image:-webkit-linear-gradient(top,#e60000,#b30000);background-image:-o-linear-gradient(top,#e60000,#b30000);background-image:linear-gradient(to bottom,#e60000,#b30000);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe60000',endColorstr='#ffb30000',GradientType=0);border-color:#b30000 #b30000 #600;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#b30000;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#b30000;*background-color:#900}.btn-danger:active,.btn-danger.active{background-color:#800000 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#699e00;background-image:-moz-linear-gradient(top,#77b300,#558000);background-image:-webkit-gradient(linear,0 0,0 100%,from(#77b300),to(#558000));background-image:-webkit-linear-gradient(top,#77b300,#558000);background-image:-o-linear-gradient(top,#77b300,#558000);background-image:linear-gradient(to bottom,#77b300,#558000);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff77b300',endColorstr='#ff558000',GradientType=0);border-color:#558000 #558000 #230;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#558000;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#558000;*background-color:#460}.btn-success:active,.btn-success.active{background-color:#334d00 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#993dc7;background-image:-moz-linear-gradient(top,#a347d1,#8a2eb8);background-image:-webkit-gradient(linear,0 0,0 100%,from(#a347d1),to(#8a2eb8));background-image:-webkit-linear-gradient(top,#a347d1,#8a2eb8);background-image:-o-linear-gradient(top,#a347d1,#8a2eb8);background-image:linear-gradient(to bottom,#a347d1,#8a2eb8);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffa347d1',endColorstr='#ff8a2eb8',GradientType=0);border-color:#8a2eb8 #8a2eb8 #5c1f7a;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#8a2eb8;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#8a2eb8;*background-color:#7a29a3}.btn-info:active,.btn-info.active{background-color:#6b248f \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#080808;background-image:-moz-linear-gradient(top,#0d0d0d,#000);background-image:-webkit-gradient(linear,0 0,0 100%,from(#0d0d0d),to(#000));background-image:-webkit-linear-gradient(top,#0d0d0d,#000);background-image:-o-linear-gradient(top,#0d0d0d,#000);background-image:linear-gradient(to bottom,#0d0d0d,#000);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0d0d0d',endColorstr='#ff000000',GradientType=0);border-color:#000 #000 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#000;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#000;*background-color:#000}.btn-inverse:active,.btn-inverse.active{background-color:#000 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{border-color:transparent;cursor:pointer;color:#f2f2f2;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#fff;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#303030;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*zoom:1;font-size:0;vertical-align:middle;white-space:nowrap;*margin-left:.3em}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{font-size:0;margin-top:10px;margin-bottom:10px}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-bottomleft:3px;border-bottom-left-radius:3px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,.125),inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,.125),inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(255,255,255,.125),inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);*padding-top:5px;*padding-bottom:5px}.btn-group>.btn-mini+.dropdown-toggle{padding-left:5px;padding-right:5px;*padding-top:2px;*padding-bottom:2px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{padding-left:12px;padding-right:12px;*padding-top:7px;*padding-bottom:7px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.btn-group.open .btn.dropdown-toggle{background-color:#868988}.btn-group.open .btn-primary.dropdown-toggle{background-color:#1dade2}.btn-group.open .btn-warning.dropdown-toggle{background-color:#e67a00}.btn-group.open .btn-danger.dropdown-toggle{background-color:#b30000}.btn-group.open .btn-success.dropdown-toggle{background-color:#558000}.btn-group.open .btn-info.dropdown-toggle{background-color:#8a2eb8}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#000}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-left-width:5px;border-right-width:5px;border-top-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-left:0;margin-top:-1px}.btn-group-vertical>.btn:first-child{-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#bbbfc2;border:1px solid transparent;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.alert,.alert h4{color:#a47e3c}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{background-color:#bbbfc2;border-color:#aeb4b6;color:#468847}.alert-success h4{color:#468847}.alert-danger,.alert-error{background-color:#bbbfc2;border-color:#b3b9bb;color:#b94a48}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{background-color:#bbbfc2;border-color:#a8afb1;color:#09c}.alert-info h4{color:#09c}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-left:0;margin-bottom:20px;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#bbbfc2}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#adafae;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-left:15px;padding-right:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#f2f2f2}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";line-height:0}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#bbbfc2 #bbbfc2 #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#bbb;background-color:#161616;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#f2f2f2}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{border-color:#ddd;z-index:2}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{border-top-color:#f2f2f2;border-bottom-color:#f2f2f2;margin-top:6px}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#bbb;border-bottom-color:#bbb}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#adafae;border-color:#adafae}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#adafae}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;content:"";line-height:0}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-bottom-color:transparent;border-top-color:#ddd}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#bbbfc2 #ddd #bbbfc2 #bbbfc2}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#bbbfc2 #bbbfc2 #bbbfc2 #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#adafae}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;background-color:transparent;cursor:default}.navbar{overflow:visible;margin-bottom:20px;*position:relative;*z-index:2}.navbar-inner{min-height:50px;padding-left:20px;padding-right:20px;background-color:#1f1f1f;background-image:-moz-linear-gradient(top,#1f1f1f,#1f1f1f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#1f1f1f),to(#1f1f1f));background-image:-webkit-linear-gradient(top,#1f1f1f,#1f1f1f);background-image:-o-linear-gradient(top,#1f1f1f,#1f1f1f);background-image:linear-gradient(to bottom,#1f1f1f,#1f1f1f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff1f1f1f',endColorstr='#ff1f1f1f',GradientType=0);border:1px solid #000;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065);*zoom:1}.navbar-inner:before,.navbar-inner:after{display:table;content:"";line-height:0}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{float:left;display:block;padding:15px 20px 15px;margin-left:-20px;font-size:20px;font-weight:200;color:#adafae;text-shadow:0 1px 0 #1f1f1f}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:50px;color:#adafae}.navbar-link{color:#adafae}.navbar-link:hover,.navbar-link:focus{color:#fff}.navbar .divider-vertical{height:50px;margin:0 9px;border-left:1px solid #1f1f1f;border-right:1px solid #1f1f1f}.navbar .btn,.navbar .btn-group{margin-top:10px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;content:"";line-height:0}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:10px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:10px;margin-bottom:0}.navbar-search .search-query{margin-bottom:0;padding:4px 14px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,.1);box-shadow:0 1px 10px rgba(0,0,0,.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,.1);box-shadow:0 -1px 10px rgba(0,0,0,.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:15px 15px 15px;color:#adafae;text-decoration:none;text-shadow:0 1px 0 #1f1f1f}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{background-color:transparent;color:#fff;text-decoration:none}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#fff;text-decoration:none;background-color:#1f1f1f;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#121212;background-image:-moz-linear-gradient(top,#121212,#121212);background-image:-webkit-gradient(linear,0 0,0 100%,from(#121212),to(#121212));background-image:-webkit-linear-gradient(top,#121212,#121212);background-image:-o-linear-gradient(top,#121212,#121212);background-image:linear-gradient(to bottom,#121212,#121212);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff121212',endColorstr='#ff121212',GradientType=0);border-color:#121212 #121212 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#121212;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#121212;*background-color:#050505}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#000 \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,0.2);position:absolute;top:-7px;left:9px}.navbar .nav>li>.dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #303030;position:absolute;top:-6px;left:10px}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{border-top:7px solid #ccc;border-top-color:rgba(0,0,0,0.2);border-bottom:0;bottom:-7px;top:auto}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{border-top:6px solid #303030;border-bottom:0;bottom:-6px;top:auto}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{background-color:#1f1f1f;color:#fff}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#adafae;border-bottom-color:#adafae}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{left:auto;right:0}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{left:auto;right:12px}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{left:auto;right:13px}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{left:auto;right:100%;margin-left:0;margin-right:-1px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#252a30;background-image:-moz-linear-gradient(top,#252a30,#252a30);background-image:-webkit-gradient(linear,0 0,0 100%,from(#252a30),to(#252a30));background-image:-webkit-linear-gradient(top,#252a30,#252a30);background-image:-o-linear-gradient(top,#252a30,#252a30);background-image:linear-gradient(to bottom,#252a30,#252a30);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff252a30',endColorstr='#ff252a30',GradientType=0);border-color:transparent}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#adafae;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#adafae}.navbar-inverse .navbar-text{color:#adafae}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{background-color:#242a31;color:#fff}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#242a31}.navbar-inverse .navbar-link{color:#adafae}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-left-color:#252a30;border-right-color:#252a30}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{background-color:#242a31;color:#fff}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#adafae;border-bottom-color:#adafae}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#5d6978;border-color:#252a30;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1),0 1px 0 rgba(255,255,255,.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1),0 1px 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.1),0 1px 0 rgba(255,255,255,.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#fff}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#fff}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#fff}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#303030;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15);outline:0}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#1a1d22;background-image:-moz-linear-gradient(top,#1a1d22,#1a1d22);background-image:-webkit-gradient(linear,0 0,0 100%,from(#1a1d22),to(#1a1d22));background-image:-webkit-linear-gradient(top,#1a1d22,#1a1d22);background-image:-o-linear-gradient(top,#1a1d22,#1a1d22);background-image:linear-gradient(to bottom,#1a1d22,#1a1d22);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff1a1d22',endColorstr='#ff1a1d22',GradientType=0);border-color:#1a1d22 #1a1d22 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#1a1d22;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#1a1d22;*background-color:#0f1113}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#040405 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.breadcrumb>li{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 0 #fff}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#adafae}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;*zoom:1;margin-left:0;margin-bottom:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#161616;border:1px solid transparent;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#33b5e5}.pagination ul>.active>a,.pagination ul>.active>span{color:#adafae;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#adafae;background-color:transparent;cursor:default}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-bottomleft:3px;border-bottom-left-radius:3px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-top-left-radius:2px;-moz-border-radius-topleft:2px;border-top-left-radius:2px;-webkit-border-bottom-left-radius:2px;-moz-border-radius-bottomleft:2px;border-bottom-left-radius:2px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:2px;-moz-border-radius-topright:2px;border-top-right-radius:2px;-webkit-border-bottom-right-radius:2px;-moz-border-radius-bottomright:2px;border-bottom-right-radius:2px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;list-style:none;text-align:center;*zoom:1}.pager:before,.pager:after{display:table;content:"";line-height:0}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#adafae;background-color:#fff;cursor:default}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:absolute;z-index:1050;width:100%;background-color:#fff;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;outline:0}.modal.fade{-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out;top:-25%}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;overflow-y:auto;padding:15px}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;*zoom:1}.modal-footer:before,.modal-footer:after{display:table;content:"";line-height:0}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1020;display:block;visibility:visible;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#303030;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.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:#303030}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#303030}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#303030}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#303030}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#303030;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:normal;line-height:18px;background-color:#303030;border-bottom:1px solid #232323;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#303030}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right .arrow:after{left:1px;bottom:-10px;border-left-width:0;border-right-color:#303030}.popover.bottom .arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#303030}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left .arrow:after{right:1px;border-right-width:0;border-left-color:#303030;bottom:-10px}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;content:"";line-height:0}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#f2f2f2;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px;color:#bbb}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;vertical-align:baseline;white-space:nowrap;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#adafae}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-left:9px;padding-right:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f80}.label-warning[href],.badge-warning[href]{background-color:#cc6d00}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#09c}.label-info[href],.badge-info[href]{background-color:#007399}.label-inverse,.badge-inverse{background-color:#303030}.label-inverse[href],.badge-inverse[href]{background-color:#161616}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.progress .bar{width:0;height:100%;color:#fff;float:left;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,.15),inset 0 -1px 0 rgba(0,0,0,.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,.15),inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 1px 0 0 rgba(0,0,0,.15),inset 0 -1px 0 rgba(0,0,0,.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#ff9d2e;background-image:-moz-linear-gradient(top,#ffac4d,#f80);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ffac4d),to(#f80));background-image:-webkit-linear-gradient(top,#ffac4d,#f80);background-image:-o-linear-gradient(top,#ffac4d,#f80);background-image:linear-gradient(to bottom,#ffac4d,#f80);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffac4d',endColorstr='#ffff8800',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#ffac4d;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{overflow:hidden;width:100%;position:relative}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#1f1f1f;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{left:auto;right:15px}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;left:0;right:0;bottom:0;padding:15px;background:#303030;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{color:#fff;line-height:20px}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#303030;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;color:inherit;letter-spacing:-1px}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}label,input,button,select,textarea,.navbar .search-query:-moz-placeholder,.navbar .search-query::-webkit-input-placeholder{font-family:'Droid Sans',sans-serif;color:#bbb}blockquote{border-left:5px solid #303030}blockquote.pull-right{border-right:5px solid #303030}html{min-height:100%}body{min-height:100%;background:#161616}.page-header{border-bottom:1px solid #303030}hr{border-bottom:0}.navbar .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar .brand{padding:15px 20px 15px;color:#bbbfc2;font-weight:normal;text-shadow:none}.navbar .nav>li>a{padding:15px 15px 14px;border-bottom:1px solid transparent}.navbar .nav>li>a:hover,.navbar .nav>.active>a,.navbar .nav>.active>a:hover{border-bottom:1px solid #33b5e5}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar .navbar-text{margin-bottom:1px;padding:15px 15px 14px;line-height:inherit}.navbar .divider-vertical{margin:0;border-left:1px solid #303030;border-right-width:0}.navbar .search-query,.navbar .search-query:focus,.navbar .search-query.focused{-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;background-color:#303030;line-height:normal;color:#adafae;text-shadow:none}.navbar .search-query:-moz-placeholder,.navbar .search-query:focus:-moz-placeholder,.navbar .search-query.focused:-moz-placeholder{color:#bbb}.navbar .search-query:-ms-input-placeholder,.navbar .search-query:focus:-ms-input-placeholder,.navbar .search-query.focused:-ms-input-placeholder{color:#bbb}.navbar .search-query::-webkit-input-placeholder,.navbar .search-query:focus::-webkit-input-placeholder,.navbar .search-query.focused::-webkit-input-placeholder{color:#bbb}@media(max-width:979px){.navbar .nav-collapse .nav li>a{border:0;color:#bbbfc2;font-weight:normal;text-shadow:none}.navbar .nav-collapse .nav li>a:hover{border:0;background-color:#33b5e5}.navbar .nav-collapse .nav .active>a{border:0;background-color:#33b5e5}.navbar .nav-collapse .dropdown-menu a:hover{background-color:#33b5e5}.navbar .nav-collapse .navbar-form,.navbar .nav-collapse .navbar-search{border-top:0;border-bottom:0}.navbar .nav-collapse .nav-header{color:rgba(128,128,128,0.6)}.navbar-inverse .nav-collapse .nav li>a:hover{background-color:#111}.navbar-inverse .nav-collapse .nav .active>a{background-color:#111}.navbar-inverse .nav-collapse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav-collapse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav-collapse .nav li.dropdown.open.active>.dropdown-toggle{background-color:#111}}.dropdown-menu{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}div.subnav{margin:0 1px;background-color:#1f1f1f;background-image:none;border:0;border-bottom:1px solid #303030}div.subnav .nav>li>a,div.subnav .nav>li:first-child>a,div.subnav .nav>li:first-child>a:hover{padding:11px 12px;border:0;background-color:#1f1f1f;color:#adafae}div.subnav .nav>li>a:hover,div.subnav .nav>li.active>a,div.subnav .nav>li.active>a:hover,div.subnav .nav>li:first-child>a:hover{padding:11px 12px;background:transparent;border:0;border-bottom:1px solid #33b5e5;color:#fff}div.subnav .nav li.nav-header{text-shadow:none}div.subnav-fixed{top:50px;margin:0}.nav-tabs{border-bottom:1px solid #303030}.nav-tabs>li>a{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs li>a:hover,.nav-tabs li.active>a,.nav-tabs li.active>a:hover{border-color:transparent;background-color:#33b5e5;color:#fff}.nav-tabs li.disabled>a{color:#bbbfc2}.nav-tabs .open .dropdown-toggle{background-color:#060606;border-color:transparent}.nav-pills li>a:hover{background-color:#33b5e5;color:#fff}.nav-pills li.disabled>a{color:#bbbfc2}.nav-pills .open .dropdown-toggle{background-color:#060606}.nav-pills .dropdown-menu li>a:hover{border:0}.nav-list li>a{text-shadow:none}.nav-list li>a:hover{background-color:#33b5e5;color:#fff}.nav-list .nav-header{text-shadow:none}.nav-list .divider{background-color:transparent;border-bottom:1px solid #303030}.nav-stacked li>a{border:1px solid #303030!important}.nav-stacked li>a:hover,.nav-stacked li.active>a{background-color:#33b5e5;color:#fff}.tabbable .nav-tabs,.tabbable .nav-tabs li.active>a{border-color:#303030}.breadcrumb{background-color:transparent;background-image:none;border-width:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;font-size:14px}.breadcrumb li{text-shadow:none}.breadcrumb li>a{color:#33b5e5;text-shadow:none}.pagination ul{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>span,.pagination ul>.disabled>span:hover{background-color:rgba(0,0,0,0.2)}.pager li>a,.pager li>span{background-color:#161616;border:0}.pager li>a:hover,.pager li>span:hover{background-color:#33b5e5}.pager .disabled a,.pager .disabled a:hover{background-color:#161616}.btn{padding:5px 12px;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;text-shadow:none}.btn.disabled{box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-large{padding:22px 30px}.btn-small{padding:2px 10px}.btn-mini{padding:2px 6px}.btn-group>.btn:first-child,.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.dropdown-toggle{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}input,textarea,select{border-width:2px;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{color:#adafae}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly],.uneditable-input{border-color:#444}input:focus,textarea:focus,input.focused,textarea.focused{border-color:#52a8ec;outline:0;outline:thin dotted \9}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus,select:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}legend,label{color:#bbbfc2;border-bottom:0 solid #222}.form-actions{border-top:1px solid #222}.table{-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.table tbody tr.success td{background-color:#690;color:#fff}.table tbody tr.error td{background-color:#c00;color:#fff}.table tbody tr.info td{background-color:#33b5e5;color:#fff}.alert,.alert .alert-heading,.alert-success,.alert-success .alert-heading,.alert-danger,.alert-error,.alert-danger .alert-heading,.alert-error .alert-heading,.alert-info,.alert-info .alert-heading{color:#bbbfc2;text-shadow:none;border:0}.label{color:#bbbfc2}.badge{border-radius:0;font-weight:200}.label,.alert{background-color:#888}.label:hover{background-color:#6e6e6e}.label-important,.alert-danger,.alert-error{background-color:#c00}.label-important:hover{background-color:#900}.label-warning{background-color:#cc6d00}.label-warning:hover{background-color:#995200}.label-success,.alert-success{background-color:#5c8a00}.label-success:hover{background-color:#3a5700}.label-info,.alert-info{background-color:#007399}.label-info:hover{background-color:#004d66}a:hover{text-decoration:none}.well,.hero-unit{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.well,.hero-unit{border-top:solid 1px #3d3d3d;-webkit-box-shadow:0 2px 4px rgba(0,0,0,0.8);-moz-box-shadow:0 2px 4px rgba(0,0,0,0.8);box-shadow:0 2px 4px rgba(0,0,0,0.8)}.thumbnail{border-color:#303030}.progress{background-color:#060606;background-image:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.modal{-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;border-top:solid 1px #3d3d3d;background-color:#303030}.modal-header{border-bottom:1px solid #303030}.modal-footer{background-color:#303030;border-top:1px solid #303030;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.popover{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.popover-title{border-bottom:0;color:#fff}.footer{border-top:1px solid #303030}@media(max-width:767px){div.panel{width:100%!important;padding:0!important}}.container-fluid{padding-left:0;padding-right:0}.container.grafana-container{padding:5px 10px;width:100%;box-sizing:border-box}.bgNav{background:#1f1f1f}.bgPrimary{background:#4abde8;color:rgba(255,255,255,0.9)}.bgInfo{background:#a347d1;color:rgba(255,255,255,0.9)}.bgSuccess{background:#77b300;color:rgba(255,255,255,0.9)}.bgWarning{background:#ff941a;color:rgba(255,255,255,0.9)}.bgDanger{background:#e60000;color:rgba(255,255,255,0.9)}.bgInverse{background:#0d0d0d;color:rgba(255,255,255,0.9)}code,pre{background-color:#bbbfc2}.panel{display:inline-table;vertical-align:top}.panel-container{padding:0;background:#1f1f1f;margin:5px}.panel-content{padding:0 10px 5px 10px}.panel-title{border:0;font-weight:bold}.panel-loading{position:absolute;top:0;right:4px;z-index:800}.panel div.panel-extra div.panel-extra-container{margin-right:-10px;margin-top:3px;text-align:center}.panel div.panel-extra div.panel-extra-container ul{text-align:left}.panel div.panel-extra{font-size:.9em;margin-bottom:0}.panel div.panel-extra .extra{float:right!important}.panel-error{color:#fff;padding:5px 10px 0 10px}.panel-error-inspector-link{float:right;margin-right:10px}div.editor-row{vertical-align:top}div.editor-row div.section{margin-right:20px;vertical-align:top;display:inline-block}div.editor-option{vertical-align:top;display:inline-block;margin-right:10px}div.editor-option label{display:block}#events{font-size:12px}.version{font-size:85%}.legend{color:#000}div.fake-input{background-color:#4a4a4a;border:1px solid #636363;-webkit-border-radius:3px 3px 3px 3px;-moz-border-radius:3px 3px 3px 3px;border-radius:3px 3px 3px 3px}hr.small{margin:5px 0}form input.ng-invalid{color:#b94a48}.editor-title{margin-right:10px;font-size:1.7em;font-weight:bold;text-transform:capitalize}.editor-title small{opacity:.5;font-size:.7em;font-weight:normal}.bordered{border:1px solid #303030}.table-unpadded th,.table-unpadded td{padding:0 2px}.spy{position:absolute;right:0;top:0}.navbar-inner{border-width:0}.kibana-row{margin-bottom:5px}.row-tab .dropdown-menu-right{top:0;left:33px}.row-tab-button{padding:0;cursor:pointer;vertical-align:middle;width:30px;height:30px;text-align:center;display:inline-block;line-height:30px}.row-button{width:30px;text-align:center;float:left;cursor:pointer}.row-text{white-space:nowrap;text-transform:uppercase;font-weight:bold;font-size:.9em;margin:0 10px}.row-close{padding:0;margin:0;min-height:30px!important;line-height:30px;background:#1f1f1f}.row-open{margin-top:5px;left:-34px;position:absolute;z-index:100;transition:.25s left;transition-delay:.25s;-webkit-transition-delay:.25s}.row-open:hover{left:-12px}.odd{background-color:rgba(100,100,100,0.3)}.nomargin{margin:0}[ng\:cloak],[ng-cloak],.ng-cloak{display:none!important}.table tbody+tbody{border-top:0}.ui-draggable-dragging{display:block;z-index:9999}.dragInProgress .panel-container{border:3px solid rgba(100,100,100,0.5)}.link{color:#f2f2f2;cursor:pointer}.link:hover{color:#fff}.pointer{cursor:pointer}.popover{max-width:480px}.modal{width:100%;top:0!important}.tiny{font-size:50%}.smaller{font-size:70%}.small{font-size:85%}.large{font-size:120%}.strong{font-weight:bold}a{cursor:pointer}.normal{font-weight:normal}.light{font-weight:200}.input-smaller{width:75px}.string{color:#c8ccce}.number{color:#00ace6}.boolean{color:#b78c43}.key{color:#c05c5a}.btn-active{background-color:#e6e6e6;background-image:none;box-shadow:0 2px 4px rgba(0,0,0,0.15) inset,0 1px 2px rgba(0,0,0,0.05);outline:0 none}.remove:hover{background-color:#b30000}.faded{opacity:.2}div.flot-text{color:#bbbfc2!important}.dashboard-notice{z-index:8000;margin-left:0;padding:3px 0 3px 0;width:100%;padding-left:20px;color:#fff}.alert-warning{background-color:#bbbfc2;border-color:transparent;color:#a47e3c}.popover.topLeft{margin-top:-10px}.popover.topLeft .arrow{bottom:-10px;left:25%;margin-left:-10px;border-width:10px 10px 0;border-top-color:#303030}.popover.topLeft .arrow:after{border-width:11px 11px 0;border-top-color:rgba(0,0,0,0.25);bottom:-1px;left:-11px}.popover.topRight{margin-top:-10px}.popover.topRight .arrow{bottom:-10px;left:75%;margin-left:-10px;border-width:10px 10px 0;border-top-color:#303030}.popover.topRight .arrow:after{border-width:11px 11px 0;border-top-color:rgba(0,0,0,0.25);bottom:-1px;left:-11px}.popover.rightTop .arrow{top:10%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.rightTop .arrow:after{left:1px;bottom:-10px;border-left-width:0;border-right-color:#303030}.popover.rightBottom .arrow{top:90%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.rightBottom .arrow:after{left:1px;bottom:-10px;border-left-width:0;border-right-color:#303030}.popover.bottomLeft .arrow{left:10%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottomLeft .arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#303030}.popover.bottomRight .arrow{left:90%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottomRight .arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#303030}.popover.leftTop .arrow{top:10%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.leftTop .arrow:after{right:1px;border-right-width:0;border-left-color:#303030;bottom:-10px}.popover.leftBottom .arrow{top:90%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.leftBottom .arrow:after{right:1px;border-right-width:0;border-left-color:#303030;bottom:-10px}.popover.topLeft .arrow{left:10%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.topLeft .arrow:after{bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#303030}.popover.topRight .arrow{left:90%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.topRight .arrow:after{bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#303030}.label-tag{background-color:#93c;color:#f2f2f2}.label-tag:hover{background-color:#7a29a3;color:#fff}.annotation-editor-table td{white-space:nowrap}.save-dashboard-dropdown{padding:10px}.save-dashboard-dropdown li>a{padding-left:5px}.save-dashboard-dropdown-save-form{margin-bottom:5px}.inspector-request-table td{padding:5px}.inspector-request-table td:first-child{white-space:nowrap}code,pre{background-color:#1f1f1f;color:#bbbfc2}.submenu-controls{background:#292929;font-size:inherit}.submenu-controls label{margin:0;padding-right:4px;display:inline}.submenu-controls input[type=checkbox]{margin:0}.submenu-controls-visible:not(.hide-controls) .panel-fullscreen{top:82px}.submenu-panel{padding:0 4px 0 8px;border-right:1px solid #202020;float:left}.submenu-panel:first-child{padding-left:17px}.submenu-panel-title{float:left;text-transform:uppercase;padding:4px 10px 3px 0}.submenu-panel-wrapper{float:left}.submenu-toggle{padding:4px 0 3px 8px;float:left}.submenu-toggle .annotation-color-icon{position:relative;top:2px}.submenu-toggle:first-child{padding-left:0}.submenu-control-edit{padding:4px 4px 3px 8px;float:right;border-left:1px solid #202020;margin-left:8px}.annotation-disabled,.annotation-disabled a{color:#788086}.filtering-container{float:left}.filtering-container label{float:left}.filtering-container input[type=checkbox]{margin:0}.filter-panel-filter{display:inline-block;vertical-align:top;padding:4px 10px 3px 10px;border-right:1px solid #202020}.filter-panel-filter:first-child{padding-left:0}.filter-panel-filter ul{margin-bottom:0}.filter-deselected{opacity:.5}.filtering-container .filter-action{float:right;padding-right:2px;margin-bottom:0!important;margin-left:0;margin-top:4px}.add-filter-action{padding:3px 5px 0 5px;position:relative;top:4px}.filter-mandate{text-decoration:underline;cursor:pointer}.filter-apply{float:right}.graph-canvas-wrapper{position:relative}.graph-legend{margin:0 20px;text-align:left;position:relative;top:2px}.graph-legend .popover-content{padding:0}.graph-legend-icon{position:relative;top:2px}.graph-legend-series,.graph-legend-icon,.graph-legend-alias,.graph-legend-value{display:inline-block;white-space:nowrap}.graph-legend-series{padding-left:10px}.graph-legend-value{padding-left:6px}.graph-legend-table{display:table}.graph-legend-table .graph-legend-series{display:table-row;padding-left:0}.graph-legend-table .graph-legend-series.pull-right{float:none}.graph-legend-table .graph-legend-series.pull-right .graph-legend-alias::after{content:'y\00B2'}.graph-legend-table .graph-legend-alias{display:table-cell;white-space:nowrap}.graph-legend-table .graph-legend-icon{display:table-cell;white-space:nowrap;padding:0 4px}.graph-legend-table .graph-legend-value{display:table-cell;white-space:nowrap;padding-left:15px}.graph-legend-rightside.graph-wrapper{display:table;width:100%}.graph-legend-rightside .graph-canvas-wrapper{display:table-cell;width:100%;position:relative}.graph-legend-rightside .graph-legend-wrapper{display:table-cell;vertical-align:top;position:relative;left:-4px}.graph-legend-rightside .graph-legend{margin:0}.graph-legend-rightside .graph-legend-series{display:block;padding-left:0}.graph-legend-rightside .graph-legend-table .graph-legend-series{display:table-row}.graph-legend-series-hidden a{color:#7f7f7f}.graph-legend-popover{width:200px}.graph-legend-popover label{display:inline-block}.graph-legend-popover .btn{padding:1px 3px;margin-right:0;line-height:initial}.graph-legend-popover .close{margin-right:5px;color:#f2f2f2;opacity:.7;text-shadow:none}.graph-legend-popover .editor-row{padding:5px}.bootstrap-tagsinput{display:inline-block;padding:4px 6px;margin-bottom:10px;color:#555;vertical-align:middle;border-radius:4px;max-width:100%;line-height:22px;background-color:#4a4a4a;border:1px solid #636363;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}.bootstrap-tagsinput input{border:0;box-shadow:none;outline:0;background-color:transparent;padding:0;padding-left:5px;margin:0;width:auto!important;max-width:inherit}.bootstrap-tagsinput input:focus{border:0;box-shadow:none}.bootstrap-tagsinput .tag{margin-right:2px;color:white}.bootstrap-tagsinput .tag [data-role="remove"]{margin-left:8px;cursor:pointer}.bootstrap-tagsinput .tag [data-role="remove"]:after{content:"x";padding:0 2px}.bootstrap-tagsinput .tag [data-role="remove"]:hover{box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.bootstrap-tagsinput .tag [data-role="remove"]:hover:active{box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.hide-controls{padding:0}.hide-controls .grafana-row{display:none}.hide-controls .submenu-controls{display:none}.hide-controls .add-row-panel-hint{display:none}.playlist-active .grafana-menu-zoom-out,.playlist-active .grafana-menu-save,.playlist-active .grafana-menu-load,.playlist-active .add-row-panel-hint,.playlist-active .grafana-menu-home,.playlist-active .grafana-menu-refresh,.playlist-active .grafana-menu-edit{display:none}.playlist-active .grafana-menu-stop-playlist{display:list-item}.grafana-search-panel{padding:6px 10px}.grafana-search-panel .search-field-wrapper input{width:100%}.grafana-search-panel .search-field-wrapper button{margin:0 2px 0 0}.grafana-search-panel .search-field-wrapper>span{display:block;overflow:hidden;padding-right:25px}.grafana-search-panel .selected td,.grafana-search-panel tr.selected:nth-child(odd)>td{background:#33b5e5;color:white;text-shadow:-1px -1px 1px rgba(0,0,0,0.3)}.grafana-search-panel .selected td a,.grafana-search-panel tr.selected:nth-child(odd)>td a{color:white}.grafana-search-panel .selected-tag .label-tag{background-color:#33b5e5}.search-tagview-switch{position:absolute;top:15px;right:263px;color:#a6a6a6}.search-tagview-switch.active{color:#f2f2f2}.row-button{width:24px}.modal{margin:5%;width:90%}.grafana-search-metric-actions{visibility:hidden;padding-left:20px}.grafana-search-metric-name{white-space:nowrap}.grafana-search-metric-result:hover .grafana-search-metric-actions{visibility:visible}.grafana-search-metric-result:hover .grafana-search-metric-name{color:#33b5e5}.yaxisLabel{top:50%;left:-20px;transform:rotate(-90deg);-o-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-webkit-transform:rotate(-90deg);transform-origin:0 0;-o-transform-origin:0 0;-ms-transform-origin:0 0;-moz-transform-origin:0 0;-webkit-transform-origin:0 0}.axisLabel{color:#bbbfc2;font-size:11.9px;position:absolute;text-align:center;font-size:12px}.panel-fullscreen{z-index:100;display:block!important;position:fixed;left:0;right:0;top:54px;padding:0 10px;background:#1f1f1f;overflow-y:scroll;height:100%}.panel-fullscreen .panel-content{padding-bottom:130px}.dashboard-fullscreen .container-fluid.main{height:0;width:0;position:fixed;right:-10000px}.histogram-chart{position:relative}.panel-full-edit-tabs{margin-top:10px;min-height:250px;margin-left:-10px;margin-right:-10px;background-color:transparent;border-top:1px solid #000}.panel-full-edit-tabs .tabs .nav-tabs{margin:0;background:#303030;border-top:1px solid #555}.panel-full-edit-tabs .tabs .tab-content{display:none}.panel-full-edit-tabs .tab-content{overflow:visible;padding:15px}.panel-full-edit-tabs .nav-tabs>li>a{line-height:15px;padding-top:6px;padding-bottom:6px;font-size:.8rem}.grafana-target:last-child{border-bottom:1px solid #000}.grafana-target-inner{border-top:1px solid #000;border-left:1px solid #000;border-right:1px solid #000;background:#303030;width:100%}.grafana-target-onoff{padding:5px 7px;display:inline-block}.grafana-segment-list{list-style:none;margin:0;margin-right:90px;margin-left:30px}.grafana-segment-list>li{float:left}.grafana-segment-dropdown-menu{margin-bottom:70px}.grafana-target-segment{padding:8px 7px;font-weight:normal;border-right:1px solid #050505;color:#c8c8c8;display:inline-block}.has-open-function .grafana-target-segment{padding-top:25px}.grafana-target-hidden .grafana-target-segment{color:#888}.grafana-target-segment:hover,.grafana-target-segment:focus{text-decoration:none}.grafana-target-segmenta:hover{background:#444}.grafana-target-function{background:#444}.grafana-target-function>a{color:#c8c8c8}.grafana-target-function>a:hover{color:#f2f2f2}.grafana-target-function.show-function-controls{padding-top:5px;min-width:100px;text-align:center}input[type=text].grafana-function-param-input{background:transparent;border:0;margin:0;padding:0}.grafana-target-controls-left{list-style:none;float:left;width:30px;margin:0}.grafana-target-controls{width:120px;float:right;list-style:none;margin:0;text-align:right}.grafana-target-controls>li{display:inline-block;white-space:nowrap}.grafana-target-controls a{padding:8px 7px;position:relative;top:8px;color:#c8c8c8;font-size:16px}.grafana-target-hidden .grafana-target-controls a{color:#888}.grafana-target-controls a:hover,.grafana-target-controls a:focus{text-decoration:none}input[type=text].grafana-target-text-input{padding:8px 7px;border:0;margin:0;background:transparent;float:left;color:#c8c8c8;border-radius:0}input[type=text].grafana-target-segment-input{border:0;border-right:1px solid #050505;margin:0;border-radius:0;padding:8px 4px}input[type=checkbox].grafana-target-option-checkbox{margin:0}select.grafana-target-segment-input{border:0;border-right:1px solid #050505;margin:0;border-radius:0;height:36px;padding:8px 5px}.grafana-target .dropdown{padding:0;margin:0}.graphite-func-controls{display:none;text-align:center}.graphite-func-controls .icon-arrow-left{float:left;position:relative;top:2px}.graphite-func-controls .icon-arrow-right{float:right;position:relative;top:2px}.graphite-func-controls .icon-remove{margin-left:10px}.grafana-target .popover-content{padding:0}.scrollable{max-height:300px;overflow:auto}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar:hover{height:8px}::-webkit-scrollbar-button:start:decrement,::-webkit-scrollbar-button:end:increment{display:none}::-webkit-scrollbar-button:horizontal:decrement{display:none}::-webkit-scrollbar-button:horizontal:increment{display:none}::-webkit-scrollbar-button:vertical:decrement{display:none}::-webkit-scrollbar-button:vertical:increment{display:none}::-webkit-scrollbar-button:horizontal:decrement:active{background-image:none}::-webkit-scrollbar-button:horizontal:increment:active{background-image:none}::-webkit-scrollbar-button:vertical:decrement:active{background-image:none}::-webkit-scrollbar-button:vertical:increment:active{background-image:none}::-webkit-scrollbar-track-piece{background-color:grayDark}::-webkit-scrollbar-thumb:vertical{height:50px;background:-webkit-gradient(linear,left top,right top,color-stop(0%,#3a3a3a),color-stop(100%,#222));border:1px solid #0d0d0d;border-top:1px solid #666;border-left:1px solid #666}::-webkit-scrollbar-thumb:horizontal{width:50px;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#3a3a3a),color-stop(100%,#222));border:1px solid #1f1f1f;border-top:1px solid #666;border-left:1px solid #666}.sp-replacer{background:inherit;border:0;color:inherit}.sp-replacer:hover,.sp-replacer.sp-active{border-color:inherit;color:inherit}.sp-container{border-radius:0;background-color:#303030;border:0;padding:0}.sp-palette-container,.sp-picker-container{border:0}.sp-dd{display:none}.sp-preview{position:relative;width:15px;height:15px;border:0;margin-right:5px;float:left;z-index:0}.datapoints-warning{pointer:none;position:absolute;top:50%;left:50%;z-index:10;margin-top:-50px;margin-left:-100px;width:200px;text-align:center;cursor:auto;padding:10px}.grafana-version-footer{padding-top:15px;text-align:left}.metrics-editor-help:hover .hide{display:block} \ No newline at end of file + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:"";line-height:0}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{max-width:100%;width:auto\9;height:auto;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{text-shadow:none!important;color:#000!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#bbbfc2;background-color:#161616}a{color:#f2f2f2;text-decoration:none}a:hover,a:focus{color:#fff;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;content:"";line-height:0}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.127659574468085%;*margin-left:2.074468085106383%}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;content:"";line-height:0}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;content:"";line-height:0}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#adafae}a.muted:hover,a.muted:focus{color:#939695}.text-warning{color:#a47e3c}a.text-warning:hover,a.text-warning:focus{color:#7f612e}.text-error{color:#b94a48}a.text-error:hover,a.text-error:focus{color:#953b39}.text-info{color:#09c}a.text-info:hover,a.text-info:focus{color:#007399}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:#fff;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#adafae}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #bbbfc2}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;*zoom:1;padding-left:5px;padding-right:5px}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;content:"";line-height:0}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #303030;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #adafae}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #bbbfc2}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#adafae}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #bbbfc2;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;font-size:12px;color:#303030;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;white-space:nowrap}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#303030;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#adafae}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#000;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;vertical-align:middle}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#4a4a4a;border:1px solid #636363;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(82,168,236,.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(82,168,236,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(82,168,236,.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;*margin-top:0;margin-top:1px \9;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;border:1px solid #636363;background-color:#4a4a4a}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#adafae;background-color:#474747;border-color:#636363;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);cursor:not-allowed}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#788086}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#788086}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#788086}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;content:"";line-height:0}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#555}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#a47e3c}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#a47e3c}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#7f612e;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ceae78;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ceae78;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ceae78}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#a47e3c;background-color:#bbbfc2;border-color:#a47e3c}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#bbbfc2;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#bbbfc2;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#09c}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#09c}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#09c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#007399;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #3cf;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #3cf;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #3cf}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#09c;background-color:#bbbfc2;border-color:#09c}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:transparent;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;content:"";line-height:0}.form-actions:after{clear:both}.help-block,.help-inline{color:#e3e5e6}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding-left:5px}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;vertical-align:middle;font-size:0;white-space:nowrap}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#bbbfc2;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#bf3;border-color:#690}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;*zoom:1;margin-bottom:0;vertical-align:middle}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";line-height:0}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #303030}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #303030}.table .table{background-color:#161616}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #303030;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.table-bordered th,.table-bordered td{border-left:1px solid #303030}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:3px;-moz-border-radius-bottomleft:3px;border-bottom-left-radius:3px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;-moz-border-radius-bottomright:0;border-bottom-right-radius:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:rgba(100,100,100,0.3)}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#303030}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#bbbfc2}.table tbody tr.error>td{background-color:#bbbfc2}.table tbody tr.warning>td{background-color:#bbbfc2}.table tbody tr.info>td{background-color:#bbbfc2}.table-hover tbody tr.success:hover>td{background-color:#aeb2b6}.table-hover tbody tr.error:hover>td{background-color:#aeb2b6}.table-hover tbody tr.warning:hover>td{background-color:#aeb2b6}.table-hover tbody tr.info:hover>td{background-color:#aeb2b6}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat;margin-top:1px}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{background-position:-216px -120px;width:16px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{background-position:-384px -120px;width:16px}.icon-folder-open{background-position:-408px -120px;width:16px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#303030;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:transparent;border-bottom:1px solid #222}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#bbbfc2;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{text-decoration:none;color:#fff;background-color:#2ab2e4;background-image:-moz-linear-gradient(top,#33b5e5,#1dade2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#33b5e5),to(#1dade2));background-image:-webkit-linear-gradient(top,#33b5e5,#1dade2);background-image:-o-linear-gradient(top,#33b5e5,#1dade2);background-image:linear-gradient(to bottom,#33b5e5,#1dade2);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff33b5e5',endColorstr='#ff1dade2',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#2ab2e4;background-image:-moz-linear-gradient(top,#33b5e5,#1dade2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#33b5e5),to(#1dade2));background-image:-webkit-linear-gradient(top,#33b5e5,#1dade2);background-image:-o-linear-gradient(top,#33b5e5,#1dade2);background-image:linear-gradient(to bottom,#33b5e5,#1dade2);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff33b5e5',endColorstr='#ff1dade2',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#adafae}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:default}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#000;margin-top:5px;margin-right:-10px}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-left:20px;padding-right:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#131517;border:1px solid #030303;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well-small{padding:9px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;*zoom:1;padding:4px 12px;margin-bottom:0;font-size:14px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#303030;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#9ea09f;background-image:-moz-linear-gradient(top,#adafae,#868988);background-image:-webkit-gradient(linear,0 0,0 100%,from(#adafae),to(#868988));background-image:-webkit-linear-gradient(top,#adafae,#868988);background-image:-o-linear-gradient(top,#adafae,#868988);background-image:linear-gradient(to bottom,#adafae,#868988);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffadafae',endColorstr='#ff868988',GradientType=0);border-color:#868988 #868988 #606362;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#868988;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #bbb;*border:0;border-bottom-color:#a2a2a2;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#303030;background-color:#868988;*background-color:#797d7b}.btn:active,.btn.active{background-color:#6d706e \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#303030;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#38b7e5;background-image:-moz-linear-gradient(top,#4abde8,#1dade2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#4abde8),to(#1dade2));background-image:-webkit-linear-gradient(top,#4abde8,#1dade2);background-image:-o-linear-gradient(top,#4abde8,#1dade2);background-image:linear-gradient(to bottom,#4abde8,#1dade2);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff4abde8',endColorstr='#ff1dade2',GradientType=0);border-color:#1dade2 #1dade2 #14799e;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#1dade2;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#1dade2;*background-color:#1a9bcb}.btn-primary:active,.btn-primary.active{background-color:#178ab4 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#f58a0f;background-image:-moz-linear-gradient(top,#ff941a,#e67a00);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ff941a),to(#e67a00));background-image:-webkit-linear-gradient(top,#ff941a,#e67a00);background-image:-o-linear-gradient(top,#ff941a,#e67a00);background-image:linear-gradient(to bottom,#ff941a,#e67a00);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff941a',endColorstr='#ffe67a00',GradientType=0);border-color:#e67a00 #e67a00 #995200;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#e67a00;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#e67a00;*background-color:#cc6d00}.btn-warning:active,.btn-warning.active{background-color:#b35f00 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#d10000;background-image:-moz-linear-gradient(top,#e60000,#b30000);background-image:-webkit-gradient(linear,0 0,0 100%,from(#e60000),to(#b30000));background-image:-webkit-linear-gradient(top,#e60000,#b30000);background-image:-o-linear-gradient(top,#e60000,#b30000);background-image:linear-gradient(to bottom,#e60000,#b30000);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe60000',endColorstr='#ffb30000',GradientType=0);border-color:#b30000 #b30000 #600;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#b30000;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#b30000;*background-color:#900}.btn-danger:active,.btn-danger.active{background-color:#800000 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#699e00;background-image:-moz-linear-gradient(top,#77b300,#558000);background-image:-webkit-gradient(linear,0 0,0 100%,from(#77b300),to(#558000));background-image:-webkit-linear-gradient(top,#77b300,#558000);background-image:-o-linear-gradient(top,#77b300,#558000);background-image:linear-gradient(to bottom,#77b300,#558000);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff77b300',endColorstr='#ff558000',GradientType=0);border-color:#558000 #558000 #230;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#558000;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#558000;*background-color:#460}.btn-success:active,.btn-success.active{background-color:#334d00 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#993dc7;background-image:-moz-linear-gradient(top,#a347d1,#8a2eb8);background-image:-webkit-gradient(linear,0 0,0 100%,from(#a347d1),to(#8a2eb8));background-image:-webkit-linear-gradient(top,#a347d1,#8a2eb8);background-image:-o-linear-gradient(top,#a347d1,#8a2eb8);background-image:linear-gradient(to bottom,#a347d1,#8a2eb8);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffa347d1',endColorstr='#ff8a2eb8',GradientType=0);border-color:#8a2eb8 #8a2eb8 #5c1f7a;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#8a2eb8;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#8a2eb8;*background-color:#7a29a3}.btn-info:active,.btn-info.active{background-color:#6b248f \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#080808;background-image:-moz-linear-gradient(top,#0d0d0d,#000);background-image:-webkit-gradient(linear,0 0,0 100%,from(#0d0d0d),to(#000));background-image:-webkit-linear-gradient(top,#0d0d0d,#000);background-image:-o-linear-gradient(top,#0d0d0d,#000);background-image:linear-gradient(to bottom,#0d0d0d,#000);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0d0d0d',endColorstr='#ff000000',GradientType=0);border-color:#000 #000 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#000;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#000;*background-color:#000}.btn-inverse:active,.btn-inverse.active{background-color:#000 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{border-color:transparent;cursor:pointer;color:#f2f2f2;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#fff;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#303030;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*zoom:1;font-size:0;vertical-align:middle;white-space:nowrap;*margin-left:.3em}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{font-size:0;margin-top:10px;margin-bottom:10px}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-bottomleft:3px;border-bottom-left-radius:3px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,.125),inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,.125),inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(255,255,255,.125),inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);*padding-top:5px;*padding-bottom:5px}.btn-group>.btn-mini+.dropdown-toggle{padding-left:5px;padding-right:5px;*padding-top:2px;*padding-bottom:2px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{padding-left:12px;padding-right:12px;*padding-top:7px;*padding-bottom:7px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.btn-group.open .btn.dropdown-toggle{background-color:#868988}.btn-group.open .btn-primary.dropdown-toggle{background-color:#1dade2}.btn-group.open .btn-warning.dropdown-toggle{background-color:#e67a00}.btn-group.open .btn-danger.dropdown-toggle{background-color:#b30000}.btn-group.open .btn-success.dropdown-toggle{background-color:#558000}.btn-group.open .btn-info.dropdown-toggle{background-color:#8a2eb8}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#000}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-left-width:5px;border-right-width:5px;border-top-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-left:0;margin-top:-1px}.btn-group-vertical>.btn:first-child{-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#bbbfc2;border:1px solid transparent;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.alert,.alert h4{color:#a47e3c}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{background-color:#bbbfc2;border-color:#aeb4b6;color:#468847}.alert-success h4{color:#468847}.alert-danger,.alert-error{background-color:#bbbfc2;border-color:#b3b9bb;color:#b94a48}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{background-color:#bbbfc2;border-color:#a8afb1;color:#09c}.alert-info h4{color:#09c}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-left:0;margin-bottom:20px;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#bbbfc2}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#adafae;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-left:15px;padding-right:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#f2f2f2}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";line-height:0}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#bbbfc2 #bbbfc2 #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#bbb;background-color:#161616;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#f2f2f2}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{border-color:#ddd;z-index:2}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{border-top-color:#f2f2f2;border-bottom-color:#f2f2f2;margin-top:6px}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#bbb;border-bottom-color:#bbb}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#adafae;border-color:#adafae}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#adafae}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;content:"";line-height:0}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-bottom-color:transparent;border-top-color:#ddd}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#bbbfc2 #ddd #bbbfc2 #bbbfc2}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#bbbfc2 #bbbfc2 #bbbfc2 #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#adafae}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;background-color:transparent;cursor:default}.navbar{overflow:visible;margin-bottom:20px;*position:relative;*z-index:2}.navbar-inner{min-height:50px;padding-left:20px;padding-right:20px;background-color:#1f1f1f;background-image:-moz-linear-gradient(top,#1f1f1f,#1f1f1f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#1f1f1f),to(#1f1f1f));background-image:-webkit-linear-gradient(top,#1f1f1f,#1f1f1f);background-image:-o-linear-gradient(top,#1f1f1f,#1f1f1f);background-image:linear-gradient(to bottom,#1f1f1f,#1f1f1f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff1f1f1f',endColorstr='#ff1f1f1f',GradientType=0);border:1px solid #000;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065);*zoom:1}.navbar-inner:before,.navbar-inner:after{display:table;content:"";line-height:0}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{float:left;display:block;padding:15px 20px 15px;margin-left:-20px;font-size:20px;font-weight:200;color:#adafae;text-shadow:0 1px 0 #1f1f1f}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:50px;color:#adafae}.navbar-link{color:#adafae}.navbar-link:hover,.navbar-link:focus{color:#fff}.navbar .divider-vertical{height:50px;margin:0 9px;border-left:1px solid #1f1f1f;border-right:1px solid #1f1f1f}.navbar .btn,.navbar .btn-group{margin-top:10px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;content:"";line-height:0}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:10px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:10px;margin-bottom:0}.navbar-search .search-query{margin-bottom:0;padding:4px 14px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,.1);box-shadow:0 1px 10px rgba(0,0,0,.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,.1);box-shadow:0 -1px 10px rgba(0,0,0,.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:15px 15px 15px;color:#adafae;text-decoration:none;text-shadow:0 1px 0 #1f1f1f}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{background-color:transparent;color:#fff;text-decoration:none}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#fff;text-decoration:none;background-color:#1f1f1f;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#121212;background-image:-moz-linear-gradient(top,#121212,#121212);background-image:-webkit-gradient(linear,0 0,0 100%,from(#121212),to(#121212));background-image:-webkit-linear-gradient(top,#121212,#121212);background-image:-o-linear-gradient(top,#121212,#121212);background-image:linear-gradient(to bottom,#121212,#121212);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff121212',endColorstr='#ff121212',GradientType=0);border-color:#121212 #121212 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#121212;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#121212;*background-color:#050505}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#000 \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,0.2);position:absolute;top:-7px;left:9px}.navbar .nav>li>.dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #303030;position:absolute;top:-6px;left:10px}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{border-top:7px solid #ccc;border-top-color:rgba(0,0,0,0.2);border-bottom:0;bottom:-7px;top:auto}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{border-top:6px solid #303030;border-bottom:0;bottom:-6px;top:auto}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{background-color:#1f1f1f;color:#fff}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#adafae;border-bottom-color:#adafae}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{left:auto;right:0}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{left:auto;right:12px}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{left:auto;right:13px}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{left:auto;right:100%;margin-left:0;margin-right:-1px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#252a30;background-image:-moz-linear-gradient(top,#252a30,#252a30);background-image:-webkit-gradient(linear,0 0,0 100%,from(#252a30),to(#252a30));background-image:-webkit-linear-gradient(top,#252a30,#252a30);background-image:-o-linear-gradient(top,#252a30,#252a30);background-image:linear-gradient(to bottom,#252a30,#252a30);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff252a30',endColorstr='#ff252a30',GradientType=0);border-color:transparent}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#adafae;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#adafae}.navbar-inverse .navbar-text{color:#adafae}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{background-color:#242a31;color:#fff}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#242a31}.navbar-inverse .navbar-link{color:#adafae}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-left-color:#252a30;border-right-color:#252a30}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{background-color:#242a31;color:#fff}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#adafae;border-bottom-color:#adafae}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#5d6978;border-color:#252a30;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1),0 1px 0 rgba(255,255,255,.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1),0 1px 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.1),0 1px 0 rgba(255,255,255,.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#fff}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#fff}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#fff}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#303030;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15);outline:0}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#1a1d22;background-image:-moz-linear-gradient(top,#1a1d22,#1a1d22);background-image:-webkit-gradient(linear,0 0,0 100%,from(#1a1d22),to(#1a1d22));background-image:-webkit-linear-gradient(top,#1a1d22,#1a1d22);background-image:-o-linear-gradient(top,#1a1d22,#1a1d22);background-image:linear-gradient(to bottom,#1a1d22,#1a1d22);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff1a1d22',endColorstr='#ff1a1d22',GradientType=0);border-color:#1a1d22 #1a1d22 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#1a1d22;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#1a1d22;*background-color:#0f1113}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#040405 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.breadcrumb>li{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 0 #fff}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#adafae}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;*zoom:1;margin-left:0;margin-bottom:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#161616;border:1px solid transparent;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#33b5e5}.pagination ul>.active>a,.pagination ul>.active>span{color:#adafae;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#adafae;background-color:transparent;cursor:default}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-bottomleft:3px;border-bottom-left-radius:3px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-top-left-radius:2px;-moz-border-radius-topleft:2px;border-top-left-radius:2px;-webkit-border-bottom-left-radius:2px;-moz-border-radius-bottomleft:2px;border-bottom-left-radius:2px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:2px;-moz-border-radius-topright:2px;border-top-right-radius:2px;-webkit-border-bottom-right-radius:2px;-moz-border-radius-bottomright:2px;border-bottom-right-radius:2px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;list-style:none;text-align:center;*zoom:1}.pager:before,.pager:after{display:table;content:"";line-height:0}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#adafae;background-color:#fff;cursor:default}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:absolute;z-index:1050;width:100%;background-color:#fff;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;outline:0}.modal.fade{-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out;top:-25%}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;overflow-y:auto;padding:15px}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;*zoom:1}.modal-footer:before,.modal-footer:after{display:table;content:"";line-height:0}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1020;display:block;visibility:visible;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#303030;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.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:#303030}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#303030}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#303030}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#303030}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#303030;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:normal;line-height:18px;background-color:#303030;border-bottom:1px solid #232323;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#303030}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right .arrow:after{left:1px;bottom:-10px;border-left-width:0;border-right-color:#303030}.popover.bottom .arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#303030}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left .arrow:after{right:1px;border-right-width:0;border-left-color:#303030;bottom:-10px}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;content:"";line-height:0}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#f2f2f2;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px;color:#bbb}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;vertical-align:baseline;white-space:nowrap;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#adafae}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-left:9px;padding-right:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f80}.label-warning[href],.badge-warning[href]{background-color:#cc6d00}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#09c}.label-info[href],.badge-info[href]{background-color:#007399}.label-inverse,.badge-inverse{background-color:#303030}.label-inverse[href],.badge-inverse[href]{background-color:#161616}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.progress .bar{width:0;height:100%;color:#fff;float:left;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,.15),inset 0 -1px 0 rgba(0,0,0,.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,.15),inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 1px 0 0 rgba(0,0,0,.15),inset 0 -1px 0 rgba(0,0,0,.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#ff9d2e;background-image:-moz-linear-gradient(top,#ffac4d,#f80);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ffac4d),to(#f80));background-image:-webkit-linear-gradient(top,#ffac4d,#f80);background-image:-o-linear-gradient(top,#ffac4d,#f80);background-image:linear-gradient(to bottom,#ffac4d,#f80);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffac4d',endColorstr='#ffff8800',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#ffac4d;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{overflow:hidden;width:100%;position:relative}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#1f1f1f;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{left:auto;right:15px}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;left:0;right:0;bottom:0;padding:15px;background:#303030;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{color:#fff;line-height:20px}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#303030;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;color:inherit;letter-spacing:-1px}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}label,input,button,select,textarea,.navbar .search-query:-moz-placeholder,.navbar .search-query::-webkit-input-placeholder{font-family:'Droid Sans',sans-serif;color:#bbb}blockquote{border-left:5px solid #303030}blockquote.pull-right{border-right:5px solid #303030}html{min-height:100%}body{min-height:100%;background:#161616}.page-header{border-bottom:1px solid #303030}hr{border-bottom:0}.navbar .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar .brand{padding:15px 20px 15px;color:#bbbfc2;font-weight:normal;text-shadow:none}.navbar .nav>li>a{padding:15px 15px 14px;border-bottom:1px solid transparent}.navbar .nav>li>a:hover,.navbar .nav>.active>a,.navbar .nav>.active>a:hover{border-bottom:1px solid #33b5e5}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar .navbar-text{margin-bottom:1px;padding:15px 15px 14px;line-height:inherit}.navbar .divider-vertical{margin:0;border-left:1px solid #303030;border-right-width:0}.navbar .search-query,.navbar .search-query:focus,.navbar .search-query.focused{-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;background-color:#303030;line-height:normal;color:#adafae;text-shadow:none}.navbar .search-query:-moz-placeholder,.navbar .search-query:focus:-moz-placeholder,.navbar .search-query.focused:-moz-placeholder{color:#bbb}.navbar .search-query:-ms-input-placeholder,.navbar .search-query:focus:-ms-input-placeholder,.navbar .search-query.focused:-ms-input-placeholder{color:#bbb}.navbar .search-query::-webkit-input-placeholder,.navbar .search-query:focus::-webkit-input-placeholder,.navbar .search-query.focused::-webkit-input-placeholder{color:#bbb}@media(max-width:979px){.navbar .nav-collapse .nav li>a{border:0;color:#bbbfc2;font-weight:normal;text-shadow:none}.navbar .nav-collapse .nav li>a:hover{border:0;background-color:#33b5e5}.navbar .nav-collapse .nav .active>a{border:0;background-color:#33b5e5}.navbar .nav-collapse .dropdown-menu a:hover{background-color:#33b5e5}.navbar .nav-collapse .navbar-form,.navbar .nav-collapse .navbar-search{border-top:0;border-bottom:0}.navbar .nav-collapse .nav-header{color:rgba(128,128,128,0.6)}.navbar-inverse .nav-collapse .nav li>a:hover{background-color:#111}.navbar-inverse .nav-collapse .nav .active>a{background-color:#111}.navbar-inverse .nav-collapse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav-collapse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav-collapse .nav li.dropdown.open.active>.dropdown-toggle{background-color:#111}}.dropdown-menu{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}div.subnav{margin:0 1px;background-color:#1f1f1f;background-image:none;border:0;border-bottom:1px solid #303030}div.subnav .nav>li>a,div.subnav .nav>li:first-child>a,div.subnav .nav>li:first-child>a:hover{padding:11px 12px;border:0;background-color:#1f1f1f;color:#adafae}div.subnav .nav>li>a:hover,div.subnav .nav>li.active>a,div.subnav .nav>li.active>a:hover,div.subnav .nav>li:first-child>a:hover{padding:11px 12px;background:transparent;border:0;border-bottom:1px solid #33b5e5;color:#fff}div.subnav .nav li.nav-header{text-shadow:none}div.subnav-fixed{top:50px;margin:0}.nav-tabs{border-bottom:1px solid #303030}.nav-tabs>li>a{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs li>a:hover,.nav-tabs li.active>a,.nav-tabs li.active>a:hover{border-color:transparent;background-color:#33b5e5;color:#fff}.nav-tabs li.disabled>a{color:#bbbfc2}.nav-tabs .open .dropdown-toggle{background-color:#060606;border-color:transparent}.nav-pills li>a:hover{background-color:#33b5e5;color:#fff}.nav-pills li.disabled>a{color:#bbbfc2}.nav-pills .open .dropdown-toggle{background-color:#060606}.nav-pills .dropdown-menu li>a:hover{border:0}.nav-list li>a{text-shadow:none}.nav-list li>a:hover{background-color:#33b5e5;color:#fff}.nav-list .nav-header{text-shadow:none}.nav-list .divider{background-color:transparent;border-bottom:1px solid #303030}.nav-stacked li>a{border:1px solid #303030!important}.nav-stacked li>a:hover,.nav-stacked li.active>a{background-color:#33b5e5;color:#fff}.tabbable .nav-tabs,.tabbable .nav-tabs li.active>a{border-color:#303030}.breadcrumb{background-color:transparent;background-image:none;border-width:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;font-size:14px}.breadcrumb li{text-shadow:none}.breadcrumb li>a{color:#33b5e5;text-shadow:none}.pagination ul{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>span,.pagination ul>.disabled>span:hover{background-color:rgba(0,0,0,0.2)}.pager li>a,.pager li>span{background-color:#161616;border:0}.pager li>a:hover,.pager li>span:hover{background-color:#33b5e5}.pager .disabled a,.pager .disabled a:hover{background-color:#161616}.btn{padding:5px 12px;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;text-shadow:none}.btn.disabled{box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-large{padding:22px 30px}.btn-small{padding:2px 10px}.btn-mini{padding:2px 6px}.btn-group>.btn:first-child,.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.dropdown-toggle{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}input,textarea,select{border-width:2px;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{color:#adafae}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly],.uneditable-input{border-color:#444}input:focus,textarea:focus,input.focused,textarea.focused{border-color:#52a8ec;outline:0;outline:thin dotted \9}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus,select:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}legend,label{color:#bbbfc2;border-bottom:0 solid #222}.form-actions{border-top:1px solid #222}.table{-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.table tbody tr.success td{background-color:#690;color:#fff}.table tbody tr.error td{background-color:#c00;color:#fff}.table tbody tr.info td{background-color:#33b5e5;color:#fff}.alert,.alert .alert-heading,.alert-success,.alert-success .alert-heading,.alert-danger,.alert-error,.alert-danger .alert-heading,.alert-error .alert-heading,.alert-info,.alert-info .alert-heading{color:#bbbfc2;text-shadow:none;border:0}.label{color:#bbbfc2}.badge{border-radius:0;font-weight:200}.label,.alert{background-color:#888}.label:hover{background-color:#6e6e6e}.label-important,.alert-danger,.alert-error{background-color:#c00}.label-important:hover{background-color:#900}.label-warning{background-color:#cc6d00}.label-warning:hover{background-color:#995200}.label-success,.alert-success{background-color:#5c8a00}.label-success:hover{background-color:#3a5700}.label-info,.alert-info{background-color:#007399}.label-info:hover{background-color:#004d66}a:hover{text-decoration:none}.well,.hero-unit{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.well,.hero-unit{border-top:solid 1px #3d3d3d;-webkit-box-shadow:0 2px 4px rgba(0,0,0,0.8);-moz-box-shadow:0 2px 4px rgba(0,0,0,0.8);box-shadow:0 2px 4px rgba(0,0,0,0.8)}.thumbnail{border-color:#303030}.progress{background-color:#060606;background-image:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.modal{-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;border-top:solid 1px #3d3d3d;background-color:#303030}.modal-header{border-bottom:1px solid #303030}.modal-footer{background-color:#303030;border-top:1px solid #303030;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.popover{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.popover-title{border-bottom:0;color:#fff}.footer{border-top:1px solid #303030}@media(max-width:767px){div.panel{width:100%!important;padding:0!important}}.container-fluid{padding-left:0;padding-right:0}.container.grafana-container{padding:5px 10px;width:100%;box-sizing:border-box}.bgNav{background:#1f1f1f}.bgPrimary{background:#4abde8;color:rgba(255,255,255,0.9)}.bgInfo{background:#a347d1;color:rgba(255,255,255,0.9)}.bgSuccess{background:#77b300;color:rgba(255,255,255,0.9)}.bgWarning{background:#ff941a;color:rgba(255,255,255,0.9)}.bgDanger{background:#e60000;color:rgba(255,255,255,0.9)}.bgInverse{background:#0d0d0d;color:rgba(255,255,255,0.9)}code,pre{background-color:#bbbfc2}.panel{display:inline-table;vertical-align:top}.panel-container{padding:0;background:#1f1f1f;margin:5px}.panel-content{padding:0 10px 5px 10px}.panel-title{border:0;font-weight:bold}.panel-loading{position:absolute;top:0;right:4px;z-index:800}.panel div.panel-extra div.panel-extra-container{margin-right:-10px;margin-top:3px;text-align:center}.panel div.panel-extra div.panel-extra-container ul{text-align:left}.panel div.panel-extra{font-size:.9em;margin-bottom:0}.panel div.panel-extra .extra{float:right!important}.panel-error{color:#fff;padding:5px 10px 0 10px}.panel-error-inspector-link{float:right;margin-right:10px}div.editor-row{vertical-align:top}div.editor-row div.section{margin-right:20px;vertical-align:top;display:inline-block}div.editor-option{vertical-align:top;display:inline-block;margin-right:10px}div.editor-option label{display:block}#events{font-size:12px}.version{font-size:85%}.legend{color:#000}div.fake-input{background-color:#4a4a4a;border:1px solid #636363;-webkit-border-radius:3px 3px 3px 3px;-moz-border-radius:3px 3px 3px 3px;border-radius:3px 3px 3px 3px}hr.small{margin:5px 0}form input.ng-invalid{color:#b94a48}.editor-title{margin-right:10px;font-size:1.7em;font-weight:bold;text-transform:capitalize}.editor-title small{opacity:.5;font-size:.7em;font-weight:normal}.bordered{border:1px solid #303030}.table-unpadded th,.table-unpadded td{padding:0 2px}.spy{position:absolute;right:0;top:0}.navbar-inner{border-width:0}.kibana-row{margin-bottom:5px}.row-tab .dropdown-menu-right{top:0;left:33px}.row-tab-button{padding:0;cursor:pointer;vertical-align:middle;width:30px;height:30px;text-align:center;display:inline-block;line-height:30px}.row-button{width:30px;text-align:center;float:left;cursor:pointer}.row-text{white-space:nowrap;text-transform:uppercase;font-weight:bold;font-size:.9em;margin:0 10px}.row-close{padding:0;margin:0;min-height:30px!important;line-height:30px;background:#1f1f1f}.row-open{margin-top:5px;left:-34px;position:absolute;z-index:100;transition:.25s left;transition-delay:.25s;-webkit-transition-delay:.25s}.row-open:hover{left:-12px}.odd{background-color:rgba(100,100,100,0.3)}.nomargin{margin:0}[ng\:cloak],[ng-cloak],.ng-cloak{display:none!important}.table tbody+tbody{border-top:0}.ui-draggable-dragging{display:block;z-index:9999}.dragInProgress .panel-container{border:3px solid rgba(100,100,100,0.5)}.link{color:#f2f2f2;cursor:pointer}.link:hover{color:#fff}.pointer{cursor:pointer}.popover{max-width:480px}.modal{width:100%;top:0!important}.tiny{font-size:50%}.smaller{font-size:70%}.small{font-size:85%}.large{font-size:120%}.strong{font-weight:bold}a{cursor:pointer}.normal{font-weight:normal}.light{font-weight:200}.input-smaller{width:75px}.string{color:#c8ccce}.number{color:#00ace6}.boolean{color:#b78c43}.key{color:#c05c5a}.btn-active{background-color:#e6e6e6;background-image:none;box-shadow:0 2px 4px rgba(0,0,0,0.15) inset,0 1px 2px rgba(0,0,0,0.05);outline:0 none}.remove:hover{background-color:#b30000}.faded{opacity:.2}div.flot-text{color:#bbbfc2!important}.dashboard-notice{z-index:8000;margin-left:0;padding:3px 0 3px 0;width:100%;padding-left:20px;color:#fff}.alert-warning{background-color:#bbbfc2;border-color:transparent;color:#a47e3c}.popover.topLeft{margin-top:-10px}.popover.topLeft .arrow{bottom:-10px;left:25%;margin-left:-10px;border-width:10px 10px 0;border-top-color:#303030}.popover.topLeft .arrow:after{border-width:11px 11px 0;border-top-color:rgba(0,0,0,0.25);bottom:-1px;left:-11px}.popover.topRight{margin-top:-10px}.popover.topRight .arrow{bottom:-10px;left:75%;margin-left:-10px;border-width:10px 10px 0;border-top-color:#303030}.popover.topRight .arrow:after{border-width:11px 11px 0;border-top-color:rgba(0,0,0,0.25);bottom:-1px;left:-11px}.popover.rightTop .arrow{top:10%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.rightTop .arrow:after{left:1px;bottom:-10px;border-left-width:0;border-right-color:#303030}.popover.rightBottom .arrow{top:90%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.rightBottom .arrow:after{left:1px;bottom:-10px;border-left-width:0;border-right-color:#303030}.popover.bottomLeft .arrow{left:10%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottomLeft .arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#303030}.popover.bottomRight .arrow{left:90%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottomRight .arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#303030}.popover.leftTop .arrow{top:10%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.leftTop .arrow:after{right:1px;border-right-width:0;border-left-color:#303030;bottom:-10px}.popover.leftBottom .arrow{top:90%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.leftBottom .arrow:after{right:1px;border-right-width:0;border-left-color:#303030;bottom:-10px}.popover.topLeft .arrow{left:10%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.topLeft .arrow:after{bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#303030}.popover.topRight .arrow{left:90%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.topRight .arrow:after{bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#303030}.label-tag{background-color:#93c;color:#f2f2f2}.label-tag:hover{background-color:#7a29a3;color:#fff}.annotation-editor-table td{white-space:nowrap}.save-dashboard-dropdown{padding:10px}.save-dashboard-dropdown li>a{padding-left:5px}.save-dashboard-dropdown-save-form{margin-bottom:5px}.inspector-request-table td{padding:5px}.inspector-request-table td:first-child{white-space:nowrap}code,pre{background-color:#1f1f1f;color:#bbbfc2}.submenu-controls{background:#292929;font-size:inherit}.submenu-controls label{margin:0;padding-right:4px;display:inline}.submenu-controls input[type=checkbox]{margin:0}.submenu-controls-visible:not(.hide-controls) .panel-fullscreen{top:82px}.submenu-panel{padding:0 4px 0 8px;border-right:1px solid #202020;float:left}.submenu-panel:first-child{padding-left:17px}.submenu-panel-title{float:left;text-transform:uppercase;padding:4px 10px 3px 0}.submenu-panel-wrapper{float:left}.submenu-toggle{padding:4px 0 3px 8px;float:left}.submenu-toggle .annotation-color-icon{position:relative;top:2px}.submenu-toggle:first-child{padding-left:0}.submenu-control-edit{padding:4px 4px 3px 8px;float:right;border-left:1px solid #202020;margin-left:8px}.annotation-disabled,.annotation-disabled a{color:#788086}.filtering-container{float:left}.filtering-container label{float:left}.filtering-container input[type=checkbox]{margin:0}.filter-panel-filter{display:inline-block;vertical-align:top;padding:4px 10px 3px 10px;border-right:1px solid #202020}.filter-panel-filter:first-child{padding-left:0}.filter-panel-filter ul{margin-bottom:0}.filter-deselected{opacity:.5}.filtering-container .filter-action{float:right;padding-right:2px;margin-bottom:0!important;margin-left:0;margin-top:4px}.add-filter-action{padding:3px 5px 0 5px;position:relative;top:4px}.filter-mandate{text-decoration:underline;cursor:pointer}.filter-apply{float:right}.graph-canvas-wrapper{position:relative}.graph-legend{margin:0 20px;text-align:left;position:relative;top:2px}.graph-legend .popover-content{padding:0}.graph-legend-icon{position:relative;top:2px}.graph-legend-series,.graph-legend-icon,.graph-legend-alias,.graph-legend-value{display:inline-block;white-space:nowrap}.graph-legend-series{padding-left:10px}.graph-legend-value{padding-left:6px}.graph-legend-table{display:table}.graph-legend-table .graph-legend-series{display:table-row;padding-left:0}.graph-legend-table .graph-legend-series.pull-right{float:none}.graph-legend-table .graph-legend-series.pull-right .graph-legend-alias::after{content:'y\00B2'}.graph-legend-table .graph-legend-alias{display:table-cell;white-space:nowrap}.graph-legend-table .graph-legend-icon{display:table-cell;white-space:nowrap;padding:0 4px}.graph-legend-table .graph-legend-value{display:table-cell;white-space:nowrap;padding-left:15px}.graph-legend-rightside.graph-wrapper{display:table;width:100%}.graph-legend-rightside .graph-canvas-wrapper{display:table-cell;width:100%;position:relative}.graph-legend-rightside .graph-legend-wrapper{display:table-cell;vertical-align:top;position:relative;left:-4px}.graph-legend-rightside .graph-legend{margin:0}.graph-legend-rightside .graph-legend-series{display:block;padding-left:0}.graph-legend-rightside .graph-legend-table .graph-legend-series{display:table-row}.graph-legend-series-hidden a{color:#7f7f7f}.graph-legend-popover{width:200px}.graph-legend-popover label{display:inline-block}.graph-legend-popover .btn{padding:1px 3px;margin-right:0;line-height:initial}.graph-legend-popover .close{margin-right:5px;color:#f2f2f2;opacity:.7;text-shadow:none}.graph-legend-popover .editor-row{padding:5px}.bootstrap-tagsinput{display:inline-block;padding:4px 6px;margin-bottom:10px;color:#555;vertical-align:middle;border-radius:4px;max-width:100%;line-height:22px;background-color:#4a4a4a;border:1px solid #636363;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}.bootstrap-tagsinput input{border:0;box-shadow:none;outline:0;background-color:transparent;padding:0;padding-left:5px;margin:0;width:auto!important;max-width:inherit}.bootstrap-tagsinput input:focus{border:0;box-shadow:none}.bootstrap-tagsinput .tag{margin-right:2px;color:white}.bootstrap-tagsinput .tag [data-role="remove"]{margin-left:8px;cursor:pointer}.bootstrap-tagsinput .tag [data-role="remove"]:after{content:"x";padding:0 2px}.bootstrap-tagsinput .tag [data-role="remove"]:hover{box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.bootstrap-tagsinput .tag [data-role="remove"]:hover:active{box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.hide-controls{padding:0}.hide-controls .grafana-row{display:none}.hide-controls .submenu-controls{display:none}.hide-controls .add-row-panel-hint{display:none}.playlist-active .grafana-menu-zoom-out,.playlist-active .grafana-menu-save,.playlist-active .grafana-menu-load,.playlist-active .add-row-panel-hint,.playlist-active .grafana-menu-home,.playlist-active .grafana-menu-refresh,.playlist-active .grafana-menu-edit{display:none}.playlist-active .grafana-menu-stop-playlist{display:list-item}.grafana-search-panel{padding:6px 10px}.grafana-search-panel .search-field-wrapper input{width:100%}.grafana-search-panel .search-field-wrapper button{margin:0 2px 0 0}.grafana-search-panel .search-field-wrapper>span{display:block;overflow:hidden;padding-right:25px}.grafana-search-panel .selected td,.grafana-search-panel tr.selected:nth-child(odd)>td{background:#33b5e5;color:white;text-shadow:-1px -1px 1px rgba(0,0,0,0.3)}.grafana-search-panel .selected td a,.grafana-search-panel tr.selected:nth-child(odd)>td a{color:white}.grafana-search-panel .selected-tag .label-tag{background-color:#33b5e5}.search-tagview-switch{position:absolute;top:15px;right:263px;color:#a6a6a6}.search-tagview-switch.active{color:#f2f2f2}.row-button{width:24px}.modal{margin:5%;width:90%}.grafana-search-metric-actions{visibility:hidden;padding-left:20px}.grafana-search-metric-name{white-space:nowrap}.grafana-search-metric-result:hover .grafana-search-metric-actions{visibility:visible}.grafana-search-metric-result:hover .grafana-search-metric-name{color:#33b5e5}.yaxisLabel{top:50%;left:-20px;transform:rotate(-90deg);-o-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-webkit-transform:rotate(-90deg);transform-origin:0 0;-o-transform-origin:0 0;-ms-transform-origin:0 0;-moz-transform-origin:0 0;-webkit-transform-origin:0 0}.axisLabel{color:#bbbfc2;font-size:11.9px;position:absolute;text-align:center;font-size:12px}.panel-fullscreen{z-index:100;display:block!important;position:fixed;left:0;right:0;top:54px;padding:0 10px;background:#1f1f1f;overflow-y:scroll;height:100%}.panel-fullscreen .panel-content{padding-bottom:130px}.dashboard-fullscreen .container-fluid.main{height:0;width:0;position:fixed;right:-10000px}.histogram-chart{position:relative}.panel-full-edit-tabs{margin-top:10px;min-height:250px;margin-left:-10px;margin-right:-10px;background-color:transparent;border-top:1px solid #000}.panel-full-edit-tabs .tabs .nav-tabs{margin:0;background:#303030;border-top:1px solid #555}.panel-full-edit-tabs .tabs .tab-content{display:none}.panel-full-edit-tabs .tab-content{overflow:visible;padding:15px}.panel-full-edit-tabs .nav-tabs>li>a{line-height:15px;padding-top:6px;padding-bottom:6px;font-size:.8rem}.grafana-target:last-child{border-bottom:1px solid #000}.grafana-target-inner{border-top:1px solid #000;border-left:1px solid #000;border-right:1px solid #000;background:#303030;width:100%}.grafana-target-onoff{padding:5px 7px;display:inline-block}.grafana-segment-list{list-style:none;margin:0;margin-right:90px;margin-left:30px}.grafana-segment-list>li{float:left}.grafana-segment-dropdown-menu{margin-bottom:70px}.grafana-target-segment{padding:8px 7px;font-weight:normal;border-right:1px solid #050505;color:#c8c8c8;display:inline-block}.has-open-function .grafana-target-segment{padding-top:25px}.grafana-target-hidden .grafana-target-segment{color:#888}.grafana-target-segment:hover,.grafana-target-segment:focus{text-decoration:none}.grafana-target-segmenta:hover{background:#444}.grafana-target-function{background:#444}.grafana-target-function>a{color:#c8c8c8}.grafana-target-function>a:hover{color:#f2f2f2}.grafana-target-function.show-function-controls{padding-top:5px;min-width:100px;text-align:center}input[type=text].grafana-function-param-input{background:transparent;border:0;margin:0;padding:0}.grafana-target-controls-left{list-style:none;float:left;width:30px;margin:0}.grafana-target-controls{width:120px;float:right;list-style:none;margin:0;text-align:right}.grafana-target-controls>li{display:inline-block;white-space:nowrap}.grafana-target-controls a{padding:8px 7px;position:relative;top:8px;color:#c8c8c8;font-size:16px}.grafana-target-hidden .grafana-target-controls a{color:#888}.grafana-target-controls a:hover,.grafana-target-controls a:focus{text-decoration:none}input[type=text].grafana-target-text-input{padding:8px 7px;border:0;margin:0;background:transparent;float:left;color:#c8c8c8;border-radius:0}input[type=text].grafana-target-segment-input{border:0;border-right:1px solid #050505;margin:0;border-radius:0;padding:8px 4px}input[type=checkbox].grafana-target-option-checkbox{margin:0}select.grafana-target-segment-input{border:0;border-right:1px solid #050505;margin:0;border-radius:0;height:36px;padding:8px 5px}.grafana-target .dropdown{padding:0;margin:0}.graphite-func-controls{display:none;text-align:center}.graphite-func-controls .icon-arrow-left{float:left;position:relative;top:2px}.graphite-func-controls .icon-arrow-right{float:right;position:relative;top:2px}.graphite-func-controls .icon-remove{margin-left:10px}.grafana-target .popover-content{padding:0}.scrollable{max-height:300px;overflow:auto}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar:hover{height:8px}::-webkit-scrollbar-button:start:decrement,::-webkit-scrollbar-button:end:increment{display:none}::-webkit-scrollbar-button:horizontal:decrement{display:none}::-webkit-scrollbar-button:horizontal:increment{display:none}::-webkit-scrollbar-button:vertical:decrement{display:none}::-webkit-scrollbar-button:vertical:increment{display:none}::-webkit-scrollbar-button:horizontal:decrement:active{background-image:none}::-webkit-scrollbar-button:horizontal:increment:active{background-image:none}::-webkit-scrollbar-button:vertical:decrement:active{background-image:none}::-webkit-scrollbar-button:vertical:increment:active{background-image:none}::-webkit-scrollbar-track-piece{background-color:grayDark}::-webkit-scrollbar-thumb:vertical{height:50px;background:-webkit-gradient(linear,left top,right top,color-stop(0%,#3a3a3a),color-stop(100%,#222));border:1px solid #0d0d0d;border-top:1px solid #666;border-left:1px solid #666}::-webkit-scrollbar-thumb:horizontal{width:50px;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#3a3a3a),color-stop(100%,#222));border:1px solid #1f1f1f;border-top:1px solid #666;border-left:1px solid #666}.sp-replacer{background:inherit;border:0;color:inherit}.sp-replacer:hover,.sp-replacer.sp-active{border-color:inherit;color:inherit}.sp-container{border-radius:0;background-color:#303030;border:0;padding:0}.sp-palette-container,.sp-picker-container{border:0}.sp-dd{display:none}.sp-preview{position:relative;width:15px;height:15px;border:0;margin-right:5px;float:left;z-index:0}.datapoints-warning{pointer:none;position:absolute;top:50%;left:50%;z-index:10;margin-top:-50px;margin-left:-100px;width:200px;text-align:center;cursor:auto;padding:10px}.grafana-version-footer{padding-top:15px;text-align:left}.metrics-editor-help:hover .hide{display:block}.grafana-tooltip{position:absolute;top:-1000;left:0;color:#c8c8c8;padding:10px;font-size:11pt;font-weight:200;background-color:#3a3939;border-radius:5px;z-index:9999} \ No newline at end of file diff --git a/src/css/bootstrap.light.min.css b/src/css/bootstrap.light.min.css index e5c56b8b946..a86fd64a307 100644 --- a/src/css/bootstrap.light.min.css +++ b/src/css/bootstrap.light.min.css @@ -6,4 +6,4 @@ * http://www.apache.org/licenses/LICENSE-2.0 * * Designed and built with all the love in the world by @mdo and @fat. - */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:"";line-height:0}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{max-width:100%;width:auto\9;height:auto;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{text-shadow:none!important;color:#000!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#555;background-color:#eee}a{color:#01a6e6;text-decoration:none}a:hover,a:focus{color:#0181b3;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;content:"";line-height:0}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.127659574468085%;*margin-left:2.074468085106383%}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;content:"";line-height:0}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;content:"";line-height:0}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover,a.muted:focus{color:#808080}.text-warning{color:#ff934b}a.text-warning:hover,a.text-warning:focus{color:#ff7518}.text-error{color:#ff7169}a.text-error:hover,a.text-error:focus{color:#ff4136}.text-info{color:#af78ca}a.text-info:hover,a.text-info:focus{color:#9954bb}.text-success{color:#3dd441}a.text-success:hover,a.text-success:focus{color:#28b62c}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:#222;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;*zoom:1;padding-left:5px;padding-right:5px}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;content:"";line-height:0}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;white-space:nowrap}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#020202;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;vertical-align:middle}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #999;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(82,168,236,.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(82,168,236,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(82,168,236,.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;*margin-top:0;margin-top:1px \9;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;border:1px solid #999;background-color:#fff}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;background-color:#fcfcfc;border-color:#999;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);cursor:not-allowed}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#555}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#555}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#555}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;content:"";line-height:0}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#ff934b}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#ff934b}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#ff934b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#ff7518;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffd0b1;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffd0b1;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffd0b1}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#ff934b;background-color:#ff7518;border-color:#ff934b}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#ff7169}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#ff7169}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#ff7169;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#ff4136;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffd2cf;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffd2cf;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffd2cf}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#ff7169;background-color:#ff4136;border-color:#ff7169}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#3dd441}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#3dd441}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#3dd441;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#28b62c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #90e793;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #90e793;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #90e793}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#3dd441;background-color:#28b62c;border-color:#3dd441}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#af78ca}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#af78ca}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#af78ca;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#9954bb;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dac1e7;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dac1e7;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dac1e7}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#af78ca;background-color:#9954bb;border-color:#af78ca}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;content:"";line-height:0}.form-actions:after{clear:both}.help-block,.help-inline{color:#7b7b7b}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding-left:5px}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;vertical-align:middle;font-size:0;white-space:nowrap}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#90e793;border-color:#28b62c}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;*zoom:1;margin-bottom:0;vertical-align:middle}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";line-height:0}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#eee}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:3px;-moz-border-radius-bottomleft:3px;border-bottom-left-radius:3px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;-moz-border-radius-bottomright:0;border-bottom-right-radius:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#e8f8fd}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#28b62c}.table tbody tr.error>td{background-color:#ff4136}.table tbody tr.warning>td{background-color:#ff7518}.table tbody tr.info>td{background-color:#9954bb}.table-hover tbody tr.success:hover>td{background-color:#23a127}.table-hover tbody tr.error:hover>td{background-color:#ff291c}.table-hover tbody tr.warning:hover>td{background-color:#fe6600}.table-hover tbody tr.info:hover>td{background-color:#8d46b0}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat;margin-top:1px}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{background-position:-216px -120px;width:16px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{background-position:-384px -120px;width:16px}.icon-folder-open{background-position:-408px -120px;width:16px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{text-decoration:none;color:#fff;background-color:#019fdc;background-image:-moz-linear-gradient(top,#01a6e6,#0194cd);background-image:-webkit-gradient(linear,0 0,0 100%,from(#01a6e6),to(#0194cd));background-image:-webkit-linear-gradient(top,#01a6e6,#0194cd);background-image:-o-linear-gradient(top,#01a6e6,#0194cd);background-image:linear-gradient(to bottom,#01a6e6,#0194cd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff01a6e6',endColorstr='#ff0194cd',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#019fdc;background-image:-moz-linear-gradient(top,#01a6e6,#0194cd);background-image:-webkit-gradient(linear,0 0,0 100%,from(#01a6e6),to(#0194cd));background-image:-webkit-linear-gradient(top,#01a6e6,#0194cd);background-image:-o-linear-gradient(top,#01a6e6,#0194cd);background-image:linear-gradient(to bottom,#01a6e6,#0194cd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff01a6e6',endColorstr='#ff0194cd',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:default}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#ccc;margin-top:5px;margin-right:-10px}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-left:20px;padding-right:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#eee;border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well-small{padding:9px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;*zoom:1;padding:4px 12px;margin-bottom:0;font-size:14px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#dfdfdf;background-image:-moz-linear-gradient(top,#eee,#c8c8c8);background-image:-webkit-gradient(linear,0 0,0 100%,from(#eee),to(#c8c8c8));background-image:-webkit-linear-gradient(top,#eee,#c8c8c8);background-image:-o-linear-gradient(top,#eee,#c8c8c8);background-image:linear-gradient(to bottom,#eee,#c8c8c8);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffeeeeee',endColorstr='#ffc8c8c8',GradientType=0);border-color:#c8c8c8 #c8c8c8 #a2a2a2;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#c8c8c8;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #bbb;*border:0;border-bottom-color:#a2a2a2;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#c8c8c8;*background-color:#bbb}.btn:active,.btn.active{background-color:#afafaf \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:22px 30px;font-size:17.5px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:2px 6px;font-size:10.5px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#02a9ea;background-image:-moz-linear-gradient(top,#03b8fe,#0194cd);background-image:-webkit-gradient(linear,0 0,0 100%,from(#03b8fe),to(#0194cd));background-image:-webkit-linear-gradient(top,#03b8fe,#0194cd);background-image:-o-linear-gradient(top,#03b8fe,#0194cd);background-image:linear-gradient(to bottom,#03b8fe,#0194cd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff03b8fe',endColorstr='#ff0194cd',GradientType=0);border-color:#0194cd #0194cd #015d80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#0194cd;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#0194cd;*background-color:#0181b3}.btn-primary:active,.btn-primary.active{background-color:#016f9a \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#fe781e;background-image:-moz-linear-gradient(top,#ff8432,#fe6600);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ff8432),to(#fe6600));background-image:-webkit-linear-gradient(top,#ff8432,#fe6600);background-image:-o-linear-gradient(top,#ff8432,#fe6600);background-image:linear-gradient(to bottom,#ff8432,#fe6600);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff8432',endColorstr='#fffe6600',GradientType=0);border-color:#fe6600 #fe6600 #b14700;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#fe6600;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#fe6600;*background-color:#e45c00}.btn-warning:active,.btn-warning.active{background-color:#cb5200 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ff463b;background-image:-moz-linear-gradient(top,#ff5950,#ff291c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ff5950),to(#ff291c));background-image:-webkit-linear-gradient(top,#ff5950,#ff291c);background-image:-o-linear-gradient(top,#ff5950,#ff291c);background-image:linear-gradient(to bottom,#ff5950,#ff291c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff5950',endColorstr='#ffff291c',GradientType=0);border-color:#ff291c #ff291c #cf0b00;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#ff291c;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#ff291c;*background-color:#ff1103}.btn-danger:active,.btn-danger.active{background-color:#e80d00 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#29ba2d;background-image:-moz-linear-gradient(top,#2dcb31,#23a127);background-image:-webkit-gradient(linear,0 0,0 100%,from(#2dcb31),to(#23a127));background-image:-webkit-linear-gradient(top,#2dcb31,#23a127);background-image:-o-linear-gradient(top,#2dcb31,#23a127);background-image:linear-gradient(to bottom,#2dcb31,#23a127);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2dcb31',endColorstr='#ff23a127',GradientType=0);border-color:#23a127 #23a127 #166218;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#23a127;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#23a127;*background-color:#1f8c22}.btn-success:active,.btn-success.active{background-color:#1a771d \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#9b59bb;background-image:-moz-linear-gradient(top,#a466c2,#8d46b0);background-image:-webkit-gradient(linear,0 0,0 100%,from(#a466c2),to(#8d46b0));background-image:-webkit-linear-gradient(top,#a466c2,#8d46b0);background-image:-o-linear-gradient(top,#a466c2,#8d46b0);background-image:linear-gradient(to bottom,#a466c2,#8d46b0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffa466c2',endColorstr='#ff8d46b0',GradientType=0);border-color:#8d46b0 #8d46b0 #613079;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#8d46b0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#8d46b0;*background-color:#7e3f9d}.btn-info:active,.btn-info.active{background-color:#6f378b \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#080808;background-image:-moz-linear-gradient(top,#0d0d0d,#000);background-image:-webkit-gradient(linear,0 0,0 100%,from(#0d0d0d),to(#000));background-image:-webkit-linear-gradient(top,#0d0d0d,#000);background-image:-o-linear-gradient(top,#0d0d0d,#000);background-image:linear-gradient(to bottom,#0d0d0d,#000);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0d0d0d',endColorstr='#ff000000',GradientType=0);border-color:#000 #000 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#000;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#000;*background-color:#000}.btn-inverse:active,.btn-inverse.active{background-color:#000 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{border-color:transparent;cursor:pointer;color:#01a6e6;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#0181b3;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*zoom:1;font-size:0;vertical-align:middle;white-space:nowrap;*margin-left:.3em}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{font-size:0;margin-top:10px;margin-bottom:10px}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-bottomleft:3px;border-bottom-left-radius:3px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,.125),inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,.125),inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(255,255,255,.125),inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);*padding-top:5px;*padding-bottom:5px}.btn-group>.btn-mini+.dropdown-toggle{padding-left:5px;padding-right:5px;*padding-top:2px;*padding-bottom:2px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{padding-left:12px;padding-right:12px;*padding-top:7px;*padding-bottom:7px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.btn-group.open .btn.dropdown-toggle{background-color:#c8c8c8}.btn-group.open .btn-primary.dropdown-toggle{background-color:#0194cd}.btn-group.open .btn-warning.dropdown-toggle{background-color:#fe6600}.btn-group.open .btn-danger.dropdown-toggle{background-color:#ff291c}.btn-group.open .btn-success.dropdown-toggle{background-color:#23a127}.btn-group.open .btn-info.dropdown-toggle{background-color:#8d46b0}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#000}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-left-width:5px;border-right-width:5px;border-top-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-left:0;margin-top:-1px}.btn-group-vertical>.btn:first-child{-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#ff7518;border:1px solid transparent;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.alert,.alert h4{color:#ff934b}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{background-color:#28b62c;border-color:transparent;color:#3dd441}.alert-success h4{color:#3dd441}.alert-danger,.alert-error{background-color:#ff4136;border-color:transparent;color:#ff7169}.alert-danger h4,.alert-error h4{color:#ff7169}.alert-info{background-color:#9954bb;border-color:transparent;color:#af78ca}.alert-info h4{color:#af78ca}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-left:0;margin-bottom:20px;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-left:15px;padding-right:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#01a6e6}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";line-height:0}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555;background-color:#eee;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#01a6e6}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{border-color:#ddd;z-index:2}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{border-top-color:#01a6e6;border-bottom-color:#01a6e6;margin-top:6px}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#0181b3;border-bottom-color:#0181b3}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;content:"";line-height:0}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-bottom-color:transparent;border-top-color:#ddd}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;background-color:transparent;cursor:default}.navbar{overflow:visible;margin-bottom:20px;*position:relative;*z-index:2}.navbar-inner{min-height:50px;padding-left:20px;padding-right:20px;background-color:#f8f8f8;background-image:-moz-linear-gradient(top,#f8f8f8,#f8f8f8);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f8f8f8),to(#f8f8f8));background-image:-webkit-linear-gradient(top,#f8f8f8,#f8f8f8);background-image:-o-linear-gradient(top,#f8f8f8,#f8f8f8);background-image:linear-gradient(to bottom,#f8f8f8,#f8f8f8);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff8f8f8',endColorstr='#fff8f8f8',GradientType=0);border:1px solid #e7e7e7;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065);*zoom:1}.navbar-inner:before,.navbar-inner:after{display:table;content:"";line-height:0}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{float:left;display:block;padding:15px 20px 15px;margin-left:-20px;font-size:20px;font-weight:200;color:#666;text-shadow:0 1px 0 #f8f8f8}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:50px;color:#666}.navbar-link{color:#666}.navbar-link:hover,.navbar-link:focus{color:#333}.navbar .divider-vertical{height:50px;margin:0 9px;border-left:1px solid #f8f8f8;border-right:1px solid #f8f8f8}.navbar .btn,.navbar .btn-group{margin-top:10px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;content:"";line-height:0}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:10px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:10px;margin-bottom:0}.navbar-search .search-query{margin-bottom:0;padding:4px 14px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,.1);box-shadow:0 1px 10px rgba(0,0,0,.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,.1);box-shadow:0 -1px 10px rgba(0,0,0,.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:15px 15px 15px;color:#666;text-decoration:none;text-shadow:0 1px 0 #f8f8f8}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{background-color:transparent;color:#333;text-decoration:none}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;text-decoration:none;background-color:#e7e7e7;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ebebeb;background-image:-moz-linear-gradient(top,#ebebeb,#ebebeb);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ebebeb),to(#ebebeb));background-image:-webkit-linear-gradient(top,#ebebeb,#ebebeb);background-image:-o-linear-gradient(top,#ebebeb,#ebebeb);background-image:linear-gradient(to bottom,#ebebeb,#ebebeb);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb',endColorstr='#ffebebeb',GradientType=0);border-color:#ebebeb #ebebeb #c5c5c5;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#ebebeb;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#ebebeb;*background-color:#dedede}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#d2d2d2 \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,0.2);position:absolute;top:-7px;left:9px}.navbar .nav>li>.dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;top:-6px;left:10px}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{border-top:7px solid #ccc;border-top-color:rgba(0,0,0,0.2);border-bottom:0;bottom:-7px;top:auto}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{border-top:6px solid #fff;border-bottom:0;bottom:-6px;top:auto}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{background-color:#e7e7e7;color:#555}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#666;border-bottom-color:#666}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{left:auto;right:0}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{left:auto;right:12px}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{left:auto;right:13px}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{left:auto;right:100%;margin-left:0;margin-right:-1px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#01a6e6;background-image:-moz-linear-gradient(top,#01a6e6,#01a6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#01a6e6),to(#01a6e6));background-image:-webkit-linear-gradient(top,#01a6e6,#01a6e6);background-image:-o-linear-gradient(top,#01a6e6,#01a6e6);background-image:linear-gradient(to bottom,#01a6e6,#01a6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff01a6e6',endColorstr='#ff01a6e6',GradientType=0);border-color:transparent}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#fff}.navbar-inverse .navbar-text{color:#fff}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{background-color:rgba(0,0,0,0.05);color:#fff}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#01a6e6}.navbar-inverse .navbar-link{color:#fff}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-left-color:#01a6e6;border-right-color:#01a6e6}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{background-color:#01a6e6;color:#fff}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#68d4fe;border-color:#01a6e6;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1),0 1px 0 rgba(255,255,255,.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1),0 1px 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.1),0 1px 0 rgba(255,255,255,.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#333}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#333}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#333}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15);outline:0}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0194cd;background-image:-moz-linear-gradient(top,#0194cd,#0194cd);background-image:-webkit-gradient(linear,0 0,0 100%,from(#0194cd),to(#0194cd));background-image:-webkit-linear-gradient(top,#0194cd,#0194cd);background-image:-o-linear-gradient(top,#0194cd,#0194cd);background-image:linear-gradient(to bottom,#0194cd,#0194cd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0194cd',endColorstr='#ff0194cd',GradientType=0);border-color:#0194cd #0194cd #015d80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#0194cd;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#0194cd;*background-color:#0181b3}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#016f9a \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.breadcrumb>li{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 0 #fff}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;*zoom:1;margin-left:0;margin-bottom:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#999;border:1px solid transparent;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#01a6e6}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999;background-color:transparent;cursor:default}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-bottomleft:3px;border-bottom-left-radius:3px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:22px 30px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-top-left-radius:2px;-moz-border-radius-topleft:2px;border-top-left-radius:2px;-webkit-border-bottom-left-radius:2px;-moz-border-radius-bottomleft:2px;border-bottom-left-radius:2px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:2px;-moz-border-radius-topright:2px;border-top-right-radius:2px;-webkit-border-bottom-right-radius:2px;-moz-border-radius-bottomright:2px;border-bottom-right-radius:2px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:2px 6px;font-size:10.5px}.pager{margin:20px 0;list-style:none;text-align:center;*zoom:1}.pager:before,.pager:after{display:table;content:"";line-height:0}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;background-color:#fff;cursor:default}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:absolute;z-index:1050;width:100%;background-color:#fff;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;outline:0}.modal.fade{-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out;top:-25%}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;overflow-y:auto;padding:15px}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;*zoom:1}.modal-footer:before,.modal-footer:after{display:table;content:"";line-height:0}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;visibility:visible;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.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.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}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#fff;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:normal;line-height:18px;background-color:#fff;border-bottom:1px solid #f2f2f2;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.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:16px}.popover .arrow:after{border-width:15px;content:""}.popover.top .arrow{left:50%;margin-left:-16px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-16px}.popover.top .arrow:after{bottom:1px;margin-left:-15px;border-bottom-width:0;border-top-color:#fff}.popover.right .arrow{top:50%;left:-16px;margin-top:-16px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right .arrow:after{left:1px;bottom:-15px;border-left-width:0;border-right-color:#fff}.popover.bottom .arrow{left:50%;margin-left:-16px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-16px}.popover.bottom .arrow:after{top:1px;margin-left:-15px;border-top-width:0;border-bottom-color:#fff}.popover.left .arrow{top:50%;right:-16px;margin-top:-16px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left .arrow:after{right:1px;border-right-width:0;border-left-color:#fff;bottom:-15px}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;content:"";line-height:0}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#01a6e6;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;vertical-align:baseline;white-space:nowrap;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-left:9px;padding-right:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#ff7169}.label-important[href],.badge-important[href]{background-color:#ff4136}.label-warning,.badge-warning{background-color:#ff7518}.label-warning[href],.badge-warning[href]{background-color:#e45c00}.label-success,.badge-success{background-color:#3dd441}.label-success[href],.badge-success[href]{background-color:#28b62c}.label-info,.badge-info{background-color:#af78ca}.label-info[href],.badge-info[href]{background-color:#9954bb}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.progress .bar{width:0;height:100%;color:#fff;float:left;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,.15),inset 0 -1px 0 rgba(0,0,0,.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,.15),inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 1px 0 0 rgba(0,0,0,.15),inset 0 -1px 0 rgba(0,0,0,.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#ff9046;background-image:-moz-linear-gradient(top,#ffa365,#ff7518);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ffa365),to(#ff7518));background-image:-webkit-linear-gradient(top,#ffa365,#ff7518);background-image:-o-linear-gradient(top,#ffa365,#ff7518);background-image:linear-gradient(to bottom,#ffa365,#ff7518);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffa365',endColorstr='#ffff7518',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#ffa365;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{overflow:hidden;width:100%;position:relative}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{left:auto;right:15px}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;left:0;right:0;bottom:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{color:#fff;line-height:20px}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;color:inherit;letter-spacing:-1px}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}body{font-weight:300;background:#eee}h1{font-size:50px}h2,h3{font-size:26px}h4{font-size:14px}h5,h6{font-size:11px}blockquote{padding:10px 15px;background-color:#eee;border-left-color:#555}blockquote.pull-right{padding:10px 15px;border-right-color:#555}blockquote small{color:#555}.muted{color:#555}.text-warning{color:#ff7518}a.text-warning:hover{color:#e45c00}.text-error{color:#ff4136}a.text-error:hover{color:#ff1103}.text-info{color:#9954bb}a.text-info:hover{color:#7e3f9d}.text-success{color:#28b62c}a.text-success:hover{color:#1f8c22}.navbar .navbar-inner{background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar .brand:hover{color:#333}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background-color:transparent}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#555}.navbar .nav li.dropdown.open>.dropdown-toggle:hover,.navbar .nav li.dropdown.active>.dropdown-toggle:hover,.navbar .nav li.dropdown.open.active>.dropdown-toggle:hover{color:#eee}.navbar .navbar-search .search-query{line-height:normal}.navbar-inverse .brand,.navbar-inverse .nav>li>a{text-shadow:none}.navbar-inverse .brand:hover,.navbar-inverse .nav>.active>a,.navbar-inverse .nav>.active>a:hover,.navbar-inverse .nav>.active>a:focus{background-color:rgba(0,0,0,0.05);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;color:#fff}.navbar-inverse .navbar-search .search-query{color:#222}div.subnav{margin:0 1px;background:#999 none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}div.subnav .nav{background-color:transparent}div.subnav .nav>li>a{border-color:transparent}div.subnav .nav>.active>a,div.subnav .nav>.active>a:hover{border-color:transparent;background-color:#000;color:#fff;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}div.subnav-fixed{top:51px;margin:0}.nav .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover{color:#01a6e6}.nav-tabs>li>a{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs li>a:hover,.nav-tabs li.active>a,.nav-tabs li.active>a:hover{border-color:transparent;background-color:#01a6e6;color:#fff}.nav-tabs li.disabled>a{color:#555}.nav-tabs .open .dropdown-toggle{background-color:#060606;border-color:transparent}.tabs-below>.nav-tabs>li>a,.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border:0}.nav-pills>li>a{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;color:#000}.nav-pills>li>a:hover{background-color:#000;color:#fff}.nav-pills>.disabled>a,.nav-pills>.disabled>a:hover{background-color:#eee;color:#333}.nav-list>li>a{color:#222}.nav-list>li>a:hover{background-color:#01a6e6;color:#fff;text-shadow:none}.nav-list .nav-header{color:#222}.nav-list .divider{background-color:#555;border-bottom:0}.pagination ul{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.pagination ul>li>a,.pagination ul>li>span{margin-right:6px;color:#222}.pagination ul>li>a:hover,.pagination ul>li>span:hover{background-color:#222;color:#fff}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{margin-right:0}.pagination ul>.active>a,.pagination ul>.active>span{color:#fff}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover{background-color:#eee;color:#333}.pager li>a,.pager li>span{background-color:#999;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;color:#222}.pager li>a:hover,.pager li>span:hover{background-color:#222;color:#fff}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>span{background-color:#eee;color:#333}.breadcrumb{background-color:#999}.breadcrumb li{text-shadow:none}.breadcrumb .divider,.breadcrumb .active{color:#222;text-shadow:none}.btn{padding:5px 12px;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;text-shadow:none}.btn.disabled{box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-large{padding:22px 30px}.btn-small{padding:2px 10px}.btn-mini{padding:2px 6px}.btn-group>.btn:first-child,.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.dropdown-toggle{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}legend,label{color:#555;border-bottom:0 solid #222}.table tbody tr.success td{color:#fff}.table tbody tr.error td{color:#fff}.table tbody tr.info td{color:#fff}.table-bordered{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.table-bordered thead:first-child tr:first-child th:first-child,.table-bordered tbody:first-child tr:first-child td:first-child{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.table-bordered thead:last-child tr:last-child th:first-child,.table-bordered tbody:last-child tr:last-child td:first-child,.table-bordered tfoot:last-child tr:last-child td:first-child{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"]{color:#222}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#ff7518}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#ff7518;color:#222}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#ff4136}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#ff4136;color:#222}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#28b62c}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#28b62c;color:#222}legend{border-bottom:0;color:#222}.form-actions{border-top:0;background-color:#eee}.dropdown-menu{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.alert{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;text-shadow:none}.alert-heading,.alert h1,.alert h2,.alert h3,.alert h4,.alert h5,.alert h6{color:#fff}.label-success{background-color:#28b62c}.label-important{background-color:#ff4136}.label-info{background-color:#9954bb}.label-inverse{background-color:#000}.badge{border-radius:0;font-weight:200}a:hover{text-decoration:none}.hero-unit{border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.well{border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}[class^="icon-"],[class*=" icon-"]{margin:0 2px;vertical-align:-2px}a.thumbnail{background-color:#999}a.thumbnail:hover{background-color:#555;border-color:transparent}.progress{background-color:#eee;background-image:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.modal{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;background-color:#eee}.modal-header{border-bottom:0}.modal-footer{border-top:0;background-color:transparent}.popover{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.popover-title{border-bottom:0;color:#fff}@media(max-width:767px){div.panel{width:100%!important;padding:0!important}}.container-fluid{padding-left:0;padding-right:0}.container.grafana-container{padding:5px 10px;width:100%;box-sizing:border-box}.bgNav{background:#f8f8f8}.bgPrimary{background:#03b8fe;color:rgba(255,255,255,0.9)}.bgInfo{background:#a466c2;color:rgba(255,255,255,0.9)}.bgSuccess{background:#2dcb31;color:rgba(255,255,255,0.9)}.bgWarning{background:#ff8432;color:rgba(255,255,255,0.9)}.bgDanger{background:#ff5950;color:rgba(255,255,255,0.9)}.bgInverse{background:#0d0d0d;color:rgba(255,255,255,0.9)}code,pre{background-color:#eee}.panel{display:inline-table;vertical-align:top}.panel-container{padding:0;background:#fff;margin:5px}.panel-content{padding:0 10px 5px 10px}.panel-title{border:0;font-weight:bold}.panel-loading{position:absolute;top:0;right:4px;z-index:800}.panel div.panel-extra div.panel-extra-container{margin-right:-10px;margin-top:3px;text-align:center}.panel div.panel-extra div.panel-extra-container ul{text-align:left}.panel div.panel-extra{font-size:.9em;margin-bottom:0}.panel div.panel-extra .extra{float:right!important}.panel-error{color:#fff;padding:5px 10px 0 10px}.panel-error-inspector-link{float:right;margin-right:10px}div.editor-row{vertical-align:top}div.editor-row div.section{margin-right:20px;vertical-align:top;display:inline-block}div.editor-option{vertical-align:top;display:inline-block;margin-right:10px}div.editor-option label{display:block}#events{font-size:12px}.version{font-size:85%}.legend{color:#000}div.fake-input{background-color:#fff;border:1px solid #999;-webkit-border-radius:3px 3px 3px 3px;-moz-border-radius:3px 3px 3px 3px;border-radius:3px 3px 3px 3px}hr.small{margin:5px 0}form input.ng-invalid{color:#ff7169}.editor-title{margin-right:10px;font-size:1.7em;font-weight:bold;text-transform:capitalize}.editor-title small{opacity:.5;font-size:.7em;font-weight:normal}.bordered{border:1px solid #ddd}.table-unpadded th,.table-unpadded td{padding:0 2px}.spy{position:absolute;right:0;top:0}.navbar-inner{border-width:0}.kibana-row{margin-bottom:5px}.row-tab .dropdown-menu-right{top:0;left:33px}.row-tab-button{padding:0;cursor:pointer;vertical-align:middle;width:30px;height:30px;text-align:center;display:inline-block;line-height:30px}.row-button{width:30px;text-align:center;float:left;cursor:pointer}.row-text{white-space:nowrap;text-transform:uppercase;font-weight:bold;font-size:.9em;margin:0 10px}.row-close{padding:0;margin:0;min-height:30px!important;line-height:30px;background:#fff}.row-open{margin-top:5px;left:-34px;position:absolute;z-index:100;transition:.25s left;transition-delay:.25s;-webkit-transition-delay:.25s}.row-open:hover{left:-12px}.odd{background-color:#f9f9f9}.nomargin{margin:0}[ng\:cloak],[ng-cloak],.ng-cloak{display:none!important}.table tbody+tbody{border-top:0}.ui-draggable-dragging{display:block;z-index:9999}.dragInProgress .panel-container{border:3px solid rgba(100,100,100,0.5)}.link{color:#01a6e6;cursor:pointer}.link:hover{color:#0181b3}.pointer{cursor:pointer}.popover{max-width:480px}.modal{width:100%;top:0!important}.tiny{font-size:50%}.smaller{font-size:70%}.small{font-size:85%}.large{font-size:120%}.strong{font-weight:bold}a{cursor:pointer}.normal{font-weight:normal}.light{font-weight:200}.input-smaller{width:75px}.string{color:#626262}.number{color:#ba8bd1}.boolean{color:#ffa365}.key{color:#ff8983}.btn-active{background-color:#e6e6e6;background-image:none;box-shadow:0 2px 4px rgba(0,0,0,0.15) inset,0 1px 2px rgba(0,0,0,0.05);outline:0 none}.remove:hover{background-color:#ff291c}.faded{opacity:.2}div.flot-text{color:#555!important}.dashboard-notice{z-index:8000;margin-left:0;padding:3px 0 3px 0;width:100%;padding-left:20px;color:#fff}.alert-warning{background-color:#ff7518;border-color:transparent;color:#ff934b}.popover.topLeft{margin-top:-10px}.popover.topLeft .arrow{bottom:-10px;left:25%;margin-left:-10px;border-width:10px 10px 0;border-top-color:#fff}.popover.topLeft .arrow:after{border-width:11px 11px 0;border-top-color:rgba(0,0,0,0.25);bottom:-1px;left:-11px}.popover.topRight{margin-top:-10px}.popover.topRight .arrow{bottom:-10px;left:75%;margin-left:-10px;border-width:10px 10px 0;border-top-color:#fff}.popover.topRight .arrow:after{border-width:11px 11px 0;border-top-color:rgba(0,0,0,0.25);bottom:-1px;left:-11px}.popover.rightTop .arrow{top:10%;left:-16px;margin-top:-16px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.rightTop .arrow:after{left:1px;bottom:-15px;border-left-width:0;border-right-color:#fff}.popover.rightBottom .arrow{top:90%;left:-16px;margin-top:-16px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.rightBottom .arrow:after{left:1px;bottom:-15px;border-left-width:0;border-right-color:#fff}.popover.bottomLeft .arrow{left:10%;margin-left:-16px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-16px}.popover.bottomLeft .arrow:after{top:1px;margin-left:-15px;border-top-width:0;border-bottom-color:#fff}.popover.bottomRight .arrow{left:90%;margin-left:-16px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-16px}.popover.bottomRight .arrow:after{top:1px;margin-left:-15px;border-top-width:0;border-bottom-color:#fff}.popover.leftTop .arrow{top:10%;right:-16px;margin-top:-16px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.leftTop .arrow:after{right:1px;border-right-width:0;border-left-color:#fff;bottom:-15px}.popover.leftBottom .arrow{top:90%;right:-16px;margin-top:-16px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.leftBottom .arrow:after{right:1px;border-right-width:0;border-left-color:#fff;bottom:-15px}.popover.topLeft .arrow{left:10%;margin-left:-16px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-16px}.popover.topLeft .arrow:after{bottom:1px;margin-left:-15px;border-bottom-width:0;border-top-color:#fff}.popover.topRight .arrow{left:90%;margin-left:-16px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-16px}.popover.topRight .arrow:after{bottom:1px;margin-left:-15px;border-bottom-width:0;border-top-color:#fff}.label-tag{background-color:#9954bb;color:#f2f2f2}.label-tag:hover{background-color:#7e3f9d;color:#fff}.annotation-editor-table td{white-space:nowrap}.save-dashboard-dropdown{padding:10px}.save-dashboard-dropdown li>a{padding-left:5px}.save-dashboard-dropdown-save-form{margin-bottom:5px}.inspector-request-table td{padding:5px}.inspector-request-table td:first-child{white-space:nowrap}code,pre{background-color:#fff;color:#555}.submenu-controls{background:#dad9d9;font-size:inherit}.submenu-controls label{margin:0;padding-right:4px;display:inline}.submenu-controls input[type=checkbox]{margin:0}.submenu-controls-visible:not(.hide-controls) .panel-fullscreen{top:82px}.submenu-panel{padding:0 4px 0 8px;border-right:1px solid #fff;float:left}.submenu-panel:first-child{padding-left:17px}.submenu-panel-title{float:left;text-transform:uppercase;padding:4px 10px 3px 0}.submenu-panel-wrapper{float:left}.submenu-toggle{padding:4px 0 3px 8px;float:left}.submenu-toggle .annotation-color-icon{position:relative;top:2px}.submenu-toggle:first-child{padding-left:0}.submenu-control-edit{padding:4px 4px 3px 8px;float:right;border-left:1px solid #fff;margin-left:8px}.annotation-disabled,.annotation-disabled a{color:#151515}.filtering-container{float:left}.filtering-container label{float:left}.filtering-container input[type=checkbox]{margin:0}.filter-panel-filter{display:inline-block;vertical-align:top;padding:4px 10px 3px 10px;border-right:1px solid #fff}.filter-panel-filter:first-child{padding-left:0}.filter-panel-filter ul{margin-bottom:0}.filter-deselected{opacity:.5}.filtering-container .filter-action{float:right;padding-right:2px;margin-bottom:0!important;margin-left:0;margin-top:4px}.add-filter-action{padding:3px 5px 0 5px;position:relative;top:4px}.filter-mandate{text-decoration:underline;cursor:pointer}.filter-apply{float:right}.graph-canvas-wrapper{position:relative}.graph-legend{margin:0 20px;text-align:left;position:relative;top:2px}.graph-legend .popover-content{padding:0}.graph-legend-icon{position:relative;top:2px}.graph-legend-series,.graph-legend-icon,.graph-legend-alias,.graph-legend-value{display:inline-block;white-space:nowrap}.graph-legend-series{padding-left:10px}.graph-legend-value{padding-left:6px}.graph-legend-table{display:table}.graph-legend-table .graph-legend-series{display:table-row;padding-left:0}.graph-legend-table .graph-legend-series.pull-right{float:none}.graph-legend-table .graph-legend-series.pull-right .graph-legend-alias::after{content:'y\00B2'}.graph-legend-table .graph-legend-alias{display:table-cell;white-space:nowrap}.graph-legend-table .graph-legend-icon{display:table-cell;white-space:nowrap;padding:0 4px}.graph-legend-table .graph-legend-value{display:table-cell;white-space:nowrap;padding-left:15px}.graph-legend-rightside.graph-wrapper{display:table;width:100%}.graph-legend-rightside .graph-canvas-wrapper{display:table-cell;width:100%;position:relative}.graph-legend-rightside .graph-legend-wrapper{display:table-cell;vertical-align:top;position:relative;left:-4px}.graph-legend-rightside .graph-legend{margin:0}.graph-legend-rightside .graph-legend-series{display:block;padding-left:0}.graph-legend-rightside .graph-legend-table .graph-legend-series{display:table-row}.graph-legend-series-hidden a{color:#000101}.graph-legend-popover{width:200px}.graph-legend-popover label{display:inline-block}.graph-legend-popover .btn{padding:1px 3px;margin-right:0;line-height:initial}.graph-legend-popover .close{margin-right:5px;color:#01a6e6;opacity:.7;text-shadow:none}.graph-legend-popover .editor-row{padding:5px}.bootstrap-tagsinput{display:inline-block;padding:4px 6px;margin-bottom:10px;color:#555;vertical-align:middle;border-radius:4px;max-width:100%;line-height:22px;background-color:#fff;border:1px solid #999;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}.bootstrap-tagsinput input{border:0;box-shadow:none;outline:0;background-color:transparent;padding:0;padding-left:5px;margin:0;width:auto!important;max-width:inherit}.bootstrap-tagsinput input:focus{border:0;box-shadow:none}.bootstrap-tagsinput .tag{margin-right:2px;color:white}.bootstrap-tagsinput .tag [data-role="remove"]{margin-left:8px;cursor:pointer}.bootstrap-tagsinput .tag [data-role="remove"]:after{content:"x";padding:0 2px}.bootstrap-tagsinput .tag [data-role="remove"]:hover{box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.bootstrap-tagsinput .tag [data-role="remove"]:hover:active{box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.hide-controls{padding:0}.hide-controls .grafana-row{display:none}.hide-controls .submenu-controls{display:none}.hide-controls .add-row-panel-hint{display:none}.playlist-active .grafana-menu-zoom-out,.playlist-active .grafana-menu-save,.playlist-active .grafana-menu-load,.playlist-active .add-row-panel-hint,.playlist-active .grafana-menu-home,.playlist-active .grafana-menu-refresh,.playlist-active .grafana-menu-edit{display:none}.playlist-active .grafana-menu-stop-playlist{display:list-item}.grafana-search-panel{padding:6px 10px}.grafana-search-panel .search-field-wrapper input{width:100%}.grafana-search-panel .search-field-wrapper button{margin:0 2px 0 0}.grafana-search-panel .search-field-wrapper>span{display:block;overflow:hidden;padding-right:25px}.grafana-search-panel .selected td,.grafana-search-panel tr.selected:nth-child(odd)>td{background:#01a6e6;color:white;text-shadow:-1px -1px 1px rgba(0,0,0,0.3)}.grafana-search-panel .selected td a,.grafana-search-panel tr.selected:nth-child(odd)>td a{color:white}.grafana-search-panel .selected-tag .label-tag{background-color:#01a6e6}.search-tagview-switch{position:absolute;top:15px;right:263px;color:#00384e}.search-tagview-switch.active{color:#01a6e6}.row-button{width:24px}.modal{margin:5%;width:90%}.grafana-search-metric-actions{visibility:hidden;padding-left:20px}.grafana-search-metric-name{white-space:nowrap}.grafana-search-metric-result:hover .grafana-search-metric-actions{visibility:visible}.grafana-search-metric-result:hover .grafana-search-metric-name{color:#01a6e6}.yaxisLabel{top:50%;left:-20px;transform:rotate(-90deg);-o-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-webkit-transform:rotate(-90deg);transform-origin:0 0;-o-transform-origin:0 0;-ms-transform-origin:0 0;-moz-transform-origin:0 0;-webkit-transform-origin:0 0}.axisLabel{color:#555;font-size:11.9px;position:absolute;text-align:center;font-size:12px}.panel-fullscreen{z-index:100;display:block!important;position:fixed;left:0;right:0;top:54px;padding:0 10px;background:#fff;overflow-y:scroll;height:100%}.panel-fullscreen .panel-content{padding-bottom:130px}.dashboard-fullscreen .container-fluid.main{height:0;width:0;position:fixed;right:-10000px}.histogram-chart{position:relative}.panel-full-edit-tabs{margin-top:10px;min-height:250px;margin-left:-10px;margin-right:-10px;background-color:#f8f8f8;border-top:1px solid #fff}.panel-full-edit-tabs .tabs .nav-tabs{margin:0;background:#fff;border-top:1px solid #fff}.panel-full-edit-tabs .tabs .tab-content{display:none}.panel-full-edit-tabs .tab-content{overflow:visible;padding:15px}.panel-full-edit-tabs .nav-tabs>li>a{line-height:15px;padding-top:6px;padding-bottom:6px;font-size:.8rem}.grafana-target:last-child{border-bottom:1px solid #dad9d9}.grafana-target-inner{border-top:1px solid #dad9d9;border-left:1px solid #dad9d9;border-right:1px solid #dad9d9;background:#fff;width:100%}.grafana-target-onoff{padding:5px 7px;display:inline-block}.grafana-segment-list{list-style:none;margin:0;margin-right:90px;margin-left:30px}.grafana-segment-list>li{float:left}.grafana-segment-dropdown-menu{margin-bottom:70px}.grafana-target-segment{padding:8px 7px;font-weight:normal;border-right:1px solid #dad9d9;color:#555;display:inline-block}.has-open-function .grafana-target-segment{padding-top:25px}.grafana-target-hidden .grafana-target-segment{color:#959595}.grafana-target-segment:hover,.grafana-target-segment:focus{text-decoration:none}.grafana-target-segmenta:hover{background:#f2f2f2}.grafana-target-function{background:#f2f2f2}.grafana-target-function>a{color:#555}.grafana-target-function>a:hover{color:#01a6e6}.grafana-target-function.show-function-controls{padding-top:5px;min-width:100px;text-align:center}input[type=text].grafana-function-param-input{background:transparent;border:0;margin:0;padding:0}.grafana-target-controls-left{list-style:none;float:left;width:30px;margin:0}.grafana-target-controls{width:120px;float:right;list-style:none;margin:0;text-align:right}.grafana-target-controls>li{display:inline-block;white-space:nowrap}.grafana-target-controls a{padding:8px 7px;position:relative;top:8px;color:#555;font-size:16px}.grafana-target-hidden .grafana-target-controls a{color:#959595}.grafana-target-controls a:hover,.grafana-target-controls a:focus{text-decoration:none}input[type=text].grafana-target-text-input{padding:8px 7px;border:0;margin:0;background:transparent;float:left;color:#555;border-radius:0}input[type=text].grafana-target-segment-input{border:0;border-right:1px solid #dad9d9;margin:0;border-radius:0;padding:8px 4px}input[type=checkbox].grafana-target-option-checkbox{margin:0}select.grafana-target-segment-input{border:0;border-right:1px solid #dad9d9;margin:0;border-radius:0;height:36px;padding:8px 5px}.grafana-target .dropdown{padding:0;margin:0}.graphite-func-controls{display:none;text-align:center}.graphite-func-controls .icon-arrow-left{float:left;position:relative;top:2px}.graphite-func-controls .icon-arrow-right{float:right;position:relative;top:2px}.graphite-func-controls .icon-remove{margin-left:10px}.grafana-target .popover-content{padding:0}.scrollable{max-height:300px;overflow:auto}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar:hover{height:8px}::-webkit-scrollbar-button:start:decrement,::-webkit-scrollbar-button:end:increment{display:none}::-webkit-scrollbar-button:horizontal:decrement{display:none}::-webkit-scrollbar-button:horizontal:increment{display:none}::-webkit-scrollbar-button:vertical:decrement{display:none}::-webkit-scrollbar-button:vertical:increment{display:none}::-webkit-scrollbar-button:horizontal:decrement:active{background-image:none}::-webkit-scrollbar-button:horizontal:increment:active{background-image:none}::-webkit-scrollbar-button:vertical:decrement:active{background-image:none}::-webkit-scrollbar-button:vertical:increment:active{background-image:none}::-webkit-scrollbar-track-piece{background-color:grayDark}::-webkit-scrollbar-thumb:vertical{height:50px;background:-webkit-gradient(linear,left top,right top,color-stop(0%,#3a3a3a),color-stop(100%,#222));border:1px solid #0d0d0d;border-top:1px solid #666;border-left:1px solid #666}::-webkit-scrollbar-thumb:horizontal{width:50px;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#3a3a3a),color-stop(100%,#222));border:1px solid #1f1f1f;border-top:1px solid #666;border-left:1px solid #666}.sp-replacer{background:inherit;border:0;color:inherit}.sp-replacer:hover,.sp-replacer.sp-active{border-color:inherit;color:inherit}.sp-container{border-radius:0;background-color:#eee;border:0;padding:0}.sp-palette-container,.sp-picker-container{border:0}.sp-dd{display:none}.sp-preview{position:relative;width:15px;height:15px;border:0;margin-right:5px;float:left;z-index:0}.datapoints-warning{pointer:none;position:absolute;top:50%;left:50%;z-index:10;margin-top:-50px;margin-left:-100px;width:200px;text-align:center;cursor:auto;padding:10px}.grafana-version-footer{padding-top:15px;text-align:left}.metrics-editor-help:hover .hide{display:block} \ No newline at end of file + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:"";line-height:0}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{max-width:100%;width:auto\9;height:auto;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{text-shadow:none!important;color:#000!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#555;background-color:#eee}a{color:#01a6e6;text-decoration:none}a:hover,a:focus{color:#0181b3;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;content:"";line-height:0}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.127659574468085%;*margin-left:2.074468085106383%}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;content:"";line-height:0}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;content:"";line-height:0}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover,a.muted:focus{color:#808080}.text-warning{color:#ff934b}a.text-warning:hover,a.text-warning:focus{color:#ff7518}.text-error{color:#ff7169}a.text-error:hover,a.text-error:focus{color:#ff4136}.text-info{color:#af78ca}a.text-info:hover,a.text-info:focus{color:#9954bb}.text-success{color:#3dd441}a.text-success:hover,a.text-success:focus{color:#28b62c}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:#222;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;*zoom:1;padding-left:5px;padding-right:5px}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;content:"";line-height:0}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;white-space:nowrap}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#020202;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;vertical-align:middle}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #999;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(82,168,236,.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(82,168,236,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(82,168,236,.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;*margin-top:0;margin-top:1px \9;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;border:1px solid #999;background-color:#fff}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;background-color:#fcfcfc;border-color:#999;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);cursor:not-allowed}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#555}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#555}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#555}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;content:"";line-height:0}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#ff934b}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#ff934b}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#ff934b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#ff7518;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffd0b1;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffd0b1;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffd0b1}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#ff934b;background-color:#ff7518;border-color:#ff934b}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#ff7169}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#ff7169}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#ff7169;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#ff4136;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffd2cf;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffd2cf;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffd2cf}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#ff7169;background-color:#ff4136;border-color:#ff7169}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#3dd441}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#3dd441}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#3dd441;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#28b62c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #90e793;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #90e793;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #90e793}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#3dd441;background-color:#28b62c;border-color:#3dd441}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#af78ca}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#af78ca}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#af78ca;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#9954bb;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dac1e7;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dac1e7;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dac1e7}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#af78ca;background-color:#9954bb;border-color:#af78ca}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;content:"";line-height:0}.form-actions:after{clear:both}.help-block,.help-inline{color:#7b7b7b}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding-left:5px}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;vertical-align:middle;font-size:0;white-space:nowrap}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#90e793;border-color:#28b62c}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;*zoom:1;margin-bottom:0;vertical-align:middle}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";line-height:0}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#eee}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:3px;-moz-border-radius-bottomleft:3px;border-bottom-left-radius:3px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;-moz-border-radius-bottomright:0;border-bottom-right-radius:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#e8f8fd}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#28b62c}.table tbody tr.error>td{background-color:#ff4136}.table tbody tr.warning>td{background-color:#ff7518}.table tbody tr.info>td{background-color:#9954bb}.table-hover tbody tr.success:hover>td{background-color:#23a127}.table-hover tbody tr.error:hover>td{background-color:#ff291c}.table-hover tbody tr.warning:hover>td{background-color:#fe6600}.table-hover tbody tr.info:hover>td{background-color:#8d46b0}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat;margin-top:1px}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{background-position:-216px -120px;width:16px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{background-position:-384px -120px;width:16px}.icon-folder-open{background-position:-408px -120px;width:16px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{text-decoration:none;color:#fff;background-color:#019fdc;background-image:-moz-linear-gradient(top,#01a6e6,#0194cd);background-image:-webkit-gradient(linear,0 0,0 100%,from(#01a6e6),to(#0194cd));background-image:-webkit-linear-gradient(top,#01a6e6,#0194cd);background-image:-o-linear-gradient(top,#01a6e6,#0194cd);background-image:linear-gradient(to bottom,#01a6e6,#0194cd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff01a6e6',endColorstr='#ff0194cd',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#019fdc;background-image:-moz-linear-gradient(top,#01a6e6,#0194cd);background-image:-webkit-gradient(linear,0 0,0 100%,from(#01a6e6),to(#0194cd));background-image:-webkit-linear-gradient(top,#01a6e6,#0194cd);background-image:-o-linear-gradient(top,#01a6e6,#0194cd);background-image:linear-gradient(to bottom,#01a6e6,#0194cd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff01a6e6',endColorstr='#ff0194cd',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:default}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#ccc;margin-top:5px;margin-right:-10px}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-left:20px;padding-right:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#eee;border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well-small{padding:9px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;*zoom:1;padding:4px 12px;margin-bottom:0;font-size:14px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#dfdfdf;background-image:-moz-linear-gradient(top,#eee,#c8c8c8);background-image:-webkit-gradient(linear,0 0,0 100%,from(#eee),to(#c8c8c8));background-image:-webkit-linear-gradient(top,#eee,#c8c8c8);background-image:-o-linear-gradient(top,#eee,#c8c8c8);background-image:linear-gradient(to bottom,#eee,#c8c8c8);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffeeeeee',endColorstr='#ffc8c8c8',GradientType=0);border-color:#c8c8c8 #c8c8c8 #a2a2a2;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#c8c8c8;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #bbb;*border:0;border-bottom-color:#a2a2a2;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#c8c8c8;*background-color:#bbb}.btn:active,.btn.active{background-color:#afafaf \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:22px 30px;font-size:17.5px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:2px 6px;font-size:10.5px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#02a9ea;background-image:-moz-linear-gradient(top,#03b8fe,#0194cd);background-image:-webkit-gradient(linear,0 0,0 100%,from(#03b8fe),to(#0194cd));background-image:-webkit-linear-gradient(top,#03b8fe,#0194cd);background-image:-o-linear-gradient(top,#03b8fe,#0194cd);background-image:linear-gradient(to bottom,#03b8fe,#0194cd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff03b8fe',endColorstr='#ff0194cd',GradientType=0);border-color:#0194cd #0194cd #015d80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#0194cd;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#0194cd;*background-color:#0181b3}.btn-primary:active,.btn-primary.active{background-color:#016f9a \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#fe781e;background-image:-moz-linear-gradient(top,#ff8432,#fe6600);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ff8432),to(#fe6600));background-image:-webkit-linear-gradient(top,#ff8432,#fe6600);background-image:-o-linear-gradient(top,#ff8432,#fe6600);background-image:linear-gradient(to bottom,#ff8432,#fe6600);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff8432',endColorstr='#fffe6600',GradientType=0);border-color:#fe6600 #fe6600 #b14700;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#fe6600;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#fe6600;*background-color:#e45c00}.btn-warning:active,.btn-warning.active{background-color:#cb5200 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ff463b;background-image:-moz-linear-gradient(top,#ff5950,#ff291c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ff5950),to(#ff291c));background-image:-webkit-linear-gradient(top,#ff5950,#ff291c);background-image:-o-linear-gradient(top,#ff5950,#ff291c);background-image:linear-gradient(to bottom,#ff5950,#ff291c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff5950',endColorstr='#ffff291c',GradientType=0);border-color:#ff291c #ff291c #cf0b00;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#ff291c;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#ff291c;*background-color:#ff1103}.btn-danger:active,.btn-danger.active{background-color:#e80d00 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#29ba2d;background-image:-moz-linear-gradient(top,#2dcb31,#23a127);background-image:-webkit-gradient(linear,0 0,0 100%,from(#2dcb31),to(#23a127));background-image:-webkit-linear-gradient(top,#2dcb31,#23a127);background-image:-o-linear-gradient(top,#2dcb31,#23a127);background-image:linear-gradient(to bottom,#2dcb31,#23a127);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2dcb31',endColorstr='#ff23a127',GradientType=0);border-color:#23a127 #23a127 #166218;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#23a127;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#23a127;*background-color:#1f8c22}.btn-success:active,.btn-success.active{background-color:#1a771d \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#9b59bb;background-image:-moz-linear-gradient(top,#a466c2,#8d46b0);background-image:-webkit-gradient(linear,0 0,0 100%,from(#a466c2),to(#8d46b0));background-image:-webkit-linear-gradient(top,#a466c2,#8d46b0);background-image:-o-linear-gradient(top,#a466c2,#8d46b0);background-image:linear-gradient(to bottom,#a466c2,#8d46b0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffa466c2',endColorstr='#ff8d46b0',GradientType=0);border-color:#8d46b0 #8d46b0 #613079;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#8d46b0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#8d46b0;*background-color:#7e3f9d}.btn-info:active,.btn-info.active{background-color:#6f378b \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#080808;background-image:-moz-linear-gradient(top,#0d0d0d,#000);background-image:-webkit-gradient(linear,0 0,0 100%,from(#0d0d0d),to(#000));background-image:-webkit-linear-gradient(top,#0d0d0d,#000);background-image:-o-linear-gradient(top,#0d0d0d,#000);background-image:linear-gradient(to bottom,#0d0d0d,#000);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0d0d0d',endColorstr='#ff000000',GradientType=0);border-color:#000 #000 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#000;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#000;*background-color:#000}.btn-inverse:active,.btn-inverse.active{background-color:#000 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{border-color:transparent;cursor:pointer;color:#01a6e6;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#0181b3;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*zoom:1;font-size:0;vertical-align:middle;white-space:nowrap;*margin-left:.3em}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{font-size:0;margin-top:10px;margin-bottom:10px}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-bottomleft:3px;border-bottom-left-radius:3px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,.125),inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,.125),inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(255,255,255,.125),inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);*padding-top:5px;*padding-bottom:5px}.btn-group>.btn-mini+.dropdown-toggle{padding-left:5px;padding-right:5px;*padding-top:2px;*padding-bottom:2px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{padding-left:12px;padding-right:12px;*padding-top:7px;*padding-bottom:7px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.btn-group.open .btn.dropdown-toggle{background-color:#c8c8c8}.btn-group.open .btn-primary.dropdown-toggle{background-color:#0194cd}.btn-group.open .btn-warning.dropdown-toggle{background-color:#fe6600}.btn-group.open .btn-danger.dropdown-toggle{background-color:#ff291c}.btn-group.open .btn-success.dropdown-toggle{background-color:#23a127}.btn-group.open .btn-info.dropdown-toggle{background-color:#8d46b0}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#000}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-left-width:5px;border-right-width:5px;border-top-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-left:0;margin-top:-1px}.btn-group-vertical>.btn:first-child{-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#ff7518;border:1px solid transparent;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.alert,.alert h4{color:#ff934b}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{background-color:#28b62c;border-color:transparent;color:#3dd441}.alert-success h4{color:#3dd441}.alert-danger,.alert-error{background-color:#ff4136;border-color:transparent;color:#ff7169}.alert-danger h4,.alert-error h4{color:#ff7169}.alert-info{background-color:#9954bb;border-color:transparent;color:#af78ca}.alert-info h4{color:#af78ca}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-left:0;margin-bottom:20px;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-left:15px;padding-right:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#01a6e6}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";line-height:0}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555;background-color:#eee;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#01a6e6}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{border-color:#ddd;z-index:2}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{border-top-color:#01a6e6;border-bottom-color:#01a6e6;margin-top:6px}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#0181b3;border-bottom-color:#0181b3}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;content:"";line-height:0}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-bottom-color:transparent;border-top-color:#ddd}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;background-color:transparent;cursor:default}.navbar{overflow:visible;margin-bottom:20px;*position:relative;*z-index:2}.navbar-inner{min-height:50px;padding-left:20px;padding-right:20px;background-color:#f8f8f8;background-image:-moz-linear-gradient(top,#f8f8f8,#f8f8f8);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f8f8f8),to(#f8f8f8));background-image:-webkit-linear-gradient(top,#f8f8f8,#f8f8f8);background-image:-o-linear-gradient(top,#f8f8f8,#f8f8f8);background-image:linear-gradient(to bottom,#f8f8f8,#f8f8f8);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff8f8f8',endColorstr='#fff8f8f8',GradientType=0);border:1px solid #e7e7e7;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065);*zoom:1}.navbar-inner:before,.navbar-inner:after{display:table;content:"";line-height:0}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{float:left;display:block;padding:15px 20px 15px;margin-left:-20px;font-size:20px;font-weight:200;color:#666;text-shadow:0 1px 0 #f8f8f8}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:50px;color:#666}.navbar-link{color:#666}.navbar-link:hover,.navbar-link:focus{color:#333}.navbar .divider-vertical{height:50px;margin:0 9px;border-left:1px solid #f8f8f8;border-right:1px solid #f8f8f8}.navbar .btn,.navbar .btn-group{margin-top:10px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;content:"";line-height:0}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:10px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:10px;margin-bottom:0}.navbar-search .search-query{margin-bottom:0;padding:4px 14px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,.1);box-shadow:0 1px 10px rgba(0,0,0,.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,.1);box-shadow:0 -1px 10px rgba(0,0,0,.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:15px 15px 15px;color:#666;text-decoration:none;text-shadow:0 1px 0 #f8f8f8}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{background-color:transparent;color:#333;text-decoration:none}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;text-decoration:none;background-color:#e7e7e7;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ebebeb;background-image:-moz-linear-gradient(top,#ebebeb,#ebebeb);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ebebeb),to(#ebebeb));background-image:-webkit-linear-gradient(top,#ebebeb,#ebebeb);background-image:-o-linear-gradient(top,#ebebeb,#ebebeb);background-image:linear-gradient(to bottom,#ebebeb,#ebebeb);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb',endColorstr='#ffebebeb',GradientType=0);border-color:#ebebeb #ebebeb #c5c5c5;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#ebebeb;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#ebebeb;*background-color:#dedede}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#d2d2d2 \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,0.2);position:absolute;top:-7px;left:9px}.navbar .nav>li>.dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;top:-6px;left:10px}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{border-top:7px solid #ccc;border-top-color:rgba(0,0,0,0.2);border-bottom:0;bottom:-7px;top:auto}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{border-top:6px solid #fff;border-bottom:0;bottom:-6px;top:auto}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{background-color:#e7e7e7;color:#555}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#666;border-bottom-color:#666}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{left:auto;right:0}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{left:auto;right:12px}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{left:auto;right:13px}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{left:auto;right:100%;margin-left:0;margin-right:-1px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#01a6e6;background-image:-moz-linear-gradient(top,#01a6e6,#01a6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#01a6e6),to(#01a6e6));background-image:-webkit-linear-gradient(top,#01a6e6,#01a6e6);background-image:-o-linear-gradient(top,#01a6e6,#01a6e6);background-image:linear-gradient(to bottom,#01a6e6,#01a6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff01a6e6',endColorstr='#ff01a6e6',GradientType=0);border-color:transparent}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#fff}.navbar-inverse .navbar-text{color:#fff}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{background-color:rgba(0,0,0,0.05);color:#fff}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#01a6e6}.navbar-inverse .navbar-link{color:#fff}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-left-color:#01a6e6;border-right-color:#01a6e6}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{background-color:#01a6e6;color:#fff}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#68d4fe;border-color:#01a6e6;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1),0 1px 0 rgba(255,255,255,.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1),0 1px 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.1),0 1px 0 rgba(255,255,255,.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#333}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#333}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#333}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15);outline:0}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0194cd;background-image:-moz-linear-gradient(top,#0194cd,#0194cd);background-image:-webkit-gradient(linear,0 0,0 100%,from(#0194cd),to(#0194cd));background-image:-webkit-linear-gradient(top,#0194cd,#0194cd);background-image:-o-linear-gradient(top,#0194cd,#0194cd);background-image:linear-gradient(to bottom,#0194cd,#0194cd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0194cd',endColorstr='#ff0194cd',GradientType=0);border-color:#0194cd #0194cd #015d80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#0194cd;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#0194cd;*background-color:#0181b3}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#016f9a \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.breadcrumb>li{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 0 #fff}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;*zoom:1;margin-left:0;margin-bottom:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#999;border:1px solid transparent;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#01a6e6}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999;background-color:transparent;cursor:default}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-bottomleft:3px;border-bottom-left-radius:3px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:22px 30px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-top-left-radius:2px;-moz-border-radius-topleft:2px;border-top-left-radius:2px;-webkit-border-bottom-left-radius:2px;-moz-border-radius-bottomleft:2px;border-bottom-left-radius:2px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:2px;-moz-border-radius-topright:2px;border-top-right-radius:2px;-webkit-border-bottom-right-radius:2px;-moz-border-radius-bottomright:2px;border-bottom-right-radius:2px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:2px 6px;font-size:10.5px}.pager{margin:20px 0;list-style:none;text-align:center;*zoom:1}.pager:before,.pager:after{display:table;content:"";line-height:0}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;background-color:#fff;cursor:default}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:absolute;z-index:1050;width:100%;background-color:#fff;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;outline:0}.modal.fade{-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out;top:-25%}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;overflow-y:auto;padding:15px}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;*zoom:1}.modal-footer:before,.modal-footer:after{display:table;content:"";line-height:0}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;visibility:visible;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.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.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}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#fff;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:normal;line-height:18px;background-color:#fff;border-bottom:1px solid #f2f2f2;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.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:16px}.popover .arrow:after{border-width:15px;content:""}.popover.top .arrow{left:50%;margin-left:-16px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-16px}.popover.top .arrow:after{bottom:1px;margin-left:-15px;border-bottom-width:0;border-top-color:#fff}.popover.right .arrow{top:50%;left:-16px;margin-top:-16px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right .arrow:after{left:1px;bottom:-15px;border-left-width:0;border-right-color:#fff}.popover.bottom .arrow{left:50%;margin-left:-16px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-16px}.popover.bottom .arrow:after{top:1px;margin-left:-15px;border-top-width:0;border-bottom-color:#fff}.popover.left .arrow{top:50%;right:-16px;margin-top:-16px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left .arrow:after{right:1px;border-right-width:0;border-left-color:#fff;bottom:-15px}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;content:"";line-height:0}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#01a6e6;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;vertical-align:baseline;white-space:nowrap;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-left:9px;padding-right:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#ff7169}.label-important[href],.badge-important[href]{background-color:#ff4136}.label-warning,.badge-warning{background-color:#ff7518}.label-warning[href],.badge-warning[href]{background-color:#e45c00}.label-success,.badge-success{background-color:#3dd441}.label-success[href],.badge-success[href]{background-color:#28b62c}.label-info,.badge-info{background-color:#af78ca}.label-info[href],.badge-info[href]{background-color:#9954bb}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.progress .bar{width:0;height:100%;color:#fff;float:left;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,.15),inset 0 -1px 0 rgba(0,0,0,.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,.15),inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 1px 0 0 rgba(0,0,0,.15),inset 0 -1px 0 rgba(0,0,0,.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#ff9046;background-image:-moz-linear-gradient(top,#ffa365,#ff7518);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ffa365),to(#ff7518));background-image:-webkit-linear-gradient(top,#ffa365,#ff7518);background-image:-o-linear-gradient(top,#ffa365,#ff7518);background-image:linear-gradient(to bottom,#ffa365,#ff7518);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffa365',endColorstr='#ffff7518',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#ffa365;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{overflow:hidden;width:100%;position:relative}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{left:auto;right:15px}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;left:0;right:0;bottom:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{color:#fff;line-height:20px}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;color:inherit;letter-spacing:-1px}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}body{font-weight:300;background:#eee}h1{font-size:50px}h2,h3{font-size:26px}h4{font-size:14px}h5,h6{font-size:11px}blockquote{padding:10px 15px;background-color:#eee;border-left-color:#555}blockquote.pull-right{padding:10px 15px;border-right-color:#555}blockquote small{color:#555}.muted{color:#555}.text-warning{color:#ff7518}a.text-warning:hover{color:#e45c00}.text-error{color:#ff4136}a.text-error:hover{color:#ff1103}.text-info{color:#9954bb}a.text-info:hover{color:#7e3f9d}.text-success{color:#28b62c}a.text-success:hover{color:#1f8c22}.navbar .navbar-inner{background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar .brand:hover{color:#333}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background-color:transparent}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#555}.navbar .nav li.dropdown.open>.dropdown-toggle:hover,.navbar .nav li.dropdown.active>.dropdown-toggle:hover,.navbar .nav li.dropdown.open.active>.dropdown-toggle:hover{color:#eee}.navbar .navbar-search .search-query{line-height:normal}.navbar-inverse .brand,.navbar-inverse .nav>li>a{text-shadow:none}.navbar-inverse .brand:hover,.navbar-inverse .nav>.active>a,.navbar-inverse .nav>.active>a:hover,.navbar-inverse .nav>.active>a:focus{background-color:rgba(0,0,0,0.05);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;color:#fff}.navbar-inverse .navbar-search .search-query{color:#222}div.subnav{margin:0 1px;background:#999 none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}div.subnav .nav{background-color:transparent}div.subnav .nav>li>a{border-color:transparent}div.subnav .nav>.active>a,div.subnav .nav>.active>a:hover{border-color:transparent;background-color:#000;color:#fff;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}div.subnav-fixed{top:51px;margin:0}.nav .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover{color:#01a6e6}.nav-tabs>li>a{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs li>a:hover,.nav-tabs li.active>a,.nav-tabs li.active>a:hover{border-color:transparent;background-color:#01a6e6;color:#fff}.nav-tabs li.disabled>a{color:#555}.nav-tabs .open .dropdown-toggle{background-color:#060606;border-color:transparent}.tabs-below>.nav-tabs>li>a,.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border:0}.nav-pills>li>a{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;color:#000}.nav-pills>li>a:hover{background-color:#000;color:#fff}.nav-pills>.disabled>a,.nav-pills>.disabled>a:hover{background-color:#eee;color:#333}.nav-list>li>a{color:#222}.nav-list>li>a:hover{background-color:#01a6e6;color:#fff;text-shadow:none}.nav-list .nav-header{color:#222}.nav-list .divider{background-color:#555;border-bottom:0}.pagination ul{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.pagination ul>li>a,.pagination ul>li>span{margin-right:6px;color:#222}.pagination ul>li>a:hover,.pagination ul>li>span:hover{background-color:#222;color:#fff}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{margin-right:0}.pagination ul>.active>a,.pagination ul>.active>span{color:#fff}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover{background-color:#eee;color:#333}.pager li>a,.pager li>span{background-color:#999;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;color:#222}.pager li>a:hover,.pager li>span:hover{background-color:#222;color:#fff}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>span{background-color:#eee;color:#333}.breadcrumb{background-color:#999}.breadcrumb li{text-shadow:none}.breadcrumb .divider,.breadcrumb .active{color:#222;text-shadow:none}.btn{padding:5px 12px;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;text-shadow:none}.btn.disabled{box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-large{padding:22px 30px}.btn-small{padding:2px 10px}.btn-mini{padding:2px 6px}.btn-group>.btn:first-child,.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.dropdown-toggle{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}legend,label{color:#555;border-bottom:0 solid #222}.table tbody tr.success td{color:#fff}.table tbody tr.error td{color:#fff}.table tbody tr.info td{color:#fff}.table-bordered{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.table-bordered thead:first-child tr:first-child th:first-child,.table-bordered tbody:first-child tr:first-child td:first-child{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.table-bordered thead:last-child tr:last-child th:first-child,.table-bordered tbody:last-child tr:last-child td:first-child,.table-bordered tfoot:last-child tr:last-child td:first-child{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"]{color:#222}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#ff7518}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#ff7518;color:#222}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#ff4136}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#ff4136;color:#222}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#28b62c}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#28b62c;color:#222}legend{border-bottom:0;color:#222}.form-actions{border-top:0;background-color:#eee}.dropdown-menu{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.alert{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;text-shadow:none}.alert-heading,.alert h1,.alert h2,.alert h3,.alert h4,.alert h5,.alert h6{color:#fff}.label-success{background-color:#28b62c}.label-important{background-color:#ff4136}.label-info{background-color:#9954bb}.label-inverse{background-color:#000}.badge{border-radius:0;font-weight:200}a:hover{text-decoration:none}.hero-unit{border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.well{border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}[class^="icon-"],[class*=" icon-"]{margin:0 2px;vertical-align:-2px}a.thumbnail{background-color:#999}a.thumbnail:hover{background-color:#555;border-color:transparent}.progress{background-color:#eee;background-image:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.modal{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;background-color:#eee}.modal-header{border-bottom:0}.modal-footer{border-top:0;background-color:transparent}.popover{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.popover-title{border-bottom:0;color:#fff}@media(max-width:767px){div.panel{width:100%!important;padding:0!important}}.container-fluid{padding-left:0;padding-right:0}.container.grafana-container{padding:5px 10px;width:100%;box-sizing:border-box}.bgNav{background:#f8f8f8}.bgPrimary{background:#03b8fe;color:rgba(255,255,255,0.9)}.bgInfo{background:#a466c2;color:rgba(255,255,255,0.9)}.bgSuccess{background:#2dcb31;color:rgba(255,255,255,0.9)}.bgWarning{background:#ff8432;color:rgba(255,255,255,0.9)}.bgDanger{background:#ff5950;color:rgba(255,255,255,0.9)}.bgInverse{background:#0d0d0d;color:rgba(255,255,255,0.9)}code,pre{background-color:#eee}.panel{display:inline-table;vertical-align:top}.panel-container{padding:0;background:#fff;margin:5px}.panel-content{padding:0 10px 5px 10px}.panel-title{border:0;font-weight:bold}.panel-loading{position:absolute;top:0;right:4px;z-index:800}.panel div.panel-extra div.panel-extra-container{margin-right:-10px;margin-top:3px;text-align:center}.panel div.panel-extra div.panel-extra-container ul{text-align:left}.panel div.panel-extra{font-size:.9em;margin-bottom:0}.panel div.panel-extra .extra{float:right!important}.panel-error{color:#fff;padding:5px 10px 0 10px}.panel-error-inspector-link{float:right;margin-right:10px}div.editor-row{vertical-align:top}div.editor-row div.section{margin-right:20px;vertical-align:top;display:inline-block}div.editor-option{vertical-align:top;display:inline-block;margin-right:10px}div.editor-option label{display:block}#events{font-size:12px}.version{font-size:85%}.legend{color:#000}div.fake-input{background-color:#fff;border:1px solid #999;-webkit-border-radius:3px 3px 3px 3px;-moz-border-radius:3px 3px 3px 3px;border-radius:3px 3px 3px 3px}hr.small{margin:5px 0}form input.ng-invalid{color:#ff7169}.editor-title{margin-right:10px;font-size:1.7em;font-weight:bold;text-transform:capitalize}.editor-title small{opacity:.5;font-size:.7em;font-weight:normal}.bordered{border:1px solid #ddd}.table-unpadded th,.table-unpadded td{padding:0 2px}.spy{position:absolute;right:0;top:0}.navbar-inner{border-width:0}.kibana-row{margin-bottom:5px}.row-tab .dropdown-menu-right{top:0;left:33px}.row-tab-button{padding:0;cursor:pointer;vertical-align:middle;width:30px;height:30px;text-align:center;display:inline-block;line-height:30px}.row-button{width:30px;text-align:center;float:left;cursor:pointer}.row-text{white-space:nowrap;text-transform:uppercase;font-weight:bold;font-size:.9em;margin:0 10px}.row-close{padding:0;margin:0;min-height:30px!important;line-height:30px;background:#fff}.row-open{margin-top:5px;left:-34px;position:absolute;z-index:100;transition:.25s left;transition-delay:.25s;-webkit-transition-delay:.25s}.row-open:hover{left:-12px}.odd{background-color:#f9f9f9}.nomargin{margin:0}[ng\:cloak],[ng-cloak],.ng-cloak{display:none!important}.table tbody+tbody{border-top:0}.ui-draggable-dragging{display:block;z-index:9999}.dragInProgress .panel-container{border:3px solid rgba(100,100,100,0.5)}.link{color:#01a6e6;cursor:pointer}.link:hover{color:#0181b3}.pointer{cursor:pointer}.popover{max-width:480px}.modal{width:100%;top:0!important}.tiny{font-size:50%}.smaller{font-size:70%}.small{font-size:85%}.large{font-size:120%}.strong{font-weight:bold}a{cursor:pointer}.normal{font-weight:normal}.light{font-weight:200}.input-smaller{width:75px}.string{color:#626262}.number{color:#ba8bd1}.boolean{color:#ffa365}.key{color:#ff8983}.btn-active{background-color:#e6e6e6;background-image:none;box-shadow:0 2px 4px rgba(0,0,0,0.15) inset,0 1px 2px rgba(0,0,0,0.05);outline:0 none}.remove:hover{background-color:#ff291c}.faded{opacity:.2}div.flot-text{color:#555!important}.dashboard-notice{z-index:8000;margin-left:0;padding:3px 0 3px 0;width:100%;padding-left:20px;color:#fff}.alert-warning{background-color:#ff7518;border-color:transparent;color:#ff934b}.popover.topLeft{margin-top:-10px}.popover.topLeft .arrow{bottom:-10px;left:25%;margin-left:-10px;border-width:10px 10px 0;border-top-color:#fff}.popover.topLeft .arrow:after{border-width:11px 11px 0;border-top-color:rgba(0,0,0,0.25);bottom:-1px;left:-11px}.popover.topRight{margin-top:-10px}.popover.topRight .arrow{bottom:-10px;left:75%;margin-left:-10px;border-width:10px 10px 0;border-top-color:#fff}.popover.topRight .arrow:after{border-width:11px 11px 0;border-top-color:rgba(0,0,0,0.25);bottom:-1px;left:-11px}.popover.rightTop .arrow{top:10%;left:-16px;margin-top:-16px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.rightTop .arrow:after{left:1px;bottom:-15px;border-left-width:0;border-right-color:#fff}.popover.rightBottom .arrow{top:90%;left:-16px;margin-top:-16px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.rightBottom .arrow:after{left:1px;bottom:-15px;border-left-width:0;border-right-color:#fff}.popover.bottomLeft .arrow{left:10%;margin-left:-16px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-16px}.popover.bottomLeft .arrow:after{top:1px;margin-left:-15px;border-top-width:0;border-bottom-color:#fff}.popover.bottomRight .arrow{left:90%;margin-left:-16px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-16px}.popover.bottomRight .arrow:after{top:1px;margin-left:-15px;border-top-width:0;border-bottom-color:#fff}.popover.leftTop .arrow{top:10%;right:-16px;margin-top:-16px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.leftTop .arrow:after{right:1px;border-right-width:0;border-left-color:#fff;bottom:-15px}.popover.leftBottom .arrow{top:90%;right:-16px;margin-top:-16px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.leftBottom .arrow:after{right:1px;border-right-width:0;border-left-color:#fff;bottom:-15px}.popover.topLeft .arrow{left:10%;margin-left:-16px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-16px}.popover.topLeft .arrow:after{bottom:1px;margin-left:-15px;border-bottom-width:0;border-top-color:#fff}.popover.topRight .arrow{left:90%;margin-left:-16px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-16px}.popover.topRight .arrow:after{bottom:1px;margin-left:-15px;border-bottom-width:0;border-top-color:#fff}.label-tag{background-color:#9954bb;color:#f2f2f2}.label-tag:hover{background-color:#7e3f9d;color:#fff}.annotation-editor-table td{white-space:nowrap}.save-dashboard-dropdown{padding:10px}.save-dashboard-dropdown li>a{padding-left:5px}.save-dashboard-dropdown-save-form{margin-bottom:5px}.inspector-request-table td{padding:5px}.inspector-request-table td:first-child{white-space:nowrap}code,pre{background-color:#fff;color:#555}.submenu-controls{background:#dad9d9;font-size:inherit}.submenu-controls label{margin:0;padding-right:4px;display:inline}.submenu-controls input[type=checkbox]{margin:0}.submenu-controls-visible:not(.hide-controls) .panel-fullscreen{top:82px}.submenu-panel{padding:0 4px 0 8px;border-right:1px solid #fff;float:left}.submenu-panel:first-child{padding-left:17px}.submenu-panel-title{float:left;text-transform:uppercase;padding:4px 10px 3px 0}.submenu-panel-wrapper{float:left}.submenu-toggle{padding:4px 0 3px 8px;float:left}.submenu-toggle .annotation-color-icon{position:relative;top:2px}.submenu-toggle:first-child{padding-left:0}.submenu-control-edit{padding:4px 4px 3px 8px;float:right;border-left:1px solid #fff;margin-left:8px}.annotation-disabled,.annotation-disabled a{color:#151515}.filtering-container{float:left}.filtering-container label{float:left}.filtering-container input[type=checkbox]{margin:0}.filter-panel-filter{display:inline-block;vertical-align:top;padding:4px 10px 3px 10px;border-right:1px solid #fff}.filter-panel-filter:first-child{padding-left:0}.filter-panel-filter ul{margin-bottom:0}.filter-deselected{opacity:.5}.filtering-container .filter-action{float:right;padding-right:2px;margin-bottom:0!important;margin-left:0;margin-top:4px}.add-filter-action{padding:3px 5px 0 5px;position:relative;top:4px}.filter-mandate{text-decoration:underline;cursor:pointer}.filter-apply{float:right}.graph-canvas-wrapper{position:relative}.graph-legend{margin:0 20px;text-align:left;position:relative;top:2px}.graph-legend .popover-content{padding:0}.graph-legend-icon{position:relative;top:2px}.graph-legend-series,.graph-legend-icon,.graph-legend-alias,.graph-legend-value{display:inline-block;white-space:nowrap}.graph-legend-series{padding-left:10px}.graph-legend-value{padding-left:6px}.graph-legend-table{display:table}.graph-legend-table .graph-legend-series{display:table-row;padding-left:0}.graph-legend-table .graph-legend-series.pull-right{float:none}.graph-legend-table .graph-legend-series.pull-right .graph-legend-alias::after{content:'y\00B2'}.graph-legend-table .graph-legend-alias{display:table-cell;white-space:nowrap}.graph-legend-table .graph-legend-icon{display:table-cell;white-space:nowrap;padding:0 4px}.graph-legend-table .graph-legend-value{display:table-cell;white-space:nowrap;padding-left:15px}.graph-legend-rightside.graph-wrapper{display:table;width:100%}.graph-legend-rightside .graph-canvas-wrapper{display:table-cell;width:100%;position:relative}.graph-legend-rightside .graph-legend-wrapper{display:table-cell;vertical-align:top;position:relative;left:-4px}.graph-legend-rightside .graph-legend{margin:0}.graph-legend-rightside .graph-legend-series{display:block;padding-left:0}.graph-legend-rightside .graph-legend-table .graph-legend-series{display:table-row}.graph-legend-series-hidden a{color:#000101}.graph-legend-popover{width:200px}.graph-legend-popover label{display:inline-block}.graph-legend-popover .btn{padding:1px 3px;margin-right:0;line-height:initial}.graph-legend-popover .close{margin-right:5px;color:#01a6e6;opacity:.7;text-shadow:none}.graph-legend-popover .editor-row{padding:5px}.bootstrap-tagsinput{display:inline-block;padding:4px 6px;margin-bottom:10px;color:#555;vertical-align:middle;border-radius:4px;max-width:100%;line-height:22px;background-color:#fff;border:1px solid #999;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}.bootstrap-tagsinput input{border:0;box-shadow:none;outline:0;background-color:transparent;padding:0;padding-left:5px;margin:0;width:auto!important;max-width:inherit}.bootstrap-tagsinput input:focus{border:0;box-shadow:none}.bootstrap-tagsinput .tag{margin-right:2px;color:white}.bootstrap-tagsinput .tag [data-role="remove"]{margin-left:8px;cursor:pointer}.bootstrap-tagsinput .tag [data-role="remove"]:after{content:"x";padding:0 2px}.bootstrap-tagsinput .tag [data-role="remove"]:hover{box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.bootstrap-tagsinput .tag [data-role="remove"]:hover:active{box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.hide-controls{padding:0}.hide-controls .grafana-row{display:none}.hide-controls .submenu-controls{display:none}.hide-controls .add-row-panel-hint{display:none}.playlist-active .grafana-menu-zoom-out,.playlist-active .grafana-menu-save,.playlist-active .grafana-menu-load,.playlist-active .add-row-panel-hint,.playlist-active .grafana-menu-home,.playlist-active .grafana-menu-refresh,.playlist-active .grafana-menu-edit{display:none}.playlist-active .grafana-menu-stop-playlist{display:list-item}.grafana-search-panel{padding:6px 10px}.grafana-search-panel .search-field-wrapper input{width:100%}.grafana-search-panel .search-field-wrapper button{margin:0 2px 0 0}.grafana-search-panel .search-field-wrapper>span{display:block;overflow:hidden;padding-right:25px}.grafana-search-panel .selected td,.grafana-search-panel tr.selected:nth-child(odd)>td{background:#01a6e6;color:white;text-shadow:-1px -1px 1px rgba(0,0,0,0.3)}.grafana-search-panel .selected td a,.grafana-search-panel tr.selected:nth-child(odd)>td a{color:white}.grafana-search-panel .selected-tag .label-tag{background-color:#01a6e6}.search-tagview-switch{position:absolute;top:15px;right:263px;color:#00384e}.search-tagview-switch.active{color:#01a6e6}.row-button{width:24px}.modal{margin:5%;width:90%}.grafana-search-metric-actions{visibility:hidden;padding-left:20px}.grafana-search-metric-name{white-space:nowrap}.grafana-search-metric-result:hover .grafana-search-metric-actions{visibility:visible}.grafana-search-metric-result:hover .grafana-search-metric-name{color:#01a6e6}.yaxisLabel{top:50%;left:-20px;transform:rotate(-90deg);-o-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-webkit-transform:rotate(-90deg);transform-origin:0 0;-o-transform-origin:0 0;-ms-transform-origin:0 0;-moz-transform-origin:0 0;-webkit-transform-origin:0 0}.axisLabel{color:#555;font-size:11.9px;position:absolute;text-align:center;font-size:12px}.panel-fullscreen{z-index:100;display:block!important;position:fixed;left:0;right:0;top:54px;padding:0 10px;background:#fff;overflow-y:scroll;height:100%}.panel-fullscreen .panel-content{padding-bottom:130px}.dashboard-fullscreen .container-fluid.main{height:0;width:0;position:fixed;right:-10000px}.histogram-chart{position:relative}.panel-full-edit-tabs{margin-top:10px;min-height:250px;margin-left:-10px;margin-right:-10px;background-color:#f8f8f8;border-top:1px solid #fff}.panel-full-edit-tabs .tabs .nav-tabs{margin:0;background:#fff;border-top:1px solid #fff}.panel-full-edit-tabs .tabs .tab-content{display:none}.panel-full-edit-tabs .tab-content{overflow:visible;padding:15px}.panel-full-edit-tabs .nav-tabs>li>a{line-height:15px;padding-top:6px;padding-bottom:6px;font-size:.8rem}.grafana-target:last-child{border-bottom:1px solid #dad9d9}.grafana-target-inner{border-top:1px solid #dad9d9;border-left:1px solid #dad9d9;border-right:1px solid #dad9d9;background:#fff;width:100%}.grafana-target-onoff{padding:5px 7px;display:inline-block}.grafana-segment-list{list-style:none;margin:0;margin-right:90px;margin-left:30px}.grafana-segment-list>li{float:left}.grafana-segment-dropdown-menu{margin-bottom:70px}.grafana-target-segment{padding:8px 7px;font-weight:normal;border-right:1px solid #dad9d9;color:#555;display:inline-block}.has-open-function .grafana-target-segment{padding-top:25px}.grafana-target-hidden .grafana-target-segment{color:#959595}.grafana-target-segment:hover,.grafana-target-segment:focus{text-decoration:none}.grafana-target-segmenta:hover{background:#f2f2f2}.grafana-target-function{background:#f2f2f2}.grafana-target-function>a{color:#555}.grafana-target-function>a:hover{color:#01a6e6}.grafana-target-function.show-function-controls{padding-top:5px;min-width:100px;text-align:center}input[type=text].grafana-function-param-input{background:transparent;border:0;margin:0;padding:0}.grafana-target-controls-left{list-style:none;float:left;width:30px;margin:0}.grafana-target-controls{width:120px;float:right;list-style:none;margin:0;text-align:right}.grafana-target-controls>li{display:inline-block;white-space:nowrap}.grafana-target-controls a{padding:8px 7px;position:relative;top:8px;color:#555;font-size:16px}.grafana-target-hidden .grafana-target-controls a{color:#959595}.grafana-target-controls a:hover,.grafana-target-controls a:focus{text-decoration:none}input[type=text].grafana-target-text-input{padding:8px 7px;border:0;margin:0;background:transparent;float:left;color:#555;border-radius:0}input[type=text].grafana-target-segment-input{border:0;border-right:1px solid #dad9d9;margin:0;border-radius:0;padding:8px 4px}input[type=checkbox].grafana-target-option-checkbox{margin:0}select.grafana-target-segment-input{border:0;border-right:1px solid #dad9d9;margin:0;border-radius:0;height:36px;padding:8px 5px}.grafana-target .dropdown{padding:0;margin:0}.graphite-func-controls{display:none;text-align:center}.graphite-func-controls .icon-arrow-left{float:left;position:relative;top:2px}.graphite-func-controls .icon-arrow-right{float:right;position:relative;top:2px}.graphite-func-controls .icon-remove{margin-left:10px}.grafana-target .popover-content{padding:0}.scrollable{max-height:300px;overflow:auto}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar:hover{height:8px}::-webkit-scrollbar-button:start:decrement,::-webkit-scrollbar-button:end:increment{display:none}::-webkit-scrollbar-button:horizontal:decrement{display:none}::-webkit-scrollbar-button:horizontal:increment{display:none}::-webkit-scrollbar-button:vertical:decrement{display:none}::-webkit-scrollbar-button:vertical:increment{display:none}::-webkit-scrollbar-button:horizontal:decrement:active{background-image:none}::-webkit-scrollbar-button:horizontal:increment:active{background-image:none}::-webkit-scrollbar-button:vertical:decrement:active{background-image:none}::-webkit-scrollbar-button:vertical:increment:active{background-image:none}::-webkit-scrollbar-track-piece{background-color:grayDark}::-webkit-scrollbar-thumb:vertical{height:50px;background:-webkit-gradient(linear,left top,right top,color-stop(0%,#3a3a3a),color-stop(100%,#222));border:1px solid #0d0d0d;border-top:1px solid #666;border-left:1px solid #666}::-webkit-scrollbar-thumb:horizontal{width:50px;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#3a3a3a),color-stop(100%,#222));border:1px solid #1f1f1f;border-top:1px solid #666;border-left:1px solid #666}.sp-replacer{background:inherit;border:0;color:inherit}.sp-replacer:hover,.sp-replacer.sp-active{border-color:inherit;color:inherit}.sp-container{border-radius:0;background-color:#eee;border:0;padding:0}.sp-palette-container,.sp-picker-container{border:0}.sp-dd{display:none}.sp-preview{position:relative;width:15px;height:15px;border:0;margin-right:5px;float:left;z-index:0}.datapoints-warning{pointer:none;position:absolute;top:50%;left:50%;z-index:10;margin-top:-50px;margin-left:-100px;width:200px;text-align:center;cursor:auto;padding:10px}.grafana-version-footer{padding-top:15px;text-align:left}.metrics-editor-help:hover .hide{display:block}.grafana-tooltip{position:absolute;top:-1000;left:0;color:#c8c8c8;padding:10px;font-size:11pt;font-weight:200;background-color:#3a3939;border-radius:5px;z-index:9999} \ No newline at end of file diff --git a/src/css/default.min.css b/src/css/default.min.css index e4e4a64df81..19a60010168 100644 --- a/src/css/default.min.css +++ b/src/css/default.min.css @@ -4220,4 +4220,4 @@ body { /* Addresses a small issue in webkit: http://bit.ly/NEdoDq */ * http://www.apache.org/licenses/LICENSE-2.0 * * Designed and built with all the love in the world by @mdo and @fat. - */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:"";line-height:0}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{max-width:100%;width:auto\9;height:auto;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{text-shadow:none!important;color:#000!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#bbbfc2;background-color:#161616}a{color:#f2f2f2;text-decoration:none}a:hover,a:focus{color:#fff;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;content:"";line-height:0}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.127659574468085%;*margin-left:2.074468085106383%}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;content:"";line-height:0}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;content:"";line-height:0}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#adafae}a.muted:hover,a.muted:focus{color:#939695}.text-warning{color:#a47e3c}a.text-warning:hover,a.text-warning:focus{color:#7f612e}.text-error{color:#b94a48}a.text-error:hover,a.text-error:focus{color:#953b39}.text-info{color:#09c}a.text-info:hover,a.text-info:focus{color:#007399}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:#fff;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#adafae}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #bbbfc2}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;*zoom:1;padding-left:5px;padding-right:5px}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;content:"";line-height:0}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #303030;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #adafae}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #bbbfc2}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#adafae}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #bbbfc2;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;font-size:12px;color:#303030;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;white-space:nowrap}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#303030;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#adafae}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#000;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;vertical-align:middle}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#4a4a4a;border:1px solid #636363;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(82,168,236,.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(82,168,236,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(82,168,236,.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;*margin-top:0;margin-top:1px \9;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;border:1px solid #636363;background-color:#4a4a4a}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#adafae;background-color:#474747;border-color:#636363;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);cursor:not-allowed}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#788086}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#788086}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#788086}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;content:"";line-height:0}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#555}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#a47e3c}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#a47e3c}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#7f612e;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ceae78;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ceae78;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ceae78}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#a47e3c;background-color:#bbbfc2;border-color:#a47e3c}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#bbbfc2;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#bbbfc2;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#09c}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#09c}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#09c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#007399;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #3cf;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #3cf;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #3cf}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#09c;background-color:#bbbfc2;border-color:#09c}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:transparent;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;content:"";line-height:0}.form-actions:after{clear:both}.help-block,.help-inline{color:#e3e5e6}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding-left:5px}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;vertical-align:middle;font-size:0;white-space:nowrap}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#bbbfc2;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#bf3;border-color:#690}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;*zoom:1;margin-bottom:0;vertical-align:middle}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";line-height:0}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #303030}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #303030}.table .table{background-color:#161616}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #303030;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.table-bordered th,.table-bordered td{border-left:1px solid #303030}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:3px;-moz-border-radius-bottomleft:3px;border-bottom-left-radius:3px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;-moz-border-radius-bottomright:0;border-bottom-right-radius:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:rgba(100,100,100,0.3)}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#303030}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#bbbfc2}.table tbody tr.error>td{background-color:#bbbfc2}.table tbody tr.warning>td{background-color:#bbbfc2}.table tbody tr.info>td{background-color:#bbbfc2}.table-hover tbody tr.success:hover>td{background-color:#aeb2b6}.table-hover tbody tr.error:hover>td{background-color:#aeb2b6}.table-hover tbody tr.warning:hover>td{background-color:#aeb2b6}.table-hover tbody tr.info:hover>td{background-color:#aeb2b6}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat;margin-top:1px}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{background-position:-216px -120px;width:16px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{background-position:-384px -120px;width:16px}.icon-folder-open{background-position:-408px -120px;width:16px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#303030;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:transparent;border-bottom:1px solid #222}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#bbbfc2;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{text-decoration:none;color:#fff;background-color:#2ab2e4;background-image:-moz-linear-gradient(top,#33b5e5,#1dade2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#33b5e5),to(#1dade2));background-image:-webkit-linear-gradient(top,#33b5e5,#1dade2);background-image:-o-linear-gradient(top,#33b5e5,#1dade2);background-image:linear-gradient(to bottom,#33b5e5,#1dade2);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff33b5e5',endColorstr='#ff1dade2',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#2ab2e4;background-image:-moz-linear-gradient(top,#33b5e5,#1dade2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#33b5e5),to(#1dade2));background-image:-webkit-linear-gradient(top,#33b5e5,#1dade2);background-image:-o-linear-gradient(top,#33b5e5,#1dade2);background-image:linear-gradient(to bottom,#33b5e5,#1dade2);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff33b5e5',endColorstr='#ff1dade2',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#adafae}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:default}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#000;margin-top:5px;margin-right:-10px}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-left:20px;padding-right:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#131517;border:1px solid #030303;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well-small{padding:9px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;*zoom:1;padding:4px 12px;margin-bottom:0;font-size:14px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#303030;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#9ea09f;background-image:-moz-linear-gradient(top,#adafae,#868988);background-image:-webkit-gradient(linear,0 0,0 100%,from(#adafae),to(#868988));background-image:-webkit-linear-gradient(top,#adafae,#868988);background-image:-o-linear-gradient(top,#adafae,#868988);background-image:linear-gradient(to bottom,#adafae,#868988);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffadafae',endColorstr='#ff868988',GradientType=0);border-color:#868988 #868988 #606362;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#868988;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #bbb;*border:0;border-bottom-color:#a2a2a2;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#303030;background-color:#868988;*background-color:#797d7b}.btn:active,.btn.active{background-color:#6d706e \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#303030;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#38b7e5;background-image:-moz-linear-gradient(top,#4abde8,#1dade2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#4abde8),to(#1dade2));background-image:-webkit-linear-gradient(top,#4abde8,#1dade2);background-image:-o-linear-gradient(top,#4abde8,#1dade2);background-image:linear-gradient(to bottom,#4abde8,#1dade2);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff4abde8',endColorstr='#ff1dade2',GradientType=0);border-color:#1dade2 #1dade2 #14799e;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#1dade2;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#1dade2;*background-color:#1a9bcb}.btn-primary:active,.btn-primary.active{background-color:#178ab4 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#f58a0f;background-image:-moz-linear-gradient(top,#ff941a,#e67a00);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ff941a),to(#e67a00));background-image:-webkit-linear-gradient(top,#ff941a,#e67a00);background-image:-o-linear-gradient(top,#ff941a,#e67a00);background-image:linear-gradient(to bottom,#ff941a,#e67a00);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff941a',endColorstr='#ffe67a00',GradientType=0);border-color:#e67a00 #e67a00 #995200;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#e67a00;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#e67a00;*background-color:#cc6d00}.btn-warning:active,.btn-warning.active{background-color:#b35f00 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#d10000;background-image:-moz-linear-gradient(top,#e60000,#b30000);background-image:-webkit-gradient(linear,0 0,0 100%,from(#e60000),to(#b30000));background-image:-webkit-linear-gradient(top,#e60000,#b30000);background-image:-o-linear-gradient(top,#e60000,#b30000);background-image:linear-gradient(to bottom,#e60000,#b30000);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe60000',endColorstr='#ffb30000',GradientType=0);border-color:#b30000 #b30000 #600;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#b30000;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#b30000;*background-color:#900}.btn-danger:active,.btn-danger.active{background-color:#800000 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#699e00;background-image:-moz-linear-gradient(top,#77b300,#558000);background-image:-webkit-gradient(linear,0 0,0 100%,from(#77b300),to(#558000));background-image:-webkit-linear-gradient(top,#77b300,#558000);background-image:-o-linear-gradient(top,#77b300,#558000);background-image:linear-gradient(to bottom,#77b300,#558000);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff77b300',endColorstr='#ff558000',GradientType=0);border-color:#558000 #558000 #230;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#558000;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#558000;*background-color:#460}.btn-success:active,.btn-success.active{background-color:#334d00 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#993dc7;background-image:-moz-linear-gradient(top,#a347d1,#8a2eb8);background-image:-webkit-gradient(linear,0 0,0 100%,from(#a347d1),to(#8a2eb8));background-image:-webkit-linear-gradient(top,#a347d1,#8a2eb8);background-image:-o-linear-gradient(top,#a347d1,#8a2eb8);background-image:linear-gradient(to bottom,#a347d1,#8a2eb8);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffa347d1',endColorstr='#ff8a2eb8',GradientType=0);border-color:#8a2eb8 #8a2eb8 #5c1f7a;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#8a2eb8;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#8a2eb8;*background-color:#7a29a3}.btn-info:active,.btn-info.active{background-color:#6b248f \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#080808;background-image:-moz-linear-gradient(top,#0d0d0d,#000);background-image:-webkit-gradient(linear,0 0,0 100%,from(#0d0d0d),to(#000));background-image:-webkit-linear-gradient(top,#0d0d0d,#000);background-image:-o-linear-gradient(top,#0d0d0d,#000);background-image:linear-gradient(to bottom,#0d0d0d,#000);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0d0d0d',endColorstr='#ff000000',GradientType=0);border-color:#000 #000 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#000;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#000;*background-color:#000}.btn-inverse:active,.btn-inverse.active{background-color:#000 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{border-color:transparent;cursor:pointer;color:#f2f2f2;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#fff;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#303030;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*zoom:1;font-size:0;vertical-align:middle;white-space:nowrap;*margin-left:.3em}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{font-size:0;margin-top:10px;margin-bottom:10px}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-bottomleft:3px;border-bottom-left-radius:3px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,.125),inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,.125),inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(255,255,255,.125),inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);*padding-top:5px;*padding-bottom:5px}.btn-group>.btn-mini+.dropdown-toggle{padding-left:5px;padding-right:5px;*padding-top:2px;*padding-bottom:2px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{padding-left:12px;padding-right:12px;*padding-top:7px;*padding-bottom:7px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.btn-group.open .btn.dropdown-toggle{background-color:#868988}.btn-group.open .btn-primary.dropdown-toggle{background-color:#1dade2}.btn-group.open .btn-warning.dropdown-toggle{background-color:#e67a00}.btn-group.open .btn-danger.dropdown-toggle{background-color:#b30000}.btn-group.open .btn-success.dropdown-toggle{background-color:#558000}.btn-group.open .btn-info.dropdown-toggle{background-color:#8a2eb8}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#000}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-left-width:5px;border-right-width:5px;border-top-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-left:0;margin-top:-1px}.btn-group-vertical>.btn:first-child{-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#bbbfc2;border:1px solid transparent;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.alert,.alert h4{color:#a47e3c}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{background-color:#bbbfc2;border-color:#aeb4b6;color:#468847}.alert-success h4{color:#468847}.alert-danger,.alert-error{background-color:#bbbfc2;border-color:#b3b9bb;color:#b94a48}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{background-color:#bbbfc2;border-color:#a8afb1;color:#09c}.alert-info h4{color:#09c}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-left:0;margin-bottom:20px;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#bbbfc2}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#adafae;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-left:15px;padding-right:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#f2f2f2}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";line-height:0}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#bbbfc2 #bbbfc2 #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#bbb;background-color:#161616;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#f2f2f2}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{border-color:#ddd;z-index:2}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{border-top-color:#f2f2f2;border-bottom-color:#f2f2f2;margin-top:6px}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#bbb;border-bottom-color:#bbb}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#adafae;border-color:#adafae}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#adafae}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;content:"";line-height:0}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-bottom-color:transparent;border-top-color:#ddd}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#bbbfc2 #ddd #bbbfc2 #bbbfc2}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#bbbfc2 #bbbfc2 #bbbfc2 #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#adafae}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;background-color:transparent;cursor:default}.navbar{overflow:visible;margin-bottom:20px;*position:relative;*z-index:2}.navbar-inner{min-height:50px;padding-left:20px;padding-right:20px;background-color:#1f1f1f;background-image:-moz-linear-gradient(top,#1f1f1f,#1f1f1f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#1f1f1f),to(#1f1f1f));background-image:-webkit-linear-gradient(top,#1f1f1f,#1f1f1f);background-image:-o-linear-gradient(top,#1f1f1f,#1f1f1f);background-image:linear-gradient(to bottom,#1f1f1f,#1f1f1f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff1f1f1f',endColorstr='#ff1f1f1f',GradientType=0);border:1px solid #000;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065);*zoom:1}.navbar-inner:before,.navbar-inner:after{display:table;content:"";line-height:0}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{float:left;display:block;padding:15px 20px 15px;margin-left:-20px;font-size:20px;font-weight:200;color:#adafae;text-shadow:0 1px 0 #1f1f1f}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:50px;color:#adafae}.navbar-link{color:#adafae}.navbar-link:hover,.navbar-link:focus{color:#fff}.navbar .divider-vertical{height:50px;margin:0 9px;border-left:1px solid #1f1f1f;border-right:1px solid #1f1f1f}.navbar .btn,.navbar .btn-group{margin-top:10px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;content:"";line-height:0}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:10px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:10px;margin-bottom:0}.navbar-search .search-query{margin-bottom:0;padding:4px 14px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,.1);box-shadow:0 1px 10px rgba(0,0,0,.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,.1);box-shadow:0 -1px 10px rgba(0,0,0,.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:15px 15px 15px;color:#adafae;text-decoration:none;text-shadow:0 1px 0 #1f1f1f}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{background-color:transparent;color:#fff;text-decoration:none}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#fff;text-decoration:none;background-color:#1f1f1f;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#121212;background-image:-moz-linear-gradient(top,#121212,#121212);background-image:-webkit-gradient(linear,0 0,0 100%,from(#121212),to(#121212));background-image:-webkit-linear-gradient(top,#121212,#121212);background-image:-o-linear-gradient(top,#121212,#121212);background-image:linear-gradient(to bottom,#121212,#121212);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff121212',endColorstr='#ff121212',GradientType=0);border-color:#121212 #121212 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#121212;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#121212;*background-color:#050505}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#000 \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,0.2);position:absolute;top:-7px;left:9px}.navbar .nav>li>.dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #303030;position:absolute;top:-6px;left:10px}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{border-top:7px solid #ccc;border-top-color:rgba(0,0,0,0.2);border-bottom:0;bottom:-7px;top:auto}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{border-top:6px solid #303030;border-bottom:0;bottom:-6px;top:auto}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{background-color:#1f1f1f;color:#fff}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#adafae;border-bottom-color:#adafae}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{left:auto;right:0}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{left:auto;right:12px}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{left:auto;right:13px}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{left:auto;right:100%;margin-left:0;margin-right:-1px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#252a30;background-image:-moz-linear-gradient(top,#252a30,#252a30);background-image:-webkit-gradient(linear,0 0,0 100%,from(#252a30),to(#252a30));background-image:-webkit-linear-gradient(top,#252a30,#252a30);background-image:-o-linear-gradient(top,#252a30,#252a30);background-image:linear-gradient(to bottom,#252a30,#252a30);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff252a30',endColorstr='#ff252a30',GradientType=0);border-color:transparent}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#adafae;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#adafae}.navbar-inverse .navbar-text{color:#adafae}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{background-color:#242a31;color:#fff}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#242a31}.navbar-inverse .navbar-link{color:#adafae}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-left-color:#252a30;border-right-color:#252a30}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{background-color:#242a31;color:#fff}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#adafae;border-bottom-color:#adafae}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#5d6978;border-color:#252a30;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1),0 1px 0 rgba(255,255,255,.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1),0 1px 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.1),0 1px 0 rgba(255,255,255,.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#fff}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#fff}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#fff}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#303030;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15);outline:0}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#1a1d22;background-image:-moz-linear-gradient(top,#1a1d22,#1a1d22);background-image:-webkit-gradient(linear,0 0,0 100%,from(#1a1d22),to(#1a1d22));background-image:-webkit-linear-gradient(top,#1a1d22,#1a1d22);background-image:-o-linear-gradient(top,#1a1d22,#1a1d22);background-image:linear-gradient(to bottom,#1a1d22,#1a1d22);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff1a1d22',endColorstr='#ff1a1d22',GradientType=0);border-color:#1a1d22 #1a1d22 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#1a1d22;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#1a1d22;*background-color:#0f1113}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#040405 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.breadcrumb>li{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 0 #fff}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#adafae}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;*zoom:1;margin-left:0;margin-bottom:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#161616;border:1px solid transparent;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#33b5e5}.pagination ul>.active>a,.pagination ul>.active>span{color:#adafae;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#adafae;background-color:transparent;cursor:default}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-bottomleft:3px;border-bottom-left-radius:3px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-top-left-radius:2px;-moz-border-radius-topleft:2px;border-top-left-radius:2px;-webkit-border-bottom-left-radius:2px;-moz-border-radius-bottomleft:2px;border-bottom-left-radius:2px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:2px;-moz-border-radius-topright:2px;border-top-right-radius:2px;-webkit-border-bottom-right-radius:2px;-moz-border-radius-bottomright:2px;border-bottom-right-radius:2px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;list-style:none;text-align:center;*zoom:1}.pager:before,.pager:after{display:table;content:"";line-height:0}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#adafae;background-color:#fff;cursor:default}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:absolute;z-index:1050;width:100%;background-color:#fff;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;outline:0}.modal.fade{-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out;top:-25%}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;overflow-y:auto;padding:15px}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;*zoom:1}.modal-footer:before,.modal-footer:after{display:table;content:"";line-height:0}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1020;display:block;visibility:visible;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#303030;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.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:#303030}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#303030}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#303030}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#303030}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#303030;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:normal;line-height:18px;background-color:#303030;border-bottom:1px solid #232323;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#303030}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right .arrow:after{left:1px;bottom:-10px;border-left-width:0;border-right-color:#303030}.popover.bottom .arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#303030}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left .arrow:after{right:1px;border-right-width:0;border-left-color:#303030;bottom:-10px}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;content:"";line-height:0}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#f2f2f2;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px;color:#bbb}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;vertical-align:baseline;white-space:nowrap;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#adafae}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-left:9px;padding-right:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f80}.label-warning[href],.badge-warning[href]{background-color:#cc6d00}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#09c}.label-info[href],.badge-info[href]{background-color:#007399}.label-inverse,.badge-inverse{background-color:#303030}.label-inverse[href],.badge-inverse[href]{background-color:#161616}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.progress .bar{width:0;height:100%;color:#fff;float:left;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,.15),inset 0 -1px 0 rgba(0,0,0,.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,.15),inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 1px 0 0 rgba(0,0,0,.15),inset 0 -1px 0 rgba(0,0,0,.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#ff9d2e;background-image:-moz-linear-gradient(top,#ffac4d,#f80);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ffac4d),to(#f80));background-image:-webkit-linear-gradient(top,#ffac4d,#f80);background-image:-o-linear-gradient(top,#ffac4d,#f80);background-image:linear-gradient(to bottom,#ffac4d,#f80);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffac4d',endColorstr='#ffff8800',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#ffac4d;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{overflow:hidden;width:100%;position:relative}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#1f1f1f;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{left:auto;right:15px}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;left:0;right:0;bottom:0;padding:15px;background:#303030;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{color:#fff;line-height:20px}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#303030;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;color:inherit;letter-spacing:-1px}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}label,input,button,select,textarea,.navbar .search-query:-moz-placeholder,.navbar .search-query::-webkit-input-placeholder{font-family:'Droid Sans',sans-serif;color:#bbb}blockquote{border-left:5px solid #303030}blockquote.pull-right{border-right:5px solid #303030}html{min-height:100%}body{min-height:100%;background:#161616}.page-header{border-bottom:1px solid #303030}hr{border-bottom:0}.navbar .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar .brand{padding:15px 20px 15px;color:#bbbfc2;font-weight:normal;text-shadow:none}.navbar .nav>li>a{padding:15px 15px 14px;border-bottom:1px solid transparent}.navbar .nav>li>a:hover,.navbar .nav>.active>a,.navbar .nav>.active>a:hover{border-bottom:1px solid #33b5e5}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar .navbar-text{margin-bottom:1px;padding:15px 15px 14px;line-height:inherit}.navbar .divider-vertical{margin:0;border-left:1px solid #303030;border-right-width:0}.navbar .search-query,.navbar .search-query:focus,.navbar .search-query.focused{-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;background-color:#303030;line-height:normal;color:#adafae;text-shadow:none}.navbar .search-query:-moz-placeholder,.navbar .search-query:focus:-moz-placeholder,.navbar .search-query.focused:-moz-placeholder{color:#bbb}.navbar .search-query:-ms-input-placeholder,.navbar .search-query:focus:-ms-input-placeholder,.navbar .search-query.focused:-ms-input-placeholder{color:#bbb}.navbar .search-query::-webkit-input-placeholder,.navbar .search-query:focus::-webkit-input-placeholder,.navbar .search-query.focused::-webkit-input-placeholder{color:#bbb}@media(max-width:979px){.navbar .nav-collapse .nav li>a{border:0;color:#bbbfc2;font-weight:normal;text-shadow:none}.navbar .nav-collapse .nav li>a:hover{border:0;background-color:#33b5e5}.navbar .nav-collapse .nav .active>a{border:0;background-color:#33b5e5}.navbar .nav-collapse .dropdown-menu a:hover{background-color:#33b5e5}.navbar .nav-collapse .navbar-form,.navbar .nav-collapse .navbar-search{border-top:0;border-bottom:0}.navbar .nav-collapse .nav-header{color:rgba(128,128,128,0.6)}.navbar-inverse .nav-collapse .nav li>a:hover{background-color:#111}.navbar-inverse .nav-collapse .nav .active>a{background-color:#111}.navbar-inverse .nav-collapse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav-collapse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav-collapse .nav li.dropdown.open.active>.dropdown-toggle{background-color:#111}}.dropdown-menu{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}div.subnav{margin:0 1px;background-color:#1f1f1f;background-image:none;border:0;border-bottom:1px solid #303030}div.subnav .nav>li>a,div.subnav .nav>li:first-child>a,div.subnav .nav>li:first-child>a:hover{padding:11px 12px;border:0;background-color:#1f1f1f;color:#adafae}div.subnav .nav>li>a:hover,div.subnav .nav>li.active>a,div.subnav .nav>li.active>a:hover,div.subnav .nav>li:first-child>a:hover{padding:11px 12px;background:transparent;border:0;border-bottom:1px solid #33b5e5;color:#fff}div.subnav .nav li.nav-header{text-shadow:none}div.subnav-fixed{top:50px;margin:0}.nav-tabs{border-bottom:1px solid #303030}.nav-tabs>li>a{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs li>a:hover,.nav-tabs li.active>a,.nav-tabs li.active>a:hover{border-color:transparent;background-color:#33b5e5;color:#fff}.nav-tabs li.disabled>a{color:#bbbfc2}.nav-tabs .open .dropdown-toggle{background-color:#060606;border-color:transparent}.nav-pills li>a:hover{background-color:#33b5e5;color:#fff}.nav-pills li.disabled>a{color:#bbbfc2}.nav-pills .open .dropdown-toggle{background-color:#060606}.nav-pills .dropdown-menu li>a:hover{border:0}.nav-list li>a{text-shadow:none}.nav-list li>a:hover{background-color:#33b5e5;color:#fff}.nav-list .nav-header{text-shadow:none}.nav-list .divider{background-color:transparent;border-bottom:1px solid #303030}.nav-stacked li>a{border:1px solid #303030!important}.nav-stacked li>a:hover,.nav-stacked li.active>a{background-color:#33b5e5;color:#fff}.tabbable .nav-tabs,.tabbable .nav-tabs li.active>a{border-color:#303030}.breadcrumb{background-color:transparent;background-image:none;border-width:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;font-size:14px}.breadcrumb li{text-shadow:none}.breadcrumb li>a{color:#33b5e5;text-shadow:none}.pagination ul{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>span,.pagination ul>.disabled>span:hover{background-color:rgba(0,0,0,0.2)}.pager li>a,.pager li>span{background-color:#161616;border:0}.pager li>a:hover,.pager li>span:hover{background-color:#33b5e5}.pager .disabled a,.pager .disabled a:hover{background-color:#161616}.btn{padding:5px 12px;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;text-shadow:none}.btn.disabled{box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-large{padding:22px 30px}.btn-small{padding:2px 10px}.btn-mini{padding:2px 6px}.btn-group>.btn:first-child,.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.dropdown-toggle{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}input,textarea,select{border-width:2px;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{color:#adafae}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly],.uneditable-input{border-color:#444}input:focus,textarea:focus,input.focused,textarea.focused{border-color:#52a8ec;outline:0;outline:thin dotted \9}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus,select:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}legend,label{color:#bbbfc2;border-bottom:0 solid #222}.form-actions{border-top:1px solid #222}.table{-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.table tbody tr.success td{background-color:#690;color:#fff}.table tbody tr.error td{background-color:#c00;color:#fff}.table tbody tr.info td{background-color:#33b5e5;color:#fff}.alert,.alert .alert-heading,.alert-success,.alert-success .alert-heading,.alert-danger,.alert-error,.alert-danger .alert-heading,.alert-error .alert-heading,.alert-info,.alert-info .alert-heading{color:#bbbfc2;text-shadow:none;border:0}.label{color:#bbbfc2}.badge{border-radius:0;font-weight:200}.label,.alert{background-color:#888}.label:hover{background-color:#6e6e6e}.label-important,.alert-danger,.alert-error{background-color:#c00}.label-important:hover{background-color:#900}.label-warning{background-color:#cc6d00}.label-warning:hover{background-color:#995200}.label-success,.alert-success{background-color:#5c8a00}.label-success:hover{background-color:#3a5700}.label-info,.alert-info{background-color:#007399}.label-info:hover{background-color:#004d66}a:hover{text-decoration:none}.well,.hero-unit{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.well,.hero-unit{border-top:solid 1px #3d3d3d;-webkit-box-shadow:0 2px 4px rgba(0,0,0,0.8);-moz-box-shadow:0 2px 4px rgba(0,0,0,0.8);box-shadow:0 2px 4px rgba(0,0,0,0.8)}.thumbnail{border-color:#303030}.progress{background-color:#060606;background-image:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.modal{-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;border-top:solid 1px #3d3d3d;background-color:#303030}.modal-header{border-bottom:1px solid #303030}.modal-footer{background-color:#303030;border-top:1px solid #303030;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.popover{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.popover-title{border-bottom:0;color:#fff}.footer{border-top:1px solid #303030}@media(max-width:767px){div.panel{width:100%!important;padding:0!important}}.container-fluid{padding-left:0;padding-right:0}.container.grafana-container{padding:5px 10px;width:100%;box-sizing:border-box}.bgNav{background:#1f1f1f}.bgPrimary{background:#4abde8;color:rgba(255,255,255,0.9)}.bgInfo{background:#a347d1;color:rgba(255,255,255,0.9)}.bgSuccess{background:#77b300;color:rgba(255,255,255,0.9)}.bgWarning{background:#ff941a;color:rgba(255,255,255,0.9)}.bgDanger{background:#e60000;color:rgba(255,255,255,0.9)}.bgInverse{background:#0d0d0d;color:rgba(255,255,255,0.9)}code,pre{background-color:#bbbfc2}.panel{display:inline-table;vertical-align:top}.panel-container{padding:0;background:#1f1f1f;margin:5px}.panel-content{padding:0 10px 5px 10px}.panel-title{border:0;font-weight:bold}.panel-loading{position:absolute;top:0;right:4px;z-index:800}.panel div.panel-extra div.panel-extra-container{margin-right:-10px;margin-top:3px;text-align:center}.panel div.panel-extra div.panel-extra-container ul{text-align:left}.panel div.panel-extra{font-size:.9em;margin-bottom:0}.panel div.panel-extra .extra{float:right!important}.panel-error{color:#fff;padding:5px 10px 0 10px}.panel-error-inspector-link{float:right;margin-right:10px}div.editor-row{vertical-align:top}div.editor-row div.section{margin-right:20px;vertical-align:top;display:inline-block}div.editor-option{vertical-align:top;display:inline-block;margin-right:10px}div.editor-option label{display:block}#events{font-size:12px}.version{font-size:85%}.legend{color:#000}div.fake-input{background-color:#4a4a4a;border:1px solid #636363;-webkit-border-radius:3px 3px 3px 3px;-moz-border-radius:3px 3px 3px 3px;border-radius:3px 3px 3px 3px}hr.small{margin:5px 0}form input.ng-invalid{color:#b94a48}.editor-title{margin-right:10px;font-size:1.7em;font-weight:bold;text-transform:capitalize}.editor-title small{opacity:.5;font-size:.7em;font-weight:normal}.bordered{border:1px solid #303030}.table-unpadded th,.table-unpadded td{padding:0 2px}.spy{position:absolute;right:0;top:0}.navbar-inner{border-width:0}.kibana-row{margin-bottom:5px}.row-tab .dropdown-menu-right{top:0;left:33px}.row-tab-button{padding:0;cursor:pointer;vertical-align:middle;width:30px;height:30px;text-align:center;display:inline-block;line-height:30px}.row-button{width:30px;text-align:center;float:left;cursor:pointer}.row-text{white-space:nowrap;text-transform:uppercase;font-weight:bold;font-size:.9em;margin:0 10px}.row-close{padding:0;margin:0;min-height:30px!important;line-height:30px;background:#1f1f1f}.row-open{margin-top:5px;left:-34px;position:absolute;z-index:100;transition:.25s left;transition-delay:.25s;-webkit-transition-delay:.25s}.row-open:hover{left:-12px}.odd{background-color:rgba(100,100,100,0.3)}.nomargin{margin:0}[ng\:cloak],[ng-cloak],.ng-cloak{display:none!important}.table tbody+tbody{border-top:0}.ui-draggable-dragging{display:block;z-index:9999}.dragInProgress .panel-container{border:3px solid rgba(100,100,100,0.5)}.link{color:#f2f2f2;cursor:pointer}.link:hover{color:#fff}.pointer{cursor:pointer}.popover{max-width:480px}.modal{width:100%;top:0!important}.tiny{font-size:50%}.smaller{font-size:70%}.small{font-size:85%}.large{font-size:120%}.strong{font-weight:bold}a{cursor:pointer}.normal{font-weight:normal}.light{font-weight:200}.input-smaller{width:75px}.string{color:#c8ccce}.number{color:#00ace6}.boolean{color:#b78c43}.key{color:#c05c5a}.btn-active{background-color:#e6e6e6;background-image:none;box-shadow:0 2px 4px rgba(0,0,0,0.15) inset,0 1px 2px rgba(0,0,0,0.05);outline:0 none}.remove:hover{background-color:#b30000}.faded{opacity:.2}div.flot-text{color:#bbbfc2!important}.dashboard-notice{z-index:8000;margin-left:0;padding:3px 0 3px 0;width:100%;padding-left:20px;color:#fff}.alert-warning{background-color:#bbbfc2;border-color:transparent;color:#a47e3c}.popover.topLeft{margin-top:-10px}.popover.topLeft .arrow{bottom:-10px;left:25%;margin-left:-10px;border-width:10px 10px 0;border-top-color:#303030}.popover.topLeft .arrow:after{border-width:11px 11px 0;border-top-color:rgba(0,0,0,0.25);bottom:-1px;left:-11px}.popover.topRight{margin-top:-10px}.popover.topRight .arrow{bottom:-10px;left:75%;margin-left:-10px;border-width:10px 10px 0;border-top-color:#303030}.popover.topRight .arrow:after{border-width:11px 11px 0;border-top-color:rgba(0,0,0,0.25);bottom:-1px;left:-11px}.popover.rightTop .arrow{top:10%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.rightTop .arrow:after{left:1px;bottom:-10px;border-left-width:0;border-right-color:#303030}.popover.rightBottom .arrow{top:90%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.rightBottom .arrow:after{left:1px;bottom:-10px;border-left-width:0;border-right-color:#303030}.popover.bottomLeft .arrow{left:10%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottomLeft .arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#303030}.popover.bottomRight .arrow{left:90%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottomRight .arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#303030}.popover.leftTop .arrow{top:10%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.leftTop .arrow:after{right:1px;border-right-width:0;border-left-color:#303030;bottom:-10px}.popover.leftBottom .arrow{top:90%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.leftBottom .arrow:after{right:1px;border-right-width:0;border-left-color:#303030;bottom:-10px}.popover.topLeft .arrow{left:10%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.topLeft .arrow:after{bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#303030}.popover.topRight .arrow{left:90%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.topRight .arrow:after{bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#303030}.label-tag{background-color:#93c;color:#f2f2f2}.label-tag:hover{background-color:#7a29a3;color:#fff}.annotation-editor-table td{white-space:nowrap}.save-dashboard-dropdown{padding:10px}.save-dashboard-dropdown li>a{padding-left:5px}.save-dashboard-dropdown-save-form{margin-bottom:5px}.inspector-request-table td{padding:5px}.inspector-request-table td:first-child{white-space:nowrap}code,pre{background-color:#1f1f1f;color:#bbbfc2}.submenu-controls{background:#292929;font-size:inherit}.submenu-controls label{margin:0;padding-right:4px;display:inline}.submenu-controls input[type=checkbox]{margin:0}.submenu-controls-visible:not(.hide-controls) .panel-fullscreen{top:82px}.submenu-panel{padding:0 4px 0 8px;border-right:1px solid #202020;float:left}.submenu-panel:first-child{padding-left:17px}.submenu-panel-title{float:left;text-transform:uppercase;padding:4px 10px 3px 0}.submenu-panel-wrapper{float:left}.submenu-toggle{padding:4px 0 3px 8px;float:left}.submenu-toggle .annotation-color-icon{position:relative;top:2px}.submenu-toggle:first-child{padding-left:0}.submenu-control-edit{padding:4px 4px 3px 8px;float:right;border-left:1px solid #202020;margin-left:8px}.annotation-disabled,.annotation-disabled a{color:#788086}.filtering-container{float:left}.filtering-container label{float:left}.filtering-container input[type=checkbox]{margin:0}.filter-panel-filter{display:inline-block;vertical-align:top;padding:4px 10px 3px 10px;border-right:1px solid #202020}.filter-panel-filter:first-child{padding-left:0}.filter-panel-filter ul{margin-bottom:0}.filter-deselected{opacity:.5}.filtering-container .filter-action{float:right;padding-right:2px;margin-bottom:0!important;margin-left:0;margin-top:4px}.add-filter-action{padding:3px 5px 0 5px;position:relative;top:4px}.filter-mandate{text-decoration:underline;cursor:pointer}.filter-apply{float:right}.graph-canvas-wrapper{position:relative}.graph-legend{margin:0 20px;text-align:left;position:relative;top:2px}.graph-legend .popover-content{padding:0}.graph-legend-icon{position:relative;top:2px}.graph-legend-series,.graph-legend-icon,.graph-legend-alias,.graph-legend-value{display:inline-block;white-space:nowrap}.graph-legend-series{padding-left:10px}.graph-legend-value{padding-left:6px}.graph-legend-table{display:table}.graph-legend-table .graph-legend-series{display:table-row;padding-left:0}.graph-legend-table .graph-legend-series.pull-right{float:none}.graph-legend-table .graph-legend-series.pull-right .graph-legend-alias::after{content:'y\00B2'}.graph-legend-table .graph-legend-alias{display:table-cell;white-space:nowrap}.graph-legend-table .graph-legend-icon{display:table-cell;white-space:nowrap;padding:0 4px}.graph-legend-table .graph-legend-value{display:table-cell;white-space:nowrap;padding-left:15px}.graph-legend-rightside.graph-wrapper{display:table;width:100%}.graph-legend-rightside .graph-canvas-wrapper{display:table-cell;width:100%;position:relative}.graph-legend-rightside .graph-legend-wrapper{display:table-cell;vertical-align:top;position:relative;left:-4px}.graph-legend-rightside .graph-legend{margin:0}.graph-legend-rightside .graph-legend-series{display:block;padding-left:0}.graph-legend-rightside .graph-legend-table .graph-legend-series{display:table-row}.graph-legend-series-hidden a{color:#7f7f7f}.graph-legend-popover{width:200px}.graph-legend-popover label{display:inline-block}.graph-legend-popover .btn{padding:1px 3px;margin-right:0;line-height:initial}.graph-legend-popover .close{margin-right:5px;color:#f2f2f2;opacity:.7;text-shadow:none}.graph-legend-popover .editor-row{padding:5px}.bootstrap-tagsinput{display:inline-block;padding:4px 6px;margin-bottom:10px;color:#555;vertical-align:middle;border-radius:4px;max-width:100%;line-height:22px;background-color:#4a4a4a;border:1px solid #636363;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}.bootstrap-tagsinput input{border:0;box-shadow:none;outline:0;background-color:transparent;padding:0;padding-left:5px;margin:0;width:auto!important;max-width:inherit}.bootstrap-tagsinput input:focus{border:0;box-shadow:none}.bootstrap-tagsinput .tag{margin-right:2px;color:white}.bootstrap-tagsinput .tag [data-role="remove"]{margin-left:8px;cursor:pointer}.bootstrap-tagsinput .tag [data-role="remove"]:after{content:"x";padding:0 2px}.bootstrap-tagsinput .tag [data-role="remove"]:hover{box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.bootstrap-tagsinput .tag [data-role="remove"]:hover:active{box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.hide-controls{padding:0}.hide-controls .grafana-row{display:none}.hide-controls .submenu-controls{display:none}.hide-controls .add-row-panel-hint{display:none}.playlist-active .grafana-menu-zoom-out,.playlist-active .grafana-menu-save,.playlist-active .grafana-menu-load,.playlist-active .add-row-panel-hint,.playlist-active .grafana-menu-home,.playlist-active .grafana-menu-refresh,.playlist-active .grafana-menu-edit{display:none}.playlist-active .grafana-menu-stop-playlist{display:list-item}.grafana-search-panel{padding:6px 10px}.grafana-search-panel .search-field-wrapper input{width:100%}.grafana-search-panel .search-field-wrapper button{margin:0 2px 0 0}.grafana-search-panel .search-field-wrapper>span{display:block;overflow:hidden;padding-right:25px}.grafana-search-panel .selected td,.grafana-search-panel tr.selected:nth-child(odd)>td{background:#33b5e5;color:white;text-shadow:-1px -1px 1px rgba(0,0,0,0.3)}.grafana-search-panel .selected td a,.grafana-search-panel tr.selected:nth-child(odd)>td a{color:white}.grafana-search-panel .selected-tag .label-tag{background-color:#33b5e5}.search-tagview-switch{position:absolute;top:15px;right:263px;color:#a6a6a6}.search-tagview-switch.active{color:#f2f2f2}.row-button{width:24px}.modal{margin:5%;width:90%}.grafana-search-metric-actions{visibility:hidden;padding-left:20px}.grafana-search-metric-name{white-space:nowrap}.grafana-search-metric-result:hover .grafana-search-metric-actions{visibility:visible}.grafana-search-metric-result:hover .grafana-search-metric-name{color:#33b5e5}.yaxisLabel{top:50%;left:-20px;transform:rotate(-90deg);-o-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-webkit-transform:rotate(-90deg);transform-origin:0 0;-o-transform-origin:0 0;-ms-transform-origin:0 0;-moz-transform-origin:0 0;-webkit-transform-origin:0 0}.axisLabel{color:#bbbfc2;font-size:11.9px;position:absolute;text-align:center;font-size:12px}.panel-fullscreen{z-index:100;display:block!important;position:fixed;left:0;right:0;top:54px;padding:0 10px;background:#1f1f1f;overflow-y:scroll;height:100%}.panel-fullscreen .panel-content{padding-bottom:130px}.dashboard-fullscreen .container-fluid.main{height:0;width:0;position:fixed;right:-10000px}.histogram-chart{position:relative}.panel-full-edit-tabs{margin-top:10px;min-height:250px;margin-left:-10px;margin-right:-10px;background-color:transparent;border-top:1px solid #000}.panel-full-edit-tabs .tabs .nav-tabs{margin:0;background:#303030;border-top:1px solid #555}.panel-full-edit-tabs .tabs .tab-content{display:none}.panel-full-edit-tabs .tab-content{overflow:visible;padding:15px}.panel-full-edit-tabs .nav-tabs>li>a{line-height:15px;padding-top:6px;padding-bottom:6px;font-size:.8rem}.grafana-target:last-child{border-bottom:1px solid #000}.grafana-target-inner{border-top:1px solid #000;border-left:1px solid #000;border-right:1px solid #000;background:#303030;width:100%}.grafana-target-onoff{padding:5px 7px;display:inline-block}.grafana-segment-list{list-style:none;margin:0;margin-right:90px;margin-left:30px}.grafana-segment-list>li{float:left}.grafana-segment-dropdown-menu{margin-bottom:70px}.grafana-target-segment{padding:8px 7px;font-weight:normal;border-right:1px solid #050505;color:#c8c8c8;display:inline-block}.has-open-function .grafana-target-segment{padding-top:25px}.grafana-target-hidden .grafana-target-segment{color:#888}.grafana-target-segment:hover,.grafana-target-segment:focus{text-decoration:none}.grafana-target-segmenta:hover{background:#444}.grafana-target-function{background:#444}.grafana-target-function>a{color:#c8c8c8}.grafana-target-function>a:hover{color:#f2f2f2}.grafana-target-function.show-function-controls{padding-top:5px;min-width:100px;text-align:center}input[type=text].grafana-function-param-input{background:transparent;border:0;margin:0;padding:0}.grafana-target-controls-left{list-style:none;float:left;width:30px;margin:0}.grafana-target-controls{width:120px;float:right;list-style:none;margin:0;text-align:right}.grafana-target-controls>li{display:inline-block;white-space:nowrap}.grafana-target-controls a{padding:8px 7px;position:relative;top:8px;color:#c8c8c8;font-size:16px}.grafana-target-hidden .grafana-target-controls a{color:#888}.grafana-target-controls a:hover,.grafana-target-controls a:focus{text-decoration:none}input[type=text].grafana-target-text-input{padding:8px 7px;border:0;margin:0;background:transparent;float:left;color:#c8c8c8;border-radius:0}input[type=text].grafana-target-segment-input{border:0;border-right:1px solid #050505;margin:0;border-radius:0;padding:8px 4px}input[type=checkbox].grafana-target-option-checkbox{margin:0}select.grafana-target-segment-input{border:0;border-right:1px solid #050505;margin:0;border-radius:0;height:36px;padding:8px 5px}.grafana-target .dropdown{padding:0;margin:0}.graphite-func-controls{display:none;text-align:center}.graphite-func-controls .icon-arrow-left{float:left;position:relative;top:2px}.graphite-func-controls .icon-arrow-right{float:right;position:relative;top:2px}.graphite-func-controls .icon-remove{margin-left:10px}.grafana-target .popover-content{padding:0}.scrollable{max-height:300px;overflow:auto}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar:hover{height:8px}::-webkit-scrollbar-button:start:decrement,::-webkit-scrollbar-button:end:increment{display:none}::-webkit-scrollbar-button:horizontal:decrement{display:none}::-webkit-scrollbar-button:horizontal:increment{display:none}::-webkit-scrollbar-button:vertical:decrement{display:none}::-webkit-scrollbar-button:vertical:increment{display:none}::-webkit-scrollbar-button:horizontal:decrement:active{background-image:none}::-webkit-scrollbar-button:horizontal:increment:active{background-image:none}::-webkit-scrollbar-button:vertical:decrement:active{background-image:none}::-webkit-scrollbar-button:vertical:increment:active{background-image:none}::-webkit-scrollbar-track-piece{background-color:grayDark}::-webkit-scrollbar-thumb:vertical{height:50px;background:-webkit-gradient(linear,left top,right top,color-stop(0%,#3a3a3a),color-stop(100%,#222));border:1px solid #0d0d0d;border-top:1px solid #666;border-left:1px solid #666}::-webkit-scrollbar-thumb:horizontal{width:50px;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#3a3a3a),color-stop(100%,#222));border:1px solid #1f1f1f;border-top:1px solid #666;border-left:1px solid #666}.sp-replacer{background:inherit;border:0;color:inherit}.sp-replacer:hover,.sp-replacer.sp-active{border-color:inherit;color:inherit}.sp-container{border-radius:0;background-color:#303030;border:0;padding:0}.sp-palette-container,.sp-picker-container{border:0}.sp-dd{display:none}.sp-preview{position:relative;width:15px;height:15px;border:0;margin-right:5px;float:left;z-index:0}.datapoints-warning{pointer:none;position:absolute;top:50%;left:50%;z-index:10;margin-top:-50px;margin-left:-100px;width:200px;text-align:center;cursor:auto;padding:10px}.grafana-version-footer{padding-top:15px;text-align:left}.metrics-editor-help:hover .hide{display:block} \ No newline at end of file + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:"";line-height:0}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{max-width:100%;width:auto\9;height:auto;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{text-shadow:none!important;color:#000!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#bbbfc2;background-color:#161616}a{color:#f2f2f2;text-decoration:none}a:hover,a:focus{color:#fff;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;content:"";line-height:0}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.127659574468085%;*margin-left:2.074468085106383%}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;content:"";line-height:0}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;content:"";line-height:0}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#adafae}a.muted:hover,a.muted:focus{color:#939695}.text-warning{color:#a47e3c}a.text-warning:hover,a.text-warning:focus{color:#7f612e}.text-error{color:#b94a48}a.text-error:hover,a.text-error:focus{color:#953b39}.text-info{color:#09c}a.text-info:hover,a.text-info:focus{color:#007399}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:#fff;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#adafae}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #bbbfc2}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;*zoom:1;padding-left:5px;padding-right:5px}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;content:"";line-height:0}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #303030;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #adafae}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #bbbfc2}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#adafae}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #bbbfc2;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;font-size:12px;color:#303030;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;white-space:nowrap}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#303030;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#adafae}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#000;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;vertical-align:middle}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#4a4a4a;border:1px solid #636363;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(82,168,236,.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(82,168,236,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(82,168,236,.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;*margin-top:0;margin-top:1px \9;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;border:1px solid #636363;background-color:#4a4a4a}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#adafae;background-color:#474747;border-color:#636363;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);cursor:not-allowed}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#788086}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#788086}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#788086}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;content:"";line-height:0}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#555}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#a47e3c}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#a47e3c}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#7f612e;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ceae78;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ceae78;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ceae78}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#a47e3c;background-color:#bbbfc2;border-color:#a47e3c}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#bbbfc2;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#bbbfc2;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#09c}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#09c}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#09c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#007399;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #3cf;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #3cf;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #3cf}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#09c;background-color:#bbbfc2;border-color:#09c}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:transparent;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;content:"";line-height:0}.form-actions:after{clear:both}.help-block,.help-inline{color:#e3e5e6}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding-left:5px}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;vertical-align:middle;font-size:0;white-space:nowrap}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#bbbfc2;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#bf3;border-color:#690}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;*zoom:1;margin-bottom:0;vertical-align:middle}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";line-height:0}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #303030}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #303030}.table .table{background-color:#161616}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #303030;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.table-bordered th,.table-bordered td{border-left:1px solid #303030}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:3px;-moz-border-radius-bottomleft:3px;border-bottom-left-radius:3px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;-moz-border-radius-bottomright:0;border-bottom-right-radius:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:rgba(100,100,100,0.3)}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#303030}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#bbbfc2}.table tbody tr.error>td{background-color:#bbbfc2}.table tbody tr.warning>td{background-color:#bbbfc2}.table tbody tr.info>td{background-color:#bbbfc2}.table-hover tbody tr.success:hover>td{background-color:#aeb2b6}.table-hover tbody tr.error:hover>td{background-color:#aeb2b6}.table-hover tbody tr.warning:hover>td{background-color:#aeb2b6}.table-hover tbody tr.info:hover>td{background-color:#aeb2b6}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat;margin-top:1px}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{background-position:-216px -120px;width:16px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{background-position:-384px -120px;width:16px}.icon-folder-open{background-position:-408px -120px;width:16px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#303030;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:transparent;border-bottom:1px solid #222}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#bbbfc2;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{text-decoration:none;color:#fff;background-color:#2ab2e4;background-image:-moz-linear-gradient(top,#33b5e5,#1dade2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#33b5e5),to(#1dade2));background-image:-webkit-linear-gradient(top,#33b5e5,#1dade2);background-image:-o-linear-gradient(top,#33b5e5,#1dade2);background-image:linear-gradient(to bottom,#33b5e5,#1dade2);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff33b5e5',endColorstr='#ff1dade2',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#2ab2e4;background-image:-moz-linear-gradient(top,#33b5e5,#1dade2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#33b5e5),to(#1dade2));background-image:-webkit-linear-gradient(top,#33b5e5,#1dade2);background-image:-o-linear-gradient(top,#33b5e5,#1dade2);background-image:linear-gradient(to bottom,#33b5e5,#1dade2);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff33b5e5',endColorstr='#ff1dade2',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#adafae}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:default}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#000;margin-top:5px;margin-right:-10px}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-left:20px;padding-right:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#131517;border:1px solid #030303;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well-small{padding:9px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;*zoom:1;padding:4px 12px;margin-bottom:0;font-size:14px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#303030;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#9ea09f;background-image:-moz-linear-gradient(top,#adafae,#868988);background-image:-webkit-gradient(linear,0 0,0 100%,from(#adafae),to(#868988));background-image:-webkit-linear-gradient(top,#adafae,#868988);background-image:-o-linear-gradient(top,#adafae,#868988);background-image:linear-gradient(to bottom,#adafae,#868988);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffadafae',endColorstr='#ff868988',GradientType=0);border-color:#868988 #868988 #606362;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#868988;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #bbb;*border:0;border-bottom-color:#a2a2a2;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#303030;background-color:#868988;*background-color:#797d7b}.btn:active,.btn.active{background-color:#6d706e \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#303030;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#38b7e5;background-image:-moz-linear-gradient(top,#4abde8,#1dade2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#4abde8),to(#1dade2));background-image:-webkit-linear-gradient(top,#4abde8,#1dade2);background-image:-o-linear-gradient(top,#4abde8,#1dade2);background-image:linear-gradient(to bottom,#4abde8,#1dade2);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff4abde8',endColorstr='#ff1dade2',GradientType=0);border-color:#1dade2 #1dade2 #14799e;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#1dade2;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#1dade2;*background-color:#1a9bcb}.btn-primary:active,.btn-primary.active{background-color:#178ab4 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#f58a0f;background-image:-moz-linear-gradient(top,#ff941a,#e67a00);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ff941a),to(#e67a00));background-image:-webkit-linear-gradient(top,#ff941a,#e67a00);background-image:-o-linear-gradient(top,#ff941a,#e67a00);background-image:linear-gradient(to bottom,#ff941a,#e67a00);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff941a',endColorstr='#ffe67a00',GradientType=0);border-color:#e67a00 #e67a00 #995200;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#e67a00;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#e67a00;*background-color:#cc6d00}.btn-warning:active,.btn-warning.active{background-color:#b35f00 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#d10000;background-image:-moz-linear-gradient(top,#e60000,#b30000);background-image:-webkit-gradient(linear,0 0,0 100%,from(#e60000),to(#b30000));background-image:-webkit-linear-gradient(top,#e60000,#b30000);background-image:-o-linear-gradient(top,#e60000,#b30000);background-image:linear-gradient(to bottom,#e60000,#b30000);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe60000',endColorstr='#ffb30000',GradientType=0);border-color:#b30000 #b30000 #600;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#b30000;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#b30000;*background-color:#900}.btn-danger:active,.btn-danger.active{background-color:#800000 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#699e00;background-image:-moz-linear-gradient(top,#77b300,#558000);background-image:-webkit-gradient(linear,0 0,0 100%,from(#77b300),to(#558000));background-image:-webkit-linear-gradient(top,#77b300,#558000);background-image:-o-linear-gradient(top,#77b300,#558000);background-image:linear-gradient(to bottom,#77b300,#558000);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff77b300',endColorstr='#ff558000',GradientType=0);border-color:#558000 #558000 #230;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#558000;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#558000;*background-color:#460}.btn-success:active,.btn-success.active{background-color:#334d00 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#993dc7;background-image:-moz-linear-gradient(top,#a347d1,#8a2eb8);background-image:-webkit-gradient(linear,0 0,0 100%,from(#a347d1),to(#8a2eb8));background-image:-webkit-linear-gradient(top,#a347d1,#8a2eb8);background-image:-o-linear-gradient(top,#a347d1,#8a2eb8);background-image:linear-gradient(to bottom,#a347d1,#8a2eb8);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffa347d1',endColorstr='#ff8a2eb8',GradientType=0);border-color:#8a2eb8 #8a2eb8 #5c1f7a;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#8a2eb8;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#8a2eb8;*background-color:#7a29a3}.btn-info:active,.btn-info.active{background-color:#6b248f \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#080808;background-image:-moz-linear-gradient(top,#0d0d0d,#000);background-image:-webkit-gradient(linear,0 0,0 100%,from(#0d0d0d),to(#000));background-image:-webkit-linear-gradient(top,#0d0d0d,#000);background-image:-o-linear-gradient(top,#0d0d0d,#000);background-image:linear-gradient(to bottom,#0d0d0d,#000);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0d0d0d',endColorstr='#ff000000',GradientType=0);border-color:#000 #000 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#000;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#000;*background-color:#000}.btn-inverse:active,.btn-inverse.active{background-color:#000 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{border-color:transparent;cursor:pointer;color:#f2f2f2;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#fff;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#303030;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*zoom:1;font-size:0;vertical-align:middle;white-space:nowrap;*margin-left:.3em}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{font-size:0;margin-top:10px;margin-bottom:10px}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-bottomleft:3px;border-bottom-left-radius:3px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,.125),inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,.125),inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(255,255,255,.125),inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);*padding-top:5px;*padding-bottom:5px}.btn-group>.btn-mini+.dropdown-toggle{padding-left:5px;padding-right:5px;*padding-top:2px;*padding-bottom:2px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{padding-left:12px;padding-right:12px;*padding-top:7px;*padding-bottom:7px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.btn-group.open .btn.dropdown-toggle{background-color:#868988}.btn-group.open .btn-primary.dropdown-toggle{background-color:#1dade2}.btn-group.open .btn-warning.dropdown-toggle{background-color:#e67a00}.btn-group.open .btn-danger.dropdown-toggle{background-color:#b30000}.btn-group.open .btn-success.dropdown-toggle{background-color:#558000}.btn-group.open .btn-info.dropdown-toggle{background-color:#8a2eb8}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#000}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-left-width:5px;border-right-width:5px;border-top-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-left:0;margin-top:-1px}.btn-group-vertical>.btn:first-child{-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#bbbfc2;border:1px solid transparent;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.alert,.alert h4{color:#a47e3c}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{background-color:#bbbfc2;border-color:#aeb4b6;color:#468847}.alert-success h4{color:#468847}.alert-danger,.alert-error{background-color:#bbbfc2;border-color:#b3b9bb;color:#b94a48}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{background-color:#bbbfc2;border-color:#a8afb1;color:#09c}.alert-info h4{color:#09c}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-left:0;margin-bottom:20px;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#bbbfc2}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#adafae;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-left:15px;padding-right:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#f2f2f2}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";line-height:0}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#bbbfc2 #bbbfc2 #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#bbb;background-color:#161616;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#f2f2f2}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{border-color:#ddd;z-index:2}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{border-top-color:#f2f2f2;border-bottom-color:#f2f2f2;margin-top:6px}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#bbb;border-bottom-color:#bbb}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#adafae;border-color:#adafae}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#adafae}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;content:"";line-height:0}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-bottom-color:transparent;border-top-color:#ddd}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#bbbfc2 #ddd #bbbfc2 #bbbfc2}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#bbbfc2 #bbbfc2 #bbbfc2 #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#adafae}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;background-color:transparent;cursor:default}.navbar{overflow:visible;margin-bottom:20px;*position:relative;*z-index:2}.navbar-inner{min-height:50px;padding-left:20px;padding-right:20px;background-color:#1f1f1f;background-image:-moz-linear-gradient(top,#1f1f1f,#1f1f1f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#1f1f1f),to(#1f1f1f));background-image:-webkit-linear-gradient(top,#1f1f1f,#1f1f1f);background-image:-o-linear-gradient(top,#1f1f1f,#1f1f1f);background-image:linear-gradient(to bottom,#1f1f1f,#1f1f1f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff1f1f1f',endColorstr='#ff1f1f1f',GradientType=0);border:1px solid #000;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065);*zoom:1}.navbar-inner:before,.navbar-inner:after{display:table;content:"";line-height:0}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{float:left;display:block;padding:15px 20px 15px;margin-left:-20px;font-size:20px;font-weight:200;color:#adafae;text-shadow:0 1px 0 #1f1f1f}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:50px;color:#adafae}.navbar-link{color:#adafae}.navbar-link:hover,.navbar-link:focus{color:#fff}.navbar .divider-vertical{height:50px;margin:0 9px;border-left:1px solid #1f1f1f;border-right:1px solid #1f1f1f}.navbar .btn,.navbar .btn-group{margin-top:10px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;content:"";line-height:0}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:10px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:10px;margin-bottom:0}.navbar-search .search-query{margin-bottom:0;padding:4px 14px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,.1);box-shadow:0 1px 10px rgba(0,0,0,.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,.1);box-shadow:0 -1px 10px rgba(0,0,0,.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:15px 15px 15px;color:#adafae;text-decoration:none;text-shadow:0 1px 0 #1f1f1f}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{background-color:transparent;color:#fff;text-decoration:none}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#fff;text-decoration:none;background-color:#1f1f1f;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#121212;background-image:-moz-linear-gradient(top,#121212,#121212);background-image:-webkit-gradient(linear,0 0,0 100%,from(#121212),to(#121212));background-image:-webkit-linear-gradient(top,#121212,#121212);background-image:-o-linear-gradient(top,#121212,#121212);background-image:linear-gradient(to bottom,#121212,#121212);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff121212',endColorstr='#ff121212',GradientType=0);border-color:#121212 #121212 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#121212;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#121212;*background-color:#050505}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#000 \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,0.2);position:absolute;top:-7px;left:9px}.navbar .nav>li>.dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #303030;position:absolute;top:-6px;left:10px}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{border-top:7px solid #ccc;border-top-color:rgba(0,0,0,0.2);border-bottom:0;bottom:-7px;top:auto}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{border-top:6px solid #303030;border-bottom:0;bottom:-6px;top:auto}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{background-color:#1f1f1f;color:#fff}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#adafae;border-bottom-color:#adafae}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{left:auto;right:0}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{left:auto;right:12px}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{left:auto;right:13px}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{left:auto;right:100%;margin-left:0;margin-right:-1px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#252a30;background-image:-moz-linear-gradient(top,#252a30,#252a30);background-image:-webkit-gradient(linear,0 0,0 100%,from(#252a30),to(#252a30));background-image:-webkit-linear-gradient(top,#252a30,#252a30);background-image:-o-linear-gradient(top,#252a30,#252a30);background-image:linear-gradient(to bottom,#252a30,#252a30);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff252a30',endColorstr='#ff252a30',GradientType=0);border-color:transparent}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#adafae;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#adafae}.navbar-inverse .navbar-text{color:#adafae}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{background-color:#242a31;color:#fff}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#242a31}.navbar-inverse .navbar-link{color:#adafae}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-left-color:#252a30;border-right-color:#252a30}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{background-color:#242a31;color:#fff}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#adafae;border-bottom-color:#adafae}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#5d6978;border-color:#252a30;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1),0 1px 0 rgba(255,255,255,.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1),0 1px 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.1),0 1px 0 rgba(255,255,255,.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#fff}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#fff}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#fff}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#303030;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15);outline:0}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#1a1d22;background-image:-moz-linear-gradient(top,#1a1d22,#1a1d22);background-image:-webkit-gradient(linear,0 0,0 100%,from(#1a1d22),to(#1a1d22));background-image:-webkit-linear-gradient(top,#1a1d22,#1a1d22);background-image:-o-linear-gradient(top,#1a1d22,#1a1d22);background-image:linear-gradient(to bottom,#1a1d22,#1a1d22);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff1a1d22',endColorstr='#ff1a1d22',GradientType=0);border-color:#1a1d22 #1a1d22 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#1a1d22;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#1a1d22;*background-color:#0f1113}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#040405 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.breadcrumb>li{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 0 #fff}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#adafae}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;*zoom:1;margin-left:0;margin-bottom:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#161616;border:1px solid transparent;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#33b5e5}.pagination ul>.active>a,.pagination ul>.active>span{color:#adafae;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#adafae;background-color:transparent;cursor:default}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-bottomleft:3px;border-bottom-left-radius:3px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-top-left-radius:2px;-moz-border-radius-topleft:2px;border-top-left-radius:2px;-webkit-border-bottom-left-radius:2px;-moz-border-radius-bottomleft:2px;border-bottom-left-radius:2px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:2px;-moz-border-radius-topright:2px;border-top-right-radius:2px;-webkit-border-bottom-right-radius:2px;-moz-border-radius-bottomright:2px;border-bottom-right-radius:2px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;list-style:none;text-align:center;*zoom:1}.pager:before,.pager:after{display:table;content:"";line-height:0}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#adafae;background-color:#fff;cursor:default}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:absolute;z-index:1050;width:100%;background-color:#fff;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;outline:0}.modal.fade{-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out;top:-25%}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;overflow-y:auto;padding:15px}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;*zoom:1}.modal-footer:before,.modal-footer:after{display:table;content:"";line-height:0}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1020;display:block;visibility:visible;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#303030;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.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:#303030}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#303030}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#303030}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#303030}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#303030;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:normal;line-height:18px;background-color:#303030;border-bottom:1px solid #232323;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#303030}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right .arrow:after{left:1px;bottom:-10px;border-left-width:0;border-right-color:#303030}.popover.bottom .arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#303030}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left .arrow:after{right:1px;border-right-width:0;border-left-color:#303030;bottom:-10px}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;content:"";line-height:0}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#f2f2f2;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px;color:#bbb}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;vertical-align:baseline;white-space:nowrap;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#adafae}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-left:9px;padding-right:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f80}.label-warning[href],.badge-warning[href]{background-color:#cc6d00}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#09c}.label-info[href],.badge-info[href]{background-color:#007399}.label-inverse,.badge-inverse{background-color:#303030}.label-inverse[href],.badge-inverse[href]{background-color:#161616}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.progress .bar{width:0;height:100%;color:#fff;float:left;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,.15),inset 0 -1px 0 rgba(0,0,0,.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,.15),inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 1px 0 0 rgba(0,0,0,.15),inset 0 -1px 0 rgba(0,0,0,.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#ff9d2e;background-image:-moz-linear-gradient(top,#ffac4d,#f80);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ffac4d),to(#f80));background-image:-webkit-linear-gradient(top,#ffac4d,#f80);background-image:-o-linear-gradient(top,#ffac4d,#f80);background-image:linear-gradient(to bottom,#ffac4d,#f80);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffac4d',endColorstr='#ffff8800',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#ffac4d;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{overflow:hidden;width:100%;position:relative}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#1f1f1f;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{left:auto;right:15px}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;left:0;right:0;bottom:0;padding:15px;background:#303030;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{color:#fff;line-height:20px}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#303030;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;color:inherit;letter-spacing:-1px}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}label,input,button,select,textarea,.navbar .search-query:-moz-placeholder,.navbar .search-query::-webkit-input-placeholder{font-family:'Droid Sans',sans-serif;color:#bbb}blockquote{border-left:5px solid #303030}blockquote.pull-right{border-right:5px solid #303030}html{min-height:100%}body{min-height:100%;background:#161616}.page-header{border-bottom:1px solid #303030}hr{border-bottom:0}.navbar .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar .brand{padding:15px 20px 15px;color:#bbbfc2;font-weight:normal;text-shadow:none}.navbar .nav>li>a{padding:15px 15px 14px;border-bottom:1px solid transparent}.navbar .nav>li>a:hover,.navbar .nav>.active>a,.navbar .nav>.active>a:hover{border-bottom:1px solid #33b5e5}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar .navbar-text{margin-bottom:1px;padding:15px 15px 14px;line-height:inherit}.navbar .divider-vertical{margin:0;border-left:1px solid #303030;border-right-width:0}.navbar .search-query,.navbar .search-query:focus,.navbar .search-query.focused{-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;background-color:#303030;line-height:normal;color:#adafae;text-shadow:none}.navbar .search-query:-moz-placeholder,.navbar .search-query:focus:-moz-placeholder,.navbar .search-query.focused:-moz-placeholder{color:#bbb}.navbar .search-query:-ms-input-placeholder,.navbar .search-query:focus:-ms-input-placeholder,.navbar .search-query.focused:-ms-input-placeholder{color:#bbb}.navbar .search-query::-webkit-input-placeholder,.navbar .search-query:focus::-webkit-input-placeholder,.navbar .search-query.focused::-webkit-input-placeholder{color:#bbb}@media(max-width:979px){.navbar .nav-collapse .nav li>a{border:0;color:#bbbfc2;font-weight:normal;text-shadow:none}.navbar .nav-collapse .nav li>a:hover{border:0;background-color:#33b5e5}.navbar .nav-collapse .nav .active>a{border:0;background-color:#33b5e5}.navbar .nav-collapse .dropdown-menu a:hover{background-color:#33b5e5}.navbar .nav-collapse .navbar-form,.navbar .nav-collapse .navbar-search{border-top:0;border-bottom:0}.navbar .nav-collapse .nav-header{color:rgba(128,128,128,0.6)}.navbar-inverse .nav-collapse .nav li>a:hover{background-color:#111}.navbar-inverse .nav-collapse .nav .active>a{background-color:#111}.navbar-inverse .nav-collapse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav-collapse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav-collapse .nav li.dropdown.open.active>.dropdown-toggle{background-color:#111}}.dropdown-menu{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}div.subnav{margin:0 1px;background-color:#1f1f1f;background-image:none;border:0;border-bottom:1px solid #303030}div.subnav .nav>li>a,div.subnav .nav>li:first-child>a,div.subnav .nav>li:first-child>a:hover{padding:11px 12px;border:0;background-color:#1f1f1f;color:#adafae}div.subnav .nav>li>a:hover,div.subnav .nav>li.active>a,div.subnav .nav>li.active>a:hover,div.subnav .nav>li:first-child>a:hover{padding:11px 12px;background:transparent;border:0;border-bottom:1px solid #33b5e5;color:#fff}div.subnav .nav li.nav-header{text-shadow:none}div.subnav-fixed{top:50px;margin:0}.nav-tabs{border-bottom:1px solid #303030}.nav-tabs>li>a{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs li>a:hover,.nav-tabs li.active>a,.nav-tabs li.active>a:hover{border-color:transparent;background-color:#33b5e5;color:#fff}.nav-tabs li.disabled>a{color:#bbbfc2}.nav-tabs .open .dropdown-toggle{background-color:#060606;border-color:transparent}.nav-pills li>a:hover{background-color:#33b5e5;color:#fff}.nav-pills li.disabled>a{color:#bbbfc2}.nav-pills .open .dropdown-toggle{background-color:#060606}.nav-pills .dropdown-menu li>a:hover{border:0}.nav-list li>a{text-shadow:none}.nav-list li>a:hover{background-color:#33b5e5;color:#fff}.nav-list .nav-header{text-shadow:none}.nav-list .divider{background-color:transparent;border-bottom:1px solid #303030}.nav-stacked li>a{border:1px solid #303030!important}.nav-stacked li>a:hover,.nav-stacked li.active>a{background-color:#33b5e5;color:#fff}.tabbable .nav-tabs,.tabbable .nav-tabs li.active>a{border-color:#303030}.breadcrumb{background-color:transparent;background-image:none;border-width:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;font-size:14px}.breadcrumb li{text-shadow:none}.breadcrumb li>a{color:#33b5e5;text-shadow:none}.pagination ul{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>span,.pagination ul>.disabled>span:hover{background-color:rgba(0,0,0,0.2)}.pager li>a,.pager li>span{background-color:#161616;border:0}.pager li>a:hover,.pager li>span:hover{background-color:#33b5e5}.pager .disabled a,.pager .disabled a:hover{background-color:#161616}.btn{padding:5px 12px;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;text-shadow:none}.btn.disabled{box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-large{padding:22px 30px}.btn-small{padding:2px 10px}.btn-mini{padding:2px 6px}.btn-group>.btn:first-child,.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.dropdown-toggle{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}input,textarea,select{border-width:2px;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{color:#adafae}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly],.uneditable-input{border-color:#444}input:focus,textarea:focus,input.focused,textarea.focused{border-color:#52a8ec;outline:0;outline:thin dotted \9}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus,select:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}legend,label{color:#bbbfc2;border-bottom:0 solid #222}.form-actions{border-top:1px solid #222}.table{-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.table tbody tr.success td{background-color:#690;color:#fff}.table tbody tr.error td{background-color:#c00;color:#fff}.table tbody tr.info td{background-color:#33b5e5;color:#fff}.alert,.alert .alert-heading,.alert-success,.alert-success .alert-heading,.alert-danger,.alert-error,.alert-danger .alert-heading,.alert-error .alert-heading,.alert-info,.alert-info .alert-heading{color:#bbbfc2;text-shadow:none;border:0}.label{color:#bbbfc2}.badge{border-radius:0;font-weight:200}.label,.alert{background-color:#888}.label:hover{background-color:#6e6e6e}.label-important,.alert-danger,.alert-error{background-color:#c00}.label-important:hover{background-color:#900}.label-warning{background-color:#cc6d00}.label-warning:hover{background-color:#995200}.label-success,.alert-success{background-color:#5c8a00}.label-success:hover{background-color:#3a5700}.label-info,.alert-info{background-color:#007399}.label-info:hover{background-color:#004d66}a:hover{text-decoration:none}.well,.hero-unit{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.well,.hero-unit{border-top:solid 1px #3d3d3d;-webkit-box-shadow:0 2px 4px rgba(0,0,0,0.8);-moz-box-shadow:0 2px 4px rgba(0,0,0,0.8);box-shadow:0 2px 4px rgba(0,0,0,0.8)}.thumbnail{border-color:#303030}.progress{background-color:#060606;background-image:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.modal{-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;border-top:solid 1px #3d3d3d;background-color:#303030}.modal-header{border-bottom:1px solid #303030}.modal-footer{background-color:#303030;border-top:1px solid #303030;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.popover{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.popover-title{border-bottom:0;color:#fff}.footer{border-top:1px solid #303030}@media(max-width:767px){div.panel{width:100%!important;padding:0!important}}.container-fluid{padding-left:0;padding-right:0}.container.grafana-container{padding:5px 10px;width:100%;box-sizing:border-box}.bgNav{background:#1f1f1f}.bgPrimary{background:#4abde8;color:rgba(255,255,255,0.9)}.bgInfo{background:#a347d1;color:rgba(255,255,255,0.9)}.bgSuccess{background:#77b300;color:rgba(255,255,255,0.9)}.bgWarning{background:#ff941a;color:rgba(255,255,255,0.9)}.bgDanger{background:#e60000;color:rgba(255,255,255,0.9)}.bgInverse{background:#0d0d0d;color:rgba(255,255,255,0.9)}code,pre{background-color:#bbbfc2}.panel{display:inline-table;vertical-align:top}.panel-container{padding:0;background:#1f1f1f;margin:5px}.panel-content{padding:0 10px 5px 10px}.panel-title{border:0;font-weight:bold}.panel-loading{position:absolute;top:0;right:4px;z-index:800}.panel div.panel-extra div.panel-extra-container{margin-right:-10px;margin-top:3px;text-align:center}.panel div.panel-extra div.panel-extra-container ul{text-align:left}.panel div.panel-extra{font-size:.9em;margin-bottom:0}.panel div.panel-extra .extra{float:right!important}.panel-error{color:#fff;padding:5px 10px 0 10px}.panel-error-inspector-link{float:right;margin-right:10px}div.editor-row{vertical-align:top}div.editor-row div.section{margin-right:20px;vertical-align:top;display:inline-block}div.editor-option{vertical-align:top;display:inline-block;margin-right:10px}div.editor-option label{display:block}#events{font-size:12px}.version{font-size:85%}.legend{color:#000}div.fake-input{background-color:#4a4a4a;border:1px solid #636363;-webkit-border-radius:3px 3px 3px 3px;-moz-border-radius:3px 3px 3px 3px;border-radius:3px 3px 3px 3px}hr.small{margin:5px 0}form input.ng-invalid{color:#b94a48}.editor-title{margin-right:10px;font-size:1.7em;font-weight:bold;text-transform:capitalize}.editor-title small{opacity:.5;font-size:.7em;font-weight:normal}.bordered{border:1px solid #303030}.table-unpadded th,.table-unpadded td{padding:0 2px}.spy{position:absolute;right:0;top:0}.navbar-inner{border-width:0}.kibana-row{margin-bottom:5px}.row-tab .dropdown-menu-right{top:0;left:33px}.row-tab-button{padding:0;cursor:pointer;vertical-align:middle;width:30px;height:30px;text-align:center;display:inline-block;line-height:30px}.row-button{width:30px;text-align:center;float:left;cursor:pointer}.row-text{white-space:nowrap;text-transform:uppercase;font-weight:bold;font-size:.9em;margin:0 10px}.row-close{padding:0;margin:0;min-height:30px!important;line-height:30px;background:#1f1f1f}.row-open{margin-top:5px;left:-34px;position:absolute;z-index:100;transition:.25s left;transition-delay:.25s;-webkit-transition-delay:.25s}.row-open:hover{left:-12px}.odd{background-color:rgba(100,100,100,0.3)}.nomargin{margin:0}[ng\:cloak],[ng-cloak],.ng-cloak{display:none!important}.table tbody+tbody{border-top:0}.ui-draggable-dragging{display:block;z-index:9999}.dragInProgress .panel-container{border:3px solid rgba(100,100,100,0.5)}.link{color:#f2f2f2;cursor:pointer}.link:hover{color:#fff}.pointer{cursor:pointer}.popover{max-width:480px}.modal{width:100%;top:0!important}.tiny{font-size:50%}.smaller{font-size:70%}.small{font-size:85%}.large{font-size:120%}.strong{font-weight:bold}a{cursor:pointer}.normal{font-weight:normal}.light{font-weight:200}.input-smaller{width:75px}.string{color:#c8ccce}.number{color:#00ace6}.boolean{color:#b78c43}.key{color:#c05c5a}.btn-active{background-color:#e6e6e6;background-image:none;box-shadow:0 2px 4px rgba(0,0,0,0.15) inset,0 1px 2px rgba(0,0,0,0.05);outline:0 none}.remove:hover{background-color:#b30000}.faded{opacity:.2}div.flot-text{color:#bbbfc2!important}.dashboard-notice{z-index:8000;margin-left:0;padding:3px 0 3px 0;width:100%;padding-left:20px;color:#fff}.alert-warning{background-color:#bbbfc2;border-color:transparent;color:#a47e3c}.popover.topLeft{margin-top:-10px}.popover.topLeft .arrow{bottom:-10px;left:25%;margin-left:-10px;border-width:10px 10px 0;border-top-color:#303030}.popover.topLeft .arrow:after{border-width:11px 11px 0;border-top-color:rgba(0,0,0,0.25);bottom:-1px;left:-11px}.popover.topRight{margin-top:-10px}.popover.topRight .arrow{bottom:-10px;left:75%;margin-left:-10px;border-width:10px 10px 0;border-top-color:#303030}.popover.topRight .arrow:after{border-width:11px 11px 0;border-top-color:rgba(0,0,0,0.25);bottom:-1px;left:-11px}.popover.rightTop .arrow{top:10%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.rightTop .arrow:after{left:1px;bottom:-10px;border-left-width:0;border-right-color:#303030}.popover.rightBottom .arrow{top:90%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.rightBottom .arrow:after{left:1px;bottom:-10px;border-left-width:0;border-right-color:#303030}.popover.bottomLeft .arrow{left:10%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottomLeft .arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#303030}.popover.bottomRight .arrow{left:90%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottomRight .arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#303030}.popover.leftTop .arrow{top:10%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.leftTop .arrow:after{right:1px;border-right-width:0;border-left-color:#303030;bottom:-10px}.popover.leftBottom .arrow{top:90%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.leftBottom .arrow:after{right:1px;border-right-width:0;border-left-color:#303030;bottom:-10px}.popover.topLeft .arrow{left:10%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.topLeft .arrow:after{bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#303030}.popover.topRight .arrow{left:90%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.topRight .arrow:after{bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#303030}.label-tag{background-color:#93c;color:#f2f2f2}.label-tag:hover{background-color:#7a29a3;color:#fff}.annotation-editor-table td{white-space:nowrap}.save-dashboard-dropdown{padding:10px}.save-dashboard-dropdown li>a{padding-left:5px}.save-dashboard-dropdown-save-form{margin-bottom:5px}.inspector-request-table td{padding:5px}.inspector-request-table td:first-child{white-space:nowrap}code,pre{background-color:#1f1f1f;color:#bbbfc2}.submenu-controls{background:#292929;font-size:inherit}.submenu-controls label{margin:0;padding-right:4px;display:inline}.submenu-controls input[type=checkbox]{margin:0}.submenu-controls-visible:not(.hide-controls) .panel-fullscreen{top:82px}.submenu-panel{padding:0 4px 0 8px;border-right:1px solid #202020;float:left}.submenu-panel:first-child{padding-left:17px}.submenu-panel-title{float:left;text-transform:uppercase;padding:4px 10px 3px 0}.submenu-panel-wrapper{float:left}.submenu-toggle{padding:4px 0 3px 8px;float:left}.submenu-toggle .annotation-color-icon{position:relative;top:2px}.submenu-toggle:first-child{padding-left:0}.submenu-control-edit{padding:4px 4px 3px 8px;float:right;border-left:1px solid #202020;margin-left:8px}.annotation-disabled,.annotation-disabled a{color:#788086}.filtering-container{float:left}.filtering-container label{float:left}.filtering-container input[type=checkbox]{margin:0}.filter-panel-filter{display:inline-block;vertical-align:top;padding:4px 10px 3px 10px;border-right:1px solid #202020}.filter-panel-filter:first-child{padding-left:0}.filter-panel-filter ul{margin-bottom:0}.filter-deselected{opacity:.5}.filtering-container .filter-action{float:right;padding-right:2px;margin-bottom:0!important;margin-left:0;margin-top:4px}.add-filter-action{padding:3px 5px 0 5px;position:relative;top:4px}.filter-mandate{text-decoration:underline;cursor:pointer}.filter-apply{float:right}.graph-canvas-wrapper{position:relative}.graph-legend{margin:0 20px;text-align:left;position:relative;top:2px}.graph-legend .popover-content{padding:0}.graph-legend-icon{position:relative;top:2px}.graph-legend-series,.graph-legend-icon,.graph-legend-alias,.graph-legend-value{display:inline-block;white-space:nowrap}.graph-legend-series{padding-left:10px}.graph-legend-value{padding-left:6px}.graph-legend-table{display:table}.graph-legend-table .graph-legend-series{display:table-row;padding-left:0}.graph-legend-table .graph-legend-series.pull-right{float:none}.graph-legend-table .graph-legend-series.pull-right .graph-legend-alias::after{content:'y\00B2'}.graph-legend-table .graph-legend-alias{display:table-cell;white-space:nowrap}.graph-legend-table .graph-legend-icon{display:table-cell;white-space:nowrap;padding:0 4px}.graph-legend-table .graph-legend-value{display:table-cell;white-space:nowrap;padding-left:15px}.graph-legend-rightside.graph-wrapper{display:table;width:100%}.graph-legend-rightside .graph-canvas-wrapper{display:table-cell;width:100%;position:relative}.graph-legend-rightside .graph-legend-wrapper{display:table-cell;vertical-align:top;position:relative;left:-4px}.graph-legend-rightside .graph-legend{margin:0}.graph-legend-rightside .graph-legend-series{display:block;padding-left:0}.graph-legend-rightside .graph-legend-table .graph-legend-series{display:table-row}.graph-legend-series-hidden a{color:#7f7f7f}.graph-legend-popover{width:200px}.graph-legend-popover label{display:inline-block}.graph-legend-popover .btn{padding:1px 3px;margin-right:0;line-height:initial}.graph-legend-popover .close{margin-right:5px;color:#f2f2f2;opacity:.7;text-shadow:none}.graph-legend-popover .editor-row{padding:5px}.bootstrap-tagsinput{display:inline-block;padding:4px 6px;margin-bottom:10px;color:#555;vertical-align:middle;border-radius:4px;max-width:100%;line-height:22px;background-color:#4a4a4a;border:1px solid #636363;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}.bootstrap-tagsinput input{border:0;box-shadow:none;outline:0;background-color:transparent;padding:0;padding-left:5px;margin:0;width:auto!important;max-width:inherit}.bootstrap-tagsinput input:focus{border:0;box-shadow:none}.bootstrap-tagsinput .tag{margin-right:2px;color:white}.bootstrap-tagsinput .tag [data-role="remove"]{margin-left:8px;cursor:pointer}.bootstrap-tagsinput .tag [data-role="remove"]:after{content:"x";padding:0 2px}.bootstrap-tagsinput .tag [data-role="remove"]:hover{box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.bootstrap-tagsinput .tag [data-role="remove"]:hover:active{box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.hide-controls{padding:0}.hide-controls .grafana-row{display:none}.hide-controls .submenu-controls{display:none}.hide-controls .add-row-panel-hint{display:none}.playlist-active .grafana-menu-zoom-out,.playlist-active .grafana-menu-save,.playlist-active .grafana-menu-load,.playlist-active .add-row-panel-hint,.playlist-active .grafana-menu-home,.playlist-active .grafana-menu-refresh,.playlist-active .grafana-menu-edit{display:none}.playlist-active .grafana-menu-stop-playlist{display:list-item}.grafana-search-panel{padding:6px 10px}.grafana-search-panel .search-field-wrapper input{width:100%}.grafana-search-panel .search-field-wrapper button{margin:0 2px 0 0}.grafana-search-panel .search-field-wrapper>span{display:block;overflow:hidden;padding-right:25px}.grafana-search-panel .selected td,.grafana-search-panel tr.selected:nth-child(odd)>td{background:#33b5e5;color:white;text-shadow:-1px -1px 1px rgba(0,0,0,0.3)}.grafana-search-panel .selected td a,.grafana-search-panel tr.selected:nth-child(odd)>td a{color:white}.grafana-search-panel .selected-tag .label-tag{background-color:#33b5e5}.search-tagview-switch{position:absolute;top:15px;right:263px;color:#a6a6a6}.search-tagview-switch.active{color:#f2f2f2}.row-button{width:24px}.modal{margin:5%;width:90%}.grafana-search-metric-actions{visibility:hidden;padding-left:20px}.grafana-search-metric-name{white-space:nowrap}.grafana-search-metric-result:hover .grafana-search-metric-actions{visibility:visible}.grafana-search-metric-result:hover .grafana-search-metric-name{color:#33b5e5}.yaxisLabel{top:50%;left:-20px;transform:rotate(-90deg);-o-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-webkit-transform:rotate(-90deg);transform-origin:0 0;-o-transform-origin:0 0;-ms-transform-origin:0 0;-moz-transform-origin:0 0;-webkit-transform-origin:0 0}.axisLabel{color:#bbbfc2;font-size:11.9px;position:absolute;text-align:center;font-size:12px}.panel-fullscreen{z-index:100;display:block!important;position:fixed;left:0;right:0;top:54px;padding:0 10px;background:#1f1f1f;overflow-y:scroll;height:100%}.panel-fullscreen .panel-content{padding-bottom:130px}.dashboard-fullscreen .container-fluid.main{height:0;width:0;position:fixed;right:-10000px}.histogram-chart{position:relative}.panel-full-edit-tabs{margin-top:10px;min-height:250px;margin-left:-10px;margin-right:-10px;background-color:transparent;border-top:1px solid #000}.panel-full-edit-tabs .tabs .nav-tabs{margin:0;background:#303030;border-top:1px solid #555}.panel-full-edit-tabs .tabs .tab-content{display:none}.panel-full-edit-tabs .tab-content{overflow:visible;padding:15px}.panel-full-edit-tabs .nav-tabs>li>a{line-height:15px;padding-top:6px;padding-bottom:6px;font-size:.8rem}.grafana-target:last-child{border-bottom:1px solid #000}.grafana-target-inner{border-top:1px solid #000;border-left:1px solid #000;border-right:1px solid #000;background:#303030;width:100%}.grafana-target-onoff{padding:5px 7px;display:inline-block}.grafana-segment-list{list-style:none;margin:0;margin-right:90px;margin-left:30px}.grafana-segment-list>li{float:left}.grafana-segment-dropdown-menu{margin-bottom:70px}.grafana-target-segment{padding:8px 7px;font-weight:normal;border-right:1px solid #050505;color:#c8c8c8;display:inline-block}.has-open-function .grafana-target-segment{padding-top:25px}.grafana-target-hidden .grafana-target-segment{color:#888}.grafana-target-segment:hover,.grafana-target-segment:focus{text-decoration:none}.grafana-target-segmenta:hover{background:#444}.grafana-target-function{background:#444}.grafana-target-function>a{color:#c8c8c8}.grafana-target-function>a:hover{color:#f2f2f2}.grafana-target-function.show-function-controls{padding-top:5px;min-width:100px;text-align:center}input[type=text].grafana-function-param-input{background:transparent;border:0;margin:0;padding:0}.grafana-target-controls-left{list-style:none;float:left;width:30px;margin:0}.grafana-target-controls{width:120px;float:right;list-style:none;margin:0;text-align:right}.grafana-target-controls>li{display:inline-block;white-space:nowrap}.grafana-target-controls a{padding:8px 7px;position:relative;top:8px;color:#c8c8c8;font-size:16px}.grafana-target-hidden .grafana-target-controls a{color:#888}.grafana-target-controls a:hover,.grafana-target-controls a:focus{text-decoration:none}input[type=text].grafana-target-text-input{padding:8px 7px;border:0;margin:0;background:transparent;float:left;color:#c8c8c8;border-radius:0}input[type=text].grafana-target-segment-input{border:0;border-right:1px solid #050505;margin:0;border-radius:0;padding:8px 4px}input[type=checkbox].grafana-target-option-checkbox{margin:0}select.grafana-target-segment-input{border:0;border-right:1px solid #050505;margin:0;border-radius:0;height:36px;padding:8px 5px}.grafana-target .dropdown{padding:0;margin:0}.graphite-func-controls{display:none;text-align:center}.graphite-func-controls .icon-arrow-left{float:left;position:relative;top:2px}.graphite-func-controls .icon-arrow-right{float:right;position:relative;top:2px}.graphite-func-controls .icon-remove{margin-left:10px}.grafana-target .popover-content{padding:0}.scrollable{max-height:300px;overflow:auto}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar:hover{height:8px}::-webkit-scrollbar-button:start:decrement,::-webkit-scrollbar-button:end:increment{display:none}::-webkit-scrollbar-button:horizontal:decrement{display:none}::-webkit-scrollbar-button:horizontal:increment{display:none}::-webkit-scrollbar-button:vertical:decrement{display:none}::-webkit-scrollbar-button:vertical:increment{display:none}::-webkit-scrollbar-button:horizontal:decrement:active{background-image:none}::-webkit-scrollbar-button:horizontal:increment:active{background-image:none}::-webkit-scrollbar-button:vertical:decrement:active{background-image:none}::-webkit-scrollbar-button:vertical:increment:active{background-image:none}::-webkit-scrollbar-track-piece{background-color:grayDark}::-webkit-scrollbar-thumb:vertical{height:50px;background:-webkit-gradient(linear,left top,right top,color-stop(0%,#3a3a3a),color-stop(100%,#222));border:1px solid #0d0d0d;border-top:1px solid #666;border-left:1px solid #666}::-webkit-scrollbar-thumb:horizontal{width:50px;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#3a3a3a),color-stop(100%,#222));border:1px solid #1f1f1f;border-top:1px solid #666;border-left:1px solid #666}.sp-replacer{background:inherit;border:0;color:inherit}.sp-replacer:hover,.sp-replacer.sp-active{border-color:inherit;color:inherit}.sp-container{border-radius:0;background-color:#303030;border:0;padding:0}.sp-palette-container,.sp-picker-container{border:0}.sp-dd{display:none}.sp-preview{position:relative;width:15px;height:15px;border:0;margin-right:5px;float:left;z-index:0}.datapoints-warning{pointer:none;position:absolute;top:50%;left:50%;z-index:10;margin-top:-50px;margin-left:-100px;width:200px;text-align:center;cursor:auto;padding:10px}.grafana-version-footer{padding-top:15px;text-align:left}.metrics-editor-help:hover .hide{display:block}.grafana-tooltip{position:absolute;top:-1000;left:0;color:#c8c8c8;padding:10px;font-size:11pt;font-weight:200;background-color:#3a3939;border-radius:5px;z-index:9999} \ No newline at end of file diff --git a/src/css/less/grafana.less b/src/css/less/grafana.less index 4679397491c..9e966a0fd1a 100644 --- a/src/css/less/grafana.less +++ b/src/css/less/grafana.less @@ -460,7 +460,6 @@ select.grafana-target-segment-input { width: 200px; text-align: center; cursor: auto; - //background: rgba(50,50,50,0.8); padding: 10px; } @@ -474,4 +473,17 @@ select.grafana-target-segment-input { .hide { display: block; } -} \ No newline at end of file +} + +.grafana-tooltip { + position : absolute; + top: -1000; + left: 0; + color: #c8c8c8; + padding: 10px; + font-size: 11pt; + font-weight : 200; + background-color: rgb(58, 57, 57); + border-radius: 5px; + z-index: 9999; +} diff --git a/src/css/less/graph.less b/src/css/less/graph.less index b27a2aca478..eea30a561cf 100644 --- a/src/css/less/graph.less +++ b/src/css/less/graph.less @@ -127,3 +127,5 @@ padding: 5px; } } + + diff --git a/src/index.html b/src/index.html index 0200889fa23..5e3bc08309e 100644 --- a/src/index.html +++ b/src/index.html @@ -18,9 +18,9 @@ - + - + @@ -28,15 +28,6 @@ {{alert.title}}
    {{$index + 1}} alert(s)
    -
    diff --git a/src/test/mocks/dashboard-mock.js b/src/test/mocks/dashboard-mock.js index ecc851e9de8..97858ceac23 100644 --- a/src/test/mocks/dashboard-mock.js +++ b/src/test/mocks/dashboard-mock.js @@ -5,37 +5,40 @@ define([], return { create: function() { return { - refresh: function() {}, - set_interval: function(value) { this.current.refresh = value; }, + emit_refresh: function() {}, + set_interval: function(value) { this.refresh = value; }, - current: { - title: "", - tags: [], - style: "dark", - timezone: 'browser', - editable: true, - failover: false, - panel_hints: true, - rows: [], - pulldowns: [ { type: 'templating' }, { type: 'annotations' } ], - nav: [ { type: 'timepicker' } ], - services: {}, - loader: { - save_gist: false, - save_elasticsearch: true, - save_local: true, - save_default: true, - save_temp: true, - save_temp_ttl_enable: true, - save_temp_ttl: '30d', - load_gist: false, - load_elasticsearch: true, - load_elasticsearch_size: 20, - load_local: false, - hide: false - }, - refresh: true - } + title: "", + tags: [], + style: "dark", + timezone: 'browser', + editable: true, + failover: false, + panel_hints: true, + rows: [], + pulldowns: [ { type: 'templating' }, { type: 'annotations' } ], + nav: [ { type: 'timepicker' } ], + services: { + filter: { + time: {}, + list: [] + } + }, + loader: { + save_gist: false, + save_elasticsearch: true, + save_local: true, + save_default: true, + save_temp: true, + save_temp_ttl_enable: true, + save_temp_ttl: '30d', + load_gist: false, + load_elasticsearch: true, + load_elasticsearch_size: 20, + load_local: false, + hide: false + }, + refresh: true }; } }; diff --git a/src/test/specs/filterSrv-specs.js b/src/test/specs/filterSrv-specs.js index 10edcdff31a..9e3c3f4c536 100644 --- a/src/test/specs/filterSrv-specs.js +++ b/src/test/specs/filterSrv-specs.js @@ -10,9 +10,8 @@ define([ var _dashboard; beforeEach(module('kibana.services')); - beforeEach(module(function($provide){ + beforeEach(module(function(){ _dashboard = dashboardMock.create(); - $provide.value('dashboard', _dashboard); })); beforeEach(inject(function(filterSrv) { @@ -20,7 +19,7 @@ define([ })); beforeEach(function() { - _filterSrv.init(_dashboard.current); + _filterSrv.init(_dashboard); }); describe('init', function() { @@ -68,18 +67,18 @@ define([ describe('setTime', function() { it('should return disable refresh for absolute times', function() { - _dashboard.current.refresh = true; + _dashboard.refresh = true; _filterSrv.setTime({from: '2011-01-01', to: '2015-01-01' }); - expect(_dashboard.current.refresh).to.be(false); + expect(_dashboard.refresh).to.be(false); }); it('should restore refresh after relative time range is set', function() { - _dashboard.current.refresh = true; + _dashboard.refresh = true; _filterSrv.setTime({from: '2011-01-01', to: '2015-01-01' }); - expect(_dashboard.current.refresh).to.be(false); + expect(_dashboard.refresh).to.be(false); _filterSrv.setTime({from: '2011-01-01', to: 'now' }); - expect(_dashboard.current.refresh).to.be(true); + expect(_dashboard.refresh).to.be(true); }); }); diff --git a/src/test/specs/influxSeries-specs.js b/src/test/specs/influxSeries-specs.js index e24ddb46a02..591e8a9d8f4 100644 --- a/src/test/specs/influxSeries-specs.js +++ b/src/test/specs/influxSeries-specs.js @@ -139,4 +139,61 @@ define([ }); + describe("when creating annotations from influxdb response", function() { + describe('given column mapping for all columns', function() { + var series = new InfluxSeries({ + seriesList: [ + { + columns: ['time', 'text', 'sequence_number', 'title', 'tags'], + name: 'events1', + points: [[1402596000, 'some text', 1, 'Hello', 'B'], [1402596001, 'asd', 2, 'Hello2', 'B']] + } + ], + annotation: { + query: 'select', + titleColumn: 'title', + tagsColumn: 'tags', + textColumn: 'text', + } + }); + + var result = series.getAnnotations(); + + it(' should generate 2 annnotations ', function() { + expect(result.length).to.be(2); + expect(result[0].annotation.query).to.be('select'); + expect(result[0].title).to.be('Hello'); + expect(result[0].time).to.be(1402596000000); + expect(result[0].tags).to.be('B'); + expect(result[0].text).to.be('some text'); + }); + + }); + + describe('given no column mapping', function() { + var series = new InfluxSeries({ + seriesList: [ + { + columns: ['time', 'text', 'sequence_number'], + name: 'events1', + points: [[1402596000, 'some text', 1]] + } + ], + annotation: { query: 'select' } + }); + + var result = series.getAnnotations(); + + it('should generate 1 annnotation', function() { + expect(result.length).to.be(1); + expect(result[0].title).to.be('some text'); + expect(result[0].time).to.be(1402596000000); + expect(result[0].tags).to.be(undefined); + expect(result[0].text).to.be(undefined); + }); + + }); + + }); + }); diff --git a/src/test/test-main.js b/src/test/test-main.js index 0d60d346478..ef1bf281835 100644 --- a/src/test/test-main.js +++ b/src/test/test-main.js @@ -44,7 +44,6 @@ require.config({ 'jquery.flot.time': '../vendor/jquery/jquery.flot.time', modernizr: '../vendor/modernizr-2.6.1', - elasticjs: '../vendor/elasticjs/elastic-angular-client', }, shim: { @@ -97,8 +96,6 @@ require.config({ timepicker: ['jquery', 'bootstrap'], datepicker: ['jquery', 'bootstrap'], - - elasticjs: ['angular', '../vendor/elasticjs/elastic'], } }); @@ -107,7 +104,6 @@ require([ 'angularMocks', 'jquery', 'underscore', - 'elasticjs', 'bootstrap', 'angular-sanitize', 'angular-strap', diff --git a/src/vendor/elasticjs/elastic-angular-client.js b/src/vendor/elasticjs/elastic-angular-client.js deleted file mode 100644 index 41eabf5d736..00000000000 --- a/src/vendor/elasticjs/elastic-angular-client.js +++ /dev/null @@ -1,100 +0,0 @@ -/*! elastic.js - v1.1.1 - 2013-05-24 - * https://github.com/fullscale/elastic.js - * Copyright (c) 2013 FullScale Labs, LLC; Licensed MIT */ - -/*jshint browser:true */ -/*global angular:true */ -'use strict'; - -/* -Angular.js service wrapping the elastic.js API. This module can simply -be injected into your angular controllers. -*/ -angular.module('elasticjs.service', []) - .factory('ejsResource', ['$http', function ($http) { - - return function (config, basicAuth) { - - var - - // use existing ejs object if it exists - ejs = window.ejs || {}, - - /* results are returned as a promise */ - promiseThen = function (httpPromise, successcb, errorcb) { - return httpPromise.then(function (response) { - (successcb || angular.noop)(response.data); - return response.data; - }, function (response) { - (errorcb || angular.noop)(response.data); - return response.data; - }); - }; - - // check if we have a config object - // if not, we have the server url so - // we convert it to a config object - if (config !== Object(config)) { - config = {server: config}; - } - - // set url to empty string if it was not specified - if (config.server == null) { - config.server = ''; - } - - // set authentication header - if (basicAuth || config.basicAuth) { - config.headers = angular.extend( config.headers||{}, { - "Authorization": "Basic " + (basicAuth||config.basicAuth) - }); - } - /* implement the elastic.js client interface for angular */ - ejs.client = { - server: function (s) { - if (s == null) { - return config.server; - } - - config.server = s; - return this; - }, - post: function (path, data, successcb, errorcb) { - path = config.server + path; - var reqConfig = {url: path, data: data, method: 'POST'}; - return promiseThen($http(angular.extend(reqConfig, config)), successcb, errorcb); - }, - get: function (path, data, successcb, errorcb) { - path = config.server + path; - // no body on get request, data will be request params - var reqConfig = {url: path, params: data, method: 'GET'}; - return promiseThen($http(angular.extend(reqConfig, config)), successcb, errorcb); - }, - put: function (path, data, successcb, errorcb) { - path = config.server + path; - var reqConfig = {url: path, data: data, method: 'PUT'}; - return promiseThen($http(angular.extend(reqConfig, config)), successcb, errorcb); - }, - del: function (path, data, successcb, errorcb) { - path = config.server + path; - var reqConfig = {url: path, data: data, method: 'DELETE'}; - return promiseThen($http(angular.extend(reqConfig, config)), successcb, errorcb); - }, - head: function (path, data, successcb, errorcb) { - path = config.server + path; - // no body on HEAD request, data will be request params - var reqConfig = {url: path, params: data, method: 'HEAD'}; - return $http(angular.extend(reqConfig, config)) - .then(function (response) { - (successcb || angular.noop)(response.headers()); - return response.headers(); - }, function (response) { - (errorcb || angular.noop)(undefined); - return undefined; - }); - } - }; - - return ejs; - }; -}]); \ No newline at end of file diff --git a/src/vendor/elasticjs/elastic.js b/src/vendor/elasticjs/elastic.js deleted file mode 100644 index ba9c8ee2062..00000000000 --- a/src/vendor/elasticjs/elastic.js +++ /dev/null @@ -1,22268 +0,0 @@ -/*! elastic.js - v1.1.1 - 2013-08-14 - * https://github.com/fullscale/elastic.js - * Copyright (c) 2013 FullScale Labs, LLC; Licensed MIT */ - -/** - @namespace - @name ejs - @desc All elastic.js modules are organized under the ejs namespace. - */ -(function () { - 'use strict'; - - var - - // save reference to global object - // `window` in browser - // `exports` on server - root = this, - - // save the previous version of ejs - _ejs = root && root.ejs, - - // from underscore.js, used in utils - ArrayProto = Array.prototype, - ObjProto = Object.prototype, - slice = ArrayProto.slice, - toString = ObjProto.toString, - hasOwnProp = ObjProto.hasOwnProperty, - nativeForEach = ArrayProto.forEach, - nativeIsArray = Array.isArray, - nativeIndexOf = ArrayProto.indexOf, - breaker = {}, - has, - each, - extend, - indexOf, - genClientParams, - genParamStr, - isArray, - isObject, - isString, - isNumber, - isFunction, - isEJSObject, // checks if valid ejs object - isQuery, // checks valid ejs Query object - isRescore, // checks valid ejs Rescore object - isFilter, // checks valid ejs Filter object - isFacet, // checks valid ejs Facet object - isScriptField, // checks valid ejs ScriptField object - isGeoPoint, // checks valid ejs GeoPoint object - isIndexedShape, // checks valid ejs IndexedShape object - isShape, // checks valid ejs Shape object - isSort, // checks valid ejs Sort object - isHighlight, // checks valid ejs Highlight object - isSuggest, // checks valid ejs Suggest object - isGenerator, // checks valid ejs Generator object - isClusterHealth, // checks valid ejs ClusterHealth object - isClusterState, // checks valid ejs ClusterState object - isNodeStats, // checks valid ejs NodeStats object - isNodeInfo, // checks valid ejs NodeInfo object - isRequest, // checks valid ejs Request object - isMultiSearchRequest, // checks valid ejs MultiSearchRequest object - - // create ejs object - ejs; - - if (typeof exports !== 'undefined') { - ejs = exports; - } else { - ejs = root.ejs = {}; - } - - /* Utility methods, most of which are pulled from underscore.js. */ - - // Shortcut function for checking if an object has a given property directly - // on itself (in other words, not on a prototype). - has = function (obj, key) { - return hasOwnProp.call(obj, key); - }; - - // The cornerstone, an `each` implementation, aka `forEach`. - // Handles objects with the built-in `forEach`, arrays, and raw objects. - // Delegates to **ECMAScript 5**'s native `forEach` if available. - each = function (obj, iterator, context) { - if (obj == null) { - return; - } - if (nativeForEach && obj.forEach === nativeForEach) { - obj.forEach(iterator, context); - } else if (obj.length === +obj.length) { - for (var i = 0, l = obj.length; i < l; i++) { - if (iterator.call(context, obj[i], i, obj) === breaker) { - return; - } - } - } else { - for (var key in obj) { - if (has(obj, key)) { - if (iterator.call(context, obj[key], key, obj) === breaker) { - return; - } - } - } - } - }; - - // Extend a given object with all the properties in passed-in object(s). - extend = function (obj) { - each(slice.call(arguments, 1), function (source) { - for (var prop in source) { - obj[prop] = source[prop]; - } - }); - return obj; - }; - - // Returns the index at which value can be found in the array, or -1 if - // value is not present in the array. - indexOf = function (array, item) { - if (array == null) { - return -1; - } - - var i = 0, l = array.length; - if (nativeIndexOf && array.indexOf === nativeIndexOf) { - return array.indexOf(item); - } - - for (; i < l; i++) { - if (array[i] === item) { - return i; - - } - } - - return -1; - }; - - // Converts the stored params into parameters that will be passed - // to a client. Certain parameter are skipped, and others require - // special processing before being sent to the client. - genClientParams = function (params, excludes) { - var - clientParams = {}, - param, - paramVal; - - for (param in params) { - if (!has(params, param)) { - continue; - } - - // skip params that don't go in the query string - if (indexOf(excludes, param) !== -1) { - continue; - } - - // process all other params - paramVal = params[param]; - if (isArray(paramVal)) { - paramVal = paramVal.join(); - } - - clientParams[param] = paramVal; - } - - return clientParams; - }; - - // converts client params to a string param1=val1¶m2=val1 - genParamStr = function (params, excludes) { - var - clientParams = genClientParams(params, excludes), - parts = [], - p; - - for (p in clientParams) { - if (!has(clientParams, p)) { - continue; - } - - parts.push(p + '=' + encodeURIComponent(clientParams[p])); - } - - return parts.join('&'); - }; - - // Is a given value an array? - // Delegates to ECMA5's native Array.isArray - // switched to ===, not sure why underscore used == - isArray = nativeIsArray || function (obj) { - return toString.call(obj) === '[object Array]'; - }; - - // Is a given variable an object? - isObject = function (obj) { - return obj === Object(obj); - }; - - // switched to ===, not sure why underscore used == - isString = function (obj) { - return toString.call(obj) === '[object String]'; - }; - - // switched to ===, not sure why underscore used == - isNumber = function (obj) { - return toString.call(obj) === '[object Number]'; - }; - - // switched to ===, not sure why underscore used == - if (typeof (/./) !== 'function') { - isFunction = function (obj) { - return typeof obj === 'function'; - }; - } else { - isFunction = function (obj) { - return toString.call(obj) === '[object Function]'; - }; - } - - // Is a given value an ejs object? - // Yes if object and has "_type", "_self", and "toString" properties - isEJSObject = function (obj) { - return (isObject(obj) && - has(obj, '_type') && - has(obj, '_self') && - has(obj, 'toString')); - }; - - isQuery = function (obj) { - return (isEJSObject(obj) && obj._type() === 'query'); - }; - - isRescore = function (obj) { - return (isEJSObject(obj) && obj._type() === 'rescore'); - }; - - isFilter = function (obj) { - return (isEJSObject(obj) && obj._type() === 'filter'); - }; - - isFacet = function (obj) { - return (isEJSObject(obj) && obj._type() === 'facet'); - }; - - isScriptField = function (obj) { - return (isEJSObject(obj) && obj._type() === 'script field'); - }; - - isGeoPoint = function (obj) { - return (isEJSObject(obj) && obj._type() === 'geo point'); - }; - - isIndexedShape = function (obj) { - return (isEJSObject(obj) && obj._type() === 'indexed shape'); - }; - - isShape = function (obj) { - return (isEJSObject(obj) && obj._type() === 'shape'); - }; - - isSort = function (obj) { - return (isEJSObject(obj) && obj._type() === 'sort'); - }; - - isHighlight = function (obj) { - return (isEJSObject(obj) && obj._type() === 'highlight'); - }; - - isSuggest = function (obj) { - return (isEJSObject(obj) && obj._type() === 'suggest'); - }; - - isGenerator = function (obj) { - return (isEJSObject(obj) && obj._type() === 'generator'); - }; - - isClusterHealth = function (obj) { - return (isEJSObject(obj) && obj._type() === 'cluster health'); - }; - - isClusterState = function (obj) { - return (isEJSObject(obj) && obj._type() === 'cluster state'); - }; - - isNodeStats = function (obj) { - return (isEJSObject(obj) && obj._type() === 'node stats'); - }; - - isNodeInfo = function (obj) { - return (isEJSObject(obj) && obj._type() === 'node info'); - }; - - isRequest = function (obj) { - return (isEJSObject(obj) && obj._type() === 'request'); - }; - - isMultiSearchRequest = function (obj) { - return (isEJSObject(obj) && obj._type() === 'multi search request'); - }; - - /** - @class -

    The DateHistogram facet works with time-based values by building a histogram across time - intervals of the value field. Each value is rounded into an interval (or - placed in a bucket), and statistics are provided per interval/bucket (count and total).

    - -

    Facets are similar to SQL GROUP BY statements but perform much - better. You can also construct several "groups" at once by simply - specifying multiple facets.

    - -
    -

    - Tip: - For more information on faceted navigation, see - this - Wikipedia article on Faceted Classification. -

    -
    - - @name ejs.DateHistogramFacet - - @desc -

    A facet which returns the N most frequent terms within a collection - or set of collections.

    - - @param {String} name The name which be used to refer to this facet. For instance, - the facet itself might utilize a field named doc_authors. Setting - name to Authors would allow you to refer to the - facet by that name, possibly simplifying some of the display logic. - - */ - ejs.DateHistogramFacet = function (name) { - - /** - The internal facet object. - @member ejs.DateHistogramFacet - @property {Object} facet - */ - var facet = {}; - - facet[name] = { - date_histogram: {} - }; - - return { - - /** - Sets the field to be used to construct the this facet. - - @member ejs.DateHistogramFacet - @param {String} fieldName The field name whose data will be used to construct the facet. - @returns {Object} returns this so that calls can be chained. - */ - field: function (fieldName) { - if (fieldName == null) { - return facet[name].date_histogram.field; - } - - facet[name].date_histogram.field = fieldName; - return this; - }, - - /** - Allows you to specify a different key field to be used to group intervals. - - @member ejs.DateHistogramFacet - @param {String} fieldName The name of the field to be used. - @returns {Object} returns this so that calls can be chained. - */ - keyField: function (fieldName) { - if (fieldName == null) { - return facet[name].date_histogram.key_field; - } - - facet[name].date_histogram.key_field = fieldName; - return this; - }, - - /** - Allows you to specify a different value field to aggrerate over. - - @member ejs.DateHistogramFacet - @param {String} fieldName The name of the field to be used. - @returns {Object} returns this so that calls can be chained. - */ - valueField: function (fieldName) { - if (fieldName == null) { - return facet[name].date_histogram.value_field; - } - - facet[name].date_histogram.value_field = fieldName; - return this; - }, - - /** - Sets the bucket interval used to calculate the distribution. - - @member ejs.DateHistogramFacet - @param {String} timeInterval The bucket interval. Valid values are year, month, week, day, hour, and minute. - @returns {Object} returns this so that calls can be chained. - */ - interval: function (timeInterval) { - if (timeInterval == null) { - return facet[name].date_histogram.interval; - } - - facet[name].date_histogram.interval = timeInterval; - return this; - }, - - /** -

    By default, time values are stored in UTC format.

    - -

    This method allows users to set a time zone value that is then used - to compute intervals before rounding on the interval value. Equalivent to - preZone. Use preZone if possible. The - value is an offset from UTC.

    - -

    For example, to use EST you would set the value to -5.

    - - @member ejs.DateHistogramFacet - @param {Integer} tz An offset value from UTC. - @returns {Object} returns this so that calls can be chained. - */ - timeZone: function (tz) { - if (tz == null) { - return facet[name].date_histogram.time_zone; - } - - facet[name].date_histogram.time_zone = tz; - return this; - }, - - /** -

    By default, time values are stored in UTC format.

    - -

    This method allows users to set a time zone value that is then used to - compute intervals before rounding on the interval value. The value is an - offset from UTC.

    - -

    For example, to use EST you would set the value to -5.

    - - @member ejs.DateHistogramFacet - @param {Integer} tz An offset value from UTC. - @returns {Object} returns this so that calls can be chained. - */ - preZone: function (tz) { - if (tz == null) { - return facet[name].date_histogram.pre_zone; - } - - facet[name].date_histogram.pre_zone = tz; - return this; - }, - - /** -

    Enables large date interval conversions (day and up).

    - -

    Set to true to enable and then set the interval to an - interval greater than a day.

    - - @member ejs.DateHistogramFacet - @param {Boolean} trueFalse A valid boolean value. - @returns {Object} returns this so that calls can be chained. - */ - preZoneAdjustLargeInterval: function (trueFalse) { - if (trueFalse == null) { - return facet[name].date_histogram.pre_zone_adjust_large_interval; - } - - facet[name].date_histogram.pre_zone_adjust_large_interval = trueFalse; - return this; - }, - - /** -

    By default, time values are stored in UTC format.

    - -

    This method allows users to set a time zone value that is then used to compute - intervals after rounding on the interval value. The value is an offset from UTC. - The tz offset value is simply added to the resulting bucket's date value.

    - -

    For example, to use EST you would set the value to -5.

    - - @member ejs.DateHistogramFacet - @param {Integer} tz An offset value from UTC. - @returns {Object} returns this so that calls can be chained. - */ - postZone: function (tz) { - if (tz == null) { - return facet[name].date_histogram.post_zone; - } - - facet[name].date_histogram.post_zone = tz; - return this; - }, - - /** - Set's a specific pre-rounding offset. Format is 1d, 1h, etc. - - @member ejs.DateHistogramFacet - @param {String} offset The offset as a string (1d, 1h, etc) - @returns {Object} returns this so that calls can be chained. - */ - preOffset: function (offset) { - if (offset == null) { - return facet[name].date_histogram.pre_offset; - } - - facet[name].date_histogram.pre_offset = offset; - return this; - }, - - /** - Set's a specific post-rounding offset. Format is 1d, 1h, etc. - - @member ejs.DateHistogramFacet - @param {String} offset The offset as a string (1d, 1h, etc) - @returns {Object} returns this so that calls can be chained. - */ - postOffset: function (offset) { - if (offset == null) { - return facet[name].date_histogram.post_offset; - } - - facet[name].date_histogram.post_offset = offset; - return this; - }, - - /** -

    The date histogram works on numeric values (since time is stored - in milliseconds since the epoch in UTC).

    - -

    But, sometimes, systems will store a different resolution (like seconds since UTC) - in a numeric field. The factor parameter can be used to change the value in the field - to milliseconds to actual do the relevant rounding, and then be applied again to get to - the original unit.

    - -

    For example, when storing in a numeric field seconds resolution, - the factor can be set to 1000.

    - - @member ejs.DateHistogramFacet - @param {Integer} f The conversion factor. - @returns {Object} returns this so that calls can be chained. - */ - factor: function (f) { - if (f == null) { - return facet[name].date_histogram.factor; - } - - facet[name].date_histogram.factor = f; - return this; - }, - - /** - Allows you modify the value field using a script. The modified value - is then used to compute the statistical data. - - @member ejs.DateHistogramFacet - @param {String} scriptCode A valid script string to execute. - @returns {Object} returns this so that calls can be chained. - */ - valueScript: function (scriptCode) { - if (scriptCode == null) { - return facet[name].date_histogram.value_script; - } - - facet[name].date_histogram.value_script = scriptCode; - return this; - }, - - /** -

    Sets the type of ordering that will be performed on the date - buckets. Valid values are:

    - -

    -
    time - the default, sort by the buckets start time in milliseconds.
    -
    count - sort by the number of items in the bucket
    -
    total - sort by the sum/total of the items in the bucket
    -
    - - @member ejs.DateHistogramFacet - @param {String} o The ordering method: time, count, or total. - @returns {Object} returns this so that calls can be chained. - */ - order: function (o) { - if (o == null) { - return facet[name].date_histogram.order; - } - - o = o.toLowerCase(); - if (o === 'time' || o === 'count' || o === 'total') { - facet[name].date_histogram.order = o; - } - - return this; - }, - - /** - The script language being used. Currently supported values are - javascript, groovy, and mvel. - - @member ejs.DateHistogramFacet - @param {String} language The language of the script. - @returns {Object} returns this so that calls can be chained. - */ - lang: function (language) { - if (language == null) { - return facet[name].date_histogram.lang; - } - - facet[name].date_histogram.lang = language; - return this; - }, - - /** - Sets parameters that will be applied to the script. Overwrites - any existing params. - - @member ejs.DateHistogramFacet - @param {Object} p An object where the keys are the parameter name and - values are the parameter value. - @returns {Object} returns this so that calls can be chained. - */ - params: function (p) { - if (p == null) { - return facet[name].date_histogram.params; - } - - facet[name].date_histogram.params = p; - return this; - }, - - /** -

    Allows you to reduce the documents used for computing facet results.

    - - @member ejs.DateHistogramFacet - @param {Object} oFilter A valid Filter object. - @returns {Object} returns this so that calls can be chained. - */ - facetFilter: function (oFilter) { - if (oFilter == null) { - return facet[name].facet_filter; - } - - if (!isFilter(oFilter)) { - throw new TypeError('Argument must be a Filter'); - } - - facet[name].facet_filter = oFilter._self(); - return this; - }, - - /** -

    Computes values across the entire index

    - - @member ejs.DateHistogramFacet - @param {Boolean} trueFalse Calculate facet counts globally or not. - @returns {Object} returns this so that calls can be chained. - */ - global: function (trueFalse) { - if (trueFalse == null) { - return facet[name].global; - } - - facet[name].global = trueFalse; - return this; - }, - - /** -

    Sets the mode the facet will use.

    - -

    -
    collector
    -
    post
    -
    - - @member ejs.DateHistogramFacet - @param {String} m The mode: collector or post. - @returns {Object} returns this so that calls can be chained. - */ - mode: function (m) { - if (m == null) { - return facet[name].mode; - } - - m = m.toLowerCase(); - if (m === 'collector' || m === 'post') { - facet[name].mode = m; - } - - return this; - }, - - /** -

    Computes values across the the specified scope

    - - @deprecated since elasticsearch 0.90 - @member ejs.DateHistogramFacet - @param {String} scope The scope name to calculate facet counts with. - @returns {Object} returns this so that calls can be chained. - */ - scope: function (scope) { - return this; - }, - - /** -

    Enables caching of the facetFilter

    - - @member ejs.DateHistogramFacet - @param {Boolean} trueFalse If the facetFilter should be cached or not - @returns {Object} returns this so that calls can be chained. - */ - cacheFilter: function (trueFalse) { - if (trueFalse == null) { - return facet[name].cache_filter; - } - - facet[name].cache_filter = trueFalse; - return this; - }, - - /** -

    Sets the path to the nested document if faceting against a - nested field.

    - - @member ejs.DateHistogramFacet - @param {String} path The nested path - @returns {Object} returns this so that calls can be chained. - */ - nested: function (path) { - if (path == null) { - return facet[name].nested; - } - - facet[name].nested = path; - return this; - }, - - /** -

    Allows you to serialize this object into a JSON encoded string.

    - - @member ejs.DateHistogramFacet - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(facet); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.DateHistogramFacet - @returns {String} the type of object - */ - _type: function () { - return 'facet'; - }, - - /** -

    Retrieves the internal facet object. This is typically used by - internal API functions so use with caution.

    - - @member ejs.DateHistogramFacet - @returns {String} returns this object's internal facet property. - */ - _self: function () { - return facet; - } - }; - }; - - /** - @class -

    The FilterFacet allows you to specify any valid Filter and - have the number of matching hits returned as the value.

    - -

    Facets are similar to SQL GROUP BY statements but perform much - better. You can also construct several "groups" at once by simply - specifying multiple facets.

    - -
    -

    - Tip: - For more information on faceted navigation, see - this - Wikipedia article on Faceted Classification. -

    -
    - - @name ejs.FilterFacet - - @desc -

    A facet that return a count of the hits matching the given filter.

    - - @param {String} name The name which be used to refer to this facet. For instance, - the facet itself might utilize a field named doc_authors. Setting - name to Authors would allow you to refer to the - facet by that name, possibly simplifying some of the display logic. - - */ - ejs.FilterFacet = function (name) { - - /** - The internal facet object. - @member ejs.FilterFacet - @property {Object} facet - */ - var facet = {}; - facet[name] = {}; - - return { - - /** -

    Sets the filter to be used for this facet.

    - - @member ejs.FilterFacet - @param {Object} oFilter A valid Query object. - @returns {Object} returns this so that calls can be chained. - */ - filter: function (oFilter) { - if (oFilter == null) { - return facet[name].filter; - } - - if (!isFilter(oFilter)) { - throw new TypeError('Argument must be a Filter'); - } - - facet[name].filter = oFilter._self(); - return this; - }, - - /** -

    Allows you to reduce the documents used for computing facet results.

    - - @member ejs.FilterFacet - @param {Object} oFilter A valid Filter object. - @returns {Object} returns this so that calls can be chained. - */ - facetFilter: function (oFilter) { - if (oFilter == null) { - return facet[name].facet_filter; - } - - if (!isFilter(oFilter)) { - throw new TypeError('Argument must be a Filter'); - } - - facet[name].facet_filter = oFilter._self(); - return this; - }, - - /** -

    Computes values across the entire index

    - - @member ejs.FilterFacet - @param {Boolean} trueFalse Calculate facet counts globally or not. - @returns {Object} returns this so that calls can be chained. - */ - global: function (trueFalse) { - if (trueFalse == null) { - return facet[name].global; - } - - facet[name].global = trueFalse; - return this; - }, - - /** -

    Sets the mode the facet will use.

    - -

    -
    collector
    -
    post
    -
    - - @member ejs.FilterFacet - @param {String} m The mode: collector or post. - @returns {Object} returns this so that calls can be chained. - */ - mode: function (m) { - if (m == null) { - return facet[name].mode; - } - - m = m.toLowerCase(); - if (m === 'collector' || m === 'post') { - facet[name].mode = m; - } - - return this; - }, - - /** -

    Computes values across the the specified scope

    - - @deprecated since elasticsearch 0.90 - @member ejs.FilterFacet - @param {String} scope The scope name to calculate facet counts with. - @returns {Object} returns this so that calls can be chained. - */ - scope: function (scope) { - return this; - }, - - /** -

    Enables caching of the facetFilter

    - - @member ejs.FilterFacet - @param {Boolean} trueFalse If the facetFilter should be cached or not - @returns {Object} returns this so that calls can be chained. - */ - cacheFilter: function (trueFalse) { - if (trueFalse == null) { - return facet[name].cache_filter; - } - - facet[name].cache_filter = trueFalse; - return this; - }, - - /** -

    Sets the path to the nested document if faceting against a - nested field.

    - - @member ejs.FilterFacet - @param {String} path The nested path - @returns {Object} returns this so that calls can be chained. - */ - nested: function (path) { - if (path == null) { - return facet[name].nested; - } - - facet[name].nested = path; - return this; - }, - - /** -

    Allows you to serialize this object into a JSON encoded string.

    - - @member ejs.FilterFacet - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(facet); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.FilterFacet - @returns {String} the type of object - */ - _type: function () { - return 'facet'; - }, - - /** -

    Retrieves the internal facet object. This is typically used by - internal API functions so use with caution.

    - - @member ejs.FilterFacet - @returns {String} returns this object's internal facet property. - */ - _self: function () { - return facet; - } - }; - }; - - /** - @class -

    The geoDistanceFacet facet provides information over a range of distances from a - provided point. This includes the number of hits that fall within each range, - along with aggregate information (like total).

    - -

    Facets are similar to SQL GROUP BY statements but perform much - better. You can also construct several "groups" at once by simply - specifying multiple facets.

    - -
    -

    - Tip: - For more information on faceted navigation, see - this - Wikipedia article on Faceted Classification. -

    -
    - - @name ejs.GeoDistanceFacet - - @desc -

    A facet which provides information over a range of distances from a provided point.

    - - @param {String} name The name which be used to refer to this facet. For instance, - the facet itself might utilize a field named doc_authors. Setting - name to Authors would allow you to refer to the - facet by that name, possibly simplifying some of the display logic. - - */ - ejs.GeoDistanceFacet = function (name) { - - /** - The internal facet object. - @member ejs.GeoDistanceFacet - @property {Object} facet - */ - var facet = {}, - point = ejs.GeoPoint([0, 0]), - field = 'location'; - - facet[name] = { - geo_distance: { - location: point._self(), - ranges: [] - } - }; - - return { - - /** - Sets the document field containing the geo-coordinate to be used - to calculate the distance. Defaults to "location". - - @member ejs.GeoDistanceFacet - @param {String} fieldName The field name whose data will be used to construct the facet. - @returns {Object} returns this so that calls can be chained. - */ - field: function (fieldName) { - var oldValue = facet[name].geo_distance[field]; - - if (fieldName == null) { - return field; - } - - delete facet[name].geo_distance[field]; - field = fieldName; - facet[name].geo_distance[fieldName] = oldValue; - - return this; - }, - - /** - Sets the point of origin from where distances will be measured. - - @member ejs.GeoDistanceFacet - @param {GeoPoint} p A valid GeoPoint object - @returns {Object} returns this so that calls can be chained. - */ - point: function (p) { - if (p == null) { - return point; - } - - if (!isGeoPoint(p)) { - throw new TypeError('Argument must be a GeoPoint'); - } - - point = p; - facet[name].geo_distance[field] = p._self(); - return this; - }, - - /** - Adds a new bounded range. - - @member ejs.GeoDistanceFacet - @param {Number} from The lower bound of the range - @param {Number} to The upper bound of the range - @returns {Object} returns this so that calls can be chained. - */ - addRange: function (from, to) { - if (arguments.length === 0) { - return facet[name].geo_distance.ranges; - } - - facet[name].geo_distance.ranges.push({ - from: from, - to: to - }); - - return this; - }, - - /** - Adds a new unbounded lower limit. - - @member ejs.GeoDistanceFacet - @param {Number} from The lower limit of the unbounded range - @returns {Object} returns this so that calls can be chained. - */ - addUnboundedFrom: function (from) { - if (from == null) { - return facet[name].geo_distance.ranges; - } - - facet[name].geo_distance.ranges.push({ - from: from - }); - - return this; - }, - - /** - Adds a new unbounded upper limit. - - @member ejs.GeoDistanceFacet - @param {Number} to The upper limit of the unbounded range - @returns {Object} returns this so that calls can be chained. - */ - addUnboundedTo: function (to) { - if (to == null) { - return facet[name].geo_distance.ranges; - } - - facet[name].geo_distance.ranges.push({ - to: to - }); - - return this; - }, - - /** - Sets the distance unit. Valid values are "mi" for miles or "km" - for kilometers. Defaults to "km". - - @member ejs.GeoDistanceFacet - @param {Number} unit the unit of distance measure. - @returns {Object} returns this so that calls can be chained. - */ - unit: function (unit) { - if (unit == null) { - return facet[name].geo_distance.unit; - } - - unit = unit.toLowerCase(); - if (unit === 'mi' || unit === 'km') { - facet[name].geo_distance.unit = unit; - } - - return this; - }, - - /** - How to compute the distance. Can either be arc (better precision) - or plane (faster). Defaults to arc. - - @member ejs.GeoDistanceFacet - @param {String} type The execution type as a string. - @returns {Object} returns this so that calls can be chained. - */ - distanceType: function (type) { - if (type == null) { - return facet[name].geo_distance.distance_type; - } - - type = type.toLowerCase(); - if (type === 'arc' || type === 'plane') { - facet[name].geo_distance.distance_type = type; - } - - return this; - }, - - /** - If the lat/long points should be normalized to lie within their - respective normalized ranges. - - Normalized ranges are: - lon = -180 (exclusive) to 180 (inclusive) range - lat = -90 to 90 (both inclusive) range - - @member ejs.GeoDistanceFacet - @param {String} trueFalse True if the coordinates should be normalized. False otherwise. - @returns {Object} returns this so that calls can be chained. - */ - normalize: function (trueFalse) { - if (trueFalse == null) { - return facet[name].geo_distance.normalize; - } - - facet[name].geo_distance.normalize = trueFalse; - return this; - }, - - /** - Allows you to specify a different value field to aggrerate over. - - @member ejs.GeoDistanceFacet - @param {String} fieldName The name of the field to be used. - @returns {Object} returns this so that calls can be chained. - */ - valueField: function (fieldName) { - if (fieldName == null) { - return facet[name].geo_distance.value_field; - } - - facet[name].geo_distance.value_field = fieldName; - return this; - }, - - /** - Allows you modify the value field using a script. The modified value - is then used to compute the statistical data. - - @member ejs.GeoDistanceFacet - @param {String} scriptCode A valid script string to execute. - @returns {Object} returns this so that calls can be chained. - */ - valueScript: function (scriptCode) { - if (scriptCode == null) { - return facet[name].geo_distance.value_script; - } - - facet[name].geo_distance.value_script = scriptCode; - return this; - }, - - /** - The script language being used. Currently supported values are - javascript, groovy, and mvel. - - @member ejs.GeoDistanceFacet - @param {String} language The language of the script. - @returns {Object} returns this so that calls can be chained. - */ - lang: function (language) { - if (language == null) { - return facet[name].geo_distance.lang; - } - - facet[name].geo_distance.lang = language; - return this; - }, - - /** - Sets parameters that will be applied to the script. Overwrites - any existing params. - - @member ejs.GeoDistanceFacet - @param {Object} p An object where the keys are the parameter name and - values are the parameter value. - @returns {Object} returns this so that calls can be chained. - */ - params: function (p) { - if (p == null) { - return facet[name].geo_distance.params; - } - - facet[name].geo_distance.params = p; - return this; - }, - - /** -

    Allows you to reduce the documents used for computing facet results.

    - - @member ejs.GeoDistanceFacet - @param {Object} oFilter A valid Filter object. - @returns {Object} returns this so that calls can be chained. - */ - facetFilter: function (oFilter) { - if (oFilter == null) { - return facet[name].facet_filter; - } - - if (!isFilter(oFilter)) { - throw new TypeError('Argument must be a Filter'); - } - - facet[name].facet_filter = oFilter._self(); - return this; - }, - - /** -

    Computes values across the entire index

    - - @member ejs.GeoDistanceFacet - @param {Boolean} trueFalse Calculate facet counts globally or not. - @returns {Object} returns this so that calls can be chained. - */ - global: function (trueFalse) { - if (trueFalse == null) { - return facet[name].global; - } - - facet[name].global = trueFalse; - return this; - }, - - /** -

    Sets the mode the facet will use.

    - -

    -
    collector
    -
    post
    -
    - - @member ejs.GeoDistanceFacet - @param {String} m The mode: collector or post. - @returns {Object} returns this so that calls can be chained. - */ - mode: function (m) { - if (m == null) { - return facet[name].mode; - } - - m = m.toLowerCase(); - if (m === 'collector' || m === 'post') { - facet[name].mode = m; - } - - return this; - }, - - /** -

    Computes values across the the specified scope

    - - @deprecated since elasticsearch 0.90 - @member ejs.GeoDistanceFacet - @param {String} scope The scope name to calculate facet counts with. - @returns {Object} returns this so that calls can be chained. - */ - scope: function (scope) { - return this; - }, - - /** -

    Enables caching of the facetFilter

    - - @member ejs.GeoDistanceFacet - @param {Boolean} trueFalse If the facetFilter should be cached or not - @returns {Object} returns this so that calls can be chained. - */ - cacheFilter: function (trueFalse) { - if (trueFalse == null) { - return facet[name].cache_filter; - } - - facet[name].cache_filter = trueFalse; - return this; - }, - - /** -

    Sets the path to the nested document if faceting against a - nested field.

    - - @member ejs.GeoDistanceFacet - @param {String} path The nested path - @returns {Object} returns this so that calls can be chained. - */ - nested: function (path) { - if (path == null) { - return facet[name].nested; - } - - facet[name].nested = path; - return this; - }, - - /** -

    Allows you to serialize this object into a JSON encoded string.

    - - @member ejs.GeoDistanceFacet - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(facet); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.GeoDistanceFacet - @returns {String} the type of object - */ - _type: function () { - return 'facet'; - }, - - /** -

    Retrieves the internal facet object. This is typically used by - internal API functions so use with caution.

    - - @member ejs.GeoDistanceFacet - @returns {String} returns this object's internal facet property. - */ - _self: function () { - return facet; - } - }; - }; - - /** - @class -

    The histogram facet works with numeric data by building a histogram across intervals - of the field values. Each value is rounded into an interval (or placed in a - bucket), and statistics are provided per interval/bucket (count and total).

    - -

    Facets are similar to SQL GROUP BY statements but perform much - better. You can also construct several "groups" at once by simply - specifying multiple facets.

    - -
    -

    - Tip: - For more information on faceted navigation, see - this - Wikipedia article on Faceted Classification. -

    -
    - - @name ejs.HistogramFacet - - @desc -

    A facet which returns the N most frequent terms within a collection - or set of collections.

    - - @param {String} name The name which be used to refer to this facet. For instance, - the facet itself might utilize a field named doc_authors. Setting - name to Authors would allow you to refer to the - facet by that name, possibly simplifying some of the display logic. - - */ - ejs.HistogramFacet = function (name) { - - /** - The internal facet object. - @member ejs.HistogramFacet - @property {Object} facet - */ - var facet = {}; - - facet[name] = { - histogram: {} - }; - - return { - - /** - Sets the field to be used to construct the this facet. - - @member ejs.HistogramFacet - @param {String} fieldName The field name whose data will be used to construct the facet. - @returns {Object} returns this so that calls can be chained. - */ - field: function (fieldName) { - if (fieldName == null) { - return facet[name].histogram.field; - } - - facet[name].histogram.field = fieldName; - return this; - }, - - /** - Sets the bucket interval used to calculate the distribution. - - @member ejs.HistogramFacet - @param {Number} numericInterval The bucket interval in which to group values. - @returns {Object} returns this so that calls can be chained. - */ - interval: function (numericInterval) { - if (numericInterval == null) { - return facet[name].histogram.interval; - } - - facet[name].histogram.interval = numericInterval; - return this; - }, - - /** - Sets the bucket interval used to calculate the distribution based - on a time value such as "1d", "1w", etc. - - @member ejs.HistogramFacet - @param {Number} timeInterval The bucket interval in which to group values. - @returns {Object} returns this so that calls can be chained. - */ - timeInterval: function (timeInterval) { - if (timeInterval == null) { - return facet[name].histogram.time_interval; - } - - facet[name].histogram.time_interval = timeInterval; - return this; - }, - - /** - Sets the "from", "start", or lower bounds bucket. For example if - you have a value of 1023, an interval of 100, and a from value of - 1500, it will be placed into the 1500 bucket vs. the normal bucket - of 1000. - - @member ejs.HistogramFacet - @param {Number} from the lower bounds bucket value. - @returns {Object} returns this so that calls can be chained. - */ - from: function (from) { - if (from == null) { - return facet[name].histogram.from; - } - - facet[name].histogram.from = from; - return this; - }, - - /** - Sets the "to", "end", or upper bounds bucket. For example if - you have a value of 1023, an interval of 100, and a to value of - 900, it will be placed into the 900 bucket vs. the normal bucket - of 1000. - - @member ejs.HistogramFacet - @param {Number} to the upper bounds bucket value. - @returns {Object} returns this so that calls can be chained. - */ - to: function (to) { - if (to == null) { - return facet[name].histogram.to; - } - - facet[name].histogram.to = to; - return this; - }, - - /** - Allows you to specify a different value field to aggrerate over. - - @member ejs.HistogramFacet - @param {String} fieldName The name of the field to be used. - @returns {Object} returns this so that calls can be chained. - */ - valueField: function (fieldName) { - if (fieldName == null) { - return facet[name].histogram.value_field; - } - - facet[name].histogram.value_field = fieldName; - return this; - }, - - /** - Allows you to specify a different key field to be used to group intervals. - - @member ejs.HistogramFacet - @param {String} fieldName The name of the field to be used. - @returns {Object} returns this so that calls can be chained. - */ - keyField: function (fieldName) { - if (fieldName == null) { - return facet[name].histogram.key_field; - } - - facet[name].histogram.key_field = fieldName; - return this; - }, - - /** - Allows you modify the value field using a script. The modified value - is then used to compute the statistical data. - - @member ejs.HistogramFacet - @param {String} scriptCode A valid script string to execute. - @returns {Object} returns this so that calls can be chained. - */ - valueScript: function (scriptCode) { - if (scriptCode == null) { - return facet[name].histogram.value_script; - } - - facet[name].histogram.value_script = scriptCode; - return this; - }, - - /** - Allows you modify the key field using a script. The modified value - is then used to generate the interval. - - @member ejs.HistogramFacet - @param {String} scriptCode A valid script string to execute. - @returns {Object} returns this so that calls can be chained. - */ - keyScript: function (scriptCode) { - if (scriptCode == null) { - return facet[name].histogram.key_script; - } - - facet[name].histogram.key_script = scriptCode; - return this; - }, - - /** - The script language being used. Currently supported values are - javascript, groovy, and mvel. - - @member ejs.HistogramFacet - @param {String} language The language of the script. - @returns {Object} returns this so that calls can be chained. - */ - lang: function (language) { - if (language == null) { - return facet[name].histogram.lang; - } - - facet[name].histogram.lang = language; - return this; - }, - - /** - Sets parameters that will be applied to the script. Overwrites - any existing params. - - @member ejs.HistogramFacet - @param {Object} p An object where the keys are the parameter name and - values are the parameter value. - @returns {Object} returns this so that calls can be chained. - */ - params: function (p) { - if (p == null) { - return facet[name].histogram.params; - } - - facet[name].histogram.params = p; - return this; - }, - - /** - Sets the type of ordering that will be performed on the date - buckets. Valid values are: - - key - the default, sort by the bucket's key value - count - sort by the number of items in the bucket - total - sort by the sum/total of the items in the bucket - - @member ejs.HistogramFacet - @param {String} o The ordering method: key, count, or total. - @returns {Object} returns this so that calls can be chained. - */ - order: function (o) { - if (o == null) { - return facet[name].histogram.order; - } - - o = o.toLowerCase(); - if (o === 'key' || o === 'count' || o === 'total') { - facet[name].histogram.order = o; - } - - return this; - }, - - /** -

    Allows you to reduce the documents used for computing facet results.

    - - @member ejs.HistogramFacet - @param {Object} oFilter A valid Filter object. - @returns {Object} returns this so that calls can be chained. - */ - facetFilter: function (oFilter) { - if (oFilter == null) { - return facet[name].facet_filter; - } - - if (!isFilter(oFilter)) { - throw new TypeError('Argument must be a Filter'); - } - - facet[name].facet_filter = oFilter._self(); - return this; - }, - - /** -

    Computes values across the entire index

    - - @member ejs.HistogramFacet - @param {Boolean} trueFalse Calculate facet counts globally or not. - @returns {Object} returns this so that calls can be chained. - */ - global: function (trueFalse) { - if (trueFalse == null) { - return facet[name].global; - } - - facet[name].global = trueFalse; - return this; - }, - - /** -

    Sets the mode the facet will use.

    - -

    -
    collector
    -
    post
    -
    - - @member ejs.HistogramFacet - @param {String} m The mode: collector or post. - @returns {Object} returns this so that calls can be chained. - */ - mode: function (m) { - if (m == null) { - return facet[name].mode; - } - - m = m.toLowerCase(); - if (m === 'collector' || m === 'post') { - facet[name].mode = m; - } - - return this; - }, - - /** -

    Computes values across the the specified scope

    - - @deprecated since elasticsearch 0.90 - @member ejs.HistogramFacet - @param {String} scope The scope name to calculate facet counts with. - @returns {Object} returns this so that calls can be chained. - */ - scope: function (scope) { - return this; - }, - - /** -

    Enables caching of the facetFilter

    - - @member ejs.HistogramFacet - @param {Boolean} trueFalse If the facetFilter should be cached or not - @returns {Object} returns this so that calls can be chained. - */ - cacheFilter: function (trueFalse) { - if (trueFalse == null) { - return facet[name].cache_filter; - } - - facet[name].cache_filter = trueFalse; - return this; - }, - - /** -

    Sets the path to the nested document if faceting against a - nested field.

    - - @member ejs.HistogramFacet - @param {String} path The nested path - @returns {Object} returns this so that calls can be chained. - */ - nested: function (path) { - if (path == null) { - return facet[name].nested; - } - - facet[name].nested = path; - return this; - }, - - /** -

    Allows you to serialize this object into a JSON encoded string.

    - - @member ejs.HistogramFacet - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(facet); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.HistogramFacet - @returns {String} the type of object - */ - _type: function () { - return 'facet'; - }, - - /** -

    Retrieves the internal facet object. This is typically used by - internal API functions so use with caution.

    - - @member ejs.HistogramFacet - @returns {String} returns this object's internal facet property. - */ - _self: function () { - return facet; - } - }; - }; - - /** - @class -

    The QueryFacet facet allows you to specify any valid Query and - have the number of matching hits returned as the value.

    - -

    Facets are similar to SQL GROUP BY statements but perform much - better. You can also construct several "groups" at once by simply - specifying multiple facets.

    - -
    -

    - Tip: - For more information on faceted navigation, see - this - Wikipedia article on Faceted Classification. -

    -
    - - @name ejs.QueryFacet - - @desc -

    A facet that return a count of the hits matching the given query.

    - - @param {String} name The name which be used to refer to this facet. For instance, - the facet itself might utilize a field named doc_authors. Setting - name to Authors would allow you to refer to the - facet by that name, possibly simplifying some of the display logic. - - */ - ejs.QueryFacet = function (name) { - - /** - The internal facet object. - @member ejs.QueryFacet - @property {Object} facet - */ - var facet = {}; - facet[name] = {}; - - return { - - /** -

    Sets the query to be used for this facet.

    - - @member ejs.QueryFacet - @param {Object} oQuery A valid Query object. - @returns {Object} returns this so that calls can be chained. - */ - query: function (oQuery) { - if (oQuery == null) { - return facet[name].query; - } - - if (!isQuery(oQuery)) { - throw new TypeError('Argument must be a Query'); - } - - facet[name].query = oQuery._self(); - return this; - }, - - /** -

    Allows you to reduce the documents used for computing facet results.

    - - @member ejs.QueryFacet - @param {Object} oFilter A valid Filter object. - @returns {Object} returns this so that calls can be chained. - */ - facetFilter: function (oFilter) { - if (oFilter == null) { - return facet[name].facet_filter; - } - - if (!isFilter(oFilter)) { - throw new TypeError('Argumnet must be a Filter'); - } - - facet[name].facet_filter = oFilter._self(); - return this; - }, - - /** -

    Computes values across the entire index

    - - @member ejs.QueryFacet - @param {Boolean} trueFalse Calculate facet counts globally or not. - @returns {Object} returns this so that calls can be chained. - */ - global: function (trueFalse) { - if (trueFalse == null) { - return facet[name].global; - } - - facet[name].global = trueFalse; - return this; - }, - - /** -

    Sets the mode the facet will use.

    - -

    -
    collector
    -
    post
    -
    - - @member ejs.QueryFacet - @param {String} m The mode: collector or post. - @returns {Object} returns this so that calls can be chained. - */ - mode: function (m) { - if (m == null) { - return facet[name].mode; - } - - m = m.toLowerCase(); - if (m === 'collector' || m === 'post') { - facet[name].mode = m; - } - - return this; - }, - - /** -

    Computes values across the the specified scope

    - - @deprecated since elasticsearch 0.90 - @member ejs.QueryFacet - @param {String} scope The scope name to calculate facet counts with. - @returns {Object} returns this so that calls can be chained. - */ - scope: function (scope) { - return this; - }, - - /** -

    Enables caching of the facetFilter

    - - @member ejs.QueryFacet - @param {Boolean} trueFalse If the facetFilter should be cached or not - @returns {Object} returns this so that calls can be chained. - */ - cacheFilter: function (trueFalse) { - if (trueFalse == null) { - return facet[name].cache_filter; - } - - facet[name].cache_filter = trueFalse; - return this; - }, - - /** -

    Sets the path to the nested document if faceting against a - nested field.

    - - @member ejs.QueryFacet - @param {String} path The nested path - @returns {Object} returns this so that calls can be chained. - */ - nested: function (path) { - if (path == null) { - return facet[name].nested; - } - - facet[name].nested = path; - return this; - }, - - /** -

    Allows you to serialize this object into a JSON encoded string.

    - - @member ejs.QueryFacet - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(facet); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.QueryFacet - @returns {String} the type of object - */ - _type: function () { - return 'facet'; - }, - - /** -

    Retrieves the internal facet object. This is typically used by - internal API functions so use with caution.

    - - @member ejs.QueryFacet - @returns {String} returns this object's internal facet property. - */ - _self: function () { - return facet; - } - }; - }; - - /** - @class -

    A RangeFacet allows you to specify a set of ranges and get both the number of docs (count) that - fall within each range, and aggregated data based on the field, or another specified field.

    - -

    Facets are similar to SQL GROUP BY statements but perform much - better. You can also construct several "groups" at once by simply - specifying multiple facets.

    - -
    -

    - Tip: - For more information on faceted navigation, see - this - Wikipedia article on Faceted Classification. -

    -
    - - @name ejs.RangeFacet - - @desc -

    A facet which provides information over a range of numeric intervals.

    - - @param {String} name The name which be used to refer to this facet. For instance, - the facet itself might utilize a field named doc_authors. Setting - name to Authors would allow you to refer to the - facet by that name, possibly simplifying some of the display logic. - - */ - ejs.RangeFacet = function (name) { - - /** - The internal facet object. - @member ejs.RangeFacet - @property {Object} facet - */ - var facet = {}; - - facet[name] = { - range: { - ranges: [] - } - }; - - return { - - /** - Sets the document field to be used for the facet. - - @member ejs.RangeFacet - @param {String} fieldName The field name whose data will be used to compute the interval. - @returns {Object} returns this so that calls can be chained. - */ - field: function (fieldName) { - if (fieldName == null) { - return facet[name].range.field; - } - - facet[name].range.field = fieldName; - return this; - }, - - /** - Allows you to specify an alternate key field to be used to compute the interval. - - @member ejs.RangeFacet - @param {String} fieldName The field name whose data will be used to compute the interval. - @returns {Object} returns this so that calls can be chained. - */ - keyField: function (fieldName) { - if (fieldName == null) { - return facet[name].range.key_field; - } - - facet[name].range.key_field = fieldName; - return this; - }, - - /** - Allows you to specify an alternate value field to be used to compute statistical information. - - @member ejs.RangeFacet - @param {String} fieldName The field name whose data will be used to compute statistics. - @returns {Object} returns this so that calls can be chained. - */ - valueField: function (fieldName) { - if (fieldName == null) { - return facet[name].range.value_field; - } - - facet[name].range.value_field = fieldName; - return this; - }, - - /** - Allows you modify the value field using a script. The modified value - is then used to compute the statistical data. - - @member ejs.RangeFacet - @param {String} scriptCode A valid script string to execute. - @returns {Object} returns this so that calls can be chained. - */ - valueScript: function (scriptCode) { - if (scriptCode == null) { - return facet[name].range.value_script; - } - - facet[name].range.value_script = scriptCode; - return this; - }, - - /** - Allows you modify the key field using a script. The modified value - is then used to generate the interval. - - @member ejs.RangeFacet - @param {String} scriptCode A valid script string to execute. - @returns {Object} returns this so that calls can be chained. - */ - keyScript: function (scriptCode) { - if (scriptCode == null) { - return facet[name].range.key_script; - } - - facet[name].range.key_script = scriptCode; - return this; - }, - - /** - The script language being used. Currently supported values are - javascript, groovy, and mvel. - - @member ejs.RangeFacet - @param {String} language The language of the script. - @returns {Object} returns this so that calls can be chained. - */ - lang: function (language) { - if (language == null) { - return facet[name].range.lang; - } - - facet[name].range.lang = language; - return this; - }, - - /** - Sets parameters that will be applied to the script. Overwrites - any existing params. - - @member ejs.RangeFacet - @param {Object} p An object where the keys are the parameter name and - values are the parameter value. - @returns {Object} returns this so that calls can be chained. - */ - params: function (p) { - if (p == null) { - return facet[name].range.params; - } - - facet[name].range.params = p; - return this; - }, - - /** - Adds a new bounded range. - - @member ejs.RangeFacet - @param {Number} from The lower bound of the range (can also be Date). - @param {Number} to The upper bound of the range (can also be Date). - @returns {Object} returns this so that calls can be chained. - */ - addRange: function (from, to) { - if (arguments.length === 0) { - return facet[name].range.ranges; - } - - facet[name].range.ranges.push({ - from: from, - to: to - }); - - return this; - }, - - /** - Adds a new unbounded lower limit. - - @member ejs.RangeFacet - @param {Number} from The lower limit of the unbounded range (can also be Date). - @returns {Object} returns this so that calls can be chained. - */ - addUnboundedFrom: function (from) { - if (from == null) { - return facet[name].range.ranges; - } - - facet[name].range.ranges.push({ - from: from - }); - - return this; - }, - - /** - Adds a new unbounded upper limit. - - @member ejs.RangeFacet - @param {Number} to The upper limit of the unbounded range (can also be Date). - @returns {Object} returns this so that calls can be chained. - */ - addUnboundedTo: function (to) { - if (to == null) { - return facet[name].range.ranges; - } - - facet[name].range.ranges.push({ - to: to - }); - - return this; - }, - - /** -

    Allows you to reduce the documents used for computing facet results.

    - - @member ejs.RangeFacet - @param {Object} oFilter A valid Filter object. - @returns {Object} returns this so that calls can be chained. - */ - facetFilter: function (oFilter) { - if (oFilter == null) { - return facet[name].facet_filter; - } - - if (!isFilter(oFilter)) { - throw new TypeError('Argument must be a Filter'); - } - - facet[name].facet_filter = oFilter._self(); - return this; - }, - - /** -

    Computes values across the entire index

    - - @member ejs.RangeFacet - @param {Boolean} trueFalse Calculate facet counts globally or not. - @returns {Object} returns this so that calls can be chained. - */ - global: function (trueFalse) { - if (trueFalse == null) { - return facet[name].global; - } - - facet[name].global = trueFalse; - return this; - }, - - /** -

    Sets the mode the facet will use.

    - -

    -
    collector
    -
    post
    -
    - - @member ejs.RangeFacet - @param {String} m The mode: collector or post. - @returns {Object} returns this so that calls can be chained. - */ - mode: function (m) { - if (m == null) { - return facet[name].mode; - } - - m = m.toLowerCase(); - if (m === 'collector' || m === 'post') { - facet[name].mode = m; - } - - return this; - }, - - /** -

    Computes values across the the specified scope

    - - @deprecated since elasticsearch 0.90 - @member ejs.RangeFacet - @param {String} scope The scope name to calculate facet counts with. - @returns {Object} returns this so that calls can be chained. - */ - scope: function (scope) { - return this; - }, - - /** -

    Enables caching of the facetFilter

    - - @member ejs.RangeFacet - @param {Boolean} trueFalse If the facetFilter should be cached or not - @returns {Object} returns this so that calls can be chained. - */ - cacheFilter: function (trueFalse) { - if (trueFalse == null) { - return facet[name].cache_filter; - } - - facet[name].cache_filter = trueFalse; - return this; - }, - - /** -

    Sets the path to the nested document if faceting against a - nested field.

    - - @member ejs.RangeFacet - @param {String} path The nested path - @returns {Object} returns this so that calls can be chained. - */ - nested: function (path) { - if (path == null) { - return facet[name].nested; - } - - facet[name].nested = path; - return this; - }, - - /** -

    Allows you to serialize this object into a JSON encoded string.

    - - @member ejs.RangeFacet - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(facet); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.RangeFacet - @returns {String} the type of object - */ - _type: function () { - return 'facet'; - }, - - /** -

    Retrieves the internal facet object. This is typically used by - internal API functions so use with caution.

    - - @member ejs.RangeFacet - @returns {String} returns this object's internal facet property. - */ - _self: function () { - return facet; - } - }; - }; - - /** - @class -

    A statistical facet allows you to compute statistical data over a numeric fields. Statistical data includes - the count, total, sum of squares, mean (average), minimum, maximum, variance, and standard deviation.

    - -

    Facets are similar to SQL GROUP BY statements but perform much - better. You can also construct several "groups" at once by simply - specifying multiple facets.

    - -
    -

    - Tip: - For more information on faceted navigation, see - this - Wikipedia article on Faceted Classification. -

    -
    - - @name ejs.StatisticalFacet - - @desc -

    A facet which returns statistical information about a numeric field

    - - @param {String} name The name which be used to refer to this facet. For instance, - the facet itself might utilize a field named doc_authors. Setting - name to Authors would allow you to refer to the - facet by that name, possibly simplifying some of the display logic. - - */ - ejs.StatisticalFacet = function (name) { - - /** - The internal facet object. - @member ejs.StatisticalFacet - @property {Object} facet - */ - var facet = {}; - - facet[name] = { - statistical: {} - }; - - return { - - /** - Sets the field to be used to construct the this facet. - - @member ejs.StatisticalFacet - @param {String} fieldName The field name whose data will be used to construct the facet. - @returns {Object} returns this so that calls can be chained. - */ - field: function (fieldName) { - if (fieldName == null) { - return facet[name].statistical.field; - } - - facet[name].statistical.field = fieldName; - return this; - }, - - /** - Aggregate statistical info across a set of fields. - - @member ejs.StatisticalFacet - @param {Array} aFieldName An array of field names. - @returns {Object} returns this so that calls can be chained. - */ - fields: function (fields) { - if (fields == null) { - return facet[name].statistical.fields; - } - - if (!isArray(fields)) { - throw new TypeError('Argument must be an array'); - } - - facet[name].statistical.fields = fields; - return this; - }, - - /** - Define a script to evaluate of which the result will be used to generate - the statistical information. - - @member ejs.StatisticalFacet - @param {String} code The script code to execute. - @returns {Object} returns this so that calls can be chained. - */ - script: function (code) { - if (code == null) { - return facet[name].statistical.script; - } - - facet[name].statistical.script = code; - return this; - }, - - /** - The script language being used. Currently supported values are - javascript, groovy, and mvel. - - @member ejs.StatisticalFacet - @param {String} language The language of the script. - @returns {Object} returns this so that calls can be chained. - */ - lang: function (language) { - if (language == null) { - return facet[name].statistical.lang; - } - - facet[name].statistical.lang = language; - return this; - }, - - /** - Allows you to set script parameters to be used during the execution of the script. - - @member ejs.StatisticalFacet - @param {Object} oParams An object containing key/value pairs representing param name/value. - @returns {Object} returns this so that calls can be chained. - */ - params: function (oParams) { - if (oParams == null) { - return facet[name].statistical.params; - } - - facet[name].statistical.params = oParams; - return this; - }, - - /** -

    Allows you to reduce the documents used for computing facet results.

    - - @member ejs.StatisticalFacet - @param {Object} oFilter A valid Filter object. - @returns {Object} returns this so that calls can be chained. - */ - facetFilter: function (oFilter) { - if (oFilter == null) { - return facet[name].facet_filter; - } - - if (!isFilter(oFilter)) { - throw new TypeError('Argument must be a Filter'); - } - - facet[name].facet_filter = oFilter._self(); - return this; - }, - - /** -

    Computes values across the entire index

    - - @member ejs.StatisticalFacet - @param {Boolean} trueFalse Calculate facet counts globally or not. - @returns {Object} returns this so that calls can be chained. - */ - global: function (trueFalse) { - if (trueFalse == null) { - return facet[name].global; - } - - facet[name].global = trueFalse; - return this; - }, - - /** -

    Sets the mode the facet will use.

    - -

    -
    collector
    -
    post
    -
    - - @member ejs.StatisticalFacet - @param {String} m The mode: collector or post. - @returns {Object} returns this so that calls can be chained. - */ - mode: function (m) { - if (m == null) { - return facet[name].mode; - } - - m = m.toLowerCase(); - if (m === 'collector' || m === 'post') { - facet[name].mode = m; - } - - return this; - }, - - /** -

    Computes values across the the specified scope

    - - @deprecated since elasticsearch 0.90 - @member ejs.StatisticalFacet - @param {String} scope The scope name to calculate facet counts with. - @returns {Object} returns this so that calls can be chained. - */ - scope: function (scope) { - return this; - }, - - /** -

    Enables caching of the facetFilter

    - - @member ejs.StatisticalFacet - @param {Boolean} trueFalse If the facetFilter should be cached or not - @returns {Object} returns this so that calls can be chained. - */ - cacheFilter: function (trueFalse) { - if (trueFalse == null) { - return facet[name].cache_filter; - } - - facet[name].cache_filter = trueFalse; - return this; - }, - - /** -

    Sets the path to the nested document if faceting against a - nested field.

    - - @member ejs.StatisticalFacet - @param {String} path The nested path - @returns {Object} returns this so that calls can be chained. - */ - nested: function (path) { - if (path == null) { - return facet[name].nested; - } - - facet[name].nested = path; - return this; - }, - - /** -

    Allows you to serialize this object into a JSON encoded string.

    - - @member ejs.StatisticalFacet - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(facet); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.StatisticalFacet - @returns {String} the type of object - */ - _type: function () { - return 'facet'; - }, - - /** -

    Retrieves the internal facet object. This is typically used by - internal API functions so use with caution.

    - - @member ejs.StatisticalFacet - @returns {String} returns this object's internal facet property. - */ - _self: function () { - return facet; - } - }; - }; - - /** - @class -

    A termsStatsFacet allows you to compute statistics over an aggregate key (term). Essentially this - facet provides the functionality of what is often refered to as a pivot table.

    - -

    Facets are similar to SQL GROUP BY statements but perform much - better. You can also construct several "groups" at once by simply - specifying multiple facets.

    - -
    -

    - Tip: - For more information on faceted navigation, see - this - Wikipedia article on Faceted Classification. -

    -
    - - @name ejs.TermStatsFacet - - @desc -

    A facet which computes statistical data based on an aggregate key.

    - - @param {String} name The name which be used to refer to this facet. For instance, - the facet itself might utilize a field named doc_authors. Setting - name to Authors would allow you to refer to the - facet by that name, possibly simplifying some of the display logic. - - */ - ejs.TermStatsFacet = function (name) { - - /** - The internal facet object. - @member ejs.TermStatsFacet - @property {Object} facet - */ - var facet = {}; - - facet[name] = { - terms_stats: {} - }; - - return { - - /** - Sets the field for which statistical information will be generated. - - @member ejs.TermStatsFacet - @param {String} fieldName The field name whose data will be used to construct the facet. - @returns {Object} returns this so that calls can be chained. - */ - valueField: function (fieldName) { - if (fieldName == null) { - return facet[name].terms_stats.value_field; - } - - facet[name].terms_stats.value_field = fieldName; - return this; - }, - - /** - Sets the field which will be used to pivot on (group-by). - - @member ejs.TermStatsFacet - @param {String} fieldName The field name whose data will be used to construct the facet. - @returns {Object} returns this so that calls can be chained. - */ - keyField: function (fieldName) { - if (fieldName == null) { - return facet[name].terms_stats.key_field; - } - - facet[name].terms_stats.key_field = fieldName; - return this; - }, - - /** - Sets a script that will provide the terms for a given document. - - @member ejs.TermStatsFacet - @param {String} script The script code. - @returns {Object} returns this so that calls can be chained. - */ - scriptField: function (script) { - if (script == null) { - return facet[name].terms_stats.script_field; - } - - facet[name].terms_stats.script_field = script; - return this; - }, - - /** - Define a script to evaluate of which the result will be used to generate - the statistical information. - - @member ejs.TermStatsFacet - @param {String} code The script code to execute. - @returns {Object} returns this so that calls can be chained. - */ - valueScript: function (code) { - if (code == null) { - return facet[name].terms_stats.value_script; - } - - facet[name].terms_stats.value_script = code; - return this; - }, - - /** -

    Allows you to return all terms, even if the frequency count is 0. This should not be - used on fields that contain a large number of unique terms because it could cause - out-of-memory errors.

    - - @member ejs.TermStatsFacet - @param {String} trueFalse true or false - @returns {Object} returns this so that calls can be chained. - */ - allTerms: function (trueFalse) { - if (trueFalse == null) { - return facet[name].terms_stats.all_terms; - } - - facet[name].terms_stats.all_terms = trueFalse; - return this; - }, - - /** - The script language being used. Currently supported values are - javascript, groovy, and mvel. - - @member ejs.TermStatsFacet - @param {String} language The language of the script. - @returns {Object} returns this so that calls can be chained. - */ - lang: function (language) { - if (language == null) { - return facet[name].terms_stats.lang; - } - - facet[name].terms_stats.lang = language; - return this; - }, - - /** - Allows you to set script parameters to be used during the execution of the script. - - @member ejs.TermStatsFacet - @param {Object} oParams An object containing key/value pairs representing param name/value. - @returns {Object} returns this so that calls can be chained. - */ - params: function (oParams) { - if (oParams == null) { - return facet[name].terms_stats.params; - } - - facet[name].terms_stats.params = oParams; - return this; - }, - - /** - Sets the number of facet entries that will be returned for this facet. For instance, you - might ask for only the top 5 aggregate keys although there might be hundreds of - unique keys. Higher settings could cause memory strain. - - @member ejs.TermStatsFacet - @param {Integer} facetSize The numer of facet entries to be returned. - @returns {Object} returns this so that calls can be chained. - */ - size: function (facetSize) { - if (facetSize == null) { - return facet[name].terms_stats.size; - } - - facet[name].terms_stats.size = facetSize; - return this; - }, - - /** - Sets the type of ordering that will be performed on the date - buckets. Valid values are: - - count - default, sort by the number of items in the bucket - term - sort by term value. - reverse_count - reverse sort of the number of items in the bucket - reverse_term - reverse sort of the term value. - total - sorts by the total value of the bucket contents - reverse_total - reverse sort of the total value of bucket contents - min - the minimum value in the bucket - reverse_min - the reverse sort of the minimum value - max - the maximum value in the bucket - reverse_max - the reverse sort of the maximum value - mean - the mean value of the bucket contents - reverse_mean - the reverse sort of the mean value of bucket contents. - - @member ejs.TermStatsFacet - @param {String} o The ordering method - @returns {Object} returns this so that calls can be chained. - */ - order: function (o) { - if (o == null) { - return facet[name].terms_stats.order; - } - - o = o.toLowerCase(); - if (o === 'count' || o === 'term' || o === 'reverse_count' || - o === 'reverse_term' || o === 'total' || o === 'reverse_total' || - o === 'min' || o === 'reverse_min' || o === 'max' || - o === 'reverse_max' || o === 'mean' || o === 'reverse_mean') { - - facet[name].terms_stats.order = o; - } - - return this; - }, - - /** -

    Allows you to reduce the documents used for computing facet results.

    - - @member ejs.TermStatsFacet - @param {Object} oFilter A valid Filter object. - @returns {Object} returns this so that calls can be chained. - */ - facetFilter: function (oFilter) { - if (oFilter == null) { - return facet[name].facet_filter; - } - - if (!isFilter(oFilter)) { - throw new TypeError('Argument must be a Filter'); - } - - facet[name].facet_filter = oFilter._self(); - return this; - }, - - /** -

    Computes values across the entire index

    - - @member ejs.TermStatsFacet - @param {Boolean} trueFalse Calculate facet counts globally or not. - @returns {Object} returns this so that calls can be chained. - */ - global: function (trueFalse) { - if (trueFalse == null) { - return facet[name].global; - } - - facet[name].global = trueFalse; - return this; - }, - - /** -

    Sets the mode the facet will use.

    - -

    -
    collector
    -
    post
    -
    - - @member ejs.TermStatsFacet - @param {String} m The mode: collector or post. - @returns {Object} returns this so that calls can be chained. - */ - mode: function (m) { - if (m == null) { - return facet[name].mode; - } - - m = m.toLowerCase(); - if (m === 'collector' || m === 'post') { - facet[name].mode = m; - } - - return this; - }, - - /** -

    Computes values across the the specified scope

    - - @deprecated since elasticsearch 0.90 - @member ejs.TermStatsFacet - @param {String} scope The scope name to calculate facet counts with. - @returns {Object} returns this so that calls can be chained. - */ - scope: function (scope) { - return this; - }, - - /** -

    Enables caching of the facetFilter

    - - @member ejs.TermStatsFacet - @param {Boolean} trueFalse If the facetFilter should be cached or not - @returns {Object} returns this so that calls can be chained. - */ - cacheFilter: function (trueFalse) { - if (trueFalse == null) { - return facet[name].cache_filter; - } - - facet[name].cache_filter = trueFalse; - return this; - }, - - /** -

    Sets the path to the nested document if faceting against a - nested field.

    - - @member ejs.TermStatsFacet - @param {String} path The nested path - @returns {Object} returns this so that calls can be chained. - */ - nested: function (path) { - if (path == null) { - return facet[name].nested; - } - - facet[name].nested = path; - return this; - }, - - /** -

    Allows you to serialize this object into a JSON encoded string.

    - - @member ejs.TermStatsFacet - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(facet); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.TermStatsFacet - @returns {String} the type of object - */ - _type: function () { - return 'facet'; - }, - - /** -

    Retrieves the internal facet object. This is typically used by - internal API functions so use with caution.

    - - @member ejs.TermStatsFacet - @returns {String} returns this object's internal facet property. - */ - _self: function () { - return facet; - } - }; - }; - - /** - @class -

    A facet which returns the N most frequent terms within a collection - or set of collections. Term facets are useful for building constructs - which allow users to refine search results by filtering on terms returned - by the facet.

    - -

    Facets are similar to SQL GROUP BY statements but perform much - better. You can also construct several "groups" at once by simply - specifying multiple facets.

    - -

    For more information on faceted navigation, see this Wikipedia article on - Faceted ClassificationA facet which returns the N most frequent terms within a collection - or set of collections.

    - - @param {String} name The name which be used to refer to this facet. For instance, - the facet itself might utilize a field named doc_authors. Setting - name to Authors would allow you to refer to the - facet by that name, possibly simplifying some of the display logic. - - */ - ejs.TermsFacet = function (name) { - - /** - The internal facet object. - @member ejs.TermsFacet - @property {Object} facet - */ - var facet = {}; - - facet[name] = { - terms: {} - }; - - return { - - /** - Sets the field to be used to construct the this facet. Set to - _index to return a facet count of hits per _index the search was - executed on. - - @member ejs.TermsFacet - @param {String} fieldName The field name whose data will be used to construct the facet. - @returns {Object} returns this so that calls can be chained. - */ - field: function (fieldName) { - if (fieldName == null) { - return facet[name].terms.field; - } - - facet[name].terms.field = fieldName; - return this; - }, - - /** - Aggregate statistical info across a set of fields. - - @member ejs.TermsFacet - @param {Array} aFieldName An array of field names. - @returns {Object} returns this so that calls can be chained. - */ - fields: function (fields) { - if (fields == null) { - return facet[name].terms.fields; - } - - if (!isArray(fields)) { - throw new TypeError('Argument must be an array'); - } - - facet[name].terms.fields = fields; - return this; - }, - - /** - Sets a script that will provide the terms for a given document. - - @member ejs.TermsFacet - @param {String} script The script code. - @returns {Object} returns this so that calls can be chained. - */ - scriptField: function (script) { - if (script == null) { - return facet[name].terms.script_field; - } - - facet[name].terms.script_field = script; - return this; - }, - - /** - Sets the number of facet entries that will be returned for this facet. For instance, you - might ask for only the top 5 authors although there might be hundreds of - unique authors. - - @member ejs.TermsFacet - @param {Integer} facetSize The numer of facet entries to be returned. - @returns {Object} returns this so that calls can be chained. - */ - size: function (facetSize) { - if (facetSize == null) { - return facet[name].terms.size; - } - - facet[name].terms.size = facetSize; - return this; - }, - - /** - Sets the type of ordering that will be performed on the date - buckets. Valid values are: - - count - default, sort by the number of items in the bucket - term - sort by term value. - reverse_count - reverse sort of the number of items in the bucket - reverse_term - reverse sort of the term value. - - @member ejs.TermsFacet - @param {String} o The ordering method - @returns {Object} returns this so that calls can be chained. - */ - order: function (o) { - if (o == null) { - return facet[name].terms.order; - } - - o = o.toLowerCase(); - if (o === 'count' || o === 'term' || - o === 'reverse_count' || o === 'reverse_term') { - - facet[name].terms.order = o; - } - - return this; - }, - - /** -

    Allows you to return all terms, even if the frequency count is 0. This should not be - used on fields that contain a large number of unique terms because it could cause - out-of-memory errors.

    - - @member ejs.TermsFacet - @param {String} trueFalse true or false - @returns {Object} returns this so that calls can be chained. - */ - allTerms: function (trueFalse) { - if (trueFalse == null) { - return facet[name].terms.all_terms; - } - - facet[name].terms.all_terms = trueFalse; - return this; - }, - - /** -

    Allows you to filter out unwanted facet entries. When passed - a single term, it is appended to the list of currently excluded - terms. If passed an array, it overwrites all existing values.

    - - @member ejs.TermsFacet - @param {String || Array} exclude A single term to exclude or an - array of terms to exclude. - @returns {Object} returns this so that calls can be chained. - */ - exclude: function (exclude) { - if (facet[name].terms.exclude == null) { - facet[name].terms.exclude = []; - } - - if (exclude == null) { - return facet[name].terms.exclude; - } - - if (isString(exclude)) { - facet[name].terms.exclude.push(exclude); - } else if (isArray(exclude)) { - facet[name].terms.exclude = exclude; - } else { - throw new TypeError('Argument must be string or array'); - } - - return this; - }, - - /** -

    Allows you to only include facet entries matching a specified regular expression.

    - - @member ejs.TermsFacet - @param {String} exp A valid regular expression. - @returns {Object} returns this so that calls can be chained. - */ - regex: function (exp) { - if (exp == null) { - return facet[name].terms.regex; - } - - facet[name].terms.regex = exp; - return this; - }, - - /** -

    Allows you to set the regular expression flags to be used - with the regex

    - - @member ejs.TermsFacet - @param {String} flags A valid regex flag - see Java Pattern API - @returns {Object} returns this so that calls can be chained. - */ - regexFlags: function (flags) { - if (flags == null) { - return facet[name].terms.regex_flags; - } - - facet[name].terms.regex_flags = flags; - return this; - }, - - /** - Allows you modify the term using a script. The modified value - is then used in the facet collection. - - @member ejs.TermsFacet - @param {String} scriptCode A valid script string to execute. - @returns {Object} returns this so that calls can be chained. - */ - script: function (scriptCode) { - if (scriptCode == null) { - return facet[name].terms.script; - } - - facet[name].terms.script = scriptCode; - return this; - }, - - /** - The script language being used. Currently supported values are - javascript, groovy, and mvel. - - @member ejs.TermsFacet - @param {String} language The language of the script. - @returns {Object} returns this so that calls can be chained. - */ - lang: function (language) { - if (language == null) { - return facet[name].terms.lang; - } - - facet[name].terms.lang = language; - return this; - }, - - /** - Sets parameters that will be applied to the script. Overwrites - any existing params. - - @member ejs.TermsFacet - @param {Object} p An object where the keys are the parameter name and - values are the parameter value. - @returns {Object} returns this so that calls can be chained. - */ - params: function (p) { - if (p == null) { - return facet[name].terms.params; - } - - facet[name].terms.params = p; - return this; - }, - - /** - Sets the execution hint determines how the facet is computed. - Currently only supported value is "map". - - @member ejs.TermsFacet - @param {Object} h The hint value as a string. - @returns {Object} returns this so that calls can be chained. - */ - executionHint: function (h) { - if (h == null) { - return facet[name].terms.execution_hint; - } - - facet[name].terms.execution_hint = h; - return this; - }, - - /** -

    Allows you to reduce the documents used for computing facet results.

    - - @member ejs.TermsFacet - @param {Object} oFilter A valid Filter object. - @returns {Object} returns this so that calls can be chained. - */ - facetFilter: function (oFilter) { - if (oFilter == null) { - return facet[name].facet_filter; - } - - if (!isFilter(oFilter)) { - throw new TypeError('Argument must be a Filter'); - } - - facet[name].facet_filter = oFilter._self(); - return this; - }, - - /** -

    Computes values across the entire index

    - - @member ejs.TermsFacet - @param {Boolean} trueFalse Calculate facet counts globally or not. - @returns {Object} returns this so that calls can be chained. - */ - global: function (trueFalse) { - if (trueFalse == null) { - return facet[name].global; - } - - facet[name].global = trueFalse; - return this; - }, - - /** -

    Sets the mode the facet will use.

    - -

    -
    collector
    -
    post
    -
    - - @member ejs.TermsFacet - @param {String} m The mode: collector or post. - @returns {Object} returns this so that calls can be chained. - */ - mode: function (m) { - if (m == null) { - return facet[name].mode; - } - - m = m.toLowerCase(); - if (m === 'collector' || m === 'post') { - facet[name].mode = m; - } - - return this; - }, - - /** -

    Computes values across the the specified scope

    - - @deprecated since elasticsearch 0.90 - @member ejs.TermsFacet - @param {String} scope The scope name to calculate facet counts with. - @returns {Object} returns this so that calls can be chained. - */ - scope: function (scope) { - return this; - }, - - /** -

    Enables caching of the facetFilter

    - - @member ejs.TermsFacet - @param {Boolean} trueFalse If the facetFilter should be cached or not - @returns {Object} returns this so that calls can be chained. - */ - cacheFilter: function (trueFalse) { - if (trueFalse == null) { - return facet[name].cache_filter; - } - - facet[name].cache_filter = trueFalse; - return this; - }, - - /** -

    Sets the path to the nested document if faceting against a - nested field.

    - - @member ejs.TermsFacet - @param {String} path The nested path - @returns {Object} returns this so that calls can be chained. - */ - nested: function (path) { - if (path == null) { - return facet[name].nested; - } - - facet[name].nested = path; - return this; - }, - - /** -

    Allows you to serialize this object into a JSON encoded string.

    - - @member ejs.TermsFacet - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(facet); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.TermsFacet - @returns {String} the type of object - */ - _type: function () { - return 'facet'; - }, - - /** -

    Retrieves the internal facet property. This is typically used by - internal API functions so use with caution.

    - - @member ejs.TermsFacet - @returns {String} returns this object's internal facet property. - */ - _self: function () { - return facet; - } - }; - }; - - /** - @class - A container Filter that allows Boolean AND composition of Filters. - - @name ejs.AndFilter - - @desc - A container Filter that allows Boolean AND composition of Filters. - - @param {Filter || Array} f A single Filter object or an array of valid - Filter objects. - */ - ejs.AndFilter = function (f) { - - /** - The internal filter object. Use _self() - - @member ejs.AndFilter - @property {Object} filter - */ - var i, - len, - filter = { - and: { - filters: [] - } - }; - - if (isFilter(f)) { - filter.and.filters.push(f._self()); - } else if (isArray(f)) { - for (i = 0, len = f.length; i < len; i++) { - if (!isFilter(f[i])) { - throw new TypeError('Array must contain only Filter objects'); - } - - filter.and.filters.push(f[i]._self()); - } - } else { - throw new TypeError('Argument must be a Filter or Array of Filters'); - } - - return { - - /** - Sets the filters for the filter. If fltr is a single - Filter, it is added to the current filters. If fltr is an array - of Filters, then they replace all existing filters. - - @member ejs.AndFilter - @param {Filter || Array} fltr A valid filter object or an array of filters. - @returns {Object} returns this so that calls can be chained. - */ - filters: function (fltr) { - var i, - len; - - if (fltr == null) { - return filter.and.filters; - } - - if (isFilter(fltr)) { - filter.and.filters.push(fltr._self()); - } else if (isArray(fltr)) { - filter.and.filters = []; - for (i = 0, len = fltr.length; i < len; i++) { - if (!isFilter(fltr[i])) { - throw new TypeError('Array must contain only Filter objects'); - } - - filter.and.filters.push(fltr[i]._self()); - } - } else { - throw new TypeError('Argument must be a Filter or an Array of Filters'); - } - - return this; - }, - - /** - Sets the filter name. - - @member ejs.AndFilter - @param {String} name A name for the filter. - @returns {Object} returns this so that calls can be chained. - */ - name: function (name) { - if (name == null) { - return filter.and._name; - } - - filter.and._name = name; - return this; - }, - - /** - Enable or disable caching of the filter - - @member ejs.AndFilter - @param {Boolean} trueFalse True to cache the filter, false otherwise. - @returns {Object} returns this so that calls can be chained. - */ - cache: function (trueFalse) { - if (trueFalse == null) { - return filter.and._cache; - } - - filter.and._cache = trueFalse; - return this; - }, - - /** - Sets the cache key. - - @member ejs.AndFilter - @param {String} key the cache key as a string. - @returns {Object} returns this so that calls can be chained. - */ - cacheKey: function (key) { - if (key == null) { - return filter.and._cache_key; - } - - filter.and._cache_key = key; - return this; - }, - - /** - Returns the filter container as a JSON string - - @member ejs.AndFilter - @returns {String} JSON representation of the andFilter object - */ - toString: function () { - return JSON.stringify(filter); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.AndFilter - @returns {String} the type of object - */ - _type: function () { - return 'filter'; - }, - - /** - Returns the filter object. - - @member ejs.AndFilter - @returns {Object} filter object - */ - _self: function () { - return filter; - } - }; - }; - - /** - @class -

    A BoolFilter allows you to build Boolean filter constructs - from individual filters. Similar in concept to Boolean query, except that - the clauses are other filters. Can be placed within queries that accept a - filter. - - @name ejs.BoolFilter - - @desc - A Filter that matches documents matching boolean combinations of other - filters. - - */ - ejs.BoolFilter = function () { - - /** - The internal filter object. Use _self() - @member ejs.BoolFilter - @property {Object} filter - */ - var filter = { - bool: {} - }; - - return { - - /** - Adds filter to boolean container. Given filter "must" appear in - matching documents. If passed a single Filter it is added to the - list of existing filters. If passed an array of Filters, they - replace all existing filters. - - @member ejs.BoolFilter - @param {Filter || Array} oFilter A valid Filter or array of - Filter objects. - @returns {Object} returns this so that calls can be chained. - */ - must: function (oFilter) { - var i, len; - - if (filter.bool.must == null) { - filter.bool.must = []; - } - - if (oFilter == null) { - return filter.bool.must; - } - - if (isFilter(oFilter)) { - filter.bool.must.push(oFilter._self()); - } else if (isArray(oFilter)) { - filter.bool.must = []; - for (i = 0, len = oFilter.length; i < len; i++) { - if (!isFilter(oFilter[i])) { - throw new TypeError('Argument must be an array of Filters'); - } - - filter.bool.must.push(oFilter[i]._self()); - } - } else { - throw new TypeError('Argument must be a Filter or array of Filters'); - } - - return this; - }, - - /** - Adds filter to boolean container. Given filter "must not" appear - in matching documents. If passed a single Filter it is added to - the list of existing filters. If passed an array of Filters, - they replace all existing filters. - - @member ejs.BoolFilter - @param {Filter || Array} oFilter A valid Filter or array of - Filter objects. - @returns {Object} returns this so that calls can be chained. - */ - mustNot: function (oFilter) { - var i, len; - - if (filter.bool.must_not == null) { - filter.bool.must_not = []; - } - - if (oFilter == null) { - return filter.bool.must_not; - } - - if (isFilter(oFilter)) { - filter.bool.must_not.push(oFilter._self()); - } else if (isArray(oFilter)) { - filter.bool.must_not = []; - for (i = 0, len = oFilter.length; i < len; i++) { - if (!isFilter(oFilter[i])) { - throw new TypeError('Argument must be an array of Filters'); - } - - filter.bool.must_not.push(oFilter[i]._self()); - } - } else { - throw new TypeError('Argument must be a Filter or array of Filters'); - } - - return this; - }, - - /** - Adds filter to boolean container. Given filter "should" appear in - matching documents. If passed a single Filter it is added to - the list of existing filters. If passed an array of Filters, - they replace all existing filters. - - @member ejs.BoolFilter - @param {Filter || Array} oFilter A valid Filter or array of - Filter objects. - @returns {Object} returns this so that calls can be chained. - */ - should: function (oFilter) { - var i, len; - - if (filter.bool.should == null) { - filter.bool.should = []; - } - - if (oFilter == null) { - return filter.bool.should; - } - - if (isFilter(oFilter)) { - filter.bool.should.push(oFilter._self()); - } else if (isArray(oFilter)) { - filter.bool.should = []; - for (i = 0, len = oFilter.length; i < len; i++) { - if (!isFilter(oFilter[i])) { - throw new TypeError('Argument must be an array of Filters'); - } - - filter.bool.should.push(oFilter[i]._self()); - } - } else { - throw new TypeError('Argument must be a Filter or array of Filters'); - } - - return this; - }, - - /** - Sets the filter name. - - @member ejs.BoolFilter - @param {String} name A name for the filter. - @returns {Object} returns this so that calls can be chained. - */ - name: function (name) { - if (name == null) { - return filter.bool._name; - } - - filter.bool._name = name; - return this; - }, - - /** - Enable or disable caching of the filter - - @member ejs.BoolFilter - @param {Boolean} trueFalse True to cache the filter, false otherwise. - @returns {Object} returns this so that calls can be chained. - */ - cache: function (trueFalse) { - if (trueFalse == null) { - return filter.bool._cache; - } - - filter.bool._cache = trueFalse; - return this; - }, - - /** - Sets the cache key. - - @member ejs.BoolFilter - @param {String} key the cache key as a string. - @returns {Object} returns this so that calls can be chained. - */ - cacheKey: function (key) { - if (key == null) { - return filter.bool._cache_key; - } - - filter.bool._cache_key = key; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.BoolFilter - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(filter); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.BoolFilter - @returns {String} the type of object - */ - _type: function () { - return 'filter'; - }, - - /** - Retrieves the internal filter object. This is typically used by - internal API functions so use with caution. - - @member ejs.BoolFilter - @returns {String} returns this object's internal filter property. - */ - _self: function () { - return filter; - } - }; - }; - - /** - @class -

    An existsFilter matches documents where the specified field is present - and the field contains a legitimate value.

    - - @name ejs.ExistsFilter - - @desc - Filters documents where a specified field exists and contains a value. - - @param {String} fieldName the field name that must exists and contain a value. - */ - ejs.ExistsFilter = function (fieldName) { - - /** - The internal filter object. Use get() - - @member ejs.ExistsFilter - @property {Object} filter - */ - var filter = { - exists: { - field: fieldName - } - }; - - return { - - /** - Sets the field to check for missing values. - - @member ejs.ExistsFilter - @param {String} name A name of the field. - @returns {Object} returns this so that calls can be chained. - */ - field: function (name) { - if (name == null) { - return filter.exists.field; - } - - filter.exists.field = name; - return this; - }, - - /** - Sets the filter name. - - @member ejs.ExistsFilter - @param {String} name A name for the filter. - @returns {Object} returns this so that calls can be chained. - */ - name: function (name) { - if (name == null) { - return filter.exists._name; - } - - filter.exists._name = name; - return this; - }, - - /** - Returns the filter container as a JSON string - - @member ejs.ExistsFilter - @returns {String} JSON representation of the existsFilter object - */ - toString: function () { - return JSON.stringify(filter); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.ExistsFilter - @returns {String} the type of object - */ - _type: function () { - return 'filter'; - }, - - /** - Returns the filter object. - - @member ejs.ExistsFilter - @returns {Object} filter object - */ - _self: function () { - return filter; - } - }; - }; - - /** - @class -

    A filter that restricts matched results/docs to a geographic bounding box described by - the specified lon and lat coordinates. The format conforms with the GeoJSON specification.

    - - @name ejs.GeoBboxFilter - - @desc - Filter results to those which are contained within the defined bounding box. - - @param {String} fieldName the document property/field containing the Geo Point (lon/lat). - - */ - ejs.GeoBboxFilter = function (fieldName) { - - /** - The internal filter object. Use _self() - - @member ejs.GeoBboxFilter - @property {Object} filter - */ - var filter = { - geo_bounding_box: {} - }; - - filter.geo_bounding_box[fieldName] = {}; - - return { - - /** - Sets the fields to filter against. - - @member ejs.GeoBboxFilter - @param {String} f A valid field name. - @returns {Object} returns this so that calls can be chained. - */ - field: function (f) { - var oldValue = filter.geo_bounding_box[fieldName]; - - if (f == null) { - return fieldName; - } - - delete filter.geo_bounding_box[fieldName]; - fieldName = f; - filter.geo_bounding_box[f] = oldValue; - - return this; - }, - - /** - Sets the top-left coordinate of the bounding box - - @member ejs.GeoBboxFilter - @param {GeoPoint} p A valid GeoPoint object - @returns {Object} returns this so that calls can be chained. - */ - topLeft: function (p) { - if (p == null) { - return filter.geo_bounding_box[fieldName].top_left; - } - - if (isGeoPoint(p)) { - filter.geo_bounding_box[fieldName].top_left = p._self(); - } else { - throw new TypeError('Argument must be a GeoPoint'); - } - - return this; - }, - - /** - Sets the bottom-right coordinate of the bounding box - - @member ejs.GeoBboxFilter - @param {GeoPoint} p A valid GeoPoint object - @returns {Object} returns this so that calls can be chained. - */ - bottomRight: function (p) { - if (p == null) { - return filter.geo_bounding_box[fieldName].bottom_right; - } - - if (isGeoPoint(p)) { - filter.geo_bounding_box[fieldName].bottom_right = p._self(); - } else { - throw new TypeError('Argument must be a GeoPoint'); - } - - return this; - }, - - /** - Sets the type of the bounding box execution. Valid values are - "memory" and "indexed". Default is memory. - - @member ejs.GeoBboxFilter - @param {String} type The execution type as a string. - @returns {Object} returns this so that calls can be chained. - */ - type: function (type) { - if (type == null) { - return filter.geo_bounding_box.type; - } - - type = type.toLowerCase(); - if (type === 'memory' || type === 'indexed') { - filter.geo_bounding_box.type = type; - } - - return this; - }, - - /** - If the lat/long points should be normalized to lie within their - respective normalized ranges. - - Normalized ranges are: - lon = -180 (exclusive) to 180 (inclusive) range - lat = -90 to 90 (both inclusive) range - - @member ejs.GeoBboxFilter - @param {String} trueFalse True if the coordinates should be normalized. False otherwise. - @returns {Object} returns this so that calls can be chained. - */ - normalize: function (trueFalse) { - if (trueFalse == null) { - return filter.geo_bounding_box.normalize; - } - - filter.geo_bounding_box.normalize = trueFalse; - return this; - }, - - /** - Sets the filter name. - - @member ejs.GeoBboxFilter - @param {String} name A name for the filter. - @returns {Object} returns this so that calls can be chained. - */ - name: function (name) { - if (name == null) { - return filter.geo_bounding_box._name; - } - - filter.geo_bounding_box._name = name; - return this; - }, - - /** - Enable or disable caching of the filter - - @member ejs.GeoBboxFilter - @param {Boolean} trueFalse True to cache the filter, false otherwise. - @returns {Object} returns this so that calls can be chained. - */ - cache: function (trueFalse) { - if (trueFalse == null) { - return filter.geo_bounding_box._cache; - } - - filter.geo_bounding_box._cache = trueFalse; - return this; - }, - - /** - Sets the cache key. - - @member ejs.GeoBboxFilter - @param {String} key the cache key as a string. - @returns {Object} returns this so that calls can be chained. - */ - cacheKey: function (key) { - if (key == null) { - return filter.geo_bounding_box._cache_key; - } - - filter.geo_bounding_box._cache_key = key; - return this; - }, - - /** - Returns the filter container as a JSON string - - @member ejs.GeoBboxFilter - @returns {String} JSON representation of the notFilter object - */ - toString: function () { - return JSON.stringify(filter); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.GeoBboxFilter - @returns {String} the type of object - */ - _type: function () { - return 'filter'; - }, - - /** - Returns the filter object. - - @member ejs.GeoBboxFilter - @returns {Object} filter object - */ - _self: function () { - return filter; - } - }; - }; - - /** - @class -

    A filter that restricts matched results/docs to a given distance from the - point of origin. The format conforms with the GeoJSON specification.

    - - @name ejs.GeoDistanceFilter - - @desc - Filter results to those which fall within the given distance of the point of origin. - - @param {String} fieldName the document property/field containing the Geo Point (lon/lat). - - */ - ejs.GeoDistanceFilter = function (fieldName) { - - /** - The internal filter object. Use _self() - - @member ejs.GeoDistanceFilter - @property {Object} filter - */ - var filter = { - geo_distance: { - } - }; - - filter.geo_distance[fieldName] = [0, 0]; - - return { - - /** - Sets the fields to filter against. - - @member ejs.GeoDistanceFilter - @param {String} f A valid field name. - @returns {Object} returns this so that calls can be chained. - */ - field: function (f) { - var oldValue = filter.geo_distance[fieldName]; - - if (f == null) { - return fieldName; - } - - delete filter.geo_distance[fieldName]; - fieldName = f; - filter.geo_distance[f] = oldValue; - - return this; - }, - - /** - Sets the numeric distance to be used. The distance can be a - numeric value, and then the unit (either mi or km can be set) - controlling the unit. Or a single string with the unit as well. - - @member ejs.GeoDistanceFilter - @param {Number} numericDistance the numeric distance - @returns {Object} returns this so that calls can be chained. - */ - distance: function (numericDistance) { - if (numericDistance == null) { - return filter.geo_distance.distance; - } - - if (!isNumber(numericDistance)) { - throw new TypeError('Argument must be a numeric value'); - } - - filter.geo_distance.distance = numericDistance; - return this; - }, - - /** - Sets the distance unit. Valid values are "mi" for miles or "km" - for kilometers. Defaults to "km". - - @member ejs.GeoDistanceFilter - @param {Number} unit the unit of distance measure. - @returns {Object} returns this so that calls can be chained. - */ - unit: function (unit) { - if (unit == null) { - return filter.geo_distance.unit; - } - - unit = unit.toLowerCase(); - if (unit === 'mi' || unit === 'km') { - filter.geo_distance.unit = unit; - } - - return this; - }, - - /** - Sets the point of origin in which distance will be measured from - - @member ejs.GeoDistanceFilter - @param {GeoPoint} p A valid GeoPoint object. - @returns {Object} returns this so that calls can be chained. - */ - point: function (p) { - if (p == null) { - return filter.geo_distance[fieldName]; - } - - if (isGeoPoint(p)) { - filter.geo_distance[fieldName] = p._self(); - } else { - throw new TypeError('Argument must be a GeoPoint'); - } - - return this; - }, - - - /** - How to compute the distance. Can either be arc (better precision) - or plane (faster). Defaults to arc. - - @member ejs.GeoDistanceFilter - @param {String} type The execution type as a string. - @returns {Object} returns this so that calls can be chained. - */ - distanceType: function (type) { - if (type == null) { - return filter.geo_distance.distance_type; - } - - type = type.toLowerCase(); - if (type === 'arc' || type === 'plane') { - filter.geo_distance.distance_type = type; - } - - return this; - }, - - /** - If the lat/long points should be normalized to lie within their - respective normalized ranges. - - Normalized ranges are: - lon = -180 (exclusive) to 180 (inclusive) range - lat = -90 to 90 (both inclusive) range - - @member ejs.GeoDistanceFilter - @param {String} trueFalse True if the coordinates should be normalized. False otherwise. - @returns {Object} returns this so that calls can be chained. - */ - normalize: function (trueFalse) { - if (trueFalse == null) { - return filter.geo_distance.normalize; - } - - filter.geo_distance.normalize = trueFalse; - return this; - }, - - /** - Will an optimization of using first a bounding box check will be - used. Defaults to memory which will do in memory checks. Can also - have values of indexed to use indexed value check, or none which - disables bounding box optimization. - - @member ejs.GeoDistanceFilter - @param {String} t optimization type of memory, indexed, or none. - @returns {Object} returns this so that calls can be chained. - */ - optimizeBbox: function (t) { - if (t == null) { - return filter.geo_distance.optimize_bbox; - } - - t = t.toLowerCase(); - if (t === 'memory' || t === 'indexed' || t === 'none') { - filter.geo_distance.optimize_bbox = t; - } - - return this; - }, - - /** - Sets the filter name. - - @member ejs.GeoDistanceFilter - @param {String} name A name for the filter. - @returns {Object} returns this so that calls can be chained. - */ - name: function (name) { - if (name == null) { - return filter.geo_distance._name; - } - - filter.geo_distance._name = name; - return this; - }, - - /** - Enable or disable caching of the filter - - @member ejs.GeoDistanceFilter - @param {Boolean} trueFalse True to cache the filter, false otherwise. - @returns {Object} returns this so that calls can be chained. - */ - cache: function (trueFalse) { - if (trueFalse == null) { - return filter.geo_distance._cache; - } - - filter.geo_distance._cache = trueFalse; - return this; - }, - - /** - Sets the cache key. - - @member ejs.GeoDistanceFilter - @param {String} key the cache key as a string. - @returns {Object} returns this so that calls can be chained. - */ - cacheKey: function (key) { - if (key == null) { - return filter.geo_distance._cache_key; - } - - filter.geo_distance._cache_key = key; - return this; - }, - - /** - Returns the filter container as a JSON string - - @member ejs.GeoDistanceFilter - @returns {String} JSON representation of the notFilter object - */ - toString: function () { - return JSON.stringify(filter); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.GeoDistanceFilter - @returns {String} the type of object - */ - _type: function () { - return 'filter'; - }, - - /** - Returns the filter object. - - @member ejs.GeoDistanceFilter - @returns {Object} filter object - */ - _self: function () { - return filter; - } - }; - }; - - /** - @class -

    A filter that restricts matched results/docs to a given distance range from the - point of origin. The format conforms with the GeoJSON specification.

    - - @name ejs.GeoDistanceRangeFilter - - @desc - Filter results to those which fall within the given distance range of the point of origin. - - @param {String} fieldName the document property/field containing the Geo Point (lon/lat). - - */ - ejs.GeoDistanceRangeFilter = function (fieldName) { - - /** - The internal filter object. Use _self() - - @member ejs.GeoDistanceRangeFilter - @property {Object} filter - */ - var filter = { - geo_distance_range: {} - }; - - filter.geo_distance_range[fieldName] = [0, 0]; - - return { - - /** - Sets the fields to filter against. - - @member ejs.GeoDistanceRangeFilter - @param {String} f A valid field name. - @returns {Object} returns this so that calls can be chained. - */ - field: function (f) { - var oldValue = filter.geo_distance_range[fieldName]; - - if (f == null) { - return fieldName; - } - - delete filter.geo_distance_range[fieldName]; - fieldName = f; - filter.geo_distance_range[f] = oldValue; - - return this; - }, - - /** - * Sets the start point of the distance range - - @member ejs.GeoDistanceRangeFilter - @param {Number} numericDistance the numeric distance - @returns {Object} returns this so that calls can be chained. - */ - from: function (numericDistance) { - if (numericDistance == null) { - return filter.geo_distance_range.from; - } - - if (!isNumber(numericDistance)) { - throw new TypeError('Argument must be a numeric value'); - } - - filter.geo_distance_range.from = numericDistance; - return this; - }, - - /** - * Sets the end point of the distance range - - @member ejs.GeoDistanceRangeFilter - @param {Number} numericDistance the numeric distance - @returns {Object} returns this so that calls can be chained. - */ - to: function (numericDistance) { - if (numericDistance == null) { - return filter.geo_distance_range.to; - } - - if (!isNumber(numericDistance)) { - throw new TypeError('Argument must be a numeric value'); - } - - filter.geo_distance_range.to = numericDistance; - return this; - }, - - /** - Should the first from (if set) be inclusive or not. - Defaults to true - - @member ejs.GeoDistanceRangeFilter - @param {Boolean} trueFalse true to include, false to exclude - @returns {Object} returns this so that calls can be chained. - */ - includeLower: function (trueFalse) { - if (trueFalse == null) { - return filter.geo_distance_range.include_lower; - } - - filter.geo_distance_range.include_lower = trueFalse; - return this; - }, - - /** - Should the last to (if set) be inclusive or not. Defaults to true. - - @member ejs.GeoDistanceRangeFilter - @param {Boolean} trueFalse true to include, false to exclude - @returns {Object} returns this so that calls can be chained. - */ - includeUpper: function (trueFalse) { - if (trueFalse == null) { - return filter.geo_distance_range.include_upper; - } - - filter.geo_distance_range.include_upper = trueFalse; - return this; - }, - - /** - Greater than value. Same as setting from to the value, and - include_lower to false, - - @member ejs.GeoDistanceRangeFilter - @param {Number} val the numeric distance - @returns {Object} returns this so that calls can be chained. - */ - gt: function (val) { - if (val == null) { - return filter.geo_distance_range.gt; - } - - if (!isNumber(val)) { - throw new TypeError('Argument must be a numeric value'); - } - - filter.geo_distance_range.gt = val; - return this; - }, - - /** - Greater than or equal to value. Same as setting from to the value, - and include_lower to true. - - @member ejs.GeoDistanceRangeFilter - @param {Number} val the numeric distance - @returns {Object} returns this so that calls can be chained. - */ - gte: function (val) { - if (val == null) { - return filter.geo_distance_range.gte; - } - - if (!isNumber(val)) { - throw new TypeError('Argument must be a numeric value'); - } - - filter.geo_distance_range.gte = val; - return this; - }, - - /** - Less than value. Same as setting to to the value, and include_upper - to false. - - @member ejs.GeoDistanceRangeFilter - @param {Number} val the numeric distance - @returns {Object} returns this so that calls can be chained. - */ - lt: function (val) { - if (val == null) { - return filter.geo_distance_range.lt; - } - - if (!isNumber(val)) { - throw new TypeError('Argument must be a numeric value'); - } - - filter.geo_distance_range.lt = val; - return this; - }, - - /** - Less than or equal to value. Same as setting to to the value, - and include_upper to true. - - @member ejs.GeoDistanceRangeFilter - @param {Number} val the numeric distance - @returns {Object} returns this so that calls can be chained. - */ - lte: function (val) { - if (val == null) { - return filter.geo_distance_range.lte; - } - - if (!isNumber(val)) { - throw new TypeError('Argument must be a numeric value'); - } - - filter.geo_distance_range.lte = val; - return this; - }, - - /** - Sets the distance unit. Valid values are "mi" for miles or "km" - for kilometers. Defaults to "km". - - @member ejs.GeoDistanceRangeFilter - @param {Number} unit the unit of distance measure. - @returns {Object} returns this so that calls can be chained. - */ - unit: function (unit) { - if (unit == null) { - return filter.geo_distance_range.unit; - } - - unit = unit.toLowerCase(); - if (unit === 'mi' || unit === 'km') { - filter.geo_distance_range.unit = unit; - } - - return this; - }, - - /** - Sets the point of origin in which distance will be measured from - - @member ejs.GeoDistanceRangeFilter - @param {GeoPoint} p A valid GeoPoint object. - @returns {Object} returns this so that calls can be chained. - */ - point: function (p) { - if (p == null) { - return filter.geo_distance_range[fieldName]; - } - - if (isGeoPoint(p)) { - filter.geo_distance_range[fieldName] = p._self(); - } else { - throw new TypeError('Argument must be a GeoPoint'); - } - - return this; - }, - - - /** - How to compute the distance. Can either be arc (better precision) - or plane (faster). Defaults to arc. - - @member ejs.GeoDistanceRangeFilter - @param {String} type The execution type as a string. - @returns {Object} returns this so that calls can be chained. - */ - distanceType: function (type) { - if (type == null) { - return filter.geo_distance_range.distance_type; - } - - type = type.toLowerCase(); - if (type === 'arc' || type === 'plane') { - filter.geo_distance_range.distance_type = type; - } - - return this; - }, - - /** - If the lat/long points should be normalized to lie within their - respective normalized ranges. - - Normalized ranges are: - lon = -180 (exclusive) to 180 (inclusive) range - lat = -90 to 90 (both inclusive) range - - @member ejs.GeoDistanceRangeFilter - @param {String} trueFalse True if the coordinates should be normalized. False otherwise. - @returns {Object} returns this so that calls can be chained. - */ - normalize: function (trueFalse) { - if (trueFalse == null) { - return filter.geo_distance_range.normalize; - } - - filter.geo_distance_range.normalize = trueFalse; - return this; - }, - - /** - Will an optimization of using first a bounding box check will be - used. Defaults to memory which will do in memory checks. Can also - have values of indexed to use indexed value check, or none which - disables bounding box optimization. - - @member ejs.GeoDistanceRangeFilter - @param {String} t optimization type of memory, indexed, or none. - @returns {Object} returns this so that calls can be chained. - */ - optimizeBbox: function (t) { - if (t == null) { - return filter.geo_distance_range.optimize_bbox; - } - - t = t.toLowerCase(); - if (t === 'memory' || t === 'indexed' || t === 'none') { - filter.geo_distance_range.optimize_bbox = t; - } - - return this; - }, - - /** - Sets the filter name. - - @member ejs.GeoDistanceRangeFilter - @param {String} name A name for the filter. - @returns {Object} returns this so that calls can be chained. - */ - name: function (name) { - if (name == null) { - return filter.geo_distance_range._name; - } - - filter.geo_distance_range._name = name; - return this; - }, - - /** - Enable or disable caching of the filter - - @member ejs.GeoDistanceRangeFilter - @param {Boolean} trueFalse True to cache the filter, false otherwise. - @returns {Object} returns this so that calls can be chained. - */ - cache: function (trueFalse) { - if (trueFalse == null) { - return filter.geo_distance_range._cache; - } - - filter.geo_distance_range._cache = trueFalse; - return this; - }, - - /** - Sets the cache key. - - @member ejs.GeoDistanceRangeFilter - @param {String} key the cache key as a string. - @returns {Object} returns this so that calls can be chained. - */ - cacheKey: function (key) { - if (key == null) { - return filter.geo_distance_range._cache_key; - } - - filter.geo_distance_range._cache_key = key; - return this; - }, - /** - Returns the filter container as a JSON string - - @member ejs.GeoDistanceRangeFilter - @returns {String} JSON representation of the notFilter object - */ - toString: function () { - return JSON.stringify(filter); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.GeoDistanceRangeFilter - @returns {String} the type of object - */ - _type: function () { - return 'filter'; - }, - - /** - Returns the filter object. - - @member ejs.GeoDistanceRangeFilter - @returns {Object} filter object - */ - _self: function () { - return filter; - } - }; - }; - - /** - @class -

    A filter for locating documents that fall within a polygon of points. Simply provide a lon/lat - for each document as a Geo Point type. The format conforms with the GeoJSON specification.

    - - @name ejs.GeoPolygonFilter - - @desc - Filter results to those which are contained within the polygon of points. - - @param {String} fieldName the document property/field containing the Geo Point (lon/lat). - */ - ejs.GeoPolygonFilter = function (fieldName) { - - /** - The internal filter object. Use _self() - - @member ejs.GeoPolygonFilter - @property {Object} filter - */ - var filter = { - geo_polygon: {} - }; - - filter.geo_polygon[fieldName] = { - points: [] - }; - - return { - - /** - Sets the fields to filter against. - - @member ejs.GeoPolygonFilter - @param {String} f A valid field name. - @returns {Object} returns this so that calls can be chained. - */ - field: function (f) { - var oldValue = filter.geo_polygon[fieldName]; - - if (f == null) { - return fieldName; - } - - delete filter.geo_polygon[fieldName]; - fieldName = f; - filter.geo_polygon[f] = oldValue; - - return this; - }, - - /** - Sets a series of points that represent a polygon. If passed a - single GeoPoint object, it is added to the current - list of points. If passed an array of GeoPoint - objects it replaces all current values. - - @member ejs.GeoPolygonFilter - @param {Array} pointsArray the array of points that represent the polygon - @returns {Object} returns this so that calls can be chained. - */ - points: function (p) { - var i, len; - - if (p == null) { - return filter.geo_polygon[fieldName].points; - } - - if (isGeoPoint(p)) { - filter.geo_polygon[fieldName].points.push(p._self()); - } else if (isArray(p)) { - filter.geo_polygon[fieldName].points = []; - for (i = 0, len = p.length; i < len; i++) { - if (!isGeoPoint(p[i])) { - throw new TypeError('Argument must be Array of GeoPoints'); - } - - filter.geo_polygon[fieldName].points.push(p[i]._self()); - } - } else { - throw new TypeError('Argument must be a GeoPoint or Array of GeoPoints'); - } - - return this; - }, - - /** - If the lat/long points should be normalized to lie within their - respective normalized ranges. - - Normalized ranges are: - lon = -180 (exclusive) to 180 (inclusive) range - lat = -90 to 90 (both inclusive) range - - @member ejs.GeoPolygonFilter - @param {String} trueFalse True if the coordinates should be normalized. False otherwise. - @returns {Object} returns this so that calls can be chained. - */ - normalize: function (trueFalse) { - if (trueFalse == null) { - return filter.geo_polygon.normalize; - } - - filter.geo_polygon.normalize = trueFalse; - return this; - }, - - /** - Sets the filter name. - - @member ejs.GeoPolygonFilter - @param {String} name A name for the filter. - @returns {Object} returns this so that calls can be chained. - */ - name: function (name) { - if (name == null) { - return filter.geo_polygon._name; - } - - filter.geo_polygon._name = name; - return this; - }, - - /** - Enable or disable caching of the filter - - @member ejs.GeoPolygonFilter - @param {Boolean} trueFalse True to cache the filter, false otherwise. - @returns {Object} returns this so that calls can be chained. - */ - cache: function (trueFalse) { - if (trueFalse == null) { - return filter.geo_polygon._cache; - } - - filter.geo_polygon._cache = trueFalse; - return this; - }, - - /** - Sets the cache key. - - @member ejs.GeoPolygonFilter - @param {String} key the cache key as a string. - @returns {Object} returns this so that calls can be chained. - */ - cacheKey: function (key) { - if (key == null) { - return filter.geo_polygon._cache_key; - } - - filter.geo_polygon._cache_key = key; - return this; - }, - - /** - Returns the filter container as a JSON string - - @member ejs.GeoPolygonFilter - @returns {String} JSON representation of the notFilter object - */ - toString: function () { - return JSON.stringify(filter); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.GeoPolygonFilter - @returns {String} the type of object - */ - _type: function () { - return 'filter'; - }, - - /** - Returns the filter object. - - @member ejs.GeoPolygonFilter - @returns {Object} filter object - */ - _self: function () { - return filter; - } - }; - }; - - /** - @class -

    Efficient filtering of documents containing shapes indexed using the - geo_shape type.

    - -

    Much like the geo_shape type, the geo_shape filter uses a grid square - representation of the filter shape to find those documents which have shapes - that relate to the filter shape in a specified way. In order to do this, the - field being queried must be of geo_shape type. The filter will use the same - PrefixTree configuration as defined for the field.

    - - @name ejs.GeoShapeFilter - - @desc - A Filter to find documents with a geo_shapes matching a specific shape. - - */ - ejs.GeoShapeFilter = function (field) { - - /** - The internal filter object. Use _self() - @member ejs.GeoShapeFilter - @property {Object} GeoShapeFilter - */ - var filter = { - geo_shape: {} - }; - - filter.geo_shape[field] = {}; - - return { - - /** - Sets the field to filter against. - - @member ejs.GeoShapeFilter - @param {String} f A valid field name. - @returns {Object} returns this so that calls can be chained. - */ - field: function (f) { - var oldValue = filter.geo_shape[field]; - - if (f == null) { - return field; - } - - delete filter.geo_shape[field]; - field = f; - filter.geo_shape[f] = oldValue; - - return this; - }, - - /** - Sets the shape - - @member ejs.GeoShapeFilter - @param {String} shape A valid Shape object. - @returns {Object} returns this so that calls can be chained. - */ - shape: function (shape) { - if (shape == null) { - return filter.geo_shape[field].shape; - } - - if (filter.geo_shape[field].indexed_shape != null) { - delete filter.geo_shape[field].indexed_shape; - } - - filter.geo_shape[field].shape = shape._self(); - return this; - }, - - /** - Sets the indexed shape. Use this if you already have shape definitions - already indexed. - - @member ejs.GeoShapeFilter - @param {String} indexedShape A valid IndexedShape object. - @returns {Object} returns this so that calls can be chained. - */ - indexedShape: function (indexedShape) { - if (indexedShape == null) { - return filter.geo_shape[field].indexed_shape; - } - - if (filter.geo_shape[field].shape != null) { - delete filter.geo_shape[field].shape; - } - - filter.geo_shape[field].indexed_shape = indexedShape._self(); - return this; - }, - - /** - Sets the shape relation type. A relationship between a Query Shape - and indexed Shapes that will be used to determine if a Document - should be matched or not. Valid values are: intersects, disjoint, - and within. - - @member ejs.GeoShapeFilter - @param {String} indexedShape A valid IndexedShape object. - @returns {Object} returns this so that calls can be chained. - */ - relation: function (relation) { - if (relation == null) { - return filter.geo_shape[field].relation; - } - - relation = relation.toLowerCase(); - if (relation === 'intersects' || relation === 'disjoint' || relation === 'within') { - filter.geo_shape[field].relation = relation; - } - - return this; - }, - - /** -

    Sets the spatial strategy.

    -

    Valid values are:

    - -
    -
    recursive - default, recursively traverse nodes in - the spatial prefix tree. This strategy has support for - searching non-point shapes.
    -
    term - uses a large TermsFilter on each node - in the spatial prefix tree. It only supports the search of - indexed Point shapes.
    -
    - -

    This is an advanced setting, use with care.

    - - @since elasticsearch 0.90 - @member ejs.GeoShapeFilter - @param {String} strategy The strategy as a string. - @returns {Object} returns this so that calls can be chained. - */ - strategy: function (strategy) { - if (strategy == null) { - return filter.geo_shape[field].strategy; - } - - strategy = strategy.toLowerCase(); - if (strategy === 'recursive' || strategy === 'term') { - filter.geo_shape[field].strategy = strategy; - } - - return this; - }, - - /** - Sets the filter name. - - @member ejs.GeoShapeFilter - @param {String} name A name for the filter. - @returns {Object} returns this so that calls can be chained. - */ - name: function (name) { - if (name == null) { - return filter.geo_shape._name; - } - - filter.geo_shape._name = name; - return this; - }, - - /** - Enable or disable caching of the filter - - @member ejs.GeoShapeFilter - @param {Boolean} trueFalse True to cache the filter, false otherwise. - @returns {Object} returns this so that calls can be chained. - */ - cache: function (trueFalse) { - if (trueFalse == null) { - return filter.geo_shape._cache; - } - - filter.geo_shape._cache = trueFalse; - return this; - }, - - /** - Sets the cache key. - - @member ejs.GeoShapeFilter - @param {String} key the cache key as a string. - @returns {Object} returns this so that calls can be chained. - */ - cacheKey: function (key) { - if (key == null) { - return filter.geo_shape._cache_key; - } - - filter.geo_shape._cache_key = key; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.GeoShapeFilter - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(filter); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.GeoShapeFilter - @returns {String} the type of object - */ - _type: function () { - return 'filter'; - }, - - /** - Retrieves the internal filter object. This is typically used by - internal API functions so use with caution. - - @member ejs.GeoShapeFilter - @returns {String} returns this object's internal filter property. - */ - _self: function () { - return filter; - } - }; - }; - - /** - @class -

    The has_child filter results in parent documents that have child docs - matching the query being returned.

    - - @name ejs.HasChildFilter - - @desc - Returns results that have child documents matching the filter. - - @param {Object} qry A valid query object. - @param {String} type The child type - */ - ejs.HasChildFilter = function (qry, type) { - - if (!isQuery(qry)) { - throw new TypeError('No Query object found'); - } - - /** - The internal query object. Use _self() - @member ejs.HasChildFilter - @property {Object} query - */ - var filter = { - has_child: { - query: qry._self(), - type: type - } - }; - - return { - - /** - Sets the query - - @member ejs.HasChildFilter - @param {Query} q A valid Query object - @returns {Object} returns this so that calls can be chained. - */ - query: function (q) { - if (q == null) { - return filter.has_child.query; - } - - if (!isQuery(q)) { - throw new TypeError('Argument must be a Query object'); - } - - filter.has_child.query = q._self(); - return this; - }, - - /** - Sets the filter - - @since elasticsearch 0.90 - @member ejs.HasChildFilter - @param {Query} f A valid Filter object - @returns {Object} returns this so that calls can be chained. - */ - filter: function (f) { - if (f == null) { - return filter.has_child.filter; - } - - if (!isFilter(f)) { - throw new TypeError('Argument must be a Filter object'); - } - - filter.has_child.filter = f._self(); - return this; - }, - - /** - Sets the child document type to search against - - @member ejs.HasChildFilter - @param {String} t A valid type name - @returns {Object} returns this so that calls can be chained. - */ - type: function (t) { - if (t == null) { - return filter.has_child.type; - } - - filter.has_child.type = t; - return this; - }, - - /** - Sets the cutoff value to short circuit processing. - - @member ejs.HasChildFilter - @param {Integer} cutoff A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - shortCircuitCutoff: function (cutoff) { - if (cutoff == null) { - return filter.has_child.short_circuit_cutoff; - } - - filter.has_child.short_circuit_cutoff = cutoff; - return this; - }, - - /** - Sets the scope of the filter. A scope allows to run facets on the - same scope name that will work against the child documents. - - @deprecated since elasticsearch 0.90 - @member ejs.HasChildFilter - @param {String} s The scope name as a string. - @returns {Object} returns this so that calls can be chained. - */ - scope: function (s) { - return this; - }, - - /** - Sets the filter name. - - @member ejs.HasChildFilter - @param {String} name A name for the filter. - @returns {Object} returns this so that calls can be chained. - */ - name: function (name) { - if (name == null) { - return filter.has_child._name; - } - - filter.has_child._name = name; - return this; - }, - - /** - Enable or disable caching of the filter - - @member ejs.HasChildFilter - @param {Boolean} trueFalse True to cache the filter, false otherwise. - @returns {Object} returns this so that calls can be chained. - */ - cache: function (trueFalse) { - if (trueFalse == null) { - return filter.has_child._cache; - } - - filter.has_child._cache = trueFalse; - return this; - }, - - /** - Sets the cache key. - - @member ejs.HasChildFilter - @param {String} key the cache key as a string. - @returns {Object} returns this so that calls can be chained. - */ - cacheKey: function (key) { - if (key == null) { - return filter.has_child._cache_key; - } - - filter.has_child._cache_key = key; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.HasChildFilter - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(filter); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.HasChildFilter - @returns {String} the type of object - */ - _type: function () { - return 'filter'; - }, - - /** - Retrieves the internal filter object. This is typically used by - internal API functions so use with caution. - - @member ejs.HasChildFilter - @returns {String} returns this object's internal filter property. - */ - _self: function () { - return filter; - } - }; - }; - - /** - @class -

    The has_parent results in child documents that have parent docs matching - the query being returned.

    - - @name ejs.HasParentFilter - - @desc - Returns results that have parent documents matching the filter. - - @param {Object} qry A valid query object. - @param {String} parentType The child type - */ - ejs.HasParentFilter = function (qry, parentType) { - - if (!isQuery(qry)) { - throw new TypeError('No Query object found'); - } - - /** - The internal filter object. Use _self() - @member ejs.HasParentFilter - @property {Object} query - */ - var filter = { - has_parent: { - query: qry._self(), - parent_type: parentType - } - }; - - return { - - /** - Sets the query - - @member ejs.HasParentFilter - @param {Object} q A valid Query object - @returns {Object} returns this so that calls can be chained. - */ - query: function (q) { - if (q == null) { - return filter.has_parent.query; - } - - if (!isQuery(q)) { - throw new TypeError('Argument must be a Query object'); - } - - filter.has_parent.query = q._self(); - return this; - }, - - /** - Sets the filter - - @since elasticsearch 0.90 - @member ejs.HasParentFilter - @param {Object} f A valid Filter object - @returns {Object} returns this so that calls can be chained. - */ - filter: function (f) { - if (f == null) { - return filter.has_parent.filter; - } - - if (!isFilter(f)) { - throw new TypeError('Argument must be a Filter object'); - } - - filter.has_parent.filter = f._self(); - return this; - }, - - /** - Sets the child document type to search against - - @member ejs.HasParentFilter - @param {String} t A valid type name - @returns {Object} returns this so that calls can be chained. - */ - parentType: function (t) { - if (t == null) { - return filter.has_parent.parent_type; - } - - filter.has_parent.parent_type = t; - return this; - }, - - /** - Sets the scope of the filter. A scope allows to run facets on the - same scope name that will work against the parent documents. - - @deprecated since elasticsearch 0.90 - @member ejs.HasParentFilter - @param {String} s The scope name as a string. - @returns {Object} returns this so that calls can be chained. - */ - scope: function (s) { - return this; - }, - - /** - Sets the filter name. - - @member ejs.HasParentFilter - @param {String} name A name for the filter. - @returns {Object} returns this so that calls can be chained. - */ - name: function (name) { - if (name == null) { - return filter.has_parent._name; - } - - filter.has_parent._name = name; - return this; - }, - - /** - Enable or disable caching of the filter - - @member ejs.HasParentFilter - @param {Boolean} trueFalse True to cache the filter, false otherwise. - @returns {Object} returns this so that calls can be chained. - */ - cache: function (trueFalse) { - if (trueFalse == null) { - return filter.has_parent._cache; - } - - filter.has_parent._cache = trueFalse; - return this; - }, - - /** - Sets the cache key. - - @member ejs.HasParentFilter - @param {String} key the cache key as a string. - @returns {Object} returns this so that calls can be chained. - */ - cacheKey: function (key) { - if (key == null) { - return filter.has_parent._cache_key; - } - - filter.has_parent._cache_key = key; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.HasParentFilter - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(filter); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.HasParentFilter - @returns {String} the type of object - */ - _type: function () { - return 'filter'; - }, - - /** - Retrieves the internal filter object. This is typically used by - internal API functions so use with caution. - - @member ejs.HasParentFilter - @returns {String} returns this object's internal filter property. - */ - _self: function () { - return filter; - } - }; - }; - - /** - @class -

    Filters documents that only have the provided ids. Note, this filter - does not require the _id field to be indexed since it works using the - _uid field.

    - - @name ejs.IdsFilter - - @desc - Matches documents with the specified id(s). - - @param {Array || String} ids A single document id or a list of document ids. - */ - ejs.IdsFilter = function (ids) { - - /** - The internal filter object. Use get() - @member ejs.IdsFilter - @property {Object} filter - */ - var filter = { - ids: {} - }; - - if (isString(ids)) { - filter.ids.values = [ids]; - } else if (isArray(ids)) { - filter.ids.values = ids; - } else { - throw new TypeError('Argument must be a string or an array'); - } - - return { - - /** - Sets the values array or adds a new value. if val is a string, it - is added to the list of existing document ids. If val is an - array it is set as the document values and replaces any existing values. - - @member ejs.IdsFilter - @param {Array || String} val An single document id or an array of document ids. - @returns {Object} returns this so that calls can be chained. - */ - values: function (val) { - if (val == null) { - return filter.ids.values; - } - - if (isString(val)) { - filter.ids.values.push(val); - } else if (isArray(val)) { - filter.ids.values = val; - } else { - throw new TypeError('Argument must be a string or an array'); - } - - return this; - }, - - /** - Sets the type as a single type or an array of types. If type is a - string, it is added to the list of existing types. If type is an - array, it is set as the types and overwrites an existing types. This - parameter is optional. - - @member ejs.IdsFilter - @param {Array || String} type A type or a list of types - @returns {Object} returns this so that calls can be chained. - */ - type: function (type) { - if (filter.ids.type == null) { - filter.ids.type = []; - } - - if (type == null) { - return filter.ids.type; - } - - if (isString(type)) { - filter.ids.type.push(type); - } else if (isArray(type)) { - filter.ids.type = type; - } else { - throw new TypeError('Argument must be a string or an array'); - } - - return this; - }, - - /** - Sets the filter name. - - @member ejs.IdsFilter - @param {String} name A name for the filter. - @returns {Object} returns this so that calls can be chained. - */ - name: function (name) { - if (name == null) { - return filter.ids._name; - } - - filter.ids._name = name; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.IdsFilter - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(filter); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.IdsFilter - @returns {String} the type of object - */ - _type: function () { - return 'filter'; - }, - - /** - Retrieves the internal filter object. This is typically used by - internal API functions so use with caution. - - @member ejs.IdsFilter - @returns {String} returns this object's internal filter property. - */ - _self: function () { - return filter; - } - }; - }; - - /** - @class -

    The indices filter can be used when executed across multiple indices, - allowing to have a filter that executes only when executed on an index that - matches a specific list of indices, and another filter that executes when it - is executed on an index that does not match the listed indices.

    - - @name ejs.IndicesFilter - - @desc - A configurable filter that is dependent on the index name. - - @param {Object} fltr A valid filter object. - @param {String || Array} indices a single index name or an array of index - names. - */ - ejs.IndicesFilter = function (fltr, indices) { - - if (!isFilter(fltr)) { - throw new TypeError('Argument must be a Filter'); - } - - /** - The internal filter object. Use _self() - @member ejs.IndicesFilter - @property {Object} filter - */ - var filter = { - indices: { - filter: fltr._self() - } - }; - - if (isString(indices)) { - filter.indices.indices = [indices]; - } else if (isArray(indices)) { - filter.indices.indices = indices; - } else { - throw new TypeError('Argument must be a string or array'); - } - - return { - - /** - Sets the indicies the filter should match. When passed a string, - the index name is added to the current list of indices. When passed - an array, it overwites all current indices. - - @member ejs.IndicesFilter - @param {String || Array} i A single index name or an array of index names. - @returns {Object} returns this so that calls can be chained. - */ - indices: function (i) { - if (i == null) { - return filter.indices.indices; - } - - if (isString(i)) { - filter.indices.indices.push(i); - } else if (isArray(i)) { - filter.indices.indices = i; - } else { - throw new TypeError('Argument must be a string or array'); - } - - return this; - }, - - /** - Sets the filter to be used when executing on one of the indicies - specified. - - @member ejs.IndicesFilter - @param {Object} f A valid Filter object - @returns {Object} returns this so that calls can be chained. - */ - filter: function (f) { - if (f == null) { - return filter.indices.filter; - } - - if (!isFilter(f)) { - throw new TypeError('Argument must be a Filter'); - } - - filter.indices.filter = f._self(); - return this; - }, - - /** - Sets the filter to be used on an index that does not match an index - name in the indices list. Can also be set to "none" to not match any - documents or "all" to match all documents. - - @member ejs.IndicesFilter - @param {Object || String} f A valid Filter object or "none" or "all" - @returns {Object} returns this so that calls can be chained. - */ - noMatchFilter: function (f) { - if (f == null) { - return filter.indices.no_match_filter; - } - - if (isString(f)) { - f = f.toLowerCase(); - if (f === 'none' || f === 'all') { - filter.indices.no_match_filter = f; - } - } else if (isFilter(f)) { - filter.indices.no_match_filter = f._self(); - } else { - throw new TypeError('Argument must be string or Filter'); - } - - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.IndicesFilter - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(filter); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.IndicesFilter - @returns {String} the type of object - */ - _type: function () { - return 'filter'; - }, - - /** - Retrieves the internal filter object. This is typically used by - internal API functions so use with caution. - - @member ejs.IndicesFilter - @returns {String} returns this object's internal filter property. - */ - _self: function () { - return filter; - } - }; - }; - - /** - @class -

    A limit filter limits the number of documents (per shard) to execute on.

    - - @name ejs.LimitFilter - - @desc - Limits the number of documents to execute on. - - @param {Integer} limit The number of documents to execute on. - */ - ejs.LimitFilter = function (limit) { - - /** - The internal filter object. Use get() - @member ejs.LimitFilter - @property {Object} filter - */ - var filter = { - limit: { - value: limit - } - }; - - return { - - /** - Sets the limit value. - - @member ejs.LimitFilter - @param {Integer} val An The number of documents to execute on. - @returns {Object} returns this so that calls can be chained. - */ - value: function (val) { - if (val == null) { - return filter.limit.value; - } - - if (!isNumber(val)) { - throw new TypeError('Argument must be a numeric value'); - } - - filter.limit.value = val; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.LimitFilter - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(filter); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.LimitFilter - @returns {String} the type of object - */ - _type: function () { - return 'filter'; - }, - - /** - Retrieves the internal filter object. This is typically used by - internal API functions so use with caution. - - @member ejs.LimitFilter - @returns {String} returns this object's internal filter property. - */ - _self: function () { - return filter; - } - }; - }; - - /** - @class -

    This filter can be used to match on all the documents - in a given set of collections and/or types.

    - - @name ejs.MatchAllFilter - - @desc -

    A filter that matches on all documents

    - - */ - ejs.MatchAllFilter = function () { - - /** - The internal Query object. Use get(). - @member ejs.MatchAllFilter - @property {Object} filter - */ - var filter = { - match_all: {} - }; - - return { - - /** - Serializes the internal filter object as a JSON string. - @member ejs.MatchAllFilter - @returns {String} Returns a JSON representation of the object. - */ - toString: function () { - return JSON.stringify(filter); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.MatchAllFilter - @returns {String} the type of object - */ - _type: function () { - return 'filter'; - }, - - /** - This method is used to retrieve the raw filter object. It's designed - for internal use when composing and serializing queries. - @member ejs.MatchAllFilter - @returns {Object} Returns the object's filter property. - */ - _self: function () { - return filter; - } - }; - }; - - /** - @class -

    An missingFilter matches documents where the specified field contains no legitimate value.

    - - @name ejs.MissingFilter - - @desc - Filters documents where a specific field has no value present. - - @param {String} fieldName the field name to check for missing values. - */ - ejs.MissingFilter = function (fieldName) { - - /** - The internal filter object. Use get() - - @member ejs.MissingFilter - @property {Object} filter - */ - var filter = { - missing: { - field: fieldName - } - }; - - return { - - /** - Sets the field to check for missing values. - - @member ejs.MissingFilter - @param {String} name A name of the field. - @returns {Object} returns this so that calls can be chained. - */ - field: function (name) { - if (name == null) { - return filter.missing.field; - } - - filter.missing.field = name; - return this; - }, - - /** - Checks if the field doesn't exist. - - @member ejs.MissingFilter - @param {Boolean} trueFalse True to check if the field doesn't exist. - @returns {Object} returns this so that calls can be chained. - */ - existence: function (trueFalse) { - if (trueFalse == null) { - return filter.missing.existence; - } - - filter.missing.existence = trueFalse; - return this; - }, - - /** - Checks if the field has null values. - - @member ejs.MissingFilter - @param {Boolean} trueFalse True to check if the field has nulls. - @returns {Object} returns this so that calls can be chained. - */ - nullValue: function (trueFalse) { - if (trueFalse == null) { - return filter.missing.null_value; - } - - filter.missing.null_value = trueFalse; - return this; - }, - - /** - Sets the filter name. - - @member ejs.MissingFilter - @param {String} name A name for the filter. - @returns {Object} returns this so that calls can be chained. - */ - name: function (name) { - if (name == null) { - return filter.missing._name; - } - - filter.missing._name = name; - return this; - }, - - /** - Returns the filter container as a JSON string - - @member ejs.MissingFilter - @returns {String} JSON representation of the missingFilter object - */ - toString: function () { - return JSON.stringify(filter); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.MissingFilter - @returns {String} the type of object - */ - _type: function () { - return 'filter'; - }, - - /** - Returns the filter object. - - @member ejs.MissingFilter - @returns {Object} filter object - */ - _self: function () { - return filter; - } - }; - }; - - /** - @class -

    Nested filters allow you to search against content within objects that are - embedded inside of other objects. It is similar to XPath - expressions in XML both conceptually and syntactically.

    - -

    - The filter is executed against the nested objects / docs as if they were - indexed as separate docs and resulting in the root - parent doc (or parent nested mapping).

    - - @name ejs.NestedFilter - - @desc -

    Constructs a filter that is capable of executing a filter against objects - nested within a document.

    - - @param {String} path The nested object path. - - */ - ejs.NestedFilter = function (path) { - - /** - The internal Filter object. Use _self(). - @member ejs.NestedFilter - @property {Object} filter - */ - var filter = { - nested: { - path: path - } - }; - - return { - - /** - Sets the root context for the nested filter. - @member ejs.NestedFilter - @param {String} p The path defining the root for the nested filter. - @returns {Object} returns this so that calls can be chained. - */ - path: function (p) { - if (p == null) { - return filter.nested.path; - } - - filter.nested.path = p; - return this; - }, - - /** - Sets the nested query to be executed. - @member ejs.NestedFilter - @param {Query} oQuery A valid Query object - @returns {Object} returns this so that calls can be chained. - */ - query: function (oQuery) { - if (oQuery == null) { - return filter.nested.query; - } - - if (!isQuery(oQuery)) { - throw new TypeError('Argument must be a Query object'); - } - - filter.nested.query = oQuery._self(); - return this; - }, - - - /** - Sets the nested filter to be executed. - @member ejs.NestedFilter - @param {Object} oFilter A valid Filter object - @returns {Object} returns this so that calls can be chained. - */ - filter: function (oFilter) { - if (oFilter == null) { - return filter.nested.filter; - } - - if (!isFilter(oFilter)) { - throw new TypeError('Argument must be a Filter object'); - } - - filter.nested.filter = oFilter._self(); - return this; - }, - - /** - Sets the boost value of the nested Query. - - @member ejs.NestedFilter - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return filter.nested.boost; - } - - filter.nested.boost = boost; - return this; - }, - - /** - If the nested query should be "joined" with the parent document. - Defaults to false. - - @member ejs.NestedFilter - @param {Boolean} trueFalse If the query should be joined or not. - @returns {Object} returns this so that calls can be chained. - */ - join: function (trueFalse) { - if (trueFalse == null) { - return filter.nested.join; - } - - filter.nested.join = trueFalse; - return this; - }, - - /** - Sets the scope of the filter. A scope allows to run facets on the - same scope name that will work against the nested documents. - - @deprecated since elasticsearch 0.90 - @member ejs.NestedFilter - @param {String} s The scope name as a string. - @returns {Object} returns this so that calls can be chained. - */ - scope: function (s) { - return this; - }, - - /** - Sets the filter name. - - @member ejs.NestedFilter - @param {String} name A name for the filter. - @returns {Object} returns this so that calls can be chained. - */ - name: function (name) { - if (name == null) { - return filter.nested._name; - } - - filter.nested._name = name; - return this; - }, - - /** - Enable or disable caching of the filter - - @member ejs.NestedFilter - @param {Boolean} trueFalse True to cache the filter, false otherwise. - @returns {Object} returns this so that calls can be chained. - */ - cache: function (trueFalse) { - if (trueFalse == null) { - return filter.nested._cache; - } - - filter.nested._cache = trueFalse; - return this; - }, - - /** - Sets the cache key. - - @member ejs.NestedFilter - @param {String} key the cache key as a string. - @returns {Object} returns this so that calls can be chained. - */ - cacheKey: function (key) { - if (key == null) { - return filter.nested._cache_key; - } - - filter.nested._cache_key = key; - return this; - }, - - /** - Serializes the internal filter object as a JSON string. - @member ejs.NestedFilter - @returns {String} Returns a JSON representation of the termFilter object. - */ - toString: function () { - return JSON.stringify(filter); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.NestedFilter - @returns {String} the type of object - */ - _type: function () { - return 'filter'; - }, - - /** - This method is used to retrieve the raw filter object. It's designed - for internal use when composing and serializing filters. - - @member ejs.NestedFilter - @returns {Object} Returns the object's filter property. - */ - _self: function () { - return filter; - } - }; - }; - - /** - @class -

    A container Filter that excludes the documents matched by the - contained filter.

    - - @name ejs.NotFilter - - @desc - Container filter that excludes the matched documents of the contained filter. - - @param {Object} oFilter a valid Filter object such as a termFilter, etc. - */ - ejs.NotFilter = function (oFilter) { - - if (!isFilter(oFilter)) { - throw new TypeError('Argument must be a Filter'); - } - - /** - The internal filter object. Use _self() - - @member ejs.NotFilter - @property {Object} filter - */ - var filter = { - not: oFilter._self() - }; - - return { - - /** - Sets the filter - - @member ejs.NotFilter - @param {Object} fltr A valid filter object such as a termFilter, etc. - @returns {Object} returns this so that calls can be chained. - */ - filter: function (fltr) { - if (fltr == null) { - return filter.not; - } - - if (!isFilter(fltr)) { - throw new TypeError('Argument must be a Filter'); - } - - filter.not = fltr._self(); - return this; - }, - - /** - Sets the filter name. - - @member ejs.NotFilter - @param {String} name A name for the filter. - @returns {Object} returns this so that calls can be chained. - */ - name: function (name) { - if (name == null) { - return filter.not._name; - } - - filter.not._name = name; - return this; - }, - - /** - Enable or disable caching of the filter - - @member ejs.NotFilter - @param {Boolean} trueFalse True to cache the filter, false otherwise. - @returns {Object} returns this so that calls can be chained. - */ - cache: function (trueFalse) { - if (trueFalse == null) { - return filter.not._cache; - } - - filter.not._cache = trueFalse; - return this; - }, - - /** - Sets the cache key. - - @member ejs.NotFilter - @param {String} key the cache key as a string. - @returns {Object} returns this so that calls can be chained. - */ - cacheKey: function (key) { - if (key == null) { - return filter.not._cache_key; - } - - filter.not._cache_key = key; - return this; - }, - - /** - Returns the filter container as a JSON string - - @member ejs.NotFilter - @returns {String} JSON representation of the notFilter object - */ - toString: function () { - return JSON.stringify(filter); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.NotFilter - @returns {String} the type of object - */ - _type: function () { - return 'filter'; - }, - - /** - Returns the filter object. - - @member ejs.NotFilter - @returns {Object} filter object - */ - _self: function () { - return filter; - } - }; - }; - - /** - @class -

    Filters documents with fields that have values within a certain numeric - range. Similar to range filter, except that it works only with numeric - values, and the filter execution works differently.

    - -

    The numeric range filter works by loading all the relevant field values - into memory, and checking for the relevant docs if they satisfy the range - requirements. This requires more memory since the numeric range data are - loaded to memory, but can provide a significant increase in performance.

    - -

    Note, if the relevant field values have already been loaded to memory, - for example because it was used in facets or was sorted on, then this - filter should be used.

    - - @name ejs.NumericRangeFilter - - @desc - A Filter that only accepts numeric values within a specified range. - - @param {string} fieldName The name of the field to filter on. - */ - ejs.NumericRangeFilter = function (fieldName) { - - /** - The internal filter object. Use get() - - @member ejs.NumericRangeFilter - @property {Object} filter - */ - var filter = { - numeric_range: {} - }; - - filter.numeric_range[fieldName] = {}; - - return { - - /** - Returns the field name used to create this object. - - @member ejs.NumericRangeFilter - @param {String} field the field name - @returns {Object} returns this so that calls can be - chained. Returns {String}, field name when field is not specified. - */ - field: function (field) { - var oldValue = filter.numeric_range[fieldName]; - - if (field == null) { - return fieldName; - } - - delete filter.numeric_range[fieldName]; - fieldName = field; - filter.numeric_range[fieldName] = oldValue; - - return this; - }, - - /** - Sets the endpoint for the current range. - - @member ejs.NumericRangeFilter - @param {Number} startPoint A numeric value representing the start of the range - @returns {Object} returns this so that calls can be chained. - */ - from: function (from) { - if (from == null) { - return filter.numeric_range[fieldName].from; - } - - if (!isNumber(from)) { - throw new TypeError('Argument must be a numeric value'); - } - - filter.numeric_range[fieldName].from = from; - return this; - }, - - /** - Sets the endpoint for the current range. - - @member ejs.NumericRangeFilter - @param {Number} endPoint A numeric value representing the end of the range - @returns {Object} returns this so that calls can be chained. - */ - to: function (to) { - if (to == null) { - return filter.numeric_range[fieldName].to; - } - - if (!isNumber(to)) { - throw new TypeError('Argument must be a numeric value'); - } - - filter.numeric_range[fieldName].to = to; - return this; - }, - - /** - Should the first from (if set) be inclusive or not. - Defaults to true - - @member ejs.NumericRangeFilter - @param {Boolean} trueFalse true to include, false to exclude - @returns {Object} returns this so that calls can be chained. - */ - includeLower: function (trueFalse) { - if (trueFalse == null) { - return filter.numeric_range[fieldName].include_lower; - } - - filter.numeric_range[fieldName].include_lower = trueFalse; - return this; - }, - - /** - Should the last to (if set) be inclusive or not. Defaults to true. - - @member ejs.NumericRangeFilter - @param {Boolean} trueFalse true to include, false to exclude - @returns {Object} returns this so that calls can be chained. - */ - includeUpper: function (trueFalse) { - if (trueFalse == null) { - return filter.numeric_range[fieldName].include_upper; - } - - filter.numeric_range[fieldName].include_upper = trueFalse; - return this; - }, - - /** - Greater than value. Same as setting from to the value, and - include_lower to false, - - @member ejs.NumericRangeFilter - @param {Variable Type} val the value, type depends on field type - @returns {Object} returns this so that calls can be chained. - */ - gt: function (val) { - if (val == null) { - return filter.numeric_range[fieldName].gt; - } - - if (!isNumber(val)) { - throw new TypeError('Argument must be a numeric value'); - } - - filter.numeric_range[fieldName].gt = val; - return this; - }, - - /** - Greater than or equal to value. Same as setting from to the value, - and include_lower to true. - - @member ejs.NumericRangeFilter - @param {Variable Type} val the value, type depends on field type - @returns {Object} returns this so that calls can be chained. - */ - gte: function (val) { - if (val == null) { - return filter.numeric_range[fieldName].gte; - } - - if (!isNumber(val)) { - throw new TypeError('Argument must be a numeric value'); - } - - filter.numeric_range[fieldName].gte = val; - return this; - }, - - /** - Less than value. Same as setting to to the value, and include_upper - to false. - - @member ejs.NumericRangeFilter - @param {Variable Type} val the value, type depends on field type - @returns {Object} returns this so that calls can be chained. - */ - lt: function (val) { - if (val == null) { - return filter.numeric_range[fieldName].lt; - } - - if (!isNumber(val)) { - throw new TypeError('Argument must be a numeric value'); - } - - filter.numeric_range[fieldName].lt = val; - return this; - }, - - /** - Less than or equal to value. Same as setting to to the value, - and include_upper to true. - - @member ejs.NumericRangeFilter - @param {Variable Type} val the value, type depends on field type - @returns {Object} returns this so that calls can be chained. - */ - lte: function (val) { - if (val == null) { - return filter.numeric_range[fieldName].lte; - } - - if (!isNumber(val)) { - throw new TypeError('Argument must be a numeric value'); - } - - filter.numeric_range[fieldName].lte = val; - return this; - }, - - /** - Sets the filter name. - - @member ejs.NumericRangeFilter - @param {String} name A name for the filter. - @returns {Object} returns this so that calls can be chained. - */ - name: function (name) { - if (name == null) { - return filter.numeric_range._name; - } - - filter.numeric_range._name = name; - return this; - }, - - /** - Enable or disable caching of the filter - - @member ejs.NumericRangeFilter - @param {Boolean} trueFalse True to cache the filter, false otherwise. - @returns {Object} returns this so that calls can be chained. - */ - cache: function (trueFalse) { - if (trueFalse == null) { - return filter.numeric_range._cache; - } - - filter.numeric_range._cache = trueFalse; - return this; - }, - - /** - Sets the cache key. - - @member ejs.NumericRangeFilter - @param {String} key the cache key as a string. - @returns {Object} returns this so that calls can be chained. - */ - cacheKey: function (key) { - if (key == null) { - return filter.numeric_range._cache_key; - } - - filter.numeric_range._cache_key = key; - return this; - }, - - /** - Returns the filter container as a JSON string. - - @member ejs.NumericRangeFilter - @returns {String} JSON representation of the numericRangeFilter object - */ - toString: function () { - return JSON.stringify(filter); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.NumericRangeFilter - @returns {String} the type of object - */ - _type: function () { - return 'filter'; - }, - - /** - Returns the filter object. - - @member ejs.NumericRangeFilter - @returns {Object} filter object - */ - _self: function () { - return filter; - } - }; - }; - - /** - @class - A container filter that allows Boolean OR composition of filters. - - @name ejs.OrFilter - - @desc - A container Filter that allows Boolean OR composition of filters. - - @param {Filter || Array} filters A valid Filter or array of Filters. - */ - ejs.OrFilter = function (filters) { - - /** - The internal filter object. Use _self() - - @member ejs.OrFilter - @property {Object} filter - */ - var filter, i, len; - - filter = { - or: { - filters: [] - } - }; - - if (isFilter(filters)) { - filter.or.filters.push(filters._self()); - } else if (isArray(filters)) { - for (i = 0, len = filters.length; i < len; i++) { - if (!isFilter(filters[i])) { - throw new TypeError('Argument must be array of Filters'); - } - - filter.or.filters.push(filters[i]._self()); - } - } else { - throw new TypeError('Argument must be a Filter or array of Filters'); - } - - return { - - /** - Updates the filters. If passed a single Filter it is added to - the existing filters. If passed an array of Filters, they - replace all existing Filters. - - @member ejs.OrFilter - @param {Filter || Array} fltr A Filter or array of Filters - @returns {Object} returns this so that calls can be chained. - */ - filters: function (fltr) { - var i, len; - - if (fltr == null) { - return filter.or.filters; - } - - if (isFilter(fltr)) { - filter.or.filters.push(fltr._self()); - } else if (isArray(fltr)) { - filter.or.filters = []; - for (i = 0, len = fltr.length; i < len; i++) { - if (!isFilter(fltr[i])) { - throw new TypeError('Argument must be an array of Filters'); - } - - filter.or.filters.push(fltr[i]._self()); - } - } else { - throw new TypeError('Argument must be a Filter or array of Filters'); - } - - return this; - }, - - /** - Sets the filter name. - - @member ejs.OrFilter - @param {String} name A name for the filter. - @returns {Object} returns this so that calls can be chained. - */ - name: function (name) { - if (name == null) { - return filter.or._name; - } - - filter.or._name = name; - return this; - }, - - /** - Enable or disable caching of the filter - - @member ejs.OrFilter - @param {Boolean} trueFalse True to cache the filter, false otherwise. - @returns {Object} returns this so that calls can be chained. - */ - cache: function (trueFalse) { - if (trueFalse == null) { - return filter.or._cache; - } - - filter.or._cache = trueFalse; - return this; - }, - - /** - Sets the cache key. - - @member ejs.OrFilter - @param {String} key the cache key as a string. - @returns {Object} returns this so that calls can be chained. - */ - cacheKey: function (key) { - if (key == null) { - return filter.or._cache_key; - } - - filter.or._cache_key = key; - return this; - }, - - /** - Returns the filter container as a JSON string - - @member ejs.OrFilter - @returns {String} JSON representation of the orFilter object - */ - toString: function () { - return JSON.stringify(filter); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.OrFilter - @returns {String} the type of object - */ - _type: function () { - return 'filter'; - }, - - /** - Returns the filter object. - - @member ejs.OrFilter - @returns {Object} filter object - */ - _self: function () { - return filter; - } - }; - }; - - /** - @class -

    Filters documents that have fields containing terms with a specified prefix (not analyzed). Similar - to phrase query, except that it acts as a filter. Can be placed within queries that accept a filter.

    - - @name ejs.PrefixFilter - - @desc - Filters documents that have fields containing terms with a specified prefix. - - @param {String} fieldName the field name to be used during matching. - @param {String} prefix the prefix value. - */ - ejs.PrefixFilter = function (fieldName, prefix) { - - /** - The internal filter object. Use get() - - @member ejs.PrefixFilter - @property {Object} filter - */ - var filter = { - prefix: {} - }; - - filter.prefix[fieldName] = prefix; - - return { - - /** - Returns the field name used to create this object. - - @member ejs.PrefixFilter - @param {String} field the field name - @returns {Object} returns this so that calls can be - chained. Returns {String}, field name when field is not specified. - */ - field: function (field) { - var oldValue = filter.prefix[fieldName]; - - if (field == null) { - return fieldName; - } - - delete filter.prefix[fieldName]; - fieldName = field; - filter.prefix[fieldName] = oldValue; - - return this; - }, - - /** - Sets the prefix to search for. - - @member ejs.PrefixFilter - @param {String} value the prefix value to match - @returns {Object} returns this so that calls can be chained. - */ - prefix: function (value) { - if (value == null) { - return filter.prefix[fieldName]; - } - - filter.prefix[fieldName] = value; - return this; - }, - - /** - Sets the filter name. - - @member ejs.PrefixFilter - @param {String} name A name for the filter. - @returns {Object} returns this so that calls can be chained. - */ - name: function (name) { - if (name == null) { - return filter.prefix._name; - } - - filter.prefix._name = name; - return this; - }, - - /** - Enable or disable caching of the filter - - @member ejs.PrefixFilter - @param {Boolean} trueFalse True to cache the filter, false otherwise. - @returns {Object} returns this so that calls can be chained. - */ - cache: function (trueFalse) { - if (trueFalse == null) { - return filter.prefix._cache; - } - - filter.prefix._cache = trueFalse; - return this; - }, - - /** - Sets the cache key. - - @member ejs.PrefixFilter - @param {String} key the cache key as a string. - @returns {Object} returns this so that calls can be chained. - */ - cacheKey: function (key) { - if (key == null) { - return filter.prefix._cache_key; - } - - filter.prefix._cache_key = key; - return this; - }, - - /** - Returns the filter container as a JSON string - - @member ejs.PrefixFilter - @returns {String} JSON representation of the prefixFilter object - */ - toString: function () { - return JSON.stringify(filter); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.PrefixFilter - @returns {String} the type of object - */ - _type: function () { - return 'filter'; - }, - - /** - Returns the filter object. - - @member ejs.PrefixFilter - @returns {Object} filter object - */ - _self: function () { - return filter; - } - }; - }; - - /** - @class -

    Wraps any query to be used as a filter. Can be placed within queries - that accept a filter.

    - -

    The result of the filter is not cached by default. Set the cache - parameter to true to cache the result of the filter. This is handy when the - same query is used on several (many) other queries.

    - -

    Note, the process of caching the first execution is higher when not - caching (since it needs to satisfy different queries).

    - - @name ejs.QueryFilter - - @desc - Filters documents matching the wrapped query. - - @param {Object} qry A valid query object. - */ - ejs.QueryFilter = function (qry) { - - if (!isQuery(qry)) { - throw new TypeError('Argument must be a Query'); - } - - /** - The internal query object. Use _self() - @member ejs.QueryFilter - @property {Object} query - */ - var filter = { - fquery: { - query: qry._self() - } - }; - - return { - - /** - Sets the query - - @member ejs.QueryFilter - @param {Object} q A valid Query object - @returns {Object} returns this so that calls can be chained. - */ - query: function (q) { - if (q == null) { - return filter.fquery.query; - } - - if (!isQuery(q)) { - throw new TypeError('Argument must be a Query'); - } - - filter.fquery.query = q._self(); - return this; - }, - - /** - Sets the filter name. - - @member ejs.QueryFilter - @param {String} name A name for the filter. - @returns {Object} returns this so that calls can be chained. - */ - name: function (name) { - if (name == null) { - return filter.fquery._name; - } - - filter.fquery._name = name; - return this; - }, - - /** - Enable or disable caching of the filter - - @member ejs.QueryFilter - @param {Boolean} trueFalse True to cache the filter, false otherwise. - @returns {Object} returns this so that calls can be chained. - */ - cache: function (trueFalse) { - if (trueFalse == null) { - return filter.fquery._cache; - } - - filter.fquery._cache = trueFalse; - return this; - }, - - /** - Sets the cache key. - - @member ejs.QueryFilter - @param {String} key the cache key as a string. - @returns {Object} returns this so that calls can be chained. - */ - cacheKey: function (key) { - if (key == null) { - return filter.fquery._cache_key; - } - - filter.fquery._cache_key = key; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.QueryFilter - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(filter); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.QueryFilter - @returns {String} the type of object - */ - _type: function () { - return 'filter'; - }, - - /** - Retrieves the internal filter object. This is typically used by - internal API functions so use with caution. - - @member ejs.QueryFilter - @returns {String} returns this object's internal filter property. - */ - _self: function () { - return filter; - } - }; - }; - - /** - @class -

    Matches documents with fields that have terms within a certain range.

    - - @name ejs.RangeFilter - - @desc - Filters documents with fields that have terms within a certain range. - - @param {String} field A valid field name. - */ - ejs.RangeFilter = function (field) { - - /** - The internal filter object. Use get() - @member ejs.RangeFilter - @property {Object} filter - */ - var filter = { - range: {} - }; - - filter.range[field] = {}; - - return { - - /** - The field to run the filter against. - - @member ejs.RangeFilter - @param {String} f A single field name. - @returns {Object} returns this so that calls can be chained. - */ - field: function (f) { - var oldValue = filter.range[field]; - - if (f == null) { - return field; - } - - delete filter.range[field]; - field = f; - filter.range[f] = oldValue; - - return this; - }, - - /** - The lower bound. Defaults to start from the first. - - @member ejs.RangeFilter - @param {Variable Type} f the lower bound value, type depends on field type - @returns {Object} returns this so that calls can be chained. - */ - from: function (f) { - if (f == null) { - return filter.range[field].from; - } - - filter.range[field].from = f; - return this; - }, - - /** - The upper bound. Defaults to unbounded. - - @member ejs.RangeFilter - @param {Variable Type} t the upper bound value, type depends on field type - @returns {Object} returns this so that calls can be chained. - */ - to: function (t) { - if (t == null) { - return filter.range[field].to; - } - - filter.range[field].to = t; - return this; - }, - - /** - Should the first from (if set) be inclusive or not. - Defaults to true - - @member ejs.RangeFilter - @param {Boolean} trueFalse true to include, false to exclude - @returns {Object} returns this so that calls can be chained. - */ - includeLower: function (trueFalse) { - if (trueFalse == null) { - return filter.range[field].include_lower; - } - - filter.range[field].include_lower = trueFalse; - return this; - }, - - /** - Should the last to (if set) be inclusive or not. Defaults to true. - - @member ejs.RangeFilter - @param {Boolean} trueFalse true to include, false to exclude - @returns {Object} returns this so that calls can be chained. - */ - includeUpper: function (trueFalse) { - if (trueFalse == null) { - return filter.range[field].include_upper; - } - - filter.range[field].include_upper = trueFalse; - return this; - }, - - /** - Greater than value. Same as setting from to the value, and - include_lower to false, - - @member ejs.RangeFilter - @param {Variable Type} val the value, type depends on field type - @returns {Object} returns this so that calls can be chained. - */ - gt: function (val) { - if (val == null) { - return filter.range[field].gt; - } - - filter.range[field].gt = val; - return this; - }, - - /** - Greater than or equal to value. Same as setting from to the value, - and include_lower to true. - - @member ejs.RangeFilter - @param {Variable Type} val the value, type depends on field type - @returns {Object} returns this so that calls can be chained. - */ - gte: function (val) { - if (val == null) { - return filter.range[field].gte; - } - - filter.range[field].gte = val; - return this; - }, - - /** - Less than value. Same as setting to to the value, and include_upper - to false. - - @member ejs.RangeFilter - @param {Variable Type} val the value, type depends on field type - @returns {Object} returns this so that calls can be chained. - */ - lt: function (val) { - if (val == null) { - return filter.range[field].lt; - } - - filter.range[field].lt = val; - return this; - }, - - /** - Less than or equal to value. Same as setting to to the value, - and include_upper to true. - - @member ejs.RangeFilter - @param {Variable Type} val the value, type depends on field type - @returns {Object} returns this so that calls can be chained. - */ - lte: function (val) { - if (val == null) { - return filter.range[field].lte; - } - - filter.range[field].lte = val; - return this; - }, - - /** - Sets the filter name. - - @member ejs.RangeFilter - @param {String} name A name for the filter. - @returns {Object} returns this so that calls can be chained. - */ - name: function (name) { - if (name == null) { - return filter.range._name; - } - - filter.range._name = name; - return this; - }, - - /** - Enable or disable caching of the filter - - @member ejs.RangeFilter - @param {Boolean} trueFalse True to cache the filter, false otherwise. - @returns {Object} returns this so that calls can be chained. - */ - cache: function (trueFalse) { - if (trueFalse == null) { - return filter.range._cache; - } - - filter.range._cache = trueFalse; - return this; - }, - - /** - Sets the cache key. - - @member ejs.RangeFilter - @param {String} key the cache key as a string. - @returns {Object} returns this so that calls can be chained. - */ - cacheKey: function (key) { - if (key == null) { - return filter.range._cache_key; - } - - filter.range._cache_key = key; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.RangeFilter - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(filter); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.RangeFilter - @returns {String} the type of object - */ - _type: function () { - return 'filter'; - }, - - /** - Retrieves the internal filter object. This is typically used by - internal API functions so use with caution. - - @member ejs.RangeFilter - @returns {String} returns this object's internal filter property. - */ - _self: function () { - return filter; - } - }; - }; - - /** - @class -

    Filters documents that have a field value matching a regular expression. - Based on Lucene 4.0 RegexpFilter which uses automaton to efficiently iterate - over index terms.

    - - @name ejs.RegexpFilter - - @desc - Matches documents that have fields matching a regular expression. - - @param {String} field A valid field name. - @param {String} value A regex pattern. - */ - ejs.RegexpFilter = function (field, value) { - - /** - The internal filter object. Use get() - @member ejs.RegexpFilter - @property {Object} filter - */ - var filter = { - regexp: {} - }; - - filter.regexp[field] = { - value: value - }; - - return { - - /** - The field to run the filter against. - - @member ejs.RegexpFilter - @param {String} f A single field name. - @returns {Object} returns this so that calls can be chained. - */ - field: function (f) { - var oldValue = filter.regexp[field]; - - if (f == null) { - return field; - } - - delete filter.regexp[field]; - field = f; - filter.regexp[f] = oldValue; - - return this; - }, - - /** - The regexp value. - - @member ejs.RegexpFilter - @param {String} p A string regexp - @returns {Object} returns this so that calls can be chained. - */ - value: function (p) { - if (p == null) { - return filter.regexp[field].value; - } - - filter.regexp[field].value = p; - return this; - }, - - /** - The regex flags to use. Valid flags are: - - INTERSECTION - Support for intersection notation - COMPLEMENT - Support for complement notation - EMPTY - Support for the empty language symbol: # - ANYSTRING - Support for the any string symbol: @ - INTERVAL - Support for numerical interval notation: - NONE - Disable support for all syntax options - ALL - Enables support for all syntax options - - Use multiple flags by separating with a "|" character. Example: - - INTERSECTION|COMPLEMENT|EMPTY - - @member ejs.RegexpFilter - @param {String} f The flags as a string, separate multiple flags with "|". - @returns {Object} returns this so that calls can be chained. - */ - flags: function (f) { - if (f == null) { - return filter.regexp[field].flags; - } - - filter.regexp[field].flags = f; - return this; - }, - - /** - The regex flags to use as a numeric value. Advanced use only, - it is probably better to stick with the flags option. - - @member ejs.RegexpFilter - @param {String} v The flags as a numeric value. - @returns {Object} returns this so that calls can be chained. - */ - flagsValue: function (v) { - if (v == null) { - return filter.regexp[field].flags_value; - } - - filter.regexp[field].flags_value = v; - return this; - }, - - /** - Sets the filter name. - - @member ejs.RegexpFilter - @param {String} name A name for the filter. - @returns {Object} returns this so that calls can be chained. - */ - name: function (name) { - if (name == null) { - return filter.regexp._name; - } - - filter.regexp._name = name; - return this; - }, - - /** - Enable or disable caching of the filter - - @member ejs.RegexpFilter - @param {Boolean} trueFalse True to cache the filter, false otherwise. - @returns {Object} returns this so that calls can be chained. - */ - cache: function (trueFalse) { - if (trueFalse == null) { - return filter.regexp._cache; - } - - filter.regexp._cache = trueFalse; - return this; - }, - - /** - Sets the cache key. - - @member ejs.RegexpFilter - @param {String} key the cache key as a string. - @returns {Object} returns this so that calls can be chained. - */ - cacheKey: function (key) { - if (key == null) { - return filter.regexp._cache_key; - } - - filter.regexp._cache_key = key; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.RegexpFilter - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(filter); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.RegexpFilter - @returns {String} the type of object - */ - _type: function () { - return 'filter'; - }, - - /** - Retrieves the internal filter object. This is typically used by - internal API functions so use with caution. - - @member ejs.RegexpFilter - @returns {String} returns this object's internal filter property. - */ - _self: function () { - return filter; - } - }; - }; - - /** - @class -

    A filter allowing to define scripts as filters

    - - @name ejs.ScriptFilter - - @desc - A filter allowing to define scripts as filters. - - @param {String} script The script as a string. - */ - ejs.ScriptFilter = function (script) { - - /** - The internal filter object. Use get() - @member ejs.ScriptFilter - @property {Object} filter - */ - var filter = { - script: { - script: script - } - }; - - return { - - /** - Sets the script. - - @member ejs.ScriptFilter - @param {String} s The script as a string. - @returns {Object} returns this so that calls can be chained. - */ - script: function (s) { - if (s == null) { - return filter.script.script; - } - - filter.script.script = s; - return this; - }, - - /** - Sets parameters that will be applied to the script. Overwrites - any existing params. - - @member ejs.ScriptFilter - @param {Object} p An object where the keys are the parameter name and - values are the parameter value. - @returns {Object} returns this so that calls can be chained. - */ - params: function (p) { - if (p == null) { - return filter.script.params; - } - - filter.script.params = p; - return this; - }, - - /** - Sets the script language. - - @member ejs.ScriptFilter - @param {String} lang The script language, default mvel. - @returns {Object} returns this so that calls can be chained. - */ - lang: function (lang) { - if (lang == null) { - return filter.script.lang; - } - - filter.script.lang = lang; - return this; - }, - - /** - Sets the filter name. - - @member ejs.ScriptFilter - @param {String} name A name for the filter. - @returns {Object} returns this so that calls can be chained. - */ - name: function (name) { - if (name == null) { - return filter.script._name; - } - - filter.script._name = name; - return this; - }, - - /** - Enable or disable caching of the filter - - @member ejs.ScriptFilter - @param {Boolean} trueFalse True to cache the filter, false otherwise. - @returns {Object} returns this so that calls can be chained. - */ - cache: function (trueFalse) { - if (trueFalse == null) { - return filter.script._cache; - } - - filter.script._cache = trueFalse; - return this; - }, - - /** - Sets the cache key. - - @member ejs.ScriptFilter - @param {String} key the cache key as a string. - @returns {Object} returns this so that calls can be chained. - */ - cacheKey: function (key) { - if (key == null) { - return filter.script._cache_key; - } - - filter.script._cache_key = key; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.ScriptFilter - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(filter); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.ScriptFilter - @returns {String} the type of object - */ - _type: function () { - return 'filter'; - }, - - /** - Retrieves the internal filter object. This is typically used by - internal API functions so use with caution. - - @member ejs.ScriptFilter - @returns {String} returns this object's internal filter property. - */ - _self: function () { - return filter; - } - }; - }; - - /** - @class -

    Constructs a filter for docs matching any of the terms added to this - object. Unlike a RangeFilter this can be used for filtering on multiple - terms that are not necessarily in a sequence.

    - - @name ejs.TermFilter - - @desc - Constructs a filter for docs matching the term added to this object. - - @param {string} fieldName The document field/fieldName to execute the filter against. - @param {string} term The literal term used to filter the results. - */ - ejs.TermFilter = function (fieldName, term) { - - /** - The internal filter object. Use the get() method for access. - @member ejs.TermFilter - @property {Object} filter - */ - var filter = { - term: {} - }; - - filter.term[fieldName] = term; - - return { - - /** - Provides access to the filter fieldName used to construct the - termFilter object. - - @member ejs.TermFilter - @param {String} f the fieldName term - @returns {Object} returns this so that calls can be chained. - When k is not specified, Returns {String}, the filter fieldName used to construct - the termFilter object. - */ - field: function (f) { - var oldValue = filter.term[fieldName]; - - if (f == null) { - return fieldName; - } - - delete filter.term[fieldName]; - fieldName = f; - filter.term[fieldName] = oldValue; - - return this; - }, - - /** - Provides access to the filter term used to construct the - termFilter object. - - @member ejs.TermFilter - @returns {Object} returns this so that calls can be chained. - When k is not specified, Returns {String}, the filter term used - to construct the termFilter object. - */ - term: function (v) { - if (v == null) { - return filter.term[fieldName]; - } - - filter.term[fieldName] = v; - return this; - }, - - /** - Sets the filter name. - - @member ejs.TermFilter - @param {String} name A name for the filter. - @returns {Object} returns this so that calls can be chained. - */ - name: function (name) { - if (name == null) { - return filter.term._name; - } - - filter.term._name = name; - return this; - }, - - /** - Enable or disable caching of the filter - - @member ejs.TermFilter - @param {Boolean} trueFalse True to cache the filter, false otherwise. - @returns {Object} returns this so that calls can be chained. - */ - cache: function (trueFalse) { - if (trueFalse == null) { - return filter.term._cache; - } - - filter.term._cache = trueFalse; - return this; - }, - - /** - Sets the cache key. - - @member ejs.TermFilter - @param {String} key the cache key as a string. - @returns {Object} returns this so that calls can be chained. - */ - cacheKey: function (key) { - if (key == null) { - return filter.term._cache_key; - } - - filter.term._cache_key = key; - return this; - }, - - /** - Serializes the internal filter object as a JSON string. - - @member ejs.TermFilter - @returns {String} Returns a JSON representation of the termFilter object. - */ - toString: function () { - return JSON.stringify(filter); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.TermFilter - @returns {String} the type of object - */ - _type: function () { - return 'filter'; - }, - - /** - Returns the filter object. For internal use only. - - @member ejs.TermFilter - @returns {Object} Returns the object's filter property. - */ - _self: function () { - return filter; - } - }; - }; - - /** - @class -

    Filters documents that have fields that match any of the provided - terms (not analyzed)

    - - @name ejs.TermsFilter - - @desc - A Filter that matches documents containing provided terms. - - @param {String} field the document field/key to filter against - @param {String || Array} terms a single term or an array of terms. - */ - ejs.TermsFilter = function (field, terms) { - - /** - The internal filter object. Use get() - @member ejs.TermsFilter - @property {Object} filter - */ - var filter = { - terms: {} - }, - - // make sure we are setup for a list of terms - setupTerms = function () { - if (!isArray(filter.terms[field])) { - filter.terms[field] = []; - } - }, - - // make sure we are setup for a terms lookup - setupLookup = function () { - if (isArray(filter.terms[field])) { - filter.terms[field] = {}; - } - }; - - if (isArray(terms)) { - filter.terms[field] = terms; - } else { - filter.terms[field] = [terms]; - } - - return { - - /** - Sets the fields to filter against. - - @member ejs.TermsFilter - @param {String} f A valid field name. - @returns {Object} returns this so that calls can be chained. - */ - field: function (f) { - var oldValue = filter.terms[field]; - - if (f == null) { - return field; - } - - delete filter.terms[field]; - field = f; - filter.terms[f] = oldValue; - - return this; - }, - - /** - Sets the terms. If t is a String, it is added to the existing - list of terms. If t is an array, the list of terms replaces the - existing terms. - - @member ejs.TermsFilter - @param {String || Array} t A single term or an array or terms. - @returns {Object} returns this so that calls can be chained. - */ - terms: function (t) { - setupTerms(); - if (t == null) { - return filter.terms[field]; - } - - if (isArray(t)) { - filter.terms[field] = t; - } else { - filter.terms[field].push(t); - } - - return this; - }, - - /** - Sets the index the document containing the terms is in when - performing a terms lookup. Defaults to the index currently - being searched. - - @since elasticsearch 0.90 - @member ejs.TermsFilter - @param {String} idx A valid index name. - @returns {Object} returns this so that calls can be chained. - */ - index: function (idx) { - setupLookup(); - if (idx == null) { - return filter.terms[field].index; - } - - filter.terms[field].index = idx; - return this; - }, - - /** - Sets the type the document containing the terms when performing a - terms lookup. - - @since elasticsearch 0.90 - @member ejs.TermsFilter - @param {String} type A valid type name. - @returns {Object} returns this so that calls can be chained. - */ - type: function (type) { - setupLookup(); - if (type == null) { - return filter.terms[field].type; - } - - filter.terms[field].type = type; - return this; - }, - - - /** - Sets the document id of the document containing the terms to use - when performing a terms lookup. - - @since elasticsearch 0.90 - @member ejs.TermsFilter - @param {String} id A valid index name. - @returns {Object} returns this so that calls can be chained. - */ - id: function (id) { - setupLookup(); - if (id == null) { - return filter.terms[field].id; - } - - filter.terms[field].id = id; - return this; - }, - - /** - Sets the path/field name where the terms in the source document - are located when performing a terms lookup. - - @since elasticsearch 0.90 - @member ejs.TermsFilter - @param {String} path A valid index name. - @returns {Object} returns this so that calls can be chained. - */ - path: function (path) { - setupLookup(); - if (path == null) { - return filter.terms[field].path; - } - - filter.terms[field].path = path; - return this; - }, - - /** - Sets the routing value for the source document when performing a - terms lookup. - - @since elasticsearch 0.90.2 - @member ejs.TermsFilter - @param {String} path A valid index name. - @returns {Object} returns this so that calls can be chained. - */ - routing: function (r) { - setupLookup(); - if (r == null) { - return filter.terms[field].routing; - } - - filter.terms[field].routing = r; - return this; - }, - - /** - Enable or disable caching of the lookup - - @member ejs.TermsFilter - @param {Boolean} trueFalse True to cache the lookup, false otherwise. - @returns {Object} returns this so that calls can be chained. - */ - cacheLookup: function (trueFalse) { - setupLookup(); - if (trueFalse == null) { - return filter.terms[field].cache; - } - - filter.terms[field].cache = trueFalse; - return this; - }, - - /** - Sets the way terms filter executes is by iterating over the terms - provided and finding matches docs (loading into a bitset) and - caching it. Valid values are: plain, bool, bool_nocache, and, - and_nocache, or, or_nocache. Defaults to plain. - - @member ejs.TermsFilter - @param {String} e A valid execution method. - @returns {Object} returns this so that calls can be chained. - */ - execution: function (e) { - if (e == null) { - return filter.terms.execution; - } - - e = e.toLowerCase(); - if (e === 'plain' || e === 'bool' || e === 'bool_nocache' || - e === 'and' || e === 'and_nocache' || e === 'or' || e === 'or_nocache') { - filter.terms.execution = e; - } - - return this; - }, - - /** - Sets the filter name. - - @member ejs.TermsFilter - @param {String} name A name for the filter. - @returns {Object} returns this so that calls can be chained. - */ - name: function (name) { - if (name == null) { - return filter.terms._name; - } - - filter.terms._name = name; - return this; - }, - - /** - Enable or disable caching of the filter - - @member ejs.TermsFilter - @param {Boolean} trueFalse True to cache the filter, false otherwise. - @returns {Object} returns this so that calls can be chained. - */ - cache: function (trueFalse) { - if (trueFalse == null) { - return filter.terms._cache; - } - - filter.terms._cache = trueFalse; - return this; - }, - - /** - Sets the cache key. - - @member ejs.TermsFilter - @param {String} key the cache key as a string. - @returns {Object} returns this so that calls can be chained. - */ - cacheKey: function (key) { - if (key == null) { - return filter.terms._cache_key; - } - - filter.terms._cache_key = key; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.TermsFilter - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(filter); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.TermsFilter - @returns {String} the type of object - */ - _type: function () { - return 'filter'; - }, - - /** - Retrieves the internal filter object. This is typically used by - internal API functions so use with caution. - - @member ejs.TermsFilter - @returns {String} returns this object's internal filter property. - */ - _self: function () { - return filter; - } - }; - }; - - /** - @class -

    A Filter that filters results by a specified index type.

    - - @name ejs.TypeFilter - - @desc - Filter results by a specified index type. - - @param {String} type the index type to filter on. - */ - ejs.TypeFilter = function (type) { - - /** - The internal filter object. Use get() - - @member ejs.TypeFilter - @property {Object} filter - */ - var filter = { - "type": { - "value": type - } - }; - - return { - - /** - * Sets the type - - @member ejs.TypeFilter - @param {String} type the index type to filter on - @returns {Object} returns this so that calls can be chained. - */ - type: function (type) { - if (type == null) { - return filter.type.value; - } - - filter.type.value = type; - return this; - }, - - /** - Returns the filter container as a JSON string - - @member ejs.TypeFilter - @returns {String} JSON representation of the notFilter object - */ - toString: function () { - return JSON.stringify(filter); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.TypeFilter - @returns {String} the type of object - */ - _type: function () { - return 'filter'; - }, - - /** - Returns the filter object. - - @member ejs.TypeFilter - @returns {Object} filter object - */ - _self: function () { - return filter; - } - }; - }; - - /** - @class -

    The Document object provides an interface for working with - Documents. Some example operations avaiable are storing documents, - retreiving documents, updating documents, and deleting documents from an - index.

    - - @name ejs.Document - - @desc - Object used to create, replace, update, and delete documents - -
    -

    - Tip: - It is not necessary to first create a index or content-type. If either of these - do not exist, they will be automatically created when you attempt to store the document. -

    -
    - - @param {String} index The index the document belongs to. - @param {String} type The type the document belongs to. - @param {String} id The id of the document. The id is required except - for indexing. If no id is specified during indexing, one will be - created for you. - - */ - ejs.Document = function (index, type, id) { - - var - params = {}, - paramExcludes = ['upsert', 'source', 'script', 'lang', 'params']; - - return { - - /** - Sets the index the document belongs to. - - @member ejs.Document - @param {String} idx The index name - @returns {Object} returns this so that calls can be chained. - */ - index: function (idx) { - if (idx == null) { - return index; - } - - index = idx; - return this; - }, - - /** - Sets the type of the document. - - @member ejs.Document - @param {String} t The type name - @returns {Object} returns this so that calls can be chained. - */ - type: function (t) { - if (t == null) { - return type; - } - - type = t; - return this; - }, - - /** - Sets the id of the document. - - @member ejs.Document - @param {String} i The document id - @returns {Object} returns this so that calls can be chained. - */ - id: function (i) { - if (i == null) { - return id; - } - - id = i; - return this; - }, - - /** -

    Sets the routing value.

    - -

    By default, the shard the document is placed on is controlled by using a - hash of the document’s id value. For more explicit control, this routing value - will be fed into the hash function used by the router.

    - -

    This option is valid during the following operations: - index, delete, get, and update

    - - @member ejs.Document - @param {String} route The routing value - @returns {Object} returns this so that calls can be chained. - */ - routing: function (route) { - if (route == null) { - return params.routing; - } - - params.routing = route; - return this; - }, - - /** -

    Sets parent value for a child document.

    - -

    When indexing a child document, the routing value is automatically set to be - the same as it’s parent, unless the routing value is explicitly specified - using the routing parameter.

    - -

    This option is valid during the following operations: - index, delete, get, and update.

    - - @member ejs.Document - @param {String} parent The parent value - @returns {Object} returns this so that calls can be chained. - */ - parent: function (parent) { - if (parent == null) { - return params.parent; - } - - params.parent = parent; - return this; - }, - - /** -

    Sets timestamp of the document.

    - -

    By default the timestamp will be set to the time the docuement was indexed.

    - -

    This option is valid during the following operations: - index and update

    - - @member ejs.Document - @param {String} parent The parent value - @returns {Object} returns this so that calls can be chained. - */ - timestamp: function (ts) { - if (ts == null) { - return params.timestamp; - } - - params.timestamp = ts; - return this; - }, - - /** -

    Sets the documents time to live (ttl).

    - - The expiration date that will be set for a document with a provided ttl is relative - to the timestamp of the document, meaning it can be based on the time of indexing or - on any time provided.

    - -

    The provided ttl must be strictly positive and can be a number (in milliseconds) - or any valid time value such as "1d", "2h", "5m", etc.

    - -

    This option is valid during the following operations: - index and update

    - - @member ejs.Document - @param {String} length The amount of time after which the document - will expire. - @returns {Object} returns this so that calls can be chained. - */ - ttl: function (length) { - if (length == null) { - return params.ttl; - } - - params.ttl = length; - return this; - }, - - /** -

    Set's a timeout for the given operation.

    - - If the primary shard has not completed the operation before this value, an error will - occur. The default timeout is 1 minute. The provided timeout must be strictly positive - and can be a number (in milliseconds) or any valid time value such as - "1d", "2h", "5m", etc.

    - -

    This option is valid during the following operations: - index, delete, and update

    - - @member ejs.Document - @param {String} length The amount of time after which the operation - will timeout. - @returns {Object} returns this so that calls can be chained. - */ - timeout: function (length) { - if (length == null) { - return params.timeout; - } - - params.timeout = length; - return this; - }, - - /** -

    Enables the index to be refreshed immediately after the operation - occurs. This is an advanced setting and can lead to performance - issues.

    - -

    This option is valid during the following operations: - index, delete, get, and update

    - - @member ejs.Document - @param {Boolean} trueFalse If the index should be refreshed or not. - @returns {Object} returns this so that calls can be chained. - */ - refresh: function (trueFalse) { - if (trueFalse == null) { - return params.refresh; - } - - params.refresh = trueFalse; - return this; - }, - - /** -

    Sets the document version.

    - - Used for optimistic concurrency control when set. If the version of the currently - indexed document is less-than or equal to the version specified, an error is produced, - otherwise the operation is permitted.

    - -

    By default, internal versioning is used that starts at 1 and - increments with each update.

    - -

    This option is valid during the following operations: - get, index, delete, and update

    - - @member ejs.Document - @param {Long} version A positive long value - @returns {Object} returns this so that calls can be chained. - */ - version: function (version) { - if (version == null) { - return params.version; - } - - params.version = version; - return this; - }, - - /** -

    Sets the version type.

    - -

    Possible values are:

    - -
    -
    internal - the default
    -
    external - to use your own version (ie. version number from a database)
    -
    - -

    This option is valid during the following operations: - get, index, delete, and update

    - - @member ejs.Document - @param {String} vt A version type (internal or external) - @returns {Object} returns this so that calls can be chained. - */ - versionType: function (vt) { - // internal or external - if (vt == null) { - return params.version_type; - } - - vt = vt.toLowerCase(); - if (vt === 'internal' || vt === 'external') { - params.version_type = vt; - } - - return this; - }, - - /** -

    Sets the indexing operation type.

    - -

    Valid values are:

    - -
    -
    index - the default, create or replace
    -
    create - create only
    -
    - -

    This option is valid during the following operations: - index

    - - @member ejs.Document - @param {String} op The operation type (index or create) - @returns {Object} returns this so that calls can be chained. - */ - opType: function (op) { - if (op == null) { - return params.op_type; - } - - op = op.toLowerCase(); - if (op === 'index' || op === 'create') { - params.op_type = op; - } - - return this; - }, - - /** -

    Sets the replication mode.

    - -

    Valid values are:

    - -
    -
    async - asynchronous replication to slaves
    -
    sync - synchronous replication to the slaves
    -
    default - the currently configured system default.
    -
    - -

    This option is valid during the following operations: - index, delete, and update

    - - @member ejs.Document - @param {String} r The replication mode (async, sync, or default) - @returns {Object} returns this so that calls can be chained. - */ - replication: function (r) { - if (r == null) { - return params.replication; - } - - r = r.toLowerCase(); - if (r === 'async' || r === 'sync' || r === 'default') { - params.replication = r; - } - - return this; - }, - - /** -

    Sets the write consistency.

    - -

    Valid values are:

    - -
    -
    one - only requires write to one shard
    -
    quorum - requires writes to quorum (N/2 + 1)
    -
    all - requires write to succeed on all shards
    -
    default - the currently configured system default
    -
    - -

    This option is valid during the following operations: - index, delete, and update

    - - @member ejs.Document - @param {String} c The write consistency (one, quorum, all, or default) - @returns {Object} returns this so that calls can be chained. - */ - consistency: function (c) { - if (c == null) { - return params.consistency; - } - - c = c.toLowerCase(); - if (c === 'default' || c === 'one' || c === 'quorum' || c === 'all') { - params.consistency = c; - } - - return this; - }, - - /** -

    Sets the preference of which shard replicas to execute the get - request on.

    - -

    By default, the operation is randomized between the shard replicas. - This value can be:

    - -
    -
    _primary - execute only on the primary shard
    -
    _local - the local shard if possible
    -
    any string value - to guarentee the same shards will always be used
    -
    - -

    This option is valid during the following operations: - get

    - - @member ejs.Document - @param {String} p The preference value as a string - @returns {Object} returns this so that calls can be chained. - */ - preference: function (p) { - if (p == null) { - return params.preference; - } - - params.preference = p; - return this; - }, - - /** -

    Sets if the get request is performed in realtime or waits for - the indexing operations to complete. By default it is realtime.

    - -

    This option is valid during the following operations: - get

    - - @member ejs.Document - @param {Boolean} trueFalse If realtime get is used or not. - @returns {Object} returns this so that calls can be chained. - */ - realtime: function (trueFalse) { - if (trueFalse == null) { - return params.realtime; - } - - params.realtime = trueFalse; - return this; - }, - - /** -

    Sets the fields of the document to return.

    - -

    By default the _source field is returned. Pass a single value - to append to the current list of fields, pass an array to overwrite the current - list of fields. The returned fields will either be loaded if they are stored, - or fetched from the _source

    - -

    This option is valid during the following operations: - get and update

    - - @member ejs.Document - @param {String || Array} fields a single field name or array of field names. - @returns {Object} returns this so that calls can be chained. - */ - fields: function (fields) { - if (params.fields == null) { - params.fields = []; - } - - if (fields == null) { - return params.fields; - } - - if (isString(fields)) { - params.fields.push(fields); - } else if (isArray(fields)) { - params.fields = fields; - } else { - throw new TypeError('Argument must be string or array'); - } - - return this; - }, - - /** -

    Sets the update script.

    - -

    This option is valid during the following operations: - update

    - - @member ejs.Document - @param {String} script a script to use for docuement updates - @returns {Object} returns this so that calls can be chained. - */ - script: function (script) { - if (script == null) { - return params.script; - } - - params.script = script; - return this; - }, - - /** -

    Sets the update script lanauge. Defaults to mvel

    . - -

    This option is valid during the following operations: - update

    - - @member ejs.Document - @param {String} lang a valid script lanauge type such as mvel. - @returns {Object} returns this so that calls can be chained. - */ - lang: function (lang) { - if (lang == null) { - return params.lang; - } - - params.lang = lang; - return this; - }, - - /** -

    Sets the parameters sent to the update script.

    - -

    The params must be an object where the key is the parameter name and - the value is the parameter value to use in the script.

    - -

    This option is valid during the following operations: - update

    - - @member ejs.Document - @param {Object} p a object with script parameters. - @returns {Object} returns this so that calls can be chained. - */ - params: function (p) { - // accept object, prefix keys as sp_{key} - if (p == null) { - return params.params; - } - - if (!isObject(p)) { - throw new TypeError('Argument must be an object'); - } - - params.params = p; - return this; - }, - - /** -

    Sets how many times to retry if there is a version conflict - between getting the document and indexing / deleting it.

    - -

    Defaults to 0.

    - -

    This option is valid during the following operations: - update

    - - @member ejs.Document - @param {Integer} num the number of times to retry operation. - @returns {Object} returns this so that calls can be chained. - */ - retryOnConflict: function (num) { - if (num == null) { - return params.retry_on_conflict; - } - - params.retry_on_conflict = num; - return this; - }, - - /** -

    Sets the upsert document.

    - -

    The upsert document is used during updates when the specified document - you are attempting to update does not exist.

    - -

    This option is valid during the following operations: - update

    - - @member ejs.Document - @param {Object} doc the upset document. - @returns {Object} returns this so that calls can be chained. - */ - upsert: function (doc) { - if (doc == null) { - return params.upsert; - } - - if (!isObject(doc)) { - throw new TypeError('Argument must be an object'); - } - - params.upsert = doc; - return this; - }, - - /** -

    Sets if doc (source) should be used for the upsert value.

    - -

    This option is valid during the following operations: - update

    - - @member ejs.Document - @param {Boolean} trueFalse If realtime get is used or not. - @returns {Object} returns this so that calls can be chained. - */ - docAsUpsert: function (trueFalse) { - if (trueFalse == null) { - return params.doc_as_upsert; - } - - params.doc_as_upsert = trueFalse; - return this; - }, - - /** -

    Sets the source document.

    - -

    When set during an update operation, it is used as the partial update document.

    - -

    This option is valid during the following operations: - index and update

    - - @member ejs.Document - @param {Object} doc the source document. - @returns {Object} returns this so that calls can be chained. - */ - source: function (doc) { - if (doc == null) { - return params.source; - } - - if (!isObject(doc)) { - throw new TypeError('Argument must be an object'); - } - - params.source = doc; - return this; - }, - - /** -

    Allows you to serialize this object into a JSON encoded string.

    - - @member ejs.Document - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(params); - }, - - /** -

    The type of ejs object. For internal use only.

    - - @member ejs.Document - @returns {String} the type of object - */ - _type: function () { - return 'document'; - }, - - /** -

    Retrieves the internal document object. This is - typically used by internal API functions so use with caution.

    - - @member ejs.Document - @returns {Object} returns this object's internal object. - */ - _self: function () { - return params; - }, - - /** -

    Retrieves a document from the given index and type.

    - - @member ejs.Document - @param {Function} successcb A callback function that handles the response. - @param {Function} errorcb A callback function that handles errors. - @returns {Object} The return value is dependent on client implementation. - */ - doGet: function (successcb, errorcb) { - // make sure the user has set a client - if (ejs.client == null) { - throw new Error("No Client Set"); - } - - if (index == null || type == null || id == null) { - throw new Error('Index, Type, and ID must be set'); - } - - // we don't need to convert the client params to a string - // on get requests, just create the url and pass the client - // params as the data - var url = '/' + index + '/' + type + '/' + id; - - return ejs.client.get(url, genClientParams(params, paramExcludes), - successcb, errorcb); - }, - - /** -

    Stores a document in the given index and type. If no id - is set, one is created during indexing.

    - - @member ejs.Document - @param {Function} successcb A callback function that handles the response. - @param {Function} errorcb A callback function that handles errors. - @returns {Object} The return value is dependent on client implementation. - */ - doIndex: function (successcb, errorcb) { - // make sure the user has set a client - if (ejs.client == null) { - throw new Error("No Client Set"); - } - - if (index == null || type == null) { - throw new Error('Index and Type must be set'); - } - - if (params.source == null) { - throw new Error('No source document found'); - } - - var url = '/' + index + '/' + type, - data = JSON.stringify(params.source), - paramStr = genParamStr(params, paramExcludes), - response; - - if (id != null) { - url = url + '/' + id; - } - - if (paramStr !== '') { - url = url + '?' + paramStr; - } - - // do post if id not set so one is created - if (id == null) { - response = ejs.client.post(url, data, successcb, errorcb); - } else { - // put when id is specified - response = ejs.client.put(url, data, successcb, errorcb); - } - - return response; - }, - - /** -

    Updates a document in the given index and type.

    - -

    If the document is not found in the index, the "upsert" value is used - if set. The document is updated via an update script or partial document.

    - -

    To use a script, set the script option, to use a - partial document, set the source with the partial document.

    - - @member ejs.Document - @param {Function} successcb A callback function that handles the response. - @param {Function} errorcb A callback function that handles errors. - @returns {Object} The return value is dependent on client implementation. - */ - doUpdate: function (successcb, errorcb) { - // make sure the user has set a client - if (ejs.client == null) { - throw new Error("No Client Set"); - } - - if (index == null || type == null || id == null) { - throw new Error('Index, Type, and ID must be set'); - } - - if (params.script == null && params.source == null) { - throw new Error('Update script or document required'); - } - - var url = '/' + index + '/' + type + '/' + id + '/_update', - data = {}, - paramStr = genParamStr(params, paramExcludes); - - if (paramStr !== '') { - url = url + '?' + paramStr; - } - - if (params.script != null) { - data.script = params.script; - } - - if (params.lang != null) { - data.lang = params.lang; - } - - if (params.params != null) { - data.params = params.params; - } - - if (params.upsert != null) { - data.upsert = params.upsert; - } - - if (params.source != null) { - data.doc = params.source; - } - - return ejs.client.post(url, JSON.stringify(data), successcb, errorcb); - }, - - /** -

    Deletes the document from the given index and type using the - speciifed id.

    - - @member ejs.Document - @param {Function} successcb A callback function that handles the response. - @param {Function} errorcb A callback function that handles errors. - @returns {void} Returns the value of the callback when executing on the server. - */ - doDelete: function (successcb, errorcb) { - // make sure the user has set a client - if (ejs.client == null) { - throw new Error("No Client Set"); - } - - if (index == null || type == null || id == null) { - throw new Error('Index, Type, and ID must be set'); - } - - var url = '/' + index + '/' + type + '/' + id, - data = '', - paramStr = genParamStr(params, paramExcludes); - - if (paramStr !== '') { - url = url + '?' + paramStr; - } - - return ejs.client.del(url, data, successcb, errorcb); - } - - }; - }; - - - /** - @class -

    A boolQuery allows you to build Boolean query constructs - from individual term or phrase queries. For example you might want to search - for documents containing the terms javascript and python.

    - - @name ejs.BoolQuery - - @desc - A Query that matches documents matching boolean combinations of other - queries, e.g. termQuerys, phraseQuerys or other boolQuerys. - - */ - ejs.BoolQuery = function () { - - /** - The internal query object. Use _self() - @member ejs.BoolQuery - @property {Object} query - */ - var query = { - bool: {} - }; - - return { - - /** - Adds query to boolean container. Given query "must" appear in matching documents. - - @member ejs.BoolQuery - @param {Object} oQuery A valid Query object - @returns {Object} returns this so that calls can be chained. - */ - must: function (oQuery) { - var i, len; - - if (query.bool.must == null) { - query.bool.must = []; - } - - if (oQuery == null) { - return query.bool.must; - } - - if (isQuery(oQuery)) { - query.bool.must.push(oQuery._self()); - } else if (isArray(oQuery)) { - query.bool.must = []; - for (i = 0, len = oQuery.length; i < len; i++) { - if (!isQuery(oQuery[i])) { - throw new TypeError('Argument must be an array of Queries'); - } - - query.bool.must.push(oQuery[i]._self()); - } - } else { - throw new TypeError('Argument must be a Query or array of Queries'); - } - - return this; - }, - - /** - Adds query to boolean container. Given query "must not" appear in matching documents. - - @member ejs.BoolQuery - @param {Object} oQuery A valid query object - @returns {Object} returns this so that calls can be chained. - */ - mustNot: function (oQuery) { - var i, len; - - if (query.bool.must_not == null) { - query.bool.must_not = []; - } - - if (oQuery == null) { - return query.bool.must_not; - } - - if (isQuery(oQuery)) { - query.bool.must_not.push(oQuery._self()); - } else if (isArray(oQuery)) { - query.bool.must_not = []; - for (i = 0, len = oQuery.length; i < len; i++) { - if (!isQuery(oQuery[i])) { - throw new TypeError('Argument must be an array of Queries'); - } - - query.bool.must_not.push(oQuery[i]._self()); - } - } else { - throw new TypeError('Argument must be a Query or array of Queries'); - } - - return this; - }, - - /** - Adds query to boolean container. Given query "should" appear in matching documents. - - @member ejs.BoolQuery - @param {Object} oQuery A valid query object - @returns {Object} returns this so that calls can be chained. - */ - should: function (oQuery) { - var i, len; - - if (query.bool.should == null) { - query.bool.should = []; - } - - if (oQuery == null) { - return query.bool.should; - } - - if (isQuery(oQuery)) { - query.bool.should.push(oQuery._self()); - } else if (isArray(oQuery)) { - query.bool.should = []; - for (i = 0, len = oQuery.length; i < len; i++) { - if (!isQuery(oQuery[i])) { - throw new TypeError('Argument must be an array of Queries'); - } - - query.bool.should.push(oQuery[i]._self()); - } - } else { - throw new TypeError('Argument must be a Query or array of Queries'); - } - - return this; - }, - - /** - Sets the boost value for documents matching the Query. - - @member ejs.BoolQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.bool.boost; - } - - query.bool.boost = boost; - return this; - }, - - /** - Sets if the Query should be enhanced with a - MatchAllQuery in order to act as a pure exclude when - only negative (mustNot) clauses exist. Default: true. - - @member ejs.BoolQuery - @param {String} trueFalse A true/falsethis
    so that calls can be chained. - */ - adjustPureNegative: function (trueFalse) { - if (trueFalse == null) { - return query.bool.adjust_pure_negative; - } - - query.bool.adjust_pure_negative = trueFalse; - return this; - }, - - /** - Enables or disables similarity coordinate scoring of documents - matching the Query. Default: false. - - @member ejs.BoolQuery - @param {String} trueFalse A true/falsethis
    so that calls can be chained. - */ - disableCoord: function (trueFalse) { - if (trueFalse == null) { - return query.bool.disable_coord; - } - - query.bool.disable_coord = trueFalse; - return this; - }, - - /** -

    Sets the number of optional clauses that must match.

    - -

    By default no optional clauses are necessary for a match - (unless there are no required clauses). If this method is used, - then the specified number of clauses is required.

    - -

    Use of this method is totally independent of specifying that - any specific clauses are required (or prohibited). This number will - only be compared against the number of matching optional clauses.

    - - @member ejs.BoolQuery - @param {Integer} minMatch A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - minimumNumberShouldMatch: function (minMatch) { - if (minMatch == null) { - return query.bool.minimum_number_should_match; - } - - query.bool.minimum_number_should_match = minMatch; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.BoolQuery - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.BoolQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - Retrieves the internal query object. This is typically used by - internal API functions so use with caution. - - @member ejs.BoolQuery - @returns {String} returns this object's internal query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    The boosting query can be used to effectively demote results that match - a given query. Unlike the “NOT” clause in bool query, this still selects - documents that contain undesirable terms, but reduces their overall - score.

    - - @name ejs.BoostingQuery - - @desc -

    Constructs a query that can demote search results. A negative boost.

    - - @param {Object} positiveQry Valid query object used to select all matching docs. - @param {Object} negativeQry Valid query object to match the undesirable docs - returned within the positiveQry result set. - @param {Double} negativeBoost A double value where 0 < n < 1. - */ - ejs.BoostingQuery = function (positiveQry, negativeQry, negativeBoost) { - - if (!isQuery(positiveQry) || !isQuery(negativeQry)) { - throw new TypeError('Arguments must be Queries'); - } - - /** - The internal Query object. Use _self(). - @member ejs.BoostingQuery - @property {Object} BoostingQuery - */ - var query = { - boosting: { - positive: positiveQry._self(), - negative: negativeQry._self(), - negative_boost: negativeBoost - } - }; - - return { - - /** - Sets the "master" query that determines which results are returned. - - @member ejs.BoostingQuery - @param {Object} oQuery A valid Query object - @returns {Object} returns this so that calls can be - chained. Returns {Object} current positive query if oQuery is - not specified. - */ - positive: function (oQuery) { - if (oQuery == null) { - return query.boosting.positive; - } - - if (!isQuery(oQuery)) { - throw new TypeError('Argument must be a Query'); - } - - query.boosting.positive = oQuery._self(); - return this; - }, - - /** - Sets the query used to match documents in the positive - query that will be negatively boosted. - - @member ejs.BoostingQuery - @param {Object} oQuery A valid Query object - @returns {Object} returns this so that calls can be - chained. Returns {Object} current negative query if oQuery is - not specified. - */ - negative: function (oQuery) { - if (oQuery == null) { - return query.boosting.negative; - } - - if (!isQuery(oQuery)) { - throw new TypeError('Argument must be a Query'); - } - - query.boosting.negative = oQuery._self(); - return this; - }, - - /** - Sets the negative boost value. - - @member ejs.BoostingQuery - @param {Double} boost A positive double value where 0 < n < 1. - @returns {Object} returns this so that calls can be chained. - */ - negativeBoost: function (negBoost) { - if (negBoost == null) { - return query.boosting.negative_boost; - } - - query.boosting.negative_boost = negBoost; - return this; - }, - - /** - Sets the boost value of the Query. - - @member ejs.BoostingQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.boosting.boost; - } - - query.boosting.boost = boost; - return this; - }, - - /** - Serializes the internal query object as a JSON string. - @member ejs.BoostingQuery - @returns {String} Returns a JSON representation of the Query object. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.BoostingQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - This method is used to retrieve the raw query object. It's designed - for internal use when composing and serializing queries. - - @member ejs.BoostingQuery - @returns {Object} Returns the object's query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    A query that executes high-frequency terms in a optional sub-query to - prevent slow queries due to "common" terms like stopwords.

    - -

    This query basically builds two queries out of the terms in the query - string where low-frequency terms are added to a required boolean clause and - high-frequency terms are added to an optional boolean clause. The optional - clause is only executed if the required "low-frequency' clause matches.

    - -

    CommonTermsQuery has several advantages over stopword - filtering at index or query time since a term can be "classified" based on - the actual document frequency in the index and can prevent slow queries even - across domains without specialized stopword files.

    - - @name ejs.CommonTermsQuery - @since elasticsearch 0.90 - - @desc - A query that executes high-frequency terms in a optional sub-query. - - @param {String} field the document field/key to query against - @param {String} qstr the query string - */ - ejs.CommonTermsQuery = function (field, qstr) { - - /** - The internal query object. Use get() - @member ejs.CommonTermsQuery - @property {Object} query - */ - var query = { - common: {} - }; - - // support for full Builder functionality where no constructor is used - // use dummy field until one is set - if (field == null) { - field = 'no_field_set'; - } - - query.common[field] = {}; - - // only set the query is one is passed in - if (qstr != null) { - query.common[field].query = qstr; - } - - return { - - /** - Sets the field to query against. - - @member ejs.CommonTermsQuery - @param {String} f A valid field name. - @returns {Object} returns this so that calls can be chained. - */ - field: function (f) { - var oldValue = query.common[field]; - - if (f == null) { - return field; - } - - delete query.common[field]; - field = f; - query.common[f] = oldValue; - - return this; - }, - - /** - Sets the query string. - - @member ejs.CommonTermsQuery - @param {String} qstr The query string. - @returns {Object} returns this so that calls can be chained. - */ - query: function (qstr) { - if (qstr == null) { - return query.common[field].query; - } - - query.common[field].query = qstr; - return this; - }, - - /** - Sets the analyzer name used to analyze the Query object. - - @member ejs.CommonTermsQuery - @param {String} analyzer A valid analyzer name. - @returns {Object} returns this so that calls can be chained. - */ - analyzer: function (analyzer) { - if (analyzer == null) { - return query.common[field].analyzer; - } - - query.common[field].analyzer = analyzer; - return this; - }, - - /** - Enables or disables similarity coordinate scoring of documents - commoning the Query. Default: false. - - @member ejs.CommonTermsQuery - @param {String} trueFalse A true/falsethis
    so that calls can be chained. - */ - disableCoord: function (trueFalse) { - if (trueFalse == null) { - return query.common[field].disable_coord; - } - - query.common[field].disable_coord = trueFalse; - return this; - }, - - /** - Sets the maximum threshold/frequency to be considered a low - frequency term. Set to a value between 0 and 1. - - @member ejs.CommonTermsQuery - @param {Number} freq A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - cutoffFrequency: function (freq) { - if (freq == null) { - return query.common[field].cutoff_frequency; - } - - query.common[field].cutoff_frequency = freq; - return this; - }, - - /** - Sets the boolean operator to be used for high frequency terms. - Default: AND - - @member ejs.CommonTermsQuery - @param {String} op Any of "and" or "or", no quote characters. - @returns {Object} returns this so that calls can be chained. - */ - highFreqOperator: function (op) { - if (op == null) { - return query.common[field].high_freq_operator; - } - - op = op.toLowerCase(); - if (op === 'and' || op === 'or') { - query.common[field].high_freq_operator = op; - } - - return this; - }, - - /** - Sets the boolean operator to be used for low frequency terms. - Default: AND - - @member ejs.CommonTermsQuery - @param {String} op Any of "and" or "or", no quote characters. - @returns {Object} returns this so that calls can be chained. - */ - lowFreqOperator: function (op) { - if (op == null) { - return query.common[field].low_freq_operator; - } - - op = op.toLowerCase(); - if (op === 'and' || op === 'or') { - query.common[field].low_freq_operator = op; - } - - return this; - }, - - /** - Sets the minimum number of low freq matches that need to match in - a document before that document is returned in the results. - - @member ejs.CommonTermsQuery - @param {Integer} min A positive integer. - @returns {Object} returns this so that calls can be chained. - */ - minimumShouldMatch: function (min) { - if (min == null) { - return query.common[field].minimum_should_match.low_freq; - } - - if (query.common[field].minimum_should_match == null) { - query.common[field].minimum_should_match = {}; - } - - query.common[field].minimum_should_match.low_freq = min; - return this; - }, - - /** - Sets the minimum number of low freq matches that need to match in - a document before that document is returned in the results. - - @member ejs.CommonTermsQuery - @param {Integer} min A positive integer. - @returns {Object} returns this so that calls can be chained. - */ - minimumShouldMatchLowFreq: function (min) { - return this.minimumShouldMatch(min); - }, - - /** - Sets the minimum number of high freq matches that need to match in - a document before that document is returned in the results. - - @member ejs.CommonTermsQuery - @param {Integer} min A positive integer. - @returns {Object} returns this so that calls can be chained. - */ - minimumShouldMatchHighFreq: function (min) { - if (min == null) { - return query.common[field].minimum_should_match.high_freq; - } - - if (query.common[field].minimum_should_match == null) { - query.common[field].minimum_should_match = {}; - } - - query.common[field].minimum_should_match.high_freq = min; - return this; - }, - - /** - Sets the boost value for documents commoning the Query. - - @member ejs.CommonTermsQuery - @param {Number} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.common[field].boost; - } - - query.common[field].boost = boost; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.CommonTermsQuery - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.CommonTermsQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - Retrieves the internal query object. This is typically used by - internal API functions so use with caution. - - @member ejs.CommonTermsQuery - @returns {String} returns this object's internal query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    A constant score query wraps another Query or - Filter and returns a constant score for each - result that is equal to the query boost.

    - -

    Note that lucene's query normalization (queryNorm) attempts - to make scores between different queries comparable. It does not - change the relevance of your query, but it might confuse you when - you look at the score of your documents and they are not equal to - the query boost value as expected. The scores were normalized by - queryNorm, but maintain the same relevance.

    - - @name ejs.ConstantScoreQuery - - @desc -

    Constructs a query where each documents returned by the internal - query or filter have a constant score equal to the boost factor.

    - - */ - ejs.ConstantScoreQuery = function () { - - /** - The internal Query object. Use _self(). - @member ejs.ConstantScoreQuery - @property {Object} query - */ - var query = { - constant_score: {} - }; - - return { - /** - Adds the query to apply a constant score to. - - @member ejs.ConstantScoreQuery - @param {Object} oQuery A valid Query object - @returns {Object} returns this so that calls can be chained. - */ - query: function (oQuery) { - if (oQuery == null) { - return query.constant_score.query; - } - - if (!isQuery(oQuery)) { - throw new TypeError('Argument must be a Query'); - } - - query.constant_score.query = oQuery._self(); - return this; - }, - - /** - Adds the filter to apply a constant score to. - - @member ejs.ConstantScoreQuery - @param {Object} oFilter A valid Filter object - @returns {Object} returns this so that calls can be chained. - */ - filter: function (oFilter) { - if (oFilter == null) { - return query.constant_score.filter; - } - - if (!isFilter(oFilter)) { - throw new TypeError('Argument must be a Filter'); - } - - query.constant_score.filter = oFilter._self(); - return this; - }, - - /** - Enables caching of the filter. - - @member ejs.ConstantScoreQuery - @param {Boolean} trueFalse A boolean value. - @returns {Object} returns this so that calls can be chained. - */ - cache: function (trueFalse) { - if (trueFalse == null) { - return query.constant_score._cache; - } - - query.constant_score._cache = trueFalse; - return this; - }, - - /** - Set the cache key. - - @member ejs.ConstantScoreQuery - @param {String} k A string cache key. - @returns {Object} returns this so that calls can be chained. - */ - cacheKey: function (k) { - if (k == null) { - return query.constant_score._cache_key; - } - - query.constant_score._cache_key = k; - return this; - }, - - /** - Sets the boost value of the Query. - - @member ejs.ConstantScoreQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.constant_score.boost; - } - - query.constant_score.boost = boost; - return this; - }, - - /** - Serializes the internal query object as a JSON string. - @member ejs.ConstantScoreQuery - @returns {String} Returns a JSON representation of the Query object. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.ConstantScoreQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - This method is used to retrieve the raw query object. It's designed - for internal use when composing and serializing queries. - - @member ejs.ConstantScoreQuery - @returns {Object} Returns the object's query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    A query allows to wrap another query and multiply its score by the - provided boost_factor. This can sometimes be desired since boost value set - on specific queries gets normalized, while this query boost factor does not.

    - - @name ejs.CustomBoostFactorQuery - - @desc - Boosts a queries score without that boost being normalized. - - @param {Object} qry A valid query object. - */ - ejs.CustomBoostFactorQuery = function (qry) { - - if (!isQuery(qry)) { - throw new TypeError('Argument must be a Query'); - } - - /** - The internal query object. Use _self() - @member ejs.CustomBoostFactorQuery - @property {Object} query - */ - var query = { - custom_boost_factor: { - query: qry._self() - } - }; - - return { - - /** - Sets the query to be apply the custom boost to. - - @member ejs.CustomBoostFactorQuery - @param {Object} q A valid Query object - @returns {Object} returns this so that calls can be chained. - */ - query: function (q) { - if (q == null) { - return query.custom_boost_factor.query; - } - - if (!isQuery(q)) { - throw new TypeError('Argument must be a Query'); - } - - query.custom_boost_factor.query = q._self(); - return this; - }, - - /** - Sets the language used in the script. - - @member ejs.CustomBoostFactorQuery - @param {Double} boost The boost value. - @returns {Object} returns this so that calls can be chained. - */ - boostFactor: function (boost) { - if (boost == null) { - return query.custom_boost_factor.boost_factor; - } - - query.custom_boost_factor.boost_factor = boost; - return this; - }, - - /** - Sets the boost value of the Query. - - @member ejs.CustomBoostFactorQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.custom_boost_factor.boost; - } - - query.custom_boost_factor.boost = boost; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.CustomBoostFactorQuery - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.CustomBoostFactorQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - Retrieves the internal query object. This is typically used by - internal API functions so use with caution. - - @member ejs.CustomBoostFactorQuery - @returns {String} returns this object's internal query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    A custom_filters_score query allows to execute a query, and if the hit - matches a provided filter (ordered), use either a boost or a script - associated with it to compute the score.

    - -

    This can considerably simplify and increase performance for parameterized - based scoring since filters are easily cached for faster performance, and - boosting / script is considerably simpler.

    - - @name ejs.CustomFiltersScoreQuery - - @desc - Returned documents matched by the query and scored based on if the document - matched in a filter. - - @param {Object} qry A valid query object. - @param {Object || Array} filters A single object or array of objects. Each - object must have a 'filter' property and either a 'boost' or 'script' - property. - */ - ejs.CustomFiltersScoreQuery = function (qry, filters) { - - if (!isQuery(qry)) { - throw new TypeError('Argument must be a Query'); - } - - /** - The internal query object. Use _self() - @member ejs.CustomFiltersScoreQuery - @property {Object} query - */ - var query = { - custom_filters_score: { - query: qry._self(), - filters: [] - } - }, - - // generate a valid filter object that can be inserted into the filters - // array. Returns null when an invalid filter is passed in. - genFilterObject = function (filter) { - var obj = null; - - if (filter.filter && isFilter(filter.filter)) { - obj = { - filter: filter.filter._self() - }; - - if (filter.boost) { - obj.boost = filter.boost; - } else if (filter.script) { - obj.script = filter.script; - } else { - // invalid filter, must boost or script must be specified - obj = null; - } - } - - return obj; - }; - - each((isArray(filters) ? filters : [filters]), function (filter) { - var fObj = genFilterObject(filter); - if (fObj !== null) { - query.custom_filters_score.filters.push(fObj); - } - }); - - return { - - /** - Sets the query to be apply the custom boost to. - - @member ejs.CustomFiltersScoreQuery - @param {Object} q A valid Query object - @returns {Object} returns this so that calls can be chained. - */ - query: function (q) { - if (q == null) { - return query.custom_filters_score.query; - } - - if (!isQuery(q)) { - throw new TypeError('Argument must be a Query'); - } - - query.custom_filters_score.query = q._self(); - return this; - }, - - /** -

    Sets the filters and their related boost or script scoring method.

    - -

    Takes an array of objects where each object has a 'filter' property - and either a 'boost' or 'script' property. Pass a single object to - add to the current list of filters or pass a list of objects to - overwrite all existing filters.

    - - - {filter: someFilter, boost: 2.1} - - - @member ejs.CustomFiltersScoreQuery - @param {Object || Array} fltrs An object or array of objects - contining a filter and either a boost or script property. - @returns {Object} returns this so that calls can be chained. - */ - filters: function (fltrs) { - if (fltrs == null) { - return query.custom_filters_score.filters; - } - - if (isArray(fltrs)) { - query.custom_filters_score.filters = []; - } - - each((isArray(fltrs) ? fltrs : [fltrs]), function (f) { - var fObj = genFilterObject(f); - if (fObj !== null) { - query.custom_filters_score.filters.push(fObj); - } - }); - - return this; - }, - - /** -

    A score_mode can be defined to control how multiple matching - filters control the score.

    - -

    By default, it is set to first which means the first matching filter - will control the score of the result. It can also be set to - min/max/total/avg/multiply which will aggregate the result from all - matching filters based on the aggregation type.

    - - @member ejs.CustomFiltersScoreQuery - @param {String} s The scoring type as a string. - @returns {Object} returns this so that calls can be chained. - */ - scoreMode: function (s) { - if (s == null) { - return query.custom_filters_score.score_mode; - } - - s = s.toLowerCase(); - if (s === 'first' || s === 'min' || s === 'max' || s === 'total' || s === 'avg' || s === 'multiply') { - query.custom_filters_score.score_mode = s; - } - - return this; - }, - - /** - Sets parameters that will be applied to the script. Overwrites - any existing params. - - @member ejs.CustomFiltersScoreQuery - @param {Object} q An object where the keys are the parameter name and - values are the parameter value. - @returns {Object} returns this so that calls can be chained. - */ - params: function (p) { - if (p == null) { - return query.custom_filters_score.params; - } - - query.custom_filters_score.params = p; - return this; - }, - - /** - Sets the language used in the script. - - @member ejs.CustomFiltersScoreQuery - @param {String} l The script language, defatuls to mvel. - @returns {Object} returns this so that calls can be chained. - */ - lang: function (l) { - if (l == null) { - return query.custom_filters_score.lang; - } - - query.custom_filters_score.lang = l; - return this; - }, - - /** - Sets the maximum value a computed boost can reach. - - @member ejs.CustomFiltersScoreQuery - @param {Double} max A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - maxBoost: function (max) { - if (max == null) { - return query.custom_filters_score.max_boost; - } - - query.custom_filters_score.max_boost = max; - return this; - }, - - /** - Sets the boost value of the Query. - - @member ejs.CustomFiltersScoreQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.custom_filters_score.boost; - } - - query.custom_filters_score.boost = boost; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.CustomFiltersScoreQuery - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.CustomFiltersScoreQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - Retrieves the internal query object. This is typically used by - internal API functions so use with caution. - - @member ejs.CustomFiltersScoreQuery - @returns {String} returns this object's internal query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    A query that wraps another query and customize the scoring of it - optionally with a computation derived from other field values in the - doc (numeric ones) using script expression.

    - - @name ejs.CustomScoreQuery - - @desc - Scores a query based on a script. - - @param {Object} qry A valid query or filter object. - @param {String} script A valid script expression. - */ - ejs.CustomScoreQuery = function (qry, script) { - - if (!isQuery(qry) && !isFilter(qry)) { - throw new TypeError('Argument must be a Query or Filter'); - } - - /** - The internal query object. Use _self() - @member ejs.CustomScoreQuery - @property {Object} query - */ - var query = { - custom_score: { - script: script - } - }; - - if (isQuery(qry)) { - query.custom_score.query = qry._self(); - } else if (isFilter(qry)) { - query.custom_score.filter = qry._self(); - } - - return { - - /** - Sets the query to apply the custom score to. - - @member ejs.CustomScoreQuery - @param {Object} q A valid Query object - @returns {Object} returns this so that calls can be chained. - */ - query: function (q) { - if (q == null) { - return query.custom_score.query; - } - - if (!isQuery(q)) { - throw new TypeError('Argument must be a Query'); - } - - query.custom_score.query = q._self(); - return this; - }, - - /** - Sets the filter to apply the custom score to. - - @member ejs.CustomScoreQuery - @param {Object} f A valid Filter object - @returns {Object} returns this so that calls can be chained. - */ - filter: function (f) { - if (f == null) { - return query.custom_score.filter; - } - - if (!isFilter(f)) { - throw new TypeError('Argument must be a Filter'); - } - - query.custom_score.filter = f._self(); - return this; - }, - - /** - Sets the script that calculates the custom score - - @member ejs.CustomScoreQuery - @param {String} s A valid script expression - @returns {Object} returns this so that calls can be chained. - */ - script: function (s) { - if (s == null) { - return query.custom_score.script; - } - - query.custom_score.script = s; - return this; - }, - - /** - Sets parameters that will be applied to the script. Overwrites - any existing params. - - @member ejs.CustomScoreQuery - @param {Object} p An object where the keys are the parameter name and - values are the parameter value. - @returns {Object} returns this so that calls can be chained. - */ - params: function (p) { - if (p == null) { - return query.custom_score.params; - } - - query.custom_score.params = p; - return this; - }, - - /** - Sets the language used in the script. - - @member ejs.CustomScoreQuery - @param {String} l The script language, defatuls to mvel. - @returns {Object} returns this so that calls can be chained. - */ - lang: function (l) { - if (l == null) { - return query.custom_score.lang; - } - - query.custom_score.lang = l; - return this; - }, - - /** - Sets the boost value of the Query. - - @member ejs.CustomScoreQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.custom_score.boost; - } - - query.custom_score.boost = boost; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.CustomScoreQuery - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.CustomScoreQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - Retrieves the internal query object. This is typically used by - internal API functions so use with caution. - - @member ejs.CustomScoreQuery - @returns {String} returns this object's internal query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class - A query that generates the union of documents produced by its subqueries, and - that scores each document with the maximum score for that document as produced - by any subquery, plus a tie breaking increment for any additional matching - subqueries. - - @name ejs.DisMaxQuery - - @desc - A query that generates the union of documents produced by its subqueries such - as termQuerys, phraseQuerys, boolQuerys, etc. - - */ - ejs.DisMaxQuery = function () { - - /** - The internal query object. Use _self() - @member ejs.DisMaxQuery - @property {Object} query - */ - var query = { - dis_max: {} - }; - - return { - - /** - Updates the queries. If passed a single Query, it is added to the - list of existing queries. If passed an array of Queries, it - replaces all existing values. - - @member ejs.DisMaxQuery - @param {Query || Array} qs A single Query or an array of Queries - @returns {Object} returns this so that calls can be chained. - */ - queries: function (qs) { - var i, len; - - if (qs == null) { - return query.dis_max.queries; - } - - if (query.dis_max.queries == null) { - query.dis_max.queries = []; - } - - if (isQuery(qs)) { - query.dis_max.queries.push(qs._self()); - } else if (isArray(qs)) { - query.dis_max.queries = []; - for (i = 0, len = qs.length; i < len; i++) { - if (!isQuery(qs[i])) { - throw new TypeError('Argument must be array of Queries'); - } - - query.dis_max.queries.push(qs[i]._self()); - } - } else { - throw new TypeError('Argument must be a Query or array of Queries'); - } - - return this; - }, - - /** - Sets the boost value of the Query. Default: 1.0. - - @member ejs.DisMaxQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.dis_max.boost; - } - - query.dis_max.boost = boost; - return this; - }, - - - /** -

    The tie breaker value.

    - -

    The tie breaker capability allows results that include the same term in multiple - fields to be judged better than results that include this term in only the best of those - multiple fields, without confusing this with the better case of two different terms in - the multiple fields.

    - -

    Default: 0.0.

    - - @member ejs.DisMaxQuery - @param {Double} tieBreaker A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - tieBreaker: function (tieBreaker) { - if (tieBreaker == null) { - return query.dis_max.tie_breaker; - } - - query.dis_max.tie_breaker = tieBreaker; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.DisMaxQuery - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.DisMaxQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - Retrieves the internal query object. This is typically used by - internal API functions so use with caution. - - @member ejs.DisMaxQuery - @returns {String} returns this object's internal query property. - */ - _self: function () { - return query; - } - }; - }; - - - /** - @class -

    Wrapper to allow SpanQuery objects participate in composite single-field - SpanQueries by 'lying' about their search field. That is, the masked - SpanQuery will function as normal, but when asked for the field it - queries against, it will return the value specified as the masked field vs. - the real field used in the wrapped span query.

    - - @name ejs.FieldMaskingSpanQuery - - @desc - Wraps a SpanQuery and hides the real field being searched across. - - @param {Query} spanQry A valid SpanQuery - @param {Integer} field the maximum field position in a match. - - */ - ejs.FieldMaskingSpanQuery = function (spanQry, field) { - - if (!isQuery(spanQry)) { - throw new TypeError('Argument must be a SpanQuery'); - } - - /** - The internal query object. Use _self() - @member ejs.FieldMaskingSpanQuery - @property {Object} query - */ - var query = { - field_masking_span: { - query: spanQry._self(), - field: field - } - }; - - return { - - /** - Sets the span query to wrap. - - @member ejs.FieldMaskingSpanQuery - @param {Query} spanQuery Any valid span type query. - @returns {Object} returns this so that calls can be chained. - */ - query: function (spanQuery) { - if (spanQuery == null) { - return query.field_masking_span.query; - } - - if (!isQuery(spanQuery)) { - throw new TypeError('Argument must be a SpanQuery'); - } - - query.field_masking_span.query = spanQuery._self(); - return this; - }, - - /** - Sets the value of the "masked" field. - - @member ejs.FieldMaskingSpanQuery - @param {String} f A field name the wrapped span query should use - @returns {Object} returns this so that calls can be chained. - */ - field: function (f) { - if (f == null) { - return query.field_masking_span.field; - } - - query.field_masking_span.field = f; - return this; - }, - - /** - Sets the boost value of the Query. - - @member ejs.FieldMaskingSpanQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.field_masking_span.boost; - } - - query.field_masking_span.boost = boost; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.FieldMaskingSpanQuery - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.FieldMaskingSpanQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - Retrieves the internal query object. This is typically used by - internal API functions so use with caution. - - @member ejs.FieldMaskingSpanQuery - @returns {String} returns this object's internal query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class - A query that executes against a given field or document property. It is a simplified version - of the queryString object. - - @name ejs.FieldQuery - - @desc - A query that executes against a given field or document property. - - @param {String} field The field or document property to search against. - @param {String} qstr The value to match. - */ - ejs.FieldQuery = function (field, qstr) { - - /** - The internal query object. Use get() - @member ejs.FieldQuery - @property {Object} query - */ - var query = { - field: {} - }; - - query.field[field] = { - query: qstr - }; - - return { - - /** - The field to run the query against. - - @member ejs.FieldQuery - @param {String} f A single field name. - @returns {Object} returns this so that calls can be chained. - */ - field: function (f) { - var oldValue = query.field[field]; - - if (f == null) { - return field; - } - - delete query.field[field]; - field = f; - query.field[f] = oldValue; - - return this; - }, - - /** -

    Sets the query string.

    - - @member ejs.FieldQuery - @param {String} q The lucene query string. - @returns {Object} returns this so that calls can be chained. - */ - query: function (q) { - if (q == null) { - return query.field[field].query; - } - - query.field[field].query = q; - return this; - }, - - /** -

    Set the default Boolean operator.

    - -

    This operator is used to join individual query terms when no operator is - explicity used in the query string (i.e., this AND that). - Defaults to OR (same as Google).

    - - @member ejs.FieldQuery - @param {String} op The operator, AND or OR. - @returns {Object} returns this so that calls can be chained. - */ - defaultOperator: function (op) { - if (op == null) { - return query.field[field].default_operator; - } - - op = op.toUpperCase(); - if (op === 'AND' || op === 'OR') { - query.field[field].default_operator = op; - } - - return this; - }, - - /** -

    Sets the analyzer name used to analyze the Query object.

    - - @member ejs.FieldQuery - @param {String} analyzer A valid analyzer name. - @returns {Object} returns this so that calls can be chained. - */ - analyzer: function (analyzer) { - if (analyzer == null) { - return query.field[field].analyzer; - } - - query.field[field].analyzer = analyzer; - return this; - }, - - /** -

    Sets the quote analyzer name used to analyze the query - when in quoted text.

    - - @member ejs.FieldQuery - @param {String} analyzer A valid analyzer name. - @returns {Object} returns this so that calls can be chained. - */ - quoteAnalyzer: function (analyzer) { - if (analyzer == null) { - return query.field[field].quote_analyzer; - } - - query.field[field].quote_analyzer = analyzer; - return this; - }, - - /** -

    Sets whether or not we should auto generate phrase queries *if* the - analyzer returns more than one term. Default: false.

    - - @member ejs.FieldQuery - @param {Boolean} trueFalse A true/false value. - @returns {Object} returns this so that calls can be chained. - */ - autoGeneratePhraseQueries: function (trueFalse) { - if (trueFalse == null) { - return query.field[field].auto_generate_phrase_queries; - } - - query.field[field].auto_generate_phrase_queries = trueFalse; - return this; - }, - - /** -

    Sets whether or not wildcard characters (* and ?) are allowed as the - first character of the Query.

    - -

    Default: true.

    - - @member ejs.FieldQuery - @param {Boolean} trueFalse A true/false value. - @returns {Object} returns this so that calls can be chained. - */ - allowLeadingWildcard: function (trueFalse) { - if (trueFalse == null) { - return query.field[field].allow_leading_wildcard; - } - - query.field[field].allow_leading_wildcard = trueFalse; - return this; - }, - - /** -

    Sets whether or not terms from wildcard, prefix, fuzzy, and - range queries should automatically be lowercased in the Query - since they are not analyzed.

    - -

    Default: true.

    - - @member ejs.FieldQuery - @param {Boolean} trueFalse A true/false value. - @returns {Object} returns this so that calls can be chained. - */ - lowercaseExpandedTerms: function (trueFalse) { - if (trueFalse == null) { - return query.field[field].lowercase_expanded_terms; - } - - query.field[field].lowercase_expanded_terms = trueFalse; - return this; - }, - - /** -

    Sets whether or not position increments will be used in the - Query.

    - -

    Default: true.

    - - @member ejs.FieldQuery - @param {Boolean} trueFalse A true/false value. - @returns {Object} returns this so that calls can be chained. - */ - enablePositionIncrements: function (trueFalse) { - if (trueFalse == null) { - return query.field[field].enable_position_increments; - } - - query.field[field].enable_position_increments = trueFalse; - return this; - }, - - /** -

    Set the minimum similarity for fuzzy queries.

    - -

    Default: 0.5.

    - - @member ejs.FieldQuery - @param {Double} minSim A double value between 0 and 1. - @returns {Object} returns this so that calls can be chained. - */ - fuzzyMinSim: function (minSim) { - if (minSim == null) { - return query.field[field].fuzzy_min_sim; - } - - query.field[field].fuzzy_min_sim = minSim; - return this; - }, - - /** -

    Sets the boost value of the Query.

    - -

    Default: 1.0.

    - - @member ejs.FieldQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.field[field].boost; - } - - query.field[field].boost = boost; - return this; - }, - - /** -

    Sets the prefix length for fuzzy queries.

    - -

    Default: 0.

    - - @member ejs.FieldQuery - @param {Integer} fuzzLen A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - fuzzyPrefixLength: function (fuzzLen) { - if (fuzzLen == null) { - return query.field[field].fuzzy_prefix_length; - } - - query.field[field].fuzzy_prefix_length = fuzzLen; - return this; - }, - - /** -

    Sets the max number of term expansions for fuzzy queries.

    - - @member ejs.FieldQuery - @param {Integer} max A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - fuzzyMaxExpansions: function (max) { - if (max == null) { - return query.field[field].fuzzy_max_expansions; - } - - query.field[field].fuzzy_max_expansions = max; - return this; - }, - - /** -

    Sets fuzzy rewrite method.

    - -

    Valid values are:

    - -
    -
    constant_score_auto - tries to pick the best constant-score rewrite - method based on term and document counts from the query
    - -
    scoring_boolean - translates each term into boolean should and - keeps the scores as computed by the query
    - -
    constant_score_boolean - same as scoring_boolean, expect no scores - are computed.
    - -
    constant_score_filter - first creates a private Filter, by visiting - each term in sequence and marking all docs for that term
    - -
    top_terms_boost_N - first translates each term into boolean should - and scores are only computed as the boost using the top N - scoring terms. Replace N with an integer value.
    - -
    top_terms_N - first translates each term into boolean should - and keeps the scores as computed by the query. Only the top N - scoring terms are used. Replace N with an integer value.
    -
    - -

    Default is constant_score_auto.

    - -

    This is an advanced option, use with care.

    - - @member ejs.FieldQuery - @param {String} m The rewrite method as a string. - @returns {Object} returns this so that calls can be chained. - */ - fuzzyRewrite: function (m) { - if (m == null) { - return query.field[field].fuzzy_rewrite; - } - - m = m.toLowerCase(); - if (m === 'constant_score_auto' || m === 'scoring_boolean' || - m === 'constant_score_boolean' || m === 'constant_score_filter' || - m.indexOf('top_terms_boost_') === 0 || - m.indexOf('top_terms_') === 0) { - - query.field[field].fuzzy_rewrite = m; - } - - return this; - }, - - /** -

    Sets rewrite method.

    - -

    Valid values are:

    - -
    -
    constant_score_auto - tries to pick the best constant-score rewrite - method based on term and document counts from the query
    - -
    scoring_boolean - translates each term into boolean should and - keeps the scores as computed by the query
    - -
    constant_score_boolean - same as scoring_boolean, expect no scores - are computed.

    - -
    constant_score_filter - first creates a private Filter, by visiting - each term in sequence and marking all docs for that term
    - -
    top_terms_boost_N - first translates each term into boolean should - and scores are only computed as the boost using the top N - scoring terms. Replace N with an integer value.
    - -
    top_terms_N - first translates each term into boolean should - and keeps the scores as computed by the query. Only the top N - scoring terms are used. Replace N with an integer value.
    -
    - -

    Default is constant_score_auto.

    - - This is an advanced option, use with care. - - @member ejs.FieldQuery - @param {String} m The rewrite method as a string. - @returns {Object} returns this so that calls can be chained. - */ - rewrite: function (m) { - if (m == null) { - return query.field[field].rewrite; - } - - m = m.toLowerCase(); - if (m === 'constant_score_auto' || m === 'scoring_boolean' || - m === 'constant_score_boolean' || m === 'constant_score_filter' || - m.indexOf('top_terms_boost_') === 0 || - m.indexOf('top_terms_') === 0) { - - query.field[field].rewrite = m; - } - - return this; - }, - - /** -

    Sets the suffix to automatically add to the field name when - performing a quoted search.

    - - @member ejs.FieldQuery - @param {String} s The suffix as a string. - @returns {Object} returns this so that calls can be chained. - */ - quoteFieldSuffix: function (s) { - if (s == null) { - return query.field[field].quote_field_suffix; - } - - query.field[field].quote_field_suffix = s; - return this; - }, - - /** -

    Sets the default slop for phrases. If zero, then exact phrase matches - are required.

    - -

    Default: 0.

    - - @member ejs.FieldQuery - @param {Integer} slop A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - phraseSlop: function (slop) { - if (slop == null) { - return query.field[field].phrase_slop; - } - - query.field[field].phrase_slop = slop; - return this; - }, - - /** -

    Sets whether or not we should attempt to analyzed wilcard terms in the - Query.

    - -

    By default, wildcard terms are not analyzed. Analysis of wildcard characters is not perfect.

    - -

    Default: false.

    - - @member ejs.FieldQuery - @param {Boolean} trueFalse A true/false value. - @returns {Object} returns this so that calls can be chained. - */ - analyzeWildcard: function (trueFalse) { - if (trueFalse == null) { - return query.field[field].analyze_wildcard; - } - - query.field[field].analyze_wildcard = trueFalse; - return this; - }, - - /** -

    If the query string should be escaped or not.

    - - @member ejs.FieldQuery - @param {Boolean} trueFalse A true/false value. - @returns {Object} returns this so that calls can be chained. - */ - escape: function (trueFalse) { - if (trueFalse == null) { - return query.field[field].escape; - } - - query.field[field].escape = trueFalse; - return this; - }, - - /** -

    Sets a percent value controlling how many should clauses in the - resulting Query should match.

    - - @member ejs.FieldQuery - @param {Integer} minMatch An integer between 0 and 100. - @returns {Object} returns this so that calls can be chained. - */ - minimumShouldMatch: function (minMatch) { - if (minMatch == null) { - return query.field[field].minimum_should_match; - } - - query.field[field].minimum_should_match = minMatch; - return this; - }, - - /** -

    Allows you to serialize this object into a JSON encoded string.

    - - @member ejs.FieldQuery - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** -

    The type of ejs object. For internal use only.

    - - @member ejs.FieldQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** -

    Retrieves the internal query object. This is typically used by - internal API functions so use with caution.

    - - @member ejs.FieldQuery - @returns {String} returns this object's internal query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    Filter queries allow you to restrict the results returned by a query. There are - several different types of filters that can be applied - (see filter module). A filterQuery - takes a Query and a Filter object as arguments and constructs - a new Query that is then used for the search.

    - - @name ejs.FilteredQuery - - @desc -

    A query that applies a filter to the results of another query.

    - - @param {Object} someQuery a valid Query object - @param {Object} someFilter a valid Filter object. This parameter - is optional. - - */ - ejs.FilteredQuery = function (someQuery, someFilter) { - - if (!isQuery(someQuery)) { - throw new TypeError('Argument must be a Query'); - } - - if (someFilter != null && !isFilter(someFilter)) { - throw new TypeError('Argument must be a Filter'); - } - - /** - The internal query object. Use _self() - @member ejs.FilteredQuery - @property {Object} query - */ - var query = { - filtered: { - query: someQuery._self() - } - }; - - if (someFilter != null) { - query.filtered.filter = someFilter._self(); - } - - return { - - /** -

    Adds the query to apply a constant score to.

    - - @member ejs.FilteredQuery - @param {Object} oQuery A valid Query object - @returns {Object} returns this so that calls can be chained. - */ - query: function (oQuery) { - if (oQuery == null) { - return query.filtered.query; - } - - if (!isQuery(oQuery)) { - throw new TypeError('Argument must be a Query'); - } - - query.filtered.query = oQuery._self(); - return this; - }, - - /** -

    Adds the filter to apply a constant score to.

    - - @member ejs.FilteredQuery - @param {Object} oFilter A valid Filter object - @returns {Object} returns this so that calls can be chained. - */ - filter: function (oFilter) { - if (oFilter == null) { - return query.filtered.filter; - } - - if (!isFilter(oFilter)) { - throw new TypeError('Argument must be a Filter'); - } - - query.filtered.filter = oFilter._self(); - return this; - }, - - /** -

    Sets the filter strategy.

    - -

    The strategy defines how the filter is applied during document collection. - Valid values are:

    - -
    -
    query_first - advance query scorer first then filter
    -
    random_access_random - random access filter
    -
    leap_frog - query scorer and filter "leap-frog", query goes first
    -
    leap_frog_filter_first - same as leap_frog, but filter goes first
    -
    random_access_N - replace N with integer, same as random access - except you can specify a custom threshold
    -
    - -

    This is an advanced setting, use with care.

    - - @member ejs.FilteredQuery - @param {String} strategy The strategy as a string. - @returns {Object} returns this so that calls can be chained. - */ - strategy: function (strategy) { - if (strategy == null) { - return query.filtered.strategy; - } - - strategy = strategy.toLowerCase(); - if (strategy === 'query_first' || strategy === 'random_access_always' || - strategy === 'leap_frog' || strategy === 'leap_frog_filter_first' || - strategy.indexOf('random_access_') === 0) { - - query.filtered.strategy = strategy; - } - - return this; - }, - - /** -

    Enables caching of the filter.

    - - @member ejs.FilteredQuery - @param {Boolean} trueFalse A boolean value. - @returns {Object} returns this so that calls can be chained. - */ - cache: function (trueFalse) { - if (trueFalse == null) { - return query.filtered._cache; - } - - query.filtered._cache = trueFalse; - return this; - }, - - /** -

    Set the cache key.

    - - @member ejs.FilteredQuery - @param {String} k A string cache key. - @returns {Object} returns this so that calls can be chained. - */ - cacheKey: function (k) { - if (k == null) { - return query.filtered._cache_key; - } - - query.filtered._cache_key = k; - return this; - }, - - /** -

    Sets the boost value of the Query.

    - - @member ejs.FilteredQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.filtered.boost; - } - - query.filtered.boost = boost; - return this; - }, - - /** -

    Converts this object to a json string

    - - @member ejs.FilteredQuery - @returns {Object} string - */ - toString: function () { - return JSON.stringify(query); - }, - - /** -

    The type of ejs object. For internal use only.

    - - @member ejs.FilteredQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** -

    returns the query object.

    - - @member ejs.FilteredQuery - @returns {Object} query object - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    The fuzzy_like_this_field query is the same as the fuzzy_like_this - query, except that it runs against a single field. It provides nicer query - DSL over the generic fuzzy_like_this query, and support typed fields - query (automatically wraps typed fields with type filter to match only on - the specific type).

    - -

    Fuzzifies ALL terms provided as strings and then picks the best n - differentiating terms. In effect this mixes the behaviour of FuzzyQuery and - MoreLikeThis but with special consideration of fuzzy scoring factors. This - generally produces good results for queries where users may provide details - in a number of fields and have no knowledge of boolean query syntax and - also want a degree of fuzzy matching and a fast query.

    - -

    For each source term the fuzzy variants are held in a BooleanQuery with - no coord factor (because we are not looking for matches on multiple variants - in any one doc). Additionally, a specialized TermQuery is used for variants - and does not use that variant term’s IDF because this would favour rarer - terms eg misspellings. Instead, all variants use the same IDF - ranking (the one for the source query term) and this is factored into the - variant’s boost. If the source query term does not exist in the index the - average IDF of the variants is used.

    - - @name ejs.FuzzyLikeThisFieldQuery - - @desc -

    Constructs a query where each documents returned are “like” provided text

    - - @param {String} field The field to run the query against. - @param {String} likeText The text to find documents like it. - */ - ejs.FuzzyLikeThisFieldQuery = function (field, likeText) { - - /** - The internal Query object. Use get(). - @member ejs.FuzzyLikeThisFieldQuery - @property {Object} query - */ - var query = { - flt_field: {} - }; - - query.flt_field[field] = { - like_text: likeText - }; - - return { - - /** - The field to run the query against. - - @member ejs.FuzzyLikeThisFieldQuery - @param {String} f A single field name. - @returns {Object} returns this so that calls can be chained. - */ - field: function (f) { - var oldValue = query.flt_field[field]; - - if (f == null) { - return field; - } - - delete query.flt_field[field]; - field = f; - query.flt_field[f] = oldValue; - - return this; - }, - - /** - The text to find documents like - - @member ejs.FuzzyLikeThisFieldQuery - @param {String} s A text string. - @returns {Object} returns this so that calls can be chained. - */ - likeText: function (txt) { - if (txt == null) { - return query.flt_field[field].like_text; - } - - query.flt_field[field].like_text = txt; - return this; - }, - - /** - Should term frequency be ignored. Defaults to false. - - @member ejs.FuzzyLikeThisFieldQuery - @param {Boolean} trueFalse A boolean value - @returns {Object} returns this so that calls can be chained. - */ - ignoreTf: function (trueFalse) { - if (trueFalse == null) { - return query.flt_field[field].ignore_tf; - } - - query.flt_field[field].ignore_tf = trueFalse; - return this; - }, - - /** - The maximum number of query terms that will be included in any - generated query. Defaults to 25. - - @member ejs.FuzzyLikeThisFieldQuery - @param {Integer} max A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - maxQueryTerms: function (max) { - if (max == null) { - return query.flt_field[field].max_query_terms; - } - - query.flt_field[field].max_query_terms = max; - return this; - }, - - /** - The minimum similarity of the term variants. Defaults to 0.5. - - @member ejs.FuzzyLikeThisFieldQuery - @param {Double} min A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - minSimilarity: function (min) { - if (min == null) { - return query.flt_field[field].min_similarity; - } - - query.flt_field[field].min_similarity = min; - return this; - }, - - /** - Length of required common prefix on variant terms. Defaults to 0.. - - @member ejs.FuzzyLikeThisFieldQuery - @param {Integer} len A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - prefixLength: function (len) { - if (len == null) { - return query.flt_field[field].prefix_length; - } - - query.flt_field[field].prefix_length = len; - return this; - }, - - /** - The analyzer that will be used to analyze the text. Defaults to the - analyzer associated with the field. - - @member ejs.FuzzyLikeThisFieldQuery - @param {String} analyzerName The name of the analyzer. - @returns {Object} returns this so that calls can be chained. - */ - analyzer: function (analyzerName) { - if (analyzerName == null) { - return query.flt_field[field].analyzer; - } - - query.flt_field[field].analyzer = analyzerName; - return this; - }, - - /** - Should the Query fail when an unsupported field - is specified. Defaults to true. - - @member ejs.FuzzyLikeThisFieldQuery - @param {Boolean} trueFalse A boolean value - @returns {Object} returns this so that calls can be chained. - */ - failOnUnsupportedField: function (trueFalse) { - if (trueFalse == null) { - return query.flt_field[field].fail_on_unsupported_field; - } - - query.flt_field[field].fail_on_unsupported_field = trueFalse; - return this; - }, - - /** - Sets the boost value of the Query. - - @member ejs.FuzzyLikeThisFieldQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.flt_field[field].boost; - } - - query.flt_field[field].boost = boost; - return this; - }, - - /** - Serializes the internal query object as a JSON string. - @member ejs.FuzzyLikeThisFieldQuery - @returns {String} Returns a JSON representation of the Query object. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.FuzzyLikeThisFieldQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - This method is used to retrieve the raw query object. It's designed - for internal use when composing and serializing queries. - @member ejs.FuzzyLikeThisFieldQuery - @returns {Object} Returns the object's query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    Fuzzy like this query find documents that are “like” provided text by - running it against one or more fields.

    - -

    Fuzzifies ALL terms provided as strings and then picks the best n - differentiating terms. In effect this mixes the behaviour of FuzzyQuery and - MoreLikeThis but with special consideration of fuzzy scoring factors. This - generally produces good results for queries where users may provide details - in a number of fields and have no knowledge of boolean query syntax and - also want a degree of fuzzy matching and a fast query.

    - -

    For each source term the fuzzy variants are held in a BooleanQuery with - no coord factor (because we are not looking for matches on multiple variants - in any one doc). Additionally, a specialized TermQuery is used for variants - and does not use that variant term’s IDF because this would favour rarer - terms eg misspellings. Instead, all variants use the same IDF - ranking (the one for the source query term) and this is factored into the - variant’s boost. If the source query term does not exist in the index the - average IDF of the variants is used.

    - - @name ejs.FuzzyLikeThisQuery - - @desc -

    Constructs a query where each documents returned are “like” provided text

    - - @param {String} likeText The text to find documents like it. - */ - ejs.FuzzyLikeThisQuery = function (likeText) { - - /** - The internal Query object. Use get(). - @member ejs.FuzzyLikeThisQuery - @property {Object} query - */ - var query = { - flt: { - like_text: likeText - } - }; - - return { - - /** - The fields to run the query against. If you call with a single field, - it is added to the existing list of fields. If called with an array - of field names, it replaces any existing values with the new array. - - @member ejs.FuzzyLikeThisQuery - @param {String || Array} f A single field name or a list of field names. - @returns {Object} returns this so that calls can be chained. - */ - fields: function (f) { - if (query.flt.fields == null) { - query.flt.fields = []; - } - - if (f == null) { - return query.flt.fields; - } - - if (isString(f)) { - query.flt.fields.push(f); - } else if (isArray(f)) { - query.flt.fields = f; - } else { - throw new TypeError('Argument must be a string or array'); - } - - return this; - }, - - /** - The text to find documents like - - @member ejs.FuzzyLikeThisQuery - @param {String} s A text string. - @returns {Object} returns this so that calls can be chained. - */ - likeText: function (txt) { - if (txt == null) { - return query.flt.like_text; - } - - query.flt.like_text = txt; - return this; - }, - - /** - Should term frequency be ignored. Defaults to false. - - @member ejs.FuzzyLikeThisQuery - @param {Boolean} trueFalse A boolean value - @returns {Object} returns this so that calls can be chained. - */ - ignoreTf: function (trueFalse) { - if (trueFalse == null) { - return query.flt.ignore_tf; - } - - query.flt.ignore_tf = trueFalse; - return this; - }, - - /** - The maximum number of query terms that will be included in any - generated query. Defaults to 25. - - @member ejs.FuzzyLikeThisQuery - @param {Integer} max A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - maxQueryTerms: function (max) { - if (max == null) { - return query.flt.max_query_terms; - } - - query.flt.max_query_terms = max; - return this; - }, - - /** - The minimum similarity of the term variants. Defaults to 0.5. - - @member ejs.FuzzyLikeThisQuery - @param {Double} min A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - minSimilarity: function (min) { - if (min == null) { - return query.flt.min_similarity; - } - - query.flt.min_similarity = min; - return this; - }, - - /** - Length of required common prefix on variant terms. Defaults to 0.. - - @member ejs.FuzzyLikeThisQuery - @param {Integer} len A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - prefixLength: function (len) { - if (len == null) { - return query.flt.prefix_length; - } - - query.flt.prefix_length = len; - return this; - }, - - /** - The analyzer that will be used to analyze the text. Defaults to the - analyzer associated with the field. - - @member ejs.FuzzyLikeThisQuery - @param {String} analyzerName The name of the analyzer. - @returns {Object} returns this so that calls can be chained. - */ - analyzer: function (analyzerName) { - if (analyzerName == null) { - return query.flt.analyzer; - } - - query.flt.analyzer = analyzerName; - return this; - }, - - /** - Should the Query fail when an unsupported field - is specified. Defaults to true. - - @member ejs.FuzzyLikeThisQuery - @param {Boolean} trueFalse A boolean value - @returns {Object} returns this so that calls can be chained. - */ - failOnUnsupportedField: function (trueFalse) { - if (trueFalse == null) { - return query.flt.fail_on_unsupported_field; - } - - query.flt.fail_on_unsupported_field = trueFalse; - return this; - }, - - /** - Sets the boost value of the Query. - - @member ejs.FuzzyLikeThisQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.flt.boost; - } - - query.flt.boost = boost; - return this; - }, - - /** - Serializes the internal query object as a JSON string. - @member ejs.FuzzyLikeThisQuery - @returns {String} Returns a JSON representation of the Query object. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.FuzzyLikeThisQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - This method is used to retrieve the raw query object. It's designed - for internal use when composing and serializing queries. - @member ejs.FuzzyLikeThisQuery - @returns {Object} Returns the object's query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    A fuzzy search query based on the Damerau-Levenshtein (optimal string - alignment) algorithm, though you can explicitly choose classic Levenshtein - by passing false to the transpositions parameter./p> - -

    fuzzy query on a numeric field will result in a range query “around” - the value using the min_similarity value. As an example, if you perform a - fuzzy query against a field value of "12" with a min similarity setting - of "2", the query will search for values between "10" and "14".

    - - @name ejs.FuzzyQuery - - @desc -

    Constructs a query where each documents returned are “like” provided text

    - - @param {String} field The field to run the fuzzy query against. - @param {String} value The value to fuzzify. - - */ - ejs.FuzzyQuery = function (field, value) { - - /** - The internal Query object. Use get(). - @member ejs.FuzzyQuery - @property {Object} query - */ - var query = { - fuzzy: {} - }; - - query.fuzzy[field] = { - value: value - }; - - return { - - /** -

    The field to run the query against.

    - - @member ejs.FuzzyQuery - @param {String} f A single field name. - @returns {Object} returns this so that calls can be chained. - */ - field: function (f) { - var oldValue = query.fuzzy[field]; - - if (f == null) { - return field; - } - - delete query.fuzzy[field]; - field = f; - query.fuzzy[f] = oldValue; - - return this; - }, - - /** -

    The query text to fuzzify.

    - - @member ejs.FuzzyQuery - @param {String} s A text string. - @returns {Object} returns this so that calls can be chained. - */ - value: function (txt) { - if (txt == null) { - return query.fuzzy[field].value; - } - - query.fuzzy[field].value = txt; - return this; - }, - - /** -

    Set to false to use classic Levenshtein edit distance.

    - - @member ejs.FuzzyQuery - @param {Boolean} trueFalse A boolean value - @returns {Object} returns this so that calls can be chained. - */ - transpositions: function (trueFalse) { - if (trueFalse == null) { - return query.fuzzy[field].transpositions; - } - - query.fuzzy[field].transpositions = trueFalse; - return this; - }, - - /** -

    The maximum number of query terms that will be included in any - generated query. Defaults to 50.

    - - @member ejs.FuzzyQuery - @param {Integer} max A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - maxExpansions: function (max) { - if (max == null) { - return query.fuzzy[field].max_expansions; - } - - query.fuzzy[field].max_expansions = max; - return this; - }, - - /** -

    The minimum similarity of the term variants. Defaults to 0.5.

    - - @member ejs.FuzzyQuery - @param {Double} min A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - minSimilarity: function (min) { - if (min == null) { - return query.fuzzy[field].min_similarity; - } - - query.fuzzy[field].min_similarity = min; - return this; - }, - - /** -

    Length of required common prefix on variant terms. Defaults to 0.

    - - @member ejs.FuzzyQuery - @param {Integer} len A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - prefixLength: function (len) { - if (len == null) { - return query.fuzzy[field].prefix_length; - } - - query.fuzzy[field].prefix_length = len; - return this; - }, - - /** -

    Sets rewrite method. Valid values are:

    - -
    -
    constant_score_auto - tries to pick the best constant-score rewrite - method based on term and document counts from the query
    - -
    scoring_boolean - translates each term into boolean should and - keeps the scores as computed by the query
    - -
    constant_score_boolean - same as scoring_boolean, expect no scores - are computed.
    - -
    constant_score_filter - first creates a private Filter, by visiting - each term in sequence and marking all docs for that term
    - -
    top_terms_boost_N - first translates each term into boolean should - and scores are only computed as the boost using the top N - scoring terms. Replace N with an integer value.
    - -
    top_terms_N - first translates each term into boolean should - and keeps the scores as computed by the query. Only the top N - scoring terms are used. Replace N with an integer value.
    -
    - -

    Default is constant_score_auto.

    - -

    This is an advanced option, use with care.

    - - @member ejs.FuzzyQuery - @param {String} m The rewrite method as a string. - @returns {Object} returns this so that calls can be chained. - */ - rewrite: function (m) { - if (m == null) { - return query.fuzzy[field].rewrite; - } - - m = m.toLowerCase(); - if (m === 'constant_score_auto' || m === 'scoring_boolean' || - m === 'constant_score_boolean' || m === 'constant_score_filter' || - m.indexOf('top_terms_boost_') === 0 || - m.indexOf('top_terms_') === 0) { - - query.fuzzy[field].rewrite = m; - } - - return this; - }, - - - /** -

    Sets the boost value of the Query.

    - - @member ejs.FuzzyQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.fuzzy[field].boost; - } - - query.fuzzy[field].boost = boost; - return this; - }, - - /** -

    Serializes the internal query object as a JSON string.

    - - @member ejs.FuzzyQuery - @returns {String} Returns a JSON representation of the Query object. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** -

    The type of ejs object. For internal use only.

    - - @member ejs.FuzzyQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** -

    This method is used to retrieve the raw query object. It's designed - for internal use when composing and serializing queries.

    - - @member ejs.FuzzyQuery - @returns {Object} Returns the object's query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    Efficient querying of documents containing shapes indexed using the - geo_shape type.

    - -

    Much like the geo_shape type, the geo_shape query uses a grid square - representation of the query shape to find those documents which have shapes - that relate to the query shape in a specified way. In order to do this, the - field being queried must be of geo_shape type. The query will use the same - PrefixTree configuration as defined for the field.

    - - @name ejs.GeoShapeQuery - - @desc - A Query to find documents with a geo_shapes matching a specific shape. - - */ - ejs.GeoShapeQuery = function (field) { - - /** - The internal query object. Use _self() - @member ejs.GeoShapeQuery - @property {Object} GeoShapeQuery - */ - var query = { - geo_shape: {} - }; - - query.geo_shape[field] = {}; - - return { - - /** - Sets the field to query against. - - @member ejs.GeoShapeQuery - @param {String} f A valid field name. - @returns {Object} returns this so that calls can be chained. - */ - field: function (f) { - var oldValue = query.geo_shape[field]; - - if (f == null) { - return field; - } - - delete query.geo_shape[field]; - field = f; - query.geo_shape[f] = oldValue; - - return this; - }, - - /** - Sets the shape - - @member ejs.GeoShapeQuery - @param {String} shape A valid Shape object. - @returns {Object} returns this so that calls can be chained. - */ - shape: function (shape) { - if (shape == null) { - return query.geo_shape[field].shape; - } - - if (query.geo_shape[field].indexed_shape != null) { - delete query.geo_shape[field].indexed_shape; - } - - query.geo_shape[field].shape = shape._self(); - return this; - }, - - /** - Sets the indexed shape. Use this if you already have shape definitions - already indexed. - - @member ejs.GeoShapeQuery - @param {String} indexedShape A valid IndexedShape object. - @returns {Object} returns this so that calls can be chained. - */ - indexedShape: function (indexedShape) { - if (indexedShape == null) { - return query.geo_shape[field].indexed_shape; - } - - if (query.geo_shape[field].shape != null) { - delete query.geo_shape[field].shape; - } - - query.geo_shape[field].indexed_shape = indexedShape._self(); - return this; - }, - - /** - Sets the shape relation type. A relationship between a Query Shape - and indexed Shapes that will be used to determine if a Document - should be matched or not. Valid values are: intersects, disjoint, - and within. - - @member ejs.GeoShapeQuery - @param {String} indexedShape A valid IndexedShape object. - @returns {Object} returns this so that calls can be chained. - */ - relation: function (relation) { - if (relation == null) { - return query.geo_shape[field].relation; - } - - relation = relation.toLowerCase(); - if (relation === 'intersects' || relation === 'disjoint' || relation === 'within') { - query.geo_shape[field].relation = relation; - } - - return this; - }, - - /** -

    Sets the spatial strategy.

    -

    Valid values are:

    - -
    -
    recursive - default, recursively traverse nodes in - the spatial prefix tree. This strategy has support for - searching non-point shapes.
    -
    term - uses a large TermsFilter on each node - in the spatial prefix tree. It only supports the search of - indexed Point shapes.
    -
    - -

    This is an advanced setting, use with care.

    - - @since elasticsearch 0.90 - @member ejs.GeoShapeQuery - @param {String} strategy The strategy as a string. - @returns {Object} returns this so that calls can be chained. - */ - strategy: function (strategy) { - if (strategy == null) { - return query.geo_shape[field].strategy; - } - - strategy = strategy.toLowerCase(); - if (strategy === 'recursive' || strategy === 'term') { - query.geo_shape[field].strategy = strategy; - } - - return this; - }, - - /** - Sets the boost value for documents matching the Query. - - @member ejs.GeoShapeQuery - @param {Number} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.geo_shape[field].boost; - } - - query.geo_shape[field].boost = boost; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.GeoShapeQuery - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.GeoShapeQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - Retrieves the internal query object. This is typically used by - internal API functions so use with caution. - - @member ejs.GeoShapeQuery - @returns {String} returns this object's internal query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    The has_child query works the same as the has_child filter, - by automatically wrapping the filter with a constant_score. Results in - parent documents that have child docs matching the query being returned.

    - - @name ejs.HasChildQuery - - @desc - Returns results that have child documents matching the query. - - @param {Object} qry A valid query object. - @param {String} type The child type - */ - ejs.HasChildQuery = function (qry, type) { - - if (!isQuery(qry)) { - throw new TypeError('Argument must be a valid Query'); - } - - /** - The internal query object. Use _self() - @member ejs.HasChildQuery - @property {Object} query - */ - var query = { - has_child: { - query: qry._self(), - type: type - } - }; - - return { - - /** - Sets the query - - @member ejs.HasChildQuery - @param {Object} q A valid Query object - @returns {Object} returns this so that calls can be chained. - */ - query: function (q) { - if (q == null) { - return query.has_child.query; - } - - if (!isQuery(q)) { - throw new TypeError('Argument must be a valid Query'); - } - - query.has_child.query = q._self(); - return this; - }, - - /** - Sets the child document type to search against - - @member ejs.HasChildQuery - @param {String} t A valid type name - @returns {Object} returns this so that calls can be chained. - */ - type: function (t) { - if (t == null) { - return query.has_child.type; - } - - query.has_child.type = t; - return this; - }, - - /** - Sets the scope of the query. A scope allows to run facets on the - same scope name that will work against the child documents. - - @deprecated since elasticsearch 0.90 - @member ejs.HasChildQuery - @param {String} s The scope name as a string. - @returns {Object} returns this so that calls can be chained. - */ - scope: function (s) { - return this; - }, - - /** - Sets the scoring method. Valid values are: - - none - the default, no scoring - max - the highest score of all matched child documents is used - sum - the sum the all the matched child documents is used - avg - the average of all matched child documents is used - - @deprecated since elasticsearch 0.90.1, use scoreMode - - @member ejs.HasChildQuery - @param {String} s The score type as a string. - @returns {Object} returns this so that calls can be chained. - */ - scoreType: function (s) { - if (s == null) { - return query.has_child.score_type; - } - - s = s.toLowerCase(); - if (s === 'none' || s === 'max' || s === 'sum' || s === 'avg') { - query.has_child.score_type = s; - } - - return this; - }, - - /** - Sets the scoring method. Valid values are: - - none - the default, no scoring - max - the highest score of all matched child documents is used - sum - the sum the all the matched child documents is used - avg - the average of all matched child documents is used - - @member ejs.HasChildQuery - @param {String} s The score type as a string. - @returns {Object} returns this so that calls can be chained. - */ - scoreMode: function (s) { - if (s == null) { - return query.has_child.score_mode; - } - - s = s.toLowerCase(); - if (s === 'none' || s === 'max' || s === 'sum' || s === 'avg') { - query.has_child.score_mode = s; - } - - return this; - }, - - /** - Sets the cutoff value to short circuit processing. - - @member ejs.HasChildQuery - @param {Integer} cutoff A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - shortCircuitCutoff: function (cutoff) { - if (cutoff == null) { - return query.has_child.short_circuit_cutoff; - } - - query.has_child.short_circuit_cutoff = cutoff; - return this; - }, - - /** - Sets the boost value of the Query. - - @member ejs.HasChildQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.has_child.boost; - } - - query.has_child.boost = boost; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.HasChildQuery - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.HasChildQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - Retrieves the internal query object. This is typically used by - internal API functions so use with caution. - - @member ejs.HasChildQuery - @returns {String} returns this object's internal query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    The has_parent query works the same as the has_parent filter, by - automatically wrapping the filter with a constant_score. Results in - child documents that have parent docs matching the query being returned.

    - - @name ejs.HasParentQuery - - @desc - Returns results that have parent documents matching the query. - - @param {Object} qry A valid query object. - @param {String} parentType The child type - */ - ejs.HasParentQuery = function (qry, parentType) { - - if (!isQuery(qry)) { - throw new TypeError('Argument must be a Query'); - } - - /** - The internal query object. Use _self() - @member ejs.HasParentQuery - @property {Object} query - */ - var query = { - has_parent: { - query: qry._self(), - parent_type: parentType - } - }; - - return { - - /** - Sets the query - - @member ejs.HasParentQuery - @param {Object} q A valid Query object - @returns {Object} returns this so that calls can be chained. - */ - query: function (q) { - if (q == null) { - return query.has_parent.query; - } - - if (!isQuery(q)) { - throw new TypeError('Argument must be a Query'); - } - - query.has_parent.query = q._self(); - return this; - }, - - /** - Sets the child document type to search against - - @member ejs.HasParentQuery - @param {String} t A valid type name - @returns {Object} returns this so that calls can be chained. - */ - parentType: function (t) { - if (t == null) { - return query.has_parent.parent_type; - } - - query.has_parent.parent_type = t; - return this; - }, - - /** - Sets the scope of the query. A scope allows to run facets on the - same scope name that will work against the parent documents. - - @deprecated since elasticsearch 0.90 - @member ejs.HasParentQuery - @param {String} s The scope name as a string. - @returns {Object} returns this so that calls can be chained. - */ - scope: function (s) { - return this; - }, - - /** - Sets the scoring method. Valid values are: - - none - the default, no scoring - score - the score of the parent is used in all child documents. - - @deprecated since elasticsearch 0.90.1 use scoreMode - - @member ejs.HasParentQuery - @param {String} s The score type as a string. - @returns {Object} returns this so that calls can be chained. - */ - scoreType: function (s) { - if (s == null) { - return query.has_parent.score_type; - } - - s = s.toLowerCase(); - if (s === 'none' || s === 'score') { - query.has_parent.score_type = s; - } - - return this; - }, - - /** - Sets the scoring method. Valid values are: - - none - the default, no scoring - score - the score of the parent is used in all child documents. - - @member ejs.HasParentQuery - @param {String} s The score type as a string. - @returns {Object} returns this so that calls can be chained. - */ - scoreMode: function (s) { - if (s == null) { - return query.has_parent.score_mode; - } - - s = s.toLowerCase(); - if (s === 'none' || s === 'score') { - query.has_parent.score_mode = s; - } - - return this; - }, - - /** - Sets the boost value of the Query. - - @member ejs.HasParentQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.has_parent.boost; - } - - query.has_parent.boost = boost; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.HasParentQuery - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.HasParentQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - Retrieves the internal query object. This is typically used by - internal API functions so use with caution. - - @member ejs.HasParentQuery - @returns {String} returns this object's internal query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    Filters documents that only have the provided ids. Note, this filter - does not require the _id field to be indexed since it works using the - _uid field.

    - - @name ejs.IdsQuery - - @desc - Matches documents with the specified id(s). - - @param {Array || String} ids A single document id or a list of document ids. - */ - ejs.IdsQuery = function (ids) { - - /** - The internal query object. Use get() - @member ejs.IdsQuery - @property {Object} query - */ - var query = { - ids: {} - }; - - if (isString(ids)) { - query.ids.values = [ids]; - } else if (isArray(ids)) { - query.ids.values = ids; - } else { - throw new TypeError('Argument must be string or array'); - } - - return { - - /** - Sets the values array or adds a new value. if val is a string, it - is added to the list of existing document ids. If val is an - array it is set as the document values and replaces any existing values. - - @member ejs.IdsQuery - @param {Array || String} val An single document id or an array of document ids. - @returns {Object} returns this so that calls can be chained. - */ - values: function (val) { - if (val == null) { - return query.ids.values; - } - - if (isString(val)) { - query.ids.values.push(val); - } else if (isArray(val)) { - query.ids.values = val; - } else { - throw new TypeError('Argument must be string or array'); - } - - return this; - }, - - /** - Sets the type as a single type or an array of types. If type is a - string, it is added to the list of existing types. If type is an - array, it is set as the types and overwrites an existing types. This - parameter is optional. - - @member ejs.IdsQuery - @param {Array || String} type A type or a list of types - @returns {Object} returns this so that calls can be chained. - */ - type: function (type) { - if (query.ids.type == null) { - query.ids.type = []; - } - - if (type == null) { - return query.ids.type; - } - - if (isString(type)) { - query.ids.type.push(type); - } else if (isArray(type)) { - query.ids.type = type; - } else { - throw new TypeError('Argument must be string or array'); - } - - return this; - }, - - /** - Sets the boost value of the Query. - - @member ejs.IdsQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.ids.boost; - } - - query.ids.boost = boost; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.IdsQuery - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.IdsQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - Retrieves the internal query object. This is typically used by - internal API functions so use with caution. - - @member ejs.IdsQuery - @returns {String} returns this object's internal query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    The indices query can be used when executed across multiple indices, - allowing to have a query that executes only when executed on an index that - matches a specific list of indices, and another query that executes when it - is executed on an index that does not match the listed indices.

    - - @name ejs.IndicesQuery - - @desc - A configurable query that is dependent on the index name. - - @param {Object} qry A valid query object. - @param {String || Array} indices a single index name or an array of index - names. - */ - ejs.IndicesQuery = function (qry, indices) { - - if (!isQuery(qry)) { - throw new TypeError('Argument must be a Query'); - } - - /** - The internal query object. Use _self() - @member ejs.IndicesQuery - @property {Object} query - */ - var query = { - indices: { - query: qry._self() - } - }; - - if (isString(indices)) { - query.indices.indices = [indices]; - } else if (isArray(indices)) { - query.indices.indices = indices; - } else { - throw new TypeError('Argument must be a string or array'); - } - - return { - - /** - Sets the indicies the query should match. When passed a string, - the index name is added to the current list of indices. When passed - an array, it overwites all current indices. - - @member ejs.IndicesQuery - @param {String || Array} i A single index name or an array of index names. - @returns {Object} returns this so that calls can be chained. - */ - indices: function (i) { - if (i == null) { - return query.indices.indices; - } - - if (isString(i)) { - query.indices.indices.push(i); - } else if (isArray(i)) { - query.indices.indices = i; - } else { - throw new TypeError('Argument must be a string or array'); - } - - return this; - }, - - /** - Sets the query to be executed against the indices specified. - - @member ejs.IndicesQuery - @param {Object} q A valid Query object - @returns {Object} returns this so that calls can be chained. - */ - query: function (q) { - if (q == null) { - return query.indices.query; - } - - if (!isQuery(q)) { - throw new TypeError('Argument must be a Query'); - } - - query.indices.query = q._self(); - return this; - }, - - /** - Sets the query to be used on an index that does not match an index - name in the indices list. Can also be set to "none" to not match any - documents or "all" to match all documents. - - @member ejs.IndicesQuery - @param {Object || String} q A valid Query object or "none" or "all" - @returns {Object} returns this so that calls can be chained. - */ - noMatchQuery: function (q) { - if (q == null) { - return query.indices.no_match_query; - } - - if (isString(q)) { - q = q.toLowerCase(); - if (q === 'none' || q === 'all') { - query.indices.no_match_query = q; - } - } else if (isQuery(q)) { - query.indices.no_match_query = q._self(); - } else { - throw new TypeError('Argument must be string or Query'); - } - - return this; - }, - - /** - Sets the boost value of the Query. - - @member ejs.IndicesQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.indices.boost; - } - - query.indices.boost = boost; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.IndicesQuery - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.IndicesQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - Retrieves the internal query object. This is typically used by - internal API functions so use with caution. - - @member ejs.IndicesQuery - @returns {String} returns this object's internal query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    This query can be used to match all the documents - in a given set of collections and/or types.

    - - @name ejs.MatchAllQuery - - @desc -

    A query that returns all documents.

    - - */ - ejs.MatchAllQuery = function () { - - /** - The internal Query object. Use get(). - @member ejs.MatchAllQuery - @property {Object} query - */ - var query = { - match_all: {} - }; - - return { - - /** - Sets the boost value of the Query. - - @member ejs.MatchAllQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.match_all.boost; - } - - query.match_all.boost = boost; - return this; - }, - - /** - Serializes the internal query object as a JSON string. - @member ejs.MatchAllQuery - @returns {String} Returns a JSON representation of the Query object. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.MatchAllQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - This method is used to retrieve the raw query object. It's designed - for internal use when composing and serializing queries. - - @member ejs.MatchAllQuery - @returns {Object} Returns the object's query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class - A MatchQuery is a type of Query that accepts - text/numerics/dates, analyzes it, generates a query based on the - MatchQuery type. - - @name ejs.MatchQuery - - @desc - A Query that appects text, analyzes it, generates internal query based - on the MatchQuery type. - - @param {String} field the document field/field to query against - @param {String} qstr the query string - */ - ejs.MatchQuery = function (field, qstr) { - - /** - The internal query object. Use get() - @member ejs.MatchQuery - @property {Object} query - */ - var query = { - match: {} - }; - - query.match[field] = { - query: qstr - }; - - return { - - /** - Sets the boost value for documents matching the Query. - - @member ejs.MatchQuery - @param {Number} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.match[field].boost; - } - - query.match[field].boost = boost; - return this; - }, - - /** - Sets the query string for the Query. - - @member ejs.MatchQuery - @param {String} qstr The query string to search for. - @returns {Object} returns this so that calls can be chained. - */ - query: function (qstr) { - if (qstr == null) { - return query.match[field].query; - } - - query.match[field].query = qstr; - return this; - }, - - /** - Sets the type of the MatchQuery. Valid values are - boolean, phrase, and phrase_prefix. - - @member ejs.MatchQuery - @param {String} type Any of boolean, phrase, phrase_prefix. - @returns {Object} returns this so that calls can be chained. - */ - type: function (type) { - if (type == null) { - return query.match[field].type; - } - - type = type.toLowerCase(); - if (type === 'boolean' || type === 'phrase' || type === 'phrase_prefix') { - query.match[field].type = type; - } - - return this; - }, - - /** - Sets the fuzziness value for the Query. - - @member ejs.MatchQuery - @param {Double} fuzz A double value between 0.0 and 1.0. - @returns {Object} returns this so that calls can be chained. - */ - fuzziness: function (fuzz) { - if (fuzz == null) { - return query.match[field].fuzziness; - } - - query.match[field].fuzziness = fuzz; - return this; - }, - - /** - Sets the maximum threshold/frequency to be considered a low - frequency term in a CommonTermsQuery. - Set to a value between 0 and 1. - - @member ejs.MatchQuery - @param {Number} freq A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - cutoffFrequency: function (freq) { - if (freq == null) { - return query.match[field].cutoff_frequency; - } - - query.match[field].cutoff_frequency = freq; - return this; - }, - - /** - Sets the prefix length for a fuzzy prefix MatchQuery. - - @member ejs.MatchQuery - @param {Integer} l A positive integer length value. - @returns {Object} returns this so that calls can be chained. - */ - prefixLength: function (l) { - if (l == null) { - return query.match[field].prefix_length; - } - - query.match[field].prefix_length = l; - return this; - }, - - /** - Sets the max expansions of a fuzzy MatchQuery. - - @member ejs.MatchQuery - @param {Integer} e A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - maxExpansions: function (e) { - if (e == null) { - return query.match[field].max_expansions; - } - - query.match[field].max_expansions = e; - return this; - }, - - /** - Sets default operator of the Query. Default: or. - - @member ejs.MatchQuery - @param {String} op Any of "and" or "or", no quote characters. - @returns {Object} returns this so that calls can be chained. - */ - operator: function (op) { - if (op == null) { - return query.match[field].operator; - } - - op = op.toLowerCase(); - if (op === 'and' || op === 'or') { - query.match[field].operator = op; - } - - return this; - }, - - /** - Sets the default slop for phrases. If zero, then exact phrase matches - are required. Default: 0. - - @member ejs.MatchQuery - @param {Integer} slop A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - slop: function (slop) { - if (slop == null) { - return query.match[field].slop; - } - - query.match[field].slop = slop; - return this; - }, - - /** - Sets the analyzer name used to analyze the Query object. - - @member ejs.MatchQuery - @param {String} analyzer A valid analyzer name. - @returns {Object} returns this so that calls can be chained. - */ - analyzer: function (analyzer) { - if (analyzer == null) { - return query.match[field].analyzer; - } - - query.match[field].analyzer = analyzer; - return this; - }, - - /** - Sets a percent value controlling how many "should" clauses in the - resulting Query should match. - - @member ejs.MatchQuery - @param {Integer} minMatch An integer between 0 and 100. - @returns {Object} returns this so that calls can be chained. - */ - minimumShouldMatch: function (minMatch) { - if (minMatch == null) { - return query.match[field].minimum_should_match; - } - - query.match[field].minimum_should_match = minMatch; - return this; - }, - - /** - Sets rewrite method. Valid values are: - - constant_score_auto - tries to pick the best constant-score rewrite - method based on term and document counts from the query - - scoring_boolean - translates each term into boolean should and - keeps the scores as computed by the query - - constant_score_boolean - same as scoring_boolean, expect no scores - are computed. - - constant_score_filter - first creates a private Filter, by visiting - each term in sequence and marking all docs for that term - - top_terms_boost_N - first translates each term into boolean should - and scores are only computed as the boost using the top N - scoring terms. Replace N with an integer value. - - top_terms_N - first translates each term into boolean should - and keeps the scores as computed by the query. Only the top N - scoring terms are used. Replace N with an integer value. - - Default is constant_score_auto. - - This is an advanced option, use with care. - - @member ejs.MatchQuery - @param {String} m The rewrite method as a string. - @returns {Object} returns this so that calls can be chained. - */ - rewrite: function (m) { - if (m == null) { - return query.match[field].rewrite; - } - - m = m.toLowerCase(); - if (m === 'constant_score_auto' || m === 'scoring_boolean' || - m === 'constant_score_boolean' || m === 'constant_score_filter' || - m.indexOf('top_terms_boost_') === 0 || - m.indexOf('top_terms_') === 0) { - - query.match[field].rewrite = m; - } - - return this; - }, - - /** - Sets fuzzy rewrite method. Valid values are: - - constant_score_auto - tries to pick the best constant-score rewrite - method based on term and document counts from the query - - scoring_boolean - translates each term into boolean should and - keeps the scores as computed by the query - - constant_score_boolean - same as scoring_boolean, expect no scores - are computed. - - constant_score_filter - first creates a private Filter, by visiting - each term in sequence and marking all docs for that term - - top_terms_boost_N - first translates each term into boolean should - and scores are only computed as the boost using the top N - scoring terms. Replace N with an integer value. - - top_terms_N - first translates each term into boolean should - and keeps the scores as computed by the query. Only the top N - scoring terms are used. Replace N with an integer value. - - Default is constant_score_auto. - - This is an advanced option, use with care. - - @member ejs.MatchQuery - @param {String} m The rewrite method as a string. - @returns {Object} returns this so that calls can be chained. - */ - fuzzyRewrite: function (m) { - if (m == null) { - return query.match[field].fuzzy_rewrite; - } - - m = m.toLowerCase(); - if (m === 'constant_score_auto' || m === 'scoring_boolean' || - m === 'constant_score_boolean' || m === 'constant_score_filter' || - m.indexOf('top_terms_boost_') === 0 || - m.indexOf('top_terms_') === 0) { - - query.match[field].fuzzy_rewrite = m; - } - - return this; - }, - - /** - Set to false to use classic Levenshtein edit distance in the - fuzzy query. - - @member ejs.MatchQuery - @param {Boolean} trueFalse A boolean value - @returns {Object} returns this so that calls can be chained. - */ - fuzzyTranspositions: function (trueFalse) { - if (trueFalse == null) { - return query.match[field].fuzzy_transpositions; - } - - query.match[field].fuzzy_transpositions = trueFalse; - return this; - }, - - /** - Enables lenient parsing of the query string. - - @member ejs.MatchQuery - @param {Boolean} trueFalse A boolean value - @returns {Object} returns this so that calls can be chained. - */ - lenient: function (trueFalse) { - if (trueFalse == null) { - return query.match[field].lenient; - } - - query.match[field].lenient = trueFalse; - return this; - }, - - /** - Sets what happens when no terms match. Valid values are - "all" or "none". - - @member ejs.MatchQuery - @param {String} q A no match action, "all" or "none". - @returns {Object} returns this so that calls can be chained. - */ - zeroTermsQuery: function (q) { - if (q == null) { - return query.match[field].zero_terms_query; - } - - q = q.toLowerCase(); - if (q === 'all' || q === 'none') { - query.match[field].zero_terms_query = q; - } - - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.MatchQuery - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.MatchQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - Retrieves the internal query object. This is typically used by - internal API functions so use with caution. - - @member ejs.MatchQuery - @returns {String} returns this object's internal query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    The more_like_this_field query is the same as the more_like_this query, - except it runs against a single field.

    - - @name ejs.MoreLikeThisFieldQuery - - @desc -

    Constructs a query where each documents returned are “like” provided text

    - - @param {String} field The field to run the query against. - @param {String} likeText The text to find documents like it. - - */ - ejs.MoreLikeThisFieldQuery = function (field, likeText) { - - /** - The internal Query object. Use get(). - @member ejs.MoreLikeThisFieldQuery - @property {Object} query - */ - var query = { - mlt_field: {} - }; - - query.mlt_field[field] = { - like_text: likeText - }; - - return { - - /** - The field to run the query against. - - @member ejs.MoreLikeThisFieldQuery - @param {String} f A single field name. - @returns {Object} returns this so that calls can be chained. - */ - field: function (f) { - var oldValue = query.mlt_field[field]; - - if (f == null) { - return field; - } - - delete query.mlt_field[field]; - field = f; - query.mlt_field[f] = oldValue; - - return this; - }, - - /** - The text to find documents like - - @member ejs.MoreLikeThisFieldQuery - @param {String} s A text string. - @returns {Object} returns this so that calls can be chained. - */ - likeText: function (txt) { - if (txt == null) { - return query.mlt_field[field].like_text; - } - - query.mlt_field[field].like_text = txt; - return this; - }, - - /** - The percentage of terms to match on (float value). - Defaults to 0.3 (30 percent). - - @member ejs.MoreLikeThisFieldQuery - @param {Double} percent A double value between 0 and 1. - @returns {Object} returns this so that calls can be chained. - */ - percentTermsToMatch: function (percent) { - if (percent == null) { - return query.mlt_field[field].percent_terms_to_match; - } - - query.mlt_field[field].percent_terms_to_match = percent; - return this; - }, - - /** - The frequency below which terms will be ignored in the source doc. - The default frequency is 2. - - @member ejs.MoreLikeThisFieldQuery - @param {Integer} freq A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - minTermFreq: function (freq) { - if (freq == null) { - return query.mlt_field[field].min_term_freq; - } - - query.mlt_field[field].min_term_freq = freq; - return this; - }, - - /** - The maximum number of query terms that will be included in any - generated query. Defaults to 25. - - @member ejs.MoreLikeThisFieldQuery - @param {Integer} max A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - maxQueryTerms: function (max) { - if (max == null) { - return query.mlt_field[field].max_query_terms; - } - - query.mlt_field[field].max_query_terms = max; - return this; - }, - - /** - An array of stop words. Any word in this set is considered - “uninteresting” and ignored. Even if your Analyzer allows stopwords, - you might want to tell the MoreLikeThis code to ignore them, as for - the purposes of document similarity it seems reasonable to assume - that “a stop word is never interesting”. - - @member ejs.MoreLikeThisFieldQuery - @param {Array} stopWords An array of string stopwords - @returns {Object} returns this so that calls can be chained. - */ - stopWords: function (stopWords) { - if (stopWords == null) { - return query.mlt_field[field].stop_words; - } - - query.mlt_field[field].stop_words = stopWords; - return this; - }, - - /** - The frequency at which words will be ignored which do not occur in - at least this many docs. Defaults to 5. - - @member ejs.MoreLikeThisFieldQuery - @param {Integer} min A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - minDocFreq: function (min) { - if (min == null) { - return query.mlt_field[field].min_doc_freq; - } - - query.mlt_field[field].min_doc_freq = min; - return this; - }, - - /** - The maximum frequency in which words may still appear. Words that - appear in more than this many docs will be ignored. - Defaults to unbounded. - - @member ejs.MoreLikeThisFieldQuery - @param {Integer} max A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - maxDocFreq: function (max) { - if (max == null) { - return query.mlt_field[field].max_doc_freq; - } - - query.mlt_field[field].max_doc_freq = max; - return this; - }, - - /** - The minimum word length below which words will be ignored. - Defaults to 0. - - @member ejs.MoreLikeThisFieldQuery - @param {Integer} len A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - minWordLen: function (len) { - if (len == null) { - return query.mlt_field[field].min_word_len; - } - - query.mlt_field[field].min_word_len = len; - return this; - }, - - /** - The maximum word length above which words will be ignored. - Defaults to unbounded (0). - - @member ejs.MoreLikeThisFieldQuery - @param {Integer} len A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - maxWordLen: function (len) { - if (len == null) { - return query.mlt_field[field].max_word_len; - } - - query.mlt_field[field].max_word_len = len; - return this; - }, - - /** - The analyzer that will be used to analyze the text. Defaults to the - analyzer associated with the field. - - @member ejs.MoreLikeThisFieldQuery - @param {String} analyzerName The name of the analyzer. - @returns {Object} returns this so that calls can be chained. - */ - analyzer: function (analyzerName) { - if (analyzerName == null) { - return query.mlt_field[field].analyzer; - } - - query.mlt_field[field].analyzer = analyzerName; - return this; - }, - - /** - Sets the boost factor to use when boosting terms. - Defaults to 1. - - @member ejs.MoreLikeThisFieldQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boostTerms: function (boost) { - if (boost == null) { - return query.mlt_field[field].boost_terms; - } - - query.mlt_field[field].boost_terms = boost; - return this; - }, - - /** - Should the Query fail when an unsupported field - is specified. Defaults to true. - - @member ejs.MoreLikeThisFieldQuery - @param {Boolean} trueFalse A boolean value - @returns {Object} returns this so that calls can be chained. - */ - failOnUnsupportedField: function (trueFalse) { - if (trueFalse == null) { - return query.mlt_field[field].fail_on_unsupported_field; - } - - query.mlt_field[field].fail_on_unsupported_field = trueFalse; - return this; - }, - - /** - Sets the boost value of the Query. - - @member ejs.MoreLikeThisFieldQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.mlt_field[field].boost; - } - - query.mlt_field[field].boost = boost; - return this; - }, - - /** - Serializes the internal query object as a JSON string. - @member ejs.MoreLikeThisFieldQuery - @returns {String} Returns a JSON representation of the Query object. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.MoreLikeThisFieldQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - This method is used to retrieve the raw query object. It's designed - for internal use when composing and serializing queries. - @member ejs.MoreLikeThisFieldQuery - @returns {Object} Returns the object's query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    More like this query find documents that are “like” provided text by - running it against one or more fields.

    - - @name ejs.MoreLikeThisQuery - - @desc -

    Constructs a query where each documents returned are “like” provided text

    - - @param {String || Array} fields A single field or array of fields to run against. - @param {String} likeText The text to find documents like it. - - */ - ejs.MoreLikeThisQuery = function (fields, likeText) { - - /** - The internal Query object. Use get(). - @member ejs.MoreLikeThisQuery - @property {Object} query - */ - var query = { - mlt: { - like_text: likeText, - fields: [] - } - }; - - if (isString(fields)) { - query.mlt.fields.push(fields); - } else if (isArray(fields)) { - query.mlt.fields = fields; - } else { - throw new TypeError('Argument must be string or array'); - } - - return { - - /** - The fields to run the query against. If you call with a single field, - it is added to the existing list of fields. If called with an array - of field names, it replaces any existing values with the new array. - - @member ejs.MoreLikeThisQuery - @param {String || Array} f A single field name or a list of field names. - @returns {Object} returns this so that calls can be chained. - */ - fields: function (f) { - if (f == null) { - return query.mlt.fields; - } - - if (isString(f)) { - query.mlt.fields.push(f); - } else if (isArray(f)) { - query.mlt.fields = f; - } else { - throw new TypeError('Argument must be a string or array'); - } - - return this; - }, - - /** - The text to find documents like - - @member ejs.MoreLikeThisQuery - @param {String} s A text string. - @returns {Object} returns this so that calls can be chained. - */ - likeText: function (txt) { - if (txt == null) { - return query.mlt.like_text; - } - - query.mlt.like_text = txt; - return this; - }, - - /** - The percentage of terms to match on (float value). - Defaults to 0.3 (30 percent). - - @member ejs.MoreLikeThisQuery - @param {Double} percent A double value between 0 and 1. - @returns {Object} returns this so that calls can be chained. - */ - percentTermsToMatch: function (percent) { - if (percent == null) { - return query.mlt.percent_terms_to_match; - } - - query.mlt.percent_terms_to_match = percent; - return this; - }, - - /** - The frequency below which terms will be ignored in the source doc. - The default frequency is 2. - - @member ejs.MoreLikeThisQuery - @param {Integer} freq A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - minTermFreq: function (freq) { - if (freq == null) { - return query.mlt.min_term_freq; - } - - query.mlt.min_term_freq = freq; - return this; - }, - - /** - The maximum number of query terms that will be included in any - generated query. Defaults to 25. - - @member ejs.MoreLikeThisQuery - @param {Integer} max A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - maxQueryTerms: function (max) { - if (max == null) { - return query.mlt.max_query_terms; - } - - query.mlt.max_query_terms = max; - return this; - }, - - /** - An array of stop words. Any word in this set is considered - “uninteresting” and ignored. Even if your Analyzer allows stopwords, - you might want to tell the MoreLikeThis code to ignore them, as for - the purposes of document similarity it seems reasonable to assume - that “a stop word is never interesting”. - - @member ejs.MoreLikeThisQuery - @param {Array} stopWords An array of string stopwords - @returns {Object} returns this so that calls can be chained. - */ - stopWords: function (stopWords) { - if (stopWords == null) { - return query.mlt.stop_words; - } - - query.mlt.stop_words = stopWords; - return this; - }, - - /** - The frequency at which words will be ignored which do not occur in - at least this many docs. Defaults to 5. - - @member ejs.MoreLikeThisQuery - @param {Integer} min A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - minDocFreq: function (min) { - if (min == null) { - return query.mlt.min_doc_freq; - } - - query.mlt.min_doc_freq = min; - return this; - }, - - /** - The maximum frequency in which words may still appear. Words that - appear in more than this many docs will be ignored. - Defaults to unbounded. - - @member ejs.MoreLikeThisQuery - @param {Integer} max A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - maxDocFreq: function (max) { - if (max == null) { - return query.mlt.max_doc_freq; - } - - query.mlt.max_doc_freq = max; - return this; - }, - - /** - The minimum word length below which words will be ignored. - Defaults to 0. - - @member ejs.MoreLikeThisQuery - @param {Integer} len A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - minWordLen: function (len) { - if (len == null) { - return query.mlt.min_word_len; - } - - query.mlt.min_word_len = len; - return this; - }, - - /** - The maximum word length above which words will be ignored. - Defaults to unbounded (0). - - @member ejs.MoreLikeThisQuery - @param {Integer} len A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - maxWordLen: function (len) { - if (len == null) { - return query.mlt.max_word_len; - } - - query.mlt.max_word_len = len; - return this; - }, - - /** - The analyzer that will be used to analyze the text. Defaults to the - analyzer associated with the field. - - @member ejs.MoreLikeThisQuery - @param {String} analyzerName The name of the analyzer. - @returns {Object} returns this so that calls can be chained. - */ - analyzer: function (analyzerName) { - if (analyzerName == null) { - return query.mlt.analyzer; - } - - query.mlt.analyzer = analyzerName; - return this; - }, - - /** - Sets the boost factor to use when boosting terms. - Defaults to 1. - - @member ejs.MoreLikeThisQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boostTerms: function (boost) { - if (boost == null) { - return query.mlt.boost_terms; - } - - query.mlt.boost_terms = boost; - return this; - }, - - /** - Should the Query fail when an unsupported field - is specified. Defaults to true. - - @member ejs.MoreLikeThisQuery - @param {Boolean} trueFalse A boolean value - @returns {Object} returns this so that calls can be chained. - */ - failOnUnsupportedField: function (trueFalse) { - if (trueFalse == null) { - return query.mlt.fail_on_unsupported_field; - } - - query.mlt.fail_on_unsupported_field = trueFalse; - return this; - }, - - /** - Sets the boost value of the Query. - - @member ejs.MoreLikeThisQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.mlt.boost; - } - - query.mlt.boost = boost; - return this; - }, - - /** - Serializes the internal query object as a JSON string. - @member ejs.MoreLikeThisQuery - @returns {String} Returns a JSON representation of the Query object. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.MoreLikeThisQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - This method is used to retrieve the raw query object. It's designed - for internal use when composing and serializing queries. - @member ejs.MoreLikeThisQuery - @returns {Object} Returns the object's query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class - A MultiMatchQuery query builds further on top of the - MatchQuery by allowing multiple fields to be specified. - The idea here is to allow to more easily build a concise match type query - over multiple fields instead of using a relatively more expressive query - by using multiple match queries within a bool query. - - @name ejs.MultiMatchQuery - - @desc - A Query that allow to more easily build a MatchQuery - over multiple fields - - @param {String || Array} fields the single field or array of fields to search across - @param {String} qstr the query string - */ - ejs.MultiMatchQuery = function (fields, qstr) { - - /** - The internal query object. Use get() - @member ejs.MultiMatchQuery - @property {Object} query - */ - var query = { - multi_match: { - query: qstr, - fields: [] - } - }; - - if (isString(fields)) { - query.multi_match.fields.push(fields); - } else if (isArray(fields)) { - query.multi_match.fields = fields; - } else { - throw new TypeError('Argument must be string or array'); - } - - return { - - /** - Sets the fields to search across. If passed a single value it is - added to the existing list of fields. If passed an array of - values, they overwite all existing values. - - @member ejs.MultiMatchQuery - @param {String || Array} f A single field or list of fields names to - search across. - @returns {Object} returns this so that calls can be - chained. Returns {Array} current value if `f` not specified. - */ - fields: function (f) { - if (f == null) { - return query.multi_match.fields; - } - - if (isString(f)) { - query.multi_match.fields.push(f); - } else if (isArray(f)) { - query.multi_match.fields = f; - } else { - throw new TypeError('Argument must be string or array'); - } - - return this; - }, - - /** - Sets whether or not queries against multiple fields should be combined using Lucene's - - DisjunctionMaxQuery - - @member ejs.MultiMatchQuery - @param {String} trueFalse A true/false value. - @returns {Object} returns this so that calls can be chained. - */ - useDisMax: function (trueFalse) { - if (trueFalse == null) { - return query.multi_match.use_dis_max; - } - - query.multi_match.use_dis_max = trueFalse; - return this; - }, - - /** - The tie breaker value. The tie breaker capability allows results - that include the same term in multiple fields to be judged better than - results that include this term in only the best of those multiple - fields, without confusing this with the better case of two different - terms in the multiple fields. Default: 0.0. - - @member ejs.MultiMatchQuery - @param {Double} tieBreaker A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - tieBreaker: function (tieBreaker) { - if (tieBreaker == null) { - return query.multi_match.tie_breaker; - } - - query.multi_match.tie_breaker = tieBreaker; - return this; - }, - - /** - Sets the maximum threshold/frequency to be considered a low - frequency term in a CommonTermsQuery. - Set to a value between 0 and 1. - - @member ejs.MultiMatchQuery - @param {Number} freq A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - cutoffFrequency: function (freq) { - if (freq == null) { - return query.multi_match.cutoff_frequency; - } - - query.multi_match.cutoff_frequency = freq; - return this; - }, - - /** - Sets a percent value controlling how many "should" clauses in the - resulting Query should match. - - @member ejs.MultiMatchQuery - @param {Integer} minMatch An integer between 0 and 100. - @returns {Object} returns this so that calls can be chained. - */ - minimumShouldMatch: function (minMatch) { - if (minMatch == null) { - return query.multi_match.minimum_should_match; - } - - query.multi_match.minimum_should_match = minMatch; - return this; - }, - - /** - Sets rewrite method. Valid values are: - - constant_score_auto - tries to pick the best constant-score rewrite - method based on term and document counts from the query - - scoring_boolean - translates each term into boolean should and - keeps the scores as computed by the query - - constant_score_boolean - same as scoring_boolean, expect no scores - are computed. - - constant_score_filter - first creates a private Filter, by visiting - each term in sequence and marking all docs for that term - - top_terms_boost_N - first translates each term into boolean should - and scores are only computed as the boost using the top N - scoring terms. Replace N with an integer value. - - top_terms_N - first translates each term into boolean should - and keeps the scores as computed by the query. Only the top N - scoring terms are used. Replace N with an integer value. - - Default is constant_score_auto. - - This is an advanced option, use with care. - - @member ejs.MultiMatchQuery - @param {String} m The rewrite method as a string. - @returns {Object} returns this so that calls can be chained. - */ - rewrite: function (m) { - if (m == null) { - return query.multi_match.rewrite; - } - - m = m.toLowerCase(); - if (m === 'constant_score_auto' || m === 'scoring_boolean' || - m === 'constant_score_boolean' || m === 'constant_score_filter' || - m.indexOf('top_terms_boost_') === 0 || - m.indexOf('top_terms_') === 0) { - - query.multi_match.rewrite = m; - } - - return this; - }, - - /** - Sets fuzzy rewrite method. Valid values are: - - constant_score_auto - tries to pick the best constant-score rewrite - method based on term and document counts from the query - - scoring_boolean - translates each term into boolean should and - keeps the scores as computed by the query - - constant_score_boolean - same as scoring_boolean, expect no scores - are computed. - - constant_score_filter - first creates a private Filter, by visiting - each term in sequence and marking all docs for that term - - top_terms_boost_N - first translates each term into boolean should - and scores are only computed as the boost using the top N - scoring terms. Replace N with an integer value. - - top_terms_N - first translates each term into boolean should - and keeps the scores as computed by the query. Only the top N - scoring terms are used. Replace N with an integer value. - - Default is constant_score_auto. - - This is an advanced option, use with care. - - @member ejs.MultiMatchQuery - @param {String} m The rewrite method as a string. - @returns {Object} returns this so that calls can be chained. - */ - fuzzyRewrite: function (m) { - if (m == null) { - return query.multi_match.fuzzy_rewrite; - } - - m = m.toLowerCase(); - if (m === 'constant_score_auto' || m === 'scoring_boolean' || - m === 'constant_score_boolean' || m === 'constant_score_filter' || - m.indexOf('top_terms_boost_') === 0 || - m.indexOf('top_terms_') === 0) { - - query.multi_match.fuzzy_rewrite = m; - } - - return this; - }, - - /** - Enables lenient parsing of the query string. - - @member ejs.MultiMatchQuery - @param {Boolean} trueFalse A boolean value - @returns {Object} returns this so that calls can be chained. - */ - lenient: function (trueFalse) { - if (trueFalse == null) { - return query.multi_match.lenient; - } - - query.multi_match.lenient = trueFalse; - return this; - }, - - /** - Sets the boost value for documents matching the Query. - - @member ejs.MultiMatchQuery - @param {Number} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.multi_match.boost; - } - - query.multi_match.boost = boost; - return this; - }, - - /** - Sets the query string for the Query. - - @member ejs.MultiMatchQuery - @param {String} qstr The query string to search for. - @returns {Object} returns this so that calls can be chained. - */ - query: function (qstr) { - if (qstr == null) { - return query.multi_match.query; - } - - query.multi_match.query = qstr; - return this; - }, - - /** - Sets the type of the MultiMatchQuery. Valid values are - boolean, phrase, and phrase_prefix or phrasePrefix. - - @member ejs.MultiMatchQuery - @param {String} type Any of boolean, phrase, phrase_prefix or phrasePrefix. - @returns {Object} returns this so that calls can be chained. - */ - type: function (type) { - if (type == null) { - return query.multi_match.type; - } - - type = type.toLowerCase(); - if (type === 'boolean' || type === 'phrase' || type === 'phrase_prefix') { - query.multi_match.type = type; - } - - return this; - }, - - /** - Sets the fuzziness value for the Query. - - @member ejs.MultiMatchQuery - @param {Double} fuzz A double value between 0.0 and 1.0. - @returns {Object} returns this so that calls can be chained. - */ - fuzziness: function (fuzz) { - if (fuzz == null) { - return query.multi_match.fuzziness; - } - - query.multi_match.fuzziness = fuzz; - return this; - }, - - /** - Sets the prefix length for a fuzzy prefix Query. - - @member ejs.MultiMatchQuery - @param {Integer} l A positive integer length value. - @returns {Object} returns this so that calls can be chained. - */ - prefixLength: function (l) { - if (l == null) { - return query.multi_match.prefix_length; - } - - query.multi_match.prefix_length = l; - return this; - }, - - /** - Sets the max expansions of a fuzzy Query. - - @member ejs.MultiMatchQuery - @param {Integer} e A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - maxExpansions: function (e) { - if (e == null) { - return query.multi_match.max_expansions; - } - - query.multi_match.max_expansions = e; - return this; - }, - - /** - Sets default operator of the Query. Default: or. - - @member ejs.MultiMatchQuery - @param {String} op Any of "and" or "or", no quote characters. - @returns {Object} returns this so that calls can be chained. - */ - operator: function (op) { - if (op == null) { - return query.multi_match.operator; - } - - op = op.toLowerCase(); - if (op === 'and' || op === 'or') { - query.multi_match.operator = op; - } - - return this; - }, - - /** - Sets the default slop for phrases. If zero, then exact phrase matches - are required. Default: 0. - - @member ejs.MultiMatchQuery - @param {Integer} slop A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - slop: function (slop) { - if (slop == null) { - return query.multi_match.slop; - } - - query.multi_match.slop = slop; - return this; - }, - - /** - Sets the analyzer name used to analyze the Query object. - - @member ejs.MultiMatchQuery - @param {String} analyzer A valid analyzer name. - @returns {Object} returns this so that calls can be chained. - */ - analyzer: function (analyzer) { - if (analyzer == null) { - return query.multi_match.analyzer; - } - - query.multi_match.analyzer = analyzer; - return this; - }, - - /** - Sets what happens when no terms match. Valid values are - "all" or "none". - - @member ejs.MultiMatchQuery - @param {String} q A no match action, "all" or "none". - @returns {Object} returns this so that calls can be chained. - */ - zeroTermsQuery: function (q) { - if (q == null) { - return query.multi_match.zero_terms_query; - } - - q = q.toLowerCase(); - if (q === 'all' || q === 'none') { - query.multi_match.zero_terms_query = q; - } - - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.MultiMatchQuery - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.MultiMatchQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - Retrieves the internal Query object. This is typically used by - internal API functions so use with caution. - - @member ejs.MultiMatchQuery - @returns {String} returns this object's internal query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    Nested queries allow you to search against content within objects that are - embedded inside of other objects. It is similar to XPath expressions - in XML both conceptually and syntactically.

    - -

    The query is executed against the nested objects / docs as if they were - indexed as separate docs and resulting in the rootparent doc (or parent - nested mapping).

    - - @name ejs.NestedQuery - - @desc -

    Constructs a query that is capable of executing a search against objects - nested within a document.

    - - @param {String} path The nested object path. - - */ - ejs.NestedQuery = function (path) { - - /** - The internal Query object. Use _self(). - - @member ejs.NestedQuery - @property {Object} query - */ - var query = { - nested: { - path: path - } - }; - - return { - - /** - Sets the root context for the nested query. - - @member ejs.NestedQuery - @param {String} path The path defining the root context for the nested query. - @returns {Object} returns this so that calls can be chained. - */ - path: function (path) { - if (path == null) { - return query.nested.path; - } - - query.nested.path = path; - return this; - }, - - /** - Sets the nested query to be executed. - - @member ejs.NestedQuery - @param {Object} oQuery A valid Query object - @returns {Object} returns this so that calls can be chained. - */ - query: function (oQuery) { - if (oQuery == null) { - return query.nested.query; - } - - if (!isQuery(oQuery)) { - throw new TypeError('Argument must be a Query'); - } - - query.nested.query = oQuery._self(); - return this; - }, - - - /** - Sets the nested filter to be executed. - - @member ejs.NestedQuery - @param {Object} oFilter A valid Filter object - @returns {Object} returns this so that calls can be chained. - */ - filter: function (oFilter) { - if (oFilter == null) { - return query.nested.filter; - } - - if (!isFilter(oFilter)) { - throw new TypeError('Argument must be a Filter'); - } - - query.nested.filter = oFilter._self(); - return this; - }, - - /** - Sets how the inner (nested) matches affect scoring on the parent document. - - @member ejs.NestedQuery - @param {String} mode The mode of scoring to be used for nested matches. - Options are avg, total, max, none - defaults to avg - @returns {Object} returns this so that calls can be chained. - */ - scoreMode: function (mode) { - if (mode == null) { - return query.nested.score_mode; - } - - mode = mode.toLowerCase(); - if (mode === 'avg' || mode === 'total' || mode === 'max' || - mode === 'none' || mode === 'sum') { - - query.nested.score_mode = mode; - } - - return this; - }, - - /** - Sets the scope of the query. A scope allows to run facets on the - same scope name that will work against the nested documents. - - @deprecated since elasticsearch 0.90 - @member ejs.NestedQuery - @param {String} s The scope name as a string. - @returns {Object} returns this so that calls can be chained. - */ - scope: function (s) { - return this; - }, - - /** - Sets the boost value of the nested Query. - - @member ejs.NestedQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.nested.boost; - } - - query.nested.boost = boost; - return this; - }, - - /** - Serializes the internal query object as a JSON string. - - @member ejs.NestedQuery - @returns {String} Returns a JSON representation of the termFilter object. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.NestedQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - This method is used to retrieve the raw query object. It's designed - for internal use when composing and serializing queries. - - @member ejs.NestedQuery - @returns {Object} Returns the object's query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    Matches documents that have fields containing terms with a specified - prefix (not analyzed). The prefix query maps to Lucene PrefixQuery.

    - - @name ejs.PrefixQuery - - @desc - Matches documents containing the specified un-analyzed prefix. - - @param {String} field A valid field name. - @param {String} value A string prefix. - */ - ejs.PrefixQuery = function (field, value) { - - /** - The internal query object. Use get() - @member ejs.PrefixQuery - @property {Object} query - */ - var query = { - prefix: {} - }; - - query.prefix[field] = { - value: value - }; - - return { - - /** - The field to run the query against. - - @member ejs.PrefixQuery - @param {String} f A single field name. - @returns {Object} returns this so that calls can be chained. - */ - field: function (f) { - var oldValue = query.prefix[field]; - - if (f == null) { - return field; - } - - delete query.prefix[field]; - field = f; - query.prefix[f] = oldValue; - - return this; - }, - - /** - The prefix value. - - @member ejs.PrefixQuery - @param {String} p A string prefix - @returns {Object} returns this so that calls can be chained. - */ - value: function (p) { - if (p == null) { - return query.prefix[field].value; - } - - query.prefix[field].value = p; - return this; - }, - - /** - Sets rewrite method. Valid values are: - - constant_score_auto - tries to pick the best constant-score rewrite - method based on term and document counts from the query - - scoring_boolean - translates each term into boolean should and - keeps the scores as computed by the query - - constant_score_boolean - same as scoring_boolean, expect no scores - are computed. - - constant_score_filter - first creates a private Filter, by visiting - each term in sequence and marking all docs for that term - - top_terms_boost_N - first translates each term into boolean should - and scores are only computed as the boost using the top N - scoring terms. Replace N with an integer value. - - top_terms_N - first translates each term into boolean should - and keeps the scores as computed by the query. Only the top N - scoring terms are used. Replace N with an integer value. - - Default is constant_score_auto. - - This is an advanced option, use with care. - - @member ejs.PrefixQuery - @param {String} m The rewrite method as a string. - @returns {Object} returns this so that calls can be chained. - */ - rewrite: function (m) { - if (m == null) { - return query.prefix[field].rewrite; - } - - m = m.toLowerCase(); - if (m === 'constant_score_auto' || m === 'scoring_boolean' || - m === 'constant_score_boolean' || m === 'constant_score_filter' || - m.indexOf('top_terms_boost_') === 0 || - m.indexOf('top_terms_') === 0) { - - query.prefix[field].rewrite = m; - } - - return this; - }, - - /** - Sets the boost value of the Query. - - @member ejs.PrefixQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.prefix[field].boost; - } - - query.prefix[field].boost = boost; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.PrefixQuery - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.PrefixQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - Retrieves the internal query object. This is typically used by - internal API functions so use with caution. - - @member ejs.PrefixQuery - @returns {String} returns this object's internal query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    A query that is parsed using Lucene's default query parser. Although Lucene provides the - ability to create your own queries through its API, it also provides a rich query language - through the Query Parser, a lexer which interprets a string into a Lucene Query.

    - -

    See the Lucene Query Parser Syntax - for more information.

    - - @name ejs.QueryStringQuery - - @desc - A query that is parsed using Lucene's default query parser. - - @param {String} qstr A valid Lucene query string. - */ - ejs.QueryStringQuery = function (qstr) { - - /** - The internal Query object. Use get(). - @member ejs.QueryStringQuery - @property {Object} query - */ - var query = { - query_string: {} - }; - - query.query_string.query = qstr; - - return { - - /** - Sets the query string on this Query object. - - @member ejs.QueryStringQuery - @param {String} qstr A valid Lucene query string. - @returns {Object} returns this so that calls can be chained. - */ - query: function (qstr) { - if (qstr == null) { - return query.query_string.query; - } - - query.query_string.query = qstr; - return this; - }, - - /** - Sets the default field/property this query should execute against. - - @member ejs.QueryStringQuery - @param {String} fieldName The name of document field/property. - @returns {Object} returns this so that calls can be chained. - */ - defaultField: function (fieldName) { - if (fieldName == null) { - return query.query_string.default_field; - } - - query.query_string.default_field = fieldName; - return this; - }, - - /** - A set of fields/properties this query should execute against. - Pass a single value to add to the existing list of fields and - pass an array to overwrite all existing fields. For each field, - you can apply a field specific boost by appending a ^boost to the - field name. For example, title^10, to give the title field a - boost of 10. - - @member ejs.QueryStringQuery - @param {Array} fieldNames A list of document fields/properties. - @returns {Object} returns this so that calls can be chained. - */ - fields: function (fieldNames) { - if (query.query_string.fields == null) { - query.query_string.fields = []; - } - - if (fieldNames == null) { - return query.query_string.fields; - } - - if (isString(fieldNames)) { - query.query_string.fields.push(fieldNames); - } else if (isArray(fieldNames)) { - query.query_string.fields = fieldNames; - } else { - throw new TypeError('Argument must be a string or array'); - } - - return this; - }, - - /** - Sets whether or not queries against multiple fields should be combined using Lucene's - - DisjunctionMaxQuery - - @member ejs.QueryStringQuery - @param {String} trueFalse A true/false value. - @returns {Object} returns this so that calls can be chained. - */ - useDisMax: function (trueFalse) { - if (trueFalse == null) { - return query.query_string.use_dis_max; - } - - query.query_string.use_dis_max = trueFalse; - return this; - }, - - /** - Set the default Boolean operator. This operator is used to join individual query - terms when no operator is explicity used in the query string (i.e., this AND that). - Defaults to OR (same as Google). - - @member ejs.QueryStringQuery - @param {String} op The operator to use, AND or OR. - @returns {Object} returns this so that calls can be chained. - */ - defaultOperator: function (op) { - if (op == null) { - return query.query_string.default_operator; - } - - op = op.toUpperCase(); - if (op === 'AND' || op === 'OR') { - query.query_string.default_operator = op; - } - - return this; - }, - - /** - Sets the analyzer name used to analyze the Query object. - - @member ejs.QueryStringQuery - @param {String} analyzer A valid analyzer name. - @returns {Object} returns this so that calls can be chained. - */ - analyzer: function (analyzer) { - if (analyzer == null) { - return query.query_string.analyzer; - } - - query.query_string.analyzer = analyzer; - return this; - }, - - /** - Sets the quote analyzer name used to analyze the query - when in quoted text. - - @member ejs.QueryStringQuery - @param {String} analyzer A valid analyzer name. - @returns {Object} returns this so that calls can be chained. - */ - quoteAnalyzer: function (analyzer) { - if (analyzer == null) { - return query.query_string.quote_analyzer; - } - - query.query_string.quote_analyzer = analyzer; - return this; - }, - - /** - Sets whether or not wildcard characters (* and ?) are allowed as the - first character of the Query. Default: true. - - @member ejs.QueryStringQuery - @param {Boolean} trueFalse A true/false value. - @returns {Object} returns this so that calls can be chained. - */ - allowLeadingWildcard: function (trueFalse) { - if (trueFalse == null) { - return query.query_string.allow_leading_wildcard; - } - - query.query_string.allow_leading_wildcard = trueFalse; - return this; - }, - - /** - Sets whether or not terms from wildcard, prefix, fuzzy, and - range queries should automatically be lowercased in the Query - since they are not analyzed. Default: true. - - @member ejs.QueryStringQuery - @param {Boolean} trueFalse A true/false value. - @returns {Object} returns this so that calls can be chained. - */ - lowercaseExpandedTerms: function (trueFalse) { - if (trueFalse == null) { - return query.query_string.lowercase_expanded_terms; - } - - query.query_string.lowercase_expanded_terms = trueFalse; - return this; - }, - - /** - Sets whether or not position increments will be used in the - Query. Default: true. - - @member ejs.QueryStringQuery - @param {Boolean} trueFalse A true/false value. - @returns {Object} returns this so that calls can be chained. - */ - enablePositionIncrements: function (trueFalse) { - if (trueFalse == null) { - return query.query_string.enable_position_increments; - } - - query.query_string.enable_position_increments = trueFalse; - return this; - }, - - - /** - Sets the prefix length for fuzzy queries. Default: 0. - - @member ejs.QueryStringQuery - @param {Integer} fuzzLen A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - fuzzyPrefixLength: function (fuzzLen) { - if (fuzzLen == null) { - return query.query_string.fuzzy_prefix_length; - } - - query.query_string.fuzzy_prefix_length = fuzzLen; - return this; - }, - - /** - Set the minimum similarity for fuzzy queries. Default: 0.5. - - @member ejs.QueryStringQuery - @param {Double} minSim A double value between 0 and 1. - @returns {Object} returns this so that calls can be chained. - */ - fuzzyMinSim: function (minSim) { - if (minSim == null) { - return query.query_string.fuzzy_min_sim; - } - - query.query_string.fuzzy_min_sim = minSim; - return this; - }, - - /** - Sets the default slop for phrases. If zero, then exact phrase matches - are required. Default: 0. - - @member ejs.QueryStringQuery - @param {Integer} slop A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - phraseSlop: function (slop) { - if (slop == null) { - return query.query_string.phrase_slop; - } - - query.query_string.phrase_slop = slop; - return this; - }, - - /** - Sets the boost value of the Query. Default: 1.0. - - @member ejs.QueryStringQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.query_string.boost; - } - - query.query_string.boost = boost; - return this; - }, - - /** - Sets whether or not we should attempt to analyzed wilcard terms in the - Query. By default, wildcard terms are not analyzed. - Analysis of wildcard characters is not perfect. Default: false. - - @member ejs.QueryStringQuery - @param {Boolean} trueFalse A true/false value. - @returns {Object} returns this so that calls can be chained. - */ - analyzeWildcard: function (trueFalse) { - if (trueFalse == null) { - return query.query_string.analyze_wildcard; - } - - query.query_string.analyze_wildcard = trueFalse; - return this; - }, - - /** - Sets whether or not we should auto generate phrase queries *if* the - analyzer returns more than one term. Default: false. - - @member ejs.QueryStringQuery - @param {Boolean} trueFalse A true/false value. - @returns {Object} returns this so that calls can be chained. - */ - autoGeneratePhraseQueries: function (trueFalse) { - if (trueFalse == null) { - return query.query_string.auto_generate_phrase_queries; - } - - query.query_string.auto_generate_phrase_queries = trueFalse; - return this; - }, - - /** - Sets a percent value controlling how many "should" clauses in the - resulting Query should match. - - @member ejs.QueryStringQuery - @param {Integer} minMatch An integer between 0 and 100. - @returns {Object} returns this so that calls can be chained. - */ - minimumShouldMatch: function (minMatch) { - if (minMatch == null) { - return query.query_string.minimum_should_match; - } - - query.query_string.minimum_should_match = minMatch; - return this; - }, - - /** - Sets the tie breaker value for a Query using - DisMax. The tie breaker capability allows results - that include the same term in multiple fields to be judged better than - results that include this term in only the best of those multiple - fields, without confusing this with the better case of two different - terms in the multiple fields. Default: 0.0. - - @member ejs.QueryStringQuery - @param {Double} tieBreaker A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - tieBreaker: function (tieBreaker) { - if (tieBreaker == null) { - return query.query_string.tie_breaker; - } - - query.query_string.tie_breaker = tieBreaker; - return this; - }, - - /** - If they query string should be escaped or not. - - @member ejs.QueryStringQuery - @param {Boolean} trueFalse A true/false value. - @returns {Object} returns this so that calls can be chained. - */ - escape: function (trueFalse) { - if (trueFalse == null) { - return query.query_string.escape; - } - - query.query_string.escape = trueFalse; - return this; - }, - - /** - Sets the max number of term expansions for fuzzy queries. - - @member ejs.QueryStringQuery - @param {Integer} max A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - fuzzyMaxExpansions: function (max) { - if (max == null) { - return query.query_string.fuzzy_max_expansions; - } - - query.query_string.fuzzy_max_expansions = max; - return this; - }, - - /** - Sets fuzzy rewrite method. Valid values are: - - constant_score_auto - tries to pick the best constant-score rewrite - method based on term and document counts from the query - - scoring_boolean - translates each term into boolean should and - keeps the scores as computed by the query - - constant_score_boolean - same as scoring_boolean, expect no scores - are computed. - - constant_score_filter - first creates a private Filter, by visiting - each term in sequence and marking all docs for that term - - top_terms_boost_N - first translates each term into boolean should - and scores are only computed as the boost using the top N - scoring terms. Replace N with an integer value. - - top_terms_N - first translates each term into boolean should - and keeps the scores as computed by the query. Only the top N - scoring terms are used. Replace N with an integer value. - - Default is constant_score_auto. - - This is an advanced option, use with care. - - @member ejs.QueryStringQuery - @param {String} m The rewrite method as a string. - @returns {Object} returns this so that calls can be chained. - */ - fuzzyRewrite: function (m) { - if (m == null) { - return query.query_string.fuzzy_rewrite; - } - - m = m.toLowerCase(); - if (m === 'constant_score_auto' || m === 'scoring_boolean' || - m === 'constant_score_boolean' || m === 'constant_score_filter' || - m.indexOf('top_terms_boost_') === 0 || - m.indexOf('top_terms_') === 0) { - - query.query_string.fuzzy_rewrite = m; - } - - return this; - }, - - /** - Sets rewrite method. Valid values are: - - constant_score_auto - tries to pick the best constant-score rewrite - method based on term and document counts from the query - - scoring_boolean - translates each term into boolean should and - keeps the scores as computed by the query - - constant_score_boolean - same as scoring_boolean, expect no scores - are computed. - - constant_score_filter - first creates a private Filter, by visiting - each term in sequence and marking all docs for that term - - top_terms_boost_N - first translates each term into boolean should - and scores are only computed as the boost using the top N - scoring terms. Replace N with an integer value. - - top_terms_N - first translates each term into boolean should - and keeps the scores as computed by the query. Only the top N - scoring terms are used. Replace N with an integer value. - - Default is constant_score_auto. - - This is an advanced option, use with care. - - @member ejs.QueryStringQuery - @param {String} m The rewrite method as a string. - @returns {Object} returns this so that calls can be chained. - */ - rewrite: function (m) { - if (m == null) { - return query.query_string.rewrite; - } - - m = m.toLowerCase(); - if (m === 'constant_score_auto' || m === 'scoring_boolean' || - m === 'constant_score_boolean' || m === 'constant_score_filter' || - m.indexOf('top_terms_boost_') === 0 || - m.indexOf('top_terms_') === 0) { - - query.query_string.rewrite = m; - } - - return this; - }, - - /** - Sets the suffix to automatically add to the field name when - performing a quoted search. - - @member ejs.QueryStringQuery - @param {String} s The suffix as a string. - @returns {Object} returns this so that calls can be chained. - */ - quoteFieldSuffix: function (s) { - if (s == null) { - return query.query_string.quote_field_suffix; - } - - query.query_string.quote_field_suffix = s; - return this; - }, - - /** - Enables lenient parsing of the query string. - - @member ejs.QueryStringQuery - @param {Boolean} trueFalse A boolean value - @returns {Object} returns this so that calls can be chained. - */ - lenient: function (trueFalse) { - if (trueFalse == null) { - return query.query_string.lenient; - } - - query.query_string.lenient = trueFalse; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.QueryStringQuery - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.QueryStringQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - Retrieves the internal query object. This is typically used by - internal API functions so use with caution. - - @member ejs.QueryStringQuery - @returns {String} returns this object's internal query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    Matches documents with fields that have terms within a certain range. - The type of the Lucene query depends on the field type, for string fields, - the TermRangeQuery, while for number/date fields, the query is a - NumericRangeQuery.

    - - @name ejs.RangeQuery - - @desc - Matches documents with fields that have terms within a certain range. - - @param {String} field A valid field name. - */ - ejs.RangeQuery = function (field) { - - /** - The internal query object. Use get() - @member ejs.RangeQuery - @property {Object} query - */ - var query = { - range: {} - }; - - query.range[field] = {}; - - return { - - /** - The field to run the query against. - - @member ejs.RangeQuery - @param {String} f A single field name. - @returns {Object} returns this so that calls can be chained. - */ - field: function (f) { - var oldValue = query.range[field]; - - if (f == null) { - return field; - } - - delete query.range[field]; - field = f; - query.range[f] = oldValue; - - return this; - }, - - /** - The lower bound. Defaults to start from the first. - - @member ejs.RangeQuery - @param {Variable Type} f the lower bound value, type depends on field type - @returns {Object} returns this so that calls can be chained. - */ - from: function (f) { - if (f == null) { - return query.range[field].from; - } - - query.range[field].from = f; - return this; - }, - - /** - The upper bound. Defaults to unbounded. - - @member ejs.RangeQuery - @param {Variable Type} t the upper bound value, type depends on field type - @returns {Object} returns this so that calls can be chained. - */ - to: function (t) { - if (t == null) { - return query.range[field].to; - } - - query.range[field].to = t; - return this; - }, - - /** - Should the first from (if set) be inclusive or not. - Defaults to true - - @member ejs.RangeQuery - @param {Boolean} trueFalse true to include, false to exclude - @returns {Object} returns this so that calls can be chained. - */ - includeLower: function (trueFalse) { - if (trueFalse == null) { - return query.range[field].include_lower; - } - - query.range[field].include_lower = trueFalse; - return this; - }, - - /** - Should the last to (if set) be inclusive or not. Defaults to true. - - @member ejs.RangeQuery - @param {Boolean} trueFalse true to include, false to exclude - @returns {Object} returns this so that calls can be chained. - */ - includeUpper: function (trueFalse) { - if (trueFalse == null) { - return query.range[field].include_upper; - } - - query.range[field].include_upper = trueFalse; - return this; - }, - - /** - Greater than value. Same as setting from to the value, and - include_lower to false, - - @member ejs.RangeQuery - @param {Variable Type} val the value, type depends on field type - @returns {Object} returns this so that calls can be chained. - */ - gt: function (val) { - if (val == null) { - return query.range[field].gt; - } - - query.range[field].gt = val; - return this; - }, - - /** - Greater than or equal to value. Same as setting from to the value, - and include_lower to true. - - @member ejs.RangeQuery - @param {Variable Type} val the value, type depends on field type - @returns {Object} returns this so that calls can be chained. - */ - gte: function (val) { - if (val == null) { - return query.range[field].gte; - } - - query.range[field].gte = val; - return this; - }, - - /** - Less than value. Same as setting to to the value, and include_upper - to false. - - @member ejs.RangeQuery - @param {Variable Type} val the value, type depends on field type - @returns {Object} returns this so that calls can be chained. - */ - lt: function (val) { - if (val == null) { - return query.range[field].lt; - } - - query.range[field].lt = val; - return this; - }, - - /** - Less than or equal to value. Same as setting to to the value, - and include_upper to true. - - @member ejs.RangeQuery - @param {Variable Type} val the value, type depends on field type - @returns {Object} returns this so that calls can be chained. - */ - lte: function (val) { - if (val == null) { - return query.range[field].lte; - } - - query.range[field].lte = val; - return this; - }, - - /** - Sets the boost value of the Query. - - @member ejs.RangeQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.range[field].boost; - } - - query.range[field].boost = boost; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.RangeQuery - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.RangeQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - Retrieves the internal query object. This is typically used by - internal API functions so use with caution. - - @member ejs.RangeQuery - @returns {String} returns this object's internal query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    Matches documents that have fields matching a regular expression. Based - on Lucene 4.0 RegexpQuery which uses automaton to efficiently iterate over - index terms.

    - - @name ejs.RegexpQuery - - @desc - Matches documents that have fields matching a regular expression. - - @param {String} field A valid field name. - @param {String} value A regex pattern. - */ - ejs.RegexpQuery = function (field, value) { - - /** - The internal query object. Use get() - @member ejs.RegexpQuery - @property {Object} query - */ - var query = { - regexp: {} - }; - - query.regexp[field] = { - value: value - }; - - return { - - /** - The field to run the query against. - - @member ejs.RegexpQuery - @param {String} f A single field name. - @returns {Object} returns this so that calls can be chained. - */ - field: function (f) { - var oldValue = query.regexp[field]; - - if (f == null) { - return field; - } - - delete query.regexp[field]; - field = f; - query.regexp[f] = oldValue; - - return this; - }, - - /** - The regexp value. - - @member ejs.RegexpQuery - @param {String} p A string regexp - @returns {Object} returns this so that calls can be chained. - */ - value: function (p) { - if (p == null) { - return query.regexp[field].value; - } - - query.regexp[field].value = p; - return this; - }, - - /** - The regex flags to use. Valid flags are: - - INTERSECTION - Support for intersection notation - COMPLEMENT - Support for complement notation - EMPTY - Support for the empty language symbol: # - ANYSTRING - Support for the any string symbol: @ - INTERVAL - Support for numerical interval notation: - NONE - Disable support for all syntax options - ALL - Enables support for all syntax options - - Use multiple flags by separating with a "|" character. Example: - - INTERSECTION|COMPLEMENT|EMPTY - - @member ejs.RegexpQuery - @param {String} f The flags as a string, separate multiple flags with "|". - @returns {Object} returns this so that calls can be chained. - */ - flags: function (f) { - if (f == null) { - return query.regexp[field].flags; - } - - query.regexp[field].flags = f; - return this; - }, - - /** - The regex flags to use as a numeric value. Advanced use only, - it is probably better to stick with the flags option. - - @member ejs.RegexpQuery - @param {String} v The flags as a numeric value. - @returns {Object} returns this so that calls can be chained. - */ - flagsValue: function (v) { - if (v == null) { - return query.regexp[field].flags_value; - } - - query.regexp[field].flags_value = v; - return this; - }, - - /** - Sets rewrite method. Valid values are: - - constant_score_auto - tries to pick the best constant-score rewrite - method based on term and document counts from the query - - scoring_boolean - translates each term into boolean should and - keeps the scores as computed by the query - - constant_score_boolean - same as scoring_boolean, expect no scores - are computed. - - constant_score_filter - first creates a private Filter, by visiting - each term in sequence and marking all docs for that term - - top_terms_boost_N - first translates each term into boolean should - and scores are only computed as the boost using the top N - scoring terms. Replace N with an integer value. - - top_terms_N - first translates each term into boolean should - and keeps the scores as computed by the query. Only the top N - scoring terms are used. Replace N with an integer value. - - Default is constant_score_auto. - - This is an advanced option, use with care. - - @member ejs.RegexpQuery - @param {String} m The rewrite method as a string. - @returns {Object} returns this so that calls can be chained. - */ - rewrite: function (m) { - if (m == null) { - return query.regexp[field].rewrite; - } - - m = m.toLowerCase(); - if (m === 'constant_score_auto' || m === 'scoring_boolean' || - m === 'constant_score_boolean' || m === 'constant_score_filter' || - m.indexOf('top_terms_boost_') === 0 || - m.indexOf('top_terms_') === 0) { - - query.regexp[field].rewrite = m; - } - - return this; - }, - - /** - Sets the boost value of the Query. - - @member ejs.RegexpQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.regexp[field].boost; - } - - query.regexp[field].boost = boost; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.RegexpQuery - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.RegexpQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - Retrieves the internal query object. This is typically used by - internal API functions so use with caution. - - @member ejs.RegexpQuery - @returns {String} returns this object's internal query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    Matches spans near the beginning of a field. The spanFirstQuery allows you to search - for Spans that start and end within the first n positions of the document. - The span first query maps to Lucene SpanFirstQuery.

    - - @name ejs.SpanFirstQuery - - @desc - Matches spans near the beginning of a field. - - @param {Query} spanQry A valid SpanQuery - @param {Integer} end the maximum end position in a match. - - */ - ejs.SpanFirstQuery = function (spanQry, end) { - - if (!isQuery(spanQry)) { - throw new TypeError('Argument must be a SpanQuery'); - } - - /** - The internal query object. Use _self() - @member ejs.SpanFirstQuery - @property {Object} query - */ - var query = { - span_first: { - match: spanQry._self(), - end: end - } - }; - - return { - - /** - Sets the span query to match on. - - @member ejs.SpanFirstQuery - @param {Object} spanQuery Any valid span type query. - @returns {Object} returns this so that calls can be chained. - */ - match: function (spanQuery) { - if (spanQuery == null) { - return query.span_first.match; - } - - if (!isQuery(spanQuery)) { - throw new TypeError('Argument must be a SpanQuery'); - } - - query.span_first.match = spanQuery._self(); - return this; - }, - - /** - Sets the maximum end position permitted in a match. - - @member ejs.SpanFirstQuery - @param {Number} position The maximum position length to consider. - @returns {Object} returns this so that calls can be chained. - */ - end: function (position) { - if (position == null) { - return query.span_first.end; - } - - query.span_first.end = position; - return this; - }, - - /** - Sets the boost value of the Query. - - @member ejs.SpanFirstQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.span_first.boost; - } - - query.span_first.boost = boost; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.SpanFirstQuery - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.SpanFirstQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - Retrieves the internal query object. This is typically used by - internal API functions so use with caution. - - @member ejs.SpanFirstQuery - @returns {String} returns this object's internal query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    Wraps lucene MultiTermQueries as a SpanQuery so it can be used in the - various Span* queries. Examples of valid MultiTermQueries are - Fuzzy, NumericRange, Prefix, Regex, Range, and Wildcard.

    - - @name ejs.SpanMultiTermQuery - @since elasticsearch 0.90 - - @desc - Use MultiTermQueries as a SpanQuery. - - @param {Query} qry An optional multi-term query object. - */ - ejs.SpanMultiTermQuery = function (qry) { - - if (qry != null && !isQuery(qry)) { - throw new TypeError('Argument must be a MultiTermQuery'); - } - - /** - The internal query object. Use _self() - @member ejs.SpanMultiTermQuery - @property {Object} query - */ - var query = { - span_multi: { - match: {} - } - }; - - if (qry != null) { - query.span_multi.match = qry._self(); - } - - return { - - /** - Sets the span query to match on. - - @member ejs.SpanMultiTermQuery - @param {Object} mtQuery Any valid multi-term query. - @returns {Object} returns this so that calls can be chained. - */ - match: function (mtQuery) { - if (mtQuery == null) { - return query.span_multi.match; - } - - if (!isQuery(mtQuery)) { - throw new TypeError('Argument must be a MultiTermQuery'); - } - - query.span_multi.match = mtQuery._self(); - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.SpanMultiTermQuery - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.SpanMultiTermQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - Retrieves the internal query object. This is typically used by - internal API functions so use with caution. - - @member ejs.SpanMultiTermQuery - @returns {String} returns this object's internal query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    A spanNearQuery will look to find a number of spanQuerys within a given - distance from each other.

    - - @name ejs.SpanNearQuery - - @desc - Matches spans which are near one another. - - @param {Query || Array} clauses A single SpanQuery or array of SpanQueries - @param {Integer} slop The number of intervening unmatched positions - - */ - ejs.SpanNearQuery = function (clauses, slop) { - - /** - The internal query object. Use _self() - @member ejs.SpanNearQuery - @property {Object} query - */ - var i, len, - query = { - span_near: { - clauses: [], - slop: slop - } - }; - - if (isQuery(clauses)) { - query.span_near.clauses.push(clauses._self()); - } else if (isArray(clauses)) { - for (i = 0, len = clauses.length; i < len; i++) { - if (!isQuery(clauses[i])) { - throw new TypeError('Argument must be array of SpanQueries'); - } - - query.span_near.clauses.push(clauses[i]._self()); - } - } else { - throw new TypeError('Argument must be SpanQuery or array of SpanQueries'); - } - - return { - - /** - Sets the clauses used. If passed a single SpanQuery, it is added - to the existing list of clauses. If passed an array of - SpanQueries, they replace any existing clauses. - - @member ejs.SpanNearQuery - @param {Query || Array} clauses A SpanQuery or array of SpanQueries. - @returns {Object} returns this so that calls can be chained. - */ - clauses: function (clauses) { - var i, len; - - if (clauses == null) { - return query.span_near.clauses; - } - - if (isQuery(clauses)) { - query.span_near.clauses.push(clauses._self()); - } else if (isArray(clauses)) { - query.span_near.clauses = []; - for (i = 0, len = clauses.length; i < len; i++) { - if (!isQuery(clauses[i])) { - throw new TypeError('Argument must be array of SpanQueries'); - } - - query.span_near.clauses.push(clauses[i]._self()); - } - } else { - throw new TypeError('Argument must be SpanQuery or array of SpanQueries'); - } - - return this; - }, - - /** - Sets the maximum number of intervening unmatched positions. - - @member ejs.SpanNearQuery - @param {Number} distance The number of intervening unmatched positions. - @returns {Object} returns this so that calls can be chained. - */ - slop: function (distance) { - if (distance == null) { - return query.span_near.slop; - } - - query.span_near.slop = distance; - return this; - }, - - /** - Sets whether or not matches are required to be in-order. - - @member ejs.SpanNearQuery - @param {Boolean} trueFalse Determines if matches must be in-order. - @returns {Object} returns this so that calls can be chained. - */ - inOrder: function (trueFalse) { - if (trueFalse == null) { - return query.span_near.in_order; - } - - query.span_near.in_order = trueFalse; - return this; - }, - - /** - Sets whether or not payloads are being used. A payload is an arbitrary - byte array stored at a specific position (i.e. token/term). - - @member ejs.SpanNearQuery - @param {Boolean} trueFalse Whether or not to return payloads. - @returns {Object} returns this so that calls can be chained. - */ - collectPayloads: function (trueFalse) { - if (trueFalse == null) { - return query.span_near.collect_payloads; - } - - query.span_near.collect_payloads = trueFalse; - return this; - }, - - /** - Sets the boost value of the Query. - - @member ejs.SpanNearQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.span_near.boost; - } - - query.span_near.boost = boost; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.SpanNearQuery - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.SpanNearQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - Retrieves the internal query object. This is typically used by - internal API functions so use with caution. - - @member ejs.SpanNearQuery - @returns {String} returns this object's internal query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    Removes matches which overlap with another span query. - The span not query maps to Lucene SpanNotQuery.

    - - @name ejs.SpanNotQuery - - @desc - Removes matches which overlap with another span query. - - @param {Query} includeQry a valid SpanQuery whose matching docs will be returned. - @param {Query} excludeQry a valid SpanQuery whose matching docs will not be returned - - */ - ejs.SpanNotQuery = function (includeQry, excludeQry) { - - if (!isQuery(includeQry) || !isQuery(excludeQry)) { - throw new TypeError('Argument must be a SpanQuery'); - } - - /** - The internal query object. Use _self() - @member ejs.SpanNotQuery - @property {Object} query - */ - var query = { - span_not: { - include: includeQry._self(), - exclude: excludeQry._self() - } - }; - - return { - - /** - Set the span query whose matches are filtered. - - @member ejs.SpanNotQuery - @param {Object} spanQuery Any valid span type query. - @returns {Object} returns this so that calls can be chained. - */ - include: function (spanQuery) { - if (spanQuery == null) { - return query.span_not.include; - } - - if (!isQuery(spanQuery)) { - throw new TypeError('Argument must be a SpanQuery'); - } - - query.span_not.include = spanQuery._self(); - return this; - }, - - /** - Sets the span query whose matches must not overlap those returned. - - @member ejs.SpanNotQuery - @param {Object} spanQuery Any valid span type query. - @returns {Object} returns this so that calls can be chained. - */ - exclude: function (spanQuery) { - if (spanQuery == null) { - return query.span_not.exclude; - } - - if (!isQuery(spanQuery)) { - throw new TypeError('Argument must be a SpanQuery'); - } - - query.span_not.exclude = spanQuery._self(); - return this; - }, - - /** - Sets the boost value of the Query. - - @member ejs.SpanNotQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.span_not.boost; - } - - query.span_not.boost = boost; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.SpanNotQuery - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.SpanNotQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - Retrieves the internal query object. This is typically used by - internal API functions so use with caution. - - @member ejs.SpanNotQuery - @returns {String} returns this object's internal query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    The spanOrQuery takes an array of SpanQuerys and will match if any of the - underlying SpanQueries match. The span or query maps to Lucene SpanOrQuery.

    - - @name ejs.SpanOrQuery - - @desc - Matches the union of its span clauses. - - @param {Object} clauses A single SpanQuery or array of SpanQueries. - - */ - ejs.SpanOrQuery = function (clauses) { - - /** - The internal query object. Use _self() - @member ejs.SpanOrQuery - @property {Object} query - */ - var i, - len, - query = { - span_or: { - clauses: [] - } - }; - - if (isQuery(clauses)) { - query.span_or.clauses.push(clauses._self()); - } else if (isArray(clauses)) { - for (i = 0, len = clauses.length; i < len; i++) { - if (!isQuery(clauses[i])) { - throw new TypeError('Argument must be array of SpanQueries'); - } - - query.span_or.clauses.push(clauses[i]._self()); - } - } else { - throw new TypeError('Argument must be SpanQuery or array of SpanQueries'); - } - - return { - - /** - Sets the clauses used. If passed a single SpanQuery, it is added - to the existing list of clauses. If passed an array of - SpanQueries, they replace any existing clauses. - - @member ejs.SpanOrQuery - @param {Query || Array} clauses A SpanQuery or array of SpanQueries. - @returns {Object} returns this so that calls can be chained. - */ - clauses: function (clauses) { - var i, len; - - if (clauses == null) { - return query.span_or.clauses; - } - - if (isQuery(clauses)) { - query.span_or.clauses.push(clauses._self()); - } else if (isArray(clauses)) { - query.span_or.clauses = []; - for (i = 0, len = clauses.length; i < len; i++) { - if (!isQuery(clauses[i])) { - throw new TypeError('Argument must be array of SpanQueries'); - } - - query.span_or.clauses.push(clauses[i]._self()); - } - } else { - throw new TypeError('Argument must be SpanQuery or array of SpanQueries'); - } - - return this; - }, - - /** - Sets the boost value of the Query. - - @member ejs.SpanOrQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.span_or.boost; - } - - query.span_or.boost = boost; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.SpanOrQuery - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.SpanOrQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - Retrieves the internal query object. This is typically used by - internal API functions so use with caution. - - @member ejs.SpanOrQuery - @returns {String} returns this object's internal query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    A spanTermQuery is the basic unit of Lucene's Span Query which allows for nested, - positional restrictions when matching documents. The spanTermQuery simply matches - spans containing a term. It's essentially a termQuery with positional information asscoaited.

    - - @name ejs.SpanTermQuery - - @desc - Matches spans containing a term - - @param {String} field the document field/field to query against - @param {String} value the literal value to be matched - */ - ejs.SpanTermQuery = function (field, value) { - - /** - The internal query object. Use get() - @member ejs.SpanTermQuery - @property {Object} query - */ - var query = { - span_term: {} - }; - - query.span_term[field] = { - term: value - }; - - return { - - /** - Sets the field to query against. - - @member ejs.SpanTermQuery - @param {String} f A valid field name. - @returns {Object} returns this so that calls can be chained. - */ - field: function (f) { - var oldValue = query.span_term[field]; - - if (f == null) { - return field; - } - - delete query.span_term[field]; - field = f; - query.span_term[f] = oldValue; - - return this; - }, - - /** - Sets the term. - - @member ejs.SpanTermQuery - @param {String} t A single term. - @returns {Object} returns this so that calls can be chained. - */ - term: function (t) { - if (t == null) { - return query.span_term[field].term; - } - - query.span_term[field].term = t; - return this; - }, - - /** - Sets the boost value for documents matching the Query. - - @member ejs.SpanTermQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.span_term[field].boost; - } - - query.span_term[field].boost = boost; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.SpanTermQuery - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.SpanTermQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - Retrieves the internal query object. This is typically used by - internal API functions so use with caution. - - @member ejs.SpanTermQuery - @returns {String} returns this object's internal query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    A TermQuery can be used to return documents containing a given - keyword or term. For instance, you might want to retieve all the - documents/objects that contain the term Javascript. Term filters - often serve as the basis for more complex queries such as Boolean queries.

    - - @name ejs.TermQuery - - @desc - A Query that matches documents containing a term. This may be - combined with other terms with a BooleanQuery. - - @param {String} field the document field/key to query against - @param {String} term the literal value to be matched - */ - ejs.TermQuery = function (field, term) { - - /** - The internal query object. Use get() - @member ejs.TermQuery - @property {Object} query - */ - var query = { - term: {} - }; - - query.term[field] = { - term: term - }; - - return { - - /** - Sets the fields to query against. - - @member ejs.TermQuery - @param {String} f A valid field name. - @returns {Object} returns this so that calls can be chained. - */ - field: function (f) { - var oldValue = query.term[field]; - - if (f == null) { - return field; - } - - delete query.term[field]; - field = f; - query.term[f] = oldValue; - - return this; - }, - - /** - Sets the term. - - @member ejs.TermQuery - @param {String} t A single term. - @returns {Object} returns this so that calls can be chained. - */ - term: function (t) { - if (t == null) { - return query.term[field].term; - } - - query.term[field].term = t; - return this; - }, - - /** - Sets the boost value for documents matching the Query. - - @member ejs.TermQuery - @param {Number} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.term[field].boost; - } - - query.term[field].boost = boost; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.TermQuery - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.TermQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - Retrieves the internal query object. This is typically used by - internal API functions so use with caution. - - @member ejs.TermQuery - @returns {String} returns this object's internal query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    A query that match on any (configurable) of the provided terms. This is - a simpler syntax query for using a bool query with several term queries - in the should clauses.

    - - @name ejs.TermsQuery - - @desc - A Query that matches documents containing provided terms. - - @param {String} field the document field/key to query against - @param {String || Array} terms a single term or array of "terms" to match - */ - ejs.TermsQuery = function (field, terms) { - - /** - The internal query object. Use get() - @member ejs.TermsQuery - @property {Object} query - */ - var query = { - terms: {} - }; - - if (isString(terms)) { - query.terms[field] = [terms]; - } else if (isArray(terms)) { - query.terms[field] = terms; - } else { - throw new TypeError('Argument must be string or array'); - } - - return { - - /** - Sets the fields to query against. - - @member ejs.TermsQuery - @param {String} f A valid field name. - @returns {Object} returns this so that calls can be chained. - */ - field: function (f) { - var oldValue = query.terms[field]; - - if (f == null) { - return field; - } - - delete query.terms[field]; - field = f; - query.terms[f] = oldValue; - - return this; - }, - - /** - Sets the terms. If you t is a String, it is added to the existing - list of terms. If t is an array, the list of terms replaces the - existing terms. - - @member ejs.TermsQuery - @param {String || Array} t A single term or an array or terms. - @returns {Object} returns this so that calls can be chained. - */ - terms: function (t) { - if (t == null) { - return query.terms[field]; - } - - if (isString(t)) { - query.terms[field].push(t); - } else if (isArray(t)) { - query.terms[field] = t; - } else { - throw new TypeError('Argument must be string or array'); - } - - return this; - }, - - /** - Sets the minimum number of terms that need to match in a document - before that document is returned in the results. - - @member ejs.TermsQuery - @param {Integer} min A positive integer. - @returns {Object} returns this so that calls can be chained. - */ - minimumShouldMatch: function (min) { - if (min == null) { - return query.terms.minimum_should_match; - } - - query.terms.minimum_should_match = min; - return this; - }, - - /** - Enables or disables similarity coordinate scoring of documents - matching the Query. Default: false. - - @member ejs.TermsQuery - @param {String} trueFalse A true/falsethis so that calls can be chained. - */ - disableCoord: function (trueFalse) { - if (trueFalse == null) { - return query.terms.disable_coord; - } - - query.terms.disable_coord = trueFalse; - return this; - }, - - /** - Sets the boost value for documents matching the Query. - - @member ejs.TermsQuery - @param {Number} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.terms.boost; - } - - query.terms.boost = boost; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.TermsQuery - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.TermsQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - Retrieves the internal query object. This is typically used by - internal API functions so use with caution. - - @member ejs.TermsQuery - @returns {String} returns this object's internal query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    TThe top_children query runs the child query with an estimated hits size, - and out of the hit docs, aggregates it into parent docs. If there aren’t - enough parent docs matching the requested from/size search request, then it - is run again with a wider (more hits) search.

    - -

    The top_children also provide scoring capabilities, with the ability to - specify max, sum or avg as the score type.

    - - @name ejs.TopChildrenQuery - - @desc - Returns child documents matching the query aggregated into the parent docs. - - @param {Object} qry A valid query object. - @param {String} type The child type to execute the query on - */ - ejs.TopChildrenQuery = function (qry, type) { - - if (!isQuery(qry)) { - throw new TypeError('Argument must be a Query'); - } - - /** - The internal query object. Use _self() - @member ejs.TopChildrenQuery - @property {Object} query - */ - var query = { - top_children: { - query: qry._self(), - type: type - } - }; - - return { - - /** - Sets the query - - @member ejs.TopChildrenQuery - @param {Object} q A valid Query object - @returns {Object} returns this so that calls can be chained. - */ - query: function (q) { - if (q == null) { - return query.top_children.query; - } - - if (!isQuery(q)) { - throw new TypeError('Argument must be a Query'); - } - - query.top_children.query = q._self(); - return this; - }, - - /** - Sets the child document type to search against - - @member ejs.TopChildrenQuery - @param {String} t A valid type name - @returns {Object} returns this so that calls can be chained. - */ - type: function (t) { - if (t == null) { - return query.top_children.type; - } - - query.top_children.type = t; - return this; - }, - - /** - Sets the scope of the query. A scope allows to run facets on the - same scope name that will work against the child documents. - - @deprecated since elasticsearch 0.90 - @member ejs.TopChildrenQuery - @param {String} s The scope name as a string. - @returns {Object} returns this so that calls can be chained. - */ - scope: function (s) { - return this; - }, - - /** - Sets the scoring type. Valid values are max, sum, or avg. If - another value is passed it we silently ignore the value. - - @deprecated since elasticsearch 0.90.1, use scoreMode - - @member ejs.TopChildrenQuery - @param {String} s The scoring type as a string. - @returns {Object} returns this so that calls can be chained. - */ - score: function (s) { - if (s == null) { - return query.top_children.score; - } - - s = s.toLowerCase(); - if (s === 'max' || s === 'sum' || s === 'avg' || s === 'total') { - query.top_children.score = s; - } - - return this; - }, - - /** - Sets the scoring type. Valid values are max, sum, total, or avg. - If another value is passed it we silently ignore the value. - - @member ejs.TopChildrenQuery - @param {String} s The scoring type as a string. - @returns {Object} returns this so that calls can be chained. - */ - scoreMode: function (s) { - if (s == null) { - return query.top_children.score_mode; - } - - s = s.toLowerCase(); - if (s === 'max' || s === 'sum' || s === 'avg' || s === 'total') { - query.top_children.score_mode = s; - } - - return this; - }, - - /** - Sets the factor which is the number of hits that are asked for in - the child query. Defaults to 5. - - @member ejs.TopChildrenQuery - @param {Integer} f A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - factor: function (f) { - if (f == null) { - return query.top_children.factor; - } - - query.top_children.factor = f; - return this; - }, - - /** - Sets the incremental factor. The incremental factor is used when not - enough child documents are returned so the factor is multiplied by - the incremental factor to fetch more results. Defaults to 52 - - @member ejs.TopChildrenQuery - @param {Integer} f A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - incrementalFactor: function (f) { - if (f == null) { - return query.top_children.incremental_factor; - } - - query.top_children.incremental_factor = f; - return this; - }, - - /** - Sets the boost value of the Query. - - @member ejs.TopChildrenQuery - @param {Double} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.top_children.boost; - } - - query.top_children.boost = boost; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.TopChildrenQuery - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.TopChildrenQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - Retrieves the internal query object. This is typically used by - internal API functions so use with caution. - - @member ejs.TopChildrenQuery - @returns {String} returns this object's internal query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    Matches documents that have fields matching a wildcard expression - (not analyzed). Supported wildcards are *, which matches any character - sequence (including the empty one), and ?, which matches any single - character. Note this query can be slow, as it needs to iterate over many - wildcards. In order to prevent extremely slow wildcard queries, a wildcard - wildcard should not start with one of the wildcards * or ?. The wildcard query - maps to Lucene WildcardQuery.

    - - @name ejs.WildcardQuery - - @desc - A Query that matches documents containing a wildcard. This may be - combined with other wildcards with a BooleanQuery. - - @param {String} field the document field/key to query against - @param {String} value the literal value to be matched - */ - ejs.WildcardQuery = function (field, value) { - - /** - The internal query object. Use get() - @member ejs.WildcardQuery - @property {Object} query - */ - var query = { - wildcard: {} - }; - - query.wildcard[field] = { - value: value - }; - - return { - - /** - Sets the fields to query against. - - @member ejs.WildcardQuery - @param {String} f A valid field name. - @returns {Object} returns this so that calls can be chained. - */ - field: function (f) { - var oldValue = query.wildcard[field]; - - if (f == null) { - return field; - } - - delete query.wildcard[field]; - field = f; - query.wildcard[f] = oldValue; - - return this; - }, - - /** - Sets the wildcard query value. - - @member ejs.WildcardQuery - @param {String} v A single term. - @returns {Object} returns this so that calls can be chained. - */ - value: function (v) { - if (v == null) { - return query.wildcard[field].value; - } - - query.wildcard[field].value = v; - return this; - }, - - /** - Sets rewrite method. Valid values are: - - constant_score_auto - tries to pick the best constant-score rewrite - method based on term and document counts from the query - - scoring_boolean - translates each term into boolean should and - keeps the scores as computed by the query - - constant_score_boolean - same as scoring_boolean, expect no scores - are computed. - - constant_score_filter - first creates a private Filter, by visiting - each term in sequence and marking all docs for that term - - top_terms_boost_N - first translates each term into boolean should - and scores are only computed as the boost using the top N - scoring terms. Replace N with an integer value. - - top_terms_N - first translates each term into boolean should - and keeps the scores as computed by the query. Only the top N - scoring terms are used. Replace N with an integer value. - - Default is constant_score_auto. - - This is an advanced option, use with care. - - @member ejs.WildcardQuery - @param {String} m The rewrite method as a string. - @returns {Object} returns this so that calls can be chained. - */ - rewrite: function (m) { - if (m == null) { - return query.wildcard[field].rewrite; - } - - m = m.toLowerCase(); - if (m === 'constant_score_auto' || m === 'scoring_boolean' || - m === 'constant_score_boolean' || m === 'constant_score_filter' || - m.indexOf('top_terms_boost_') === 0 || - m.indexOf('top_terms_') === 0) { - - query.wildcard[field].rewrite = m; - } - - return this; - }, - - /** - Sets the boost value for documents matching the Query. - - @member ejs.WildcardQuery - @param {Number} boost A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - boost: function (boost) { - if (boost == null) { - return query.wildcard[field].boost; - } - - query.wildcard[field].boost = boost; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.WildcardQuery - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.WildcardQuery - @returns {String} the type of object - */ - _type: function () { - return 'query'; - }, - - /** - Retrieves the internal query object. This is typically used by - internal API functions so use with caution. - - @member ejs.WildcardQuery - @returns {String} returns this object's internal query property. - */ - _self: function () { - return query; - } - }; - }; - - /** - @class -

    The ClusterHealth object provides an interface for accessing - the health information of your cluster.

    - - @name ejs.ClusterHealth - - @desc Access the health of your cluster. - */ - ejs.ClusterHealth = function () { - - var - params = {}, - paramExcludes = ['indices']; - - return { - - /** -

    Set's the indices to get the health information for. If a - single value is passed in it will be appended to the current list - of indices. If an array is passed in it will replace all existing - indices.

    - - @member ejs.ClusterHealth - @param {String || Array} i An index name or list of index names. - @returns {Object} returns this so that calls can be chained. - */ - indices: function (i) { - if (params.indices == null) { - params.indices = []; - } - - if (i == null) { - return params.indices; - } - - if (isString(i)) { - params.indices.push(i); - } else if (isArray(i)) { - params.indices = i; - } else { - throw new TypeError('Argument must be string or array'); - } - - return this; - }, - - /** -

    If the operation will run on the local node only

    - - @member ejs.ClusterHealth - @param {Boolean} trueFalse True to run on local node only - @returns {Object} returns this so that calls can be chained. - */ - local: function (trueFalse) { - if (trueFalse == null) { - return params.local; - } - - params.local = trueFalse; - return this; - }, - - /** -

    Set's a timeout for the response from the master node.

    - - @member ejs.ClusterHealth - @param {String} length The amount of time after which the operation - will timeout. - @returns {Object} returns this so that calls can be chained. - */ - masterTimeout: function (length) { - if (length == null) { - return params.master_timeout; - } - - params.master_timeout = length; - return this; - }, - - /** -

    Set's a timeout to use during any of the waitFor* options.

    - - @member ejs.ClusterHealth - @param {String} length The amount of time after which the operation - will timeout. - @returns {Object} returns this so that calls can be chained. - */ - timeout: function (length) { - if (length == null) { - return params.timeout; - } - - params.timeout = length; - return this; - }, - - /** -

    Set the cluster status to wait for (or until timeout). Valid - values are:

    - -
    -
    green
    -
    yellow
    -
    red
    -
    - - @member ejs.ClusterHealth - @param {String} status The status to wait for (green, yellow, or red). - @returns {Object} returns this so that calls can be chained. - */ - waitForStatus: function (status) { - if (status == null) { - return params.wait_for_status; - } - - status = status.toLowerCase(); - if (status === 'green' || status === 'yellow' || status === 'red') { - params.wait_for_status = status; - } - - return this; - }, - - /** -

    Set's the number of shards that can be relocating before - proceeding with the operation. Typically set to 0 meaning we - must wait for all shards to be done relocating.

    - - @member ejs.ClusterHealth - @param {Integer} num The number of acceptable relocating shards. - @returns {Object} returns this so that calls can be chained. - */ - waitForRelocatingShards: function (num) { - if (num == null) { - return params.wait_for_relocating_shards; - } - - params.wait_for_relocating_shards = num; - return this; - }, - - /** -

    Set's the number of shards that should be active before - proceeding with the operation.

    - - @member ejs.ClusterHealth - @param {Integer} num The number of active shards. - @returns {Object} returns this so that calls can be chained. - */ - waitForActiveShards: function (num) { - if (num == null) { - return params.wait_for_active_shards; - } - - params.wait_for_active_shards = num; - return this; - }, - - /** -

    Set's the number of nodes that must be available before - proceeding with the operation. The value can be specified - as an integer or as values such as >=N, <=N, >N, - - @member ejs.ClusterHealth - @param {String} num The number of avaiable nodes - @returns {Object} returns this so that calls can be chained. - */ - waitForNodes: function (num) { - if (num == null) { - return params.wait_for_nodes; - } - - params.wait_for_nodes = num; - return this; - }, - - /** -

    Set the level of details for the operation. Possible values - for the level are:

    - -
    -
    cluster
    -
    indices
    -
    shards
    -
    - - @member ejs.ClusterHealth - @param {String} l The details level (cluster, indices, or shards) - @returns {Object} returns this so that calls can be chained. - */ - level: function (l) { - if (l == null) { - return params.level; - } - - l = l.toLowerCase(); - if (l === 'cluster' || l === 'indices' || l === 'shards') { - params.level = l; - } - - return this; - }, - - /** -

    Allows you to serialize this object into a JSON encoded string.

    - - @member ejs.ClusterHealth - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(params); - }, - - /** -

    The type of ejs object. For internal use only.

    - - @member ejs.ClusterHealth - @returns {String} the type of object - */ - _type: function () { - return 'cluster health'; - }, - - /** -

    Retrieves the internal document object. This is - typically used by internal API functions so use with caution.

    - - @member ejs.ClusterHealth - @returns {Object} returns this object's internal object. - */ - _self: function () { - return params; - }, - - /** -

    Retrieves very simple status on the health of the cluster.

    - - @member ejs.ClusterHealth - @param {Function} successcb A callback function that handles the response. - @param {Function} errorcb A callback function that handles errors. - @returns {Object} The return value is dependent on client implementation. - */ - doHealth: function (successcb, errorcb) { - // make sure the user has set a client - if (ejs.client == null) { - throw new Error("No Client Set"); - } - - var url = '/_cluster/health'; - - if (params.indices && params.indices.length > 0) { - url = url + '/' + params.indices.join(); - } - - return ejs.client.get(url, genClientParams(params, paramExcludes), - successcb, errorcb); - } - - }; - }; - /** - @class -

    The ClusterState object provides an interface for - accessing the state of your cluster.

    - - @name ejs.ClusterState - - @desc Retrieves comprehensive state information of your cluster. - - */ - ejs.ClusterState = function () { - - var - params = {}, - paramExcludes = []; - - return { - - /** -

    If the operation will run on the local node only

    - - @member ejs.ClusterState - @param {Boolean} trueFalse True to run on local node only - @returns {Object} returns this so that calls can be chained. - */ - local: function (trueFalse) { - if (trueFalse == null) { - return params.local; - } - - params.local = trueFalse; - return this; - }, - - /** -

    Set's a timeout for the response from the master node.

    - - @member ejs.ClusterState - @param {String} length The amount of time after which the operation - will timeout. - @returns {Object} returns this so that calls can be chained. - */ - masterTimeout: function (length) { - if (length == null) { - return params.master_timeout; - } - - params.master_timeout = length; - return this; - }, - - /** -

    Sets if we should filter out the nodes part of the state - response.

    - - @member ejs.ClusterState - @param {Boolean} trueFalse True to filter out the nodes state - @returns {Object} returns this so that calls can be chained. - */ - filterNodes: function (trueFalse) { - if (trueFalse == null) { - return params.filter_nodes; - } - - params.filter_nodes = trueFalse; - return this; - }, - - /** -

    Sets if we should filter out the routing table part of the - state response.

    - - @member ejs.ClusterState - @param {Boolean} trueFalse True to filter out the routing table - @returns {Object} returns this so that calls can be chained. - */ - filterRoutingTable: function (trueFalse) { - if (trueFalse == null) { - return params.filter_routing_table; - } - - params.filter_routing_table = trueFalse; - return this; - }, - - /** -

    Sets if we should filter out the metadata part of the - state response.

    - - @member ejs.ClusterState - @param {Boolean} trueFalse True to filter out the metadata - @returns {Object} returns this so that calls can be chained. - */ - filterMetadata: function (trueFalse) { - if (trueFalse == null) { - return params.filter_metadata; - } - - params.filter_metadata = trueFalse; - return this; - }, - - /** -

    Sets if we should filter out the blocks part of the state - response.

    - - @member ejs.ClusterState - @param {Boolean} trueFalse True to filter out the blocks response - @returns {Object} returns this so that calls can be chained. - */ - filterBlocks: function (trueFalse) { - if (trueFalse == null) { - return params.filter_blocks; - } - - params.filter_blocks = trueFalse; - return this; - }, - - /** -

    When not filtering metadata, a list of indices to include in - the metadata response. If a single value is passed in it - will be appended to the current list of indices. If an array is - passed in it will replace all existing indices.

    - - @member ejs.ClusterState - @param {String || Array} i An index name or list of index names. - @returns {Object} returns this so that calls can be chained. - */ - filterIndices: function (i) { - if (params.filter_indices == null) { - params.filter_indices = []; - } - - if (i == null) { - return params.filter_indices; - } - - if (isString(i)) { - params.filter_indices.push(i); - } else if (isArray(i)) { - params.filter_indices = i; - } else { - throw new TypeError('Argument must be string or array'); - } - - return this; - }, - - /** -

    When not filtering metadata, a list of index templates to - include in the metadata response. If a single value is passed in - it will be appended to the current list of templates. If an - array is passed in it will replace all existing templates.

    - - @member ejs.ClusterState - @param {String || Array} i A template name or list of template names. - @returns {Object} returns this so that calls can be chained. - */ - filterIndexTemplates: function (i) { - if (params.filter_index_templates == null) { - params.filter_index_templates = []; - } - - if (i == null) { - return params.filter_index_templates; - } - - if (isString(i)) { - params.filter_index_templates.push(i); - } else if (isArray(i)) { - params.filter_index_templates = i; - } else { - throw new TypeError('Argument must be string or array'); - } - - return this; - }, - - /** -

    Allows you to serialize this object into a JSON encoded string.

    - - @member ejs.ClusterState - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(params); - }, - - /** -

    The type of ejs object. For internal use only.

    - - @member ejs.ClusterState - @returns {String} the type of object - */ - _type: function () { - return 'cluster state'; - }, - - /** -

    Retrieves the internal document object. This is - typically used by internal API functions so use with caution.

    - - @member ejs.ClusterState - @returns {Object} returns this object's internal object. - */ - _self: function () { - return params; - }, - - /** -

    Retrieves comprehensive state information of the whole cluster.

    - - @member ejs.ClusterState - @param {Function} successcb A callback function that handles the response. - @param {Function} errorcb A callback function that handles errors. - @returns {Object} The return value is dependent on client implementation. - */ - doState: function (successcb, errorcb) { - // make sure the user has set a client - if (ejs.client == null) { - throw new Error("No Client Set"); - } - - var url = '/_cluster/state'; - - return ejs.client.get(url, genClientParams(params, paramExcludes), - successcb, errorcb); - } - - }; - }; - /** - @class -

    The NodeInfo object provides an interface for accessing - the information for one or more (or all) nodes in your cluster. Information - is available for settings, os, process, jvm, thread pool, network, plugins, - transport, and http.

    - - @name ejs.NodeInfo - - @desc Retrieve one or more (or all) node info. - */ - ejs.NodeInfo = function () { - - var - params = {}, - paramExcludes = ['nodes']; - - return { - - /** -

    Set's the nodes to get the information for. If a - single value is passed in it will be appended to the current list - of nodes. If an array is passed in it will replace all existing - nodes. Nodes can be identified in the APIs either using their - internal node id, the node name, address, custom attributes, or - _local for only the node receiving the request.

    - - @member ejs.NodeInfo - @param {String || Array} n A node identifier (id, name, etc). - @returns {Object} returns this so that calls can be chained. - */ - nodes: function (n) { - if (params.nodes == null) { - params.nodes = []; - } - - if (n == null) { - return params.nodes; - } - - if (isString(n)) { - params.nodes.push(n); - } else if (isArray(n)) { - params.nodes = n; - } else { - throw new TypeError('Argument must be string or array'); - } - - return this; - }, - - /** -

    Clears all the flags (first). Useful, if you only want to - retrieve specific information.

    - - @member ejs.NodeInfo - @param {Boolean} trueFalse True to clear all flags - @returns {Object} returns this so that calls can be chained. - */ - clear: function (trueFalse) { - if (trueFalse == null) { - return params.clear; - } - - params.clear = trueFalse; - return this; - }, - - /** -

    Enables all information flags.

    - - @member ejs.NodeInfo - @param {Boolean} trueFalse True to get all available stats - @returns {Object} returns this so that calls can be chained. - */ - all: function (trueFalse) { - if (trueFalse == null) { - return params.all; - } - - params.all = trueFalse; - return this; - }, - - /** -

    Get information about node settings.

    - - @member ejs.NodeInfo - @param {Boolean} trueFalse True to get settings information - @returns {Object} returns this so that calls can be chained. - */ - settings: function (trueFalse) { - if (trueFalse == null) { - return params.settings; - } - - params.settings = trueFalse; - return this; - }, - - /** -

    If stats about the os should be returned.

    - - @member ejs.NodeInfo - @param {Boolean} trueFalse True to get os stats - @returns {Object} returns this so that calls can be chained. - */ - os: function (trueFalse) { - if (trueFalse == null) { - return params.os; - } - - params.os = trueFalse; - return this; - }, - - /** -

    If information about the process should be returned.

    - - @member ejs.NodeInfo - @param {Boolean} trueFalse True to get process information - @returns {Object} returns this so that calls can be chained. - */ - process: function (trueFalse) { - if (trueFalse == null) { - return params.process; - } - - params.process = trueFalse; - return this; - }, - - /** -

    If information about the jvm should be returned.

    - - @member ejs.NodeInfo - @param {Boolean} trueFalse True to get jvm information - @returns {Object} returns this so that calls can be chained. - */ - jvm: function (trueFalse) { - if (trueFalse == null) { - return params.jvm; - } - - params.jvm = trueFalse; - return this; - }, - - /** -

    If information about the thread pool should be returned.

    - - @member ejs.NodeInfo - @param {Boolean} trueFalse True to get thread pool information - @returns {Object} returns this so that calls can be chained. - */ - threadPool: function (trueFalse) { - if (trueFalse == null) { - return params.thread_pool; - } - - params.thread_pool = trueFalse; - return this; - }, - - /** -

    If information about the network should be returned.

    - - @member ejs.NodeInfo - @param {Boolean} trueFalse True to get network information - @returns {Object} returns this so that calls can be chained. - */ - network: function (trueFalse) { - if (trueFalse == null) { - return params.network; - } - - params.network = trueFalse; - return this; - }, - - /** -

    If information about the transport should be returned.

    - - @member ejs.NodeInfo - @param {Boolean} trueFalse True to get transport information - @returns {Object} returns this so that calls can be chained. - */ - transport: function (trueFalse) { - if (trueFalse == null) { - return params.transport; - } - - params.transport = trueFalse; - return this; - }, - - /** -

    If information about the http should be returned.

    - - @member ejs.NodeInfo - @param {Boolean} trueFalse True to get http information - @returns {Object} returns this so that calls can be chained. - */ - http: function (trueFalse) { - if (trueFalse == null) { - return params.http; - } - - params.http = trueFalse; - return this; - }, - - /** -

    If information about plugins should be returned.

    - - @member ejs.NodeInfo - @param {Boolean} trueFalse True to get plugin information - @returns {Object} returns this so that calls can be chained. - */ - plugin: function (trueFalse) { - if (trueFalse == null) { - return params.plugin; - } - - params.plugin = trueFalse; - return this; - }, - - /** -

    Set's a timeout for the info operation

    - - @member ejs.NodeInfo - @param {String} length The amount of time after which the operation - will timeout. - @returns {Object} returns this so that calls can be chained. - */ - timeout: function (length) { - if (length == null) { - return params.timeout; - } - - params.timeout = length; - return this; - }, - - /** -

    Allows you to serialize this object into a JSON encoded string.

    - - @member ejs.NodeInfo - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(params); - }, - - /** -

    The type of ejs object. For internal use only.

    - - @member ejs.NodeInfo - @returns {String} the type of object - */ - _type: function () { - return 'node info'; - }, - - /** -

    Retrieves the internal document object. This is - typically used by internal API functions so use with caution.

    - - @member ejs.NodeInfo - @returns {Object} returns this object's internal object. - */ - _self: function () { - return params; - }, - - /** -

    Retrieves very simple status on the health of the cluster.

    - - @member ejs.NodeInfo - @param {Function} successcb A callback function that handles the response. - @param {Function} errorcb A callback function that handles errors. - @returns {Object} The return value is dependent on client implementation. - */ - doInfo: function (successcb, errorcb) { - // make sure the user has set a client - if (ejs.client == null) { - throw new Error("No Client Set"); - } - - var url = '/_nodes'; - - if (params.nodes && params.nodes.length > 0) { - url = url + '/' + params.nodes.join(); - } - - return ejs.client.get(url, genClientParams(params, paramExcludes), - successcb, errorcb); - } - - }; - }; - /** - @class -

    The NodeStats object provides an interface for accessing - the stats for one or more (or all) nodes in your cluster. Stats are - available for indicies, os, process, jvm, thread pool, network, filesystem, - transport, and http.

    - - @name ejs.NodeStats - - @desc Retrieve one or more (or all) of the cluster nodes statistics. - */ - ejs.NodeStats = function () { - - var - params = {}, - paramExcludes = ['nodes']; - - return { - - /** -

    Set's the nodes to get the stats information for. If a - single value is passed in it will be appended to the current list - of nodes. If an array is passed in it will replace all existing - nodes. Nodes can be identified in the APIs either using their - internal node id, the node name, address, custom attributes, or - _local for only the node receiving the request.

    - - @member ejs.NodeStats - @param {String || Array} n A node identifier (id, name, etc). - @returns {Object} returns this so that calls can be chained. - */ - nodes: function (n) { - if (params.nodes == null) { - params.nodes = []; - } - - if (n == null) { - return params.nodes; - } - - if (isString(n)) { - params.nodes.push(n); - } else if (isArray(n)) { - params.nodes = n; - } else { - throw new TypeError('Argument must be string or array'); - } - - return this; - }, - - /** -

    Clears all the flags (first). Useful, if you only want to - retrieve specific stats.

    - - @member ejs.NodeStats - @param {Boolean} trueFalse True to clear all flags - @returns {Object} returns this so that calls can be chained. - */ - clear: function (trueFalse) { - if (trueFalse == null) { - return params.clear; - } - - params.clear = trueFalse; - return this; - }, - - /** -

    Enables all stats flags.

    - - @member ejs.NodeStats - @param {Boolean} trueFalse True to get all available stats - @returns {Object} returns this so that calls can be chained. - */ - all: function (trueFalse) { - if (trueFalse == null) { - return params.all; - } - - params.all = trueFalse; - return this; - }, - - /** -

    If stats about indices should be returned. This is enabled - by default.

    - - @member ejs.NodeStats - @param {Boolean} trueFalse True to get indicies stats - @returns {Object} returns this so that calls can be chained. - */ - indices: function (trueFalse) { - if (trueFalse == null) { - return params.indices; - } - - params.indices = trueFalse; - return this; - }, - - /** -

    If stats about the os should be returned.

    - - @member ejs.NodeStats - @param {Boolean} trueFalse True to get os stats - @returns {Object} returns this so that calls can be chained. - */ - os: function (trueFalse) { - if (trueFalse == null) { - return params.os; - } - - params.os = trueFalse; - return this; - }, - - /** -

    If stats about the process should be returned.

    - - @member ejs.NodeStats - @param {Boolean} trueFalse True to get process stats - @returns {Object} returns this so that calls can be chained. - */ - process: function (trueFalse) { - if (trueFalse == null) { - return params.process; - } - - params.process = trueFalse; - return this; - }, - - /** -

    If stats about the jvm should be returned.

    - - @member ejs.NodeStats - @param {Boolean} trueFalse True to get jvm stats - @returns {Object} returns this so that calls can be chained. - */ - jvm: function (trueFalse) { - if (trueFalse == null) { - return params.jvm; - } - - params.jvm = trueFalse; - return this; - }, - - /** -

    If stats about the thread pool should be returned.

    - - @member ejs.NodeStats - @param {Boolean} trueFalse True to get thread pool stats - @returns {Object} returns this so that calls can be chained. - */ - threadPool: function (trueFalse) { - if (trueFalse == null) { - return params.thread_pool; - } - - params.thread_pool = trueFalse; - return this; - }, - - /** -

    If stats about the network should be returned.

    - - @member ejs.NodeStats - @param {Boolean} trueFalse True to get network stats - @returns {Object} returns this so that calls can be chained. - */ - network: function (trueFalse) { - if (trueFalse == null) { - return params.network; - } - - params.network = trueFalse; - return this; - }, - - /** -

    If stats about the file system (fs) should be returned.

    - - @member ejs.NodeStats - @param {Boolean} trueFalse True to get file system stats - @returns {Object} returns this so that calls can be chained. - */ - fs: function (trueFalse) { - if (trueFalse == null) { - return params.fs; - } - - params.fs = trueFalse; - return this; - }, - - /** -

    If stats about the transport should be returned.

    - - @member ejs.NodeStats - @param {Boolean} trueFalse True to get transport stats - @returns {Object} returns this so that calls can be chained. - */ - transport: function (trueFalse) { - if (trueFalse == null) { - return params.transport; - } - - params.transport = trueFalse; - return this; - }, - - /** -

    If stats about the http should be returned.

    - - @member ejs.NodeStats - @param {Boolean} trueFalse True to get http stats - @returns {Object} returns this so that calls can be chained. - */ - http: function (trueFalse) { - if (trueFalse == null) { - return params.http; - } - - params.http = trueFalse; - return this; - }, - - /** -

    Allows you to serialize this object into a JSON encoded string.

    - - @member ejs.NodeStats - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(params); - }, - - /** -

    The type of ejs object. For internal use only.

    - - @member ejs.NodeStats - @returns {String} the type of object - */ - _type: function () { - return 'node stats'; - }, - - /** -

    Retrieves the internal document object. This is - typically used by internal API functions so use with caution.

    - - @member ejs.NodeStats - @returns {Object} returns this object's internal object. - */ - _self: function () { - return params; - }, - - /** -

    Retrieves very simple status on the health of the cluster.

    - - @member ejs.NodeStats - @param {Function} successcb A callback function that handles the response. - @param {Function} errorcb A callback function that handles errors. - @returns {Object} The return value is dependent on client implementation. - */ - doStats: function (successcb, errorcb) { - // make sure the user has set a client - if (ejs.client == null) { - throw new Error("No Client Set"); - } - - var url = '/_nodes'; - - if (params.nodes && params.nodes.length > 0) { - url = url + '/' + params.nodes.join(); - } - - url = url + '/stats'; - - return ejs.client.get(url, genClientParams(params, paramExcludes), - successcb, errorcb); - } - - }; - }; - /** - @class -

    A GeoPoint object that can be used in queries and filters that - take a GeoPoint. GeoPoint supports various input formats.

    - -

    See http://www.elasticsearch.org/guide/reference/mapping/geo-point-type.html

    - - @name ejs.GeoPoint - - @desc -

    Defines a point

    - - @param {Array} p An optional point as an array in [lat, lon] format. - */ - ejs.GeoPoint = function (p) { - - var point = [0, 0]; - - // p = [lat, lon], convert it to GeoJSON format of [lon, lat] - if (p != null && isArray(p) && p.length === 2) { - point = [p[1], p[0]]; - } - - return { - - /** - Sets the GeoPoint as properties on an object. The object must have - a 'lat' and 'lon' or a 'geohash' property. - - Example: - {lat: 41.12, lon: -71.34} or {geohash: "drm3btev3e86"} - - @member ejs.GeoPoint - @param {Object} obj an object with a lat and lon or geohash property. - @returns {Object} returns this so that calls can be chained. - */ - properties: function (obj) { - if (obj == null) { - return point; - } - - if (isObject(obj) && has(obj, 'lat') && has(obj, 'lon')) { - point = { - lat: obj.lat, - lon: obj.lon - }; - } else if (isObject(obj) && has(obj, 'geohash')) { - point = { - geohash: obj.geohash - }; - } - - return this; - }, - - /** - Sets the GeoPoint as a string. The format is "lat,lon". - - Example: - - "41.12,-71.34" - - @member ejs.GeoPoint - @param {String} s a String point in "lat,lon" format. - @returns {Object} returns this so that calls can be chained. - */ - string: function (s) { - if (s == null) { - return point; - } - - if (isString(s) && s.indexOf(',') !== -1) { - point = s; - } - - return this; - }, - - /** - Sets the GeoPoint as a GeoHash. The hash is a string of - alpha-numeric characters with a precision length that defaults to 12. - - Example: - "drm3btev3e86" - - @member ejs.GeoPoint - @param {String} hash an GeoHash as a string - @param {Integer} precision an optional precision length, defaults - to 12 if not specified. - @returns {Object} returns this so that calls can be chained. - */ - geohash: function (hash, precision) { - // set precision, default to 12 - precision = (precision != null && isNumber(precision)) ? precision : 12; - - if (hash == null) { - return point; - } - - if (isString(hash) && hash.length === precision) { - point = hash; - } - - return this; - }, - - /** - Sets the GeoPoint from an array point. The array must contain only - 2 values. The first value is the lat and the 2nd value is the lon. - - Example: - [41.12, -71.34] - - @member ejs.GeoPoint - @param {Array} a an array of length 2. - @returns {Object} returns this so that calls can be chained. - */ - array: function (a) { - if (a == null) { - return point; - } - - - // convert to GeoJSON format of [lon, lat] - if (isArray(a) && a.length === 2) { - point = [a[1], a[0]]; - } - - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.GeoPoint - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(point); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.GeoPoint - @returns {String} the type of object - */ - _type: function () { - return 'geo point'; - }, - - /** - Retrieves the internal script object. This is typically used by - internal API functions so use with caution. - - @member ejs.GeoPoint - @returns {String} returns this object's internal object representation. - */ - _self: function () { - return point; - } - }; - }; - - /** - @class -

    Allows to highlight search results on one or more fields. In order to - perform highlighting, the actual content of the field is required. If the - field in question is stored (has store set to yes in the mapping), it will - be used, otherwise, the actual _source will be loaded and the relevant - field will be extracted from it.

    - -

    If no term_vector information is provided (by setting it to - with_positions_offsets in the mapping), then the plain highlighter will be - used. If it is provided, then the fast vector highlighter will be used. - When term vectors are available, highlighting will be performed faster at - the cost of bigger index size.

    - -

    See http://www.elasticsearch.org/guide/reference/api/search/highlighting.html

    - - @name ejs.Highlight - - @desc -

    Allows to highlight search results on one or more fields.

    - - @param {String || Array} fields An optional field or array of fields to highlight. - */ - ejs.Highlight = function (fields) { - - var highlight = { - fields: {} - }, - - addOption = function (field, option, val) { - if (field == null) { - highlight[option] = val; - } else { - if (!has(highlight.fields, field)) { - highlight.fields[field] = {}; - } - - highlight.fields[field][option] = val; - } - }; - - if (fields != null) { - if (isString(fields)) { - highlight.fields[fields] = {}; - } else if (isArray(fields)) { - each(fields, function (field) { - highlight.fields[field] = {}; - }); - } - } - - return { - - /** - Allows you to set the fields that will be highlighted. You can - specify a single field or an array of fields. All fields are - added to the current list of fields. - - @member ejs.Highlight - @param {String || Array} vals A field name or array of field names. - @returns {Object} returns this so that calls can be chained. - */ - fields: function (vals) { - if (vals == null) { - return highlight.fields; - } - - if (isString(vals)) { - if (!has(highlight.fields, vals)) { - highlight.fields[vals] = {}; - } - } else if (isArray(vals)) { - each(vals, function (field) { - if (!has(highlight.fields, field)) { - highlight.fields[field] = {}; - } - }); - } - }, - - /** - Sets the pre tags for highlighted fragments. You can apply the - tags to a specific field by passing the field name in to the - oField parameter. - - @member ejs.Highlight - @param {String || Array} tags A single tag or an array of tags. - @param {String} oField An optional field name - @returns {Object} returns this so that calls can be chained. - */ - preTags: function (tags, oField) { - if (tags === null && oField != null) { - return highlight.fields[oField].pre_tags; - } else if (tags == null) { - return highlight.pre_tags; - } - - if (isString(tags)) { - addOption(oField, 'pre_tags', [tags]); - } else if (isArray(tags)) { - addOption(oField, 'pre_tags', tags); - } - - return this; - }, - - /** - Sets the post tags for highlighted fragments. You can apply the - tags to a specific field by passing the field name in to the - oField parameter. - - @member ejs.Highlight - @param {String || Array} tags A single tag or an array of tags. - @param {String} oField An optional field name - @returns {Object} returns this so that calls can be chained. - */ - postTags: function (tags, oField) { - if (tags === null && oField != null) { - return highlight.fields[oField].post_tags; - } else if (tags == null) { - return highlight.post_tags; - } - - if (isString(tags)) { - addOption(oField, 'post_tags', [tags]); - } else if (isArray(tags)) { - addOption(oField, 'post_tags', tags); - } - - return this; - }, - - /** - Sets the order of highlight fragments. You can apply the option - to a specific field by passing the field name in to the - oField parameter. Valid values for order are: - - score - the score calculated by Lucene's highlighting framework. - - @member ejs.Highlight - @param {String} o The order. Currently only "score". - @param {String} oField An optional field name - @returns {Object} returns this so that calls can be chained. - */ - order: function (o, oField) { - if (o === null && oField != null) { - return highlight.fields[oField].order; - } else if (o == null) { - return highlight.order; - } - - o = o.toLowerCase(); - if (o === 'score') { - addOption(oField, 'order', o); - } - - return this; - }, - - /** - Sets the schema to be used for the tags. Valid values are: - - styled - 10 pre tags with css class of hltN, where N is 1-10 - - @member ejs.Highlight - @param {String} s The schema. Currently only "styled". - @returns {Object} returns this so that calls can be chained. - */ - tagsSchema: function (s) { - if (s == null) { - return highlight.tags_schema; - } - - s = s.toLowerCase(); - if (s === 'styled') { - highlight.tags_schema = s; - } - - return this; - }, - - /** - Enables highlights in documents matched by a filter. - You can apply the option to a specific field by passing the field - name in to the oField parameter. Defaults to false. - - @member ejs.Highlight - @param {Boolean} trueFalse If filtered docs should be highlighted. - @param {String} oField An optional field name - @returns {Object} returns this so that calls can be chained. - */ - highlightFilter: function (trueFalse, oField) { - if (trueFalse === null && oField != null) { - return highlight.fields[oField].highlight_filter; - } else if (trueFalse == null) { - return highlight.highlight_filter; - } - - addOption(oField, 'highlight_filter', trueFalse); - return this; - }, - - /** - Sets the size of each highlight fragment in characters. - You can apply the option to a specific field by passing the field - name in to the oField parameter. Default: 100 - - @member ejs.Highlight - @param {Integer} size The fragment size in characters. - @param {String} oField An optional field name - @returns {Object} returns this so that calls can be chained. - */ - fragmentSize: function (size, oField) { - if (size === null && oField != null) { - return highlight.fields[oField].fragment_size; - } else if (size == null) { - return highlight.fragment_size; - } - - addOption(oField, 'fragment_size', size); - return this; - }, - - /** - Sets the number of highlight fragments. - You can apply the option to a specific field by passing the field - name in to the oField parameter. Default: 5 - - @member ejs.Highlight - @param {Integer} cnt The fragment size in characters. - @param {String} oField An optional field name - @returns {Object} returns this so that calls can be chained. - */ - numberOfFragments: function (cnt, oField) { - if (cnt === null && oField != null) { - return highlight.fields[oField].number_of_fragments; - } else if (cnt == null) { - return highlight.number_of_fragments; - } - - addOption(oField, 'number_of_fragments', cnt); - return this; - }, - - /** - Sets highlight encoder. Valid values are: - - default - the default, no encoding - html - to encode html characters if you use html tags - - @member ejs.Highlight - @param {String} e The encoder. default or html - @returns {Object} returns this so that calls can be chained. - */ - encoder: function (e) { - if (e == null) { - return highlight.encoder; - } - - e = e.toLowerCase(); - if (e === 'default' || e === 'html') { - highlight.encoder = e; - } - - return this; - }, - - /** - When enabled it will cause a field to be highlighted only if a - query matched that field. false means that terms are highlighted - on all requested fields regardless if the query matches - specifically on them. You can apply the option to a specific - field by passing the field name in to the oField - parameter. Defaults to false. - - @member ejs.Highlight - @param {Boolean} trueFalse If filtered docs should be highlighted. - @param {String} oField An optional field name - @returns {Object} returns this so that calls can be chained. - */ - requireFieldMatch: function (trueFalse, oField) { - if (trueFalse === null && oField != null) { - return highlight.fields[oField].require_field_match; - } else if (trueFalse == null) { - return highlight.require_field_match; - } - - addOption(oField, 'require_field_match', trueFalse); - return this; - }, - - /** - Sets the max number of characters to scan while looking for the - start of a boundary character. You can apply the option to a - specific field by passing the field name in to the - oField parameter. Default: 20 - - @member ejs.Highlight - @param {Integer} cnt The max characters to scan. - @param {String} oField An optional field name - @returns {Object} returns this so that calls can be chained. - */ - boundaryMaxScan: function (cnt, oField) { - if (cnt === null && oField != null) { - return highlight.fields[oField].boundary_max_scan; - } else if (cnt == null) { - return highlight.boundary_max_scan; - } - - addOption(oField, 'boundary_max_scan', cnt); - return this; - }, - - /** - Set's the boundary characters. When highlighting a field that is - mapped with term vectors, boundary_chars can be configured to - define what constitutes a boundary for highlighting. It’s a single - string with each boundary character defined in it. You can apply - the option to a specific field by passing the field name in to - the oField parameter. It defaults to ".,!? \t\n". - - @member ejs.Highlight - @param {String} charStr The boundary chars in a string. - @param {String} oField An optional field name - @returns {Object} returns this so that calls can be chained. - */ - boundaryChars: function (charStr, oField) { - if (charStr === null && oField != null) { - return highlight.fields[oField].boundary_chars; - } else if (charStr == null) { - return highlight.boundary_chars; - } - - addOption(oField, 'boundary_chars', charStr); - return this; - }, - - /** - Sets the highligher type. You can apply the option - to a specific field by passing the field name in to the - oField parameter. Valid values for order are: - - fast-vector-highlighter - the fast vector based highligher - highlighter - the slower plain highligher - - @member ejs.Highlight - @param {String} t The highligher. - @param {String} oField An optional field name - @returns {Object} returns this so that calls can be chained. - */ - type: function (t, oField) { - if (t === null && oField != null) { - return highlight.fields[oField].type; - } else if (t == null) { - return highlight.type; - } - - t = t.toLowerCase(); - if (t === 'fast-vector-highlighter' || t === 'highlighter') { - addOption(oField, 'type', t); - } - - return this; - }, - - /** - Sets the fragmenter type. You can apply the option - to a specific field by passing the field name in to the - oField parameter. Valid values for order are: - - simple - breaks text up into same-size fragments with no concerns - over spotting sentence boundaries. - span - breaks text up into same-size fragments but does not split - up Spans. - - @member ejs.Highlight - @param {String} f The fragmenter. - @param {String} oField An optional field name - @returns {Object} returns this so that calls can be chained. - */ - fragmenter: function (f, oField) { - if (f === null && oField != null) { - return highlight.fields[oField].fragmenter; - } else if (f == null) { - return highlight.fragmenter; - } - - f = f.toLowerCase(); - if (f === 'simple' || f === 'span') { - addOption(oField, 'fragmenter', f); - } - - return this; - }, - - /** - Sets arbitrary options that can be passed to the highlighter - implementation in use. - - @since elasticsearch 0.90.1 - - @member ejs.Highlight - @param {String} opts A map/object of option name and values. - @param {Object} oField An optional field name - @returns {Object} returns this so that calls can be chained. - */ - options: function (opts, oField) { - if (opts === null && oField != null) { - return highlight.fields[oField].options; - } else if (opts == null) { - return highlight.options; - } - - if (!isObject(opts) || isArray(opts) || isEJSObject(opts)) { - throw new TypeError('Parameter must be an object'); - } - - addOption(oField, 'options', opts); - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.Highlight - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(highlight); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.Highlight - @returns {String} the type of object - */ - _type: function () { - return 'highlight'; - }, - - /** - Retrieves the internal script object. This is typically used by - internal API functions so use with caution. - - @member ejs.Highlight - @returns {String} returns this object's internal object representation. - */ - _self: function () { - return highlight; - } - }; - }; - - /** - @class -

    A shape which has already been indexed in another index and/or index - type. This is particularly useful for when you have a pre-defined list of - shapes which are useful to your application and you want to reference this - using a logical name (for example ‘New Zealand’) rather than having to - provide their coordinates each time.

    - - @name ejs.IndexedShape - - @desc -

    Defines a shape that already exists in an index/type.

    - - @param {String} type The name of the type where the shape is indexed. - @param {String} id The document id of the shape. - - */ - ejs.IndexedShape = function (type, id) { - - var indexedShape = { - type: type, - id: id - }; - - return { - - /** - Sets the type which the shape is indexed under. - - @member ejs.IndexedShape - @param {String} t a valid shape type. - @returns {Object} returns this so that calls can be chained. - */ - type: function (t) { - if (t == null) { - return indexedShape.type; - } - - indexedShape.type = t; - return this; - }, - - /** - Sets the document id of the indexed shape. - - @member ejs.IndexedShape - @param {String} id a valid document id. - @returns {Object} returns this so that calls can be chained. - */ - id: function (id) { - if (id == null) { - return indexedShape.id; - } - - indexedShape.id = id; - return this; - }, - - /** - Sets the index which the shape is indexed under. - Defaults to "shapes". - - @member ejs.IndexedShape - @param {String} idx a valid index name. - @returns {Object} returns this so that calls can be chained. - */ - index: function (idx) { - if (idx == null) { - return indexedShape.index; - } - - indexedShape.index = idx; - return this; - }, - - /** - Sets the field name containing the indexed shape. - Defaults to "shape". - - @member ejs.IndexedShape - @param {String} field a valid field name. - @returns {Object} returns this so that calls can be chained. - */ - shapeFieldName: function (field) { - if (field == null) { - return indexedShape.shape_field_name; - } - - indexedShape.shape_field_name = field; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.IndexedShape - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(indexedShape); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.IndexedShape - @returns {String} the type of object - */ - _type: function () { - return 'indexed shape'; - }, - - /** - Retrieves the internal script object. This is typically used by - internal API functions so use with caution. - - @member ejs.IndexedShape - @returns {String} returns this object's internal object representation. - */ - _self: function () { - return indexedShape; - } - }; - }; - - /** - @class -

    The MultiSearchRequest object provides methods generating and - executing search requests.

    - - @name ejs.MultiSearchRequest - - @desc -

    Provides methods for executing search requests

    - - @param {Object} conf A configuration object containing the initilization - parameters. The following parameters can be set in the conf object: - indices - single index name or array of index names - types - single type name or array of types - routing - the shard routing value - */ - ejs.MultiSearchRequest = function (conf) { - - var requests, indices, types, params = {}, - - // gernerates the correct url to the specified REST endpoint - getRestPath = function () { - var searchUrl = '', - parts = []; - - // join any indices - if (indices.length > 0) { - searchUrl = searchUrl + '/' + indices.join(); - } - - // join any types - if (types.length > 0) { - searchUrl = searchUrl + '/' + types.join(); - } - - // add _msearch endpoint - searchUrl = searchUrl + '/_msearch'; - - for (var p in params) { - if (!has(params, p) || params[p] === '') { - continue; - } - - parts.push(p + '=' + encodeURIComponent(params[p])); - } - - if (parts.length > 0) { - searchUrl = searchUrl + '?' + parts.join('&'); - } - - return searchUrl; - }; - - /** - The internal requests object. - @member ejs.MultiSearchRequest - @property {Object} requests - */ - requests = []; - - conf = conf || {}; - // check if we are searching across any specific indeices - if (conf.indices == null) { - indices = []; - } else if (isString(conf.indices)) { - indices = [conf.indices]; - } else { - indices = conf.indices; - } - - // check if we are searching across any specific types - if (conf.types == null) { - types = []; - } else if (isString(conf.types)) { - types = [conf.types]; - } else { - types = conf.types; - } - - // check that an index is specified when a type is - // if not, search across _all indices - if (indices.length === 0 && types.length > 0) { - indices = ["_all"]; - } - - return { - - /** - Sets the requests to execute. If passed a single value it is - added to the existing list of requests. If passed an array of - requests, they overwite all existing values. - - @member ejs.MultiSearchRequest - @param {Request || Array} r A single request or list of requests to execute. - @returns {Object} returns this so that calls can be - chained. Returns {Array} current value not specified. - */ - requests: function (r) { - if (r == null) { - return requests; - } - - if (isRequest(r)) { - requests.push(r); - } else if (isArray(r)) { - requests = r; - } else { - throw new TypeError('Argument must be request or array'); - } - - return this; - }, - - /** -

    Sets the search execution type for the request.

    - -

    Valid values are:

    - -
    -
    dfs_query_then_fetch - same as query_then_fetch, - except distributed term frequencies are calculated first.
    -
    dfs_query_and_fetch - same as query_and_fetch, - except distributed term frequencies are calculated first.
    -
    query_then_fetch - executed against all - shards, but only enough information is returned. When ready, - only the relevant shards are asked for the actual document - content
    -
    query_and_fetch - execute the query on all - relevant shards and return the results, including content.
    -
    scan - efficiently scroll a large result set
    -
    count - special search type that returns the - count that matched the search request without any docs
    -
    - -

    This option is valid during the following operations: - search

    - - @member ejs.MultiSearchRequest - @param {String} t The search execution type - @returns {Object} returns this so that calls can be chained. - */ - searchType: function (t) { - if (t == null) { - return params.search_type; - } - - t = t.toLowerCase(); - if (t === 'dfs_query_then_fetch' || t === 'dfs_query_and_fetch' || - t === 'query_then_fetch' || t === 'query_and_fetch' || - t === 'scan' || t === 'count') { - - params.search_type = t; - } - - return this; - }, - - /** - Allows you to set the specified indices on this request object. This is the - set of indices that will be used when the search is executed. - - @member ejs.MultiSearchRequest - @param {Array} indexArray An array of collection names. - @returns {Object} returns this so that calls can be chained. - */ - indices: function (indexArray) { - if (indexArray == null) { - return indices; - } else if (isString(indexArray)) { - indices = [indexArray]; - } else if (isArray(indexArray)) { - indices = indexArray; - } else { - throw new TypeError('Argument must be a string or array'); - } - - // check that an index is specified when a type is - // if not, search across _all indices - if (indices.length === 0 && types.length > 0) { - indices = ["_all"]; - } - - return this; - }, - - /** - Allows you to set the specified content-types on this request object. This is the - set of indices that will be used when the search is executed. - - @member ejs.MultiSearchRequest - @param {Array} typeArray An array of content-type names. - @returns {Object} returns this so that calls can be chained. - */ - types: function (typeArray) { - if (typeArray == null) { - return types; - } else if (isString(typeArray)) { - types = [typeArray]; - } else if (isArray(typeArray)) { - types = typeArray; - } else { - throw new TypeError('Argument must be a string or array'); - } - - // check that an index is specified when a type is - // if not, search across _all indices - if (indices.length === 0 && types.length > 0) { - indices = ["_all"]; - } - - return this; - }, - - /** -

    Determines what type of indices to exclude from a request. The - value can be one of the following:

    - -
    -
    none - No indices / aliases will be excluded from a request
    -
    missing - Indices / aliases that are missing will be excluded from a request
    -
    - -

    This option is valid during the following operations: - search, search shards, count and - delete by query

    - - @member ejs.MultiSearchRequest - @param {String} ignoreType the type of ignore (none or missing). - @returns {Object} returns this so that calls can be chained. - */ - ignoreIndices: function (ignoreType) { - if (ignoreType == null) { - return params.ignore_indices; - } - - ignoreType = ignoreType.toLowerCase(); - if (ignoreType === 'none' || ignoreType === 'missing') { - params.ignore_indices = ignoreType; - } - - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.MultiSearchRequest - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - var i, len, reqs = []; - for (i = 0, len = requests.length; i < len; i++) { - reqs.push(requests[i]._self()); - } - return JSON.stringify(reqs); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.MultiSearchRequest - @returns {String} the type of object - */ - _type: function () { - return 'multi search request'; - }, - - /** - Retrieves the internal query object. This is typically used by - internal API functions so use with caution. - - @member ejs.MultiSearchRequest - @returns {String} returns this object's internal object representation. - */ - _self: function () { - var i, len, reqs = []; - for (i = 0, len = requests.length; i < len; i++) { - reqs.push(requests[i]._self()); - } - return reqs; - }, - - /** - Executes the search. - - @member ejs.MultiSearchRequest - @param {Function} successcb A callback function that handles the search response. - @param {Function} errorcb A callback function that handles errors. - @returns {Object} Returns a client specific object. - */ - doSearch: function (successcb, errorcb) { - var i, len, request, query, header, data = ''; - - // make sure the user has set a client - if (ejs.client == null) { - throw new Error("No Client Set"); - } - - // generate the data - // data consists of a header for each request + newline + request + newline - for (i = 0, len = requests.length; i < len; i++) { - request = requests[i]; - header = {}; - - // add indices - if (request.indices().length > 0) { - header.indices = request.indices(); - } - - // add types - if (request.types().length > 0) { - header.types = request.types(); - } - - // add search type - if (request.searchType() != null) { - header.search_type = request.searchType(); - } - - // add preference - if (request.preference() != null) { - header.preference = request.preference(); - } - - // add routing - if (request.routing() != null) { - header.routing = request.routing(); - } - - // add ignore indices - if (request.ignoreIndices() != null) { - header.ignore_indices = request.ignoreIndices(); - } - - // add the generated header - data = data + JSON.stringify(header) + '\n'; - - // certain params need to be moved into the query body from request - // params, do that here - query = request._self(); - if (request.timeout() != null) { - query.timeout = request.timeout(); - } - - // add the query to the data - data = data + JSON.stringify(query) + '\n'; - } - - - return ejs.client.post(getRestPath(), data, successcb, errorcb); - } - - }; - }; - - /** - @class -

    The Request object provides methods generating and - executing search requests.

    - - @name ejs.Request - - @desc -

    Provides methods for executing search requests

    - - @param {Object} conf A configuration object containing the initilization - parameters. The following parameters can be set in the conf object: - indices - single index name or array of index names - types - single type name or array of types - routing - the shard routing value - */ - ejs.Request = function (conf) { - - var query, indices, types, params = {}, - - // gernerates the correct url to the specified REST endpoint - getRestPath = function (endpoint) { - var searchUrl = '', - parts = []; - - // join any indices - if (indices.length > 0) { - searchUrl = searchUrl + '/' + indices.join(); - } - - // join any types - if (types.length > 0) { - searchUrl = searchUrl + '/' + types.join(); - } - - // add the endpoint - if (endpoint.length > 0 && endpoint[0] !== '/') { - searchUrl = searchUrl + '/'; - } - - searchUrl = searchUrl + endpoint; - - for (var p in params) { - if (!has(params, p) || params[p] === '') { - continue; - } - - parts.push(p + '=' + encodeURIComponent(params[p])); - } - - if (parts.length > 0) { - searchUrl = searchUrl + '?' + parts.join('&'); - } - - return searchUrl; - }; - - /** - The internal query object. - @member ejs.Request - @property {Object} query - */ - query = {}; - - conf = conf || {}; - // check if we are searching across any specific indeices - if (conf.indices == null) { - indices = []; - } else if (isString(conf.indices)) { - indices = [conf.indices]; - } else { - indices = conf.indices; - } - - // check if we are searching across any specific types - if (conf.types == null) { - types = []; - } else if (isString(conf.types)) { - types = [conf.types]; - } else { - types = conf.types; - } - - // check that an index is specified when a type is - // if not, search across _all indices - if (indices.length === 0 && types.length > 0) { - indices = ["_all"]; - } - - if (conf.routing != null) { - params.routing = conf.routing; - } - - return { - - /** -

    Sets the sorting for the query. This accepts many input formats.

    - -
    -
    sort() - The current sorting values are returned.
    -
    sort(fieldName) - Adds the field to the current list of sorting values.
    -
    sort(fieldName, order) - Adds the field to the current list of - sorting with the specified order. Order must be asc or desc.
    -
    sort(ejs.Sort) - Adds the Sort value to the current list of sorting values.
    -
    sort(array) - Replaces all current sorting values with values - from the array. The array must contain only strings and Sort objects.
    -
    - -

    Multi-level sorting is supported so the order in which sort fields - are added to the query requests is relevant.

    - -

    It is recommended to use Sort objects when possible.

    - - @member ejs.Request - @param {String} fieldName The field to be sorted by. - @returns {Object} returns this so that calls can be chained. - */ - sort: function () { - var i, len; - - if (!has(query, "sort")) { - query.sort = []; - } - - if (arguments.length === 0) { - return query.sort; - } - - // if passed a single argument - if (arguments.length === 1) { - var sortVal = arguments[0]; - - if (isString(sortVal)) { - // add a single field name - query.sort.push(sortVal); - } else if (isSort(sortVal)) { - // add the Sort object - query.sort.push(sortVal._self()); - } else if (isArray(sortVal)) { - // replace with all values in the array - // the values must be a fieldName (string) or a - // Sort object. Any other type throws an Error. - query.sort = []; - for (i = 0, len = sortVal.length; i < len; i++) { - if (isString(sortVal[i])) { - query.sort.push(sortVal[i]); - } else if (isSort(sortVal[i])) { - query.sort.push(sortVal[i]._self()); - } else { - throw new TypeError('Invalid object in array'); - } - } - } else { - // Invalid object type as argument. - throw new TypeError('Argument must be string, Sort, or array'); - } - } else if (arguments.length === 2) { - // handle the case where a single field name and order are passed - var field = arguments[0], - order = arguments[1]; - - if (isString(field) && isString(order)) { - order = order.toLowerCase(); - if (order === 'asc' || order === 'desc') { - var sortObj = {}; - sortObj[field] = {order: order}; - query.sort.push(sortObj); - } - } - } - - return this; - }, - - /** - Enables score computation and tracking during sorting. Be default, - when sorting scores are not computed. - - @member ejs.Request - @param {Boolean} trueFalse If scores should be computed and tracked. - @returns {Object} returns this so that calls can be chained. - */ - trackScores: function (trueFalse) { - if (trueFalse == null) { - return query.track_scores; - } - - query.track_scores = trueFalse; - return this; - }, - - /** - Sets the number of results/documents to be returned. This is set on a per page basis. - - @member ejs.Request - @param {Integer} s The number of results that are to be returned by the search. - @returns {Object} returns this so that calls can be chained. - */ - size: function (s) { - if (s == null) { - return query.size; - } - - query.size = s; - return this; - }, - - /** - A timeout, bounding the request to be executed within the - specified time value and bail when expired. Defaults to no timeout. - -

    This option is valid during the following operations: - search and delete by query

    - - @member ejs.Request - @param {Long} t The timeout value in milliseconds. - @returns {Object} returns this so that calls can be chained. - */ - timeout: function (t) { - if (t == null) { - return params.timeout; - } - - params.timeout = t; - return this; - }, - - /** - Sets the shard routing parameter. Only shards matching routing - values will be searched. Set to an empty string to disable routing. - Disabled by default. - -

    This option is valid during the following operations: - search, search shards, count and - delete by query

    - - @member ejs.Request - @param {String} route The routing values as a comma-separated string. - @returns {Object} returns this so that calls can be chained. - */ - routing: function (route) { - if (route == null) { - return params.routing; - } - - params.routing = route; - return this; - }, - - /** -

    Sets the replication mode.

    - -

    Valid values are:

    - -
    -
    async - asynchronous replication to slaves
    -
    sync - synchronous replication to the slaves
    -
    default - the currently configured system default.
    -
    - -

    This option is valid during the following operations: - delete by query

    - - @member ejs.Request - @param {String} r The replication mode (async, sync, or default) - @returns {Object} returns this so that calls can be chained. - */ - replication: function (r) { - if (r == null) { - return params.replication; - } - - r = r.toLowerCase(); - if (r === 'async' || r === 'sync' || r === 'default') { - params.replication = r; - } - - return this; - }, - - /** -

    Sets the write consistency.

    - -

    Valid values are:

    - -
    -
    one - only requires write to one shard
    -
    quorum - requires writes to quorum (N/2 + 1)
    -
    all - requires write to succeed on all shards
    -
    default - the currently configured system default
    -
    - -

    This option is valid during the following operations: - delete by query

    - - @member ejs.Request - @param {String} c The write consistency (one, quorum, all, or default) - @returns {Object} returns this so that calls can be chained. - */ - consistency: function (c) { - if (c == null) { - return params.consistency; - } - - c = c.toLowerCase(); - if (c === 'default' || c === 'one' || c === 'quorum' || c === 'all') { - params.consistency = c; - } - - return this; - }, - - /** -

    Sets the search execution type for the request.

    - -

    Valid values are:

    - -
    -
    dfs_query_then_fetch - same as query_then_fetch, - except distributed term frequencies are calculated first.
    -
    dfs_query_and_fetch - same as query_and_fetch, - except distributed term frequencies are calculated first.
    -
    query_then_fetch - executed against all - shards, but only enough information is returned. When ready, - only the relevant shards are asked for the actual document - content
    -
    query_and_fetch - execute the query on all - relevant shards and return the results, including content.
    -
    scan - efficiently scroll a large result set
    -
    count - special search type that returns the - count that matched the search request without any docs
    -
    - -

    This option is valid during the following operations: - search

    - - @member ejs.Request - @param {String} t The search execution type - @returns {Object} returns this so that calls can be chained. - */ - searchType: function (t) { - if (t == null) { - return params.search_type; - } - - t = t.toLowerCase(); - if (t === 'dfs_query_then_fetch' || t === 'dfs_query_and_fetch' || - t === 'query_then_fetch' || t === 'query_and_fetch' || - t === 'scan' || t === 'count') { - - params.search_type = t; - } - - return this; - }, - - /** - By default, searches return full documents, meaning every property or field. - This method allows you to specify which fields you want returned. - - Pass a single field name and it is appended to the current list of - fields. Pass an array of fields and it replaces all existing - fields. - - @member ejs.Request - @param {String || Array} s The field as a string or fields as array - @returns {Object} returns this so that calls can be chained. - */ - fields: function (fieldList) { - if (fieldList == null) { - return query.fields; - } - - if (query.fields == null) { - query.fields = []; - } - - if (isString(fieldList)) { - query.fields.push(fieldList); - } else if (isArray(fieldList)) { - query.fields = fieldList; - } else { - throw new TypeError('Argument must be string or array'); - } - - return this; - }, - - /** - Once a query executes, you can use rescore to run a secondary, more - expensive query to re-order the results. - - @member ejs.Request - @param {Rescore} r The rescore configuration. - @returns {Object} returns this so that calls can be chained. - */ - rescore: function (r) { - if (r == null) { - return query.rescore; - } - - if (!isRescore(r)) { - throw new TypeError('Argument must be a Rescore'); - } - - query.rescore = r._self(); - - return this; - }, - - /** - A search result set could be very large (think Google). Setting the - from parameter allows you to page through the result set - by making multiple request. This parameters specifies the starting - result/document number point. Combine with size() to achieve paging. - - @member ejs.Request - @param {Array} f The offset at which to start fetching results/documents from the result set. - @returns {Object} returns this so that calls can be chained. - */ - from: function (f) { - if (f == null) { - return query.from; - } - - query.from = f; - return this; - }, - - /** - Allows you to set the specified query on this search object. This is the - query that will be used when the search is executed. - - @member ejs.Request - @param {Query} someQuery Any valid Query object. - @returns {Object} returns this so that calls can be chained. - */ - query: function (someQuery) { - if (someQuery == null) { - return query.query; - } - - if (!isQuery(someQuery)) { - throw new TypeError('Argument must be a Query'); - } - - query.query = someQuery._self(); - return this; - }, - - /** - Allows you to set the specified indices on this request object. This is the - set of indices that will be used when the search is executed. - - @member ejs.Request - @param {Array} indexArray An array of collection names. - @returns {Object} returns this so that calls can be chained. - */ - indices: function (indexArray) { - if (indexArray == null) { - return indices; - } else if (isString(indexArray)) { - indices = [indexArray]; - } else if (isArray(indexArray)) { - indices = indexArray; - } else { - throw new TypeError('Argument must be a string or array'); - } - - // check that an index is specified when a type is - // if not, search across _all indices - if (indices.length === 0 && types.length > 0) { - indices = ["_all"]; - } - - return this; - }, - - /** - Allows you to set the specified content-types on this request object. This is the - set of indices that will be used when the search is executed. - - @member ejs.Request - @param {Array} typeArray An array of content-type names. - @returns {Object} returns this so that calls can be chained. - */ - types: function (typeArray) { - if (typeArray == null) { - return types; - } else if (isString(typeArray)) { - types = [typeArray]; - } else if (isArray(typeArray)) { - types = typeArray; - } else { - throw new TypeError('Argument must be a string or array'); - } - - // check that an index is specified when a type is - // if not, search across _all indices - if (indices.length === 0 && types.length > 0) { - indices = ["_all"]; - } - - return this; - }, - - /** - Allows you to set the specified facet on this request object. Multiple facets can - be set, all of which will be returned when the search is executed. - - @member ejs.Request - @param {Facet} facet Any valid Facet object. - @returns {Object} returns this so that calls can be chained. - */ - facet: function (facet) { - if (facet == null) { - return query.facets; - } - - if (query.facets == null) { - query.facets = {}; - } - - if (!isFacet(facet)) { - throw new TypeError('Argument must be a Facet'); - } - - extend(query.facets, facet._self()); - - return this; - }, - - /** - Allows you to set a specified filter on this request object. - - @member ejs.Request - @param {Object} filter Any valid Filter object. - @returns {Object} returns this so that calls can be chained. - */ - filter: function (filter) { - if (filter == null) { - return query.filter; - } - - if (!isFilter(filter)) { - throw new TypeError('Argument must be a Filter'); - } - - query.filter = filter._self(); - return this; - }, - - /** - Performs highlighting based on the Highlight - settings. - - @member ejs.Request - @param {Highlight} h A valid Highlight object - @returns {Object} returns this so that calls can be chained. - */ - highlight: function (h) { - if (h == null) { - return query.highlight; - } - - if (!isHighlight(h)) { - throw new TypeError('Argument must be a Highlight object'); - } - - query.highlight = h._self(); - return this; - }, - - /** - Allows you to set the specified suggester on this request object. - Multiple suggesters can be set, all of which will be returned when - the search is executed. Global suggestion text can be set by - passing in a string vs. a Suggest object. - - @since elasticsearch 0.90 - - @member ejs.Request - @param {String || Suggest} s A valid Suggest object or a String to - set as the global suggest text. - @returns {Object} returns this so that calls can be chained. - */ - suggest: function (s) { - if (s == null) { - return query.suggest; - } - - if (query.suggest == null) { - query.suggest = {}; - } - - if (isString(s)) { - query.suggest.text = s; - } else if (isSuggest(s)) { - extend(query.suggest, s._self()); - } else { - throw new TypeError('Argument must be a string or Suggest object'); - } - - return this; - }, - - /** - Computes a document property dynamically based on the supplied ScriptField. - - @member ejs.Request - @param {ScriptField} oScriptField A valid ScriptField. - @returns {Object} returns this so that calls can be chained. - */ - scriptField: function (oScriptField) { - if (oScriptField == null) { - return query.script_fields; - } - - if (query.script_fields == null) { - query.script_fields = {}; - } - - if (!isScriptField(oScriptField)) { - throw new TypeError('Argument must be a ScriptField'); - } - - extend(query.script_fields, oScriptField._self()); - return this; - }, - - /** -

    Controls the preference of which shard replicas to execute the search request on. - By default, the operation is randomized between the each shard replicas. The - preference can be one of the following:

    - -
    -
    _primary - the operation will only be executed on primary shards
    -
    _local - the operation will prefer to be executed on local shards
    -
    _only_node:$nodeid - the search will only be executed on node with id $nodeid
    -
    custom - any string, will guarentee searches always happen on same node.
    -
    - -

    This option is valid during the following operations: - search, search shards, and count

    - - @member ejs.Request - @param {String} perf the preference, any of _primary, _local, - _only_:$nodeid, or a custom string value. - @returns {Object} returns this so that calls can be chained. - */ - preference: function (perf) { - if (perf == null) { - return params.preference; - } - - params.preference = perf; - return this; - }, - - /** -

    If the operation will run on the local node only

    - -

    This option is valid during the following operations: - search shards

    - - @member ejs.Request - @param {Boolean} trueFalse True to run on local node only - @returns {Object} returns this so that calls can be chained. - */ - local: function (trueFalse) { - if (trueFalse == null) { - return params.local; - } - - params.local = trueFalse; - return this; - }, - - /** -

    Determines what type of indices to exclude from a request. The - value can be one of the following:

    - -
    -
    none - No indices / aliases will be excluded from a request
    -
    missing - Indices / aliases that are missing will be excluded from a request
    -
    - -

    This option is valid during the following operations: - search, search shards, count and - delete by query

    - - @member ejs.Request - @param {String} ignoreType the type of ignore (none or missing). - @returns {Object} returns this so that calls can be chained. - */ - ignoreIndices: function (ignoreType) { - if (ignoreType == null) { - return params.ignore_indices; - } - - ignoreType = ignoreType.toLowerCase(); - if (ignoreType === 'none' || ignoreType === 'missing') { - params.ignore_indices = ignoreType; - } - - return this; - }, - - /** - Boosts hits in the specified index by the given boost value. - - @member ejs.Request - @param {String} index the index to boost - @param {Double} boost the boost value - @returns {Object} returns this so that calls can be chained. - */ - indexBoost: function (index, boost) { - if (query.indices_boost == null) { - query.indices_boost = {}; - } - - if (arguments.length === 0) { - return query.indices_boost; - } - - query.indices_boost[index] = boost; - return this; - }, - - /** - Enable/Disable explanation of score for each search result. - - @member ejs.Request - @param {Boolean} trueFalse true to enable, false to disable - @returns {Object} returns this so that calls can be chained. - */ - explain: function (trueFalse) { - if (trueFalse == null) { - return query.explain; - } - - query.explain = trueFalse; - return this; - }, - - /** - Enable/Disable returning version number for each search result. - - @member ejs.Request - @param {Boolean} trueFalse true to enable, false to disable - @returns {Object} returns this so that calls can be chained. - */ - version: function (trueFalse) { - if (trueFalse == null) { - return query.version; - } - - query.version = trueFalse; - return this; - }, - - /** - Filters out search results will scores less than the specified minimum score. - - @member ejs.Request - @param {Double} min a positive double value. - @returns {Object} returns this so that calls can be chained. - */ - minScore: function (min) { - if (min == null) { - return query.min_score; - } - - query.min_score = min; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.Request - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(query); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.Request - @returns {String} the type of object - */ - _type: function () { - return 'request'; - }, - - /** - Retrieves the internal query object. This is typically used by - internal API functions so use with caution. - - @member ejs.Request - @returns {String} returns this object's internal object representation. - */ - _self: function () { - return query; - }, - - /** - Executes a delete by query request using the current query. - - @member ejs.Request - @param {Function} successcb A callback function that handles the response. - @param {Function} errorcb A callback function that handles errors. - @returns {Object} Returns a client specific object. - */ - doDeleteByQuery: function (successcb, errorcb) { - var queryData = JSON.stringify(query.query); - - // make sure the user has set a client - if (ejs.client == null) { - throw new Error("No Client Set"); - } - - return ejs.client.del(getRestPath('_query'), queryData, successcb, errorcb); - }, - - /** - Executes a count request using the current query. - - @member ejs.Request - @param {Function} successcb A callback function that handles the count response. - @param {Function} errorcb A callback function that handles errors. - @returns {Object} Returns a client specific object. - */ - doCount: function (successcb, errorcb) { - var queryData = JSON.stringify(query.query); - - // make sure the user has set a client - if (ejs.client == null) { - throw new Error("No Client Set"); - } - - return ejs.client.post(getRestPath('_count'), queryData, successcb, errorcb); - }, - - /** - Executes the search. - - @member ejs.Request - @param {Function} successcb A callback function that handles the search response. - @param {Function} errorcb A callback function that handles errors. - @returns {Object} Returns a client specific object. - */ - doSearch: function (successcb, errorcb) { - var queryData = JSON.stringify(query); - - // make sure the user has set a client - if (ejs.client == null) { - throw new Error("No Client Set"); - } - - return ejs.client.post(getRestPath('_search'), queryData, successcb, errorcb); - }, - - /** - Executes the search request as configured but only returns back - the shards and nodes that the search is going to execute on. This - is a cluster admin method. - - @member ejs.Request - @param {Function} successcb A callback function that handles the response. - @param {Function} errorcb A callback function that handles errors. - @returns {Object} Returns a client specific object. - */ - doSearchShards: function (successcb, errorcb) { - // make sure the user has set a client - if (ejs.client == null) { - throw new Error("No Client Set"); - } - - // we don't need to send in the body data, just use empty string - return ejs.client.post(getRestPath('_search_shards'), '', successcb, errorcb); - } - - }; - }; - - /** - @class -

    A method that allows to rescore queries with a typically more expensive.

    - - @name ejs.Rescore - - @desc -

    Defines an operation that rescores a query with another query.

    - - @param {Number} windowSize The optional number of documents to reorder per shard. - @param {Query} windowSize The optional query to use for rescoring. - - */ - ejs.Rescore = function (windowSize, qry) { - - if (windowSize != null && !isNumber(windowSize)) { - throw new TypeError('Argument must be a Number'); - } - - if (qry != null && !isQuery(qry)) { - throw new TypeError('Argument must be a Query'); - } - - var rescore = { - query: {} - }; - - if (windowSize != null) { - rescore.window_size = windowSize; - } - - if (qry != null) { - rescore.query.rescore_query = qry._self(); - } - - return { - - /** - Sets the query used by the rescoring. - - @member ejs.Rescore - @param {Query} someQuery a valid query. - @returns {Object} returns this so that calls can be chained. - */ - rescoreQuery: function (someQuery) { - if (someQuery == null) { - return rescore.query.rescore_query; - } - - if (!isQuery(someQuery)) { - throw new TypeError('Argument must be a Query'); - } - - rescore.query.rescore_query = someQuery._self(); - return this; - }, - - /** - Sets the weight assigned to the original query of the rescoring. - - @member ejs.Rescore - @param {Number} weight a valid query weight. - @returns {Object} returns this so that calls can be chained. - */ - queryWeight: function (weight) { - if (weight == null) { - return rescore.query.query_weight; - } - - if (!isNumber(weight)) { - throw new TypeError('Argument must be a Number'); - } - - rescore.query.query_weight = weight; - return this; - }, - - /** - Sets the weight assigned to the query used to rescore the original query. - - @member ejs.Rescore - @param {Number} weight a valid rescore query weight. - @returns {Object} returns this so that calls can be chained. - */ - rescoreQueryWeight: function (weight) { - if (weight == null) { - return rescore.query.rescore_query_weight; - } - - if (!isNumber(weight)) { - throw new TypeError('Argument must be a Number'); - } - - rescore.query.rescore_query_weight = weight; - return this; - }, - - /** - Sets the window_size parameter of the rescoring. - - @member ejs.Rescore - @param {Number} size a valid window size. - @returns {Object} returns this so that calls can be chained. - */ - windowSize: function (size) { - if (size == null) { - return rescore.window_size; - } - - if (!isNumber(size)) { - throw new TypeError('Argument must be a Number'); - } - - rescore.window_size = size; - return this; - }, - - /** - Sets the scoring mode. Valid values are: - - total - default mode, the scores combined - multiply - the scores multiplied - min - the lowest of the scores - max - the highest score - avg - the average of the scores - - @member ejs.Rescore - @param {String} s The score mode as a string. - @returns {Object} returns this so that calls can be chained. - */ - scoreMode: function (s) { - if (s == null) { - return rescore.query.score_mode; - } - - s = s.toLowerCase(); - if (s === 'total' || s === 'min' || s === 'max' || s === 'multiply' || - s === 'avg') { - rescore.query.score_mode = s; - } - - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.Rescore - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(rescore); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.Rescore - @returns {String} the type of object - */ - _type: function () { - return 'rescore'; - }, - - /** - Retrieves the internal script object. This is typically used by - internal API functions so use with caution. - - @member ejs.Rescore - @returns {String} returns this object's internal object representation. - */ - _self: function () { - return rescore; - } - }; - }; - /** - @class -

    ScriptField's allow you create dynamic fields on stored documents at query - time. For example, you might have a set of document thats containsthe fields - price and quantity. At query time, you could define a computed - property that dynamically creates a new field called totalin each document - based on the calculation price * quantity.

    - - @name ejs.ScriptField - - @desc -

    Computes dynamic document properties based on information from other fields.

    - - @param {String} fieldName A name of the script field to create. - - */ - ejs.ScriptField = function (fieldName) { - var script = {}; - - script[fieldName] = {}; - - return { - - /** - The script language being used. Currently supported values are - javascript and mvel. - - @member ejs.ScriptField - @param {String} language The language of the script. - @returns {Object} returns this so that calls can be chained. - */ - lang: function (language) { - if (language == null) { - return script[fieldName].lang; - } - - script[fieldName].lang = language; - return this; - }, - - /** - Sets the script/code that will be used to perform the calculation. - - @member ejs.ScriptField - @param {String} expression The script/code to use. - @returns {Object} returns this so that calls can be chained. - */ - script: function (expression) { - if (expression == null) { - return script[fieldName].script; - } - - script[fieldName].script = expression; - return this; - }, - - /** - Allows you to set script parameters to be used during the execution of the script. - - @member ejs.ScriptField - @param {Object} oParams An object containing key/value pairs representing param name/value. - @returns {Object} returns this so that calls can be chained. - */ - params: function (oParams) { - if (oParams == null) { - return script[fieldName].params; - } - - script[fieldName].params = oParams; - return this; - }, - - /** - If execeptions thrown from the script should be ignored or not. - Default: false - - @member ejs.ScriptField - @param {Boolean} trueFalse if execptions should be ignored - @returns {Object} returns this so that calls can be chained. - */ - ignoreFailure: function (trueFalse) { - if (trueFalse == null) { - return script[fieldName].ignore_failure; - } - - script[fieldName].ignore_failure = trueFalse; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.ScriptField - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(script); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.ScriptField - @returns {String} the type of object - */ - _type: function () { - return 'script field'; - }, - - /** - Retrieves the internal script object. This is typically used by - internal API functions so use with caution. - - @member ejs.ScriptField - @returns {String} returns this object's internal facet property. - */ - _self: function () { - return script; - } - }; - }; - - /** - @class -

    A Shape object that can be used in queries and filters that - take a Shape. Shape uses the GeoJSON format.

    - -

    See http://www.geojson.org/

    - - @name ejs.Shape - - @desc -

    Defines a shape

    - - @param {String} type A valid shape type. - @param {Array} coords An valid coordinat definition for the given shape. - - */ - ejs.Shape = function (type, coords) { - - var - shape = {}, - validType = function (t) { - var valid = false; - if (t === 'point' || t === 'linestring' || t === 'polygon' || - t === 'multipoint' || t === 'envelope' || t === 'multipolygon' || - t === 'circle' || t === 'multilinestring') { - valid = true; - } - - return valid; - }; - - type = type.toLowerCase(); - if (validType(type)) { - shape.type = type; - shape.coordinates = coords; - } - - return { - - /** - Sets the shape type. Can be set to one of: point, linestring, polygon, - multipoint, envelope, or multipolygon. - - @member ejs.Shape - @param {String} t a valid shape type. - @returns {Object} returns this so that calls can be chained. - */ - type: function (t) { - if (t == null) { - return shape.type; - } - - t = t.toLowerCase(); - if (validType(t)) { - shape.type = t; - } - - return this; - }, - - /** - Sets the coordinates for the shape definition. Note, the coordinates - are not validated in this api. Please see GeoJSON and ElasticSearch - documentation for correct coordinate definitions. - - @member ejs.Shape - @param {Array} c a valid coordinates definition for the shape. - @returns {Object} returns this so that calls can be chained. - */ - coordinates: function (c) { - if (c == null) { - return shape.coordinates; - } - - shape.coordinates = c; - return this; - }, - - /** - Sets the radius for parsing a circle Shape. - - @member ejs.Shape - @param {String} r a valid radius value for a circle. - @returns {Object} returns this so that calls can be chained. - */ - radius: function (r) { - if (r == null) { - return shape.radius; - } - - shape.radius = r; - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.Shape - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(shape); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.Shape - @returns {String} the type of object - */ - _type: function () { - return 'shape'; - }, - - /** - Retrieves the internal script object. This is typically used by - internal API functions so use with caution. - - @member ejs.Shape - @returns {String} returns this object's internal object representation. - */ - _self: function () { - return shape; - } - }; - }; - - /** - @class -

    A Sort object that can be used in on the Request object to specify - various types of sorting.

    - -

    See http://www.elasticsearch.org/guide/reference/api/search/sort.html

    - - @name ejs.Sort - - @desc -

    Defines a sort value

    - - @param {String} fieldName The fieldName to sort against. Defaults to _score - if not specified. - */ - ejs.Sort = function (fieldName) { - - // default to sorting against the documents score. - if (fieldName == null) { - fieldName = '_score'; - } - - var sort = {}, - key = fieldName, // defaults to field search - geo_key = '_geo_distance', // used when doing geo distance sort - script_key = '_script'; // used when doing script sort - - // defaults to a field sort - sort[key] = {}; - - return { - - /** - Set's the field to sort on - - @member ejs.Sort - @param {String} f The name of a field - @returns {Object} returns this so that calls can be chained. - */ - field: function (f) { - var oldValue = sort[key]; - - if (f == null) { - return fieldName; - } - - delete sort[key]; - fieldName = f; - key = f; - sort[key] = oldValue; - - return this; - }, - - /** - Enables sorting based on a distance from a GeoPoint - - @member ejs.Sort - @param {GeoPoint} point A valid GeoPoint object - @returns {Object} returns this so that calls can be chained. - */ - geoDistance: function (point) { - var oldValue = sort[key]; - - if (point == null) { - return sort[key][fieldName]; - } - - if (!isGeoPoint(point)) { - throw new TypeError('Argument must be a GeoPoint'); - } - - delete sort[key]; - key = geo_key; - sort[key] = oldValue; - sort[key][fieldName] = point._self(); - - return this; - }, - - /** - Enables sorting based on a script. - - @member ejs.Sort - @param {String} scriptCode The script code as a string - @returns {Object} returns this so that calls can be chained. - */ - script: function (scriptCode) { - var oldValue = sort[key]; - - if (scriptCode == null) { - return sort[key].script; - } - - delete sort[key]; - key = script_key; - sort[key] = oldValue; - sort[key].script = scriptCode; - - return this; - }, - - /** - Sets the sort order. Valid values are: - - asc - for ascending order - desc - for descending order - - Valid during sort types: field, geo distance, and script - - @member ejs.Sort - @param {String} o The sort order as a string, asc or desc. - @returns {Object} returns this so that calls can be chained. - */ - order: function (o) { - if (o == null) { - return sort[key].order; - } - - o = o.toLowerCase(); - if (o === 'asc' || o === 'desc') { - sort[key].order = o; - } - - return this; - }, - - /** - Sets the sort order to ascending (asc). Same as calling - order('asc'). - - @member ejs.Sort - @returns {Object} returns this so that calls can be chained. - */ - asc: function () { - sort[key].order = 'asc'; - return this; - }, - - /** - Sets the sort order to descending (desc). Same as calling - order('desc'). - - @member ejs.Sort - @returns {Object} returns this so that calls can be chained. - */ - desc: function () { - sort[key].order = 'desc'; - return this; - }, - - /** - Sets the order with a boolean value. - - true = descending sort order - false = ascending sort order - - Valid during sort types: field, geo distance, and script - - @member ejs.Sort - @param {Boolean} trueFalse If sort should be in reverse order. - @returns {Object} returns this so that calls can be chained. - */ - reverse: function (trueFalse) { - if (trueFalse == null) { - return sort[key].reverse; - } - - sort[key].reverse = trueFalse; - return this; - }, - - /** - Sets the value to use for missing fields. Valid values are: - - _last - to put documents with the field missing last - _first - to put documents with the field missing first - {String} - any string value to use as the sort value. - - Valid during sort types: field - - @member ejs.Sort - @param {String} m The value to use for documents with the field missing. - @returns {Object} returns this so that calls can be chained. - */ - missing: function (m) { - if (m == null) { - return sort[key].missing; - } - - sort[key].missing = m; - return this; - }, - - /** - Sets if the sort should ignore unmapped fields vs throwing an error. - - Valid during sort types: field - - @member ejs.Sort - @param {Boolean} trueFalse If sort should ignore unmapped fields. - @returns {Object} returns this so that calls can be chained. - */ - ignoreUnmapped: function (trueFalse) { - if (trueFalse == null) { - return sort[key].ignore_unmapped; - } - - sort[key].ignore_unmapped = trueFalse; - return this; - }, - - /** - Sets the distance unit. Valid values are "mi" for miles or "km" - for kilometers. Defaults to "km". - - Valid during sort types: geo distance - - @member ejs.Sort - @param {Number} unit the unit of distance measure. - @returns {Object} returns this so that calls can be chained. - */ - unit: function (unit) { - if (unit == null) { - return sort[key].unit; - } - - unit = unit.toLowerCase(); - if (unit === 'mi' || unit === 'km') { - sort[key].unit = unit; - } - - return this; - }, - - /** - If the lat/long points should be normalized to lie within their - respective normalized ranges. - - Normalized ranges are: - lon = -180 (exclusive) to 180 (inclusive) range - lat = -90 to 90 (both inclusive) range - - Valid during sort types: geo distance - - @member ejs.Sort - @param {String} trueFalse True if the coordinates should be normalized. False otherwise. - @returns {Object} returns this so that calls can be chained. - */ - normalize: function (trueFalse) { - if (trueFalse == null) { - return sort[key].normalize; - } - - sort[key].normalize = trueFalse; - return this; - }, - - /** - How to compute the distance. Can either be arc (better precision) - or plane (faster). Defaults to arc. - - Valid during sort types: geo distance - - @member ejs.Sort - @param {String} type The execution type as a string. - @returns {Object} returns this so that calls can be chained. - */ - distanceType: function (type) { - if (type == null) { - return sort[key].distance_type; - } - - type = type.toLowerCase(); - if (type === 'arc' || type === 'plane') { - sort[key].distance_type = type; - } - - return this; - }, - - /** - Sets parameters that will be applied to the script. Overwrites - any existing params. - - Valid during sort types: script - - @member ejs.Sort - @param {Object} p An object where the keys are the parameter name and - values are the parameter value. - @returns {Object} returns this so that calls can be chained. - */ - params: function (p) { - if (p == null) { - return sort[key].params; - } - - sort[key].params = p; - return this; - }, - - /** - Sets the script language. - - Valid during sort types: script - - @member ejs.Sort - @param {String} lang The script language, default mvel. - @returns {Object} returns this so that calls can be chained. - */ - lang: function (lang) { - if (lang == null) { - return sort[key].lang; - } - - sort[key].lang = lang; - return this; - }, - - /** - Sets the script sort type. Valid values are: - -
    -
    string - script return value is sorted as a string
    -
    number - script return value is sorted as a number
    -
    - - Valid during sort types: script - - @member ejs.Sort - @param {String} type The sort type. Either string or number. - @returns {Object} returns this so that calls can be chained. - */ - type: function (type) { - if (type == null) { - return sort[key].type; - } - - type = type.toLowerCase(); - if (type === 'string' || type === 'number') { - sort[key].type = type; - } - - return this; - }, - - /** - Sets the sort mode. Valid values are: - -
    -
    min - sort by lowest value
    -
    max - sort by highest value
    -
    sum - sort by the sum of all values
    -
    avg - sort by the average of all values
    -
    - - Valid during sort types: field, geo distance - - @since elasticsearch 0.90 - @member ejs.Sort - @param {String} m The sort mode. Either min, max, sum, or avg. - @returns {Object} returns this so that calls can be chained. - */ - mode: function (m) { - if (m == null) { - return sort[key].mode; - } - - m = m.toLowerCase(); - if (m === 'min' || m === 'max' || m === 'sum' || m === 'avg') { - sort[key].mode = m; - } - - return this; - }, - - /** - Sets the path of the nested object. - - Valid during sort types: field, geo distance - - @since elasticsearch 0.90 - @member ejs.Sort - @param {String} path The nested path value. - @returns {Object} returns this so that calls can be chained. - */ - nestedPath: function (path) { - if (path == null) { - return sort[key].nested_path; - } - - sort[key].nested_path = path; - return this; - }, - - /** -

    Allows you to set a filter that nested objects must match - in order to be considered during sorting.

    - - Valid during sort types: field, geo distance - - @since elasticsearch 0.90 - @member ejs.Sort - @param {Object} oFilter A valid Filter object. - @returns {Object} returns this so that calls can be chained. - */ - nestedFilter: function (oFilter) { - if (oFilter == null) { - return sort[key].nested_filter; - } - - if (!isFilter(oFilter)) { - throw new TypeError('Argument must be a Filter'); - } - - sort[key].nested_filter = oFilter._self(); - return this; - }, - - /** - Allows you to serialize this object into a JSON encoded string. - - @member ejs.Sort - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(sort); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.Sort - @returns {String} the type of object - */ - _type: function () { - return 'sort'; - }, - - /** - Retrieves the internal script object. This is typically used by - internal API functions so use with caution. - - @member ejs.Sort - @returns {String} returns this object's internal object representation. - */ - _self: function () { - return sort; - } - }; - }; - - /** - @class -

    DirectGenerator is a candidate generator for PhraseSuggester. - It generates terms based on edit distance and operators much like the - TermSuggester.

    - - @name ejs.DirectGenerator - - @since elasticsearch 0.90 - - @desc -

    A candidate generator that generates terms based on edit distance.

    - - @borrows ejs.DirectSettingsMixin.accuracy as accuracy - @borrows ejs.DirectSettingsMixin.suggestMode as suggestMode - @borrows ejs.DirectSettingsMixin.sort as sort - @borrows ejs.DirectSettingsMixin.stringDistance as stringDistance - @borrows ejs.DirectSettingsMixin.maxEdits as maxEdits - @borrows ejs.DirectSettingsMixin.maxInspections as maxInspections - @borrows ejs.DirectSettingsMixin.maxTermFreq as maxTermFreq - @borrows ejs.DirectSettingsMixin.prefixLength as prefixLength - @borrows ejs.DirectSettingsMixin.minWordLen as minWordLen - @borrows ejs.DirectSettingsMixin.minDocFreq as minDocFreq - */ - ejs.DirectGenerator = function () { - - - var - - // common suggester options used in this generator - _common = ejs.DirectSettingsMixin(), - - /** - The internal generator object. - @member ejs.DirectGenerator - @property {Object} suggest - */ - generator = _common._self(); - - return extend(_common, { - - /** -

    Sets an analyzer that is applied to each of the tokens passed to - this generator. The analyzer is applied to the original tokens, - not the generated tokens.

    - - @member ejs.DirectGenerator - @param {String} analyzer A valid analyzer name. - @returns {Object} returns this so that calls can be chained. - */ - preFilter: function (analyzer) { - if (analyzer == null) { - return generator.pre_filter; - } - - generator.pre_filter = analyzer; - return this; - }, - - /** -

    Sets an analyzer that is applied to each of the generated tokens - before they are passed to the actual phrase scorer.

    - - @member ejs.DirectGenerator - @param {String} analyzer A valid analyzer name. - @returns {Object} returns this so that calls can be chained. - */ - postFilter: function (analyzer) { - if (analyzer == null) { - return generator.post_filter; - } - - generator.post_filter = analyzer; - return this; - }, - - /** -

    Sets the field used to generate suggestions from.

    - - @member ejs.DirectGenerator - @param {String} field A valid field name. - @returns {Object} returns this so that calls can be chained. - */ - field: function (field) { - if (field == null) { - return generator.field; - } - - generator.field = field; - return this; - }, - - /** -

    Sets the number of suggestions returned for each token.

    - - @member ejs.DirectGenerator - @param {Integer} s A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - size: function (s) { - if (s == null) { - return generator.size; - } - - generator.size = s; - return this; - }, - - /** -

    Allows you to serialize this object into a JSON encoded string.

    - - @member ejs.DirectGenerator - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(generator); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.DirectGenerator - @returns {String} the type of object - */ - _type: function () { - return 'generator'; - }, - - /** -

    Retrieves the internal generator object. This is typically used by - internal API functions so use with caution.

    - - @member ejs.DirectGenerator - @returns {String} returns this object's internal generator property. - */ - _self: function () { - return generator; - } - }); - }; - - /** - @mixin -

    The DirectSettingsMixin provides support for common options used across - various Suggester implementations. This object should not be - used directly.

    - - @name ejs.DirectSettingsMixin - */ - ejs.DirectSettingsMixin = function () { - - /** - The internal settings object. - @member ejs.DirectSettingsMixin - @property {Object} settings - */ - var settings = {}; - - return { - - /** -

    Sets the accuracy. How similar the suggested terms at least - need to be compared to the original suggest text.

    - - @member ejs.DirectSettingsMixin - @param {Double} a A positive double value between 0 and 1. - @returns {Object} returns this so that calls can be chained. - */ - accuracy: function (a) { - if (a == null) { - return settings.accuracy; - } - - settings.accuracy = a; - return this; - }, - - /** -

    Sets the suggest mode. Valid values are:

    - -
    -
    missing - Only suggest terms in the suggest text that aren't in the index
    -
    popular - Only suggest suggestions that occur in more docs then the original suggest text term
    -
    always - Suggest any matching suggestions based on terms in the suggest text
    -
    - - @member ejs.DirectSettingsMixin - @param {String} m The mode of missing, popular, or always. - @returns {Object} returns this so that calls can be chained. - */ - suggestMode: function (m) { - if (m == null) { - return settings.suggest_mode; - } - - m = m.toLowerCase(); - if (m === 'missing' || m === 'popular' || m === 'always') { - settings.suggest_mode = m; - } - - return this; - }, - - /** -

    Sets the sort mode. Valid values are:

    - -
    -
    score - Sort by score first, then document frequency, and then the term itself
    -
    frequency - Sort by document frequency first, then simlarity score and then the term itself
    -
    - - @member ejs.DirectSettingsMixin - @param {String} s The score type of score or frequency. - @returns {Object} returns this so that calls can be chained. - */ - sort: function (s) { - if (s == null) { - return settings.sort; - } - - s = s.toLowerCase(); - if (s === 'score' || s === 'frequency') { - settings.sort = s; - } - - return this; - }, - - /** -

    Sets what string distance implementation to use for comparing - how similar suggested terms are. Valid values are:

    - -
    -
    internal - based on damerau_levenshtein but but highly optimized for comparing string distance for terms inside the index
    -
    damerau_levenshtein - String distance algorithm based on Damerau-Levenshtein algorithm
    -
    levenstein - String distance algorithm based on Levenstein edit distance algorithm
    -
    jarowinkler - String distance algorithm based on Jaro-Winkler algorithm
    -
    ngram - String distance algorithm based on character n-grams
    -
    - - @member ejs.DirectSettingsMixin - @param {String} s The string distance algorithm name. - @returns {Object} returns this so that calls can be chained. - */ - stringDistance: function (s) { - if (s == null) { - return settings.string_distance; - } - - s = s.toLowerCase(); - if (s === 'internal' || s === 'damerau_levenshtein' || - s === 'levenstein' || s === 'jarowinkler' || s === 'ngram') { - settings.string_distance = s; - } - - return this; - }, - - /** -

    Sets the maximum edit distance candidate suggestions can have - in order to be considered as a suggestion.

    - - @member ejs.DirectSettingsMixin - @param {Integer} max An integer value greater than 0. - @returns {Object} returns this so that calls can be chained. - */ - maxEdits: function (max) { - if (max == null) { - return settings.max_edits; - } - - settings.max_edits = max; - return this; - }, - - /** -

    The factor that is used to multiply with the size in order - to inspect more candidate suggestions.

    - - @member ejs.DirectSettingsMixin - @param {Integer} max A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - maxInspections: function (max) { - if (max == null) { - return settings.max_inspections; - } - - settings.max_inspections = max; - return this; - }, - - /** -

    Sets a maximum threshold in number of documents a suggest text - token can exist in order to be corrected.

    - - @member ejs.DirectSettingsMixin - @param {Double} max A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - maxTermFreq: function (max) { - if (max == null) { - return settings.max_term_freq; - } - - settings.max_term_freq = max; - return this; - }, - - /** -

    Sets the number of minimal prefix characters that must match in - order be a candidate suggestion.

    - - @member ejs.DirectSettingsMixin - @param {Integer} len A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - prefixLen: function (len) { - if (len == null) { - return settings.prefix_len; - } - - settings.prefix_len = len; - return this; - }, - - /** -

    Sets the minimum length a suggest text term must have in order - to be corrected.

    - - @member ejs.DirectSettingsMixin - @param {Integer} len A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - minWordLen: function (len) { - if (len == null) { - return settings.min_word_len; - } - - settings.min_word_len = len; - return this; - }, - - /** -

    Sets a minimal threshold of the number of documents a suggested - term should appear in.

    - - @member ejs.DirectSettingsMixin - @param {Double} min A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - minDocFreq: function (min) { - if (min == null) { - return settings.min_doc_freq; - } - - settings.min_doc_freq = min; - return this; - }, - - /** -

    Retrieves the internal settings object. This is typically used by - internal API functions so use with caution.

    - - @member ejs.DirectSettingsMixin - @returns {String} returns this object's internal settings property. - */ - _self: function () { - return settings; - } - }; - }; - - /** - @class -

    PhraseSuggester extends the PhraseSuggester and suggests - entire corrected phrases instead of individual tokens. The individual - phrase suggestions are weighted based on ngram-langugage models. In practice - it will be able to make better decision about which tokens to pick based on - co-occurence and frequencies.

    - - @name ejs.PhraseSuggester - - @since elasticsearch 0.90 - - @desc -

    A suggester that suggests entire corrected phrases.

    - - @param {String} name The name which be used to refer to this suggester. - */ - ejs.PhraseSuggester = function (name) { - - /** - The internal suggest object. - @member ejs.PhraseSuggester - @property {Object} suggest - */ - var suggest = {}; - suggest[name] = {phrase: {}}; - - return { - - /** -

    Sets the text to get suggestions for. If not set, the global - suggestion text will be used.

    - - @member ejs.PhraseSuggester - @param {String} txt A string to get suggestions for. - @returns {Object} returns this so that calls can be chained. - */ - text: function (txt) { - if (txt == null) { - return suggest[name].text; - } - - suggest[name].text = txt; - return this; - }, - - /** -

    Sets analyzer used to analyze the suggest text.

    - - @member ejs.PhraseSuggester - @param {String} analyzer A valid analyzer name. - @returns {Object} returns this so that calls can be chained. - */ - analyzer: function (analyzer) { - if (analyzer == null) { - return suggest[name].phrase.analyzer; - } - - suggest[name].phrase.analyzer = analyzer; - return this; - }, - - /** -

    Sets the field used to generate suggestions from.

    - - @member ejs.PhraseSuggester - @param {String} field A valid field name. - @returns {Object} returns this so that calls can be chained. - */ - field: function (field) { - if (field == null) { - return suggest[name].phrase.field; - } - - suggest[name].phrase.field = field; - return this; - }, - - /** -

    Sets the number of suggestions returned for each token.

    - - @member ejs.PhraseSuggester - @param {Integer} s A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - size: function (s) { - if (s == null) { - return suggest[name].phrase.size; - } - - suggest[name].phrase.size = s; - return this; - }, - - /** -

    Sets the maximum number of suggestions to be retrieved from - each individual shard.

    - - @member ejs.PhraseSuggester - @param {Integer} s A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - shardSize: function (s) { - if (s == null) { - return suggest[name].phrase.shard_size; - } - - suggest[name].phrase.shard_size = s; - return this; - }, - - /** -

    Sets the likelihood of a term being a misspelled even if the - term exists in the dictionary. The default it 0.95 corresponding - to 5% or the real words are misspelled.

    - - @member ejs.PhraseSuggester - @param {Double} l A positive double value greater than 0.0. - @returns {Object} returns this so that calls can be chained. - */ - realWorldErrorLikelihood: function (l) { - if (l == null) { - return suggest[name].phrase.real_world_error_likelihood; - } - - suggest[name].phrase.real_world_error_likelihood = l; - return this; - }, - - /** -

    Sets the confidence level defines a factor applied to the input - phrases score which is used as a threshold for other suggest - candidates. Only candidates that score higher than the threshold - will be included in the result.

    - - @member ejs.PhraseSuggester - @param {Double} c A positive double value. - @returns {Object} returns this so that calls can be chained. - */ - confidence: function (c) { - if (c == null) { - return suggest[name].phrase.confidence; - } - - suggest[name].phrase.confidence = c; - return this; - }, - - /** -

    Sets the separator that is used to separate terms in the bigram - field. If not set the whitespce character is used as a - separator.

    - - @member ejs.PhraseSuggester - @param {String} sep A string separator. - @returns {Object} returns this so that calls can be chained. - */ - separator: function (sep) { - if (sep == null) { - return suggest[name].phrase.separator; - } - - suggest[name].phrase.separator = sep; - return this; - }, - - /** -

    Sets the maximum percentage of the terms that at most - considered to be misspellings in order to form a correction.

    - - @member ejs.PhraseSuggester - @param {Double} c A positive double value greater between 0 and 1. - @returns {Object} returns this so that calls can be chained. - */ - maxErrors: function (max) { - if (max == null) { - return suggest[name].phrase.max_errors; - } - - suggest[name].phrase.max_errors = max; - return this; - }, - - /** -

    Sets the max size of the n-grams (shingles) in the field. If - the field doesn't contain n-grams (shingles) this should be - omitted or set to 1.

    - - @member ejs.PhraseSuggester - @param {Integer} s A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - gramSize: function (s) { - if (s == null) { - return suggest[name].phrase.gram_size; - } - - suggest[name].phrase.gram_size = s; - return this; - }, - - /** -

    Forces the use of unigrams.

    - - @member ejs.PhraseSuggester - @param {Boolean} trueFalse True to force unigrams, false otherwise. - @returns {Object} returns this so that calls can be chained. - */ - forceUnigrams: function (trueFalse) { - if (trueFalse == null) { - return suggest[name].phrase.force_unigrams; - } - - suggest[name].phrase.force_unigrams = trueFalse; - return this; - }, - - /** -

    Sets the token limit.

    - - @member ejs.PhraseSuggester - @param {Integer} l A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - tokenLimit: function (l) { - if (l == null) { - return suggest[name].phrase.token_limit; - } - - suggest[name].phrase.token_limit = l; - return this; - }, - - /** -

    A smoothing model that takes the weighted mean of the unigrams, - bigrams and trigrams based on user supplied weights (lambdas). The - sum of tl, bl, and ul must equal 1.

    - - @member ejs.PhraseSuggester - @param {Double} tl A positive double value used for trigram weight. - @param {Double} bl A positive double value used for bigram weight. - @param {Double} ul A positive double value used for unigram weight. - @returns {Object} returns this so that calls can be chained. - */ - linearSmoothing: function (tl, bl, ul) { - if (arguments.length === 0) { - return suggest[name].phrase.smoothing; - } - - suggest[name].phrase.smoothing = { - linear: { - trigram_lambda: tl, - bigram_lambda: bl, - unigram_lambda: ul - } - }; - - return this; - }, - - /** -

    A smoothing model that uses an additive smoothing model where a - constant (typically 1.0 or smaller) is added to all counts to - balance weights, The default alpha is 0.5.

    - - @member ejs.PhraseSuggester - @param {Double} alpha A double value. - @returns {Object} returns this so that calls can be chained. - */ - laplaceSmoothing: function (alpha) { - if (alpha == null) { - return suggest[name].phrase.smoothing; - } - - suggest[name].phrase.smoothing = { - laplace: { - alpha: alpha - } - }; - - return this; - }, - - /** -

    A simple backoff model that backs off to lower order n-gram - models if the higher order count is 0 and discounts the lower - order n-gram model by a constant factor. The default discount is - 0.4.

    - - @member ejs.PhraseSuggester - @param {Double} discount A double value. - @returns {Object} returns this so that calls can be chained. - */ - stupidBackoffSmoothing: function (discount) { - if (discount == null) { - return suggest[name].phrase.smoothing; - } - - suggest[name].phrase.smoothing = { - stupid_backoff: { - discount: discount - } - }; - - return this; - }, - - /** -

    Enables highlighting of suggestions

    - - @member ejs.PhraseSuggester - @param {String} preTag A tag used at highlight start. - @param {String} postTag A tag used at the end of the highlight. - @returns {Object} returns this so that calls can be chained. - */ - highlight: function (preTag, postTag) { - if (arguments.length === 0) { - return suggest[name].phrase.highlight; - } - - suggest[name].phrase.highlight = { - pre_tag: preTag, - post_tag: postTag - }; - - return this; - }, - - /** - Adds a direct generator. If passed a single Generator - it is added to the list of existing generators. If passed an - array of Generators, they replace all existing generators. - - @member ejs.PhraseSuggester - @param {Generator || Array} oGenerator A valid Generator or - array of Generator objects. - @returns {Object} returns this so that calls can be chained. - */ - directGenerator: function (oGenerator) { - var i, len; - - if (suggest[name].phrase.direct_generator == null) { - suggest[name].phrase.direct_generator = []; - } - - if (oGenerator == null) { - return suggest[name].phrase.direct_generator; - } - - if (isGenerator(oGenerator)) { - suggest[name].phrase.direct_generator.push(oGenerator._self()); - } else if (isArray(oGenerator)) { - suggest[name].phrase.direct_generator = []; - for (i = 0, len = oGenerator.length; i < len; i++) { - if (!isGenerator(oGenerator[i])) { - throw new TypeError('Argument must be an array of Generators'); - } - - suggest[name].phrase.direct_generator.push(oGenerator[i]._self()); - } - } else { - throw new TypeError('Argument must be a Generator or array of Generators'); - } - - return this; - }, - - /** -

    Allows you to serialize this object into a JSON encoded string.

    - - @member ejs.PhraseSuggester - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(suggest); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.PhraseSuggester - @returns {String} the type of object - */ - _type: function () { - return 'suggest'; - }, - - /** -

    Retrieves the internal suggest object. This is typically used by - internal API functions so use with caution.

    - - @member ejs.PhraseSuggester - @returns {String} returns this object's internal suggest property. - */ - _self: function () { - return suggest; - } - }; - }; - - /** - @class -

    TermSuggester suggests terms based on edit distance. The provided suggest - text is analyzed before terms are suggested. The suggested terms are - provided per analyzed suggest text token. This leaves the suggest-selection - to the API consumer. For a higher level suggester, please use the - PhraseSuggester.

    - - @name ejs.TermSuggester - - @since elasticsearch 0.90 - - @desc -

    A suggester that suggests terms based on edit distance.

    - - @borrows ejs.DirectSettingsMixin.accuracy as accuracy - @borrows ejs.DirectSettingsMixin.suggestMode as suggestMode - @borrows ejs.DirectSettingsMixin.sort as sort - @borrows ejs.DirectSettingsMixin.stringDistance as stringDistance - @borrows ejs.DirectSettingsMixin.maxEdits as maxEdits - @borrows ejs.DirectSettingsMixin.maxInspections as maxInspections - @borrows ejs.DirectSettingsMixin.maxTermFreq as maxTermFreq - @borrows ejs.DirectSettingsMixin.prefixLength as prefixLength - @borrows ejs.DirectSettingsMixin.minWordLen as minWordLen - @borrows ejs.DirectSettingsMixin.minDocFreq as minDocFreq - - @param {String} name The name which be used to refer to this suggester. - */ - ejs.TermSuggester = function (name) { - - /** - The internal suggest object. - @member ejs.TermSuggester - @property {Object} suggest - */ - var suggest = {}, - - // common suggester options - _common = ejs.DirectSettingsMixin(); - - // setup correct term suggestor format - suggest[name] = {term: _common._self()}; - - return extend(_common, { - - /** -

    Sets the text to get suggestions for. If not set, the global - suggestion text will be used.

    - - @member ejs.TermSuggester - @param {String} txt A string to get suggestions for. - @returns {Object} returns this so that calls can be chained. - */ - text: function (txt) { - if (txt == null) { - return suggest[name].text; - } - - suggest[name].text = txt; - return this; - }, - - /** -

    Sets analyzer used to analyze the suggest text.

    - - @member ejs.TermSuggester - @param {String} analyzer A valid analyzer name. - @returns {Object} returns this so that calls can be chained. - */ - analyzer: function (analyzer) { - if (analyzer == null) { - return suggest[name].term.analyzer; - } - - suggest[name].term.analyzer = analyzer; - return this; - }, - - /** -

    Sets the field used to generate suggestions from.

    - - @member ejs.TermSuggester - @param {String} field A valid field name. - @returns {Object} returns this so that calls can be chained. - */ - field: function (field) { - if (field == null) { - return suggest[name].term.field; - } - - suggest[name].term.field = field; - return this; - }, - - /** -

    Sets the number of suggestions returned for each token.

    - - @member ejs.TermSuggester - @param {Integer} s A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - size: function (s) { - if (s == null) { - return suggest[name].term.size; - } - - suggest[name].term.size = s; - return this; - }, - - /** -

    Sets the maximum number of suggestions to be retrieved from - each individual shard.

    - - @member ejs.TermSuggester - @param {Integer} s A positive integer value. - @returns {Object} returns this so that calls can be chained. - */ - shardSize: function (s) { - if (s == null) { - return suggest[name].term.shard_size; - } - - suggest[name].term.shard_size = s; - return this; - }, - - /** -

    Allows you to serialize this object into a JSON encoded string.

    - - @member ejs.TermSuggester - @returns {String} returns this object as a serialized JSON string. - */ - toString: function () { - return JSON.stringify(suggest); - }, - - /** - The type of ejs object. For internal use only. - - @member ejs.TermSuggester - @returns {String} the type of object - */ - _type: function () { - return 'suggest'; - }, - - /** -

    Retrieves the internal suggest object. This is typically used by - internal API functions so use with caution.

    - - @member ejs.TermSuggester - @returns {String} returns this object's internal suggest property. - */ - _self: function () { - return suggest; - } - }); - }; - - // run in noConflict mode - ejs.noConflict = function () { - root.ejs = _ejs; - return this; - }; - -}).call(this); \ No newline at end of file diff --git a/tasks/options/requirejs.js b/tasks/options/requirejs.js index 41789be2da0..183561300c7 100644 --- a/tasks/options/requirejs.js +++ b/tasks/options/requirejs.js @@ -49,7 +49,6 @@ module.exports = function(config,grunt) { 'settings', 'bootstrap', 'modernizr', - 'elasticjs', 'timepicker', 'datepicker', 'underscore',