diff --git a/.idea/dataSources.ids b/.idea/dataSources.ids
index 1de6252e..ed70511d 100644
--- a/.idea/dataSources.ids
+++ b/.idea/dataSources.ids
@@ -3573,6 +3573,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml
index a0599aaa..a8755ed6 100644
--- a/.idea/dataSources.xml
+++ b/.idea/dataSources.xml
@@ -1,6 +1,6 @@
-
+
mysql
true
diff --git a/.idea/dictionaries/exodus4d.xml b/.idea/dictionaries/exodus4d.xml
index 037e19bf..4a428934 100644
--- a/.idea/dictionaries/exodus4d.xml
+++ b/.idea/dictionaries/exodus4d.xml
@@ -18,6 +18,7 @@
killmail
mouseover
nonblock
+ onerror
pnotify
raphaƫl
revalidate
diff --git a/app/app/cortex.php b/app/app/cortex.php
new file mode 100644
index 00000000..6b5cabcb
--- /dev/null
+++ b/app/app/cortex.php
@@ -0,0 +1,54 @@
+set('AUTOLOAD', $f3->get('AUTOLOAD').';app/cortex/');
+ $f3->set('QUIET', false);
+
+ $dbs = array(
+ 'sql' => new \DB\SQL('mysql:host=localhost;port=3306;dbname=fatfree', 'fatfree', ''),
+// 'sql-sqlite' => new \DB\SQL('sqlite:data/sqlite.db'),
+// 'sql-pgsql' => new \DB\SQL('pgsql:host=localhost;dbname=fatfree', 'fatfree', 'fatfree'),
+ 'jig' => new \DB\Jig('data/'),
+ 'mongo' => new \DB\Mongo('mongodb://localhost:27017', 'testdb'),
+// 'sqlsrv2012' => new \DB\SQL('sqlsrv:SERVER=LOCALHOST\SQLEXPRESS2012;Database=fatfree','fatfree', 'fatfree'),
+// 'sqlsrv2008' => new \DB\SQL('sqlsrv:SERVER=LOCALHOST\SQLEXPRESS2008;Database=fatfree','fatfree', 'fatfree'),
+ );
+ $results = array();
+
+ // Test Syntax
+ foreach ($dbs as $type => $db) {
+ $test = new \Test_Syntax();
+ $results = array_merge((array) $results, (array) $test->run($db, $type));
+ }
+
+ // Test Relations
+ foreach ($dbs as $type => $db) {
+ $f3->set('DB',$db);
+ $test = new \Test_Relation();
+ $results = array_merge((array) $results, (array) $test->run($db, $type));
+ }
+
+ // Test Filter
+ foreach ($dbs as $type => $db) {
+ $f3->set('DB',$db);
+ $test = new \Test_Filter();
+ $results = array_merge((array) $results, (array) $test->run($db, $type));
+ }
+
+ // Further Common Tests
+ if (isset($dbs['sql'])) {
+ $test = new \Test_Common();
+ $f3->set('DB', $dbs['sql']);
+ $results = array_merge((array) $results, (array) $test->run());
+ }
+ $f3->set('results', $results);
+ }
+
+
+}
\ No newline at end of file
diff --git a/app/app/cortex/authormodel.php b/app/app/cortex/authormodel.php
new file mode 100644
index 00000000..0aa19264
--- /dev/null
+++ b/app/app/cortex/authormodel.php
@@ -0,0 +1,27 @@
+ array(
+ 'type' => \DB\SQL\Schema::DT_VARCHAR256
+ ),
+ 'mail' => array(
+ 'type' => \DB\SQL\Schema::DT_VARCHAR256
+ ),
+ 'website' => array(
+ 'type' => \DB\SQL\Schema::DT_VARCHAR256
+ ),
+ 'news' => array(
+ 'has-many' => array('\NewsModel','author'),
+ ),
+ 'profile' => array(
+ 'has-one' => array('\ProfileModel','author'),
+ ),
+ ),
+// $primary = 'aid',
+ $table = 'author',
+ $db = 'DB';
+
+}
diff --git a/app/app/cortex/newsmodel.php b/app/app/cortex/newsmodel.php
new file mode 100644
index 00000000..33b6ccff
--- /dev/null
+++ b/app/app/cortex/newsmodel.php
@@ -0,0 +1,28 @@
+ array(
+ 'type' => \DB\SQL\Schema::DT_VARCHAR128
+ ),
+ 'text' => array(
+ 'type' => \DB\SQL\Schema::DT_TEXT
+ ),
+ 'author' => array(
+ 'belongs-to-one' => '\AuthorModel',
+ ),
+ 'tags' => array(
+ 'belongs-to-many' => '\TagModel',
+ ),
+ 'tags2' => array(
+ 'has-many' => array('\TagModel','news','news_tags'),
+// 'has-many' => array('\TagModel','news'),
+ ),
+ ),
+// $primary='nid',
+ $table = 'news',
+ $db = 'DB';
+
+}
\ No newline at end of file
diff --git a/app/app/cortex/profilemodel.php b/app/app/cortex/profilemodel.php
new file mode 100644
index 00000000..e749cf33
--- /dev/null
+++ b/app/app/cortex/profilemodel.php
@@ -0,0 +1,21 @@
+ array(
+ 'type' => \DB\SQL\Schema::DT_TEXT
+ ),
+ 'image' => array(
+ 'type' => \DB\SQL\Schema::DT_VARCHAR256
+ ),
+ 'author' => array(
+ 'belongs-to-one' => '\AuthorModel'
+ )
+ ),
+// $primary = 'profile_id',
+ $table = 'profile',
+ $db = 'DB';
+
+}
\ No newline at end of file
diff --git a/app/app/cortex/tagmodel.php b/app/app/cortex/tagmodel.php
new file mode 100644
index 00000000..668bd34e
--- /dev/null
+++ b/app/app/cortex/tagmodel.php
@@ -0,0 +1,18 @@
+ array(
+ 'type' => \DB\SQL\Schema::DT_VARCHAR128
+ ),
+ 'news' => array(
+ 'has-many' => array('\NewsModel','tags2','news_tags'),
+ ),
+ ),
+// $primary = 'tid',
+ $table = 'tags',
+ $db = 'DB';
+
+}
\ No newline at end of file
diff --git a/app/app/cortex/test_common.php b/app/app/cortex/test_common.php
new file mode 100644
index 00000000..bdcc7477
--- /dev/null
+++ b/app/app/cortex/test_common.php
@@ -0,0 +1,125 @@
+load();
+
+ $dummy = array(
+ 'title'=>'copy test',
+ 'text'=>'Lorem ipsum dolor sit amet.',
+ 'author'=>1,
+ 'tags'=>array(3)
+ );
+ $f3->set('record1', $dummy);
+ $news->copyto('record2');
+
+ $test->expect(
+ $f3->exists('record2'),
+ 'copyto: raw record copied to hive'
+ );
+
+ $news->reset();
+
+ $news->copyfrom('record1');
+
+ $test->expect(
+ $news->title = 'copy test' &&
+ $news->text = 'Lorem ipsum dolor sit amet.',
+ 'copyfrom: hydrate from hive key'
+ );
+ $test->expect(
+ $news->author instanceof AuthorModel
+ && !$news->author->dry() &&
+ $news->tags instanceof \DB\CortexCollection,
+ 'copyfrom: relations hydrated successful'
+ );
+
+ $test->expect(
+ $news->get('author',true) == 1,
+ 'get raw data from relational field'
+ );
+
+ $news->reset();
+ $news->copyfrom('record2','title;author');
+
+ $test->expect(
+ $news->title = 'Responsive Images' &&
+ $news->get('author',true) == 2 &&
+ $news->text == NULL,
+ 'copyfrom: limit fields with split-able string'
+ );
+
+ $news->reset();
+ $news->copyfrom('record2',array('title'));
+
+ $test->expect(
+ $news->title = 'Responsive Images' && $news->text == NULL,
+ 'copyfrom: limit fields by array'
+ );
+
+ $news->reset();
+ $news->copyfrom($dummy,function($fields) {
+ return array_intersect_key($fields,array_flip(array('title')));
+ });
+
+ $test->expect(
+ $news->title = 'copy test',
+ 'copyfrom: copy from array instead of hive key'
+ );
+
+ $test->expect(
+ $news->title = 'copy test' && $news->text == NULL,
+ 'copyfrom: limit fields by callback function'
+ );
+
+ $all = $news->find();
+ $allTitle = $all->getAll('title');
+
+ $test->expect(
+ count($allTitle) == 3 &&
+ $allTitle[0] == 'Responsive Images' &&
+ $allTitle[1] == 'CSS3 Showcase' &&
+ $allTitle[2] == 'Touchable Interfaces',
+ 'collection getAll returns all values of selected field'
+ );
+
+ $newsByID = $all->getBy('_id');
+ $test->expect(
+ array_keys($newsByID) == array(1,2,3),
+ 'collection getBy sorts by given field'
+ );
+
+ $newsByAuthorID = $all->getBy('author',true);
+ $test->expect(
+ array_keys($newsByAuthorID) == array(2, 1) &&
+ count($newsByAuthorID[2]) == 2 &&
+ count($newsByAuthorID[1]) == 1,
+ 'collection getBy nested sort by author'
+ );
+
+ $allTitle = array();
+ foreach($all as $record)
+ $allTitle[] = $record->title;
+
+ $test->expect(
+ count($allTitle) == 3 &&
+ $allTitle[0] == 'Responsive Images' &&
+ $allTitle[1] == 'CSS3 Showcase' &&
+ $allTitle[2] == 'Touchable Interfaces',
+ 'collection is traversable'
+ );
+
+
+ ///////////////////////////////////
+ return $test->results();
+ }
+}
\ No newline at end of file
diff --git a/app/app/cortex/test_filter.php b/app/app/cortex/test_filter.php
new file mode 100644
index 00000000..9047cfea
--- /dev/null
+++ b/app/app/cortex/test_filter.php
@@ -0,0 +1,302 @@
+find()->getAll('_id');
+ $all = $news->find();
+ $newsIDs = $all->getAll('_id');
+ $profileIDs = $profile->find()->getAll('_id');
+ $tagIDs = $tag->find()->getAll('_id');
+
+ // add another relation
+ $news->load(array('title = ?','CSS3 Showcase'));
+ $news->author = $author->load(array($author_pk.' = ?',$authorIDs[0]));
+ $news->save();
+ $news->reset();
+ $author->reset();
+
+
+ // has-filter on belongs-to relation
+ ///////////////////////////////////
+
+ $result = $author->has('news', array('title like ?', '%Image%'))->afind();
+
+ $test->expect(
+ count($result) == 1 &&
+ $result[0]['name'] == 'Johnny English',
+ $type.': has filter on many-to-one field'
+ );
+ $test->expect(
+ count($result[0]['news']) == 2 &&
+ $result[0]['news'][0]['title'] == 'Responsive Images' &&
+ $result[0]['news'][1]['title'] == 'CSS3 Showcase',
+ $type.': has filter does not prune relation set'
+ );
+
+ $result = $news->has('author', array('name = ?', 'Johnny English'))->afind();
+ $test->expect(
+ count($result) == 2 && // has 2 news
+ $result[0]['title'] == 'Responsive Images' &&
+ $result[1]['title'] == 'CSS3 Showcase',
+ $type.': has filter on one-to-many field'
+ );
+
+ // add another profile
+ $profile->message = 'Beam me up, Scotty!';
+ $profile->author = $authorIDs[2];
+ $profile->save();
+ $profile->reset();
+
+ $result = $author->has('profile',array('message LIKE ?','%Scotty%'))->afind();
+ $test->expect(
+ count($result) == 1 &&
+ $result[0]['name'] == 'James T. Kirk' &&
+ $result[0]['profile']['message'] == 'Beam me up, Scotty!',
+ $type.': has filter on one-to-one field'
+ );
+
+ $result = $profile->has('author',array('name LIKE ?','%Kirk%'))->afind();
+ $test->expect(
+ count($result) == 1 &&
+ $result[0]['message'] == 'Beam me up, Scotty!' &&
+ $result[0]['author']['name'] == 'James T. Kirk',
+ $type.': has filter on one-to-one field, inverse'
+ );
+
+ // add mm tags
+ $news->load(array('title = ?','Responsive Images'));
+ $news->tags2 = array($tagIDs[0],$tagIDs[1]);
+ $news->save();
+ $news->load(array('title = ?','CSS3 Showcase'));
+ $news->tags2 = array($tagIDs[1],$tagIDs[2]);
+ $news->save();
+ $news->reset();
+
+ $result = $news->has('tags2',array('title like ?','%Design%'))->find();
+ $test->expect(
+ count($result) == 1 &&
+ $result[0]['title'] == 'Responsive Images',
+ $type.': has filter on many-to-many field'
+ );
+
+ $result = $news->has('tags2',array('title = ?','Responsive'))->find();
+ $test->expect(
+ count($result) == 2 &&
+ $result[0]['title'] == 'Responsive Images' &&
+ $result[1]['title'] == 'CSS3 Showcase',
+ $type.': has filter on many-to-many field, additional test'
+ );
+
+
+ $result = $tag->has('news',array('title = ?','Responsive Images'))->find();
+ $test->expect(
+ count($result) == 2 &&
+ $result[0]['title'] == 'Web Design' &&
+ $result[1]['title'] == 'Responsive',
+ $type.': has filter on many-to-many field, inverse'
+ );
+
+ // add another tag
+ $news->load(array('title = ?', 'Touchable Interfaces'));
+ $news->tags2 = array($tagIDs[1]);
+ $news->save();
+ $news->reset();
+
+ $tag->has('news',array('text LIKE ? and title LIKE ?', '%Lorem%', '%Interface%'));
+ $result = $tag->find();
+ $test->expect(
+ count($result) == 1 &&
+ $result[0]['title'] == 'Responsive',
+ $type.': has filter with multiple conditions'
+ );
+
+ $news->has('tags2', array('title = ? OR title = ?', 'Usability', 'Web Design'));
+ $result = $news->afind(array('text = ?', 'Lorem Ipsun'));
+ $test->expect(
+ count($result) == 1 &&
+ $result[0]['title'] == 'Responsive Images',
+ $type.': find with condition and has filter'
+ );
+
+ $news->load(array('title = ?', 'Responsive Images'));
+ $news->author = $authorIDs[1];
+ $news->save();
+ $news->reset();
+
+
+ $news->has('tags2', array('title = ? OR title = ?', 'Usability', 'Web Design'));
+ $news->has('author', array('name = ?', 'Ridley Scott'));
+ $result = $news->afind();
+ $test->expect(
+ count($result) == 1 &&
+ $result[0]['title'] == 'Responsive Images',
+ $type.': find with multiple has filters on different relations'
+ );
+
+ // add another news to author 2
+ $news->load(array($news_pk.' = ?',$newsIDs[2]));
+ $news->author = $authorIDs[1];
+ $news->save();
+
+ $news->reset();
+ $news->has('author', array('name = ?', 'Ridley Scott'));
+ $news->load();
+ $res = array();
+ while (!$news->dry()) {
+ $res[] = $news->title;
+ $news->next();
+ }
+
+ $test->expect(
+ count($res) == 2 &&
+ $res[0] == 'Responsive Images' &&
+ $res[1] == 'Touchable Interfaces'
+ ,
+ $type.': has filter in load context'
+ );
+
+ $news->reset();
+ $news->fields(array('title'));
+ $news->load();
+
+ $test->expect(
+ !empty($news->title) &&
+ empty($news->author) &&
+ empty($news->text) &&
+ empty($news->tags) &&
+ empty($news->tags2),
+ $type.': use a whitelist to restrict fields'
+ );
+
+ unset($news);
+ $news = new \NewsModel();
+
+ $news->fields(array('title','tags','tags2','author'),true);
+ $news->load();
+
+ $test->expect(
+ empty($news->title) &&
+ empty($news->author) &&
+ !empty($news->text) &&
+ empty($news->tags) &&
+ empty($news->tags2),
+ $type.': use a blacklist to restrict fields'
+ );
+
+ unset($news);
+ $news = new \NewsModel();
+
+ $news->fields(array('tags.title'));
+ $news->load();
+
+ $test->expect(
+ !empty($news->tags[0]->title) &&
+ empty($news->tags[0]->news),
+ $type.': set restricted fields to related mappers'
+ );
+
+ $news->filter('tags2',null,array('order'=>'title ASC'));
+ $news->load(array('title = ?','Responsive Images'));
+ $test->expect(
+ $news->tags2[0]->title == 'Responsive' &&
+ $news->tags2[1]->title == 'Web Design',
+ $type.': filter with sorting of related records'
+ );
+
+ // get all tags sorted by their usage in news articles
+ $tag->reset();
+ $tag->countRel('news');
+ $result = $tag->find(null,array('order'=>'count_news DESC, title'))->castAll(0);
+
+ $test->expect(
+ $result[0]['title'] == 'Responsive' &&
+ $result[0]['count_news'] == 3 &&
+ $result[1]['title'] == 'Usability' &&
+ $result[1]['count_news'] == 1 &&
+ $result[2]['title'] == 'Web Design' &&
+ $result[2]['count_news'] == 1,
+ $type.': count and sort on many-to-many relation'
+ );
+
+ // get all authors sorted by the amount of news they have written
+ $author->reset();
+ $author->countRel('news');
+ $result = $author->find(null,array('order'=>'count_news DESC'))->castAll(0);
+
+ $test->expect(
+ $result[0]['name'] == 'Ridley Scott' &&
+ $result[0]['count_news'] == 2 &&
+ $result[1]['name'] == 'Johnny English' &&
+ $result[1]['count_news'] == 1 &&
+ $result[2]['name'] == 'James T. Kirk' &&
+ $result[2]['count_news'] == null,
+ $type.': count and sort on one-to-many relation'
+ );
+
+ $tag->reset();
+ $tag->countRel('news');
+ $result = $tag->find(null,array('order'=>'count_news DESC, title DESC','limit'=>1,'offset'=>1))->castAll(0);
+
+ $test->expect(
+ $result[0]['title'] == 'Web Design' &&
+ $result[0]['count_news'] == 1,
+ $type.': apply limit and offset on aggregated collection'
+ );
+
+
+ $author->reset();
+ $author->countRel('news');
+ $author->has('news',array('text like ?','%Lorem%'));
+ $result = $author->find()->castAll(0);
+
+ $test->expect(
+ count($result) == 1 &&
+ $result[0]['name'] == 'Ridley Scott' &&
+ $result[0]['count_news'] == 2 ,
+ $type.': has-filter and 1:M relation counter'
+ );
+
+
+ $author->reset();
+ $id = $author->load()->next()->_id;
+ $tag->reset();
+ $tag->countRel('news');
+ $tag->has('news',array('author = ?',$id));
+ $result = $tag->find(null,array('order'=>'count_news desc'))->castAll(0);
+
+ $test->expect(
+ count($result) == 2 &&
+ $result[0]['title'] == 'Responsive' &&
+ $result[0]['count_news'] == 3 &&
+ $result[1]['title'] == 'Web Design' &&
+ $result[1]['count_news'] == 1,
+ $type.': has-filter and M:M relation counter'
+ );
+
+ ///////////////////////////////////
+ return $test->results();
+ }
+
+}
\ No newline at end of file
diff --git a/app/app/cortex/test_relation.php b/app/app/cortex/test_relation.php
new file mode 100644
index 00000000..08d319ab
--- /dev/null
+++ b/app/app/cortex/test_relation.php
@@ -0,0 +1,335 @@
+cast();
+ unset($row['_id']);
+ unset($row['id']);
+ unset($row['aid']);
+ unset($row['uid']);
+ unset($row['nid']);
+ unset($row['tid']);
+ unset($row['pid']);
+ unset($row['profile_id']);
+ foreach ($row as $col => $val) {
+ if (empty($val) || is_null($val))
+ unset($row[$col]);
+ }
+ $out[] = $row;
+ }
+ return $out;
+ }
+
+ function run($db,$type)
+ {
+ $test = new \Test();
+
+ // clear existing data
+ \AuthorModel::setdown();
+ \TagModel::setdown();
+ \NewsModel::setdown();
+ \ProfileModel::setdown();
+
+ // setup models
+ \AuthorModel::setup();
+ \TagModel::setup();
+ \NewsModel::setup();
+ \ProfileModel::setup();
+
+ // setup Author
+ ///////////////////////////////////
+ $author_id = array();
+
+ $author = new \AuthorModel();
+ $ac=$author::resolveConfiguration();
+ $author_pk = (is_int(strpos($type,'sql'))?$ac['primary']:'_id');
+
+ $author->name = 'Johnny English';
+ $author->save();
+ $author_id[] = $author->_id;
+ $author->reset();
+ $author->name = 'Ridley Scott';
+ $author->save();
+ $author_id[] = $author->_id;
+ $author->reset();
+ $author->name = 'James T. Kirk';
+ $author->save();
+ $author_id[] = $author->_id;
+ $author->reset();
+
+ $allauthors = $author->find()->castAll();
+ $allauthors = $this->getResult($allauthors);
+ $test->expect(
+ json_encode($allauthors) ==
+ '[{"name":"Johnny English"},{"name":"Ridley Scott"},{"name":"James T. Kirk"}]',
+ $type.': all AuthorModel items created'
+ );
+
+ // setup Tags
+ ///////////////////////////////////
+ $tag_id = array();
+
+ $tag = new \TagModel();
+ $tc=$tag::resolveConfiguration();
+ $tag_pk = (is_int(strpos($type,'sql'))?$tc['primary']:'_id');
+
+ $tag->title = 'Web Design';
+ $tag->save();
+ $tag_id[] = $tag->_id;
+ $tag->reset();
+ $tag->title = 'Responsive';
+ $tag->save();
+ $tag_id[] = $tag->_id;
+ $tag->reset();
+ $tag->title = 'Usability';
+ $tag->save();
+ $tag_id[] = $tag->_id;
+ $tag->reset();
+
+ $allTags = $this->getResult($tag->find());
+ $test->expect(
+ json_encode($allTags) ==
+ '[{"title":"Web Design"},{"title":"Responsive"},{"title":"Usability"}]',
+ $type.': all TagModel items created'
+ );
+
+ // setup News
+ ///////////////////////////////////
+ $news_id = array();
+
+ $news = new \NewsModel();
+ $nc=$news::resolveConfiguration();
+ $news_pk = (is_int(strpos($type,'sql'))?$nc['primary']:'_id');
+
+ $news->title = 'Responsive Images';
+ $news->text = 'Lorem Ipsun';
+ $news->save();
+ $news_id[] = $news->_id;
+ $news->reset();
+ $news->title = 'CSS3 Showcase';
+ $news->text = 'News Text 2';
+ $news->save();
+ $news_id[] = $news->_id;
+ $news->reset();
+ $news->title = 'Touchable Interfaces';
+ $news->text = 'Lorem Foo';
+ $news->save();
+ $news_id[] = $news->_id;
+ $news->reset();
+
+ $allnews = $this->getResult($news->find());
+ $test->expect(
+ json_encode($allnews) ==
+ '[{"title":"Responsive Images","text":"Lorem Ipsun"},{"title":"CSS3 Showcase","text":"News Text 2"},{"title":"Touchable Interfaces","text":"Lorem Foo"}]',
+ $type.': all NewsModel items created'
+ );
+
+ // belongs-to author relation
+ ///////////////////////////////////
+
+ $author->load();
+ $news->load(array($news_pk.' = ?',$news_id[0]));
+ $news->author = $author;
+ $news->save();
+ $news->reset();
+ $news->load(array($news_pk.' = ?', $news_id[0]));
+ $test->expect(
+ $news->author->name == 'Johnny English',
+ $type.': belongs-to-one: author relation created'
+ );
+
+ $news->author = NULL;
+ $news->save();
+ $news->reset();
+ $news->load(array($news_pk.' = ?', $news_id[0]));
+ $test->expect(
+ empty($news->author),
+ $type.': belongs-to-one: author relation released'
+ );
+
+ $news->author = $author->_id;
+ $news->save();
+ $news->reset();
+ $news->load(array($news_pk.' = ?', $news_id[0]));
+ $test->expect(
+ $news->author->name == 'Johnny English',
+ $type.': belongs-to-one: relation created by raw id'
+ );
+
+ // belongs-to-many tag relation
+ ///////////////////////////////////
+
+ $tag1 = new \TagModel();
+ $tag1->load(array($tag_pk.' = ?', $tag_id[0]));
+ $tag2 = new \TagModel();
+ $tag2->load(array($tag_pk.' = ?', $tag_id[1]));
+ $news->tags = array($tag1,$tag2);
+ $news->save();
+ $news->reset();
+ $news->load(array($news_pk.' = ?', $news_id[0]));
+ $test->expect(
+ $news->tags[0]->title == 'Web Design' && $news->tags[1]->title == 'Responsive',
+ $type.': belongs-to-many: relations created with array of mapper objects'
+ );
+
+ $news->reset();
+ $news->load(array($news_pk.' = ?', $news_id[1]));
+ $news->tags = array($tag_id[1],$tag_id[2]);
+ $news->save();
+ $news->reset();
+ $news->load(array($news_pk.' = ?', $news_id[1]));
+ $test->expect(
+ $news->tags[0]->title == 'Responsive' && $news->tags[1]->title == 'Usability',
+ $type.': belongs-to-many: relations created with array of IDs'
+ );
+
+ $news->tags = null;
+ $news->save();
+ $news->reset();
+ $news->load(array($news_pk.' = ?', $news_id[1]));
+ $test->expect(
+ empty($news->tags),
+ $type.': belongs-to-many: relations released'
+ );
+
+ $tag->reset();
+ $news->load(array($news_pk.' = ?', $news_id[1]));
+ $news->tags = $tag->load(array($tag_pk.' != ?',$tag_id[0]));
+ $news->save();
+ $news->reset();
+ $news->load(array($news_pk.' = ?', $news_id[1]));
+ $test->expect(
+ $news->tags[0]->title == 'Responsive' && $news->tags[1]->title == 'Usability',
+ $type.': belongs-to-many: relations created with hydrated mapper'
+ );
+
+
+ $news->reset();
+ $tag->reset();
+ $news->load(array($news_pk.' = ?', $news_id[2]));
+ $news->tags = $tag_id[0].';'.$tag_id[2];
+ $news->save();
+ $news->reset();
+ $news->load(array($news_pk.' = ?', $news_id[2]));
+ $test->expect(
+ $news->tags[0]->title == 'Web Design' && $news->tags[1]->title == 'Usability',
+ $type.': belongs-to-many: relations created with split-able string'
+ );
+ $test->expect(
+ is_object($news->tags) && $news->tags instanceof \DB\CortexCollection,
+ $type.': belongs-to-many: result is collection'
+ );
+
+
+ // has-one relation
+ ///////////////////////////////////
+ $profile = new ProfileModel();
+ $pc=$profile::resolveConfiguration();
+ $profile_pk = (is_int(strpos($type,'sql'))?$pc['primary']:'_id');
+
+ $profile->message = 'Hello World';
+ $profile->author = $author->load(array($author_pk.' = ?',$author_id[0]));
+ $profile->save();
+ $profile_id = $profile->_id;
+ $profile->reset();
+ $author->reset();
+ $author->load(array($author_pk.' = ?', $author_id[0]));
+ $profile->load(array($profile_pk.' = ?', $profile_id));
+ $test->expect(
+ $author->profile->message == 'Hello World' &&
+ $profile->author->name == "Johnny English",
+ $type.': has-one: relation assigned'
+ );
+
+ $profile->reset();
+ $profile->message = 'I\'m feeling lucky';
+ $profile->image = 'lolcat.jpg';
+ $author->reset();
+ $author->load(array($author_pk.' = ?',$author_id[1]));
+ $author->profile = $profile;
+ $author->save();
+ $profile->reset();
+ $author->reset();
+ $author->load(array($author_pk.' = ?', $author_id[1]));
+ $test->expect(
+ $author->profile->message == 'I\'m feeling lucky',
+ $type.': has-one: inverse relation'
+ );
+
+
+ // has-many relation
+ ///////////////////////////////////
+
+ $author->load(array($author_pk.' = ?', $author_id[0]));
+ $result = $this->getResult($author->news);
+ $test->expect(
+ $result[0]['title'] == "Responsive Images" &&
+ $result[0]['tags'][0]['title'] == 'Web Design' &&
+ $result[0]['tags'][1]['title'] == 'Responsive',
+ $type.': has-many inverse relation'
+ );
+
+ // many to many relation
+ ///////////////////////////////////
+
+ $news->load(array($news_pk.' = ?',$news_id[0]));
+ $news->tags2 = array($tag_id[0],$tag_id[1]);
+ $news->save();
+ $news->reset();
+ $news->load(array($news_pk.' = ?',$news_id[0]));
+ $test->expect(
+ $news->tags2[0]['title'] == 'Web Design' &&
+ $news->tags2[1]['title'] == 'Responsive',
+ $type.': many-to-many relation created'
+ );
+
+ $test->expect(
+ is_object($news->tags2) && $news->tags2 instanceof \DB\CortexCollection,
+ $type.': many-to-many: result is collection'
+ );
+
+ $news->load(array($news_pk.' = ?', $news_id[0]));
+ $news->tags2 = NULL;
+ $news->save();
+ $news->reset();
+ $news->load(array($news_pk.' = ?', $news_id[0]));
+ $test->expect(
+ is_null($news->tags2),
+ $type.': many-to-many relation released'
+ );
+
+ $all = $news->find();
+ $test->expect(
+ $all[1]->tags2 === NULL
+ && $all[2]->author === NULL,
+ $type.': empty relations are NULL'
+ );
+
+ $arr = $news->cast();
+ $test->expect(
+ is_array($arr['tags']),
+ $type.': collection becomes array in casted model'
+ );
+
+ if ($type == 'mongo') {
+ $test->expect(
+ is_string($arr['_id']),
+ $type.': id becomes string in casted model'
+ );
+ }
+
+ ///////////////////////////////////
+ return $test->results();
+ }
+
+}
\ No newline at end of file
diff --git a/app/app/cortex/test_syntax.php b/app/app/cortex/test_syntax.php
new file mode 100644
index 00000000..9efa7e28
--- /dev/null
+++ b/app/app/cortex/test_syntax.php
@@ -0,0 +1,364 @@
+ array('type' => \DB\SQL\Schema::DT_TEXT),
+ 'num1' => array('type' => \DB\SQL\Schema::DT_INT4),
+ 'num2' => array('type' => \DB\SQL\Schema::DT_INT4),
+ );
+ \DB\Cortex::setup($db, $tname, $fields);
+
+ // adding some testing data
+ $cx = new \DB\Cortex($db, $tname);
+ $cx->title = 'bar1';
+ $cx->save();
+ $cx->reset();
+
+ $cx->title = 'baz2';
+ $cx->num1 = 1;
+ $cx->save();
+ $cx->reset();
+
+ $cx->title = 'foo3';
+ $cx->num1 = 4;
+ $cx->save();
+ $cx->reset();
+
+ $cx->title = 'foo4';
+ $cx->num1 = 3;
+ $cx->save();
+ $cx->reset();
+
+ $cx->title = 'foo5';
+ $cx->num1 = 3;
+ $cx->num2 = 5;
+ $cx->save();
+ $cx->reset();
+
+ $cx->title = 'foo6';
+ $cx->num1 = 3;
+ $cx->num2 = 1;
+ $cx->save();
+ $cx->reset();
+
+ $cx->title = 'foo7';
+ $cx->num1 = 3;
+ $cx->num2 = 10;
+ $cx->save();
+ $cx->reset();
+
+ $cx->title = 'foo8';
+ $cx->num1 = 5;
+ $cx->save();
+ $cx->reset();
+
+ $cx->title = 'foo9';
+ $cx->num1 = 8;
+ $cx->save();
+ $cx->reset();
+
+ $result = $this->getResult($cx->find());
+
+ $expected = array(
+ 0 => array(
+ 'title' => 'bar1',
+ ),
+ 1 => array(
+ 'num1' => 1,
+ 'title' => 'baz2',
+ ),
+ 2 => array(
+ 'num1' => 4,
+ 'title' => 'foo3',
+ ),
+ 3 => array(
+ 'num1' => 3,
+ 'title' => 'foo4',
+ ),
+ 4 => array(
+ 'num1' => 3,
+ 'num2' => 5,
+ 'title' => 'foo5',
+ ),
+ 5 => array(
+ 'num1' => 3,
+ 'num2' => 1,
+ 'title' => 'foo6',
+ ),
+ 6 => array(
+ 'num1' => 3,
+ 'num2' => 10,
+ 'title' => 'foo7',
+ ),
+ 7 => array(
+ 'num1' => 5,
+ 'title' => 'foo8',
+ ),
+ 8 => array(
+ 'num1' => 8,
+ 'title' => 'foo9',
+ ),
+ );
+
+ $test->expect(
+ json_encode($result) == json_encode($expected),
+ $type.': init mapper, adding records'
+ );
+
+ // operator =
+ $result = $this->getResult($cx->find(array('title = ?', 'foo7')));
+ $expected = array(
+ 0 => array(
+ 'num1' => 3,
+ 'num2' => 10,
+ 'title' => 'foo7',
+ ),
+ );
+ $test->expect(
+ json_encode($result) == json_encode($expected),
+ $type.': operator check: ='
+ );
+
+ // operator >
+ $result = $this->getResult($cx->find(array('num1 > ?', 4)));
+ $expected = array(
+ 0 => array(
+ 'num1' => 5,
+ 'title' => 'foo8',
+ ),
+ 1 => array(
+ 'num1' => 8,
+ 'title' => 'foo9',
+ ),
+ );
+ $test->expect(
+ json_encode($result) == json_encode($expected),
+ $type.': operator check: >'
+ );
+
+ // operator >=
+ $result = $this->getResult($cx->find(array('num1 >= ?', 5)));
+ $test->expect(
+ json_encode($result) == json_encode($expected),
+ $type.': operator check: >='
+ );
+
+ // operator <
+ $result = $this->getResult($cx->find(array('num2 < ?', 2)));
+ $expected = array(
+ 0 => array(
+ 'num1' => 3,
+ 'num2' => 1,
+ 'title' => 'foo6',
+ ),
+ );
+ $test->expect(
+ json_encode($result) == json_encode($expected),
+ $type.': operator check: <'
+ );
+
+ // operator <=
+ $result = $this->getResult($cx->find(array('num2 <= ?', 1)));
+ $test->expect(
+ json_encode($result) == json_encode($expected),
+ $type.': operator check: <='
+ );
+
+ // operator without binding
+ $result = $this->getResult($cx->find(array('num1 > 4')));
+ $expected = array(
+ 0 => array(
+ 'num1' => 5,
+ 'title' => 'foo8',
+ ),
+ 1 => array(
+ 'num1' => 8,
+ 'title' => 'foo9',
+ ),
+ );
+ $test->expect(
+ json_encode($result) == json_encode($expected),
+ $type.': operator without binding'
+ );
+
+ // field comparision
+ $result = $this->getResult($cx->find(
+ array('num2 > num1', 1)));
+ $expected = array(
+ 0 => array(
+ 'num1' => 3,
+ 'num2' => 5,
+ 'title' => 'foo5',
+ ),
+ 1 => array(
+ 'num1' => 3,
+ 'num2' => 10,
+ 'title' => 'foo7',
+ ),
+ );
+ $test->expect(
+ json_encode($result) == json_encode($expected),
+ $type.': check field comparision'
+ );
+
+ // lookahead search
+ $result = $this->getResult($cx->find(array('title like ?', '%o6')));
+ $expected = array(
+ 0 => array(
+ 'num1' => 3,
+ 'num2' => 1,
+ 'title' => 'foo6',
+ ),
+ );
+ $test->expect(
+ json_encode($result) == json_encode($expected),
+ $type.': lookahead search'
+ );
+
+ // lookbehind search
+ $result = $this->getResult($cx->find(array('title like ?', 'bar%')));
+ $expected = array(
+ 0 => array(
+ 'title' => 'bar1',
+ ),
+ );
+ $test->expect(
+ json_encode($result) == json_encode($expected),
+ $type.': lookbehind search'
+ );
+
+ // full search
+ $result = $this->getResult($cx->find(array('title like ?', '%a%')));
+ $expected = array(
+ 0 => array(
+ 'title' => 'bar1',
+ ),
+ 1 => array(
+ 'num1' => 1,
+ 'title' => 'baz2',
+ ),
+ );
+ $test->expect(
+ json_encode($result) == json_encode($expected),
+ $type.': full search'
+ );
+
+ // negated search
+ $result = $this->getResult($cx->find(array('title not like ?', 'foo%')));
+ $test->expect(
+ json_encode($result) == json_encode($expected),
+ $type.': negated search'
+ );
+
+ // AND / OR chaining
+ $result = $this->getResult($cx->find(
+ array('(num2 < ? AND num1 > ?) OR title like ?', 2, 1, '%o9')));
+ $expected = array(
+ 0 => array(
+ 'num1' => 3,
+ 'num2' => 1,
+ 'title' => 'foo6',
+ ),
+ 1 => array(
+ 'num1' => 8,
+ 'title' => 'foo9',
+ ),
+ );
+ $test->expect(
+ json_encode($result) == json_encode($expected),
+ $type.': check logical operator chaining'
+ );
+
+ // check limit
+ $result = $this->getResult($cx->find(
+ null, array('limit' => '2')));
+ $expected = array(
+ 0 => array(
+ 'title' => 'bar1',
+ ),
+ 1 => array(
+ 'num1' => 1,
+ 'title' => 'baz2',
+ ),
+ );
+ $test->expect(
+ json_encode($result) == json_encode($expected),
+ $type.': check limit'
+ );
+
+ // check order
+ $result = $this->getResult($cx->find(
+ array('num2 >= ?', 1), array('order' => 'num2 desc')));
+ $expected = array(
+ 0 => array(
+ 'num1' => 3,
+ 'num2' => 10,
+ 'title' => 'foo7',
+ ),
+ 1 => array(
+ 'num1' => 3,
+ 'num2' => 5,
+ 'title' => 'foo5',
+ ),
+ 2 => array(
+ 'num1' => 3,
+ 'num2' => 1,
+ 'title' => 'foo6',
+ ),
+ );
+
+ $test->expect(
+ json_encode($result) == json_encode($expected),
+ $type.': check order'
+ );
+
+ // IN search
+ $rc = $cx->find(array('num1 IN ?',array(4,5,8)));
+ $result = $rc->getAll('title');
+ sort($result);
+ $test->expect(
+ json_encode($result) == json_encode(array('foo3','foo8','foo9')),
+ $type.': IN operator'
+ );
+
+ $rc = $cx->find(array('num1 IN ? && num2 > ? && num2 NOT IN ?',array(3,4),1,array(10)));
+ $result = $rc->getAll('title');
+ $test->expect(
+ json_encode($result) == json_encode(array('foo5')),
+ $type.': enhanced IN, NOT IN operator'
+ );
+
+ ///////////////////////////////////
+ return $test->results();
+ }
+
+ /**
+ * unify results for better comparison
+ */
+ private function getResult($result)
+ {
+ $out = array();
+ foreach ($result as $row) {
+ $row = $row->cast();
+ unset($row['_id']);
+ unset($row['id']);
+ ksort($row);
+ foreach ($row as $col => $val) {
+ if (empty($val) || is_null($val))
+ unset($row[$col]);
+ }
+ $out[] = $row;
+ }
+ return $out;
+ }
+}
\ No newline at end of file
diff --git a/app/app/schema.php b/app/app/schema.php
new file mode 100644
index 00000000..ea6bbfd7
--- /dev/null
+++ b/app/app/schema.php
@@ -0,0 +1,544 @@
+f3->get('timer') - $this->roundTime;
+ $this->roundTime = microtime(TRUE) - $this->f3->get('timer');
+ return ' [ '.sprintf('%.3f', $time).'s ]';
+ }
+
+ private function getTestDesc($text)
+ {
+ return $this->getTime().' '.$this->current_engine.': #'.$this->current_test++.' - '.$text;
+ }
+
+ function get()
+ {
+ $this->f3 = \Base::instance();
+ $this->test = new \Test;
+
+ $this->f3->set('QUIET', false);
+ $this->f3->set('CACHE', false);
+
+ $dbs = array(
+ /*'mysql' => new \DB\SQL(
+ 'mysql:host=localhost;port=3306;dbname=fatfree', 'fatfree', ''
+ ),*/
+ 'sqlite' => new \DB\SQL(
+ 'sqlite::memory:'
+ // 'sqlite:db/sqlite.db'
+ ),
+ /*'pgsql' => new \DB\SQL(
+ 'pgsql:host=localhost;dbname=fatfree', 'fatfree', 'fatfree'
+ ),*/
+ /*'sqlsrv2012' => new \DB\SQL(
+ 'sqlsrv:SERVER=LOCALHOST\SQLEXPRESS2012;Database=fatfree','fatfree', 'fatfree'
+ ),*/
+ /*'sqlsrv2008' => new \DB\SQL(
+ 'sqlsrv:SERVER=LOCALHOST\SQLEXPRESS2008;Database=fatfree','fatfree', 'fatfree'
+ )*/
+ );
+
+ $this->roundTime = microtime(TRUE) - \Base::instance()->get('timer');
+ $this->tname = 'test_table';
+
+ foreach ($dbs as $type => $db) {
+ $this->current_engine = $type;
+ $this->runTestSuite($db);
+ $this->current_test = 1;
+ }
+ $this->f3->set('results', $this->test->results());
+ }
+
+ private function runTestSuite($db)
+ {
+ $schema = new \DB\SQL\Schema($db);
+
+ $schema->dropTable($this->tname);
+
+ // create table
+ $table = $schema->createTable($this->tname);
+ $table = $table->build();
+ $result = $schema->getTables();
+ $this->test->expect(
+ in_array($this->tname, $result),
+ $this->getTestDesc('create default table')
+ );
+ unset($result);
+
+ $this->test->expect(
+ $table instanceof \DB\SQL\TableModifier,
+ $this->getTestDesc('$table->build() returns TableModifier')
+ );
+
+ // drop table
+ $table->drop();
+ $this->test->expect(
+ in_array($this->tname, $schema->getTables()) == false,
+ $this->getTestDesc('drop table')
+ );
+ unset($table);
+
+ // create table with columns
+ $table = $schema->createTable($this->tname);
+ $table->addColumn('title')->type($schema::DT_VARCHAR128);
+ $table->addColumn('number')->type($schema::DT_INT4);
+ $table = $table->build();
+ $r1 = $schema->getTables();
+ $r2 = $table->getCols();
+ $this->test->expect(
+ in_array($this->tname, $r1) && in_array('id', $r2)
+ && in_array('title', $r2) && in_array('number', $r2),
+ $this->getTestDesc('create new table with additional columns')
+ );
+ unset($r1,$r2);
+
+ // testing all datatypes
+ foreach (array_keys($schema->dataTypes) as $index => $field) {
+ // testing column type
+ $table->addColumn('column_'.$index)->type($field);
+ $table->build();
+ $r1 = $table->getCols();
+ $this->test->expect(
+ in_array('column_'.$index, $r1),
+ $this->getTestDesc('adding column ['.$field.'], nullable')
+ );
+ }
+ unset($r1);
+
+ // adding some testing data
+ $mapper = new \DB\SQL\Mapper($db, $this->tname);
+ $mapper->column_7 = 'hello world';
+ $mapper->save();
+ $mapper->reset();
+ $result = $mapper->findone(array('column_7 = ?', 'hello world'))->cast();
+ unset($mapper);
+ $this->test->expect(
+ $result['column_7'] == 'hello world',
+ $this->getTestDesc('mapping dummy data')
+ );
+
+ // default value text, not nullable
+ $table->addColumn('text_default_not_null')
+ ->type($schema::DT_VARCHAR128)
+ ->nullable(false)->defaults('foo bar');
+ $table->build();
+ $r1 = $table->getCols(true);
+ $this->test->expect(
+ in_array('text_default_not_null', array_keys($r1)) &&
+ $r1['text_default_not_null']['default'] == 'foo bar' &&
+ $r1['text_default_not_null']['nullable'] == false,
+ $this->getTestDesc('adding column [VARCHAR128], not nullable with default value')
+ );
+ unset($r1);
+
+ // some testing dummy data
+ $mapper = new \DB\SQL\Mapper($db, $this->tname);
+ $mapper->column_7 = 'tanduay';
+ $mapper->save();
+ $mapper->reset();
+ $result = $mapper->findone(array('column_7 = ?','tanduay'))->cast();
+ $this->test->expect(
+ $result['column_7'] == 'tanduay' &&
+ $result['text_default_not_null'] == 'foo bar',
+ $this->getTestDesc('mapping dummy data')
+ );
+ unset($mapper,$result);
+
+ // default value numeric, not nullable
+ $table->addColumn('int_default_not_null')
+ ->type($schema::DT_INT4)->nullable(false)->defaults(123);
+ $table->build();
+ $r1 = $table->getCols(true);
+ $this->test->expect(
+ in_array('int_default_not_null', array_keys($r1)) &&
+ $r1['int_default_not_null']['default'] == 123 &&
+ $r1['int_default_not_null']['nullable'] == false,
+ $this->getTestDesc('adding column [INT4], not nullable with default value')
+ );
+ unset($r1);
+
+ // adding testing data
+ $mapper = new \DB\SQL\Mapper($db, $this->tname);
+ $mapper->column_7 = 'test3';
+ $mapper->save();
+ $mapper->reset();
+ $r1 = $mapper->findone(array('column_7 = ?','test3'))->cast();
+ $this->test->expect(
+ $r1['column_7'] == 'test3' &&
+ $r1['int_default_not_null'] == 123,
+ $this->getTestDesc('mapping dummy data')
+ );
+ unset($mapper,$r1);
+
+
+ // default value text, nullable
+ $table->addColumn('text_default_nullable')
+ ->type($schema::DT_VARCHAR128)
+ ->defaults('foo bar');
+ $table->build();
+ $r1 = $table->getCols(true);
+ $this->test->expect(
+ in_array('text_default_nullable', array_keys($r1)) &&
+ $r1['text_default_nullable']['default'] == 'foo bar',
+ $this->getTestDesc('adding column [VARCHAR128], nullable with default value')
+ );
+ unset($r1);
+
+ // adding some dummy data
+ $mapper = new \DB\SQL\Mapper($db, $this->tname);
+ $mapper->column_7 = 'test4';
+ $mapper->save();
+ $mapper->reset();
+ $mapper->column_7 = 'test5';
+ $mapper->text_default_nullable = null;
+ $mapper->save();
+ $mapper->reset();
+ $result = $mapper->find(array('column_7 = ? OR column_7 = ?','test4','test5'));
+ foreach ($result as &$r)
+ $r = $r->cast();
+
+ $this->test->expect(
+ array_key_exists(0, $result) && array_key_exists(1, $result) &&
+ $result[0]['column_7'] == 'test4' && $result[0]['text_default_nullable'] == 'foo bar' &&
+ $result[1]['column_7'] == 'test5' && $result[1]['text_default_nullable'] === null,
+ $this->getTestDesc('mapping dummy data')
+ );
+ unset($mapper, $result);
+
+ // default value numeric, nullable
+ $table->addColumn('int_default_nullable')->type($schema::DT_INT4)->defaults(123);
+ $table->build();
+ $r1 = $table->getCols(true);
+ $this->test->expect(
+ in_array('int_default_nullable', array_keys($r1)) == true &&
+ $r1['int_default_nullable']['default'] == 123,
+ $this->getTestDesc('adding column [INT4], nullable with default value')
+ );
+ unset($r1);
+
+ // adding dummy data
+ $mapper = new \DB\SQL\Mapper($db, $this->tname);
+ $mapper->column_7 = 'test6';
+ $mapper->save();
+ $mapper->reset();
+ $mapper->column_7 = 'test7';
+ $mapper->int_default_nullable = null;
+ $mapper->save();
+ $mapper->reset();
+ $result = $mapper->find(array('column_7 = ? OR column_7 = ?', 'test6', 'test7'));
+ foreach ($result as &$r)
+ $r = $r->cast();
+
+ $this->test->expect(
+ array_key_exists(0, $result) && array_key_exists(1, $result) &&
+ $result[0]['column_7'] == 'test6' && $result[0]['int_default_nullable'] === 123 &&
+ $result[1]['column_7'] == 'test7' && $result[1]['int_default_nullable'] === null,
+ $this->getTestDesc('mapping dummy data')
+ );
+ unset($mapper, $result);
+
+ // current timestamp
+ $table->addColumn('stamp')
+ ->type($schema::DT_TIMESTAMP)
+ ->nullable(false)
+ ->defaults($schema::DF_CURRENT_TIMESTAMP);
+ $table->build();
+ $r1 = $table->getCols(true);
+ $this->test->expect(
+ in_array('stamp', array_keys($r1)) &&
+ $r1['stamp']['default'] == $schema::DF_CURRENT_TIMESTAMP,
+ $this->getTestDesc(
+ 'adding column [TIMESTAMP], not nullable with current_timestamp default value')
+ );
+ unset($r1);
+
+
+ // datetime nullable
+ $table->addColumn('datetime')->type_datetime()->nullable(true);
+ $table->build();
+ $r1 = $table->getCols(true);
+ $this->test->expect(
+ in_array('datetime', array_keys($r1)) &&
+ $r1['datetime']['nullable'] == true,
+ $this->getTestDesc(
+ 'adding column [DATETIME], nullable, no default')
+ );
+ unset($r1);
+
+
+ // adding dummy data
+ $mapper = new \DB\SQL\Mapper($db, $this->tname);
+ $mapper->column_7 = 'test_datetime';
+ $mapper->datetime = NULL;
+ $mapper->save();
+ $mapper->reset();
+ $result = $mapper->find(array('column_7 = ?', 'test_datetime'));
+ foreach ($result as &$r)
+ $r = $r->cast();
+
+ $this->test->expect(
+ array_key_exists(0, $result) && $result[0]['column_7'] == 'test_datetime' &&
+ $result[0]['datetime'] === null,
+ $this->getTestDesc('mapping dummy data')
+ );
+ unset($mapper, $result);
+
+
+ // rename column
+ $table->renameColumn('text_default_not_null', 'title123');
+ $table->build();
+ $r1 = $table->getCols();
+ $this->test->expect(
+ in_array('title123', $r1) && !in_array('text_default_not_null', $r1),
+ $this->getTestDesc('renaming column')
+ );
+ unset($r1);
+
+ // adding dummy data
+ $mapper = new \DB\SQL\Mapper($db, $this->tname);
+ $mapper->title123 = 'test8';
+ $mapper->save();
+ $mapper->reset();
+ $result = $mapper->findone(array('title123 = ?','test8'));
+ $this->test->expect(
+ !$result->dry(),
+ $this->getTestDesc('mapping dummy data')
+ );
+ $table->renameColumn('title123', 'text_default_not_null');
+ $table->build();
+ unset($result,$mapper);
+
+ // remove column
+ $table->dropColumn('column_1');
+ $table->build();
+ $r1 = $table->getCols();
+ $this->test->expect(
+ !in_array('column_1', $r1),
+ $this->getTestDesc('removing column')
+ );
+ unset($r1);
+
+ // rename table
+ $schema->dropTable('test123');
+ $table->rename('test123');
+ $result = $schema->getTables();
+ $this->test->expect(
+ in_array('test123', $result) && !in_array($this->tname, $result),
+ $this->getTestDesc('renaming table')
+ );
+ $table->rename($this->tname);
+ unset($result);
+
+ // check record count
+ $mapper = new \DB\SQL\Mapper($db, $this->tname);
+ $this->test->expect(
+ count($mapper->find()) == 9,
+ $this->getTestDesc('check record count')
+ );
+ unset($mapper);
+
+ // adding composite primary keys
+ $table->addColumn('version')->type($schema::DT_INT4)->nullable(false)->defaults(1);
+ $table->primary(array('id', 'version'));
+ $table->build();
+ $r1 = $table->getCols(true);
+ $this->test->expect(!empty($r1) && isset($r1['version']) &&
+ $r1['id']['pkey'] == true && $r1['version']['pkey'] == true,
+ $this->getTestDesc('adding composite primary-keys')
+ );
+ unset($r1);
+
+ // check record count
+ $mapper = new \DB\SQL\Mapper($db, $this->tname);
+ $this->test->expect(
+ count($mapper->find()) == 9,
+ $this->getTestDesc('check record count')
+ );
+ unset($mapper);
+
+ // drop table
+ $schema->dropTable($this->tname);
+ $this->test->expect(
+ !in_array($this->tname, $schema->getTables()),
+ $this->getTestDesc('drop table')
+ );
+
+ // adding composite primary keys
+ $table = $schema->createTable($this->tname);
+ $table->addColumn('version')->type($schema::DT_INT4)
+ ->defaults(1)->nullable(false);
+ $table->primary(array('id', 'version'));
+ $table = $table->build();
+ $r1 = $table->getCols(true);
+
+ $this->test->expect(!empty($r1) &&
+ $r1['id']['pkey'] == true && $r1['version']['pkey'] == true,
+ $this->getTestDesc('creating new table with composite key')
+ );
+ $this->test->expect(!empty($r1) &&
+ $r1['version']['default'] == '1',
+ $this->getTestDesc('default value on composite primary key')
+ );
+ unset($r1);
+
+ // more fields to composite primary key table
+ $table->addColumn('title')->type($schema::DT_VARCHAR256);
+ $table->addColumn('title2')->type($schema::DT_TEXT);
+ $table->addColumn('title_notnull')
+ ->type($schema::DT_VARCHAR128)->nullable(false)->defaults("foo");
+ $table->build();
+ $r1 = $table->getCols(true);
+ $this->test->expect(
+ array_key_exists('title', $r1) &&
+ array_key_exists('title_notnull', $r1) &&
+ $r1['id']['pkey'] == true && $r1['version']['pkey'] == true,
+ $this->getTestDesc('adding more fields to composite pk table')
+ );
+ unset($r1);
+
+ // testing primary keys with inserted data
+ $mapper = new \DB\SQL\Mapper($db, $this->tname);
+ $mapper->title = 'test1';
+ $mapper->save();
+ $mapper->reset();
+
+ $mapper->id = 1;
+ $mapper->title = 'nullable';
+ $mapper->version = 2;
+ $mapper->save();
+ $mapper->reset();
+
+ $mapper->title = 'test3';
+ $mapper->title2 = 'foobar';
+ $mapper->title_notnull = 'bar';
+ $mapper->save();
+
+ $result = array_map(array($mapper,'cast'),$mapper->find());
+
+ $cpk_expected = array(
+ 0=>array(
+ 'id' => 1,
+ 'version' => 1,
+ 'title' => 'test1',
+ 'title2' => NULL,
+ 'title_notnull' => 'foo',
+ ),
+ 1=>array(
+ 'id' => 1,
+ 'version' => 2,
+ 'title' => 'nullable',
+ 'title2' => NULL,
+ 'title_notnull' => 'foo',
+ ),
+ 2=>array(
+ 'id' => 2,
+ 'version' => 1,
+ 'title' => 'test3',
+ 'title2' => 'foobar',
+ 'title_notnull' => 'bar',
+ ),
+ );
+ foreach ($result as &$r)
+ ksort($r);
+ foreach ($cpk_expected as &$r)
+ ksort($r);
+ $this->test->expect(
+ json_encode($result) == json_encode($cpk_expected),
+ $this->getTestDesc('adding items with composite primary-keys')
+ );
+
+ $schema->dropTable($this->tname);
+
+ // indexes
+ $table = $schema->createTable($this->tname);
+ $table->addColumn('rawtest', array('type' => $schema::DT_VARCHAR256, 'default' => 'foo'));
+ $table->addColumn('text')->type($schema::DT_TEXT);
+ $table->addColumn('foo')->type($schema::DT_VARCHAR128)->index();
+ $table = $table->build();
+ $r1 = $table->getCols(true);
+ $this->test->expect(
+ isset($r1['rawtest']) && $r1['rawtest']['default'] = 'foo',
+ $this->getTestDesc('adding column with options array')
+ );
+ $indexes = $table->listIndex();
+ $this->test->expect(
+ isset($indexes[$table->name.'___foo']),
+ $this->getTestDesc('column index on table creation')
+ );
+ $table->addColumn('bar')->type($schema::DT_VARCHAR128)->index(true);
+ $table->addColumn('baz')->type($schema::DT_VARCHAR128);
+ $table->addIndex(array('foo', 'baz'));
+ $table->build();
+ $indexes = $table->listIndex();
+ $this->test->expect(
+ isset($indexes[$table->name.'___bar']),
+ $this->getTestDesc('column index on table alteration')
+ );
+ $this->test->expect(
+ isset($indexes[$table->name.'___bar']) && $indexes[$table->name.'___bar']['unique'] == true,
+ $this->getTestDesc('unique index')
+ );
+ $this->test->expect(
+ isset($indexes[$table->name.'___foo__baz']),
+ $this->getTestDesc('index on combined columns')
+ );
+
+ if($this->current_engine == 'sqlite') {
+ $table->dropColumn('rawtest');
+ $table->build();
+ $indexes = $table->listIndex();
+ $this->test->expect(
+ isset($indexes[$table->name.'___foo__baz']) && isset($indexes[$table->name.'___bar'])
+ && $indexes[$table->name.'___bar']['unique'],
+ $this->getTestDesc('preserve indexes after table rebuild')
+ );
+ }
+
+ $table->dropIndex($table->name.'___bar');
+ $table->build();
+ $indexes = $table->listIndex();
+ $this->test->expect(
+ !array_key_exists($table->name.'___bar',$indexes),
+ $this->getTestDesc('drop index')
+ );
+
+ // update column
+ $table->updateColumn('bar',$schema::DT_TEXT);
+ $table->build();
+ $r1 = $table->getCols(true);
+ $this->test->expect(
+ array_key_exists('bar', $r1) && $r1['bar']['type'] == 'text',
+ $this->getTestDesc('update column')
+ );
+
+ // create table with text not nullable column
+ $table2 = $schema->createTable($this->tname.'_notnulltext');
+ $table2->addColumn('desc')->type($schema::DT_TEXT)->nullable(false);
+ $table2 = $table2->build();
+ $r1 = $schema->getTables();
+ $r2 = $table2->getCols(true);
+ $this->test->expect(
+ in_array($this->tname.'_notnulltext', $r1) && array_key_exists('desc', $r2)
+ && $r2['desc']['nullable']==false,
+ $this->getTestDesc('create new table with not nullable text column')
+ );
+ $table2->drop();
+
+
+ }
+
+}
\ No newline at end of file
diff --git a/app/config.cfg b/app/config.cfg
index 1408dc90..6cab48f6 100644
--- a/app/config.cfg
+++ b/app/config.cfg
@@ -1,7 +1,12 @@
[globals]
; Verbosity level of the stack trace. Assign values between 0 to 3 for increasing verbosity levels
-DEBUG = 2
+DEBUG = 0
+
+; If TRUE, the framework, after having logged stack trace and errors, stops execution (die without any status) when a non-fatal error is detected.
+HALT = FALSE
+
+ONERROR = "Controller\MapController->showError"
; Path to the index.php main/front controller.
BASE = /exodus4d/pathfinder
diff --git a/app/lib/db/cortex.php b/app/lib/db/cortex.php
new file mode 100644
index 00000000..fbb8bda1
--- /dev/null
+++ b/app/lib/db/cortex.php
@@ -0,0 +1,2509 @@
+
+ * https://github.com/ikkez/F3-Sugar/
+ *
+ * @package DB
+ * @version 1.3.0
+ * @since 24.04.2012
+ * @date 19.01.2015
+ */
+
+namespace DB;
+use DB\SQL\Schema;
+
+class Cortex extends Cursor {
+
+ protected
+ // config
+ $db, // DB object [ \DB\SQL, \DB\Jig, \DB\Mongo ]
+ $table, // selected table, string
+ $fluid, // fluid sql schema mode, boolean
+ $fieldConf, // field configuration, array
+ $ttl, // default mapper schema ttl
+ $rel_ttl, // default mapper rel ttl
+ $primary, // SQL table primary key
+ // behaviour
+ $smartLoading, // intelligent lazy eager loading, boolean
+ $standardiseID, // return standardized '_id' field for SQL when casting
+ // internals
+ $dbsType, // mapper engine type [jig, sql, mongo]
+ $fieldsCache, // relation field cache
+ $saveCsd, // mm rel save cascade
+ $collectionID, // collection set identifier
+ $relFilter, // filter for loading related models
+ $hasCond, // IDs of records the next find should have
+ $whitelist, // restrict to these fields
+ $relWhitelist, // restrict relations to these fields
+ $grp_stack, // stack of group conditions
+ $countFields, // relational counter buffer
+ $preBinds, // bind values to be prepended to $filter
+ $vFields, // virtual fields buffer
+ $_ttl; // rel_ttl overwrite
+
+ /** @var Cursor */
+ protected $mapper;
+
+ /** @var CortexQueryParser */
+ protected $queryParser;
+
+ static
+ $init = false; // just init without mapper
+
+ const
+ // special datatypes
+ DT_SERIALIZED = 'SERIALIZED',
+ DT_JSON = 'JSON',
+
+ // error messages
+ E_ARRAY_DATATYPE = 'Unable to save an Array in field %s. Use DT_SERIALIZED or DT_JSON.',
+ E_CONNECTION = 'No valid DB Connection given.',
+ E_NO_TABLE = 'No table specified.',
+ E_UNKNOWN_DB_ENGINE = 'This unknown DB system is not supported: %s',
+ E_FIELD_SETUP = 'No field setup defined',
+ E_UNKNOWN_FIELD = 'Field %s does not exist in %s.',
+ E_INVALID_RELATION_OBJECT = 'You can only save hydrated mapper objects',
+ E_NULLABLE_COLLISION = 'Unable to set NULL to the NOT NULLABLE field: %s',
+ E_WRONG_RELATION_CLASS = 'Relations only works with Cortex objects',
+ E_MM_REL_VALUE = 'Invalid value for many field "%s". Expecting null, split-able string, hydrated mapper object, or array of mapper objects.',
+ E_MM_REL_CLASS = 'Mismatching m:m relation config from class `%s` to `%s`.',
+ E_MM_REL_FIELD = 'Mismatching m:m relation keys from `%s` to `%s`.',
+ E_REL_CONF_INC = 'Incomplete relation config for `%s`. Linked key is missing.',
+ E_MISSING_REL_CONF = 'Cannot create related model. Specify a model name or relConf array.',
+ E_HAS_COND = 'Cannot use a "has"-filter on a non-bidirectional relation field';
+
+ /**
+ * init the ORM, based on given DBS
+ * @param null|object $db
+ * @param string $table
+ * @param null|bool $fluid
+ * @param int $ttl
+ */
+ public function __construct($db = NULL, $table = NULL, $fluid = NULL, $ttl = 0)
+ {
+ if (!is_null($fluid))
+ $this->fluid = $fluid;
+ if (!is_object($this->db=(is_string($db=($db?:$this->db))?\Base::instance()->get($db):$db)))
+ trigger_error(self::E_CONNECTION);
+ if ($this->db instanceof Jig)
+ $this->dbsType = 'jig';
+ elseif ($this->db instanceof SQL)
+ $this->dbsType = 'sql';
+ elseif ($this->db instanceof Mongo)
+ $this->dbsType = 'mongo';
+ if ($table)
+ $this->table = $table;
+ if (!$this->primary || $this->dbsType != 'sql')
+ $this->primary = 'id';
+ if (!$this->table && !$this->fluid)
+ trigger_error(self::E_NO_TABLE);
+ $this->ttl = $ttl ?: 60;
+ if (!$this->rel_ttl)
+ $this->rel_ttl = 0;
+ $this->_ttl = $this->rel_ttl ?: 0;
+ if (static::$init == TRUE) return;
+ if ($this->fluid)
+ static::setup($this->db,$this->getTable(),array());
+ $this->initMapper();
+ }
+
+ /**
+ * create mapper instance
+ */
+ public function initMapper()
+ {
+ switch ($this->dbsType) {
+ case 'jig':
+ $this->mapper = new Jig\Mapper($this->db, $this->table);
+ break;
+ case 'sql':
+ $this->mapper = new SQL\Mapper($this->db, $this->table, $this->whitelist,
+ ($this->fluid)?0:$this->ttl);
+ break;
+ case 'mongo':
+ $this->mapper = new Mongo\Mapper($this->db, $this->table);
+ break;
+ default:
+ trigger_error(sprintf(self::E_UNKNOWN_DB_ENGINE,$this->dbsType));
+ }
+ $this->queryParser = CortexQueryParser::instance();
+ $this->reset();
+ $this->clearFilter();
+ $f3 = \Base::instance();
+ $this->smartLoading = $f3->exists('CORTEX.smartLoading') ?
+ $f3->get('CORTEX.smartLoading') : TRUE;
+ $this->standardiseID = $f3->exists('CORTEX.standardiseID') ?
+ $f3->get('CORTEX.standardiseID') : TRUE;
+ if(!empty($this->fieldConf))
+ foreach($this->fieldConf as &$conf)
+ $conf=static::resolveRelationConf($conf);
+ }
+
+ /**
+ * get fields or set whitelist / blacklist of fields
+ * @param array $fields
+ * @param bool $exclude
+ * @return array
+ */
+ public function fields(array $fields=array(), $exclude=false)
+ {
+ if ($fields)
+ // collect restricted fields for related mappers
+ foreach($fields as $i=>$val)
+ if(is_int(strpos($val,'.'))) {
+ list($key, $relField) = explode('.',$val,2);
+ $this->relWhitelist[$key][(int)$exclude][] = $relField;
+ unset($fields[$i]);
+ }
+ $schema = $this->whitelist ?: $this->mapper->fields();
+ if (!$schema && !$this->dbsType != 'sql' && $this->dry()) {
+ $schema = $this->load()->mapper->fields();
+ $this->reset();
+ }
+ if (!$this->whitelist && $this->fieldConf)
+ $schema=array_unique(array_merge($schema,array_keys($this->fieldConf)));
+ if (!$fields || empty($fields))
+ return $schema;
+ elseif ($exclude) {
+ $this->whitelist=array_diff($schema,$fields);
+ } else
+ $this->whitelist=$fields;
+ $id=$this->dbsType=='sql'?$this->primary:'_id';
+ if(!in_array($id,$this->whitelist))
+ $this->whitelist[]=$id;
+ $this->initMapper();
+ return $this->whitelist;
+ }
+
+ /**
+ * set model definition
+ * config example:
+ * array('title' => array(
+ * 'type' => \DB\SQL\Schema::DT_TEXT,
+ * 'default' => 'new record title',
+ * 'nullable' => true
+ * )
+ * '...' => ...
+ * )
+ * @param array $config
+ */
+ function setFieldConfiguration(array $config)
+ {
+ $this->fieldConf = $config;
+ $this->reset();
+ }
+
+ /**
+ * returns model field conf array
+ * @return array|null
+ */
+ public function getFieldConfiguration()
+ {
+ return $this->fieldConf;
+ }
+
+ /**
+ * kick start to just fetch the config
+ * @return array
+ */
+ static public function resolveConfiguration()
+ {
+ static::$init=true;
+ $self = new static();
+ static::$init=false;
+ $conf = array (
+ 'table'=>$self->getTable(),
+ 'fieldConf'=>$self->getFieldConfiguration(),
+ 'db'=>$self->db,
+ 'fluid'=>$self->fluid,
+ 'primary'=>$self->primary,
+ );
+ unset($self);
+ return $conf;
+ }
+
+ public function addToCollection($cID) {
+ $this->collectionID = $cID;
+ }
+
+ /**
+ * returns model table name
+ * @return string
+ */
+ public function getTable()
+ {
+ if (!$this->table && $this->fluid)
+ $this->table = strtolower(get_class($this));
+ return $this->table;
+ }
+
+ /**
+ * setup / update table schema
+ * @static
+ * @param $db
+ * @param $table
+ * @param $fields
+ * @return bool
+ */
+ static public function setup($db=null, $table=null, $fields=null)
+ {
+ /** @var Cortex $self */
+ $self = get_called_class();
+ if (is_null($db) || is_null($table) || is_null($fields))
+ $df = $self::resolveConfiguration();
+ if (!is_object($db=(is_string($db=($db?:$df['db']))?\Base::instance()->get($db):$db)))
+ trigger_error(self::E_CONNECTION);
+ if (strlen($table=$table?:$df['table'])==0)
+ trigger_error(self::E_NO_TABLE);
+ if (is_null($fields))
+ if (!empty($df['fieldConf']))
+ $fields = $df['fieldConf'];
+ elseif(!$df['fluid']) {
+ trigger_error(self::E_FIELD_SETUP);
+ return false;
+ } else
+ $fields = array();
+ if ($db instanceof SQL) {
+ $schema = new Schema($db);
+ // prepare field configuration
+ if (!empty($fields))
+ foreach($fields as $key => &$field) {
+ // fetch relation field types
+ $field = static::resolveRelationConf($field);
+ // check m:m relation
+ if (array_key_exists('has-many', $field)) {
+ // m:m relation conf [class,to-key,from-key]
+ if (!is_array($relConf = $field['has-many'])) {
+ unset($fields[$key]);
+ continue;
+ }
+ $rel = $relConf[0]::resolveConfiguration();
+ // check if foreign conf matches m:m
+ if (array_key_exists($relConf[1],$rel['fieldConf'])
+ && !is_null($rel['fieldConf'][$relConf[1]])
+ && $relConf['hasRel'] == 'has-many') {
+ // compute mm table name
+ $mmTable = isset($relConf[2]) ? $relConf[2] :
+ static::getMMTableName(
+ $rel['table'], $relConf[1], $table, $key,
+ $rel['fieldConf'][$relConf[1]]['has-many']);
+ if (!in_array($mmTable,$schema->getTables())) {
+ $mmt = $schema->createTable($mmTable);
+ $mmt->addColumn($relConf[1])->type_int();
+ $mmt->addColumn($key)->type_int();
+ $index = array($relConf[1],$key);
+ sort($index);
+ $mmt->addIndex($index);
+ $mmt->build();
+ }
+ }
+ }
+ // skip virtual fields with no type
+ if (!array_key_exists('type', $field)) {
+ unset($fields[$key]);
+ continue;
+ }
+ // transform array fields
+ if (in_array($field['type'], array(self::DT_JSON, self::DT_SERIALIZED)))
+ $field['type']=$schema::DT_TEXT;
+ // defaults values
+ if (!array_key_exists('nullable', $field)) $field['nullable'] = true;
+ }
+ if (!in_array($table, $schema->getTables())) {
+ // create table
+ $table = $schema->createTable($table);
+ foreach ($fields as $field_key => $field_conf)
+ $table->addColumn($field_key, $field_conf);
+ if(isset($df) && $df['primary'] != 'id') {
+ $table->addColumn($df['primary'])->type_int();
+ $table->primary($df['primary']);
+ }
+ $table->build();
+ } else {
+ // add missing fields
+ $table = $schema->alterTable($table);
+ $existingCols = $table->getCols();
+ foreach ($fields as $field_key => $field_conf)
+ if (!in_array($field_key, $existingCols))
+ $table->addColumn($field_key, $field_conf);
+ // remove unused fields
+ // foreach ($existingCols as $col)
+ // if (!in_array($col, array_keys($fields)) && $col!='id')
+ // $table->dropColumn($col);
+ $table->build();
+ }
+ }
+ return true;
+ }
+
+ /**
+ * erase all model data, handle with care
+ * @param null $db
+ * @param null $table
+ */
+ static public function setdown($db=null, $table=null)
+ {
+ $self = get_called_class();
+ if (is_null($db) || is_null($table))
+ $df = $self::resolveConfiguration();
+ if (!is_object($db=(is_string($db=($db?:$df['db']))?\Base::instance()->get($db):$db)))
+ trigger_error(self::E_CONNECTION);
+ if (strlen($table=strtolower($table?:$df['table']))==0)
+ trigger_error(self::E_NO_TABLE);
+ if (isset($df) && !empty($df['fieldConf']))
+ $fields = $df['fieldConf'];
+ else
+ $fields = array();
+ $deletable = array();
+ $deletable[] = $table;
+ foreach ($fields as $key => $field) {
+ $field = static::resolveRelationConf($field);
+ if (array_key_exists('has-many',$field)) {
+ if (!is_array($relConf = $field['has-many']))
+ continue;
+ $rel = $relConf[0]::resolveConfiguration();
+ // check if foreign conf matches m:m
+ if (array_key_exists($relConf[1],$rel['fieldConf']) && !is_null($relConf[1])
+ && key($rel['fieldConf'][$relConf[1]]) == 'has-many') {
+ // compute mm table name
+ $deletable[] = isset($relConf[2]) ? $relConf[2] :
+ static::getMMTableName(
+ $rel['table'], $relConf[1], $table, $key,
+ $rel['fieldConf'][$relConf[1]]['has-many']);
+ }
+ }
+ }
+
+ if($db instanceof Jig) {
+ /** @var Jig $db */
+ $dir = $db->dir();
+ foreach ($deletable as $item)
+ if(file_exists($dir.$item))
+ unlink($dir.$item);
+ } elseif($db instanceof SQL) {
+ /** @var SQL $db */
+ $schema = new Schema($db);
+ $tables = $schema->getTables();
+ foreach ($deletable as $item)
+ if(in_array($item, $tables))
+ $schema->dropTable($item);
+ } elseif($db instanceof Mongo) {
+ /** @var Mongo $db */
+ foreach ($deletable as $item)
+ $db->selectCollection($item)->drop();
+ }
+ }
+
+ /**
+ * computes the m:m table name
+ * @param string $ftable foreign table
+ * @param string $fkey foreign key
+ * @param string $ptable own table
+ * @param string $pkey own key
+ * @param null|array $fConf foreign conf [class,key]
+ * @return string
+ */
+ static protected function getMMTableName($ftable, $fkey, $ptable, $pkey, $fConf=null)
+ {
+ if ($fConf) {
+ list($fclass, $pfkey) = $fConf;
+ $self = get_called_class();
+ // check for a matching config
+ if (!is_int(strpos($fclass, $self)))
+ trigger_error(sprintf(self::E_MM_REL_CLASS, $fclass, $self));
+ if ($pfkey != $pkey)
+ trigger_error(sprintf(self::E_MM_REL_FIELD,
+ $fclass.'.'.$pfkey, $self.'.'.$pkey));
+ }
+ $mmTable = array($ftable.'__'.$fkey, $ptable.'__'.$pkey);
+ natcasesort($mmTable);
+ $return = strtolower(str_replace('\\', '_', implode('_mm_', $mmTable)));
+ return $return;
+ }
+
+ /**
+ * resolve relation field types
+ * @param $field
+ * @return mixed
+ */
+ protected static function resolveRelationConf($field)
+ {
+ if (array_key_exists('belongs-to-one', $field)) {
+ // find primary field definition
+ if (!is_array($relConf = $field['belongs-to-one']))
+ $relConf = array($relConf, '_id');
+ // set field type
+ if ($relConf[1] == '_id')
+ $field['type'] = Schema::DT_INT8;
+ else {
+ // find foreign field type
+ $fc = $relConf[0]::resolveConfiguration();
+ $field['belongs-to-one']['relPK'] = $fc['primary'];
+ $field['type'] = $fc['fieldConf'][$relConf[1]]['type'];
+ }
+ $field['nullable'] = true;
+ $field['relType'] = 'belongs-to-one';
+ }
+ elseif (array_key_exists('belongs-to-many', $field)){
+ $field['type'] = self::DT_JSON;
+ $field['nullable'] = true;
+ $field['relType'] = 'belongs-to-many';
+ }
+ elseif (array_key_exists('has-many', $field)){
+ $field['relType'] = 'has-many';
+ $relConf = $field['has-many'];
+ if(!is_array($relConf))
+ return $field;
+ $rel = $relConf[0]::resolveConfiguration();
+ if(array_key_exists('has-many',$rel['fieldConf'][$relConf[1]])) {
+ $field['has-many']['hasRel'] = 'has-many';
+ $field['has-many']['relTable'] = $rel['table'];
+ $field['has-many']['relField'] = $relConf[1];
+ $field['has-many']['relPK'] = $rel['primary'];
+ } else {
+ $field['has-many']['hasRel'] = 'belongs-to-one';
+ $toConf=$rel['fieldConf'][$relConf[1]]['belongs-to-one'];
+ if (is_array($toConf))
+ $field['has-many']['relField'] = $toConf[1];
+ }
+ } elseif(array_key_exists('has-one', $field))
+ $field['relType'] = 'has-one';
+ return $field;
+ }
+
+ /**
+ * Return an array of result arrays matching criteria
+ * @param null $filter
+ * @param array $options
+ * @param int $ttl
+ * @param int $rel_depths
+ * @return array
+ */
+ public function afind($filter = NULL, array $options = NULL, $ttl = 0, $rel_depths = 1)
+ {
+ $result = $this->find($filter, $options, $ttl);
+ return $result ? $result->castAll($rel_depths): NULL;
+ }
+
+ /**
+ * Return an array of objects matching criteria
+ * @param array|null $filter
+ * @param array|null $options
+ * @param int $ttl
+ * @return CortexCollection
+ */
+ public function find($filter = NULL, array $options = NULL, $ttl = 0)
+ {
+ $sort=false;
+ if ($this->dbsType!='sql') {
+ if (!empty($this->countFields))
+ // see if reordering is needed
+ foreach($this->countFields as $counter) {
+ if ($options && isset($options['order']) &&
+ preg_match('/count_'.$counter.'\h+(asc|desc)/i',$options['order'],$match))
+ $sort=true;
+ }
+ if ($sort) {
+ // backup slice settings
+ if (isset($options['limit'])) {
+ $limit = $options['limit'];
+ unset($options['limit']);
+ }
+ if (isset($options['offset'])) {
+ $offset = $options['offset'];
+ unset($options['offset']);
+ }
+ }
+ }
+ $this->_ttl=$ttl?:$this->rel_ttl;
+ $result = $this->filteredFind($filter,$options,$ttl);
+ if (empty($result))
+ return false;
+ foreach($result as &$record) {
+ $record = $this->factory($record);
+ unset($record);
+ }
+ if (!empty($this->countFields))
+ // add counter for NoSQL engines
+ foreach($this->countFields as $counter)
+ foreach($result as &$mapper) {
+ $cr=$mapper->get($counter);
+ $mapper->virtual('count_'.$counter,$cr?count($cr):null);
+ }
+ $cc = new \DB\CortexCollection();
+ $cc->setModels($result);
+ if($sort) {
+ $cc->orderBy($options['order']);
+ $cc->slice(isset($offset)?$offset:0,isset($limit)?$limit:NULL);
+ }
+ $this->clearFilter();
+ return $cc;
+ }
+
+ /**
+ * wrapper for custom find queries
+ * @param array $filter
+ * @param array $options
+ * @param int $ttl
+ * @param bool $count
+ * @return array|false array of underlying cursor objects
+ */
+ protected function filteredFind($filter = NULL, array $options = NULL, $ttl = 0, $count=false)
+ {
+ if ($this->grp_stack) {
+ if ($this->dbsType == 'mongo') {
+ $group = array(
+ 'keys' => $this->grp_stack['keys'],
+ 'reduce' => 'function (obj, prev) {'.$this->grp_stack['reduce'].'}',
+ 'initial' => $this->grp_stack['initial'],
+ 'finalize' => $this->grp_stack['finalize'],
+ );
+ if ($options && isset($options['group'])) {
+ if(is_array($options['group']))
+ $options['group'] = array_merge($options['group'],$group);
+ else {
+ $keys = explode(',',$options['group']);
+ $keys = array_combine($keys,array_fill(0,count($keys),1));
+ $group['keys'] = array_merge($group['keys'],$keys);
+ $options['group'] = $group;
+ }
+ } else
+ $options = array('group'=>$group);
+ }
+ if($this->dbsType == 'sql') {
+ if ($options && isset($options['group']))
+ $options['group'].= ','.$this->grp_stack;
+ else
+ $options['group'] = $this->grp_stack;
+ }
+ // Jig can't group yet, but pending enhancement https://github.com/bcosca/fatfree/pull/616
+ }
+ if ($this->dbsType == 'sql' && !$count) {
+ $m_refl=new \ReflectionObject($this->mapper);
+ $m_ad_prop=$m_refl->getProperty('adhoc');
+ $m_ad_prop->setAccessible(true);
+ $m_refl_adhoc=$m_ad_prop->getValue($this->mapper);
+ $m_ad_prop->setAccessible(false);
+ unset($m_ad_prop,$m_refl);
+ }
+ $hasJoin = array();
+ if ($this->hasCond) {
+ foreach($this->hasCond as $key => $hasCond) {
+ $addToFilter = null;
+ list($has_filter,$has_options) = $hasCond;
+ $type = $this->fieldConf[$key]['relType'];
+ $fromConf = $this->fieldConf[$key][$type];
+ switch($type) {
+ case 'has-one':
+ case 'has-many':
+ if (!is_array($fromConf))
+ trigger_error(sprintf(self::E_REL_CONF_INC, $key));
+ $id = $this->dbsType == 'sql' ? $this->primary : '_id';
+ if ($type=='has-many' && isset($fromConf['relField'])
+ && $fromConf['hasRel'] == 'belongs-to-one')
+ $id=$fromConf['relField'];
+ // many-to-many
+ if ($type == 'has-many' && $fromConf['hasRel'] == 'has-many') {
+ if ($this->dbsType == 'sql'
+ && !isset($has_options['limit']) && !isset($has_options['offset'])) {
+ $hasJoin = array_merge($hasJoin,
+ $this->_hasJoinMM_sql($key,$hasCond,$filter,$options));
+ $options['group'] = (isset($options['group'])?$options['group'].',':'').
+ $this->db->quotekey($this->table.'.'.$this->primary);
+ $groupFields = explode(',', preg_replace('/"/','',$options['group']));
+ // all non-aggregated fields need to be present in the GROUP BY clause
+ if (isset($m_refl_adhoc) && preg_match('/sybase|dblib|odbc|sqlsrv/i',$this->db->driver()))
+ foreach (array_diff($this->mapper->fields(),array_keys($m_refl_adhoc)) as $field)
+ if (!in_array($this->table.'.'.$field,$groupFields))
+ $options['group'] .= ', '.$this->db->quotekey($this->table.'.'.$field);
+ }
+ elseif ($result = $this->_hasRefsInMM($key,$has_filter,$has_options,$ttl))
+ $addToFilter = array($id.' IN ?', $result);
+ } // *-to-one
+ elseif ($result = $this->_hasRefsIn($key,$has_filter,$has_options,$ttl))
+ $addToFilter = array($id.' IN ?', $result);
+ break;
+ // one-to-*
+ case 'belongs-to-one':
+ if ($this->dbsType == 'sql'
+ && !isset($has_options['limit']) && !isset($has_options['offset'])) {
+ if (!is_array($fromConf))
+ $fromConf = array($fromConf, '_id');
+ $rel = $fromConf[0]::resolveConfiguration();
+ if ($this->dbsType == 'sql' && $fromConf[1] == '_id')
+ $fromConf[1] = $rel['primary'];
+ $hasJoin[] = $this->_hasJoin_sql($key,$rel['table'],$hasCond,$filter,$options);
+ } elseif ($result = $this->_hasRefsIn($key,$has_filter,$has_options,$ttl))
+ $addToFilter = array($key.' IN ?', $result);
+ break;
+ default:
+ trigger_error(self::E_HAS_COND);
+ }
+ if (isset($result) && !isset($addToFilter))
+ return false;
+ elseif (isset($addToFilter)) {
+ if (!$filter)
+ $filter = array('');
+ if (!empty($filter[0]))
+ $filter[0] .= ' and ';
+ $filter[0] .= '('.array_shift($addToFilter).')';
+ $filter = array_merge($filter, $addToFilter);
+ }
+ }
+ $this->hasCond = null;
+ }
+ $filter = $this->queryParser->prepareFilter($filter,$this->dbsType,$this->fieldConf);
+ if ($this->dbsType=='sql') {
+ $qtable = $this->db->quotekey($this->table);
+ if (isset($options['order']) && $this->db->driver() == 'pgsql')
+ // PostgreSQLism: sort NULL values to the end of a table
+ $options['order'] = preg_replace('/\h+DESC/i',' DESC NULLS LAST',$options['order']);
+ if (!empty($hasJoin)) {
+ // assemble full sql query
+ $adhoc='';
+ if ($count)
+ $sql = 'SELECT COUNT(*) AS '.$this->db->quotekey('rows').' FROM '.$qtable;
+ else {
+ if (!empty($this->preBinds)) {
+ $crit = array_shift($filter);
+ $filter = array_merge($this->preBinds,$filter);
+ array_unshift($filter,$crit);
+ }
+ if (!empty($m_refl_adhoc))
+ foreach ($m_refl_adhoc as $key=>$val)
+ $adhoc.=', '.$val['expr'].' AS '.$key;
+ $sql = 'SELECT '.$qtable.'.*'.$adhoc.' FROM '.$qtable;
+ }
+ $sql .= ' '.implode(' ',$hasJoin).' WHERE '.$filter[0];
+ if (!$count) {
+ if (isset($options['group']))
+ $sql .= ' GROUP BY '.$this->_sql_quoteCondition($options['group'], $this->table);
+ if (isset($options['order']))
+ $sql .= ' ORDER BY '.$options['order'];
+ if (preg_match('/mssql|sqlsrv|odbc/', $this->db->driver()) &&
+ (isset($options['limit']) || isset($options['offset']))) {
+ $ofs=isset($options['offset'])?(int)$options['offset']:0;
+ $lmt=isset($options['limit'])?(int)$options['limit']:0;
+ if (strncmp($this->db->version(),'11',2)>=0) {
+ // SQL Server 2012
+ if (!isset($options['order']))
+ $sql.=' ORDER BY '.$this->db->quotekey($this->primary);
+ $sql.=' OFFSET '.$ofs.' ROWS'.($lmt?' FETCH NEXT '.$lmt.' ROWS ONLY':'');
+ } else {
+ // SQL Server 2008
+ $order=(!isset($options['order']))
+ ?($this->db->quotekey($this->table.'.'.$this->primary)):$options['order'];
+ $sql=str_replace('SELECT','SELECT '.($lmt>0?'TOP '.($ofs+$lmt):'').' ROW_NUMBER() '.
+ 'OVER (ORDER BY '.$order.') AS rnum,',$sql);
+ $sql='SELECT * FROM ('.$sql.') x WHERE rnum > '.($ofs);
+ }
+ } else {
+ if (isset($options['limit']))
+ $sql.=' LIMIT '.(int)$options['limit'];
+ if (isset($options['offset']))
+ $sql.=' OFFSET '.(int)$options['offset'];
+ }
+ }
+ unset($filter[0]);
+ $result = $this->db->exec($sql, $filter, $ttl);
+ if ($count)
+ return $result[0]['rows'];
+ foreach ($result as &$record) {
+ // factory new mappers
+ $mapper = clone($this->mapper);
+ $mapper->reset();
+ $m_adhoc = empty($adhoc) ? array() : $m_refl_adhoc;
+ foreach ($record as $key=>$val)
+ if (isset($m_refl_adhoc[$key]))
+ $m_adhoc[$key]['value']=$val;
+ else
+ $mapper->set($key, $val);
+ if (!empty($adhoc)) {
+ $refl = new \ReflectionObject($mapper);
+ $prop = $refl->getProperty('adhoc');
+ $prop->setAccessible(true);
+ $prop->setValue($mapper,$m_adhoc);
+ $prop->setAccessible(false);
+ }
+ $record = $mapper;
+ unset($record, $mapper);
+ }
+ return $result;
+ } elseif (!empty($this->preBinds) && !$count) {
+ // bind values to adhoc queries
+ if (!$filter)
+ // we (PDO) need any filter to bind values
+ $filter = array('1=1');
+ $crit = array_shift($filter);
+ $filter = array_merge($this->preBinds,$filter);
+ array_unshift($filter,$crit);
+ }
+ }
+ return ($count)
+ ? $this->mapper->count($filter,$ttl)
+ : $this->mapper->find($filter,$this->queryParser->prepareOptions($options,$this->dbsType),$ttl);
+ }
+
+ /**
+ * Retrieve first object that satisfies criteria
+ * @param null $filter
+ * @param array $options
+ * @param int $ttl
+ * @return Cortex
+ */
+ public function load($filter = NULL, array $options = NULL, $ttl = 0)
+ {
+ $this->reset();
+ $this->_ttl=$ttl?:$this->rel_ttl;
+ $res = $this->filteredFind($filter, $options, $ttl);
+ if ($res) {
+ $this->mapper->query = $res;
+ $this->first();
+ } else
+ $this->mapper->reset();
+ $this->emit('load');
+ return $this;
+ }
+
+ /**
+ * add has-conditional filter to next find call
+ * @param string $key
+ * @param array $filter
+ * @param null $options
+ * @return $this
+ */
+ public function has($key, $filter, $options = null) {
+ if (!isset($this->fieldConf[$key]))
+ trigger_error(sprintf(self::E_UNKNOWN_FIELD,$key,get_called_class()));
+ if (!isset($this->fieldConf[$key]['relType']))
+ trigger_error(self::E_HAS_COND);
+ if (is_string($filter))
+ $filter=array($filter);
+ $this->hasCond[$key] = array($filter,$options);
+ return $this;
+ }
+
+ /**
+ * return IDs of records that has a linkage to this mapper
+ * @param string $key relation field
+ * @param array $filter condition for foreign records
+ * @param array $options filter options for foreign records
+ * @param int $ttl
+ * @return array|false
+ */
+ protected function _hasRefsIn($key, $filter, $options, $ttl = 0)
+ {
+ $type = $this->fieldConf[$key]['relType'];
+ $fieldConf = $this->fieldConf[$key][$type];
+ if (!is_array($fieldConf))
+ // one-to-many shortcut
+ $fieldConf = array($fieldConf, '_id');
+ $rel = $this->getRelInstance($fieldConf[0],null,$key);
+ if($this->dbsType=='sql' && $fieldConf[1] == '_id')
+ $fieldConf[1] = $rel->primary;
+ $hasSet = $rel->find($filter, $options, $ttl);
+ if (!$hasSet)
+ return false;
+ $hasSetByRelId = array_unique($hasSet->getAll($fieldConf[1], true));
+ return empty($hasSetByRelId) ? false : $hasSetByRelId;
+ }
+
+ /**
+ * return IDs of own mappers that match the given relation filter on pivot tables
+ * @param string $key
+ * @param array $filter
+ * @param array $options
+ * @param int $ttl
+ * @return array|false
+ */
+ protected function _hasRefsInMM($key, $filter, $options, $ttl=0)
+ {
+ $fieldConf = $this->fieldConf[$key]['has-many'];
+ $rel = $this->getRelInstance($fieldConf[0],null,$key);
+ $hasSet = $rel->find($filter,$options,$ttl);
+ $result = false;
+ if ($hasSet) {
+ $hasIDs = $hasSet->getAll('_id',true);
+ if (!array_key_exists('refTable', $fieldConf)) {
+ $mmTable = isset($fieldConf[2]) ? $fieldConf[2] :
+ static::getMMTableName($fieldConf['relTable'],
+ $fieldConf['relField'], $this->getTable(), $key);
+ $this->fieldConf[$key]['has-many']['refTable'] = $mmTable;
+ } else
+ $mmTable = $fieldConf['refTable'];
+ $pivot = $this->getRelInstance(null,array('db'=>$this->db,'table'=>$mmTable));
+ $pivotSet = $pivot->find(array($key.' IN ?',$hasIDs),null,$ttl);
+ if ($pivotSet)
+ $result = array_unique($pivotSet->getAll($fieldConf['relField'],true));
+ }
+ return $result;
+ }
+
+ /**
+ * build query for SQL pivot table join and merge conditions
+ */
+ protected function _hasJoinMM_sql($key, $hasCond, &$filter, &$options)
+ {
+ $fieldConf = $this->fieldConf[$key]['has-many'];
+ $hasJoin = array();
+ if (!array_key_exists('refTable', $fieldConf)) {
+ // compute mm table name
+ $mmTable = isset($fieldConf[2]) ? $fieldConf[2] :
+ static::getMMTableName($fieldConf['relTable'],
+ $fieldConf['relField'], $this->getTable(), $key);
+ $this->fieldConf[$key]['has-many']['refTable'] = $mmTable;
+ } else
+ $mmTable = $fieldConf['refTable'];
+ $hasJoin[] = $this->_sql_left_join($this->primary,$this->table,$fieldConf['relField'],$mmTable);
+ $hasJoin[] = $this->_sql_left_join($key,$mmTable,$fieldConf['relPK'],$fieldConf['relTable']);
+ $this->_sql_mergeRelCondition($hasCond,$fieldConf['relTable'],$filter,$options);
+ return $hasJoin;
+ }
+
+ /**
+ * build query for single SQL table join and merge conditions
+ */
+ protected function _hasJoin_sql($key, $table, $cond, &$filter, &$options)
+ {
+ $relConf = $this->fieldConf[$key]['belongs-to-one'];
+ $relModel = is_array($relConf)?$relConf[0]:$relConf;
+ $rel = $this->getRelInstance($relModel,null,$key);
+ $fkey = is_array($this->fieldConf[$key]['belongs-to-one']) ?
+ $this->fieldConf[$key]['belongs-to-one'][1] : $rel->primary;
+ $query = $this->_sql_left_join($key,$this->table,$fkey,$table);
+ $this->_sql_mergeRelCondition($cond,$table,$filter,$options);
+ return $query;
+ }
+
+ /**
+ * assemble SQL join query string
+ */
+ protected function _sql_left_join($skey,$sTable,$fkey,$fTable)
+ {
+ $skey = $this->db->quotekey($skey);
+ $sTable = $this->db->quotekey($sTable);
+ $fkey = $this->db->quotekey($fkey);
+ $fTable = $this->db->quotekey($fTable);
+ return 'LEFT JOIN '.$fTable.' ON '.$sTable.'.'.$skey.' = '.$fTable.'.'.$fkey;
+ }
+
+ /**
+ * merge condition of relation with current condition
+ * @param array $cond condition of related model
+ * @param string $table table of related model
+ * @param array $filter current filter to merge with
+ * @param array $options current options to merge with
+ */
+ protected function _sql_mergeRelCondition($cond, $table, &$filter, &$options)
+ {
+ $table = $this->db->quotekey($table);
+ if (!empty($cond[0])) {
+ $whereClause = '('.array_shift($cond[0]).')';
+ $whereClause = $this->_sql_quoteCondition($whereClause,$table);
+ if (!$filter)
+ $filter = array($whereClause);
+ elseif (!empty($filter[0]))
+ $filter[0] = '('.$this->_sql_quoteCondition($filter[0],
+ $this->db->quotekey($this->table)).') and '.$whereClause;
+ $filter = array_merge($filter, $cond[0]);
+ }
+ if ($cond[1] && isset($cond[1]['group'])) {
+ $hasGroup = preg_replace('/(\w+)/i', $table.'.$1', $cond[1]['group']);
+ $options['group'] .= ','.$hasGroup;
+ }
+ }
+
+ protected function _sql_quoteCondition($cond, $table)
+ {
+ $db = $this->db;
+ if (preg_match('/[`\'"\[\]]/i',$cond))
+ return $cond;
+ return preg_replace_callback('/\w+/i',function($match) use($table,$db) {
+ if (preg_match('/\b(AND|OR|IN|LIKE|NOT)\b/i',$match[0]))
+ return $match[0];
+ return $table.'.'.$db->quotekey($match[0]);
+ }, $cond);
+ }
+
+ /**
+ * add filter for loading related models
+ * @param string $key
+ * @param array $filter
+ * @param array $option
+ * @return $this
+ */
+ public function filter($key,$filter=null,$option=null)
+ {
+ $this->relFilter[$key] = array($filter,$option);
+ return $this;
+ }
+
+ /**
+ * removes one or all relation filter
+ * @param null|string $key
+ */
+ public function clearFilter($key = null)
+ {
+ if (!$key)
+ $this->relFilter = array();
+ elseif(isset($this->relFilter[$key]))
+ unset($this->relFilter[$key]);
+ }
+
+ /**
+ * merge the relation filter to the query criteria if it exists
+ * @param string $key
+ * @param array $crit
+ * @return array
+ */
+ protected function mergeWithRelFilter($key,$crit)
+ {
+ if (array_key_exists($key, $this->relFilter) &&
+ !empty($this->relFilter[$key][0]))
+ {
+ $filter = $this->relFilter[$key][0];
+ $crit[0] .= ' and '.array_shift($filter);
+ $crit = array_merge($crit, $filter);
+ }
+ return $crit;
+ }
+
+ /**
+ * returns the option condition for a relation filter, if defined
+ * @param string $key
+ * @return array null
+ */
+ protected function getRelFilterOption($key)
+ {
+ return (array_key_exists($key, $this->relFilter) &&
+ !empty($this->relFilter[$key][1]))
+ ? $this->relFilter[$key][1] : null;
+ }
+
+ /**
+ * Delete object/s and reset ORM
+ * @param $filter
+ * @return void
+ */
+ public function erase($filter = null)
+ {
+ $filter = $this->queryParser->prepareFilter($filter, $this->dbsType);
+ if ((!$filter && $this->emit('beforeerase')!==false) || $filter) {
+ if ($this->fieldConf) {
+ foreach($this->fieldConf as $field => $conf)
+ if (isset($conf['has-many']) &&
+ $conf['has-many']['hasRel']=='has-many')
+ $this->set($field,null);
+ $this->save();
+ }
+ $this->mapper->erase($filter);
+ if (!$filter)
+ $this->emit('aftererase');
+ }
+ }
+
+ /**
+ * Save mapped record
+ * @return mixed
+ **/
+ function save()
+ {
+ if ($new = $this->dry()) {
+ if ($this->emit('beforeinsert')===false)
+ return false;
+ $result=$this->insert();
+ } else {
+ if ($this->emit('beforeupdate')===false)
+ return false;
+ $result=$this->update();
+ }
+ // m:m save cascade
+ if (!empty($this->saveCsd)) {
+ $fields = $this->fieldConf;
+ foreach($this->saveCsd as $key => $val) {
+ if($fields[$key]['relType'] == 'has-many') {
+ $relConf = $fields[$key]['has-many'];
+ if (!isset($relConf['refTable'])) {
+ // compute mm table name
+ $mmTable = isset($relConf[2]) ? $relConf[2] :
+ static::getMMTableName($relConf['relTable'],
+ $relConf['relField'], $this->getTable(), $key);
+ $this->fieldConf[$key]['has-many']['refTable'] = $mmTable;
+ } else
+ $mmTable = $relConf['refTable'];
+ $rel = $this->getRelInstance(null, array('db'=>$this->db, 'table'=>$mmTable));
+ $id = $this->get('_id',true);
+ // delete all refs
+ if (is_null($val))
+ $rel->erase(array($relConf['relField'].' = ?', $id));
+ // update refs
+ elseif (is_array($val)) {
+ $rel->erase(array($relConf['relField'].' = ?', $id));
+ foreach($val as $v) {
+ $rel->set($key,$v);
+ $rel->set($relConf['relField'],$id);
+ $rel->save();
+ $rel->reset();
+ }
+ }
+ unset($rel);
+ } elseif($fields[$key]['relType'] == 'has-one') {
+ $val->save();
+ }
+ }
+ }
+ $this->emit($new?'afterinsert':'afterupdate');
+ return $result;
+ }
+
+ /**
+ * Count records that match criteria
+ * @param null $filter
+ * @param int $ttl
+ * @return mixed
+ */
+ public function count($filter = NULL, $ttl = 60)
+ {
+ $has=$this->hasCond;
+ $count=$this->filteredFind($filter,null,$ttl,true);
+ $this->hasCond=$has;
+ return $count;
+ }
+
+ /**
+ * Count records that are currently loaded
+ * @return int
+ */
+ public function loaded() {
+ return count($this->mapper->query);
+ }
+
+ /**
+ * add a virtual field that counts occurring relations
+ * @param $key
+ */
+ public function countRel($key) {
+ if (isset($this->fieldConf[$key])){
+ // one-to-one, one-to-many
+ if ($this->fieldConf[$key]['relType'] == 'belongs-to-one') {
+ if ($this->dbsType == 'sql') {
+ $this->set('count_'.$key,'count('.$key.')');
+ $this->grp_stack=(!$this->grp_stack)?$key:$this->grp_stack.','.$key;
+ } elseif ($this->dbsType == 'mongo')
+ $this->_mongo_addGroup(array(
+ 'keys'=>array($key=>1),
+ 'reduce' => 'prev.count_'.$key.'++;',
+ "initial" => array("count_".$key => 0)
+ ));
+ else
+ trigger_error('Cannot add direct relational counter.');
+ } elseif($this->fieldConf[$key]['relType'] == 'has-many') {
+ $relConf=$this->fieldConf[$key]['has-many'];
+ if ($relConf['hasRel']=='has-many') {
+ // many-to-many
+ if ($this->dbsType == 'sql') {
+ if (!isset($relConf['refTable'])) {
+ // compute mm table name
+ $mmTable = isset($relConf[2]) ? $relConf[2] :
+ static::getMMTableName($relConf['relTable'],
+ $relConf['relField'], $this->getTable(), $key);
+ $this->fieldConf[$key]['has-many']['refTable'] = $mmTable;
+ } else
+ $mmTable = $relConf['refTable'];
+ $filter = array($this->db->quotekey($mmTable).'.'.$this->db->quotekey($relConf['relField'])
+ .' = '.$this->db->quotekey($this->getTable()).'.'.$this->db->quotekey($this->primary));
+ $from=$mmTable;
+ if (array_key_exists($key, $this->relFilter) &&
+ !empty($this->relFilter[$key][0])) {
+ $options=array();
+ $from = $mmTable.' '.$this->_sql_left_join($key,$mmTable,$relConf['relPK'],$relConf['relTable']);
+ $relFilter = $this->relFilter[$key];
+ $this->_sql_mergeRelCondition($relFilter,$relConf['relTable'],$filter,$options);
+ }
+ $filter = $this->queryParser->prepareFilter($filter,$this->dbsType,$this->fieldConf);
+ $crit = array_shift($filter);
+ if (count($filter)>0)
+ $this->preBinds+=$filter;
+ $this->set('count_'.$key,'(select count('.$relConf['relField'].') from '.$from.' where '.
+ $crit.' group by '.$mmTable.'.'.$relConf['relField'].')');
+ } else {
+ // count rel
+ $this->countFields[]=$key;
+ }
+ } elseif($this->fieldConf[$key]['has-many']['hasRel']=='belongs-to-one') {
+ // many-to-one
+ if ($this->dbsType == 'sql') {
+ $fConf=$relConf[0]::resolveConfiguration();
+ $fTable=$this->db->quotekey($fConf['table']);
+ $fKey=$this->db->quotekey($fConf['primary']);
+ $rKey=$this->db->quotekey($relConf[1]);
+ $pKey=$this->db->quotekey($this->primary);
+ $table=$this->db->quotekey($this->getTable());
+ $crit = $fTable.'.'.$rKey.' = '.$table.'.'.$pKey;
+ $filter = $this->mergeWithRelFilter($key,array($crit));
+ $filter = $this->queryParser->prepareFilter($filter,$this->dbsType,$this->fieldConf);
+ $crit = array_shift($filter);
+ if (count($filter)>0)
+ $this->preBinds+=$filter;
+ $this->set('count_'.$key,'(select count('.$fTable.'.'.$fKey.') from '.$fTable.' where '.
+ $crit.' group by '.$fTable.'.'.$rKey.')');
+ } else {
+ // count rel
+ $this->countFields[]=$key;
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * merge mongo group options array
+ * @param $opt
+ */
+ protected function _mongo_addGroup($opt){
+ if (!$this->grp_stack)
+ $this->grp_stack = array('keys'=>array(),'initial'=>array(),'reduce'=>'','finalize'=>'');
+ if (isset($opt['keys']))
+ $this->grp_stack['keys']+=$opt['keys'];
+ if (isset($opt['reduce']))
+ $this->grp_stack['reduce'].=$opt['reduce'];
+ if (isset($opt['initial']))
+ $this->grp_stack['initial']+=$opt['initial'];
+ if (isset($opt['finalize']))
+ $this->grp_stack['finalize'].=$opt['finalize'];
+ }
+
+ /**
+ * Bind value to key
+ * @return mixed
+ * @param $key string
+ * @param $val mixed
+ */
+ function set($key, $val)
+ {
+ $fields = $this->fieldConf;
+ unset($this->fieldsCache[$key]);
+ // pre-process if field config available
+ if (!empty($fields) && isset($fields[$key]) && is_array($fields[$key])) {
+ // handle relations
+ if (isset($fields[$key]['belongs-to-one'])) {
+ // one-to-many, one-to-one
+ if (is_null($val))
+ $val = NULL;
+ elseif (is_object($val) &&
+ !($this->dbsType=='mongo' && $val instanceof \MongoId)) {
+ // fetch fkey from mapper
+ if (!$val instanceof Cortex || $val->dry())
+ trigger_error(self::E_INVALID_RELATION_OBJECT);
+ else {
+ $relConf = $fields[$key]['belongs-to-one'];
+ $rel_field = (is_array($relConf) ? $relConf[1] : '_id');
+ $val = $val->get($rel_field,true);
+ }
+ } elseif ($this->dbsType == 'mongo' && !$val instanceof \MongoId)
+ $val = new \MongoId($val);
+ } elseif (isset($fields[$key]['has-one'])){
+ $relConf = $fields[$key]['has-one'];
+ if (is_null($val)) {
+ $val = $this->get($key);
+ $val->set($relConf[1],NULL);
+ } else {
+ if (!$val instanceof Cortex) {
+ $rel = $this->getRelInstance($relConf[0],null,$key);
+ $rel->load(array('_id = ?', $val));
+ $val = $rel;
+ }
+ $val->set($relConf[1], $this->_id);
+ }
+ $this->saveCsd[$key] = $val;
+ return $val;
+ } elseif (isset($fields[$key]['belongs-to-many'])) {
+ // many-to-many, unidirectional
+ $fields[$key]['type'] = self::DT_JSON;
+ $relConf = $fields[$key]['belongs-to-many'];
+ $rel_field = (is_array($relConf) ? $relConf[1] : '_id');
+ $val = $this->getForeignKeysArray($val, $rel_field, $key);
+ }
+ elseif (isset($fields[$key]['has-many'])) {
+ // many-to-many, bidirectional
+ $relConf = $fields[$key]['has-many'];
+ if ($relConf['hasRel'] == 'has-many') {
+ // custom setter
+ $val = $this->emit('set_'.$key, $val);
+ $val = $this->getForeignKeysArray($val,'_id',$key);
+ $this->saveCsd[$key] = $val; // array of keys
+ return $val;
+ } elseif ($relConf['hasRel'] == 'belongs-to-one') {
+ // TODO: many-to-one, bidirectional, inverse way
+ trigger_error("not implemented");
+ }
+ }
+ // convert array content
+ if (is_array($val) && $this->dbsType == 'sql')
+ if ($fields[$key]['type'] == self::DT_SERIALIZED)
+ $val = serialize($val);
+ elseif ($fields[$key]['type'] == self::DT_JSON)
+ $val = json_encode($val);
+ else
+ trigger_error(sprintf(self::E_ARRAY_DATATYPE, $key));
+ // add nullable polyfill
+ if ($val === NULL && ($this->dbsType == 'jig' || $this->dbsType == 'mongo')
+ && array_key_exists('nullable', $fields[$key]) && $fields[$key]['nullable'] === false)
+ trigger_error(sprintf(self::E_NULLABLE_COLLISION,$key));
+ // MongoId shorthand
+ if ($this->dbsType == 'mongo' && !$val instanceof \MongoId) {
+ if ($key == '_id')
+ $val = new \MongoId($val);
+ elseif (preg_match('/INT/i',$fields[$key]['type'])
+ && !isset($fields[$key]['relType']))
+ $val = (int) $val;
+ }
+ if (preg_match('/BOOL/i',$fields[$key]['type'])) {
+ $val = !$val || $val==='false' ? false : (bool) $val;
+ if ($this->dbsType == 'sql')
+ $val = (int) $val;
+ }
+ }
+ // fluid SQL
+ if ($this->fluid && $this->dbsType == 'sql') {
+ $schema = new Schema($this->db);
+ $table = $schema->alterTable($this->table);
+ // add missing field
+ if(!in_array($key,$table->getCols())) {
+ // determine data type
+ if (is_int($val)) $type = $schema::DT_INT;
+ elseif (is_double($val)) $type = $schema::DT_DOUBLE;
+ elseif (is_float($val)) $type = $schema::DT_FLOAT;
+ elseif (is_bool($val)) $type = $schema::DT_BOOLEAN;
+ elseif (date('Y-m-d H:i:s', strtotime($val)) == $val) $type = $schema::DT_DATETIME;
+ elseif (date('Y-m-d', strtotime($val)) == $val) $type = $schema::DT_DATE;
+ elseif (\UTF::instance()->strlen($val)<=255) $type = $schema::DT_VARCHAR256;
+ else $type = $schema::DT_TEXT;
+ $table->addColumn($key)->type($type);
+ $table->build();
+ // update mapper fields
+ $newField = $table->getCols(true);
+ $newField = $newField[$key];
+ $refl = new \ReflectionObject($this->mapper);
+ $prop = $refl->getProperty('fields');
+ $prop->setAccessible(true);
+ $fields = $prop->getValue($this->mapper);
+ $fields[$key] = $newField + array('value'=>NULL,'changed'=>NULL);
+ $prop->setValue($this->mapper,$fields);
+ }
+ }
+ // custom setter
+ $val = $this->emit('set_'.$key, $val);
+ return $this->mapper->set($key, $val);
+ }
+
+ /**
+ * call custom field handlers
+ * @param $event
+ * @param $val
+ * @return mixed
+ */
+ protected function emit($event, $val=null)
+ {
+ if (isset($this->trigger[$event])) {
+ if (preg_match('/^[sg]et_/',$event)) {
+ $val = (is_string($f=$this->trigger[$event])
+ && preg_match('/^[sg]et_/',$f))
+ ? call_user_func(array($this,$event),$val)
+ : \Base::instance()->call($f,array($this,$val));
+ } else
+ $val = \Base::instance()->call($this->trigger[$event],array($this,$val));
+ } elseif (preg_match('/^[sg]et_/',$event) && method_exists($this,$event)) {
+ $this->trigger[] = $event;
+ $val = call_user_func(array($this,$event),$val);
+ }
+ return $val;
+ }
+
+ /**
+ * Define a custom field setter
+ * @param $key
+ * @param $func
+ */
+ public function onset($key,$func) {
+ $this->trigger['set_'.$key] = $func;
+ }
+
+ /**
+ * Define a custom field getter
+ * @param $key
+ * @param $func
+ */
+ public function onget($key,$func) {
+ $this->trigger['get_'.$key] = $func;
+ }
+
+ /**
+ * virtual mapper field setter
+ * @param string $key
+ * @param mixed|callback $val
+ * @return mixed|null
+ */
+ public function virtual($key,$val) {
+ $this->vFields[$key]=$val;
+ }
+
+ /**
+ * Retrieve contents of key
+ * @return mixed
+ * @param string $key
+ * @param bool $raw
+ */
+ function &get($key,$raw = false)
+ {
+ // handle virtual fields
+ if (isset($this->vFields[$key])) {
+ $out = (is_callable($this->vFields[$key]))
+ ? call_user_func($this->vFields[$key], $this) : $this->vFields[$key];
+ return $out;
+ }
+ $fields = $this->fieldConf;
+ $id = ($this->dbsType == 'sql') ? $this->primary : '_id';
+ if ($key == '_id' && $this->dbsType == 'sql')
+ $key = $id;
+ if ($this->whitelist && !in_array($key,$this->whitelist)) {
+ $out = null;
+ return $out;
+ }
+ if ($raw) {
+ $out = $this->exists($key) ? $this->mapper->{$key} : NULL;
+ return $out;
+ }
+ if (!empty($fields) && isset($fields[$key]) && is_array($fields[$key])
+ && !array_key_exists($key,$this->fieldsCache)) {
+ // load relations
+ if (isset($fields[$key]['belongs-to-one'])) {
+ // one-to-X, bidirectional, direct way
+ if (!$this->exists($key) || is_null($this->mapper->{$key}))
+ $this->fieldsCache[$key] = null;
+ else {
+ // get config for this field
+ $relConf = $fields[$key]['belongs-to-one'];
+ if (!is_array($relConf))
+ $relConf = array($relConf, '_id');
+ // fetch related model
+ $rel = $this->getRelInstance($relConf[0],null,$key);
+ if ($this->dbsType == 'sql' && $relConf[1] == '_id')
+ $relConf[1] = $rel->primary;
+ // am i part of a result collection?
+ if ($this->collectionID && $this->smartLoading) {
+ $cx = CortexCollection::instance($this->collectionID);
+ // does the collection has cached results for this key?
+ if (!$cx->hasRelSet($key)) {
+ // build the cache, find all values of current key
+ $relKeys = array_unique($cx->getAll($key,true));
+ // find related models
+ $crit = array($relConf[1].' IN ?', $relKeys);
+ $relSet = $rel->find($this->mergeWithRelFilter($key, $crit),
+ $this->getRelFilterOption($key),$this->_ttl);
+ // cache relSet, sorted by ID
+ $cx->setRelSet($key, $relSet ? $relSet->getBy($relConf[1]) : NULL);
+ }
+ // get a subset of the preloaded set
+ $result = $cx->getSubset($key,(string) $this->get($key,true));
+ $this->fieldsCache[$key] = $result ? $result[0] : NULL;
+ } else {
+ $crit = array($relConf[1].' = ?', $this->get($key, true));
+ $crit = $this->mergeWithRelFilter($key, $crit);
+ $this->fieldsCache[$key] = $rel->findone($crit,
+ $this->getRelFilterOption($key),$this->_ttl);
+ }
+ }
+ }
+ elseif (($type = isset($fields[$key]['has-one']))
+ || isset($fields[$key]['has-many'])) {
+ $type = $type ? 'has-one' : 'has-many';
+ $fromConf = $fields[$key][$type];
+ if (!is_array($fromConf))
+ trigger_error(sprintf(self::E_REL_CONF_INC, $key));
+ $rel = $this->getRelInstance($fromConf[0],null,$key);
+ $relFieldConf = $rel->getFieldConfiguration();
+ $relType = key($relFieldConf[$fromConf[1]]);
+ // one-to-*, bidirectional, inverse way
+ if ($relType == 'belongs-to-one') {
+ $toConf = $relFieldConf[$fromConf[1]]['belongs-to-one'];
+ if(!is_array($toConf))
+ $toConf = array($toConf, $id);
+ if ($toConf[1] != $id && (!$this->exists($toConf[1])
+ || is_null($this->mapper->get($toConf[1]))))
+ $this->fieldsCache[$key] = null;
+ elseif($this->collectionID && $this->smartLoading) {
+ // part of a result set
+ $cx = CortexCollection::instance($this->collectionID);
+ if(!$cx->hasRelSet($key)) {
+ // emit eager loading
+ $relKeys = $cx->getAll($toConf[1],true);
+ $crit = array($fromConf[1].' IN ?', $relKeys);
+ $relSet = $rel->find($this->mergeWithRelFilter($key,$crit),
+ $this->getRelFilterOption($key),$this->_ttl);
+ $cx->setRelSet($key, $relSet ? $relSet->getBy($fromConf[1],true) : NULL);
+ }
+ $result = $cx->getSubset($key, array($this->get($toConf[1])));
+ $this->fieldsCache[$key] = $result ? (($type == 'has-one')
+ ? $result[0][0] : $result[0]) : NULL;
+ } else {
+ $crit = array($fromConf[1].' = ?', $this->get($toConf[1],true));
+ $crit = $this->mergeWithRelFilter($key, $crit);
+ $opt = $this->getRelFilterOption($key);
+ $this->fieldsCache[$key] = (($type == 'has-one')
+ ? $rel->findone($crit,$opt,$this->_ttl)
+ : $rel->find($crit,$opt,$this->_ttl)) ?: NULL;
+ }
+ }
+ // many-to-many, bidirectional
+ elseif ($relType == 'has-many') {
+ if (!array_key_exists('refTable', $fromConf)) {
+ // compute mm table name
+ $toConf = $relFieldConf[$fromConf[1]]['has-many'];
+ $mmTable = isset($fromConf[2]) ? $fromConf[2] :
+ static::getMMTableName($fromConf['relTable'],
+ $fromConf['relField'], $this->getTable(), $key, $toConf);
+ $this->fieldConf[$key]['has-many']['refTable'] = $mmTable;
+ } else
+ $mmTable = $fromConf['refTable'];
+ // create mm table mapper
+ $rel = $this->getRelInstance(null,array('db'=>$this->db,'table'=>$mmTable));
+ if ($this->collectionID && $this->smartLoading) {
+ $cx = CortexCollection::instance($this->collectionID);
+ if (!$cx->hasRelSet($key)) {
+ // get IDs of all results
+ $relKeys = $cx->getAll($id,true);
+ // get all pivot IDs
+ $mmRes = $rel->find(array($fromConf['relField'].' IN ?', $relKeys),null,$this->_ttl);
+ if (!$mmRes)
+ $cx->setRelSet($key, NULL);
+ else {
+ $pivotRel = array();
+ $pivotKeys = array();
+ foreach($mmRes as $model) {
+ $val = $model->get($key,true);
+ $pivotRel[ (string) $model->get($fromConf['relField'])][] = $val;
+ $pivotKeys[] = $val;
+ }
+ // cache pivot keys
+ $cx->setRelSet($key.'_pivot', $pivotRel);
+ // preload all rels
+ $pivotKeys = array_unique($pivotKeys);
+ $fRel = $this->getRelInstance($fromConf[0],null,$key);
+ $crit = array(($fRel->primary!='id' ? $fRel->primary : '_id').' IN ?', $pivotKeys);
+ $relSet = $fRel->find($this->mergeWithRelFilter($key, $crit),
+ $this->getRelFilterOption($key),$this->_ttl);
+ $cx->setRelSet($key, $relSet ? $relSet->getBy($id) : NULL);
+ unset($fRel);
+ }
+ }
+ // fetch subset from preloaded rels using cached pivot keys
+ $fkeys = $cx->getSubset($key.'_pivot', array($this->get($id)));
+ $this->fieldsCache[$key] = $fkeys ? $cx->getSubset($key, $fkeys[0]) : NULL;
+ } // no collection
+ else {
+ // find foreign keys
+ $results = $rel->find(
+ array($fromConf['relField'].' = ?', $this->get($id,true)),null,$this->_ttl);
+ if(!$results)
+ $this->fieldsCache[$key] = NULL;
+ else {
+ $fkeys = $results->getAll($key,true);
+ // create foreign table mapper
+ unset($rel);
+ $rel = $this->getRelInstance($fromConf[0],null,$key);
+ // load foreign models
+ $filter = array(($rel->primary!='id' ? $rel->primary : '_id').' IN ?', $fkeys);
+ $filter = $this->mergeWithRelFilter($key, $filter);
+ $this->fieldsCache[$key] = $rel->find($filter,
+ $this->getRelFilterOption($key),$this->_ttl);
+ }
+ }
+ }
+ }
+ elseif (isset($fields[$key]['belongs-to-many'])) {
+ // many-to-many, unidirectional
+ $fields[$key]['type'] = self::DT_JSON;
+ $result = !$this->exists($key) ? null :$this->mapper->get($key);
+ if ($this->dbsType == 'sql')
+ $result = json_decode($result, true);
+ if (!is_array($result))
+ $this->fieldsCache[$key] = $result;
+ else {
+ // create foreign table mapper
+ $relConf = $fields[$key]['belongs-to-many'];
+ if (!is_array($relConf))
+ $relConf = array($relConf, '_id');
+ $rel = $this->getRelInstance($relConf[0],null,$key);
+ if ($this->dbsType == 'sql' && $relConf[1] == '_id')
+ $relConf[1] = $rel->primary;
+ $fkeys = array();
+ foreach ($result as $el)
+ $fkeys[] = is_int($el)||ctype_digit($el)?(int)$el:(string)$el;
+ // if part of a result set
+ if ($this->collectionID && $this->smartLoading) {
+ $cx = CortexCollection::instance($this->collectionID);
+ if (!$cx->hasRelSet($key)) {
+ // find all keys
+ $relKeys = ($cx->getAll($key,true));
+ if ($this->dbsType == 'sql'){
+ foreach ($relKeys as &$val) {
+ $val = substr($val, 1, -1);
+ unset($val);
+ }
+ $relKeys = json_decode('['.implode(',',$relKeys).']');
+ } else
+ $relKeys = call_user_func_array('array_merge', $relKeys);
+ // get related models
+ $crit = array($relConf[1].' IN ?', array_unique($relKeys));
+ $relSet = $rel->find($this->mergeWithRelFilter($key, $crit),
+ $this->getRelFilterOption($key),$this->_ttl);
+ // cache relSet, sorted by ID
+ $cx->setRelSet($key, $relSet ? $relSet->getBy($relConf[1]) : NULL);
+ }
+ // get a subset of the preloaded set
+ $this->fieldsCache[$key] = $cx->getSubset($key, $fkeys);
+ } else {
+ // load foreign models
+ $filter = array($relConf[1].' IN ?', $fkeys);
+ $filter = $this->mergeWithRelFilter($key, $filter);
+ $this->fieldsCache[$key] = $rel->find($filter,
+ $this->getRelFilterOption($key),$this->_ttl);
+ }
+ }
+ }
+ // resolve array fields
+ elseif (isset($fields[$key]['type'])) {
+ if ($this->dbsType == 'sql') {
+ if ($fields[$key]['type'] == self::DT_SERIALIZED)
+ $this->fieldsCache[$key] = unserialize($this->mapper->{$key});
+ elseif ($fields[$key]['type'] == self::DT_JSON)
+ $this->fieldsCache[$key] = json_decode($this->mapper->{$key},true);
+ }
+ if ($this->exists($key) && preg_match('/BOOL/i',$fields[$key]['type'])) {
+ $this->fieldsCache[$key] = (bool) $this->mapper->{$key};
+ }
+ }
+ }
+ // fetch cached value, if existing
+ $val = array_key_exists($key,$this->fieldsCache) ? $this->fieldsCache[$key]
+ : (($this->exists($key)) ? $this->mapper->{$key} : null);
+ if ($this->dbsType == 'mongo' && $val instanceof \MongoId) {
+ // conversion to string makes further processing in template, etc. much easier
+ $val = (string) $val;
+ }
+ // custom getter
+ $out = $this->emit('get_'.$key, $val);
+ return $out;
+ }
+
+ /**
+ * find the ID values of given relation collection
+ * @param $val string|array|object|bool
+ * @param $rel_field string
+ * @param $key string
+ * @return array|Cortex|null|object
+ */
+ protected function getForeignKeysArray($val, $rel_field, $key)
+ {
+ if (is_null($val))
+ return NULL;
+ if (is_object($val) && $val instanceof CortexCollection)
+ $val = $val->expose();
+ elseif (is_string($val))
+ // split-able string of collection IDs
+ $val = \Base::instance()->split($val);
+ elseif (!is_array($val) && !(is_object($val)
+ && ($val instanceof Cortex && !$val->dry())))
+ trigger_error(sprintf(self::E_MM_REL_VALUE, $key));
+ // hydrated mapper as collection
+ if (is_object($val)) {
+ $nval = array();
+ while (!$val->dry()) {
+ $nval[] = $val->get($rel_field,true);
+ $val->next();
+ }
+ $val = $nval;
+ }
+ elseif (is_array($val)) {
+ // array of single hydrated mappers, raw ID value or mixed
+ $isMongo = ($this->dbsType == 'mongo');
+ foreach ($val as &$item) {
+ if (is_object($item) &&
+ !($isMongo && $item instanceof \MongoId)) {
+ if (!$item instanceof Cortex || $item->dry())
+ trigger_error(self::E_INVALID_RELATION_OBJECT);
+ else $item = $item->get($rel_field,true);
+ }
+ if ($isMongo && $rel_field == '_id' && is_string($item))
+ $item = new \MongoId($item);
+ if (is_numeric($item))
+ $item = (int) $item;
+ unset($item);
+ }
+ }
+ return $val;
+ }
+
+ /**
+ * creates and caches related mapper objects
+ * @param string $model
+ * @param array $relConf
+ * @param string $key
+ * @return Cortex
+ */
+ protected function getRelInstance($model=null,$relConf=null,$key='')
+ {
+ if (!$model && !$relConf)
+ trigger_error(self::E_MISSING_REL_CONF);
+ $relConf = $model ? $model::resolveConfiguration() : $relConf;
+ $relName = ($model?:'Cortex').'\\'.$relConf['db']->uuid().'\\'.$relConf['table'];
+ if (\Registry::exists($relName)) {
+ $rel = \Registry::get($relName);
+ $rel->reset();
+ } else {
+ $rel = $model ? new $model : new Cortex($relConf['db'], $relConf['table']);
+ if (!$rel instanceof Cortex)
+ trigger_error(self::E_WRONG_RELATION_CLASS);
+ \Registry::set($relName, $rel);
+ }
+ // restrict fields of related mapper
+ if(!empty($key) && isset($this->relWhitelist[$key])) {
+ if (isset($this->relWhitelist[$key][0]))
+ $rel->fields($this->relWhitelist[$key][0],false);
+ if (isset($this->relWhitelist[$key][1]))
+ $rel->fields($this->relWhitelist[$key][1],true);
+ }
+ return $rel;
+ }
+
+ /**
+ * Return fields of mapper object as an associative array
+ * @return array
+ * @param bool|Cortex $obj
+ * @param bool|int $rel_depths depths to resolve relations
+ */
+ public function cast($obj = NULL, $rel_depths = 1)
+ {
+ $fields = $this->mapper->cast( ($obj) ? $obj->mapper : null );
+ if (!empty($this->vFields))
+ foreach(array_keys($this->vFields) as $key)
+ $fields[$key]=$this->get($key);
+ if (is_int($rel_depths))
+ $rel_depths--;
+ if (!empty($this->fieldConf)) {
+ $fields += array_fill_keys(array_keys($this->fieldConf),NULL);
+ if($this->whitelist)
+ $fields = array_intersect_key($fields, array_flip($this->whitelist));
+ $mp = $obj ? : $this;
+ foreach ($fields as $key => &$val) {
+ // post process configured fields
+ if (isset($this->fieldConf[$key]) && is_array($this->fieldConf[$key])) {
+ // handle relations
+ if (($rel_depths === TRUE || (is_int($rel_depths) && $rel_depths >= 0))
+ && $type=preg_grep('/[belongs|has]-(to-)*[one|many]/',
+ array_keys($this->fieldConf[$key]))) {
+ $relType=$type[0];
+ // cast relations
+ $val = (($relType == 'belongs-to-one' || $relType == 'belongs-to-many')
+ && !$mp->exists($key)) ? NULL : $mp->get($key);
+ if (is_array($val) || is_object($val)) {
+ if ($relType == 'belongs-to-one' || $relType == 'has-one')
+ // single object
+ $val = $val->cast(null, $rel_depths);
+ elseif ($relType == 'belongs-to-many' || $relType == 'has-many')
+ // multiple objects
+ foreach ($val as $k => $item)
+ $val[$k] = is_object($item) ? $item->cast(null, $rel_depths) : null;
+ }
+ if ($val instanceof CortexCollection)
+ $val = $val->expose();
+ }
+ // decode array fields
+ elseif (isset($this->fieldConf[$key]['type'])) {
+ if ($this->dbsType == 'sql') {
+ if ($this->fieldConf[$key]['type'] == self::DT_SERIALIZED)
+ $val=unserialize($this->mapper->{$key});
+ elseif ($this->fieldConf[$key]['type'] == self::DT_JSON)
+ $val=json_decode($this->mapper->{$key}, true);
+ }
+ if ($this->exists($key)
+ && preg_match('/BOOL/i',$this->fieldConf[$key]['type'])) {
+ $val = (bool) $this->mapper->{$key};
+ }
+ }
+ }
+ if ($this->dbsType == 'mongo' && $key == '_id')
+ $val = (string) $val;
+ if ($this->dbsType == 'sql' && $key == 'id' && $this->standardiseID) {
+ $fields['_id'] = $val;
+ unset($fields[$key]);
+ }
+ unset($val);
+ }
+ }
+ // custom getter
+ foreach ($fields as $key => &$val) {
+ $val = $this->emit('get_'.$key, $val);
+ unset($val);
+ }
+ return $fields;
+ }
+
+ /**
+ * cast a related collection of mappers
+ * @param string|array $key array of mapper objects, or field name
+ * @param int $rel_depths depths to resolve relations
+ * @return array array of associative arrays
+ */
+ function castField($key, $rel_depths=0)
+ {
+ if (!$key)
+ return NULL;
+ $mapper_arr = $this->get($key);
+ if(!$mapper_arr)
+ return NULL;
+ $out = array();
+ foreach ($mapper_arr as $mp)
+ $out[] = $mp->cast(null,$rel_depths);
+ return $out;
+ }
+
+ /**
+ * wrap result mapper
+ * @param Cursor|array $mapper
+ * @return Cortex
+ */
+ protected function factory($mapper)
+ {
+ if (is_array($mapper)) {
+ $mp = clone($this->mapper);
+ $mp->reset();
+ $cx = $this->factory($mp);
+ $cx->copyfrom($mapper);
+ } else {
+ $cx = clone($this);
+ $cx->reset(false);
+ $cx->mapper = $mapper;
+ }
+ $cx->emit('load');
+ return $cx;
+ }
+
+ public function dry() {
+ return $this->mapper->dry();
+ }
+
+ /**
+ * hydrate the mapper from hive key or given array
+ * @param string|array $key
+ * @param callback|array|string $fields
+ * @return NULL
+ */
+ public function copyfrom($key, $fields = null)
+ {
+ $f3 = \Base::instance();
+ $srcfields = is_array($key) ? $key : $f3->get($key);
+ if ($fields)
+ if (is_callable($fields))
+ $srcfields = $fields($srcfields);
+ else {
+ if (is_string($fields))
+ $fields = $f3->split($fields);
+ $srcfields = array_intersect_key($srcfields, array_flip($fields));
+ }
+ foreach ($srcfields as $key => $val) {
+ if (isset($this->fieldConf[$key]) && isset($this->fieldConf[$key]['type'])) {
+ if ($this->fieldConf[$key]['type'] == self::DT_JSON && is_string($val))
+ $val = json_decode($val);
+ elseif ($this->fieldConf[$key]['type'] == self::DT_SERIALIZED && is_string($val))
+ $val = unserialize($val);
+ }
+ $this->set($key, $val);
+ }
+ }
+
+ /**
+ * copy mapper values into hive key
+ * @param string $key the hive key to copy into
+ * @param int $relDepth the depth of relations to resolve
+ * @return NULL|void
+ */
+ public function copyto($key, $relDepth=0) {
+ \Base::instance()->set($key, $this->cast(null,$relDepth));
+ }
+
+ public function skip($ofs = 1)
+ {
+ $this->reset(false);
+ if ($this->mapper->skip($ofs))
+ return $this;
+ else
+ $this->reset(false);
+ }
+
+ public function first()
+ {
+ $this->reset(false);
+ $this->mapper->first();
+ return $this;
+ }
+
+ public function last()
+ {
+ $this->reset(false);
+ $this->mapper->last();
+ return $this;
+ }
+
+ /**
+ * reset and re-initialize the mapper
+ * @param bool $mapper
+ * @return NULL|void
+ */
+ public function reset($mapper = true)
+ {
+ if ($mapper)
+ $this->mapper->reset();
+ $this->fieldsCache=array();
+ $this->saveCsd=array();
+ $this->countFields=array();
+ $this->preBinds=array();
+ $this->grp_stack=null;
+ // set default values
+ if (($this->dbsType == 'jig' || $this->dbsType == 'mongo')
+ && !empty($this->fieldConf))
+ foreach($this->fieldConf as $field_key => $field_conf)
+ if (array_key_exists('default',$field_conf)) {
+ $val = ($field_conf['default'] === \DB\SQL\Schema::DF_CURRENT_TIMESTAMP)
+ ? date('Y-m-d H:i:s') : $field_conf['default'];
+ $this->set($field_key, $val);
+ }
+ }
+
+ /**
+ * check if a certain field exists in the mapper or
+ * or is a virtual relation field
+ * @param string $key
+ * @param bool $relField
+ * @return bool
+ */
+ function exists($key, $relField = false) {
+ if (!$this->dry() && $key == '_id') return true;
+ return $this->mapper->exists($key) ||
+ ($relField && isset($this->fieldConf[$key]['relType']));
+ }
+
+ /**
+ * clear any mapper field or relation
+ * @param string $key
+ * @return NULL|void
+ */
+ function clear($key) {
+ unset($this->fieldsCache[$key]);
+ if (isset($this->fieldConf[$key]['relType']))
+ $this->set($key,null);
+ $this->mapper->clear($key);
+ }
+
+ function insert() {
+ $res = $this->mapper->insert();
+ if (is_array($res))
+ $res = $this->mapper;
+ if (is_object($res))
+ $res = $this->factory($res);
+ return is_int($res) ? $this : $res;
+ }
+
+ function update() {
+ $res = $this->mapper->update();
+ if (is_array($res))
+ $res = $this->mapper;
+ if (is_object($res))
+ $res = $this->factory($res);
+ return is_int($res) ? $this : $res;
+ }
+
+ function dbtype() {
+ return $this->mapper->dbtype();
+ }
+
+ public function __destruct() {
+ unset($this->mapper);
+ }
+
+ public function __clone() {
+ $this->mapper = clone($this->mapper);
+ }
+
+ function getiterator() {
+// return new \ArrayIterator($this->cast(null,false));
+ return new \ArrayIterator(array());
+ }
+}
+
+
+class CortexQueryParser extends \Prefab {
+
+ const
+ E_BRACKETS = 'Invalid query: unbalanced brackets found',
+ E_INBINDVALUE = 'Bind value for IN operator must be a populated array',
+ E_ENGINEERROR = 'Engine not supported',
+ E_MISSINGBINDKEY = 'Named bind parameter `%s` does not exist in filter arguments';
+
+ protected
+ $queryCache = array();
+
+ /**
+ * converts the given filter array to fit the used DBS
+ *
+ * example filter:
+ * array('text = ? AND num = ?','bar',5)
+ * array('num > ? AND num2 <= ?',5,10)
+ * array('num1 > num2')
+ * array('text like ?','%foo%')
+ * array('(text like ? OR text like ?) AND num != ?','foo%','%bar',23)
+ *
+ * @param array $cond
+ * @param string $engine
+ * @param null $fieldConf
+ * @return array|bool|null
+ */
+ public function prepareFilter($cond, $engine,$fieldConf=null)
+ {
+ if (is_null($cond)) return $cond;
+ if (is_string($cond))
+ $cond = array($cond);
+ $f3 = \Base::instance();
+ $cacheHash = $f3->hash($f3->stringify($cond)).'.'.$engine;
+ if (isset($this->queryCache[$cacheHash]))
+ // load from memory
+ return $this->queryCache[$cacheHash];
+ elseif ($f3->exists('CORTEX.queryParserCache')
+ && ($ttl = (int) $f3->get('CORTEX.queryParserCache'))) {
+ $cache = \Cache::instance();
+ // load from cache
+ if ($f3->get('CACHE') && $ttl && ($cached = $cache->exists($cacheHash, $ncond))
+ && $cached[0] + $ttl > microtime(TRUE)) {
+ $this->queryCache[$cacheHash] = $ncond;
+ return $ncond;
+ }
+ }
+ $where = array_shift($cond);
+ $args = $cond;
+ $where = str_replace(array('&&', '||'), array('AND', 'OR'), $where);
+ // prepare IN condition
+ $where = preg_replace('/\bIN\b\s*\(\s*(\?|:\w+)?\s*\)/i', 'IN $1', $where);
+ switch ($engine) {
+ case 'jig':
+ $ncond = $this->_jig_parse_filter($where, $args);
+ break;
+ case 'mongo':
+ $parts = $this->splitLogical($where);
+ if (is_int(strpos($where, ':')))
+ list($parts, $args) = $this->convertNamedParams($parts, $args);
+ foreach ($parts as &$part) {
+ $part = $this->_mongo_parse_relational_op($part, $args, $fieldConf);
+ unset($part);
+ }
+ $ncond = $this->_mongo_parse_logical_op($parts);
+ break;
+ case 'sql':
+ // preserve identifier
+ $where = preg_replace('/(?!\B)_id/', 'id', $where);
+ $parts = $this->splitLogical($where);
+ // ensure positional bind params
+ if (is_int(strpos($where, ':')))
+ list($parts, $args) = $this->convertNamedParams($parts, $args);
+ $ncond = array();
+ foreach ($parts as &$part) {
+ // enhanced IN handling
+ if (is_int(strpos($part, '?'))) {
+ $val = array_shift($args);
+ if (is_int($pos = strpos($part, 'IN ?'))) {
+ if (!is_array($val) || empty($val))
+ trigger_error(self::E_INBINDVALUE);
+ $bindMarks = str_repeat('?,', count($val) - 1).'?';
+ $part = substr($part, 0, $pos).'IN ('.$bindMarks.')';
+ $ncond = array_merge($ncond, $val);
+ } else
+ $ncond[] = $val;
+ }
+ }
+ array_unshift($ncond, implode(' ', $parts));
+ break;
+ default:
+ trigger_error(self::E_ENGINEERROR);
+ }
+ $this->queryCache[$cacheHash] = $ncond;
+ if(isset($ttl) && $f3->get('CACHE')) {
+ // save to cache
+ $cache = \Cache::instance();
+ $cache->set($cacheHash,$ncond,$ttl);
+ }
+ return $ncond;
+ }
+
+ /**
+ * split where criteria string into logical chunks
+ * @param $cond
+ * @return array
+ */
+ protected function splitLogical($cond)
+ {
+ return preg_split('/\s*((?splitLogical($where);
+ if (is_int(strpos($where, ':')))
+ list($parts, $args) = $this->convertNamedParams($parts, $args);
+ $ncond = array();
+ foreach ($parts as &$part) {
+ if (in_array(strtoupper($part), array('AND', 'OR')))
+ continue;
+ // prefix field names
+ $part = preg_replace('/([a-z_-]+)/i', '@$1', $part, -1, $count);
+ // value comparison
+ if (is_int(strpos($part, '?'))) {
+ $val = array_shift($args);
+ preg_match('/(@\w+)/i', $part, $match);
+ // find like operator
+ if (is_int(strpos($upart = strtoupper($part), ' @LIKE '))) {
+ if ($not = is_int($npos = strpos($upart, '@NOT')))
+ $pos = $npos;
+ $val = $this->_likeValueToRegEx($val);
+ $part = ($not ? '!' : '').'preg_match(?,'.$match[0].')';
+ } // find IN operator
+ else if (is_int($pos = strpos($upart, ' @IN '))) {
+ if ($not = is_int($npos = strpos($upart, '@NOT')))
+ $pos = $npos;
+ $part = ($not ? '!' : '').'in_array('.substr($part, 0, $pos).
+ ',array(\''.implode('\',\'', $val).'\'))';
+ unset($val);
+ }
+ // add existence check
+ $part = '(isset('.$match[0].') && '.$part.')';
+ if (isset($val))
+ $ncond[] = $val;
+ } elseif ($count >= 1) {
+ // field comparison
+ preg_match_all('/(@\w+)/i', $part, $matches);
+ $chks = array();
+ foreach ($matches[0] as $field)
+ $chks[] = 'isset('.$field.')';
+ $part = '('.implode(' && ',$chks).' && ('.$part.'))';
+ }
+ }
+ array_unshift($ncond, implode(' ', $parts));
+ return $ncond;
+ }
+
+ /**
+ * find and wrap logical operators AND, OR, (, )
+ * @param $parts
+ * @return array
+ */
+ protected function _mongo_parse_logical_op($parts)
+ {
+ $b_offset = 0;
+ $ncond = array();
+ $child = array();
+ for ($i = 0, $max = count($parts); $i < $max; $i++) {
+ $part = $parts[$i];
+ if ($part == '(') {
+ // add sub-bracket to parse array
+ if ($b_offset > 0)
+ $child[] = $part;
+ $b_offset++;
+ } elseif ($part == ')') {
+ $b_offset--;
+ // found closing bracket
+ if ($b_offset == 0) {
+ $ncond[] = ($this->_mongo_parse_logical_op($child));
+ $child = array();
+ } elseif ($b_offset < 0)
+ trigger_error(self::E_BRACKETS);
+ else
+ // add sub-bracket to parse array
+ $child[] = $part;
+ } // add to parse array
+ elseif ($b_offset > 0)
+ $child[] = $part;
+ // condition type
+ elseif (!is_array($part)) {
+ if (strtoupper($part) == 'AND')
+ $add = true;
+ elseif (strtoupper($part) == 'OR')
+ $or = true;
+ } else // skip
+ $ncond[] = $part;
+ }
+ if ($b_offset > 0)
+ trigger_error(self::E_BRACKETS);
+ if (isset($add))
+ return array('$and' => $ncond);
+ elseif (isset($or))
+ return array('$or' => $ncond);
+ else
+ return $ncond[0];
+ }
+
+ /**
+ * find and convert relational operators
+ * @param $part
+ * @param $args
+ * @param null $fieldConf
+ * @return array|null
+ */
+ protected function _mongo_parse_relational_op($part, &$args, $fieldConf=null)
+ {
+ if (is_null($part))
+ return $part;
+ if (preg_match('/\<\=|\>\=|\<\>|\<|\>|\!\=|\=\=|\=|like|not like|in|not in/i', $part, $match)) {
+ $var = is_int(strpos($part, '?')) ? array_shift($args) : null;
+ $exp = explode($match[0], $part);
+ $key = trim($exp[0]);
+ // unbound value
+ if (is_numeric($exp[1]))
+ $var = $exp[1];
+ // field comparison
+ elseif (!is_int(strpos($exp[1], '?')))
+ return array('$where' => 'this.'.$key.' '.$match[0].' this.'.trim($exp[1]));
+ $upart = strtoupper($match[0]);
+ // MongoID shorthand
+ if ($key == '_id' || (isset($fieldConf[$key]) && isset($fieldConf[$key]['relType']))) {
+ if (is_array($var))
+ foreach ($var as &$id) {
+ if (!$id instanceof \MongoId)
+ $id = new \MongoId($id);
+ unset($id);
+ }
+ elseif(!$var instanceof \MongoId)
+ $var = new \MongoId($var);
+ }
+ // find LIKE operator
+ if (in_array($upart, array('LIKE','NOT LIKE'))) {
+ $rgx = $this->_likeValueToRegEx($var);
+ $var = new \MongoRegex($rgx);
+ if ($upart == 'NOT LIKE')
+ $var = array('$not' => $var);
+ } // find IN operator
+ elseif (in_array($upart, array('IN','NOT IN'))) {
+ $var = array(($upart=='NOT IN')?'$nin':'$in' => array_values($var));
+ } // translate operators
+ elseif (!in_array($match[0], array('==', '='))) {
+ $opr = str_replace(array('<>', '<', '>', '!', '='),
+ array('$ne', '$lt', '$gt', '$n', 'e'), $match[0]);
+ $var = array($opr => (strtolower($var) == 'null') ? null :
+ (is_object($var) ? $var : (is_numeric($var) ? $var + 0 : $var)));
+ }
+ return array($key => $var);
+ }
+ return $part;
+ }
+
+ /**
+ * @param string $var
+ * @return string
+ */
+ protected function _likeValueToRegEx($var)
+ {
+ $lC = substr($var, -1, 1);
+ // %var% -> /var/
+ if ($var[0] == '%' && $lC == '%')
+ $var = '/'.substr($var, 1, -1).'/';
+ // var% -> /^var/
+ elseif ($lC == '%')
+ $var = '/^'.substr($var, 0, -1).'/';
+ // %var -> /var$/
+ elseif ($var[0] == '%')
+ $var = '/'.substr($var, 1).'$/';
+ return $var;
+ }
+
+ /**
+ * convert options array syntax to given engine type
+ *
+ * example:
+ * array('order'=>'location') // default direction is ASC
+ * array('order'=>'num1 desc, num2 asc')
+ *
+ * @param array $options
+ * @param string $engine
+ * @return array|null
+ */
+ public function prepareOptions($options, $engine)
+ {
+ if (empty($options) || !is_array($options))
+ return null;
+ switch ($engine) {
+ case 'jig':
+ if (array_key_exists('order', $options))
+ $options['order'] = str_replace(array('asc', 'desc'),
+ array('SORT_ASC', 'SORT_DESC'), strtolower($options['order']));
+ break;
+ case 'mongo':
+ if (array_key_exists('order', $options)) {
+ $sorts = explode(',', $options['order']);
+ $sorting = array();
+ foreach ($sorts as $sort) {
+ $sp = explode(' ', trim($sort));
+ $sorting[$sp[0]] = (array_key_exists(1, $sp) &&
+ strtoupper($sp[1]) == 'DESC') ? -1 : 1;
+ }
+ $options['order'] = $sorting;
+ }
+ if (array_key_exists('group', $options) && is_string($options['group'])) {
+ $keys = explode(',',$options['group']);
+ $options['group']=array('keys'=>array(),'initial'=>array(),'reduce'=>'function (obj, prev) {}','finalize'=>'');
+ $keys = array_combine($keys,array_fill(0,count($keys),1));
+ $options['group']['keys']=$keys;
+ $options['group']['initial']=$keys;
+ }
+ break;
+ }
+ return $options;
+ }
+}
+
+class CortexCollection extends \ArrayIterator {
+
+ protected
+ $relSets = array(),
+ $pointer = 0,
+ $cid;
+
+ const
+ E_UnknownCID = 'This Collection does not exist: %s',
+ E_SubsetKeysValue = '$keys must be an array or split-able string, but %s was given.';
+
+ public function __construct() {
+ $this->cid = uniqid('cortex_collection_');
+ \Registry::set($this->cid,$this);
+ parent::__construct();
+ }
+
+ public function __destruct() {
+ // free embedded relation cache from memory
+ \Registry::clear($this->cid);
+ }
+
+ //! Prohibit cloning to ensure an existing relation cache
+ private function __clone() { }
+
+ /**
+ * set a collection of models
+ * @param $models
+ */
+ function setModels($models) {
+ array_map(array($this,'add'),$models);
+ }
+
+ /**
+ * add single model to collection
+ * @param $model
+ */
+ function add(Cortex $model)
+ {
+ $model->addToCollection($this->cid);
+ $this->append($model);
+ }
+
+ /**
+ * get a related collection
+ * @param $key
+ * @return null
+ */
+ public function getRelSet($key) {
+ return (isset($this->relSets[$key])) ? $this->relSets[$key] : null;
+ }
+
+ /**
+ * set a related collection for caching it for the lifetime of this collection
+ * @param $key
+ * @param $set
+ */
+ public function setRelSet($key,$set) {
+ $this->relSets[$key] = $set;
+ }
+
+ /**
+ * check if a related collection exists in runtime cache
+ * @param $key
+ * @return bool
+ */
+ public function hasRelSet($key) {
+ return array_key_exists($key,$this->relSets);
+ }
+
+ public function expose() {
+ return $this->getArrayCopy();
+ }
+
+ /**
+ * get an intersection from a cached relation-set, based on given keys
+ * @param string $prop
+ * @param array|string $keys
+ * @return array
+ */
+ public function getSubset($prop,$keys) {
+ if (is_string($keys))
+ $keys = \Base::instance()->split($keys);
+ if (!is_array($keys))
+ trigger_error(sprintf(self::E_SubsetKeysValue,gettype($keys)));
+ if (!$this->hasRelSet($prop) || !($relSet = $this->getRelSet($prop)))
+ return null;
+ foreach ($keys as &$key)
+ if ($key instanceof \MongoId)
+ $key = (string) $key;
+ return array_values(array_intersect_key($relSet, array_flip($keys)));
+ }
+
+ /**
+ * returns all values of a specified property from all models
+ * @param string $prop
+ * @param bool $raw
+ * @return array
+ */
+ public function getAll($prop, $raw = false)
+ {
+ $out = array();
+ foreach ($this->getArrayCopy() as $model)
+ if ($model->exists($prop,true)) {
+ $val = $model->get($prop, $raw);
+ if (!empty($val))
+ $out[] = $val;
+ }
+ return $out;
+ }
+
+ /**
+ * cast all contained mappers to a nested array
+ * @param int $rel_depths depths to resolve relations
+ * @return array
+ */
+ public function castAll($rel_depths=1) {
+ $out = array();
+ foreach ($this->getArrayCopy() as $model)
+ $out[] = $model->cast(null,$rel_depths);
+ return $out;
+ }
+
+ /**
+ * return all models keyed by a specified index key
+ * @param string $index
+ * @param bool $nested
+ * @return array
+ */
+ public function getBy($index, $nested = false)
+ {
+ $out = array();
+ foreach ($this->getArrayCopy() as $model)
+ if ($model->exists($index)) {
+ $val = $model->get($index, true);
+ if (!empty($val))
+ if($nested) $out[(string) $val][] = $model;
+ else $out[(string) $val] = $model;
+ }
+ return $out;
+ }
+
+ /**
+ * re-assort the current collection using a sql-like syntax
+ * @param $cond
+ */
+ public function orderBy($cond){
+ $cols=\Base::instance()->split($cond);
+ $this->uasort(function($val1,$val2) use($cols) {
+ foreach ($cols as $col) {
+ $parts=explode(' ',$col,2);
+ $order=empty($parts[1])?'ASC':$parts[1];
+ $col=$parts[0];
+ list($v1,$v2)=array($val1[$col],$val2[$col]);
+ if ($out=strnatcmp($v1,$v2)*
+ ((strtoupper($order)=='ASC')*2-1))
+ return $out;
+ }
+ return 0;
+ });
+ }
+
+ /**
+ * slice the collection
+ * @param $offset
+ * @param null $limit
+ */
+ public function slice($offset,$limit=null) {
+ $this->rewind();
+ $i=0;
+ $del=array();
+ while ($this->valid()) {
+ if ($i < $offset)
+ $del[]=$this->key();
+ elseif ($i >= $offset && $limit && $i >= ($offset+$limit))
+ $del[]=$this->key();
+ $i++;
+ $this->next();
+ }
+ foreach ($del as $ii)
+ unset($this[$ii]);
+ }
+
+ /**
+ * @param $cid
+ * @return CortexCollection
+ */
+ static public function instance($cid) {
+ if (!\Registry::exists($cid))
+ trigger_error(sprintf(self::E_UnknownCID, $cid));
+ return \Registry::get($cid);
+ }
+
+}
\ No newline at end of file
diff --git a/app/lib/db/sql/schema.php b/app/lib/db/sql/schema.php
new file mode 100644
index 00000000..eae536b3
--- /dev/null
+++ b/app/lib/db/sql/schema.php
@@ -0,0 +1,1186 @@
+
+ * https://github.com/ikkez/F3-Sugar/
+ *
+ * @package DB
+ * @version 2.1.1
+ **/
+
+
+namespace DB\SQL;
+
+use DB\SQL;
+
+class Schema extends DB_Utils {
+
+ public
+ $dataTypes = array(
+ 'BOOLEAN' => array('mysql|sqlite2?|pgsql' => 'BOOLEAN',
+ 'mssql|sybase|dblib|odbc|sqlsrv' => 'bit',
+ 'ibm' => 'numeric(1,0)',
+ ),
+ 'INT1' => array('mysql' => 'TINYINT UNSIGNED',
+ 'sqlite2?' => 'integer',
+ 'mssql|sybase|dblib|odbc|sqlsrv' => 'tinyint',
+ 'pgsql|ibm' => 'smallint',
+ ),
+ 'INT2' => array('mysql' => 'SMALLINT',
+ 'sqlite2?' => 'integer',
+ 'pgsql|ibm|mssql|sybase|dblib|odbc|sqlsrv' => 'smallint',
+ ),
+ 'INT4' => array('sqlite2?|pgsql|sybase|odbc|sqlsrv|imb' => 'integer',
+ 'mysql|mssql|dblib' => 'int',
+ ),
+ 'INT8' => array('sqlite2?' => 'integer',
+ 'pgsql|mysql|mssql|sybase|dblib|odbc|sqlsrv|imb' => 'bigint',
+ ),
+ 'FLOAT' => array('mysql|sqlite2?' => 'FLOAT',
+ 'pgsql' => 'double precision',
+ 'mssql|sybase|dblib|odbc|sqlsrv' => 'float',
+ 'imb' => 'decfloat'
+ ),
+ 'DOUBLE' => array('mysql|sqlite2?|ibm' => 'DOUBLE',
+ 'pgsql|sybase|odbc|sqlsrv' => 'double precision',
+ 'mssql|dblib' => 'decimal',
+ ),
+ 'VARCHAR128' => array('mysql|pgsql|sqlite2?|ibm|mssql|sybase|dblib|odbc|sqlsrv' => 'varchar(128)',
+ ),
+ 'VARCHAR256' => array('mysql|pgsql|sqlite2?|ibm|mssql|sybase|dblib|odbc|sqlsrv' => 'varchar(255)',
+ ),
+ 'VARCHAR512' => array('mysql|pgsql|sqlite2?|ibm|mssql|sybase|dblib|odbc|sqlsrv' => 'varchar(512)',
+ ),
+ 'TEXT' => array('mysql|sqlite2?|pgsql|mssql' => 'text',
+ 'sybase|dblib|odbc|sqlsrv' => 'nvarchar(max)',
+ 'ibm' => 'BLOB SUB_TYPE TEXT',
+ ),
+ 'LONGTEXT' => array('mysql' => 'LONGTEXT',
+ 'sqlite2?|pgsql|mssql' => 'text',
+ 'sybase|dblib|odbc|sqlsrv' => 'nvarchar(max)',
+ 'ibm' => 'CLOB(2000000000)',
+ ),
+ 'DATE' => array('mysql|sqlite2?|pgsql|mssql|sybase|dblib|odbc|sqlsrv|ibm' => 'date',
+ ),
+ 'DATETIME' => array('pgsql' => 'timestamp without time zone',
+ 'mysql|sqlite2?|mssql|sybase|dblib|odbc|sqlsrv' => 'datetime',
+ 'ibm' => 'timestamp',
+ ),
+ 'TIMESTAMP' => array('mysql|ibm' => 'timestamp',
+ 'pgsql|odbc' => 'timestamp without time zone',
+ 'sqlite2?|mssql|sybase|dblib|sqlsrv'=>'DATETIME',
+ ),
+ 'BLOB' => array('mysql|odbc|sqlite2?|ibm' => 'blob',
+ 'pgsql' => 'bytea',
+ 'mssql|sybase|dblib' => 'image',
+ 'sqlsrv' => 'varbinary(max)',
+ ),
+ ),
+ $defaultTypes = array(
+ 'CUR_STAMP' => array('mysql' => 'CURRENT_TIMESTAMP',
+ 'mssql|sybase|dblib|odbc|sqlsrv' => 'getdate()',
+ 'pgsql' => 'LOCALTIMESTAMP(0)',
+ 'sqlite2?' => "(datetime('now','localtime'))",
+ ),
+ );
+
+ public
+ $name;
+
+ /** @var \Base */
+ protected $fw;
+
+ const
+ // DataTypes and Aliases
+ DT_BOOL = 'BOOLEAN',
+ DT_BOOLEAN = 'BOOLEAN',
+ DT_INT1 = 'INT1',
+ DT_TINYINT = 'INT1',
+ DT_INT2 = 'INT2',
+ DT_SMALLINT = 'INT2',
+ DT_INT4 = 'INT4',
+ DT_INT = 'INT4',
+ DT_INT8 = 'INT8',
+ DT_BIGINT = 'INT8',
+ DT_FLOAT = 'FLOAT',
+ DT_DOUBLE = 'DOUBLE',
+ DT_DECIMAL = 'DOUBLE',
+ DT_VARCHAR128 = 'VARCHAR128',
+ DT_VARCHAR256 = 'VARCHAR256',
+ DT_VARCHAR512 = 'VARCHAR512',
+ DT_TEXT = 'TEXT',
+ DT_LONGTEXT = 'LONGTEXT',
+ DT_DATE = 'DATE',
+ DT_DATETIME = 'DATETIME',
+ DT_TIMESTAMP = 'TIMESTAMP',
+ DT_BLOB = 'BLOB',
+ DT_BINARY = 'BLOB',
+
+ // column default values
+ DF_CURRENT_TIMESTAMP = 'CUR_STAMP';
+
+
+ public function __construct(\DB\SQL $db)
+ {
+ $this->fw = \Base::instance();
+ parent::__construct($db);
+ }
+
+ /**
+ * get a list of all databases
+ * @return array|bool
+ */
+ public function getDatabases()
+ {
+ $cmd = array(
+ 'mysql' => 'SHOW DATABASES',
+ 'pgsql' => 'SELECT datname FROM pg_catalog.pg_database',
+ 'mssql|sybase|dblib|sqlsrv|odbc' => 'EXEC SP_HELPDB',
+ );
+ $query = $this->findQuery($cmd);
+ if (!$query) return false;
+ $result = $this->db->exec($query);
+ if (!is_array($result)) return false;
+ foreach($result as &$db)
+ if (is_array($db)) $db = array_shift($db);
+ return $result;
+ }
+
+ /**
+ * get all tables of current DB
+ * @return bool|array list of tables, or false
+ */
+ public function getTables()
+ {
+ $cmd = array(
+ 'mysql' => array(
+ "show tables"),
+ 'sqlite2?' => array(
+ "SELECT name FROM sqlite_master WHERE type='table' AND name!='sqlite_sequence'"),
+ 'pgsql|sybase|dblib' => array(
+ "select table_name from information_schema.tables where table_schema = 'public'"),
+ 'mssql|sqlsrv|odbc' => array(
+ "select table_name from information_schema.tables"),
+ 'ibm' => array("select TABLE_NAME from sysibm.tables"),
+ );
+ $query = $this->findQuery($cmd);
+ if (!$query[0]) return false;
+ $tables = $this->db->exec($query[0]);
+ if ($tables && is_array($tables) && count($tables) > 0)
+ foreach ($tables as &$table)
+ $table = array_shift($table);
+ return $tables;
+ }
+
+ /**
+ * returns a table object for creation
+ * @param $name
+ * @return bool|TableCreator
+ */
+ public function createTable($name)
+ {
+ return new TableCreator($name,$this);
+ }
+
+ /**
+ * returns a table object for altering operations
+ * @param $name
+ * @return bool|TableModifier
+ */
+ public function alterTable($name)
+ {
+ return new TableModifier($name,$this);
+ }
+
+ /**
+ * rename a table
+ * @param string $name
+ * @param string $new_name
+ * @param bool $exec
+ * @return bool
+ */
+ public function renameTable($name, $new_name, $exec = true)
+ {
+ $name = $this->db->quotekey($name);
+ $new_name = $this->db->quotekey($new_name);
+ if (preg_match('/odbc/', $this->db->driver())) {
+ $queries = array();
+ $queries[] = "SELECT * INTO $new_name FROM $name;";
+ $queries[] = $this->dropTable($name, false);
+ return ($exec) ? $this->db->exec($queries) : implode("\n",$queries);
+ } else {
+ $cmd = array(
+ 'sqlite2?|pgsql' =>
+ "ALTER TABLE $name RENAME TO $new_name;",
+ 'mysql|ibm' =>
+ "RENAME TABLE $name TO $new_name;",
+ 'mssql|sqlsrv|sybase|dblib|odbc' =>
+ "sp_rename {$name}, $new_name"
+ );
+ $query = $this->findQuery($cmd);
+ if (!$exec) return $query;
+ return (preg_match('/mssql|sybase|dblib|sqlsrv/', $this->db->driver()))
+ ? @$this->db->exec($query) : $this->db->exec($query);
+ }
+ }
+
+ /**
+ * drop a table
+ * @param \DB\SQL\TableBuilder|string $name
+ * @param bool $exec
+ * @return bool
+ */
+ public function dropTable($name, $exec = true)
+ {
+ if (is_object($name) && $name instanceof TableBuilder)
+ $name = $name->name;
+ $cmd = array(
+ 'mysql|ibm|sqlite2?|pgsql|sybase|dblib' =>
+ 'DROP TABLE IF EXISTS '.$this->db->quotekey($name).';',
+ 'mssql|sqlsrv|odbc' =>
+ "IF OBJECT_ID('[$name]', 'U') IS NOT NULL DROP TABLE [$name];"
+ );
+ $query = $this->findQuery($cmd);
+ return ($exec) ? $this->db->exec($query) : $query;
+ }
+
+}
+
+abstract class TableBuilder extends DB_Utils {
+
+ protected $columns, $pkeys, $queries, $increments, $rebuild_cmd, $suppress;
+ public $name, $schema;
+
+ const
+ TEXT_NoDefaultForTEXT = "Column `%s` of type TEXT can't have a default value.",
+ TEXT_ColumnExists = "Cannot add the column `%s`. It already exists.";
+
+ /**
+ * @param string $name
+ * @param Schema $schema
+ * @return \DB\SQL\TableBuilder
+ */
+ public function __construct($name, Schema $schema)
+ {
+ $this->name = $name;
+ $this->schema = $schema;
+ $this->columns = array();
+ $this->queries = array();
+ $this->pkeys = array('id');
+ $this->increments = 'id';
+ parent::__construct($schema->db);
+ }
+
+ /**
+ * generate SQL query and execute it if $exec is true
+ * @param bool $exec
+ */
+ abstract public function build($exec = TRUE);
+
+ /**
+ * add a new column to this table
+ * @param string|Column $key column name or object
+ * @param null|array $args optional config array
+ * @return \DB\SQL\Column
+ */
+ public function addColumn($key,$args = null)
+ {
+ if ($key instanceof Column) {
+ $args = $key->getColumnArray();
+ $key = $key->name;
+ }
+ if (array_key_exists($key,$this->columns))
+ trigger_error(sprintf(self::TEXT_ColumnExists,$key));
+ $column = new Column($key, $this);
+ if ($args)
+ foreach ($args as $arg => $val)
+ $column->{$arg} = $val;
+ // skip default pkey field
+ if (count($this->pkeys) == 1 && in_array($key,$this->pkeys))
+ return $column;
+ return $this->columns[$key] =& $column;
+ }
+
+ /**
+ * create index on one or more columns
+ * @param string|array $index_cols Column(s) to be indexed
+ * @param $search_cols
+ * @param bool $unique Unique index
+ * @param int $length index length for text fields in mysql
+ */
+ protected function _addIndex($index_cols, $search_cols, $unique, $length)
+ {
+ if (!is_array($index_cols))
+ $index_cols = array($index_cols);
+ $quotedCols = array_map(array($this->db, 'quotekey'), $index_cols);
+ if (preg_match('/mysql/', $this->db->driver()))
+ foreach($quotedCols as $i=>&$col)
+ if(strtoupper($search_cols[$index_cols[$i]]['type']) == 'TEXT')
+ $col.='('.$length.')';
+ $cols = implode(',', $quotedCols);
+ $name = $this->db->quotekey($this->name.'___'.implode('__', $index_cols));
+ $table = $this->db->quotekey($this->name);
+ $index = $unique ? 'UNIQUE INDEX' : 'INDEX';
+ $cmd = array(
+ 'pgsql|sqlite2?|ibm|mssql|sybase|dblib|odbc|sqlsrv' =>
+ "CREATE $index $name ON $table ($cols);",
+ 'mysql' => //ALTER TABLE is used because of MySQL bug #48875
+ "ALTER TABLE $table ADD $index $name ($cols);",
+ );
+ $query = $this->findQuery($cmd);
+ $this->queries[] = $query;
+ }
+
+ /**
+ * set primary / composite key to table
+ * @param string|array $pkeys
+ * @return bool
+ */
+ public function primary($pkeys) {
+ if (empty($pkeys))
+ return false;
+ if (!is_array($pkeys))
+ $pkeys = array($pkeys);
+ // single pkey
+ $this->increments = $pkeys[0];
+ $this->pkeys = $pkeys;
+ // drop duplicate pkey definition
+ if (array_key_exists($this->increments,$this->columns))
+ unset($this->columns[$this->increments]);
+ // set flag on new fields
+ foreach ($pkeys as $name)
+ if(array_key_exists($name,$this->columns))
+ $this->columns[$name]->pkey = true;
+ // composite key
+ if (count($pkeys) > 1) {
+ $pkeys_quoted = array_map(array($this->db,'quotekey'), $pkeys);
+ $pk_string = implode(', ', $pkeys_quoted);
+ if (preg_match('/sqlite2?/', $this->db->driver())) {
+ // rebuild table with new primary keys
+ $this->rebuild_cmd['pkeys'] = $pkeys;
+ return;
+ } else {
+ $table = $this->db->quotekey($this->name);
+ $table_key = $this->db->quotekey($this->name.'_pkey');
+ $cmd = array(
+ 'odbc' =>
+ "CREATE INDEX $table_key ON $table ( $pk_string );",
+ 'mysql' =>
+ "ALTER TABLE $table DROP PRIMARY KEY, ADD PRIMARY KEY ( $pk_string );",
+ 'mssql|sybase|dblib|sqlsrv' => array(
+ "ALTER TABLE $table DROP CONSTRAINT PK_".$this->name."_ID;",
+ "ALTER TABLE $table ADD CONSTRAINT $table_key PRIMARY KEY ( $pk_string );",
+ ),
+ 'pgsql' => array(
+ "ALTER TABLE $table DROP CONSTRAINT $table_key;",
+ "ALTER TABLE $table ADD CONSTRAINT $table_key PRIMARY KEY ( $pk_string );",
+ ),
+ );
+ $query = $this->findQuery($cmd);
+ if (!is_array($query))
+ $query = array($query);
+ foreach ($query as $q)
+ $this->queries[] = $q;
+ }
+ }
+ }
+
+}
+
+class TableCreator extends TableBuilder {
+
+ const
+ TEXT_TableAlreadyExists = "Table `%s` already exists. Cannot create it.";
+
+ /**
+ * generate SQL query for creating a basic table, containing an ID serial field
+ * and execute it if $exec is true, otherwise just return the generated query string
+ * @param bool $exec
+ * @return bool|TableModifier|string
+ */
+ public function build($exec = TRUE)
+ {
+ // check if already existing
+ if ($exec && in_array($this->name, $this->schema->getTables())) {
+ trigger_error(sprintf(self::TEXT_TableAlreadyExists,$this->name));
+ return false;
+ }
+ $cols = '';
+ if (!empty($this->columns))
+ foreach ($this->columns as $cname => $column) {
+ // no defaults for TEXT type
+ if ($column->default !== false && is_int(strpos(strtoupper($column->type),'TEXT'))) {
+ trigger_error(sprintf(self::TEXT_NoDefaultForTEXT, $column->name));
+ return false;
+ }
+ $cols .= ', '.$column->getColumnQuery();
+ }
+ $table = $this->db->quotekey($this->name);
+ $id = $this->db->quotekey($this->increments);
+ $cmd = array(
+ 'sqlite2?|sybase|dblib' =>
+ "CREATE TABLE $table ($id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT".$cols.");",
+ 'mysql' =>
+ "CREATE TABLE $table ($id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT".$cols.") DEFAULT CHARSET=utf8 COLLATE utf8_unicode_ci;",
+ 'pgsql' =>
+ "CREATE TABLE $table ($id SERIAL PRIMARY KEY".$cols.");",
+ 'mssql|odbc|sqlsrv' =>
+ "CREATE TABLE $table ($id INT IDENTITY CONSTRAINT PK_".$this->name."_ID PRIMARY KEY".$cols.");",
+ 'ibm' =>
+ "CREATE TABLE $table ($id INTEGER AS IDENTITY NOT NULL $cols, PRIMARY KEY($id));",
+ );
+ $query = $this->findQuery($cmd);
+ // composite key for sqlite
+ if (count($this->pkeys) > 1 && preg_match('/sqlite2?/', $this->db->driver())) {
+ $pk_string = implode(', ', $this->pkeys);
+ $query = "CREATE TABLE $table ($id INTEGER NULL".$cols.", PRIMARY KEY ($pk_string) );";
+ $newTable = new TableModifier($this->name, $this->schema);
+ // auto-incrementation in composite primary keys
+ $pk_queries = $newTable->_sqlite_increment_trigger($this->increments);
+ $this->queries = array_merge($this->queries, $pk_queries);
+ }
+ array_unshift($this->queries, $query);
+ // indexes
+ foreach ($this->columns as $cname => $column)
+ if ($column->index)
+ $this->addIndex($cname, $column->unique);
+ if (!$exec)
+ return $this->queries;
+ $this->db->exec($this->queries);
+ return isset($newTable) ? $newTable : new TableModifier($this->name,$this->schema);
+ }
+
+ /**
+ * create index on one or more columns
+ * @param string|array $columns Column(s) to be indexed
+ * @param bool $unique Unique index
+ * @param int $length index length for text fields in mysql
+ */
+ public function addIndex($columns, $unique = FALSE, $length = 20)
+ {
+ if (!is_array($columns))
+ $columns = array($columns);
+ $cols = $this->columns;
+ foreach ($cols as &$col)
+ $col = $col->getColumnArray();
+ parent::_addIndex($columns,$cols,$unique,$length);
+ }
+
+}
+
+
+class TableModifier extends TableBuilder {
+
+ protected
+ $colTypes, $rebuild_cmd;
+
+ const
+ // error messages
+ TEXT_TableNotExisting = "Unable to alter table `%s`. It does not exist.",
+ TEXT_NotNullFieldNeedsDefault = 'You cannot add the not nullable column `%s` without specifying a default value',
+ TEXT_ENGINE_NOT_SUPPORTED = 'DB Engine `%s` is not supported for this action.';
+
+ /**
+ * generate SQL queries for altering the table and execute it if $exec is true,
+ * otherwise return the generated query string
+ */
+ public function build($exec = TRUE)
+ {
+ // check if table exists
+ if (!in_array($this->name, $this->schema->getTables()))
+ trigger_error(sprintf(self::TEXT_TableNotExisting, $this->name));
+
+ if ($sqlite = preg_match('/sqlite2?/', $this->db->driver())) {
+ $sqlite_queries = array();
+ }
+ $rebuild = false;
+ $additional_queries = $this->queries;
+ $this->queries = array();
+ // add new columns
+ foreach ($this->columns as $cname => $column) {
+ // not nullable fields should have a default value, when altering a table
+ if ($column->default === false && $column->nullable === false) {
+ trigger_error(sprintf(self::TEXT_NotNullFieldNeedsDefault, $column->name));
+ return false;
+ }
+ // no defaults for TEXT type
+ if($column->default !== false && is_int(strpos(strtoupper($column->type),'TEXT'))) {
+ trigger_error(sprintf(self::TEXT_NoDefaultForTEXT, $column->name));
+ return false;
+ }
+ $table = $this->db->quotekey($this->name);
+ $col_query = $column->getColumnQuery();
+ if ($sqlite) {
+ // sqlite: dynamic column default only works when rebuilding the table
+ if($column->default === Schema::DF_CURRENT_TIMESTAMP) {
+ $rebuild = true;
+ break;
+ } else
+ $sqlite_queries[] = "ALTER TABLE $table ADD $col_query;";
+ } else {
+ $cmd = array(
+ 'mysql|pgsql|mssql|sybase|dblib|odbc|sqlsrv' =>
+ "ALTER TABLE $table ADD $col_query;",
+ 'ibm' =>
+ "ALTER TABLE $table ADD COLUMN $col_query;",
+ );
+ $this->queries[] = $this->findQuery($cmd);
+ }
+ }
+ if ($sqlite)
+ if ($rebuild || !empty($this->rebuild_cmd)) $this->_sqlite_rebuild($exec);
+ else $this->queries += $sqlite_queries;
+ $this->queries = array_merge($this->queries,$additional_queries);
+ // add new indexes
+ foreach ($this->columns as $cname => $column)
+ if ($column->index)
+ $this->addIndex($cname, $column->unique);
+ if (empty($this->queries))
+ return false;
+ if (is_array($this->queries) && count($this->queries) == 1)
+ $this->queries = $this->queries[0];
+ if (!$exec) return $this->queries;
+ $result = ($this->suppress)
+ ? @$this->db->exec($this->queries) : $this->db->exec($this->queries);
+ $this->queries = $this->columns = $this->rebuild_cmd = array();
+ return $result;
+ }
+
+ /**
+ * rebuild a sqlite table with additional schema changes
+ */
+ protected function _sqlite_rebuild($exec=true)
+ {
+ $new_columns = $this->columns;
+ $existing_columns = $this->getCols(true);
+ // find after sorts
+ $after = array();
+ foreach ($new_columns as $cname => $column)
+ if(!empty($column->after))
+ $after[$column->after][] = $cname;
+ // find rename commands
+ $rename = (!empty($this->rebuild_cmd) && array_key_exists('rename',$this->rebuild_cmd))
+ ? $this->rebuild_cmd['rename'] : array();
+ // get primary-key fields
+ foreach ($existing_columns as $key => $col)
+ if ($col['pkey'])
+ $pkeys[array_key_exists($key,$rename) ? $rename[$key] : $key] = $col;
+ foreach ($new_columns as $key => $col)
+ if ($col->pkey)
+ $pkeys[$key] = $col;
+ // indexes
+ $indexes = $this->listIndex();
+ // drop fields
+ if (!empty($this->rebuild_cmd) && array_key_exists('drop', $this->rebuild_cmd))
+ foreach ($this->rebuild_cmd['drop'] as $name)
+ if (array_key_exists($name, $existing_columns)) {
+ if (array_key_exists($name, $pkeys)) {
+ unset($pkeys[$name]);
+ // drop composite key
+ if(count($pkeys) == 1) {
+ $incrementTrigger = $this->db->quotekey($this->name.'_insert');
+ $this->queries[] = 'DROP TRIGGER IF EXISTS '.$incrementTrigger;
+ }
+ }
+ unset($existing_columns[$name]);
+ // drop index
+ foreach (array_keys($indexes) as $col) {
+ // for backward compatibility
+ if ($col == $name)
+ unset($indexes[$name]);
+ // new index names
+ if ($col == $this->name.'___'.$name)
+ unset($indexes[$this->name.'___'.$name]);
+ // check if column is part of an existing combined index
+ if (is_int(strpos($col, '__'))) {
+ if (is_int(strpos($col, '___'))) {
+ $col = explode('___', $col);
+ $ci = explode('__', $col[1]);
+ $col = implode('___',$col);
+ } else // for backward compatibility
+ $ci = explode('__', $col);
+ // drop combined index
+ if (in_array($name, $ci))
+ unset($indexes[$col]);
+ }
+ }
+ }
+ // create new table
+ $oname = $this->name;
+ $this->queries[] = $this->rename($oname.'_temp', false);
+ $newTable = $this->schema->createTable($oname);
+ // add existing fields
+ foreach ($existing_columns as $name => $col) {
+ $colName = array_key_exists($name, $rename) ? $rename[$name] : $name;
+ // update column datatype
+ if (array_key_exists('update',$this->rebuild_cmd)
+ && in_array($name,array_keys($this->rebuild_cmd['update'])))
+ $col['type']=$this->rebuild_cmd['update'][$name];
+ $newTable->addColumn($colName, $col)->passThrough();
+ // add new fields with after flag
+ if (array_key_exists($name,$after))
+ foreach (array_reverse($after[$name]) as $acol) {
+ $newTable->addColumn($new_columns[$acol]);
+ unset($new_columns[$acol]);
+ }
+ }
+ // add remaining new fields
+ foreach ($new_columns as $ncol)
+ $newTable->addColumn($ncol);
+ $newTable->primary(array_keys($pkeys));
+ // add existing indexes
+ foreach (array_reverse($indexes) as $name=>$conf) {
+ if (is_int(strpos($name, '___')))
+ list($tname,$name) = explode('___', $name);
+ if (is_int(strpos($name, '__')))
+ $name = explode('__', $name);
+ if ($exec) {
+ $t = $this->schema->alterTable($oname);
+ $t->dropIndex($name);
+ $t->build();
+ }
+ $newTable->addIndex($name,$conf['unique']);
+ }
+ // build new table
+ $newTableQueries = $newTable->build(false);
+ $this->queries = array_merge($this->queries,$newTableQueries);
+ // copy data
+ if (!empty($existing_columns)) {
+ foreach (array_keys($existing_columns) as $name) {
+ $fields_from[] = $this->db->quotekey($name);
+ $toName = array_key_exists($name, $rename) ? $rename[$name] : $name;
+ $fields_to[] = $this->db->quotekey($toName);
+ }
+ $this->queries[] =
+ 'INSERT INTO '.$this->db->quotekey($newTable->name).' ('.implode(', ', $fields_to).') '.
+ 'SELECT '.implode(', ', $fields_from).' FROM '.$this->db->quotekey($this->name).';';
+ }
+ $this->queries[] = $this->drop(false);
+ $this->name = $oname;
+ }
+
+ /**
+ * create an insert trigger to work-a-round auto-incrementation in composite primary keys
+ * @param $pkey
+ * @return array
+ */
+ public function _sqlite_increment_trigger($pkey) {
+ $table = $this->db->quotekey($this->name);
+ $pkey = $this->db->quotekey($pkey);
+ $triggerName = $this->db->quotekey($this->name.'_insert');
+ $queries[] = "DROP TRIGGER IF EXISTS $triggerName;";
+ $queries[] = 'CREATE TRIGGER '.$triggerName.' AFTER INSERT ON '.$table.
+ ' WHEN (NEW.'.$pkey.' IS NULL) BEGIN'.
+ ' UPDATE '.$table.' SET '.$pkey.' = ('.
+ ' select coalesce( max( '.$pkey.' ), 0 ) + 1 from '.$table.
+ ') WHERE ROWID = NEW.ROWID;'.
+ ' END;';
+ return $queries;
+ }
+
+ /**
+ * get columns of a table
+ * @param bool $types
+ * @return array
+ */
+ public function getCols($types = false)
+ {
+ $schema = $this->db->schema($this->name, null, 0);
+ if (!$types)
+ return array_keys($schema);
+ else
+ foreach ($schema as $name => &$cols) {
+ $default = ($cols['default'] === '') ? null : $cols['default'];
+ if (!is_null($default) && (
+ (is_int(strpos($curdef=$this->findQuery($this->schema->defaultTypes['CUR_STAMP']),
+ $default)) || is_int(strpos($default,$curdef)))
+ || $default == "('now'::text)::timestamp(0) without time zone"))
+ {
+ $default = 'CUR_STAMP';
+ } elseif (!is_null($default)) {
+ // remove single-qoutes
+ if (preg_match('/sqlite2?/', $this->db->driver()))
+ $default=preg_replace('/^\s*([\'"])(.*)\1\s*$/','\2',$default);
+ elseif (preg_match('/mssql|sybase|dblib|odbc|sqlsrv/', $this->db->driver()))
+ $default=preg_replace('/^\s*(\(\')(.*)(\'\))\s*$/','\2',$default);
+ // extract value from character_data in postgre
+ elseif (preg_match('/pgsql/', $this->db->driver()))
+ if (is_int(strpos($default, 'nextval')))
+ $default = null; // drop autoincrement default
+ elseif (preg_match("/^\'*(.*)\'*::(\s*\w)+/", $default, $match))
+ $default = $match[1];
+ } else
+ $default=false;
+ $cols['default'] = $default;
+ }
+ return $schema;
+ }
+
+ /**
+ * removes a column from a table
+ * @param string $name
+ * @return bool
+ */
+ public function dropColumn($name)
+ {
+ $colTypes = $this->getCols(true);
+ // check if column exists
+ if (!in_array($name, array_keys($colTypes))) return true;
+ if (preg_match('/sqlite2?/', $this->db->driver())) {
+ // SQlite does not support drop column directly
+ $this->rebuild_cmd['drop'][] = $name;
+ } else {
+ $quotedTable = $this->db->quotekey($this->name);
+ $quotedColumn = $this->db->quotekey($name);
+ $cmd = array(
+ 'mysql' =>
+ "ALTER TABLE $quotedTable DROP $quotedColumn;",
+ 'pgsql|odbc|ibm|mssql|sybase|dblib|sqlsrv' =>
+ "ALTER TABLE $quotedTable DROP COLUMN $quotedColumn;",
+ );
+ if (preg_match('/mssql|sybase|dblib|sqlsrv/', $this->db->driver()))
+ $this->suppress=true;
+ $this->queries[] = $this->findQuery($cmd);
+ }
+ }
+
+ /**
+ * rename a column
+ * @param $name
+ * @param $new_name
+ * @return void
+ */
+ public function renameColumn($name, $new_name)
+ {
+ $existing_columns = $this->getCols(true);
+ // check if column is already existing
+ if (!in_array($name, array_keys($existing_columns)))
+ trigger_error('cannot rename column. it does not exist.');
+ if (in_array($new_name, array_keys($existing_columns)))
+ trigger_error('cannot rename column. new column already exist.');
+
+ if (preg_match('/sqlite2?/', $this->db->driver()))
+ // SQlite does not support drop or rename column directly
+ $this->rebuild_cmd['rename'][$name] = $new_name;
+ elseif (preg_match('/odbc/', $this->db->driver())) {
+ // no rename column for odbc, create temp column
+ $this->addColumn($new_name, $existing_columns[$name])->passThrough();
+ $this->queries[] = "UPDATE $this->name SET $new_name = $name";
+ $this->dropColumn($name);
+ } else {
+ $existing_columns = $this->getCols(true);
+ $quotedTable = $this->db->quotekey($this->name);
+ $quotedColumn = $this->db->quotekey($name);
+ $quotedColumnNew = $this->db->quotekey($new_name);
+ $cmd = array(
+ 'mysql' =>
+ "ALTER TABLE $quotedTable CHANGE $quotedColumn $quotedColumnNew ".$existing_columns[$name]['type'].";",
+ 'pgsql|ibm' =>
+ "ALTER TABLE $quotedTable RENAME COLUMN $quotedColumn TO $quotedColumnNew;",
+ 'mssql|sybase|dblib|sqlsrv' =>
+ "sp_rename [$this->name.$name], '$new_name', 'Column'",
+ );
+ if (preg_match('/mssql|sybase|dblib|sqlsrv/', $this->db->driver()))
+ $this->suppress = true;
+ $this->queries[] = $this->findQuery($cmd);
+ }
+ }
+
+ /**
+ * modifies column datatype
+ * @param $name
+ * @param $datatype
+ * @param bool $force
+ * @return bool
+ */
+ public function updateColumn($name, $datatype, $force = false)
+ {
+ if(!$force)
+ $datatype = $this->findQuery($this->schema->dataTypes[strtoupper($datatype)]);
+ $table = $this->db->quotekey($this->name);
+ $column = $this->db->quotekey($name);
+ if (preg_match('/sqlite2?/', $this->db->driver())){
+ $this->rebuild_cmd['update'][$name] = $datatype;
+ } else {
+ $cmd = array(
+ 'mysql' =>
+ "ALTER TABLE $table MODIFY COLUMN $column $datatype;",
+ 'pgsql' =>
+ "ALTER TABLE $table ALTER COLUMN $column TYPE $datatype;",
+ 'sqlsrv|mssql|sybase|dblib|ibm' =>
+ "ALTER TABLE $table ALTER COLUMN $column $datatype;",
+ );
+ $this->queries[] = $this->findQuery($cmd);
+ }
+ }
+
+ /**
+ * create index on one or more columns
+ * @param string|array $columns Column(s) to be indexed
+ * @param bool $unique Unique index
+ * @param int $length index length for text fields in mysql
+ */
+ public function addIndex($columns, $unique = FALSE, $length = 20)
+ {
+ if (!is_array($columns))
+ $columns = array($columns);
+ $existingCol = $this->columns;
+ foreach ($existingCol as &$col)
+ $col = $col->getColumnArray();
+ $allCols = array_merge($this->getCols(true), $existingCol);
+ parent::_addIndex($columns, $allCols, $unique, $length);
+ }
+
+ /**
+ * drop a column index
+ * @param string|array $name
+ */
+ public function dropIndex($name)
+ {
+ if (is_array($name))
+ $name = $this->name.'___'.implode('__', $name);
+ elseif(!is_int(strpos($name,'___')))
+ $name = $this->name.'___'.$name;
+ $name = $this->db->quotekey($name);
+ $table = $this->db->quotekey($this->name);
+ $cmd = array(
+ 'pgsql|sqlite2?|ibm' =>
+ "DROP INDEX $name;",
+ 'mssql|sybase|dblib|odbc|sqlsrv' =>
+ "DROP INDEX $table.$name;",
+ 'mysql'=>
+ "ALTER TABLE $table DROP INDEX $name;",
+ );
+ $query = $this->findQuery($cmd);
+ $this->queries[] = $query;
+ }
+
+ /**
+ * returns table indexes as assoc array
+ * @return array
+ */
+ public function listIndex()
+ {
+ $table = $this->db->quotekey($this->name);
+ $cmd = array(
+ 'sqlite2?' =>
+ "PRAGMA index_list($table);",
+ 'mysql' =>
+ "SHOW INDEX FROM $table;",
+ 'mssql|sybase|dblib|sqlsrv' =>
+ "select * from sys.indexes ".
+ "where object_id = (select object_id from sys.objects where name = '$this->name')",
+ 'pgsql' =>
+ "select i.relname as name, ix.indisunique as unique ".
+ "from pg_class t, pg_class i, pg_index ix ".
+ "where t.oid = ix.indrelid and i.oid = ix.indexrelid ".
+ "and t.relkind = 'r' and t.relname = '$this->name'".
+ "group by t.relname, i.relname, ix.indisunique;",
+ );
+ $result = $this->db->exec($this->findQuery($cmd));
+ $indexes = array();
+ if (preg_match('/pgsql|sqlite2?/', $this->db->driver())) {
+ foreach($result as $row)
+ $indexes[$row['name']] = array('unique' => $row['unique']);
+ } elseif (preg_match('/mssql|sybase|dblib|sqlsrv/', $this->db->driver())) {
+ foreach ($result as $row)
+ $indexes[$row['name']] = array('unique' => $row['is_unique']);
+ } elseif (preg_match('/mysql/', $this->db->driver())) {
+ foreach($result as $row)
+ $indexes[$row['Key_name']] = array('unique' => !(bool)$row['Non_unique']);
+ } else
+ trigger_error(sprintf(self::TEXT_ENGINE_NOT_SUPPORTED, $this->db->driver()));
+ return $indexes;
+ }
+
+ /**
+ * rename this table
+ * @param string $new_name
+ * @param bool $exec
+ * @return $this|bool
+ */
+ public function rename($new_name, $exec = true) {
+ $query = $this->schema->renameTable($this->name, $new_name, $exec);
+ $this->name = $new_name;
+ return ($exec) ? $this : $query;
+ }
+
+ /**
+ * drop this table
+ * @param bool $exec
+ * @return mixed
+ */
+ public function drop($exec = true) {
+ return $this->schema->dropTable($this,$exec);
+ }
+
+}
+
+/**
+ * defines a table column configuration
+ * Class Column
+ * @package DB\SQL
+ */
+class Column extends DB_Utils {
+
+ public $name, $type, $nullable, $default, $after, $index, $unique, $passThrough, $pkey;
+ protected $table, $schema;
+
+ const
+ TEXT_NoDataType = 'The specified datatype %s is not defined in %s driver',
+ TEXT_CurrentStampDataType = 'Current timestamp as column default is only possible for TIMESTAMP datatype';
+
+ /**
+ * @param string $name
+ * @param TableBuilder $table
+ */
+ public function __construct($name, TableBuilder $table) {
+ $this->name = $name;
+ $this->nullable = true;
+ $this->default = false;
+ $this->after = false;
+ $this->index = false;
+ $this->unique = false;
+ $this->passThrough = false;
+ $this->pkey = false;
+
+ $this->table = $table;
+ $this->schema = $table->schema;
+ parent::__construct($this->schema->db);
+ }
+
+ /**
+ * @param string $datatype
+ * @param bool $force don't match datatype against DT array
+ * @return $this
+ */
+ public function type($datatype, $force = FALSE) {
+ $this->type = $datatype;
+ $this->passThrough = $force;
+ return $this;
+ }
+
+ public function type_tinyint() {
+ $this->type = Schema::DT_INT1;
+ return $this;
+ }
+
+ public function type_smallint() {
+ $this->type = Schema::DT_INT2;
+ return $this;
+ }
+
+ public function type_int() {
+ $this->type = Schema::DT_INT4;
+ return $this;
+ }
+
+ public function type_bigint() {
+ $this->type = Schema::DT_INT8;
+ return $this;
+ }
+
+ public function type_float() {
+ $this->type = Schema::DT_FLOAT;
+ return $this;
+ }
+
+ public function type_decimal() {
+ $this->type = Schema::DT_DOUBLE;
+ return $this;
+ }
+
+ public function type_text() {
+ $this->type = Schema::DT_TEXT;
+ return $this;
+ }
+
+ public function type_longtext() {
+ $this->type = Schema::DT_LONGTEXT;
+ return $this;
+ }
+
+ public function type_varchar($length = 255) {
+ $this->type = "varchar($length)";
+ $this->passThrough = true;
+ return $this;
+ }
+
+ public function type_date() {
+ $this->type = Schema::DT_DATE;
+ return $this;
+ }
+
+ public function type_datetime() {
+ $this->type = Schema::DT_DATETIME;
+ return $this;
+ }
+
+ public function type_timestamp($asDefault=false) {
+ $this->type = Schema::DT_TIMESTAMP;
+ if ($asDefault)
+ $this->default = Schema::DF_CURRENT_TIMESTAMP;
+ return $this;
+ }
+
+ public function type_blob() {
+ $this->type = Schema::DT_BLOB;
+ return $this;
+ }
+
+ public function type_bool() {
+ $this->type = Schema::DT_BOOLEAN;
+ return $this;
+ }
+
+ public function passThrough($state = TRUE) {
+ $this->passThrough = $state;
+ return $this;
+ }
+
+ public function nullable($nullable) {
+ $this->nullable = $nullable;
+ return $this;
+ }
+
+ public function defaults($default) {
+ $this->default = $default;
+ return $this;
+ }
+
+ public function after($name) {
+ $this->after = $name;
+ return $this;
+ }
+
+ public function index($unique = FALSE) {
+ $this->index = true;
+ $this->unique = $unique;
+ return $this;
+ }
+
+ /**
+ * returns an array of this column configuration
+ * @return array
+ */
+ public function getColumnArray()
+ {
+ $fields = array('name','type','passThrough','default','nullable',
+ 'index','unique','after','pkey');
+ $fields = array_flip($fields);
+ foreach($fields as $key => &$val)
+ $val = $this->{$key};
+ unset($val);
+ return $fields;
+ }
+
+ /**
+ * generate SQL column definition query
+ * @return bool|string
+ */
+ public function getColumnQuery()
+ {
+ if (!$this->type)
+ trigger_error(sprintf('Cannot build a column query for `%s`: no column type set',$this->name));
+ // prepare column types
+ if ($this->passThrough)
+ $type_val = $this->type;
+ else {
+ $type_val = $this->findQuery($this->schema->dataTypes[strtoupper($this->type)]);
+ if (!$type_val) {
+ trigger_error(sprintf(self::TEXT_NoDataType, strtoupper($this->type),
+ $this->db->driver()));
+ return FALSE;
+ }
+ }
+ // build query
+ $query = $this->db->quotekey($this->name).' '.$type_val.' '.
+ ($this->nullable ? 'NULL' : 'NOT NULL');
+ // default value
+ if ($this->default !== false) {
+ $def_cmds = array(
+ 'sqlite2?|mysql|pgsql|mssql|sybase|dblib|odbc|sqlsrv' => 'DEFAULT',
+ 'ibm' => 'WITH DEFAULT',
+ );
+ $def_cmd = $this->findQuery($def_cmds).' ';
+ // timestamp default
+ if ($this->default === Schema::DF_CURRENT_TIMESTAMP) {
+ // check for right datatpye
+ $stamp_type = $this->findQuery($this->schema->dataTypes['TIMESTAMP']);
+ if ($this->type != 'TIMESTAMP' && // TODO: check that condition
+ ($this->passThrough && strtoupper($this->type) != strtoupper($stamp_type))
+ )
+ trigger_error(self::TEXT_CurrentStampDataType);
+ $def_cmd .= $this->findQuery($this->schema->defaultTypes[strtoupper($this->default)]);
+ } else {
+ // static defaults
+ $pdo_type = preg_match('/int|bool/i', $type_val, $parts) ?
+ constant('\PDO::PARAM_'.strtoupper($parts[0])) : \PDO::PARAM_STR;
+ $def_cmd .= ($this->default === NULL ? 'NULL' :
+ $this->db->quote(htmlspecialchars($this->default, ENT_QUOTES,
+ $this->f3->get('ENCODING')), $pdo_type));
+ }
+ $query .= ' '.$def_cmd;
+ }
+ if (!empty($this->after)) {
+ // `after` feature only works for mysql
+ if (preg_match('/mysql/', $this->db->driver())) {
+ $after_cmd = 'AFTER '.$this->db->quotekey($this->after);
+ $query .= ' '.$after_cmd;
+ }
+ }
+ return $query;
+ }
+}
+
+
+class DB_Utils {
+
+ /** @var \DB\SQL */
+ protected $db;
+
+ /** @var \BASE */
+ protected $f3;
+
+ const
+ TEXT_ENGINE_NOT_SUPPORTED = 'DB Engine `%s` is not supported for this action.';
+
+ /**
+ * parse command array and return backend specific query
+ * @param $cmd
+ * @param $cmd array
+ * @return bool|string
+ */
+ protected function findQuery($cmd)
+ {
+ $match = FALSE;
+ foreach ($cmd as $backend => $val)
+ if (preg_match('/'.$backend.'/', $this->db->driver())) {
+ $match = TRUE;
+ break;
+ }
+ if (!$match) {
+ trigger_error(sprintf(self::TEXT_ENGINE_NOT_SUPPORTED, $this->db->driver()));
+ return FALSE;
+ }
+ return $val;
+ }
+
+ public function __construct(SQL $db) {
+ $this->db = $db;
+ $this->f3 = \Base::instance();
+ }
+}
\ No newline at end of file
diff --git a/app/main/controller/AccessController.php b/app/main/controller/AccessController.php
index f899568c..2d71f048 100644
--- a/app/main/controller/AccessController.php
+++ b/app/main/controller/AccessController.php
@@ -7,8 +7,7 @@
*/
namespace Controller;
-
-use Model\User;
+use Model;
class AccessController extends Controller {
@@ -21,19 +20,55 @@ class AccessController extends Controller {
*/
function beforeroute() {
- parent::beforeroute();
+ $isLoggedIn = $this->_isLoggedIn();
- if($this->isLoggedIn()){
+ if($isLoggedIn){
$accessRoute = true;
}else{
+ $userName = 'abcdefghijklmnopqrst';
+ $password = 'password';
+
// try to verify user
- $accessRoute = $this->verify('exodus 4d', 'test');
+ $accessRoute = $this->_verifyUser($userName, $password);
+
+ if(!$accessRoute){
+ // add new User
+ try{
+ $this->_registerUser($userName, $password);
+ }catch(\Exception\ValidationException $e){
+ // registration failed
+ $this->f3->error($e->getCode(), $e->getMessage());
+ }
+ }
}
- if(!$accessRoute){
+
+ if(
+ !$this->f3->get('AJAX') &&
+ !$accessRoute
+ ){
$this->f3->reroute('/login');
}
+ parent::beforeroute();
+
+ }
+
+ /**
+ * stores a new user in database
+ * @param $username
+ * @param $password
+ * @return null
+ */
+ private function _registerUser($username, $password){
+
+ $user = Model\BasicModel::getNew('UserModel');
+
+ $user->name = $username;
+ $user->password = $user::generatePasswordHash($password);
+ $user->save();
+
+ return $user;
}
/**
@@ -42,32 +77,19 @@ class AccessController extends Controller {
* @param $password
* @return bool
*/
- private function verify($userName, $password) {
+ private function _verifyUser($userName, $password) {
$verify = false;
- // check if user is already logged in
- $isLoggedId = $this->isLoggedIn();
+ $user = Model\BasicModel::getNew('UserModel');
- if($isLoggedId){
+ $user->getByName($userName);
+
+ $isValid = $user->verify($password);
+
+ if($isValid === true){
+ $this->_logIn($user);
$verify = true;
- }else{
- $user = new \Model\UserModel($this->f3->get('DB'));
-
- $auth = new \Auth($user, array('id' => 'name', 'pw' => 'password'));
- $loginResult = $auth->login($userName, $password);
-
- if($loginResult){
- // login
-
- // two step user authentication
- $user->getByAuth($userName, $password);
-
- if(! $user->dry()){
- $this->logIn($user);
- $verify = true;
- }
- }
}
return $verify;
@@ -77,7 +99,7 @@ class AccessController extends Controller {
* checks weather a user is currently logged in
* @return bool
*/
- private function isLoggedIn(){
+ private function _isLoggedIn(){
$loggedIn = false;
@@ -98,11 +120,11 @@ class AccessController extends Controller {
}else{
// log out
// get user model
- $user = new \Model\UserModel($this->f3->get('DB'));
+ $user = Model\BasicModel::getNew('UserModel');
$user->getById($this->f3->get('SESSION.user.id'));
if(! $user->dry()){
- $this->logOut($user);
+ $this->_logOut($user);
}
}
}
@@ -113,22 +135,36 @@ class AccessController extends Controller {
/**
* @param $user
*/
- private function logOut($user){
- $this->f3->clear('SESSION.user');
+ private function _logOut($user){
+ $this->f3->clear('SESSION');
}
/**
* log user in by mapper obj
* @param $user
*/
- private function logIn($user){
+ private function _logIn($user){
// user verified -> set Session login
- new \DB\SQL\Session($this->f3->get('DB'));
-
$dateTime = new \DateTime();
$this->f3->set('SESSION.user.time', $dateTime->getTimestamp());
$this->f3->set('SESSION.user.name', $user->name);
- $this->f3->set('SESSION.user.name', $user->name);
+ $this->f3->set('SESSION.user.id', $user->id);
+ }
+
+ /**
+ *
+ * @return bool|null
+ */
+ protected function _getUser(){
+
+ $user = Model\BasicModel::getNew('UserModel');
+ $user->getById($this->f3->get('SESSION.user.id'));
+
+ if($user->dry()){
+ $user = false;
+ }
+
+ return $user;
}
diff --git a/app/main/controller/Controller.php b/app/main/controller/Controller.php
index 3b0cf846..c2450784 100644
--- a/app/main/controller/Controller.php
+++ b/app/main/controller/Controller.php
@@ -31,14 +31,16 @@ class Controller {
$f3 = \Base::instance();
$this->f3 = $f3;
+
+ // init DB
+ $this->setDB('PF');
}
/**
* event handler
*/
function beforeroute() {
- // init DB
- $this->setDB('PF');
+
}
/**
@@ -51,6 +53,10 @@ class Controller {
}
}
+ /**
+ * set/change DB connection
+ * @param $type
+ */
protected function setDB($type){
if($type === 'CCP'){
@@ -70,7 +76,6 @@ class Controller {
}
$this->f3->set('DB', $db);
-
}
diff --git a/app/main/controller/MapController.php b/app/main/controller/MapController.php
index 865a7ec7..28bc92bd 100644
--- a/app/main/controller/MapController.php
+++ b/app/main/controller/MapController.php
@@ -8,14 +8,46 @@
namespace Controller;
-class MapController extends AccessController {
+class MapController extends Controller {
function __construct() {
parent::__construct();
}
+
public function showMap() {
$this->setTemplate('templates/view/map.html');
}
+
+ /**
+ * function is called on each error
+ * @param $f3
+ */
+ public function showError($f3){
+ print_r($f3->get('ERROR'));
+
+ // set HTTP status
+ if(!empty($f3->get('ERROR.code'))){
+ $f3->status($f3->get('ERROR.code'));
+ }
+
+ if($f3->get('AJAX')){
+ header('Content-type: application/json');
+
+ // error on ajax call
+ $errorData = [
+ 'status' => $f3->get('ERROR.status'),
+ 'code' => $f3->get('ERROR.code'),
+ 'text' => $f3->get('ERROR.text')
+ ];
+
+ echo json_encode($errorData);
+ }else{
+ echo 'TODO: static errors';
+ }
+
+ die();
+ }
+
}
\ No newline at end of file
diff --git a/app/main/controller/api/Map.php b/app/main/controller/api/Map.php
new file mode 100644
index 00000000..ccc1b397
--- /dev/null
+++ b/app/main/controller/api/Map.php
@@ -0,0 +1,197 @@
+expire($expireTimeHead);
+
+ $initData = [];
+
+ // get all available map types -------------------------------------
+ $mapType = Model\BasicModel::getNew('MapTypeModel');
+ $rows = $mapType->find('active = 1', null, $expireTimeSQL);
+
+ $mapTypeData = [];
+ foreach((array)$rows as $rowData){
+ $data = [
+ 'id' => $rowData->id,
+ 'label' => $rowData->label,
+ 'class' => $rowData->class,
+ 'classTab' => $rowData->classTab
+ ];
+ $mapTypeData[$rowData->name] = $data;
+
+ }
+ $initData['mapTypes'] = $mapTypeData;
+
+ // get all available map scopes ------------------------------------
+ $mapScope = Model\BasicModel::getNew('MapScopeModel');
+ $rows = $mapScope->find('active = 1', null, $expireTimeSQL);
+ $mapScopeData = [];
+ foreach((array)$rows as $rowData){
+ $data = [
+ 'id' => $rowData->id,
+ 'label' => $rowData->label
+ ];
+ $mapScopeData[$rowData->name] = $data;
+ }
+ $initData['mapScopes'] = $mapScopeData;
+
+ // get all available system status ------------------------------------
+ $systemStatus = Model\BasicModel::getNew('SystemStatusModel');
+ $rows = $systemStatus->find('active = 1', null, $expireTimeSQL);
+ $systemScopeData = [];
+ foreach((array)$rows as $rowData){
+ $data = [
+ 'id' => $rowData->id,
+ 'label' => $rowData->label,
+ 'class' => $rowData->class
+ ];
+ $systemScopeData[$rowData->name] = $data;
+ }
+ $initData['systemStatus'] = $systemScopeData;
+
+ // get all available system types -------------------------------------
+ $systemType = Model\BasicModel::getNew('SystemTypeModel');
+ $rows = $systemType->find('active = 1', null, $expireTimeSQL);
+ $systemTypeData = [];
+ foreach((array)$rows as $rowData){
+ $data = [
+ 'id' => $rowData->id,
+ 'name' => $rowData->name
+ ];
+ $systemTypeData[$rowData->name] = $data;
+ }
+ $initData['systemType'] = $systemTypeData;
+
+ // get available connection scopes ---------------------------------
+ $connectionScope = Model\BasicModel::getNew('ConnectionScopeModel');
+ $rows = $connectionScope->find('active = 1', null, $expireTimeSQL);
+ $connectionScopeData = [];
+ foreach((array)$rows as $rowData){
+ $data = [
+ 'id' => $rowData->id,
+ 'label' => $rowData->label
+ ];
+ $connectionScopeData[$rowData->name] = $data;
+ }
+ $initData['connectionScopes'] = $connectionScopeData;
+
+ echo json_encode($initData);
+ }
+
+ /**
+ * update map data api
+ * function is called continuously
+ * @param $f3
+ */
+ public function updateData($f3){
+
+ $mapData = (array)$f3->get('POST.mapData');
+
+ $user = $this->_getUser();
+
+ $map = Model\BasicModel::getNew('MapModel');
+ $system = Model\BasicModel::getNew('SystemModel');
+ $connection = Model\BasicModel::getNew('ConnectionModel');
+
+
+
+ foreach($mapData as $data){
+
+ $config = $data['config'];
+ $systems = $data['data']['systems'];
+ $connections = $data['data']['connections'];
+
+ // update map data ---------------------------------------------
+ $map->getById($config['id']);
+
+ // update map on change
+ if( (int)$config['updated'] > strtotime($map->updated)){
+ $map->setData($config);
+ $map->save();
+ }
+
+ // get system data -----------------------------------------------
+ foreach($systems as $systemData){
+
+ $system->getById($systemData['id']);
+
+ if((int)$systemData['updated'] > strtotime($system->updated)){
+ $systemData['mapId'] = $map;
+ $system->setData($systemData);
+ $system->save();
+ }
+
+ $system->reset();
+ }
+
+ // get connection data -------------------------------------------
+ foreach($connections as $connectionData){
+
+ $connection->getById($connectionData['id']);
+
+ if((int)$connectionData['updated'] > strtotime($connection->updated)){
+
+ $connectionData['mapId'] = $map;
+ $connection->setData($connectionData);
+ $connection->save();
+ }
+ $connection->reset();
+ }
+
+ $map->reset();
+ }
+
+ // get map data ======================================================
+
+ $activeMaps = $user->getMaps();
+
+ $newData = [];
+ foreach($activeMaps as $activeMap){
+
+ $newData[] = [
+ 'config' => $activeMap->getData(),
+ 'data' => [
+ 'systems' => $activeMap->getSystemData(),
+ 'connections' => $activeMap->getConnectionData(),
+ ]
+ ];
+ }
+
+
+
+
+ echo json_encode($newData);
+ }
+
+}
\ No newline at end of file
diff --git a/app/main/controller/api/Systems.php b/app/main/controller/api/System.php
similarity index 89%
rename from app/main/controller/api/Systems.php
rename to app/main/controller/api/System.php
index b4b8e287..9dc780d9 100644
--- a/app/main/controller/api/Systems.php
+++ b/app/main/controller/api/System.php
@@ -8,8 +8,9 @@
namespace Controller\Api;
use Data\Mapper as Mapper;
+use Model;
-class Systems extends \Controller\AccessController {
+class System extends \Controller\AccessController {
private $mainQuery = "SELECT
map_sys.constellationID connstallation_id,
@@ -87,7 +88,12 @@ class Systems extends \Controller\AccessController {
return $query;
}
- public function getDataById($f3, $params){
+ /**
+ * get system data by systemId
+ * @param $f3
+ * @param $params
+ */
+ public function getById($f3, $params){
// switch DB
$this->setDB('CCP');
@@ -110,7 +116,15 @@ class Systems extends \Controller\AccessController {
// format result
$mapper = new Mapper\CcpSystemsMapper($rows);
- $data = $mapper->getData();
+ $ccpData = $mapper->getData();
+
+ // switch DB
+ $this->setDB('PF');
+
+ $system = Model\BasicModel::getNew('SystemModel');
+ $system->setData(reset($ccpData));
+
+ $data = $system->getData();
echo json_encode($data);
}
diff --git a/app/main/data/mapper/CcpSystemsMapper.php b/app/main/data/mapper/CcpSystemsMapper.php
index 6e194c6d..de565d78 100644
--- a/app/main/data/mapper/CcpSystemsMapper.php
+++ b/app/main/data/mapper/CcpSystemsMapper.php
@@ -57,16 +57,23 @@ class CcpSystemsMapper extends \RecursiveArrayIterator {
// format functions
self::$map['type'] = function($iterator){
+ // TODO refactore
$type = 'wh';
+ $typeId = 1;
if(
$iterator['security'] == 7 ||
$iterator['security'] == 8 ||
$iterator['security'] == 9
){
$type = 'k-space';
+ $typeId = 2;
+
}
- return $type;
+ return [
+ 'id' => $typeId,
+ 'name' => $type
+ ];
};
iterator_apply($this, 'self::recursiveIterator', array($this));
@@ -92,8 +99,6 @@ class CcpSystemsMapper extends \RecursiveArrayIterator {
// check for mapping key
if(array_key_exists($iterator->key(), self::$map)){
- $removeOldEntry = false;
-
if(is_array(self::$map[$iterator->key()])){
// a -> array mapping
diff --git a/app/main/exception/BaseException.php b/app/main/exception/BaseException.php
new file mode 100644
index 00000000..95ea5fbb
--- /dev/null
+++ b/app/main/exception/BaseException.php
@@ -0,0 +1,21 @@
+_validateField($col, $val);
+
+ if(!$valid){
+ throw new Exception\ValidationException('Field validation: "' . $this->table . '->' . $col . '" not valid', Exception\BaseException::VALIDATION_FAILED);
+ }else{
+ parent::__set($col, $val);
+ }
+ }
+
+ /**
+ * validates a table column based on validation settings
+ * @param $col
+ * @param $val
+ * @return bool
+ */
+ private function _validateField($col, $val){
+ $valid = true;
+
+ if(array_key_exists($col, $this->validate)){
+
+ $fieldValidationOptions = $this->validate[$col];
+
+ foreach($fieldValidationOptions as $validateKey => $validateOption ){
+ if(is_array($fieldValidationOptions[$validateKey])){
+ $fieldSubValidationOptions = $fieldValidationOptions[$validateKey];
+
+ foreach($fieldSubValidationOptions as $validateSubKey => $validateSubOption ){
+ switch($validateKey){
+ case 'length':
+ switch($validateSubKey){
+ case 'min';
+ if(strlen($val) < $validateSubOption){
+ $valid = false;
+ }
+ break;
+ case 'max';
+
+ if(strlen($val) > $validateSubOption){
+ $valid = false;
+ }
+ break;
+ }
+
+ break;
+ }
+ }
+
+ }else{
+ switch($validateKey){
+ case 'regex':
+ $valid = (bool)preg_match($fieldValidationOptions[$validateKey], $val);
+ break;
+ }
+ }
+
+ // a validation rule failed
+ if(!$valid){
+ break;
+ }
+
+ }
+ }
+
+ return $valid;
+ }
+
+
+ /**
+ * get single dataSet by id
+ * @param $id
+ * @return array|FALSE
+ */
+ public function getById($id) {
+ return $this->getByForeignKey('id', (int)$id, array('limit' => 1));
+ }
+
+ /**
+ * get dataSet by foreign column
+ * @param $key
+ * @param $id
+ * @param $options
+ * @return array|FALSE
+ */
+ public function getByForeignKey($key, $id, $options = array()){
+
+ $querySet = [];
+ $query = [];
+ if($this->exists($key)){
+ $query[] = $key . " = :" . $key;
+ $querySet[':' . $key] = $id;
+ }
+
+ // check active column
+ if($this->exists('active')){
+ $query[] = "active = :active";
+ $querySet[':active'] = 1;
+ }
+
+ array_unshift($querySet, implode(' AND ', $query));
+
+ return $this->load( $querySet, $options );
+ }
+
+ /**
+ * get multiple model obj that have an 1->m relation to this model
+ * @param $model
+ * @param $foreignKey
+ * @return mixed
+ */
+ public function getRelatedModels($model, $foreignKey){
+ $model = self::getNew($model);
+ $relatedModels = $model->find(array($foreignKey . ' = ? AND active = 1', $this->id), null, 10);
+
+ return $relatedModels;
+ }
+
+ /**
+ * factory for all Models
+ * @param $model
+ * @return null
+ * @throws \Exception
+ */
+ public static function getNew($model){
+ $class = null;
+
+ $model = '\\' . __NAMESPACE__ . '\\' . $model;
+ if(class_exists($model)){
+ $class = new $model();
+ }else{
+ throw new \Exception('No model class found');
+ }
+
+ return $class;
+ }
+
+}
\ No newline at end of file
diff --git a/app/main/model/ConnectionModel.php b/app/main/model/ConnectionModel.php
new file mode 100644
index 00000000..80d62f2e
--- /dev/null
+++ b/app/main/model/ConnectionModel.php
@@ -0,0 +1,58 @@
+ array(
+ 'belongs-to-one' => 'Model\MapModel'
+ ),
+ 'type' => array(
+ 'type' => self::DT_JSON
+ )
+ );
+
+ /**
+ * set an array with all data for a system
+ * @param $systemData
+ */
+ public function setData($systemData){
+
+ foreach((array)$systemData as $key => $value){
+
+ if(!is_array($value)){
+ if($this->exists($key)){
+ $this->$key = $value;
+ }
+ }elseif($key == 'type'){
+ // json field
+ $this->$key = $value;
+ }
+ }
+ }
+
+ public function getData(){
+
+ $connectionData = [
+ 'id' => $this->id,
+ 'source' => $this->source,
+ 'target' => $this->target,
+ 'scope' => $this->scope,
+ 'type' => $this->type,
+ 'updated' => strtotime($this->updated)
+ ];
+
+ return $connectionData;
+ }
+
+}
\ No newline at end of file
diff --git a/app/main/model/ConnectionScopeModel.php b/app/main/model/ConnectionScopeModel.php
new file mode 100644
index 00000000..303ee103
--- /dev/null
+++ b/app/main/model/ConnectionScopeModel.php
@@ -0,0 +1,16 @@
+ array(
+ 'belongs-to-one' => 'Model\MapScopeModel'
+ ),
+ 'typeId' => array(
+ 'belongs-to-one' => 'Model\MapTypeModel'
+ )
+ );
+
+ protected $validate = [
+ 'name' => [
+ 'length' => [
+ 'min' => 3
+ ]
+ ],
+ 'icon' => [
+ 'length' => [
+ 'min' => 3
+ ]
+ ],
+ 'scopeId' => [
+ 'regex' => '/^[1-9]+$/'
+ ],
+ 'typeId' => [
+ 'regex' => '/^[1-9]+$/'
+ ],
+ ];
+
+ public function setData($data){
+
+ foreach((array)$data as $key => $value){
+
+ if(!is_array($value)){
+ if($this->exists($key)){
+ $this->$key = $value;
+ }
+ }else{
+ // special array data
+ if($key == 'scope'){
+ $this->scopeId = $value['id'];
+ }elseif($key == 'type'){
+ $this->typeId = $value['id'];
+ }
+ }
+ }
+ }
+
+
+ /**
+ * get map data for for response
+ * @return array
+ */
+ public function getData(){
+
+ $mapData = [
+ 'id' => $this->id,
+ 'name' => $this->name,
+ 'scope' => [
+ 'id' => $this->scopeId->id,
+ 'name' => $this->scopeId->name,
+ 'label' => $this->scopeId->label
+ ],
+ 'type' => [
+ 'id' => $this->typeId->id,
+ 'name' => $this->typeId->name
+ ],
+ 'icon' => $this->icon,
+ 'updated' => strtotime($this->updated)
+
+
+ ];
+
+ return $mapData;
+ }
+
+ /**
+ * get all system data for all systems in this map
+ * @return array
+ */
+ public function getSystemData(){
+ $systems = $this->getRelatedModels('SystemModel', 'mapId');
+
+ $systemData = [];
+ foreach($systems as $system){
+ $systemData[] = $system->getData();
+ }
+
+ return $systemData;
+ }
+
+ /**
+ * get all connection data in this map
+ * @return array
+ */
+ public function getConnectionData(){
+ $connections = $this->getRelatedModels('ConnectionModel', 'mapId');
+
+ $connectionData = [];
+ foreach($connections as $connection){
+ $connectionData[] = $connection->getData();
+ }
+
+ return $connectionData;
+ }
+
+
+
+}
\ No newline at end of file
diff --git a/app/main/model/MapScopeModel.php b/app/main/model/MapScopeModel.php
new file mode 100644
index 00000000..8ff84723
--- /dev/null
+++ b/app/main/model/MapScopeModel.php
@@ -0,0 +1,16 @@
+ array(
+ 'belongs-to-one' => 'Model\MapModel'
+ ),
+ 'typeId' => array(
+ 'belongs-to-one' => 'Model\SystemTypeModel'
+ ),
+ 'statusId' => array(
+ 'belongs-to-one' => 'Model\SystemStatusModel'
+ )
+ );
+
+ /**
+ * set an array with all data for a system
+ * @param $systemData
+ */
+ public function setData($systemData){
+
+ foreach((array)$systemData as $key => $value){
+
+ if(!is_array($value)){
+ if($this->exists($key)){
+ $this->$key = $value;
+ }
+ }else{
+ // special array data
+ if($key == 'type'){
+ $this->typeId = $value['id'];
+ }elseif($key == 'constellation'){
+ $this->constellationId = $value['id'];
+ $this->constellation = $value['name'];
+ }elseif($key == 'region'){
+ $this->regionId = $value['id'];
+ $this->region = $value['name'];
+ }elseif($key == 'type'){
+ $this->typeId = $value['id'];
+ }elseif($key == 'status'){
+ $this->statusId = $value['id'];
+ }elseif($key == 'position'){
+ $this->posX = $value['x'];
+ $this->posY = $value['y'];
+ }
+ }
+ }
+ }
+
+ /**
+ * get map data for for response
+ * @return array
+ */
+ public function getData(){
+
+ $systemData = [
+ 'id' => $this->id,
+ 'mapId' => is_object($this->mapId) ? $this->mapId->id : 0,
+ 'systemId' => $this->systemId,
+ 'name' => $this->name,
+ 'alias' => $this->alias,
+ 'effect' => $this->effect,
+ 'security' => $this->security,
+ 'trueSec' => $this->trueSec,
+ 'region' => [
+ 'id' => $this->regionId,
+ 'name' => $this->region
+ ],
+ 'constellation' => [
+ 'id' => $this->constellationId,
+ 'name' => $this->constellation
+ ],
+ 'type' => [
+ 'id' => $this->typeId->id,
+ 'name' => $this->typeId->name
+ ],
+ 'status' => [
+ 'id' => is_object($this->statusId) ? $this->statusId->id : 0,
+ 'name' => is_object($this->statusId) ? $this->statusId->name : ''
+ ],
+ 'locked' => $this->locked,
+ 'rally' => $this->rally,
+ 'position' => [
+ 'x' => $this->posX,
+ 'y' => $this->posY
+ ],
+ 'updated' => strtotime($this->updated)
+
+ ];
+
+
+ return $systemData;
+ }
+
+}
\ No newline at end of file
diff --git a/app/main/model/SystemStatusModel.php b/app/main/model/SystemStatusModel.php
new file mode 100644
index 00000000..dfebf3b7
--- /dev/null
+++ b/app/main/model/SystemStatusModel.php
@@ -0,0 +1,15 @@
+ array(
+ 'belongs-to-one' => 'Model\MapModel'
+ )
+ );
+
+
+
+}
\ No newline at end of file
diff --git a/app/main/model/UserModel.php b/app/main/model/UserModel.php
index 5679a6ef..ba569def 100644
--- a/app/main/model/UserModel.php
+++ b/app/main/model/UserModel.php
@@ -8,19 +8,75 @@
namespace Model;
-class UserModel extends \DB\SQL\Mapper {
+class UserModel extends BasicModel {
- private $tableName = 'user';
+ protected $table = 'user';
- function __construct(\DB\SQL $db) {
- parent::__construct($db, $this->tableName);
+ protected $validate = [
+ 'name' => [
+ 'length' => [
+ 'min' => 5,
+ 'max' => 20
+ ],
+ 'regex' => '/^[ \w-_]+$/'
+ ],
+ 'password' => [
+ 'length' => [
+ 'min' => 5,
+ 'max' => 255
+ ]
+ ]
+ ];
+
+ /**
+ * generate password hash
+ * @param $password
+ * @return FALSE|string
+ */
+ public static function generatePasswordHash($password){
+ // generate random id (23 chars)
+ $salt = uniqid('', true);
+ return \Bcrypt::instance()->hash($password, $salt);
}
- public function getById($id) {
- return $this->load( array('id=?', $id) );
+ /**
+ * search for user by unique username
+ * @param $name
+ * @return array|FALSE
+ */
+ public function getByName($name){
+ return $this->getByForeignKey('name', $name);
}
- public function getByAuth($name, $password){
- return $this->load( array('name=? AND password=?', $name, $password) );
+ /**
+ * verify a user by his wassword
+ * @param $password
+ * @return bool
+ */
+ public function verify($password){
+ $valid = false;
+
+ if(! $this->dry()){
+ $valid = (bool) \Bcrypt::instance()->verify($password, $this->password);
+ }
+
+ return $valid;
}
+
+ /**
+ * get all assessable map models for a single user
+ * @return array
+ */
+ public function getMaps(){
+ $userMaps = $this->getRelatedModels('UserMapModel', 'userId');
+
+ $maps = [];
+ foreach($userMaps as $userMap){
+ $maps[] = $userMap->mapId;
+ }
+
+ return $maps;
+ }
+
+
}
\ No newline at end of file
diff --git a/app/routes.cfg b/app/routes.cfg
index 962eadfe..c2bc0f83 100644
--- a/app/routes.cfg
+++ b/app/routes.cfg
@@ -5,5 +5,5 @@ GET|POST /= Controller\MapController->showMap
GET|POST /login= Controller\Controller->showLogin
; api routes
-GET /api/@controller/@action = Controller\Api\@controller->@action
-GET /api/@controller/@action/@arg1 = Controller\Api\@controller->@action
\ No newline at end of file
+GET|POST /api/@controller/@action = Controller\Api\@controller->@action
+GET|POST /api/@controller/@action/@arg1 = Controller\Api\@controller->@action
\ No newline at end of file
diff --git a/index.php b/index.php
index 8b6e3280..4eb322f5 100644
--- a/index.php
+++ b/index.php
@@ -2,6 +2,9 @@
$f3 = require('app/lib/base.php');
+// sync program with eve server time
+date_default_timezone_set('UTC');
+
// load configuration
$f3->config('app/config.cfg');
diff --git a/js/app.js b/js/app.js
index 161b7fe1..6bcad09e 100644
--- a/js/app.js
+++ b/js/app.js
@@ -27,6 +27,7 @@ requirejs.config({
hoverIntent: 'lib/jquery.hoverIntent.minified', // v1.8.0 Hover intention - http://cherne.net/brian/resources/jquery.hoverIntent.html
fullScreen: 'lib/jquery.fullscreen.min', // v0.5.0 Full screen mode - https://github.com/private-face/jquery.fullscreen
select2: 'lib/select2.min', // v4.0.0 Drop Down customization - https://select2.github.io/
+ validator: 'lib/validator.min', // v0.7.2 Validator for Bootstrap 3 - https://github.com/1000hz/bootstrap-validator
pnotify: 'lib/pnotify/pnotify.core', // v2.0.1 PNotify - notification core file
@@ -93,6 +94,9 @@ requirejs.config({
select2: {
deps : ['jquery'],
exports: 'Select2'
+ },
+ validator: {
+ deps : ['jquery', 'bootstrap']
}
}
});
diff --git a/js/app/init.js b/js/app/init.js
index 020a4741..404056a8 100644
--- a/js/app/init.js
+++ b/js/app/init.js
@@ -22,8 +22,10 @@ define(['jquery'], function($) {
},
path: {
img: 'public/img/', // path for images
- searchSystems: 'api/systems/search', // ajax path - search system by name
- getSystem: 'api/systems/getDataById' // ajax path - get system by id
+ searchSystems: 'api/system/search', // ajax URL - search system by name
+ getSystem: 'api/system/getById', // ajax URL - get system by id
+ initMap: 'api/map/init', // ajax URL - get static data
+ updateMapData: 'api/map/updateData' // ajax URL - main map update call
},
url: {
zKillboard: 'https://zkillboard.com/api/', // killboard api
@@ -49,29 +51,6 @@ define(['jquery'], function($) {
label: 'error'
}
},
- // map types
- mapTypes: {
- standard: {
- class: '',
- classTab: 'pf-map-type-tab-default',
- label: ''
- },
- private: {
- class: 'pf-map-type-private',
- classTab: 'pf-map-type-tab-private',
- label: 'Private'
- },
- alliance: {
- class: 'pf-map-type-alliance',
- classTab: 'pf-map-type-tab-alliance',
- label: 'Alliance'
- },
- global: {
- class: 'pf-map-type-global',
- classTab: 'pf-map-type-tab-global',
- label: 'Global'
- }
- },
// system effects
systemEffects: {
@@ -173,33 +152,6 @@ define(['jquery'], function($) {
class: 'pf-system-security-1-0'
}
},
- // system status
- systemStatus: {
- unknown: {
- class: 'pf-system-status-unknown',
- label: 'unknown'
- },
- friendly: {
- class: 'pf-system-status-friendly',
- label: 'friendly'
- },
- occupied: {
- class: 'pf-system-status-occupied',
- label: 'occupied'
- },
- hostile: {
- class: 'pf-system-status-hostile',
- label: 'hostile'
- },
- empty: {
- class: 'pf-system-status-empty',
- label: 'empty'
- },
- unscanned: {
- class: 'pf-system-status-unscanned',
- label: 'unscanned'
- }
- },
// system info
systemInfo: {
rally: {
@@ -215,17 +167,6 @@ define(['jquery'], function($) {
},
// map scopes
defaultMapScope: 'wh', // default scope for connection
- mapScopes: { // available scopes for a connection
- wh: {
- label: 'wormhole'
- },
- stargate: {
- label: 'stargate'
- },
- jumpbridge: {
- label: 'jumpbridge'
- }
- },
// map connection types
connectionTypes: {
jumpbridge: {
diff --git a/js/app/main.js b/js/app/main.js
index 389c499d..6efdbe62 100644
--- a/js/app/main.js
+++ b/js/app/main.js
@@ -37,9 +37,18 @@ define([
config: {
id: 99,
name: 'Polaris',
- scope: 'wormhole',
+ scope: {
+ id: 1,
+ name: 'wh',
+ label: 'w-space'
+ },
icon: 'fa-globe',
- type: 'alliance' // global, alliance, private
+ type: {
+ id: 1,
+ name: 'alliance',
+ label: 'Alliance'
+ },
+ updated: 1424545904
},
data: {
systems: [
@@ -49,12 +58,26 @@ define([
name: 'J150020',
alias: 'Polaris',
effect: 'magnetar',
- type: 'wh',
+ type: {
+ id: 1,
+ name: 'wh'
+ },
security: 'C6',
trueSec: -1,
- status: 'friendly',
- locked: '1',
- rally: '0',
+ region: {
+ id: '11000030',
+ name: 'F-R00030'
+ },
+ constellation: {
+ id: '21000298',
+ name: 'F-C00298'
+ },
+ status: {
+ id: 2,
+ name: 'friendly'
+ },
+ locked: 1,
+ rally: 0,
position: {
x: 8,
y: 300
@@ -66,10 +89,24 @@ define([
name: 'J115844',
alias: '',
effect: 'wolfRyet',
- type: 'wh',
+ type: {
+ id: 1,
+ name: 'wh'
+ },
security: 'C6',
trueSec: -1,
- status: 'empty',
+ region: {
+ id: '11000030',
+ name: 'F-R00030'
+ },
+ constellation: {
+ id: '21000298',
+ name: 'F-C00298'
+ },
+ status: {
+ id: 5,
+ name: 'empty'
+ },
position: {
x: 25,
y: 40
@@ -82,10 +119,24 @@ define([
name: 'J155207',
alias: '',
effect: 'wolfRyet',
- type: 'wh',
+ type: {
+ id: 1,
+ name: 'wh'
+ },
security: 'C6',
trueSec: -1,
- status: '',
+ region: {
+ id: '11000030',
+ name: 'F-R00030'
+ },
+ constellation: {
+ id: '21000301',
+ name: 'F-C00301'
+ },
+ status: {
+ id: 1,
+ name: 'unknown'
+ },
locked: '1',
rally: '1',
position: {
@@ -101,8 +152,22 @@ define([
effect: 'pulsar',
security: 'C3',
trueSec: -1,
- type: 'wh',
- status: 'hostile',
+ region: {
+ id: '11000030',
+ name: 'F-R00030'
+ },
+ constellation: {
+ id: '21000303',
+ name: 'F-C00303'
+ },
+ type: {
+ id: 1,
+ name: 'wh'
+ },
+ status: {
+ id: 4,
+ name: 'hostile'
+ },
position: {
x: 40,
y: 160
@@ -117,15 +182,21 @@ define([
security: 'L',
trueSec: 0.3,
region: {
- id: '10000036',
+ id: 10000036,
name: 'Devoid'
},
constellation: {
- id: '20000436',
+ id: 20000436,
name: 'Jayai'
},
- type: 'k-space',
- status: '',
+ type: {
+ id: 2,
+ name: 'k-space'
+ },
+ status: {
+ id: 1,
+ name: 'unknown'
+ },
position: {
x: 280,
y: 250
@@ -140,15 +211,21 @@ define([
security: 'H',
trueSec: 0.9,
region: {
- id: '10000002',
+ id: 10000002,
name: 'The Forge'
},
constellation: {
- id: '20000020',
+ id: 20000020,
name: 'Kimotoro'
},
- type: 'k-space',
- status: '',
+ type: {
+ id: 2,
+ name: 'k-space'
+ },
+ status: {
+ id: 1,
+ name: 'unknown'
+ },
position: {
x: 400,
y: 150
@@ -163,15 +240,21 @@ define([
security: 'C1',
trueSec: -1,
region: {
- id: '11000002',
+ id: 11000002,
name: 'A-R00002'
},
constellation: {
- id: '21000002',
+ id: 21000002,
name: 'A-C00002'
},
- type: 'wh',
- status: 'occupied',
+ type: {
+ id: 1,
+ name: 'wh'
+ },
+ status: {
+ id: 3,
+ name: 'occupied'
+ },
position: {
x: 600,
y: 75
@@ -186,15 +269,21 @@ define([
security: 'H',
trueSec: 0.9,
region: {
- id: '10000002',
+ id: 10000002,
name: 'The Forge'
},
constellation: {
id: '20000020',
name: 'Kimotoro'
},
- type: 'k-space',
- status: 'unscanned',
+ type: {
+ id: 2,
+ name: 'k-space'
+ },
+ status: {
+ id: 6,
+ name: 'unscanned'
+ },
position: {
x: 550,
y: 200
@@ -209,15 +298,21 @@ define([
security: '0.0',
trueSec: -0.1,
region: {
- id: '10000012',
+ id: 10000012,
name: 'Curse'
},
constellation: {
id: '20000150',
name: 'Sound'
},
- type: 'k-space',
- status: '',
+ type: {
+ id: 2,
+ name: 'k-space'
+ },
+ status: {
+ id: 1,
+ name: 'unknown'
+ },
position: {
x: 500,
y: 300
@@ -316,46 +411,85 @@ define([
config: {
name: 'Providence',
id: 2,
- scope: 'wormhole',
+ scope: {
+ id: 1,
+ name: 'wh',
+ label: 'w-space'
+ },
icon: 'fa-bookmark',
- type: 'global'
+ type: {
+ id: 3,
+ name: 'global',
+ label: 'global'
+ },
+ updated: 1424545903
},
data: {
systems: [
{
- id: 50,
- systemId: 31002378,
- name: 'J150020',
+ id: 755,
+ systemId: 30000144,
+ name: 'Perimeter',
alias: '',
- effect: 'magnetar',
- security: 'C6',
- type: 'wh',
- status: 'friendly',
+ effect: '',
+ security: 'H',
+ trueSec: 0.9,
+ region: {
+ id: 10000002,
+ name: 'The Forge'
+ },
+ constellation: {
+ id: '20000020',
+ name: 'Kimotoro'
+ },
+ type: {
+ id: 2,
+ name: 'k-space'
+ },
+ status: {
+ id: 6,
+ name: 'unscanned'
+ },
position: {
- x: 5,
+ x: 550,
y: 200
},
updated: 1420903681
},{
- id: 51,
- systemId: 31002375,
- name: 'J115844',
+ id: 8555,
+ systemId: 30001028,
+ name: 'RMOC-W',
alias: '',
- effect: 'wolfRyet',
- security: 'C6',
- type: 'wh',
- status: 'empty',
+ effect: '',
+ security: '0.0',
+ trueSec: -0.1,
+ region: {
+ id: 10000012,
+ name: 'Curse'
+ },
+ constellation: {
+ id: '20000150',
+ name: 'Sound'
+ },
+ type: {
+ id: 2,
+ name: 'k-space'
+ },
+ status: {
+ id: 1,
+ name: 'unknown'
+ },
position: {
- x: 60,
- y: 65
+ x: 500,
+ y: 300
},
updated: 1420903681
}
],
connections: [{
id: 23,
- source: 50,
- target: 51,
+ source: 755,
+ target: 8555,
type: [
'wh_fresh'
],
@@ -368,9 +502,18 @@ define([
config: {
name: 'Exodus 4D',
id: 3,
- scope: 'wormhole',
+ scope: {
+ id: 1,
+ name: 'wh',
+ label: 'w-space'
+ },
icon: 'fa-sitemap',
- type: 'private'
+ type: {
+ id: 2,
+ name: 'private',
+ label: 'private'
+ },
+ updated: 1424545903
},
data: {
systems: [],
@@ -472,8 +615,34 @@ define([
var mapModule = $(this);
- var mapDataUpdateActive = true; // allow update "map data"
- var userDataUpdateActive = true; // allow update "user data"
+ // map init load static data ==================================
+ $.getJSON( Init.path.initMap, function( initData ) {
+
+ Init.mapTypes = initData.mapTypes;
+ Init.mapScopes = initData.mapScopes;
+ Init.connectionScopes = initData.connectionScopes;
+ Init.systemStatus = initData.systemStatus;
+ Init.systemType = initData.systemType;
+
+ console.log(Init.systemType);
+ // init map module
+ mapModule.initMapModule();
+
+ }).fail(function( jqXHR, status, error) {
+ var reason = status + ' ' + jqXHR.status + ': ' + error;
+ Util.emergencyShutdown(reason);
+ });
+
+ });
+
+
+
+
+
+
+ $.fn.initMapModule = function(){
+
+ var mapModule = $(this);
var mapUpdateKey = 'mapUpdate';
var mapUpdateDelay = Init.timer[mapUpdateKey].delay;
@@ -506,17 +675,36 @@ define([
// get updated map data
Util.timeStart(mapModuleDatakey);
- var newMapData = mapModule.getMapModuleData();
+ var updatedMapData = mapModule.getMapModuleData();
var mapDataLogDuration = Util.timeStop(mapModuleDatakey);
-console.log(newMapData)
+
// log execution time
Util.log(mapModuleDatakey, {duration: mapDataLogDuration, description: 'getMapModuleData'});
- //
- setTimeout(function(){
- triggerMapUpdatePing(mapData);
- }, mapUpdateDelay);
+ // wrap array to object
+ updatedMapData = {mapData: updatedMapData};
+ // store updatedMapData
+ $.ajax({
+ type: 'POST',
+ url: Init.path.updateMapData,
+ data: updatedMapData,
+ dataType: 'json'
+ }).done(function(data){
+
+ mapData = data;
+
+ // init new trigger
+ setTimeout(function(){
+ triggerMapUpdatePing(mapData);
+ }, mapUpdateDelay);
+
+ }).fail(function( jqXHR, status, error) {
+ var reason = status + ': ' + error;
+ console.log(error);
+ Util.showNotify({title: jqXHR.status + ': updatedMapData', text: reason, type: 'warning'});
+ $(document).setProgramStatus('problem');
+ });
};
triggerMapUpdatePing(mapData);
@@ -524,29 +712,28 @@ console.log(newMapData)
// ping for user data update -------------------------------------------------------
var triggerUserUpdatePing = function(userData){
- // prevent multiple requests simultaneously
- if(userDataUpdateActive === true){
- $(document).setProgramStatus('online');
+ $(document).setProgramStatus('online');
- userDataUpdateActive = false;
+ Util.timeStart(mapUserUpdateKey);
+ mapModule.updateMapModuleData(userData);
+ var duration = Util.timeStop(mapUserUpdateKey);
- Util.timeStart(mapUserUpdateKey);
- userDataUpdateActive = mapModule.updateMapModuleData(userData);
- var duration = Util.timeStop(mapUserUpdateKey);
-
- // log execution time
- Util.log(mapUserUpdateKey, {duration: duration, description:'updateMapModuleData'});
-
-
- }else{
- // not finished in time -> to slow or error
- $(document).setProgramStatus('problem');
- }
+ // log execution time
+ Util.log(mapUserUpdateKey, {duration: duration, description:'updateMapModuleData'});
+ // init new trigger
+ setTimeout(function(){
+ triggerUserUpdatePing(tempUserData);
+ }, mapUserUpdateDelay);
};
- setInterval(triggerUserUpdatePing, mapUserUpdateDelay, tempUserData);
- });
+ // start user update trigger after map loaded
+ setTimeout(function(){
+ triggerUserUpdatePing(tempUserData);
+ }, 2000);
+
+ };
+
});
diff --git a/js/app/map/map.js b/js/app/map/map.js
index 8f37fe0f..84f06d4e 100644
--- a/js/app/map/map.js
+++ b/js/app/map/map.js
@@ -5,6 +5,7 @@ define([
'app/render',
'bootbox',
'app/ccp',
+ 'validator',
'jsPlumb',
'customScrollbar',
'dragToSelect',
@@ -19,6 +20,7 @@ define([
// TODO: remove temp ID counter
tempId: 100,
zIndexCounter: 110,
+ logTimerCount: 3, // map log timer in seconds
newSystemOffset: {
x: 150,
y: 0
@@ -58,7 +60,8 @@ define([
systemContextMenuId: 'pf-map-system-contextmenu',
// dialogs
- systemDialogId: 'pf-system-dialog',
+ systemDialogId: 'pf-system-dialog', // id for system dialog
+ systemDialogSelectClass: 'pf-system-dialog-select', // id for system select Element
// system security classes
systemSec: 'pf-system-sec',
@@ -470,19 +473,18 @@ define([
$.fn.setSystemStatus = function(status){
var system = $(this);
+ var statusId = Util.getStatusInfoForSystem(status, 'id');
var statusClass = Util.getStatusInfoForSystem(status, 'class');
- var statusLabel = Util.getStatusInfoForSystem(status, 'label');
- for(var property in Init.classes.systemStatus) {
- if (Init.classes.systemStatus.hasOwnProperty(property)) {
- system.removeClass( Init.classes.systemStatus[property].class );
+ for(var property in Init.systemStatus) {
+ if (Init.systemStatus.hasOwnProperty(property)) {
+ system.removeClass( Init.systemStatus[property].class );
}
}
// add new class
- system.data('status', statusLabel);
+ system.data('statusId', statusId);
system.addClass( statusClass );
-
};
/**
@@ -574,14 +576,20 @@ define([
system.find('.' + config.systemHeadNameClass).attr('data-value', systemName);
// set system status
- system.setSystemStatus(data.status);
+ system.setSystemStatus(data.status.name);
system.data('id', parseInt(data.id));
system.data('systemId', parseInt(data.systemId));
system.data('name', data.name);
- system.data('type', data.type);
+ system.data('typeId', data.type.id);
system.data('effect', data.effect);
+ system.data('security', data.security);
system.data('trueSec', parseFloat(data.trueSec));
+ system.data('regionId', parseInt(data.region.id));
+ system.data('region', data.region.name);
+ system.data('constellationId', parseInt(data.constellation.id));
+ system.data('constellation', data.constellation.name);
+
system.data('updated', data.updated);
system.attr('data-mapid', mapContainer.data('id'));
@@ -644,9 +652,10 @@ define([
// add additional information
mapContainer.data('name', mapConfig.config.name);
- mapContainer.data('scope', mapConfig.config.scope);
+ mapContainer.data('scopeId', mapConfig.config.scope.id);
+ mapContainer.data('typeId', mapConfig.config.type.id);
mapContainer.data('icon', mapConfig.config.icon);
- mapContainer.data('type', mapConfig.config.type);
+ mapContainer.data('updated', mapConfig.config.updated);
// get map data
var mapData = mapContainer.getMapData();
@@ -1090,7 +1099,7 @@ define([
var mapOverlay = $(this);
var counterChart = mapOverlay.getMapCounter();
- var seconds = 10;
+ var seconds = config.logTimerCount;
var fadeEffectDuration = 200;
// get counter interval (in case there is an active one)
@@ -1214,7 +1223,7 @@ define([
// connection have the default map Scope scope
var scope = map.Defaults.Scope;
if(connectionData.scope){
- scope = connectionData.scope;
+ scope = connectionData.scope.name;
}
var connection = map.connect({
@@ -1222,7 +1231,8 @@ define([
target: config.systemIdPrefix + mapId + '-' + connectionData.target,
scope: scope,
parameters: {
- connectionId: connectionId
+ connectionId: connectionId,
+ updated: connectionData.updated
}
/* experimental (straight connections)
anchors: [
@@ -1435,7 +1445,7 @@ define([
var initSystemContextMenu = function(){
var systemStatus = [];
- $.each(Init.classes.systemStatus, function(status, statusData){
+ $.each(Init.systemStatus, function(status, statusData){
var tempStatus = {
subIcon: 'fa-circle',
subIconClass: statusData.class,
@@ -2307,7 +2317,7 @@ define([
case 'scope_jumpbridge':
var newScope = action.split('_')[1];
- var newScopeName = Util.getScopeInfoForMap( newScope, 'label');
+ var newScopeName = Util.getScopeInfoForConnection( newScope, 'label');
bootbox.confirm('Change scope from ' + activeScopeName + ' to ' + newScopeName + '?', function(result) {
if(result){
@@ -2392,7 +2402,7 @@ define([
// format system status for form select
var systemStatus = {};
- $.each(Init.classes.systemStatus, function(status, statusData){
+ $.each(Init.systemStatus, function(status, statusData){
//statusData.status = status;
//systemStatus.push(statusData);
systemStatus[status] = statusData.label;
@@ -2401,8 +2411,8 @@ define([
var data = {
id: config.systemDialogId,
- system: 'lalala',
- status: systemStatus
+ status: systemStatus,
+ selectClass: config.systemDialogSelectClass
};
requirejs(['text!templates/modules/system_dialog.html', 'mustache'], function(template, Mustache) {
@@ -2424,72 +2434,79 @@ define([
}
},
success: {
- label: 'Add system',
+ label: ' add system',
className: 'btn-primary',
- callback: function () {
+ callback: function (e) {
// get form Values
var form = $('#' + config.systemDialogId).find('form');
var systemDialogData = $(form).getFormValues();
+ // validate form
+ form.validator('validate');
+
+ // check weather the form is valid
+ var formValid = form.isValidForm();
+
+ if(formValid === false){
+ // don't close dialog
+ return false;
+
+ }
+
// get system information
var requestUrl = Init.path.getSystem + '/' + parseInt( systemDialogData.systemId );
$.getJSON( requestUrl, function( systemData ) {
- if(systemData.length === 1){
+ mapContainer.getMapOverlay().startMapUpdateCounter();
- mapContainer.getMapOverlay().startMapUpdateCounter();
+ // merge dialog data and backend data
+ var newSystemData = $.extend(systemData, systemDialogData);
- systemData = systemData.shift();
+ var currentX = 0;
+ var currentY = 0;
- // merge dialog data and backend data
- var newSystemData = $.extend(systemData, systemDialogData);
+ var newPositon = {
+ x: 0,
+ y: 0
+ };
- var currentX = 0;
- var currentY = 0;
+ var sourceSystem = null;
- var newPositon = {
- x: 0,
- y: 0
+ // add new position
+ if(options.sourceSystem !== undefined){
+
+ sourceSystem = options.sourceSystem;
+
+ // related system is available
+ currentX = sourceSystem.css('left');
+ currentY = sourceSystem.css('top');
+
+ // remove "px"
+ currentX = parseInt( currentX.substring(0, currentX.length - 2) );
+ currentY = parseInt( currentY.substring(0, currentY.length - 2) );
+
+ newPositon = {
+ x: currentX + config.newSystemOffset.x,
+ y: currentY + config.newSystemOffset.y
+ };
+ }else{
+ // check mouse cursor position (add system to map)
+ newPositon = {
+ x: options.position.x,
+ y: options.position.y
};
-
- var sourceSystem = null;
-
- // add new position
- if(options.sourceSystem !== undefined){
-
- sourceSystem = options.sourceSystem;
-
- // related system is available
- currentX = sourceSystem.css('left');
- currentY = sourceSystem.css('top');
-
- // remove "px"
- currentX = parseInt( currentX.substring(0, currentX.length - 2) );
- currentY = parseInt( currentY.substring(0, currentY.length - 2) );
-
- newPositon = {
- x: currentX + config.newSystemOffset.x,
- y: currentY + config.newSystemOffset.y
- };
- }else{
- // check mouse cursor position (add system to map)
- newPositon = {
- x: options.position.x,
- y: options.position.y
- };
- }
-
- newSystemData.position = newPositon;
-
- // draw new system to map
- drawSystem(map, newSystemData, sourceSystem);
-
}
+
+ newSystemData.position = newPositon;
+
+ // draw new system to map
+ drawSystem(map, newSystemData, sourceSystem);
+
+
}).fail(function( jqXHR, status, error) {
var reason = status + ': ' + error;
Util.showNotify({title: jqXHR.status + ': System search failed', text: reason, type: 'warning'});
-
});
}
@@ -2497,12 +2514,14 @@ define([
}
});
-
// init dialog
systemDialog.on('shown.bs.modal', function(e) {
+ var modalContent = $('#' + config.systemDialogId);
+
// init system select live search
- var selectElement = $(".js-example-basic-single");
+ var selectElement = modalContent.find('.' + config.systemDialogSelectClass);
+
$.when(
selectElement.select2({
ajax: {
@@ -2542,11 +2561,12 @@ define([
}
},
minimumInputLength: 2,
- placeholder: 'Name',
+ placeholder: 'Jita',
allowClear: true
})
).done(function(){
- $('#testId').css({'display': 'block'});
+ // open select
+ selectElement.select2('open');
});
});
@@ -2561,7 +2581,8 @@ define([
emptytext: 'unknown',
onblur: 'submit',
showbuttons: false,
- source: systemStatus
+ source: systemStatus,
+ inputclass: config.systemDialogSelectClass
});
});
@@ -2674,11 +2695,16 @@ define([
){
// map config ---------------------------------
var mapConfig = {};
- mapConfig.id = mapElement.data('id');
+ mapConfig.id = parseInt( mapElement.data('id') );
mapConfig.name = mapElement.data('name');
- mapConfig.scope = mapElement.data('scope');
+ mapConfig.scope = {
+ id: parseInt( mapElement.data('scopeId') )
+ };
mapConfig.icon = mapElement.data('icon');
- mapConfig.type = mapElement.data('type');
+ mapConfig.type = {
+ id: parseInt( mapElement.data('typeId') )
+ };
+ mapConfig.updated = parseInt( mapElement.data('updated') );
mapData.config = mapConfig;
// map data -----------------------------------
@@ -2691,19 +2717,31 @@ define([
for(var i = 0; i < systems.length; i++){
// systems data ------------------------------------
-
var tempSystem = $(systems[i]);
var systemData = {};
systemData.id = parseInt( tempSystem.data('id') );
systemData.systemId = parseInt( tempSystem.data('systemId') );
systemData.name = tempSystem.data('name');
systemData.alias = tempSystem.getSystemInfo(['alias']);
- systemData.type = tempSystem.data('type');
- systemData.status = tempSystem.data('status');
systemData.effect = tempSystem.data('effect');
+ systemData.type = {
+ id: tempSystem.data('typeId')
+ };
+ systemData.security = tempSystem.data('security');
systemData.trueSec = tempSystem.data('trueSec');
- systemData.locked = parseInt( tempSystem.data('locked') );
- systemData.rally = parseInt( tempSystem.data('rally') );
+ systemData.region = {
+ id: tempSystem.data('regionId'),
+ name: tempSystem.data('region')
+ };
+ systemData.constellation = {
+ id: tempSystem.data('constellationId'),
+ name: tempSystem.data('constellation')
+ };
+ systemData.status = {
+ id: tempSystem.data('statusId')
+ };
+ systemData.locked = tempSystem.data('locked') ? 1 : 0;
+ systemData.rally = tempSystem.data('rally') ? 1 : 0;
systemData.currentUser = tempSystem.data('currentUser');
systemData.updated = parseInt( tempSystem.data('updated') );
systemData.userCount = (tempSystem.data('userCount') ? parseInt( tempSystem.data('userCount') ) : 0);
@@ -2739,6 +2777,8 @@ define([
var target = $(tempConnection.target);
var connectionId = tempConnection.getParameter('connectionId');
+ var updated = tempConnection.getParameter('updated');
+
var connection = {
id: connectionId,
@@ -2747,7 +2787,8 @@ define([
target: target.data('id'),
targetName: target.data('name'),
scope: tempConnection.scope,
- type: tempConnection.getType()
+ type: tempConnection.getType(),
+ updated: updated
};
// add to cache
@@ -2772,6 +2813,7 @@ define([
if(typeof activeInstances[mapId] !== 'object'){
// create new instance
jsPlumb.Defaults.LogEnabled = true;
+
var newJsPlumbInstance = jsPlumb.getInstance({
Container: null, // will be set as soon as container is connected to DOM
PaintStyle:{
diff --git a/js/app/module_map.js b/js/app/module_map.js
index 2b6c6b2c..65cb1b47 100644
--- a/js/app/module_map.js
+++ b/js/app/module_map.js
@@ -65,12 +65,6 @@ define([
sigTableEditSigTypeSelect: 'pf-sig-table-edit-type-select', // class for editable fields (select)
sigTableEditSigNameSelect: 'pf-sig-table-edit-name-select', // class for editable fields (select)
sigTableCounterClass: 'pf-sig-table-counter', // class for signature table counter
-
- // map scopes
- mapScopes: [
- {scope: 'wormhole', label: 'W-Space'}
- ]
-
};
var cache = {
@@ -498,7 +492,7 @@ define([
var signatureTable = moduleElement.find('.' + config.sigTableMainClass);
var signatureDataTable = $(signatureTable).DataTable();
- // TODO save NEW sigantures and get them back with NEW ID :)
+ // TODO save NEW signatures and get them back with NEW ID :)
var systemData = tempFunctionGetSystemData();
// fake data for new signature table entry
@@ -2007,7 +2001,7 @@ define([
var tabOptions = {
id: parseInt( data.config.id ),
- tabClasses: [config.mapTabClass, Util.getInfoForMap( data.config.type, 'classTab') ],
+ tabClasses: [config.mapTabClass, Util.getInfoForMap( data.config.type.name, 'classTab') ],
contentClasses: [config.mapTabContentClass],
active: false,
icon: data.config.icon,
@@ -2052,7 +2046,7 @@ define([
var tabOptions = {
id: parseInt( data.config.id ),
- tabClasses: [config.mapTabClass, Util.getInfoForMap( data.config.type, 'classTab') ],
+ tabClasses: [config.mapTabClass, Util.getInfoForMap( data.config.type.name, 'classTab') ],
contentClasses: [config.mapTabContentClass],
active: activeTab,
icon: data.config.icon,
diff --git a/js/app/page.js b/js/app/page.js
index 50fd925f..4acba84e 100644
--- a/js/app/page.js
+++ b/js/app/page.js
@@ -563,13 +563,13 @@ define([
requirejs(['text!templates/modules/map_dialog.html', 'mustache'], function(template, Mustache) {
var data = {
- id: config.newMapDialogId,
- scope: config.mapScopes,
+ id: Init.newMapDialogId,
+ scope: Util.getMapScopes(),
type: Util.getMapTypes(),
icon: Util.getMapIcons(),
formData: formData
};
-
+ console.log(data);
var content = Mustache.render(template, data);
var dialogTitle = 'New map';
@@ -946,10 +946,8 @@ define([
}).velocity('fadeIn', {
duration: Init.animationSpeed.headerLink
});
-
}
-
programStatusCounter--;
if(programStatusCounter <= 0){
@@ -961,21 +959,10 @@ define([
if(! programStatusInterval){
programStatusCounter = Init.timer.programStatusVisible;
programStatusInterval = setInterval(timer, 1000);
-
}
-
-
}
-
-
-
}
-
-
-
-
}
-
};
diff --git a/js/app/util.js b/js/app/util.js
index f09c59b2..4132f225 100644
--- a/js/app/util.js
+++ b/js/app/util.js
@@ -204,6 +204,24 @@ define([
return formData;
};
+ /**
+ * checks weather a bootstrap form is valid or not
+ * validation plugin does not provide a proper function for this
+ * @returns {boolean}
+ */
+ $.fn.isValidForm = function(){
+ var form = $(this);
+ var valid = false;
+
+ var errorElements = form.find('.has-error');
+
+ if(errorElements.length === 0){
+ valid = true;
+ }
+
+ return valid;
+ };
+
/**
* checks if an element is currently visible in viewport
@@ -342,14 +360,12 @@ define([
var mapTypes = [];
- $.each(Init.classes.mapTypes, function(prop, data){
+ $.each(Init.mapTypes, function(prop, data){
// skip "default" type -> just for 'add' icon
if(data.label.length > 0){
- var tempData = {
- type: prop,
- label: data.label
- };
+ var tempData = data;
+ tempData.name = prop;
mapTypes.push(tempData);
}
@@ -368,8 +384,8 @@ define([
var mapInfo = '';
- if(Init.classes.mapTypes.hasOwnProperty(mapType)){
- mapInfo = Init.classes.mapTypes[mapType][option];
+ if(Init.mapTypes.hasOwnProperty(mapType)){
+ mapInfo = Init.mapTypes[mapType][option];
}
return mapInfo;
@@ -383,7 +399,9 @@ define([
var scopes = [];
$.each(Init.mapScopes, function(prop, data){
- scopes.push(prop);
+ var tempData = data;
+ tempData.name = prop;
+ scopes.push(tempData);
});
return scopes;
@@ -406,6 +424,23 @@ define([
return scopeInfo;
};
+ /**
+ * get some scope info for a given info string
+ * @param info
+ * @param option
+ * @returns {string}
+ */
+ var getScopeInfoForConnection = function(info, option){
+
+ var scopeInfo = '';
+
+ if(Init.connectionScopes.hasOwnProperty(info)){
+ scopeInfo = Init.connectionScopes[info][option];
+ }
+
+ return scopeInfo;
+ };
+
/**
* get some system info for a given info string (e.g. rally class)
* @param info
@@ -544,8 +579,8 @@ define([
var statusInfo = '';
- if( Init.classes.systemStatus.hasOwnProperty(status) ){
- statusInfo = Init.classes.systemStatus[status][option];
+ if( Init.systemStatus.hasOwnProperty(status) ){
+ statusInfo = Init.systemStatus[status][option];
}
return statusInfo;
@@ -749,6 +784,7 @@ define([
getInfoForMap: getInfoForMap,
getMapScopes: getMapScopes,
getScopeInfoForMap: getScopeInfoForMap,
+ getScopeInfoForConnection: getScopeInfoForConnection,
getInfoForSystem: getInfoForSystem,
getEffectInfoForSystem: getEffectInfoForSystem,
getSystemEffectData: getSystemEffectData,
diff --git a/js/lib/validator.min.js b/js/lib/validator.min.js
new file mode 100644
index 00000000..3aeaefbe
--- /dev/null
+++ b/js/lib/validator.min.js
@@ -0,0 +1,9 @@
+/*!
+ * Validator v0.7.2 for Bootstrap 3, by @1000hz
+ * Copyright 2015 Cina Saffary
+ * Licensed under http://opensource.org/licenses/MIT
+ *
+ * https://github.com/1000hz/bootstrap-validator
+ */
+
++function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),f=d.data("bs.validator");(f||"destroy"!=b)&&(f||d.data("bs.validator",f=new c(this,e)),"string"==typeof b&&f[b]())})}var c=function(b,c){this.$element=a(b),this.options=c,this.$element.attr("novalidate",!0),this.toggleSubmit(),this.$element.on("input.bs.validator change.bs.validator focusout.bs.validator",a.proxy(this.validateInput,this)),this.$element.on("submit.bs.validator",a.proxy(this.onSubmit,this)),this.$element.find("[data-match]").each(function(){var b=a(this),c=b.data("match");a(c).on("input.bs.validator",function(){b.val()&&b.trigger("input.bs.validator")})})};c.DEFAULTS={delay:500,html:!1,disable:!0,errors:{match:"Does not match",minlength:"Not long enough"}},c.VALIDATORS={"native":function(a){var b=a[0];return b.checkValidity?b.checkValidity():!0},match:function(b){var c=b.data("match");return!b.val()||b.val()===a(c).val()},minlength:function(a){var b=a.data("minlength");return!a.val()||a.val().length>=b}},c.prototype.validateInput=function(b){var c=a(b.target),d=c.data("bs.validator.errors");if(c.is('[type="radio"]')&&(c=this.$element.find('input[name="'+c.attr("name")+'"]')),this.$element.trigger(b=a.Event("validate.bs.validator",{relatedTarget:c[0]})),!b.isDefaultPrevented()){var e=this;this.runValidators(c).done(function(f){c.data("bs.validator.errors",f),f.length?e.showErrors(c):e.clearErrors(c),d&&f.toString()===d.toString()||(b=f.length?a.Event("invalid.bs.validator",{relatedTarget:c[0],detail:f}):a.Event("valid.bs.validator",{relatedTarget:c[0],detail:d}),e.$element.trigger(b)),e.toggleSubmit(),e.$element.trigger(a.Event("validated.bs.validator",{relatedTarget:c[0]}))})}},c.prototype.runValidators=function(b){function d(a){return b.data(a+"-error")||b.data("error")||"native"==a&&b[0].validationMessage||g.errors[a]}var e=[],f=([c.VALIDATORS.native],a.Deferred()),g=this.options;return b.data("bs.validator.deferred")&&b.data("bs.validator.deferred").reject(),b.data("bs.validator.deferred",f),a.each(c.VALIDATORS,a.proxy(function(a,c){if((b.data(a)||"native"==a)&&!c.call(this,b)){var f=d(a);!~e.indexOf(f)&&e.push(f)}},this)),!e.length&&b.val()&&b.data("remote")?this.defer(b,function(){var c={};c[b.attr("name")]=b.val(),a.get(b.data("remote"),c).fail(function(a,b,c){e.push(d("remote")||c)}).always(function(){f.resolve(e)})}):f.resolve(e),f.promise()},c.prototype.validate=function(){var a=this.options.delay;return this.options.delay=0,this.$element.find(":input").trigger("input.bs.validator"),this.options.delay=a,this},c.prototype.showErrors=function(b){var c=this.options.html?"html":"text";this.defer(b,function(){var d=b.closest(".form-group"),e=d.find(".help-block.with-errors"),f=b.data("bs.validator.errors");f.length&&(f=a("").addClass("list-unstyled").append(a.map(f,function(b){return a("")[c](b)})),void 0===e.data("bs.validator.originalContent")&&e.data("bs.validator.originalContent",e.html()),e.empty().append(f),d.addClass("has-error"))})},c.prototype.clearErrors=function(a){var b=a.closest(".form-group"),c=b.find(".help-block.with-errors");c.html(c.data("bs.validator.originalContent")),b.removeClass("has-error")},c.prototype.hasErrors=function(){function b(){return!!(a(this).data("bs.validator.errors")||[]).length}return!!this.$element.find(":input:enabled").filter(b).length},c.prototype.isIncomplete=function(){function b(){return"checkbox"===this.type?!this.checked:"radio"===this.type?!a('[name="'+this.name+'"]:checked').length:""===a.trim(this.value)}return!!this.$element.find(":input[required]:enabled").filter(b).length},c.prototype.onSubmit=function(a){this.validate(),(this.isIncomplete()||this.hasErrors())&&a.preventDefault()},c.prototype.toggleSubmit=function(){if(this.options.disable){var a=this.$element.find('input[type="submit"], button[type="submit"]');a.toggleClass("disabled",this.isIncomplete()||this.hasErrors()).css({"pointer-events":"all",cursor:"pointer"})}},c.prototype.defer=function(a,b){return this.options.delay?(window.clearTimeout(a.data("bs.validator.timeout")),void a.data("bs.validator.timeout",window.setTimeout(b,this.options.delay))):b()},c.prototype.destroy=function(){return this.$element.removeAttr("novalidate").removeData("bs.validator").off(".bs.validator"),this.$element.find(":input").off(".bs.validator").removeData(["bs.validator.errors","bs.validator.deferred"]).each(function(){var b=a(this),c=b.data("bs.validator.timeout");window.clearTimeout(c)&&b.removeData("bs.validator.timeout")}),this.$element.find(".help-block.with-errors").each(function(){var b=a(this),c=b.data("bs.validator.originalContent");b.removeData("bs.validator.originalContent").html(c)}),this.$element.find('input[type="submit"], button[type="submit"]').removeClass("disabled"),this.$element.find(".has-error").removeClass("has-error"),this};var d=a.fn.validator;a.fn.validator=b,a.fn.validator.Constructor=c,a.fn.validator.noConflict=function(){return a.fn.validator=d,this},a(window).on("load",function(){a('form[data-toggle="validator"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery);
\ No newline at end of file
diff --git a/public/css/pathfinder.css b/public/css/pathfinder.css
index c0b96b63..2701960f 100644
--- a/public/css/pathfinder.css
+++ b/public/css/pathfinder.css
@@ -15,7 +15,7 @@
* http://www.apache.org/licenses/LICENSE-2.0
*
* Designed and built with all the love in the world by @mdo and @fat.
- */*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:transparent}body{font-family:"Oxygen","Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;font-size:12px;line-height:1.5;color:#63676a;background-color:#313335}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#375959;text-decoration:none}a:hover,a:focus{color:#1a2a2a;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;text-decoration:none}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.5;background-color:#313335;border:1px solid #ddd;border-radius:0px;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:18px;margin-bottom:18px;border:0;border-top:1px solid #adadad}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:"Oxygen","Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:700;line-height:1.1;color:inherit}h1 small,h1 .small,h2 small,h2 .small,h3 small,h3 .small,h4 small,h4 .small,h5 small,h5 .small,h6 small,h6 .small,.h1 small,.h1 .small,.h2 small,.h2 .small,.h3 small,.h3 .small,.h4 small,.h4 .small,.h5 small,.h5 .small,.h6 small,.h6 .small{font-weight:normal;line-height:1;color:#63676a}h1,.h1,h2,.h2,h3,.h3{margin-top:18px;margin-bottom:9px}h1 small,h1 .small,.h1 small,.h1 .small,h2 small,h2 .small,.h2 small,.h2 .small,h3 small,h3 .small,.h3 small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:9px;margin-bottom:9px}h4 small,h4 .small,.h4 small,.h4 .small,h5 small,h5 .small,.h5 small,.h5 .small,h6 small,h6 .small,.h6 small,.h6 .small{font-size:75%}h1,.h1{font-size:22px}h2,.h2{font-size:14px}h3,.h3{font-size:17px}h4,.h4{font-size:12px}h5,.h5{font-size:15px}h6,.h6{font-size:13px}p{margin:0 0 9px}.lead{margin-bottom:18px;font-size:13px;font-weight:200;line-height:1.4}@media (min-width: 780px){.lead{font-size:18px}}small,.small{font-size:85%}cite{font-style:normal}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-muted{color:#63676a}.text-primary{color:#375959}a.text-primary:hover{color:#243939}.text-success{color:#2b2b2b}a.text-success:hover{color:#121212}.text-info{color:#2b2b2b}a.text-info:hover{color:#121212}.text-warning{color:#2b2b2b}a.text-warning:hover{color:#121212}.text-danger{color:#2b2b2b}a.text-danger:hover{color:#121212}.bg-primary{color:#fff}.bg-primary{background-color:#375959}a.bg-primary:hover{background-color:#243939}.bg-success{background-color:#d1e8d1}a.bg-success:hover{background-color:#afd7af}.bg-info{background-color:#abc9e2}a.bg-info:hover{background-color:#85b0d5}.bg-warning{background-color:#fef8f0}a.bg-warning:hover{background-color:#fbe3c0}.bg-danger{background-color:#f6d1d0}a.bg-danger:hover{background-color:#eda7a5}.page-header{padding-bottom:8px;margin:36px 0 18px;border-bottom:1px solid #adadad}ul,ol{margin-top:0;margin-bottom:9px}ul ul,ul ol,ol ul,ol ol{margin-bottom:0}.list-unstyled,.list-inline{padding-left:0;list-style:none}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:18px}dt,dd{line-height:1.5}dt{font-weight:bold}dd{margin-left:0}@media (min-width: 780px){.dl-horizontal dt{float:left;width:80px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:100px}.dl-horizontal dd:before,.dl-horizontal dd:after{content:" ";display:table}.dl-horizontal dd:after{clear:both}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #63676a}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:9px 18px;margin:0 0 18px;font-size:15px;border-left:5px solid #5cb85c}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.5;color:#63676a}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #5cb85c;border-left:0;text-align:right}.blockquote-reverse footer:before,.blockquote-reverse small:before,.blockquote-reverse .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,.blockquote-reverse small:after,.blockquote-reverse .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:18px;font-style:normal;line-height:1.5}code,kbd,pre,samp{font-family:Monaco,Menlo,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;white-space:nowrap;border-radius:0px}kbd{padding:2px 4px;font-size:90%;color:#adadad;background-color:#2b2b2b;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}pre{display:block;padding:8.5px;margin:0 0 9px;font-size:11px;line-height:1.5;word-break:break-all;word-wrap:break-word;color:#313335;background-color:#f5f5f5;border:1px solid #ccc;border-radius:0px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:10px;padding-right:10px}.container:before,.container:after{content:" ";display:table}.container:after{clear:both}@media (min-width: 780px){.container{width:740px}}@media (min-width: 1200px){.container{width:960px}}@media (min-width: 1600px){.container{width:1160px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:10px;padding-right:10px}.container-fluid:before,.container-fluid:after{content:" ";display:table}.container-fluid:after{clear:both}.row{margin-left:-10px;margin-right:-10px}.row:before,.row:after{content:" ";display:table}.row:after{clear:both}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:10px;padding-right:10px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-1{width:8.3333333333%}.col-xs-2{width:16.6666666667%}.col-xs-3{width:25%}.col-xs-4{width:33.3333333333%}.col-xs-5{width:41.6666666667%}.col-xs-6{width:50%}.col-xs-7{width:58.3333333333%}.col-xs-8{width:66.6666666667%}.col-xs-9{width:75%}.col-xs-10{width:83.3333333333%}.col-xs-11{width:91.6666666667%}.col-xs-12{width:100%}.col-xs-pull-0{right:0%}.col-xs-pull-1{right:8.3333333333%}.col-xs-pull-2{right:16.6666666667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.3333333333%}.col-xs-pull-5{right:41.6666666667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.3333333333%}.col-xs-pull-8{right:66.6666666667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.3333333333%}.col-xs-pull-11{right:91.6666666667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:0%}.col-xs-push-1{left:8.3333333333%}.col-xs-push-2{left:16.6666666667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.3333333333%}.col-xs-push-5{left:41.6666666667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.3333333333%}.col-xs-push-8{left:66.6666666667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.3333333333%}.col-xs-push-11{left:91.6666666667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0%}.col-xs-offset-1{margin-left:8.3333333333%}.col-xs-offset-2{margin-left:16.6666666667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.3333333333%}.col-xs-offset-5{margin-left:41.6666666667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.3333333333%}.col-xs-offset-8{margin-left:66.6666666667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.3333333333%}.col-xs-offset-11{margin-left:91.6666666667%}.col-xs-offset-12{margin-left:100%}@media (min-width: 780px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-1{width:8.3333333333%}.col-sm-2{width:16.6666666667%}.col-sm-3{width:25%}.col-sm-4{width:33.3333333333%}.col-sm-5{width:41.6666666667%}.col-sm-6{width:50%}.col-sm-7{width:58.3333333333%}.col-sm-8{width:66.6666666667%}.col-sm-9{width:75%}.col-sm-10{width:83.3333333333%}.col-sm-11{width:91.6666666667%}.col-sm-12{width:100%}.col-sm-pull-0{right:0%}.col-sm-pull-1{right:8.3333333333%}.col-sm-pull-2{right:16.6666666667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.3333333333%}.col-sm-pull-5{right:41.6666666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.3333333333%}.col-sm-pull-8{right:66.6666666667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.3333333333%}.col-sm-pull-11{right:91.6666666667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:0%}.col-sm-push-1{left:8.3333333333%}.col-sm-push-2{left:16.6666666667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.3333333333%}.col-sm-push-5{left:41.6666666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.3333333333%}.col-sm-push-8{left:66.6666666667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.3333333333%}.col-sm-push-11{left:91.6666666667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0%}.col-sm-offset-1{margin-left:8.3333333333%}.col-sm-offset-2{margin-left:16.6666666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.3333333333%}.col-sm-offset-5{margin-left:41.6666666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.3333333333%}.col-sm-offset-8{margin-left:66.6666666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.3333333333%}.col-sm-offset-11{margin-left:91.6666666667%}.col-sm-offset-12{margin-left:100%}}@media (min-width: 1200px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-1{width:8.3333333333%}.col-md-2{width:16.6666666667%}.col-md-3{width:25%}.col-md-4{width:33.3333333333%}.col-md-5{width:41.6666666667%}.col-md-6{width:50%}.col-md-7{width:58.3333333333%}.col-md-8{width:66.6666666667%}.col-md-9{width:75%}.col-md-10{width:83.3333333333%}.col-md-11{width:91.6666666667%}.col-md-12{width:100%}.col-md-pull-0{right:0%}.col-md-pull-1{right:8.3333333333%}.col-md-pull-2{right:16.6666666667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.3333333333%}.col-md-pull-5{right:41.6666666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.3333333333%}.col-md-pull-8{right:66.6666666667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.3333333333%}.col-md-pull-11{right:91.6666666667%}.col-md-pull-12{right:100%}.col-md-push-0{left:0%}.col-md-push-1{left:8.3333333333%}.col-md-push-2{left:16.6666666667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.3333333333%}.col-md-push-5{left:41.6666666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.3333333333%}.col-md-push-8{left:66.6666666667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.3333333333%}.col-md-push-11{left:91.6666666667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0%}.col-md-offset-1{margin-left:8.3333333333%}.col-md-offset-2{margin-left:16.6666666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.3333333333%}.col-md-offset-5{margin-left:41.6666666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.3333333333%}.col-md-offset-8{margin-left:66.6666666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.3333333333%}.col-md-offset-11{margin-left:91.6666666667%}.col-md-offset-12{margin-left:100%}}@media (min-width: 1600px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-1{width:8.3333333333%}.col-lg-2{width:16.6666666667%}.col-lg-3{width:25%}.col-lg-4{width:33.3333333333%}.col-lg-5{width:41.6666666667%}.col-lg-6{width:50%}.col-lg-7{width:58.3333333333%}.col-lg-8{width:66.6666666667%}.col-lg-9{width:75%}.col-lg-10{width:83.3333333333%}.col-lg-11{width:91.6666666667%}.col-lg-12{width:100%}.col-lg-pull-0{right:0%}.col-lg-pull-1{right:8.3333333333%}.col-lg-pull-2{right:16.6666666667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.3333333333%}.col-lg-pull-5{right:41.6666666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.3333333333%}.col-lg-pull-8{right:66.6666666667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.3333333333%}.col-lg-pull-11{right:91.6666666667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:0%}.col-lg-push-1{left:8.3333333333%}.col-lg-push-2{left:16.6666666667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.3333333333%}.col-lg-push-5{left:41.6666666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.3333333333%}.col-lg-push-8{left:66.6666666667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.3333333333%}.col-lg-push-11{left:91.6666666667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0%}.col-lg-offset-1{margin-left:8.3333333333%}.col-lg-offset-2{margin-left:16.6666666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.3333333333%}.col-lg-offset-5{margin-left:41.6666666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.3333333333%}.col-lg-offset-8{margin-left:66.6666666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.3333333333%}.col-lg-offset-11{margin-left:91.6666666667%}.col-lg-offset-12{margin-left:100%}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:0;border-spacing:0}.table>thead>tr>th,.table>thead>tr>td,.table>tbody>tr>th,.table>tbody>tr>td,.table>tfoot>tr>th,.table>tfoot>tr>td{padding:8px;line-height:1.5;vertical-align:top;border-top:1px solid #313335}.table>thead>tr>th{vertical-align:bottom;border-bottom:0px solid #313335}.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 #313335}.table .table{background-color:#313335}.table-condensed>thead>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>tfoot>tr>td{padding:2px}.table-bordered{border:1px solid #313335}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>tfoot>tr>td{border:1px solid #313335}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#ecf3f8}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>thead>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th{background-color:#ecf3f8}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th{background-color:#d9e7f1}.table>thead>tr>td.success,.table>thead>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th{background-color:#d1e8d1}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th{background-color:#c0e0c0}.table>thead>tr>td.info,.table>thead>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th{background-color:#abc9e2}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th{background-color:#98bcdc}.table>thead>tr>td.warning,.table>thead>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th{background-color:#fef8f0}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th{background-color:#fdedd8}.table>thead>tr>td.danger,.table>thead>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th{background-color:#f6d1d0}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th{background-color:#f1bcba}@media (max-width: 779px){.table-responsive{width:100%;margin-bottom:13.5px;overflow-y:hidden;overflow-x:scroll;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #313335;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:18px;font-size:18px;line-height:inherit;color:#313335;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:12px;line-height:1.5;color:#adadad}.form-control{display:block;width:100%;height:32px;padding:6px 12px;font-size:12px;line-height:1.5;color:#adadad;background-color:#313335;background-image:none;border:1px solid #63676a;border-radius:0px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s}.form-control:focus{border-color:#568a89;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(86,138,137,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(86,138,137,0.6)}.form-control::-moz-placeholder{color:#63676a;opacity:1}.form-control:-ms-input-placeholder{color:#63676a}.form-control::-webkit-input-placeholder{color:#63676a}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#adadad;opacity:1}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}input[type="date"]{line-height:32px}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:18px;margin-top:10px;margin-bottom:10px;padding-left:20px}.radio label,.checkbox label{display:inline;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],fieldset[disabled] input[type="radio"],input[type="checkbox"][disabled],fieldset[disabled] input[type="checkbox"],.radio[disabled],fieldset[disabled] .radio,.radio-inline[disabled],fieldset[disabled] .radio-inline,.checkbox[disabled],fieldset[disabled] .checkbox,.checkbox-inline[disabled],fieldset[disabled] .checkbox-inline{cursor:not-allowed}.input-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn,.input-group-sm>.input-group-btn>button.DTTT_button,.input-group-sm>.input-group-btn>div.DTTT_button,.input-group-sm>.input-group-btn>a.DTTT_button{height:28px;padding:5px 10px;font-size:11px;line-height:1.5;border-radius:3px}select.input-sm,.input-group-sm>select.form-control,.input-group-sm>select.input-group-addon,.input-group-sm>.input-group-btn>select.btn{height:28px;line-height:28px}textarea.input-sm,.input-group-sm>textarea.form-control,.input-group-sm>textarea.input-group-addon,.input-group-sm>.input-group-btn>textarea.btn,select[multiple].input-sm,.input-group-sm>select[multiple].form-control,.input-group-sm>select[multiple].input-group-addon,.input-group-sm>.input-group-btn>select[multiple].btn{height:auto}.input-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn,.input-group-lg>.input-group-btn>button.DTTT_button,.input-group-lg>.input-group-btn>div.DTTT_button,.input-group-lg>.input-group-btn>a.DTTT_button{height:42px;padding:10px 16px;font-size:15px;line-height:1.33;border-radius:6px}select.input-lg,.input-group-lg>select.form-control,.input-group-lg>select.input-group-addon,.input-group-lg>.input-group-btn>select.btn{height:42px;line-height:42px}textarea.input-lg,.input-group-lg>textarea.form-control,.input-group-lg>textarea.input-group-addon,.input-group-lg>.input-group-btn>textarea.btn,select[multiple].input-lg,.input-group-lg>select[multiple].form-control,.input-group-lg>select[multiple].input-group-addon,.input-group-lg>.input-group-btn>select[multiple].btn{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:40px}.has-feedback .form-control-feedback{position:absolute;top:23px;right:0;display:block;width:32px;height:32px;line-height:32px;text-align:center}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#2b2b2b}.has-success .form-control{border-color:#2b2b2b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#121212;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #5e5e5e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #5e5e5e}.has-success .input-group-addon{color:#2b2b2b;border-color:#2b2b2b;background-color:#d1e8d1}.has-success .form-control-feedback{color:#2b2b2b}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#2b2b2b}.has-warning .form-control{border-color:#2b2b2b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#121212;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #5e5e5e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #5e5e5e}.has-warning .input-group-addon{color:#2b2b2b;border-color:#2b2b2b;background-color:#fef8f0}.has-warning .form-control-feedback{color:#2b2b2b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#2b2b2b}.has-error .form-control{border-color:#2b2b2b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#121212;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #5e5e5e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #5e5e5e}.has-error .input-group-addon{color:#2b2b2b;border-color:#2b2b2b;background-color:#f6d1d0}.has-error .form-control-feedback{color:#2b2b2b}.form-control-static{margin-bottom:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#a3a7a9}@media (min-width: 780px){.form-inline .form-group,.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control,.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group>.form-control,.navbar-form .input-group>.form-control{width:100%}.form-inline .control-label,.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.navbar-form .radio,.form-inline .checkbox,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle}.form-inline .radio input[type="radio"],.navbar-form .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"],.navbar-form .checkbox input[type="checkbox"]{float:none;margin-left:0}.form-inline .has-feedback .form-control-feedback,.navbar-form .has-feedback .form-control-feedback{top:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:25px}.form-horizontal .form-group{margin-left:-10px;margin-right:-10px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{content:" ";display:table}.form-horizontal .form-group:after{clear:both}.form-horizontal .form-control-static{padding-top:7px}@media (min-width: 780px){.form-horizontal .control-label{text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:10px}.btn,button.DTTT_button,div.DTTT_button,a.DTTT_button{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:12px;line-height:1.5;border-radius:0px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,button.DTTT_button:focus,div.DTTT_button:focus,a.DTTT_button:focus,.btn:active:focus,button.DTTT_button:active:focus,div.DTTT_button:active:focus,a.DTTT_button:active:focus,.btn.active:focus,button.active.DTTT_button:focus,div.active.DTTT_button:focus,a.active.DTTT_button:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,button.DTTT_button:hover,div.DTTT_button:hover,a.DTTT_button:hover,.btn:focus,button.DTTT_button:focus,div.DTTT_button:focus,a.DTTT_button:focus{color:#eaeaea;text-decoration:none}.btn:active,button.DTTT_button:active,div.DTTT_button:active,a.DTTT_button:active,.btn.active,button.active.DTTT_button,div.active.DTTT_button,a.active.DTTT_button{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,button.disabled.DTTT_button,div.disabled.DTTT_button,a.disabled.DTTT_button,.btn[disabled],button[disabled].DTTT_button,div[disabled].DTTT_button,a[disabled].DTTT_button,fieldset[disabled] .btn,fieldset[disabled] button.DTTT_button,fieldset[disabled] div.DTTT_button,fieldset[disabled] a.DTTT_button{cursor:not-allowed;pointer-events:none;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default,button.DTTT_button,div.DTTT_button,a.DTTT_button{color:#eaeaea;background-color:#63676a;border-color:#575a5d}.btn-default:hover,button.DTTT_button:hover,div.DTTT_button:hover,a.DTTT_button:hover,.btn-default:focus,button.DTTT_button:focus,div.DTTT_button:focus,a.DTTT_button:focus,.btn-default:active,button.DTTT_button:active,div.DTTT_button:active,a.DTTT_button:active,.btn-default.active,button.active.DTTT_button,div.active.DTTT_button,a.active.DTTT_button{color:#eaeaea;background-color:#777b7f;border-color:#74797c}.open .btn-default.dropdown-toggle,.open button.dropdown-toggle.DTTT_button,.open div.dropdown-toggle.DTTT_button,.open a.dropdown-toggle.DTTT_button{color:#eaeaea;background-color:#777b7f;border-color:#74797c}.btn-default:active,button.DTTT_button:active,div.DTTT_button:active,a.DTTT_button:active,.btn-default.active,button.active.DTTT_button,div.active.DTTT_button,a.active.DTTT_button{background-image:none}.open .btn-default.dropdown-toggle,.open button.dropdown-toggle.DTTT_button,.open div.dropdown-toggle.DTTT_button,.open a.dropdown-toggle.DTTT_button{background-image:none}.btn-default.disabled,button.disabled.DTTT_button,div.disabled.DTTT_button,a.disabled.DTTT_button,.btn-default.disabled:hover,button.disabled.DTTT_button:hover,div.disabled.DTTT_button:hover,a.disabled.DTTT_button:hover,.btn-default.disabled:focus,button.disabled.DTTT_button:focus,div.disabled.DTTT_button:focus,a.disabled.DTTT_button:focus,.btn-default.disabled:active,button.disabled.DTTT_button:active,div.disabled.DTTT_button:active,a.disabled.DTTT_button:active,.btn-default.disabled.active,button.disabled.active.DTTT_button,div.disabled.active.DTTT_button,a.disabled.active.DTTT_button,.btn-default[disabled],button[disabled].DTTT_button,div[disabled].DTTT_button,a[disabled].DTTT_button,.btn-default[disabled]:hover,button[disabled].DTTT_button:hover,div[disabled].DTTT_button:hover,a[disabled].DTTT_button:hover,.btn-default[disabled]:focus,button[disabled].DTTT_button:focus,div[disabled].DTTT_button:focus,a[disabled].DTTT_button:focus,.btn-default[disabled]:active,button[disabled].DTTT_button:active,div[disabled].DTTT_button:active,a[disabled].DTTT_button:active,.btn-default[disabled].active,button[disabled].active.DTTT_button,div[disabled].active.DTTT_button,a[disabled].active.DTTT_button,fieldset[disabled] .btn-default,fieldset[disabled] button.DTTT_button,fieldset[disabled] div.DTTT_button,fieldset[disabled] a.DTTT_button,fieldset[disabled] .btn-default:hover,fieldset[disabled] button.DTTT_button:hover,fieldset[disabled] div.DTTT_button:hover,fieldset[disabled] a.DTTT_button:hover,fieldset[disabled] .btn-default:focus,fieldset[disabled] button.DTTT_button:focus,fieldset[disabled] div.DTTT_button:focus,fieldset[disabled] a.DTTT_button:focus,fieldset[disabled] .btn-default:active,fieldset[disabled] button.DTTT_button:active,fieldset[disabled] div.DTTT_button:active,fieldset[disabled] a.DTTT_button:active,fieldset[disabled] .btn-default.active,fieldset[disabled] button.active.DTTT_button,fieldset[disabled] div.active.DTTT_button,fieldset[disabled] a.active.DTTT_button{background-color:#63676a;border-color:#575a5d}.btn-default .badge,button.DTTT_button .badge,div.DTTT_button .badge,a.DTTT_button .badge{color:#63676a;background-color:#eaeaea}.btn-primary{color:#eaeaea;background-color:#375959;border-color:#2d4949}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active{color:#eaeaea;background-color:#477272;border-color:#456f6f}.open .btn-primary.dropdown-toggle{color:#eaeaea;background-color:#477272;border-color:#456f6f}.btn-primary:active,.btn-primary.active{background-image:none}.open .btn-primary.dropdown-toggle{background-image:none}.btn-primary.disabled,.btn-primary.disabled:hover,.btn-primary.disabled:focus,.btn-primary.disabled:active,.btn-primary.disabled.active,.btn-primary[disabled],.btn-primary[disabled]:hover,.btn-primary[disabled]:focus,.btn-primary[disabled]:active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary:hover,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary.active{background-color:#375959;border-color:#2d4949}.btn-primary .badge{color:#375959;background-color:#eaeaea}.btn-success{color:#eaeaea;background-color:#4f9e4f;border-color:#478d47}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active{color:#eaeaea;background-color:#64b264;border-color:#61b061}.open .btn-success.dropdown-toggle{color:#eaeaea;background-color:#64b264;border-color:#61b061}.btn-success:active,.btn-success.active{background-image:none}.open .btn-success.dropdown-toggle{background-image:none}.btn-success.disabled,.btn-success.disabled:hover,.btn-success.disabled:focus,.btn-success.disabled:active,.btn-success.disabled.active,.btn-success[disabled],.btn-success[disabled]:hover,.btn-success[disabled]:focus,.btn-success[disabled]:active,.btn-success[disabled].active,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success:hover,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success.active{background-color:#4f9e4f;border-color:#478d47}.btn-success .badge{color:#4f9e4f;background-color:#eaeaea}.btn-info{color:#eaeaea;background-color:#316490;border-color:#2b577d}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active{color:#eaeaea;background-color:#3b79ae;border-color:#3a76ab}.open .btn-info.dropdown-toggle{color:#eaeaea;background-color:#3b79ae;border-color:#3a76ab}.btn-info:active,.btn-info.active{background-image:none}.open .btn-info.dropdown-toggle{background-image:none}.btn-info.disabled,.btn-info.disabled:hover,.btn-info.disabled:focus,.btn-info.disabled:active,.btn-info.disabled.active,.btn-info[disabled],.btn-info[disabled]:hover,.btn-info[disabled]:focus,.btn-info[disabled]:active,.btn-info[disabled].active,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info:hover,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info.active{background-color:#316490;border-color:#2b577d}.btn-info .badge{color:#316490;background-color:#eaeaea}.btn-warning{color:#eaeaea;background-color:#e28a0d;border-color:#ca7b0c}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active{color:#eaeaea;background-color:#f29e25;border-color:#f29c20}.open .btn-warning.dropdown-toggle{color:#eaeaea;background-color:#f29e25;border-color:#f29c20}.btn-warning:active,.btn-warning.active{background-image:none}.open .btn-warning.dropdown-toggle{background-image:none}.btn-warning.disabled,.btn-warning.disabled:hover,.btn-warning.disabled:focus,.btn-warning.disabled:active,.btn-warning.disabled.active,.btn-warning[disabled],.btn-warning[disabled]:hover,.btn-warning[disabled]:focus,.btn-warning[disabled]:active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning:hover,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning.active{background-color:#e28a0d;border-color:#ca7b0c}.btn-warning .badge{color:#e28a0d;background-color:#eaeaea}.btn-danger{color:#eaeaea;background-color:#a52521;border-color:#90201d}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active{color:#eaeaea;background-color:#c72d28;border-color:#c32c27}.open .btn-danger.dropdown-toggle{color:#eaeaea;background-color:#c72d28;border-color:#c32c27}.btn-danger:active,.btn-danger.active{background-image:none}.open .btn-danger.dropdown-toggle{background-image:none}.btn-danger.disabled,.btn-danger.disabled:hover,.btn-danger.disabled:focus,.btn-danger.disabled:active,.btn-danger.disabled.active,.btn-danger[disabled],.btn-danger[disabled]:hover,.btn-danger[disabled]:focus,.btn-danger[disabled]:active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger:hover,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger.active{background-color:#a52521;border-color:#90201d}.btn-danger .badge{color:#a52521;background-color:#eaeaea}.btn-link{color:#375959;font-weight:normal;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#1a2a2a;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:hover,fieldset[disabled] .btn-link:focus{color:#63676a;text-decoration:none}.btn-lg,.btn-group-lg>.btn,.btn-group-lg>button.DTTT_button,.btn-group-lg>div.DTTT_button,.btn-group-lg>a.DTTT_button{padding:10px 16px;font-size:15px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn,.btn-group-sm>button.DTTT_button,.btn-group-sm>div.DTTT_button,.btn-group-sm>a.DTTT_button,button.DTTT_button,div.DTTT_button,a.DTTT_button{padding:5px 10px;font-size:11px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn,.btn-group-xs>button.DTTT_button,.btn-group-xs>div.DTTT_button,.btn-group-xs>a.DTTT_button{padding:1px 5px;font-size:11px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity 0.15s linear;transition:opacity 0.15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height 0.35s ease;transition:height 0.35s ease}@font-face{font-family:'Glyphicons Halflings';src:url("../fonts/glyphicons-halflings-regular.eot");src:url("../fonts/glyphicons-halflings-regular.eot?#iefix") format("embedded-opentype"),url("../fonts/glyphicons-halflings-regular.woff") format("woff"),url("../fonts/glyphicons-halflings-regular.ttf") format("truetype"),url("../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular") format("svg")}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:12px;background-color:#adadad;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:0px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.4);box-shadow:0 6px 12px rgba(0,0,0,0.4);background-clip:padding-box;border-radius:5px}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:5px 0;overflow:hidden;background-color:#63676a}.dropdown-menu>li>a{display:block;padding:3px 15px;clear:both;font-weight:normal;line-height:1.5;color:#313335;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#1d1d1d;background-color:#63676a}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#adadad;text-decoration:none;outline:0;background-color:#375959}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#63676a}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:11px;line-height:1.5;color:#63676a}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width: 780px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group>button.DTTT_button,.btn-group>div.DTTT_button,.btn-group>a.DTTT_button,.btn-group-vertical>.btn,.btn-group-vertical>button.DTTT_button,.btn-group-vertical>div.DTTT_button,.btn-group-vertical>a.DTTT_button{position:relative;float:left}.btn-group>.btn:hover,.btn-group>button.DTTT_button:hover,.btn-group>div.DTTT_button:hover,.btn-group>a.DTTT_button:hover,.btn-group>.btn:focus,.btn-group>button.DTTT_button:focus,.btn-group>div.DTTT_button:focus,.btn-group>a.DTTT_button:focus,.btn-group>.btn:active,.btn-group>button.DTTT_button:active,.btn-group>div.DTTT_button:active,.btn-group>a.DTTT_button:active,.btn-group>.btn.active,.btn-group>button.active.DTTT_button,.btn-group>div.active.DTTT_button,.btn-group>a.active.DTTT_button,.btn-group-vertical>.btn:hover,.btn-group-vertical>button.DTTT_button:hover,.btn-group-vertical>div.DTTT_button:hover,.btn-group-vertical>a.DTTT_button:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>button.DTTT_button:focus,.btn-group-vertical>div.DTTT_button:focus,.btn-group-vertical>a.DTTT_button:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>button.DTTT_button:active,.btn-group-vertical>div.DTTT_button:active,.btn-group-vertical>a.DTTT_button:active,.btn-group-vertical>.btn.active,.btn-group-vertical>button.active.DTTT_button,.btn-group-vertical>div.active.DTTT_button,.btn-group-vertical>a.active.DTTT_button{z-index:2}.btn-group>.btn:focus,.btn-group>button.DTTT_button:focus,.btn-group>div.DTTT_button:focus,.btn-group>a.DTTT_button:focus,.btn-group-vertical>.btn:focus,.btn-group-vertical>button.DTTT_button:focus,.btn-group-vertical>div.DTTT_button:focus,.btn-group-vertical>a.DTTT_button:focus{outline:none}.btn-group .btn+.btn,.btn-group button.DTTT_button+.btn,.btn-group div.DTTT_button+.btn,.btn-group a.DTTT_button+.btn,.btn-group .btn+button.DTTT_button,.btn-group button.DTTT_button+button.DTTT_button,.btn-group div.DTTT_button+button.DTTT_button,.btn-group a.DTTT_button+button.DTTT_button,.btn-group .btn+div.DTTT_button,.btn-group button.DTTT_button+div.DTTT_button,.btn-group div.DTTT_button+div.DTTT_button,.btn-group a.DTTT_button+div.DTTT_button,.btn-group .btn+a.DTTT_button,.btn-group button.DTTT_button+a.DTTT_button,.btn-group div.DTTT_button+a.DTTT_button,.btn-group a.DTTT_button+a.DTTT_button,.btn-group .btn+.btn-group,.btn-group button.DTTT_button+.btn-group,.btn-group div.DTTT_button+.btn-group,.btn-group a.DTTT_button+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+button.DTTT_button,.btn-group .btn-group+div.DTTT_button,.btn-group .btn-group+a.DTTT_button,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar:before,.btn-toolbar:after{content:" ";display:table}.btn-toolbar:after{clear:both}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>button.DTTT_button,.btn-toolbar>div.DTTT_button,.btn-toolbar>a.DTTT_button,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle),.btn-group>button.DTTT_button:not(:first-child):not(:last-child):not(.dropdown-toggle),.btn-group>div.DTTT_button:not(:first-child):not(:last-child):not(.dropdown-toggle),.btn-group>a.DTTT_button:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child,.btn-group>button.DTTT_button:first-child,.btn-group>div.DTTT_button:first-child,.btn-group>a.DTTT_button:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle),.btn-group>button.DTTT_button:first-child:not(:last-child):not(.dropdown-toggle),.btn-group>div.DTTT_button:first-child:not(:last-child):not(.dropdown-toggle),.btn-group>a.DTTT_button:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>button.DTTT_button:last-child:not(:first-child),.btn-group>div.DTTT_button:last-child:not(:first-child),.btn-group>a.DTTT_button:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group>.btn-group:not(:first-child):not(:last-child)>button.DTTT_button,.btn-group>.btn-group:not(:first-child):not(:last-child)>div.DTTT_button,.btn-group>.btn-group:not(:first-child):not(:last-child)>a.DTTT_button{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>button.DTTT_button:last-child,.btn-group>.btn-group:first-child>div.DTTT_button:last-child,.btn-group>.btn-group:first-child>a.DTTT_button:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child,.btn-group>.btn-group:last-child>button.DTTT_button:first-child,.btn-group>.btn-group:last-child>div.DTTT_button:first-child,.btn-group>.btn-group:last-child>a.DTTT_button:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle,.btn-group>button.DTTT_button+.dropdown-toggle,.btn-group>div.DTTT_button+.dropdown-toggle,.btn-group>a.DTTT_button+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle,.btn-group-lg.btn-group>.btn+.dropdown-toggle,.btn-group-lg.btn-group>button.DTTT_button+.dropdown-toggle,.btn-group-lg.btn-group>div.DTTT_button+.dropdown-toggle,.btn-group-lg.btn-group>a.DTTT_button+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret,button.DTTT_button .caret,div.DTTT_button .caret,a.DTTT_button .caret{margin-left:0}.btn-lg .caret,.btn-group-lg>.btn .caret,.btn-group-lg>button.DTTT_button .caret,.btn-group-lg>div.DTTT_button .caret,.btn-group-lg>a.DTTT_button .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret,.dropup .btn-group-lg>.btn .caret,.dropup .btn-group-lg>button.DTTT_button .caret,.dropup .btn-group-lg>div.DTTT_button .caret,.dropup .btn-group-lg>a.DTTT_button .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>button.DTTT_button,.btn-group-vertical>div.DTTT_button,.btn-group-vertical>a.DTTT_button,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn,.btn-group-vertical>.btn-group>button.DTTT_button,.btn-group-vertical>.btn-group>div.DTTT_button,.btn-group-vertical>.btn-group>a.DTTT_button{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{content:" ";display:table}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn,.btn-group-vertical>.btn-group>button.DTTT_button,.btn-group-vertical>.btn-group>div.DTTT_button,.btn-group-vertical>.btn-group>a.DTTT_button{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>button.DTTT_button+.btn,.btn-group-vertical>div.DTTT_button+.btn,.btn-group-vertical>a.DTTT_button+.btn,.btn-group-vertical>.btn+button.DTTT_button,.btn-group-vertical>button.DTTT_button+button.DTTT_button,.btn-group-vertical>div.DTTT_button+button.DTTT_button,.btn-group-vertical>a.DTTT_button+button.DTTT_button,.btn-group-vertical>.btn+div.DTTT_button,.btn-group-vertical>button.DTTT_button+div.DTTT_button,.btn-group-vertical>div.DTTT_button+div.DTTT_button,.btn-group-vertical>a.DTTT_button+div.DTTT_button,.btn-group-vertical>.btn+a.DTTT_button,.btn-group-vertical>button.DTTT_button+a.DTTT_button,.btn-group-vertical>div.DTTT_button+a.DTTT_button,.btn-group-vertical>a.DTTT_button+a.DTTT_button,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>button.DTTT_button+.btn-group,.btn-group-vertical>div.DTTT_button+.btn-group,.btn-group-vertical>a.DTTT_button+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+button.DTTT_button,.btn-group-vertical>.btn-group+div.DTTT_button,.btn-group-vertical>.btn-group+a.DTTT_button,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child),.btn-group-vertical>button.DTTT_button:not(:first-child):not(:last-child),.btn-group-vertical>div.DTTT_button:not(:first-child):not(:last-child),.btn-group-vertical>a.DTTT_button:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child),.btn-group-vertical>button.DTTT_button:first-child:not(:last-child),.btn-group-vertical>div.DTTT_button:first-child:not(:last-child),.btn-group-vertical>a.DTTT_button:first-child:not(:last-child){border-top-right-radius:0px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child),.btn-group-vertical>button.DTTT_button:last-child:not(:first-child),.btn-group-vertical>div.DTTT_button:last-child:not(:first-child),.btn-group-vertical>a.DTTT_button:last-child:not(:first-child){border-bottom-left-radius:0px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>button.DTTT_button,.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>div.DTTT_button,.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>a.DTTT_button{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>button.DTTT_button:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>div.DTTT_button:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>a.DTTT_button:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child,.btn-group-vertical>.btn-group:last-child:not(:first-child)>button.DTTT_button:first-child,.btn-group-vertical>.btn-group:last-child:not(:first-child)>div.DTTT_button:first-child,.btn-group-vertical>.btn-group:last-child:not(:first-child)>a.DTTT_button:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>button.DTTT_button,.btn-group-justified>div.DTTT_button,.btn-group-justified>a.DTTT_button,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn,.btn-group-justified>.btn-group button.DTTT_button,.btn-group-justified>.btn-group div.DTTT_button,.btn-group-justified>.btn-group a.DTTT_button{width:100%}[data-toggle="buttons"]>.btn>input[type="radio"],[data-toggle="buttons"]>button.DTTT_button>input[type="radio"],[data-toggle="buttons"]>div.DTTT_button>input[type="radio"],[data-toggle="buttons"]>a.DTTT_button>input[type="radio"],[data-toggle="buttons"]>.btn>input[type="checkbox"],[data-toggle="buttons"]>button.DTTT_button>input[type="checkbox"],[data-toggle="buttons"]>div.DTTT_button>input[type="checkbox"],[data-toggle="buttons"]>a.DTTT_button>input[type="checkbox"]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:12px;font-weight:normal;line-height:1;color:#63676a;text-align:center;background-color:#2b2b2b;border:1px solid #63676a;border-radius:0px}.input-group-addon.input-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn,.input-group-sm>.input-group-btn>button.input-group-addon.DTTT_button,.input-group-sm>.input-group-btn>div.input-group-addon.DTTT_button,.input-group-sm>.input-group-btn>a.input-group-addon.DTTT_button{padding:5px 10px;font-size:11px;border-radius:3px}.input-group-addon.input-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn,.input-group-lg>.input-group-btn>button.input-group-addon.DTTT_button,.input-group-lg>.input-group-btn>div.input-group-addon.DTTT_button,.input-group-lg>.input-group-btn>a.input-group-addon.DTTT_button{padding:10px 16px;font-size:15px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>button.DTTT_button,.input-group-btn:first-child>div.DTTT_button,.input-group-btn:first-child>a.DTTT_button,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.btn-group>button.DTTT_button,.input-group-btn:first-child>.btn-group>div.DTTT_button,.input-group-btn:first-child>.btn-group>a.DTTT_button,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>button.DTTT_button:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>div.DTTT_button:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>a.DTTT_button:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn-group:not(:last-child)>button.DTTT_button,.input-group-btn:last-child>.btn-group:not(:last-child)>div.DTTT_button,.input-group-btn:last-child>.btn-group:not(:last-child)>a.DTTT_button{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>button.DTTT_button,.input-group-btn:last-child>div.DTTT_button,.input-group-btn:last-child>a.DTTT_button,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.btn-group>button.DTTT_button,.input-group-btn:last-child>.btn-group>div.DTTT_button,.input-group-btn:last-child>.btn-group>a.DTTT_button,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>button.DTTT_button:not(:first-child),.input-group-btn:first-child>div.DTTT_button:not(:first-child),.input-group-btn:first-child>a.DTTT_button:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn-group:not(:first-child)>button.DTTT_button,.input-group-btn:first-child>.btn-group:not(:first-child)>div.DTTT_button,.input-group-btn:first-child>.btn-group:not(:first-child)>a.DTTT_button{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn,.input-group-btn>button.DTTT_button,.input-group-btn>div.DTTT_button,.input-group-btn>a.DTTT_button{position:relative}.input-group-btn>.btn+.btn,.input-group-btn>button.DTTT_button+.btn,.input-group-btn>div.DTTT_button+.btn,.input-group-btn>a.DTTT_button+.btn,.input-group-btn>.btn+button.DTTT_button,.input-group-btn>button.DTTT_button+button.DTTT_button,.input-group-btn>div.DTTT_button+button.DTTT_button,.input-group-btn>a.DTTT_button+button.DTTT_button,.input-group-btn>.btn+div.DTTT_button,.input-group-btn>button.DTTT_button+div.DTTT_button,.input-group-btn>div.DTTT_button+div.DTTT_button,.input-group-btn>a.DTTT_button+div.DTTT_button,.input-group-btn>.btn+a.DTTT_button,.input-group-btn>button.DTTT_button+a.DTTT_button,.input-group-btn>div.DTTT_button+a.DTTT_button,.input-group-btn>a.DTTT_button+a.DTTT_button{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>button.DTTT_button:hover,.input-group-btn>div.DTTT_button:hover,.input-group-btn>a.DTTT_button:hover,.input-group-btn>.btn:focus,.input-group-btn>button.DTTT_button:focus,.input-group-btn>div.DTTT_button:focus,.input-group-btn>a.DTTT_button:focus,.input-group-btn>.btn:active,.input-group-btn>button.DTTT_button:active,.input-group-btn>div.DTTT_button:active,.input-group-btn>a.DTTT_button:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>button.DTTT_button,.input-group-btn:first-child>div.DTTT_button,.input-group-btn:first-child>a.DTTT_button,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>button.DTTT_button,.input-group-btn:last-child>div.DTTT_button,.input-group-btn:last-child>a.DTTT_button,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav:before,.nav:after{content:" ";display:table}.nav:after{clear:both}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:5px 6px 5px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#63676a}.nav>li.disabled>a{color:#63676a}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#63676a;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#63676a;border-color:#375959}.nav .nav-divider{height:1px;margin:5px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #adadad}.nav-tabs>li{float:left;margin-bottom:-1px;margin-right:2px}.nav-tabs>li>a{line-height:1.5;border:1px solid transparent}.nav-tabs>li>a:hover{border-color:#adadad #adadad #adadad}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#313335;border:1px solid #adadad;border-bottom-color:transparent;cursor:default}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:0px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#375959}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified,.nav-tabs.nav-justified{width:100%}.nav-justified>li,.nav-tabs.nav-justified>li{float:none}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width: 780px){.nav-justified>li,.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified,.nav-tabs.nav-justified{border-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:0px}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width: 780px){.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:0px 0px 0 0}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#313335}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:30px;margin-bottom:18px}.navbar:before,.navbar:after{content:" ";display:table}.navbar:after{clear:both}@media (min-width: 780px){.navbar{border-radius:0px}}.navbar-header:before,.navbar-header:after{content:" ";display:table}.navbar-header:after{clear:both}@media (min-width: 780px){.navbar-header{float:left}}.navbar-collapse{max-height:340px;overflow-x:visible;padding-right:10px;padding-left:10px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse:before,.navbar-collapse:after{content:" ";display:table}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}@media (min-width: 780px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.container>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-header,.container-fluid>.navbar-collapse{margin-right:-10px;margin-left:-10px}@media (min-width: 780px){.container>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-header,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width: 780px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width: 780px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:6px 10px;font-size:15px;line-height:18px;height:30px;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width: 780px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-10px}}.navbar-toggle{position:relative;float:right;margin-right:10px;margin-left:10px;padding:6px 12px;margin-top:-2px;margin-bottom:-2px;background-color:#adadad;background-image:none;border:1px solid #a0a0a0;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}.navbar-toggle:focus{outline:none}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width: 780px){.navbar-toggle{display:none}}.navbar-nav{margin:3px -10px;float:left;margin:0}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:18px}@media (max-width: 779px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:18px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}.navbar-nav>li{float:left;margin-right:2px}.navbar-nav>li>a{padding-top:6px;padding-bottom:6px}.navbar-nav.navbar-right:last-child{margin-right:-10px}@media (min-width: 780px){.navbar-left{float:left !important}.navbar-right{float:right !important}}.navbar-form{margin-left:-10px;margin-right:-10px;padding:10px 10px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:-1px;margin-bottom:-1px}@media (max-width: 779px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width: 780px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-10px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:-1px;margin-bottom:-1px}.navbar-btn.btn-sm,.btn-group-sm>.navbar-btn.btn,button.navbar-btn.DTTT_button,div.navbar-btn.DTTT_button,a.navbar-btn.DTTT_button{margin-top:1px;margin-bottom:1px}.navbar-btn.btn-xs,.btn-group-xs>.navbar-btn.btn,.btn-group-xs>button.navbar-btn.DTTT_button,.btn-group-xs>div.navbar-btn.DTTT_button,.btn-group-xs>a.navbar-btn.DTTT_button{margin-top:4px;margin-bottom:4px}.navbar-text{margin-top:6px;margin-bottom:6px;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;float:left;margin-left:10px;margin-right:10px}.navbar-text.navbar-right:last-child{margin-right:0}.navbar-default{background:rgba(43,43,43,0.9);border-color:none;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.4);box-shadow:0 6px 12px rgba(0,0,0,0.4)}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#568a89;background-color:transparent}.navbar-default .navbar-text{color:#63676a}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#1d1d1d;background-color:#63676a}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#2b2b2b;background-color:#adadad}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#a0a0a0;color:#2b2b2b}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#bababa}.navbar-default .navbar-toggle .icon-bar{background-color:#ccc}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:none}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#adadad;color:#2b2b2b}@media (max-width: 779px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#1d1d1d;background-color:#63676a}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#2b2b2b;background-color:#adadad}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#1d1d1d}.navbar-inverse{background-color:#222;border-color:#090909}.navbar-inverse .navbar-brand{color:#63676a}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#63676a}.navbar-inverse .navbar-nav>li>a{color:#63676a}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#090909;color:#fff}@media (max-width: 779px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#63676a}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#63676a}.navbar-inverse .navbar-link:hover{color:#fff}.breadcrumb{padding:0px 0px;margin-bottom:18px;list-style:none;background-color:none;border-radius:0px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/Ā ";padding:0 5px;color:#63676a}.breadcrumb>.active{color:#5cb85c}.pagination{display:inline-block;padding-left:0;margin:18px 0;border-radius:0px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.5;text-decoration:none;color:#375959;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:0px;border-top-left-radius:0px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:0px;border-top-right-radius:0px}.pagination>li>a:hover,.pagination>li>a:focus,.pagination>li>span:hover,.pagination>li>span:focus{color:#1a2a2a;background-color:#adadad;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:hover,.pagination>.active>a:focus,.pagination>.active>span,.pagination>.active>span:hover,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#375959;border-color:#375959;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#63676a;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:15px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:11px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:18px 0;list-style:none;text-align:center}.pager:before,.pager:after{content:" ";display:table}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#adadad}.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:#63676a;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:2px 5px;font-size:75%;font-weight:bold;line-height:1;color:#1d1d1d;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:3px}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label,button.DTTT_button .label,div.DTTT_button .label,a.DTTT_button .label{position:relative;top:-1px}.label-default{background-color:#63676a}.label-default[href]:hover,.label-default[href]:focus{background-color:#4a4d50}.label-primary{background-color:#375959}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#243939}.label-success{background-color:#4f9e4f}.label-success[href]:hover,.label-success[href]:focus{background-color:#3e7c3e}.label-info{background-color:#316490}.label-info[href]:hover,.label-info[href]:focus{background-color:#244a6a}.label-warning{background-color:#e28a0d}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#b26d0a}.label-danger{background-color:#a52521}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#7b1b18}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:11px;font-weight:bold;color:#eaeaea;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#63676a;border-radius:10px}.badge:empty{display:none}.btn .badge,button.DTTT_button .badge,div.DTTT_button .badge,a.DTTT_button .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge,.btn-group-xs>button.DTTT_button .badge,.btn-group-xs>div.DTTT_button .badge,.btn-group-xs>a.DTTT_button .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#375959;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#adadad}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:18px;font-weight:200}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width: 780px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:54px}}.thumbnail{display:block;padding:4px;margin-bottom:18px;line-height:1.5;background-color:#313335;border:1px solid #ddd;border-radius:0px;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.thumbnail>img,.thumbnail a>img{display:block;max-width:100%;height:auto;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px;color:#63676a}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#375959}.alert{padding:15px;margin-bottom:18px;border:1px solid transparent;border-radius:0px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#d1e8d1;border-color:#4f9e4f;color:#2b2b2b}.alert-success hr{border-top-color:#478d47}.alert-success .alert-link{color:#121212}.alert-info{background-color:#abc9e2;border-color:#316490;color:#2b2b2b}.alert-info hr{border-top-color:#2b577d}.alert-info .alert-link{color:#121212}.alert-warning{background-color:#fef8f0;border-color:#e28a0d;color:#2b2b2b}.alert-warning hr{border-top-color:#ca7b0c}.alert-warning .alert-link{color:#121212}.alert-danger{background-color:#f6d1d0;border-color:#a52521;color:#2b2b2b}.alert-danger hr{border-top-color:#90201d}.alert-danger .alert-link{color:#121212}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:18px;margin-bottom:18px;background-color:#f5f5f5;border-radius:0px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:11px;line-height:18px;color:#fff;text-align:center;background-color:#375959;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width 0.6s ease;transition:width 0.6s ease}.progress-striped .progress-bar{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:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0));background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#4f9e4f}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0))}.progress-bar-info{background-color:#316490}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0))}.progress-bar-warning{background-color:#e28a0d}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0))}.progress-bar-danger{background-color:#a52521}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0))}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:6px 8px;background-color:#adadad;border-bottom:1px solid #63676a;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}.list-group-item:first-child{border-top-right-radius:0px;border-top-left-radius:0px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:0px;border-bottom-left-radius:0px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#63676a;color:#1d1d1d}a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{z-index:2;color:#eaeaea;background-color:#375959;border-color:#375959}a.list-group-item.active .list-group-item-heading,a.list-group-item.active:hover .list-group-item-heading,a.list-group-item.active:focus .list-group-item-heading{color:inherit}a.list-group-item.active .list-group-item-text,a.list-group-item.active:hover .list-group-item-text,a.list-group-item.active:focus .list-group-item-text{color:#9bc1c1}.list-group-item-success{color:#2b2b2b;background-color:#d1e8d1}a.list-group-item-success{color:#2b2b2b}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#2b2b2b;background-color:#c0e0c0}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#2b2b2b;border-color:#2b2b2b}.list-group-item-info{color:#2b2b2b;background-color:#abc9e2}a.list-group-item-info{color:#2b2b2b}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#2b2b2b;background-color:#98bcdc}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#2b2b2b;border-color:#2b2b2b}.list-group-item-warning{color:#2b2b2b;background-color:#fef8f0}a.list-group-item-warning{color:#2b2b2b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#2b2b2b;background-color:#fdedd8}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#2b2b2b;border-color:#2b2b2b}.list-group-item-danger{color:#2b2b2b;background-color:#f6d1d0}a.list-group-item-danger{color:#2b2b2b}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#2b2b2b;background-color:#f1bcba}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#2b2b2b;border-color:#2b2b2b}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:18px;background-color:#fff;border:1px solid transparent;border-radius:0px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-body:before,.panel-body:after{content:" ";display:table}.panel-body:after{clear:both}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:-1px;border-top-left-radius:-1px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:14px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:-1px;border-bottom-left-radius:-1px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:-1px;border-top-left-radius:-1px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:-1px;border-bottom-left-radius:-1px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:-1px;border-top-left-radius:-1px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:-1px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:-1px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:-1px;border-bottom-left-radius:-1px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:-1px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:-1px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #313335}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:18px}.panel-group .panel{margin-bottom:0;border-radius:0px;overflow:hidden}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#313335;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#375959}.panel-primary>.panel-heading{color:#fff;background-color:#375959;border-color:#375959}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#375959}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#375959}.panel-success{border-color:#4f9e4f}.panel-success>.panel-heading{color:#2b2b2b;background-color:#d1e8d1;border-color:#4f9e4f}.panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#4f9e4f}.panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#4f9e4f}.panel-info{border-color:#316490}.panel-info>.panel-heading{color:#2b2b2b;background-color:#abc9e2;border-color:#316490}.panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#316490}.panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#316490}.panel-warning{border-color:#e28a0d}.panel-warning>.panel-heading{color:#2b2b2b;background-color:#fef8f0;border-color:#e28a0d}.panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#e28a0d}.panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#e28a0d}.panel-danger{border-color:#a52521}.panel-danger>.panel-heading{color:#2b2b2b;background-color:#f6d1d0;border-color:#a52521}.panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#a52521}.panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#a52521}.well{min-height:20px;padding:10px;margin-bottom:20px;background-color:#63676a;border:1px solid #313335;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;color:#2b2b2b;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well a{color:#6caead}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:18px;font-weight:bold;line-height:1;color:#a52521}.close:hover,.close:focus{color:#a52521;text-decoration:none;cursor:pointer;opacity:0.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:auto;overflow-y:scroll;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-moz-transition:-moz-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.modal-dialog{position:relative;width:auto;margin:10px;z-index:1050}.modal-content{position:relative;background-color:#3c3f41;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box;outline:none}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:0.5;filter:alpha(opacity=50)}.modal-header{padding:14px;border-bottom:1px solid #303234;min-height:15.5px;background-color:#353739}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.5}.modal-body{position:relative;padding:14px;color:#adadad}.modal-footer{padding:13px 14px 14px;text-align:right;border-top:1px solid #303234;background-color:#353739}.modal-footer:before,.modal-footer:after{content:" ";display:table}.modal-footer:after{clear:both}.modal-footer .btn+.btn,.modal-footer button.DTTT_button+.btn,.modal-footer div.DTTT_button+.btn,.modal-footer a.DTTT_button+.btn,.modal-footer .btn+button.DTTT_button,.modal-footer button.DTTT_button+button.DTTT_button,.modal-footer div.DTTT_button+button.DTTT_button,.modal-footer a.DTTT_button+button.DTTT_button,.modal-footer .btn+div.DTTT_button,.modal-footer button.DTTT_button+div.DTTT_button,.modal-footer div.DTTT_button+div.DTTT_button,.modal-footer a.DTTT_button+div.DTTT_button,.modal-footer .btn+a.DTTT_button,.modal-footer button.DTTT_button+a.DTTT_button,.modal-footer div.DTTT_button+a.DTTT_button,.modal-footer a.DTTT_button+a.DTTT_button{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn,.modal-footer .btn-group button.DTTT_button+.btn,.modal-footer .btn-group div.DTTT_button+.btn,.modal-footer .btn-group a.DTTT_button+.btn,.modal-footer .btn-group .btn+button.DTTT_button,.modal-footer .btn-group button.DTTT_button+button.DTTT_button,.modal-footer .btn-group div.DTTT_button+button.DTTT_button,.modal-footer .btn-group a.DTTT_button+button.DTTT_button,.modal-footer .btn-group .btn+div.DTTT_button,.modal-footer .btn-group button.DTTT_button+div.DTTT_button,.modal-footer .btn-group div.DTTT_button+div.DTTT_button,.modal-footer .btn-group a.DTTT_button+div.DTTT_button,.modal-footer .btn-group .btn+a.DTTT_button,.modal-footer .btn-group button.DTTT_button+a.DTTT_button,.modal-footer .btn-group div.DTTT_button+a.DTTT_button,.modal-footer .btn-group a.DTTT_button+a.DTTT_button{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@media (min-width: 780px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width: 1200px){.modal-lg>.modal-dialog{width:820px}}.tooltip{position:absolute;z-index:1010;display:block;visibility:visible;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:0.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:0px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;right:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1030;display:none;max-width:276px;padding:1px;text-align:left;background-color:#3c3f41;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);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:12px;font-weight:normal;line-height:18px;background-color:#353739;border-bottom:1px solid #282a2c;border-radius:5px 5px 0 0;color:#63676a}.popover-content{padding:7px 10px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#63676a}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#63676a}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#63676a}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#63676a;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:0.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left, color-stop(rgba(0,0,0,0.5) 0%), color-stop(rgba(0,0,0,0.0001) 100%));background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0%,rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left, color-stop(rgba(0,0,0,0.0001) 0%), color-stop(rgba(0,0,0,0.5) 100%));background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0%,rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:none;color:#fff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:transparent}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn,.carousel-caption button.DTTT_button,.carousel-caption div.DTTT_button,.carousel-caption a.DTTT_button{text-shadow:none}@media screen and (min-width: 780px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important;visibility:hidden !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}@media (max-width: 779px){.visible-xs{display:block !important}table.visible-xs{display:table}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (min-width: 780px) and (max-width: 1199px){.visible-sm{display:block !important}table.visible-sm{display:table}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width: 1200px) and (max-width: 1599px){.visible-md{display:block !important}table.visible-md{display:table}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width: 1600px){.visible-lg{display:block !important}table.visible-lg{display:table}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (max-width: 779px){.hidden-xs{display:none !important}}@media (min-width: 780px) and (max-width: 1199px){.hidden-sm{display:none !important}}@media (min-width: 1200px) and (max-width: 1599px){.hidden-md{display:none !important}}@media (min-width: 1600px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}@media print{.hidden-print{display:none !important}}/*!
+ */*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:transparent}body{font-family:"Oxygen","Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;font-size:12px;line-height:1.5;color:#63676a;background-color:#313335}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#375959;text-decoration:none}a:hover,a:focus{color:#1a2a2a;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;text-decoration:none}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.5;background-color:#313335;border:1px solid #ddd;border-radius:0px;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:18px;margin-bottom:18px;border:0;border-top:1px solid #adadad}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:"Oxygen","Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:700;line-height:1.1;color:inherit}h1 small,h1 .small,h2 small,h2 .small,h3 small,h3 .small,h4 small,h4 .small,h5 small,h5 .small,h6 small,h6 .small,.h1 small,.h1 .small,.h2 small,.h2 .small,.h3 small,.h3 .small,.h4 small,.h4 .small,.h5 small,.h5 .small,.h6 small,.h6 .small{font-weight:normal;line-height:1;color:#63676a}h1,.h1,h2,.h2,h3,.h3{margin-top:18px;margin-bottom:9px}h1 small,h1 .small,.h1 small,.h1 .small,h2 small,h2 .small,.h2 small,.h2 .small,h3 small,h3 .small,.h3 small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:9px;margin-bottom:9px}h4 small,h4 .small,.h4 small,.h4 .small,h5 small,h5 .small,.h5 small,.h5 .small,h6 small,h6 .small,.h6 small,.h6 .small{font-size:75%}h1,.h1{font-size:22px}h2,.h2{font-size:14px}h3,.h3{font-size:17px}h4,.h4{font-size:12px}h5,.h5{font-size:15px}h6,.h6{font-size:13px}p{margin:0 0 9px}.lead{margin-bottom:18px;font-size:13px;font-weight:200;line-height:1.4}@media (min-width: 780px){.lead{font-size:18px}}small,.small{font-size:85%}cite{font-style:normal}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-muted{color:#63676a}.text-primary{color:#375959}a.text-primary:hover{color:#243939}.text-success{color:#2b2b2b}a.text-success:hover{color:#121212}.text-info{color:#2b2b2b}a.text-info:hover{color:#121212}.text-warning{color:#2b2b2b}a.text-warning:hover{color:#121212}.text-danger{color:#2b2b2b}a.text-danger:hover{color:#121212}.bg-primary{color:#fff}.bg-primary{background-color:#375959}a.bg-primary:hover{background-color:#243939}.bg-success{background-color:#d1e8d1}a.bg-success:hover{background-color:#afd7af}.bg-info{background-color:#abc9e2}a.bg-info:hover{background-color:#85b0d5}.bg-warning{background-color:#fef8f0}a.bg-warning:hover{background-color:#fbe3c0}.bg-danger{background-color:#f6d1d0}a.bg-danger:hover{background-color:#eda7a5}.page-header{padding-bottom:8px;margin:36px 0 18px;border-bottom:1px solid #adadad}ul,ol{margin-top:0;margin-bottom:9px}ul ul,ul ol,ol ul,ol ol{margin-bottom:0}.list-unstyled,.list-inline{padding-left:0;list-style:none}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:18px}dt,dd{line-height:1.5}dt{font-weight:bold}dd{margin-left:0}@media (min-width: 780px){.dl-horizontal dt{float:left;width:80px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:100px}.dl-horizontal dd:before,.dl-horizontal dd:after{content:" ";display:table}.dl-horizontal dd:after{clear:both}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #63676a}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:9px 18px;margin:0 0 18px;font-size:15px;border-left:5px solid #5cb85c}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.5;color:#63676a}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #5cb85c;border-left:0;text-align:right}.blockquote-reverse footer:before,.blockquote-reverse small:before,.blockquote-reverse .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,.blockquote-reverse small:after,.blockquote-reverse .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:18px;font-style:normal;line-height:1.5}code,kbd,pre,samp{font-family:Monaco,Menlo,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;white-space:nowrap;border-radius:0px}kbd{padding:2px 4px;font-size:90%;color:#adadad;background-color:#2b2b2b;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}pre{display:block;padding:8.5px;margin:0 0 9px;font-size:11px;line-height:1.5;word-break:break-all;word-wrap:break-word;color:#313335;background-color:#f5f5f5;border:1px solid #ccc;border-radius:0px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:10px;padding-right:10px}.container:before,.container:after{content:" ";display:table}.container:after{clear:both}@media (min-width: 780px){.container{width:740px}}@media (min-width: 1200px){.container{width:960px}}@media (min-width: 1600px){.container{width:1160px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:10px;padding-right:10px}.container-fluid:before,.container-fluid:after{content:" ";display:table}.container-fluid:after{clear:both}.row{margin-left:-10px;margin-right:-10px}.row:before,.row:after{content:" ";display:table}.row:after{clear:both}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:10px;padding-right:10px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-1{width:8.3333333333%}.col-xs-2{width:16.6666666667%}.col-xs-3{width:25%}.col-xs-4{width:33.3333333333%}.col-xs-5{width:41.6666666667%}.col-xs-6{width:50%}.col-xs-7{width:58.3333333333%}.col-xs-8{width:66.6666666667%}.col-xs-9{width:75%}.col-xs-10{width:83.3333333333%}.col-xs-11{width:91.6666666667%}.col-xs-12{width:100%}.col-xs-pull-0{right:0%}.col-xs-pull-1{right:8.3333333333%}.col-xs-pull-2{right:16.6666666667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.3333333333%}.col-xs-pull-5{right:41.6666666667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.3333333333%}.col-xs-pull-8{right:66.6666666667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.3333333333%}.col-xs-pull-11{right:91.6666666667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:0%}.col-xs-push-1{left:8.3333333333%}.col-xs-push-2{left:16.6666666667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.3333333333%}.col-xs-push-5{left:41.6666666667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.3333333333%}.col-xs-push-8{left:66.6666666667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.3333333333%}.col-xs-push-11{left:91.6666666667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0%}.col-xs-offset-1{margin-left:8.3333333333%}.col-xs-offset-2{margin-left:16.6666666667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.3333333333%}.col-xs-offset-5{margin-left:41.6666666667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.3333333333%}.col-xs-offset-8{margin-left:66.6666666667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.3333333333%}.col-xs-offset-11{margin-left:91.6666666667%}.col-xs-offset-12{margin-left:100%}@media (min-width: 780px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-1{width:8.3333333333%}.col-sm-2{width:16.6666666667%}.col-sm-3{width:25%}.col-sm-4{width:33.3333333333%}.col-sm-5{width:41.6666666667%}.col-sm-6{width:50%}.col-sm-7{width:58.3333333333%}.col-sm-8{width:66.6666666667%}.col-sm-9{width:75%}.col-sm-10{width:83.3333333333%}.col-sm-11{width:91.6666666667%}.col-sm-12{width:100%}.col-sm-pull-0{right:0%}.col-sm-pull-1{right:8.3333333333%}.col-sm-pull-2{right:16.6666666667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.3333333333%}.col-sm-pull-5{right:41.6666666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.3333333333%}.col-sm-pull-8{right:66.6666666667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.3333333333%}.col-sm-pull-11{right:91.6666666667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:0%}.col-sm-push-1{left:8.3333333333%}.col-sm-push-2{left:16.6666666667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.3333333333%}.col-sm-push-5{left:41.6666666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.3333333333%}.col-sm-push-8{left:66.6666666667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.3333333333%}.col-sm-push-11{left:91.6666666667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0%}.col-sm-offset-1{margin-left:8.3333333333%}.col-sm-offset-2{margin-left:16.6666666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.3333333333%}.col-sm-offset-5{margin-left:41.6666666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.3333333333%}.col-sm-offset-8{margin-left:66.6666666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.3333333333%}.col-sm-offset-11{margin-left:91.6666666667%}.col-sm-offset-12{margin-left:100%}}@media (min-width: 1200px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-1{width:8.3333333333%}.col-md-2{width:16.6666666667%}.col-md-3{width:25%}.col-md-4{width:33.3333333333%}.col-md-5{width:41.6666666667%}.col-md-6{width:50%}.col-md-7{width:58.3333333333%}.col-md-8{width:66.6666666667%}.col-md-9{width:75%}.col-md-10{width:83.3333333333%}.col-md-11{width:91.6666666667%}.col-md-12{width:100%}.col-md-pull-0{right:0%}.col-md-pull-1{right:8.3333333333%}.col-md-pull-2{right:16.6666666667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.3333333333%}.col-md-pull-5{right:41.6666666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.3333333333%}.col-md-pull-8{right:66.6666666667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.3333333333%}.col-md-pull-11{right:91.6666666667%}.col-md-pull-12{right:100%}.col-md-push-0{left:0%}.col-md-push-1{left:8.3333333333%}.col-md-push-2{left:16.6666666667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.3333333333%}.col-md-push-5{left:41.6666666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.3333333333%}.col-md-push-8{left:66.6666666667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.3333333333%}.col-md-push-11{left:91.6666666667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0%}.col-md-offset-1{margin-left:8.3333333333%}.col-md-offset-2{margin-left:16.6666666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.3333333333%}.col-md-offset-5{margin-left:41.6666666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.3333333333%}.col-md-offset-8{margin-left:66.6666666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.3333333333%}.col-md-offset-11{margin-left:91.6666666667%}.col-md-offset-12{margin-left:100%}}@media (min-width: 1600px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-1{width:8.3333333333%}.col-lg-2{width:16.6666666667%}.col-lg-3{width:25%}.col-lg-4{width:33.3333333333%}.col-lg-5{width:41.6666666667%}.col-lg-6{width:50%}.col-lg-7{width:58.3333333333%}.col-lg-8{width:66.6666666667%}.col-lg-9{width:75%}.col-lg-10{width:83.3333333333%}.col-lg-11{width:91.6666666667%}.col-lg-12{width:100%}.col-lg-pull-0{right:0%}.col-lg-pull-1{right:8.3333333333%}.col-lg-pull-2{right:16.6666666667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.3333333333%}.col-lg-pull-5{right:41.6666666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.3333333333%}.col-lg-pull-8{right:66.6666666667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.3333333333%}.col-lg-pull-11{right:91.6666666667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:0%}.col-lg-push-1{left:8.3333333333%}.col-lg-push-2{left:16.6666666667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.3333333333%}.col-lg-push-5{left:41.6666666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.3333333333%}.col-lg-push-8{left:66.6666666667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.3333333333%}.col-lg-push-11{left:91.6666666667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0%}.col-lg-offset-1{margin-left:8.3333333333%}.col-lg-offset-2{margin-left:16.6666666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.3333333333%}.col-lg-offset-5{margin-left:41.6666666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.3333333333%}.col-lg-offset-8{margin-left:66.6666666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.3333333333%}.col-lg-offset-11{margin-left:91.6666666667%}.col-lg-offset-12{margin-left:100%}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:0;border-spacing:0}.table>thead>tr>th,.table>thead>tr>td,.table>tbody>tr>th,.table>tbody>tr>td,.table>tfoot>tr>th,.table>tfoot>tr>td{padding:8px;line-height:1.5;vertical-align:top;border-top:1px solid #313335}.table>thead>tr>th{vertical-align:bottom;border-bottom:0px solid #313335}.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 #313335}.table .table{background-color:#313335}.table-condensed>thead>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>tfoot>tr>td{padding:2px}.table-bordered{border:1px solid #313335}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>tfoot>tr>td{border:1px solid #313335}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#ecf3f8}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>thead>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th{background-color:#ecf3f8}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th{background-color:#d9e7f1}.table>thead>tr>td.success,.table>thead>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th{background-color:#d1e8d1}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th{background-color:#c0e0c0}.table>thead>tr>td.info,.table>thead>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th{background-color:#abc9e2}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th{background-color:#98bcdc}.table>thead>tr>td.warning,.table>thead>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th{background-color:#fef8f0}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th{background-color:#fdedd8}.table>thead>tr>td.danger,.table>thead>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th{background-color:#f6d1d0}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th{background-color:#f1bcba}@media (max-width: 779px){.table-responsive{width:100%;margin-bottom:13.5px;overflow-y:hidden;overflow-x:scroll;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #313335;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:18px;font-size:18px;line-height:inherit;color:#313335;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:12px;line-height:1.5;color:#adadad}.form-control{display:block;width:100%;height:32px;padding:6px 12px;font-size:12px;line-height:1.5;color:#adadad;background-color:#313335;background-image:none;border:1px solid #63676a;border-radius:0px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s}.form-control:focus{border-color:#568a89;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(86,138,137,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(86,138,137,0.6)}.form-control::-moz-placeholder{color:#63676a;opacity:1}.form-control:-ms-input-placeholder{color:#63676a}.form-control::-webkit-input-placeholder{color:#63676a}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#adadad;opacity:1}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}input[type="date"]{line-height:32px}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:18px;margin-top:10px;margin-bottom:10px;padding-left:20px}.radio label,.checkbox label{display:inline;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],fieldset[disabled] input[type="radio"],input[type="checkbox"][disabled],fieldset[disabled] input[type="checkbox"],.radio[disabled],fieldset[disabled] .radio,.radio-inline[disabled],fieldset[disabled] .radio-inline,.checkbox[disabled],fieldset[disabled] .checkbox,.checkbox-inline[disabled],fieldset[disabled] .checkbox-inline{cursor:not-allowed}.input-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn,.input-group-sm>.input-group-btn>button.DTTT_button,.input-group-sm>.input-group-btn>div.DTTT_button,.input-group-sm>.input-group-btn>a.DTTT_button{height:28px;padding:5px 10px;font-size:11px;line-height:1.5;border-radius:3px}select.input-sm,.input-group-sm>select.form-control,.input-group-sm>select.input-group-addon,.input-group-sm>.input-group-btn>select.btn{height:28px;line-height:28px}textarea.input-sm,.input-group-sm>textarea.form-control,.input-group-sm>textarea.input-group-addon,.input-group-sm>.input-group-btn>textarea.btn,select[multiple].input-sm,.input-group-sm>select[multiple].form-control,.input-group-sm>select[multiple].input-group-addon,.input-group-sm>.input-group-btn>select[multiple].btn{height:auto}.input-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn,.input-group-lg>.input-group-btn>button.DTTT_button,.input-group-lg>.input-group-btn>div.DTTT_button,.input-group-lg>.input-group-btn>a.DTTT_button{height:42px;padding:10px 16px;font-size:15px;line-height:1.33;border-radius:6px}select.input-lg,.input-group-lg>select.form-control,.input-group-lg>select.input-group-addon,.input-group-lg>.input-group-btn>select.btn{height:42px;line-height:42px}textarea.input-lg,.input-group-lg>textarea.form-control,.input-group-lg>textarea.input-group-addon,.input-group-lg>.input-group-btn>textarea.btn,select[multiple].input-lg,.input-group-lg>select[multiple].form-control,.input-group-lg>select[multiple].input-group-addon,.input-group-lg>.input-group-btn>select[multiple].btn{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:40px}.has-feedback .form-control-feedback{position:absolute;top:23px;right:0;display:block;width:32px;height:32px;line-height:32px;text-align:center}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#2b2b2b}.has-success .form-control{border-color:#2b2b2b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #5e5e5e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #5e5e5e}.has-success .select2-selection{border:1px solid !important;border-color:#2b2b2b !important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .input-group-addon{color:#2b2b2b;border-color:#2b2b2b;background-color:#d1e8d1}.has-success .form-control-feedback{color:#2b2b2b}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#2b2b2b}.has-warning .form-control{border-color:#2b2b2b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #5e5e5e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #5e5e5e}.has-warning .select2-selection{border:1px solid !important;border-color:#2b2b2b !important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .input-group-addon{color:#2b2b2b;border-color:#2b2b2b;background-color:#fef8f0}.has-warning .form-control-feedback{color:#2b2b2b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#d9534f}.has-error .form-control{border-color:#d9534f;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #eba5a3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #eba5a3}.has-error .select2-selection{border:1px solid !important;border-color:#d9534f !important;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .input-group-addon{color:#d9534f;border-color:#d9534f;background-color:#f6d1d0}.has-error .form-control-feedback{color:#d9534f}.form-control-static{margin-bottom:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#7c8184}@media (min-width: 780px){.form-inline .form-group,.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control,.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group>.form-control,.navbar-form .input-group>.form-control{width:100%}.form-inline .control-label,.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.navbar-form .radio,.form-inline .checkbox,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle}.form-inline .radio input[type="radio"],.navbar-form .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"],.navbar-form .checkbox input[type="checkbox"]{float:none;margin-left:0}.form-inline .has-feedback .form-control-feedback,.navbar-form .has-feedback .form-control-feedback{top:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:25px}.form-horizontal .form-group{margin-left:-10px;margin-right:-10px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{content:" ";display:table}.form-horizontal .form-group:after{clear:both}.form-horizontal .form-control-static{padding-top:7px}@media (min-width: 780px){.form-horizontal .control-label{text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:10px}.btn,button.DTTT_button,div.DTTT_button,a.DTTT_button{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:12px;line-height:1.5;border-radius:0px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,button.DTTT_button:focus,div.DTTT_button:focus,a.DTTT_button:focus,.btn:active:focus,button.DTTT_button:active:focus,div.DTTT_button:active:focus,a.DTTT_button:active:focus,.btn.active:focus,button.active.DTTT_button:focus,div.active.DTTT_button:focus,a.active.DTTT_button:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,button.DTTT_button:hover,div.DTTT_button:hover,a.DTTT_button:hover,.btn:focus,button.DTTT_button:focus,div.DTTT_button:focus,a.DTTT_button:focus{color:#eaeaea;text-decoration:none}.btn:active,button.DTTT_button:active,div.DTTT_button:active,a.DTTT_button:active,.btn.active,button.active.DTTT_button,div.active.DTTT_button,a.active.DTTT_button{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,button.disabled.DTTT_button,div.disabled.DTTT_button,a.disabled.DTTT_button,.btn[disabled],button[disabled].DTTT_button,div[disabled].DTTT_button,a[disabled].DTTT_button,fieldset[disabled] .btn,fieldset[disabled] button.DTTT_button,fieldset[disabled] div.DTTT_button,fieldset[disabled] a.DTTT_button{cursor:not-allowed;pointer-events:none;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default,button.DTTT_button,div.DTTT_button,a.DTTT_button{color:#eaeaea;background-color:#63676a;border-color:#575a5d}.btn-default:hover,button.DTTT_button:hover,div.DTTT_button:hover,a.DTTT_button:hover,.btn-default:focus,button.DTTT_button:focus,div.DTTT_button:focus,a.DTTT_button:focus,.btn-default:active,button.DTTT_button:active,div.DTTT_button:active,a.DTTT_button:active,.btn-default.active,button.active.DTTT_button,div.active.DTTT_button,a.active.DTTT_button{color:#eaeaea;background-color:#777b7f;border-color:#74797c}.open .btn-default.dropdown-toggle,.open button.dropdown-toggle.DTTT_button,.open div.dropdown-toggle.DTTT_button,.open a.dropdown-toggle.DTTT_button{color:#eaeaea;background-color:#777b7f;border-color:#74797c}.btn-default:active,button.DTTT_button:active,div.DTTT_button:active,a.DTTT_button:active,.btn-default.active,button.active.DTTT_button,div.active.DTTT_button,a.active.DTTT_button{background-image:none}.open .btn-default.dropdown-toggle,.open button.dropdown-toggle.DTTT_button,.open div.dropdown-toggle.DTTT_button,.open a.dropdown-toggle.DTTT_button{background-image:none}.btn-default.disabled,button.disabled.DTTT_button,div.disabled.DTTT_button,a.disabled.DTTT_button,.btn-default.disabled:hover,button.disabled.DTTT_button:hover,div.disabled.DTTT_button:hover,a.disabled.DTTT_button:hover,.btn-default.disabled:focus,button.disabled.DTTT_button:focus,div.disabled.DTTT_button:focus,a.disabled.DTTT_button:focus,.btn-default.disabled:active,button.disabled.DTTT_button:active,div.disabled.DTTT_button:active,a.disabled.DTTT_button:active,.btn-default.disabled.active,button.disabled.active.DTTT_button,div.disabled.active.DTTT_button,a.disabled.active.DTTT_button,.btn-default[disabled],button[disabled].DTTT_button,div[disabled].DTTT_button,a[disabled].DTTT_button,.btn-default[disabled]:hover,button[disabled].DTTT_button:hover,div[disabled].DTTT_button:hover,a[disabled].DTTT_button:hover,.btn-default[disabled]:focus,button[disabled].DTTT_button:focus,div[disabled].DTTT_button:focus,a[disabled].DTTT_button:focus,.btn-default[disabled]:active,button[disabled].DTTT_button:active,div[disabled].DTTT_button:active,a[disabled].DTTT_button:active,.btn-default[disabled].active,button[disabled].active.DTTT_button,div[disabled].active.DTTT_button,a[disabled].active.DTTT_button,fieldset[disabled] .btn-default,fieldset[disabled] button.DTTT_button,fieldset[disabled] div.DTTT_button,fieldset[disabled] a.DTTT_button,fieldset[disabled] .btn-default:hover,fieldset[disabled] button.DTTT_button:hover,fieldset[disabled] div.DTTT_button:hover,fieldset[disabled] a.DTTT_button:hover,fieldset[disabled] .btn-default:focus,fieldset[disabled] button.DTTT_button:focus,fieldset[disabled] div.DTTT_button:focus,fieldset[disabled] a.DTTT_button:focus,fieldset[disabled] .btn-default:active,fieldset[disabled] button.DTTT_button:active,fieldset[disabled] div.DTTT_button:active,fieldset[disabled] a.DTTT_button:active,fieldset[disabled] .btn-default.active,fieldset[disabled] button.active.DTTT_button,fieldset[disabled] div.active.DTTT_button,fieldset[disabled] a.active.DTTT_button{background-color:#63676a;border-color:#575a5d}.btn-default .badge,button.DTTT_button .badge,div.DTTT_button .badge,a.DTTT_button .badge{color:#63676a;background-color:#eaeaea}.btn-primary{color:#eaeaea;background-color:#375959;border-color:#2d4949}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active{color:#eaeaea;background-color:#477272;border-color:#456f6f}.open .btn-primary.dropdown-toggle{color:#eaeaea;background-color:#477272;border-color:#456f6f}.btn-primary:active,.btn-primary.active{background-image:none}.open .btn-primary.dropdown-toggle{background-image:none}.btn-primary.disabled,.btn-primary.disabled:hover,.btn-primary.disabled:focus,.btn-primary.disabled:active,.btn-primary.disabled.active,.btn-primary[disabled],.btn-primary[disabled]:hover,.btn-primary[disabled]:focus,.btn-primary[disabled]:active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary:hover,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary.active{background-color:#375959;border-color:#2d4949}.btn-primary .badge{color:#375959;background-color:#eaeaea}.btn-success{color:#eaeaea;background-color:#4f9e4f;border-color:#478d47}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active{color:#eaeaea;background-color:#64b264;border-color:#61b061}.open .btn-success.dropdown-toggle{color:#eaeaea;background-color:#64b264;border-color:#61b061}.btn-success:active,.btn-success.active{background-image:none}.open .btn-success.dropdown-toggle{background-image:none}.btn-success.disabled,.btn-success.disabled:hover,.btn-success.disabled:focus,.btn-success.disabled:active,.btn-success.disabled.active,.btn-success[disabled],.btn-success[disabled]:hover,.btn-success[disabled]:focus,.btn-success[disabled]:active,.btn-success[disabled].active,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success:hover,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success.active{background-color:#4f9e4f;border-color:#478d47}.btn-success .badge{color:#4f9e4f;background-color:#eaeaea}.btn-info{color:#eaeaea;background-color:#316490;border-color:#2b577d}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active{color:#eaeaea;background-color:#3b79ae;border-color:#3a76ab}.open .btn-info.dropdown-toggle{color:#eaeaea;background-color:#3b79ae;border-color:#3a76ab}.btn-info:active,.btn-info.active{background-image:none}.open .btn-info.dropdown-toggle{background-image:none}.btn-info.disabled,.btn-info.disabled:hover,.btn-info.disabled:focus,.btn-info.disabled:active,.btn-info.disabled.active,.btn-info[disabled],.btn-info[disabled]:hover,.btn-info[disabled]:focus,.btn-info[disabled]:active,.btn-info[disabled].active,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info:hover,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info.active{background-color:#316490;border-color:#2b577d}.btn-info .badge{color:#316490;background-color:#eaeaea}.btn-warning{color:#eaeaea;background-color:#e28a0d;border-color:#ca7b0c}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active{color:#eaeaea;background-color:#f29e25;border-color:#f29c20}.open .btn-warning.dropdown-toggle{color:#eaeaea;background-color:#f29e25;border-color:#f29c20}.btn-warning:active,.btn-warning.active{background-image:none}.open .btn-warning.dropdown-toggle{background-image:none}.btn-warning.disabled,.btn-warning.disabled:hover,.btn-warning.disabled:focus,.btn-warning.disabled:active,.btn-warning.disabled.active,.btn-warning[disabled],.btn-warning[disabled]:hover,.btn-warning[disabled]:focus,.btn-warning[disabled]:active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning:hover,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning.active{background-color:#e28a0d;border-color:#ca7b0c}.btn-warning .badge{color:#e28a0d;background-color:#eaeaea}.btn-danger{color:#eaeaea;background-color:#a52521;border-color:#90201d}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active{color:#eaeaea;background-color:#c72d28;border-color:#c32c27}.open .btn-danger.dropdown-toggle{color:#eaeaea;background-color:#c72d28;border-color:#c32c27}.btn-danger:active,.btn-danger.active{background-image:none}.open .btn-danger.dropdown-toggle{background-image:none}.btn-danger.disabled,.btn-danger.disabled:hover,.btn-danger.disabled:focus,.btn-danger.disabled:active,.btn-danger.disabled.active,.btn-danger[disabled],.btn-danger[disabled]:hover,.btn-danger[disabled]:focus,.btn-danger[disabled]:active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger:hover,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger.active{background-color:#a52521;border-color:#90201d}.btn-danger .badge{color:#a52521;background-color:#eaeaea}.btn-link{color:#375959;font-weight:normal;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#1a2a2a;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:hover,fieldset[disabled] .btn-link:focus{color:#63676a;text-decoration:none}.btn-lg,.btn-group-lg>.btn,.btn-group-lg>button.DTTT_button,.btn-group-lg>div.DTTT_button,.btn-group-lg>a.DTTT_button{padding:10px 16px;font-size:15px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn,.btn-group-sm>button.DTTT_button,.btn-group-sm>div.DTTT_button,.btn-group-sm>a.DTTT_button,button.DTTT_button,div.DTTT_button,a.DTTT_button{padding:5px 10px;font-size:11px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn,.btn-group-xs>button.DTTT_button,.btn-group-xs>div.DTTT_button,.btn-group-xs>a.DTTT_button{padding:1px 5px;font-size:11px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity 0.15s linear;transition:opacity 0.15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height 0.35s ease;transition:height 0.35s ease}@font-face{font-family:'Glyphicons Halflings';src:url("../fonts/glyphicons-halflings-regular.eot");src:url("../fonts/glyphicons-halflings-regular.eot?#iefix") format("embedded-opentype"),url("../fonts/glyphicons-halflings-regular.woff") format("woff"),url("../fonts/glyphicons-halflings-regular.ttf") format("truetype"),url("../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular") format("svg")}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:12px;background-color:#adadad;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:0px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.4);box-shadow:0 6px 12px rgba(0,0,0,0.4);background-clip:padding-box;border-radius:5px}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:5px 0;overflow:hidden;background-color:#63676a}.dropdown-menu>li>a{display:block;padding:3px 15px;clear:both;font-weight:normal;line-height:1.5;color:#313335;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#1d1d1d;background-color:#63676a}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#adadad;text-decoration:none;outline:0;background-color:#375959}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#63676a}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:11px;line-height:1.5;color:#63676a}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width: 780px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group>button.DTTT_button,.btn-group>div.DTTT_button,.btn-group>a.DTTT_button,.btn-group-vertical>.btn,.btn-group-vertical>button.DTTT_button,.btn-group-vertical>div.DTTT_button,.btn-group-vertical>a.DTTT_button{position:relative;float:left}.btn-group>.btn:hover,.btn-group>button.DTTT_button:hover,.btn-group>div.DTTT_button:hover,.btn-group>a.DTTT_button:hover,.btn-group>.btn:focus,.btn-group>button.DTTT_button:focus,.btn-group>div.DTTT_button:focus,.btn-group>a.DTTT_button:focus,.btn-group>.btn:active,.btn-group>button.DTTT_button:active,.btn-group>div.DTTT_button:active,.btn-group>a.DTTT_button:active,.btn-group>.btn.active,.btn-group>button.active.DTTT_button,.btn-group>div.active.DTTT_button,.btn-group>a.active.DTTT_button,.btn-group-vertical>.btn:hover,.btn-group-vertical>button.DTTT_button:hover,.btn-group-vertical>div.DTTT_button:hover,.btn-group-vertical>a.DTTT_button:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>button.DTTT_button:focus,.btn-group-vertical>div.DTTT_button:focus,.btn-group-vertical>a.DTTT_button:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>button.DTTT_button:active,.btn-group-vertical>div.DTTT_button:active,.btn-group-vertical>a.DTTT_button:active,.btn-group-vertical>.btn.active,.btn-group-vertical>button.active.DTTT_button,.btn-group-vertical>div.active.DTTT_button,.btn-group-vertical>a.active.DTTT_button{z-index:2}.btn-group>.btn:focus,.btn-group>button.DTTT_button:focus,.btn-group>div.DTTT_button:focus,.btn-group>a.DTTT_button:focus,.btn-group-vertical>.btn:focus,.btn-group-vertical>button.DTTT_button:focus,.btn-group-vertical>div.DTTT_button:focus,.btn-group-vertical>a.DTTT_button:focus{outline:none}.btn-group .btn+.btn,.btn-group button.DTTT_button+.btn,.btn-group div.DTTT_button+.btn,.btn-group a.DTTT_button+.btn,.btn-group .btn+button.DTTT_button,.btn-group button.DTTT_button+button.DTTT_button,.btn-group div.DTTT_button+button.DTTT_button,.btn-group a.DTTT_button+button.DTTT_button,.btn-group .btn+div.DTTT_button,.btn-group button.DTTT_button+div.DTTT_button,.btn-group div.DTTT_button+div.DTTT_button,.btn-group a.DTTT_button+div.DTTT_button,.btn-group .btn+a.DTTT_button,.btn-group button.DTTT_button+a.DTTT_button,.btn-group div.DTTT_button+a.DTTT_button,.btn-group a.DTTT_button+a.DTTT_button,.btn-group .btn+.btn-group,.btn-group button.DTTT_button+.btn-group,.btn-group div.DTTT_button+.btn-group,.btn-group a.DTTT_button+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+button.DTTT_button,.btn-group .btn-group+div.DTTT_button,.btn-group .btn-group+a.DTTT_button,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar:before,.btn-toolbar:after{content:" ";display:table}.btn-toolbar:after{clear:both}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>button.DTTT_button,.btn-toolbar>div.DTTT_button,.btn-toolbar>a.DTTT_button,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle),.btn-group>button.DTTT_button:not(:first-child):not(:last-child):not(.dropdown-toggle),.btn-group>div.DTTT_button:not(:first-child):not(:last-child):not(.dropdown-toggle),.btn-group>a.DTTT_button:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child,.btn-group>button.DTTT_button:first-child,.btn-group>div.DTTT_button:first-child,.btn-group>a.DTTT_button:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle),.btn-group>button.DTTT_button:first-child:not(:last-child):not(.dropdown-toggle),.btn-group>div.DTTT_button:first-child:not(:last-child):not(.dropdown-toggle),.btn-group>a.DTTT_button:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>button.DTTT_button:last-child:not(:first-child),.btn-group>div.DTTT_button:last-child:not(:first-child),.btn-group>a.DTTT_button:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group>.btn-group:not(:first-child):not(:last-child)>button.DTTT_button,.btn-group>.btn-group:not(:first-child):not(:last-child)>div.DTTT_button,.btn-group>.btn-group:not(:first-child):not(:last-child)>a.DTTT_button{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>button.DTTT_button:last-child,.btn-group>.btn-group:first-child>div.DTTT_button:last-child,.btn-group>.btn-group:first-child>a.DTTT_button:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child,.btn-group>.btn-group:last-child>button.DTTT_button:first-child,.btn-group>.btn-group:last-child>div.DTTT_button:first-child,.btn-group>.btn-group:last-child>a.DTTT_button:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle,.btn-group>button.DTTT_button+.dropdown-toggle,.btn-group>div.DTTT_button+.dropdown-toggle,.btn-group>a.DTTT_button+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle,.btn-group-lg.btn-group>.btn+.dropdown-toggle,.btn-group-lg.btn-group>button.DTTT_button+.dropdown-toggle,.btn-group-lg.btn-group>div.DTTT_button+.dropdown-toggle,.btn-group-lg.btn-group>a.DTTT_button+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret,button.DTTT_button .caret,div.DTTT_button .caret,a.DTTT_button .caret{margin-left:0}.btn-lg .caret,.btn-group-lg>.btn .caret,.btn-group-lg>button.DTTT_button .caret,.btn-group-lg>div.DTTT_button .caret,.btn-group-lg>a.DTTT_button .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret,.dropup .btn-group-lg>.btn .caret,.dropup .btn-group-lg>button.DTTT_button .caret,.dropup .btn-group-lg>div.DTTT_button .caret,.dropup .btn-group-lg>a.DTTT_button .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>button.DTTT_button,.btn-group-vertical>div.DTTT_button,.btn-group-vertical>a.DTTT_button,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn,.btn-group-vertical>.btn-group>button.DTTT_button,.btn-group-vertical>.btn-group>div.DTTT_button,.btn-group-vertical>.btn-group>a.DTTT_button{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{content:" ";display:table}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn,.btn-group-vertical>.btn-group>button.DTTT_button,.btn-group-vertical>.btn-group>div.DTTT_button,.btn-group-vertical>.btn-group>a.DTTT_button{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>button.DTTT_button+.btn,.btn-group-vertical>div.DTTT_button+.btn,.btn-group-vertical>a.DTTT_button+.btn,.btn-group-vertical>.btn+button.DTTT_button,.btn-group-vertical>button.DTTT_button+button.DTTT_button,.btn-group-vertical>div.DTTT_button+button.DTTT_button,.btn-group-vertical>a.DTTT_button+button.DTTT_button,.btn-group-vertical>.btn+div.DTTT_button,.btn-group-vertical>button.DTTT_button+div.DTTT_button,.btn-group-vertical>div.DTTT_button+div.DTTT_button,.btn-group-vertical>a.DTTT_button+div.DTTT_button,.btn-group-vertical>.btn+a.DTTT_button,.btn-group-vertical>button.DTTT_button+a.DTTT_button,.btn-group-vertical>div.DTTT_button+a.DTTT_button,.btn-group-vertical>a.DTTT_button+a.DTTT_button,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>button.DTTT_button+.btn-group,.btn-group-vertical>div.DTTT_button+.btn-group,.btn-group-vertical>a.DTTT_button+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+button.DTTT_button,.btn-group-vertical>.btn-group+div.DTTT_button,.btn-group-vertical>.btn-group+a.DTTT_button,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child),.btn-group-vertical>button.DTTT_button:not(:first-child):not(:last-child),.btn-group-vertical>div.DTTT_button:not(:first-child):not(:last-child),.btn-group-vertical>a.DTTT_button:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child),.btn-group-vertical>button.DTTT_button:first-child:not(:last-child),.btn-group-vertical>div.DTTT_button:first-child:not(:last-child),.btn-group-vertical>a.DTTT_button:first-child:not(:last-child){border-top-right-radius:0px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child),.btn-group-vertical>button.DTTT_button:last-child:not(:first-child),.btn-group-vertical>div.DTTT_button:last-child:not(:first-child),.btn-group-vertical>a.DTTT_button:last-child:not(:first-child){border-bottom-left-radius:0px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>button.DTTT_button,.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>div.DTTT_button,.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>a.DTTT_button{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>button.DTTT_button:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>div.DTTT_button:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>a.DTTT_button:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child,.btn-group-vertical>.btn-group:last-child:not(:first-child)>button.DTTT_button:first-child,.btn-group-vertical>.btn-group:last-child:not(:first-child)>div.DTTT_button:first-child,.btn-group-vertical>.btn-group:last-child:not(:first-child)>a.DTTT_button:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>button.DTTT_button,.btn-group-justified>div.DTTT_button,.btn-group-justified>a.DTTT_button,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn,.btn-group-justified>.btn-group button.DTTT_button,.btn-group-justified>.btn-group div.DTTT_button,.btn-group-justified>.btn-group a.DTTT_button{width:100%}[data-toggle="buttons"]>.btn>input[type="radio"],[data-toggle="buttons"]>button.DTTT_button>input[type="radio"],[data-toggle="buttons"]>div.DTTT_button>input[type="radio"],[data-toggle="buttons"]>a.DTTT_button>input[type="radio"],[data-toggle="buttons"]>.btn>input[type="checkbox"],[data-toggle="buttons"]>button.DTTT_button>input[type="checkbox"],[data-toggle="buttons"]>div.DTTT_button>input[type="checkbox"],[data-toggle="buttons"]>a.DTTT_button>input[type="checkbox"]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:12px;font-weight:normal;line-height:1;color:#63676a;text-align:center;background-color:#2b2b2b;border:1px solid #63676a;border-radius:0px}.input-group-addon.input-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn,.input-group-sm>.input-group-btn>button.input-group-addon.DTTT_button,.input-group-sm>.input-group-btn>div.input-group-addon.DTTT_button,.input-group-sm>.input-group-btn>a.input-group-addon.DTTT_button{padding:5px 10px;font-size:11px;border-radius:3px}.input-group-addon.input-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn,.input-group-lg>.input-group-btn>button.input-group-addon.DTTT_button,.input-group-lg>.input-group-btn>div.input-group-addon.DTTT_button,.input-group-lg>.input-group-btn>a.input-group-addon.DTTT_button{padding:10px 16px;font-size:15px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>button.DTTT_button,.input-group-btn:first-child>div.DTTT_button,.input-group-btn:first-child>a.DTTT_button,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.btn-group>button.DTTT_button,.input-group-btn:first-child>.btn-group>div.DTTT_button,.input-group-btn:first-child>.btn-group>a.DTTT_button,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>button.DTTT_button:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>div.DTTT_button:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>a.DTTT_button:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn-group:not(:last-child)>button.DTTT_button,.input-group-btn:last-child>.btn-group:not(:last-child)>div.DTTT_button,.input-group-btn:last-child>.btn-group:not(:last-child)>a.DTTT_button{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>button.DTTT_button,.input-group-btn:last-child>div.DTTT_button,.input-group-btn:last-child>a.DTTT_button,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.btn-group>button.DTTT_button,.input-group-btn:last-child>.btn-group>div.DTTT_button,.input-group-btn:last-child>.btn-group>a.DTTT_button,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>button.DTTT_button:not(:first-child),.input-group-btn:first-child>div.DTTT_button:not(:first-child),.input-group-btn:first-child>a.DTTT_button:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn-group:not(:first-child)>button.DTTT_button,.input-group-btn:first-child>.btn-group:not(:first-child)>div.DTTT_button,.input-group-btn:first-child>.btn-group:not(:first-child)>a.DTTT_button{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn,.input-group-btn>button.DTTT_button,.input-group-btn>div.DTTT_button,.input-group-btn>a.DTTT_button{position:relative}.input-group-btn>.btn+.btn,.input-group-btn>button.DTTT_button+.btn,.input-group-btn>div.DTTT_button+.btn,.input-group-btn>a.DTTT_button+.btn,.input-group-btn>.btn+button.DTTT_button,.input-group-btn>button.DTTT_button+button.DTTT_button,.input-group-btn>div.DTTT_button+button.DTTT_button,.input-group-btn>a.DTTT_button+button.DTTT_button,.input-group-btn>.btn+div.DTTT_button,.input-group-btn>button.DTTT_button+div.DTTT_button,.input-group-btn>div.DTTT_button+div.DTTT_button,.input-group-btn>a.DTTT_button+div.DTTT_button,.input-group-btn>.btn+a.DTTT_button,.input-group-btn>button.DTTT_button+a.DTTT_button,.input-group-btn>div.DTTT_button+a.DTTT_button,.input-group-btn>a.DTTT_button+a.DTTT_button{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>button.DTTT_button:hover,.input-group-btn>div.DTTT_button:hover,.input-group-btn>a.DTTT_button:hover,.input-group-btn>.btn:focus,.input-group-btn>button.DTTT_button:focus,.input-group-btn>div.DTTT_button:focus,.input-group-btn>a.DTTT_button:focus,.input-group-btn>.btn:active,.input-group-btn>button.DTTT_button:active,.input-group-btn>div.DTTT_button:active,.input-group-btn>a.DTTT_button:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>button.DTTT_button,.input-group-btn:first-child>div.DTTT_button,.input-group-btn:first-child>a.DTTT_button,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>button.DTTT_button,.input-group-btn:last-child>div.DTTT_button,.input-group-btn:last-child>a.DTTT_button,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav:before,.nav:after{content:" ";display:table}.nav:after{clear:both}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:5px 6px 5px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#63676a}.nav>li.disabled>a{color:#63676a}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#63676a;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#63676a;border-color:#375959}.nav .nav-divider{height:1px;margin:5px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #adadad}.nav-tabs>li{float:left;margin-bottom:-1px;margin-right:2px}.nav-tabs>li>a{line-height:1.5;border:1px solid transparent}.nav-tabs>li>a:hover{border-color:#adadad #adadad #adadad}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#313335;border:1px solid #adadad;border-bottom-color:transparent;cursor:default}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:0px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#375959}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified,.nav-tabs.nav-justified{width:100%}.nav-justified>li,.nav-tabs.nav-justified>li{float:none}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width: 780px){.nav-justified>li,.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified,.nav-tabs.nav-justified{border-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:0px}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width: 780px){.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:0px 0px 0 0}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#313335}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:30px;margin-bottom:18px}.navbar:before,.navbar:after{content:" ";display:table}.navbar:after{clear:both}@media (min-width: 780px){.navbar{border-radius:0px}}.navbar-header:before,.navbar-header:after{content:" ";display:table}.navbar-header:after{clear:both}@media (min-width: 780px){.navbar-header{float:left}}.navbar-collapse{max-height:340px;overflow-x:visible;padding-right:10px;padding-left:10px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse:before,.navbar-collapse:after{content:" ";display:table}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}@media (min-width: 780px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.container>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-header,.container-fluid>.navbar-collapse{margin-right:-10px;margin-left:-10px}@media (min-width: 780px){.container>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-header,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width: 780px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width: 780px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:6px 10px;font-size:15px;line-height:18px;height:30px;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width: 780px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-10px}}.navbar-toggle{position:relative;float:right;margin-right:10px;margin-left:10px;padding:6px 12px;margin-top:-2px;margin-bottom:-2px;background-color:#adadad;background-image:none;border:1px solid #a0a0a0;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}.navbar-toggle:focus{outline:none}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width: 780px){.navbar-toggle{display:none}}.navbar-nav{margin:3px -10px;float:left;margin:0}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:18px}@media (max-width: 779px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:18px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}.navbar-nav>li{float:left;margin-right:2px}.navbar-nav>li>a{padding-top:6px;padding-bottom:6px}.navbar-nav.navbar-right:last-child{margin-right:-10px}@media (min-width: 780px){.navbar-left{float:left !important}.navbar-right{float:right !important}}.navbar-form{margin-left:-10px;margin-right:-10px;padding:10px 10px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:-1px;margin-bottom:-1px}@media (max-width: 779px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width: 780px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-10px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:-1px;margin-bottom:-1px}.navbar-btn.btn-sm,.btn-group-sm>.navbar-btn.btn,button.navbar-btn.DTTT_button,div.navbar-btn.DTTT_button,a.navbar-btn.DTTT_button{margin-top:1px;margin-bottom:1px}.navbar-btn.btn-xs,.btn-group-xs>.navbar-btn.btn,.btn-group-xs>button.navbar-btn.DTTT_button,.btn-group-xs>div.navbar-btn.DTTT_button,.btn-group-xs>a.navbar-btn.DTTT_button{margin-top:4px;margin-bottom:4px}.navbar-text{margin-top:6px;margin-bottom:6px;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;float:left;margin-left:10px;margin-right:10px}.navbar-text.navbar-right:last-child{margin-right:0}.navbar-default{background:rgba(43,43,43,0.9);border-color:none;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.4);box-shadow:0 6px 12px rgba(0,0,0,0.4)}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#568a89;background-color:transparent}.navbar-default .navbar-text{color:#63676a}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#1d1d1d;background-color:#63676a}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#2b2b2b;background-color:#adadad}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#a0a0a0;color:#2b2b2b}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#bababa}.navbar-default .navbar-toggle .icon-bar{background-color:#ccc}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:none}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#adadad;color:#2b2b2b}@media (max-width: 779px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#1d1d1d;background-color:#63676a}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#2b2b2b;background-color:#adadad}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#1d1d1d}.navbar-inverse{background-color:#222;border-color:#090909}.navbar-inverse .navbar-brand{color:#63676a}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#63676a}.navbar-inverse .navbar-nav>li>a{color:#63676a}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#090909;color:#fff}@media (max-width: 779px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#63676a}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#63676a}.navbar-inverse .navbar-link:hover{color:#fff}.breadcrumb{padding:0px 0px;margin-bottom:18px;list-style:none;background-color:none;border-radius:0px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/Ā ";padding:0 5px;color:#63676a}.breadcrumb>.active{color:#5cb85c}.pagination{display:inline-block;padding-left:0;margin:18px 0;border-radius:0px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.5;text-decoration:none;color:#375959;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:0px;border-top-left-radius:0px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:0px;border-top-right-radius:0px}.pagination>li>a:hover,.pagination>li>a:focus,.pagination>li>span:hover,.pagination>li>span:focus{color:#1a2a2a;background-color:#adadad;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:hover,.pagination>.active>a:focus,.pagination>.active>span,.pagination>.active>span:hover,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#375959;border-color:#375959;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#63676a;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:15px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:11px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:18px 0;list-style:none;text-align:center}.pager:before,.pager:after{content:" ";display:table}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#adadad}.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:#63676a;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:2px 5px;font-size:75%;font-weight:bold;line-height:1;color:#1d1d1d;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:3px}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label,button.DTTT_button .label,div.DTTT_button .label,a.DTTT_button .label{position:relative;top:-1px}.label-default{background-color:#63676a}.label-default[href]:hover,.label-default[href]:focus{background-color:#4a4d50}.label-primary{background-color:#375959}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#243939}.label-success{background-color:#4f9e4f}.label-success[href]:hover,.label-success[href]:focus{background-color:#3e7c3e}.label-info{background-color:#316490}.label-info[href]:hover,.label-info[href]:focus{background-color:#244a6a}.label-warning{background-color:#e28a0d}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#b26d0a}.label-danger{background-color:#a52521}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#7b1b18}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:11px;font-weight:bold;color:#eaeaea;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#63676a;border-radius:10px}.badge:empty{display:none}.btn .badge,button.DTTT_button .badge,div.DTTT_button .badge,a.DTTT_button .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge,.btn-group-xs>button.DTTT_button .badge,.btn-group-xs>div.DTTT_button .badge,.btn-group-xs>a.DTTT_button .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#375959;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#adadad}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:18px;font-weight:200}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width: 780px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:54px}}.thumbnail{display:block;padding:4px;margin-bottom:18px;line-height:1.5;background-color:#313335;border:1px solid #ddd;border-radius:0px;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.thumbnail>img,.thumbnail a>img{display:block;max-width:100%;height:auto;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px;color:#63676a}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#375959}.alert{padding:15px;margin-bottom:18px;border:1px solid transparent;border-radius:0px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#d1e8d1;border-color:#4f9e4f;color:#2b2b2b}.alert-success hr{border-top-color:#478d47}.alert-success .alert-link{color:#121212}.alert-info{background-color:#abc9e2;border-color:#316490;color:#2b2b2b}.alert-info hr{border-top-color:#2b577d}.alert-info .alert-link{color:#121212}.alert-warning{background-color:#fef8f0;border-color:#e28a0d;color:#2b2b2b}.alert-warning hr{border-top-color:#ca7b0c}.alert-warning .alert-link{color:#121212}.alert-danger{background-color:#f6d1d0;border-color:#a52521;color:#2b2b2b}.alert-danger hr{border-top-color:#90201d}.alert-danger .alert-link{color:#121212}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:18px;margin-bottom:18px;background-color:#f5f5f5;border-radius:0px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:11px;line-height:18px;color:#fff;text-align:center;background-color:#375959;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width 0.6s ease;transition:width 0.6s ease}.progress-striped .progress-bar{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:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0));background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#4f9e4f}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0))}.progress-bar-info{background-color:#316490}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0))}.progress-bar-warning{background-color:#e28a0d}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0))}.progress-bar-danger{background-color:#a52521}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0))}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:6px 8px;background-color:#adadad;border-bottom:1px solid #63676a;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}.list-group-item:first-child{border-top-right-radius:0px;border-top-left-radius:0px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:0px;border-bottom-left-radius:0px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#63676a;color:#1d1d1d}a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{z-index:2;color:#eaeaea;background-color:#375959;border-color:#375959}a.list-group-item.active .list-group-item-heading,a.list-group-item.active:hover .list-group-item-heading,a.list-group-item.active:focus .list-group-item-heading{color:inherit}a.list-group-item.active .list-group-item-text,a.list-group-item.active:hover .list-group-item-text,a.list-group-item.active:focus .list-group-item-text{color:#9bc1c1}.list-group-item-success{color:#2b2b2b;background-color:#d1e8d1}a.list-group-item-success{color:#2b2b2b}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#2b2b2b;background-color:#c0e0c0}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#2b2b2b;border-color:#2b2b2b}.list-group-item-info{color:#2b2b2b;background-color:#abc9e2}a.list-group-item-info{color:#2b2b2b}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#2b2b2b;background-color:#98bcdc}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#2b2b2b;border-color:#2b2b2b}.list-group-item-warning{color:#2b2b2b;background-color:#fef8f0}a.list-group-item-warning{color:#2b2b2b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#2b2b2b;background-color:#fdedd8}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#2b2b2b;border-color:#2b2b2b}.list-group-item-danger{color:#2b2b2b;background-color:#f6d1d0}a.list-group-item-danger{color:#2b2b2b}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#2b2b2b;background-color:#f1bcba}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#2b2b2b;border-color:#2b2b2b}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:18px;background-color:#fff;border:1px solid transparent;border-radius:0px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-body:before,.panel-body:after{content:" ";display:table}.panel-body:after{clear:both}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:-1px;border-top-left-radius:-1px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:14px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:-1px;border-bottom-left-radius:-1px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:-1px;border-top-left-radius:-1px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:-1px;border-bottom-left-radius:-1px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:-1px;border-top-left-radius:-1px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:-1px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:-1px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:-1px;border-bottom-left-radius:-1px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:-1px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:-1px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #313335}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:18px}.panel-group .panel{margin-bottom:0;border-radius:0px;overflow:hidden}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#313335;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#375959}.panel-primary>.panel-heading{color:#fff;background-color:#375959;border-color:#375959}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#375959}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#375959}.panel-success{border-color:#4f9e4f}.panel-success>.panel-heading{color:#2b2b2b;background-color:#d1e8d1;border-color:#4f9e4f}.panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#4f9e4f}.panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#4f9e4f}.panel-info{border-color:#316490}.panel-info>.panel-heading{color:#2b2b2b;background-color:#abc9e2;border-color:#316490}.panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#316490}.panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#316490}.panel-warning{border-color:#e28a0d}.panel-warning>.panel-heading{color:#2b2b2b;background-color:#fef8f0;border-color:#e28a0d}.panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#e28a0d}.panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#e28a0d}.panel-danger{border-color:#a52521}.panel-danger>.panel-heading{color:#2b2b2b;background-color:#f6d1d0;border-color:#a52521}.panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#a52521}.panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#a52521}.well{min-height:20px;padding:10px;margin-bottom:20px;background-color:#63676a;border:1px solid #313335;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;color:#2b2b2b;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well a{color:#6caead}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:18px;font-weight:bold;line-height:1;color:#a52521}.close:hover,.close:focus{color:#a52521;text-decoration:none;cursor:pointer;opacity:0.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:auto;overflow-y:scroll;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-moz-transition:-moz-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);transform:translate(0, 0)}.modal-dialog{position:relative;width:auto;margin:10px;z-index:1050}.modal-content{position:relative;background-color:#3c3f41;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box;outline:none}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:0.5;filter:alpha(opacity=50)}.modal-header{padding:14px;border-bottom:1px solid #303234;min-height:15.5px;background-color:#353739}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.5}.modal-body{position:relative;padding:14px;color:#adadad}.modal-footer{padding:13px 14px 14px;text-align:right;border-top:1px solid #303234;background-color:#353739}.modal-footer:before,.modal-footer:after{content:" ";display:table}.modal-footer:after{clear:both}.modal-footer .btn+.btn,.modal-footer button.DTTT_button+.btn,.modal-footer div.DTTT_button+.btn,.modal-footer a.DTTT_button+.btn,.modal-footer .btn+button.DTTT_button,.modal-footer button.DTTT_button+button.DTTT_button,.modal-footer div.DTTT_button+button.DTTT_button,.modal-footer a.DTTT_button+button.DTTT_button,.modal-footer .btn+div.DTTT_button,.modal-footer button.DTTT_button+div.DTTT_button,.modal-footer div.DTTT_button+div.DTTT_button,.modal-footer a.DTTT_button+div.DTTT_button,.modal-footer .btn+a.DTTT_button,.modal-footer button.DTTT_button+a.DTTT_button,.modal-footer div.DTTT_button+a.DTTT_button,.modal-footer a.DTTT_button+a.DTTT_button{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn,.modal-footer .btn-group button.DTTT_button+.btn,.modal-footer .btn-group div.DTTT_button+.btn,.modal-footer .btn-group a.DTTT_button+.btn,.modal-footer .btn-group .btn+button.DTTT_button,.modal-footer .btn-group button.DTTT_button+button.DTTT_button,.modal-footer .btn-group div.DTTT_button+button.DTTT_button,.modal-footer .btn-group a.DTTT_button+button.DTTT_button,.modal-footer .btn-group .btn+div.DTTT_button,.modal-footer .btn-group button.DTTT_button+div.DTTT_button,.modal-footer .btn-group div.DTTT_button+div.DTTT_button,.modal-footer .btn-group a.DTTT_button+div.DTTT_button,.modal-footer .btn-group .btn+a.DTTT_button,.modal-footer .btn-group button.DTTT_button+a.DTTT_button,.modal-footer .btn-group div.DTTT_button+a.DTTT_button,.modal-footer .btn-group a.DTTT_button+a.DTTT_button{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@media (min-width: 780px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width: 1200px){.modal-lg>.modal-dialog{width:820px}}.tooltip{position:absolute;z-index:1010;display:block;visibility:visible;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:0.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:0px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;right:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1030;display:none;max-width:276px;padding:1px;text-align:left;background-color:#3c3f41;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);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:12px;font-weight:normal;line-height:18px;background-color:#353739;border-bottom:1px solid #282a2c;border-radius:5px 5px 0 0;color:#63676a}.popover-content{padding:7px 10px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#63676a}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#63676a}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#63676a}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#63676a;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:0.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left, color-stop(rgba(0,0,0,0.5) 0%), color-stop(rgba(0,0,0,0.0001) 100%));background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0%,rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left, color-stop(rgba(0,0,0,0.0001) 0%), color-stop(rgba(0,0,0,0.5) 100%));background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0%,rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:none;color:#fff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:transparent}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn,.carousel-caption button.DTTT_button,.carousel-caption div.DTTT_button,.carousel-caption a.DTTT_button{text-shadow:none}@media screen and (min-width: 780px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important;visibility:hidden !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}@media (max-width: 779px){.visible-xs{display:block !important}table.visible-xs{display:table}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (min-width: 780px) and (max-width: 1199px){.visible-sm{display:block !important}table.visible-sm{display:table}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width: 1200px) and (max-width: 1599px){.visible-md{display:block !important}table.visible-md{display:table}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width: 1600px){.visible-lg{display:block !important}table.visible-lg{display:table}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (max-width: 779px){.hidden-xs{display:none !important}}@media (min-width: 780px) and (max-width: 1199px){.hidden-sm{display:none !important}}@media (min-width: 1200px) and (max-width: 1599px){.hidden-md{display:none !important}}@media (min-width: 1600px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}@media print{.hidden-print{display:none !important}}/*!
* Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome
* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
*/@font-face{font-family:'FontAwesome';src:url("../fonts/fontawesome-webfont.eot?v=4.3.0");src:url("../fonts/fontawesome-webfont.eot?#iefix&v=4.3.0") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff?v=4.3.0") format("woff"),url("../fonts/fontawesome-webfont.ttf?v=4.3.0") format("truetype"),url("../fonts/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.3333333333em;line-height:0.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.2857142857em;text-align:center}.fa-ul{padding-left:0;margin-left:2.1428571429em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:0.1428571429em;text-align:center}.fa-li.fa-lg{left:-1.8571428571em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"ļ"}.fa-music:before{content:"ļ"}.fa-search:before{content:"ļ"}.fa-envelope-o:before{content:"ļ"}.fa-heart:before{content:"ļ"}.fa-star:before{content:"ļ
"}.fa-star-o:before{content:"ļ"}.fa-user:before{content:"ļ"}.fa-film:before{content:"ļ"}.fa-th-large:before{content:"ļ"}.fa-th:before{content:"ļ"}.fa-th-list:before{content:"ļ"}.fa-check:before{content:"ļ"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"ļ"}.fa-search-plus:before{content:"ļ"}.fa-search-minus:before{content:"ļ"}.fa-power-off:before{content:"ļ"}.fa-signal:before{content:"ļ"}.fa-gear:before,.fa-cog:before{content:"ļ"}.fa-trash-o:before{content:"ļ"}.fa-home:before{content:"ļ"}.fa-file-o:before{content:"ļ"}.fa-clock-o:before{content:"ļ"}.fa-road:before{content:"ļ"}.fa-download:before{content:"ļ"}.fa-arrow-circle-o-down:before{content:"ļ"}.fa-arrow-circle-o-up:before{content:"ļ"}.fa-inbox:before{content:"ļ"}.fa-play-circle-o:before{content:"ļ"}.fa-rotate-right:before,.fa-repeat:before{content:"ļ"}.fa-refresh:before{content:"ļ”"}.fa-list-alt:before{content:"ļ¢"}.fa-lock:before{content:"ļ£"}.fa-flag:before{content:"ļ¤"}.fa-headphones:before{content:"ļ„"}.fa-volume-off:before{content:"ļ¦"}.fa-volume-down:before{content:"ļ§"}.fa-volume-up:before{content:"ļØ"}.fa-qrcode:before{content:"ļ©"}.fa-barcode:before{content:"ļŖ"}.fa-tag:before{content:"ļ«"}.fa-tags:before{content:"ļ¬"}.fa-book:before{content:"ļ"}.fa-bookmark:before{content:"ļ®"}.fa-print:before{content:"ļÆ"}.fa-camera:before{content:"ļ°"}.fa-font:before{content:"ļ±"}.fa-bold:before{content:"ļ²"}.fa-italic:before{content:"ļ³"}.fa-text-height:before{content:"ļ“"}.fa-text-width:before{content:"ļµ"}.fa-align-left:before{content:"ļ¶"}.fa-align-center:before{content:"ļ·"}.fa-align-right:before{content:"ļø"}.fa-align-justify:before{content:"ļ¹"}.fa-list:before{content:"ļŗ"}.fa-dedent:before,.fa-outdent:before{content:"ļ»"}.fa-indent:before{content:"ļ¼"}.fa-video-camera:before{content:"ļ½"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"ļ¾"}.fa-pencil:before{content:"ļ"}.fa-map-marker:before{content:"ļ"}.fa-adjust:before{content:"ļ"}.fa-tint:before{content:"ļ"}.fa-edit:before,.fa-pencil-square-o:before{content:"ļ"}.fa-share-square-o:before{content:"ļ
"}.fa-check-square-o:before{content:"ļ"}.fa-arrows:before{content:"ļ"}.fa-step-backward:before{content:"ļ"}.fa-fast-backward:before{content:"ļ"}.fa-backward:before{content:"ļ"}.fa-play:before{content:"ļ"}.fa-pause:before{content:"ļ"}.fa-stop:before{content:"ļ"}.fa-forward:before{content:"ļ"}.fa-fast-forward:before{content:"ļ"}.fa-step-forward:before{content:"ļ"}.fa-eject:before{content:"ļ"}.fa-chevron-left:before{content:"ļ"}.fa-chevron-right:before{content:"ļ"}.fa-plus-circle:before{content:"ļ"}.fa-minus-circle:before{content:"ļ"}.fa-times-circle:before{content:"ļ"}.fa-check-circle:before{content:"ļ"}.fa-question-circle:before{content:"ļ"}.fa-info-circle:before{content:"ļ"}.fa-crosshairs:before{content:"ļ"}.fa-times-circle-o:before{content:"ļ"}.fa-check-circle-o:before{content:"ļ"}.fa-ban:before{content:"ļ"}.fa-arrow-left:before{content:"ļ "}.fa-arrow-right:before{content:"ļ”"}.fa-arrow-up:before{content:"ļ¢"}.fa-arrow-down:before{content:"ļ£"}.fa-mail-forward:before,.fa-share:before{content:"ļ¤"}.fa-expand:before{content:"ļ„"}.fa-compress:before{content:"ļ¦"}.fa-plus:before{content:"ļ§"}.fa-minus:before{content:"ļØ"}.fa-asterisk:before{content:"ļ©"}.fa-exclamation-circle:before{content:"ļŖ"}.fa-gift:before{content:"ļ«"}.fa-leaf:before{content:"ļ¬"}.fa-fire:before{content:"ļ"}.fa-eye:before{content:"ļ®"}.fa-eye-slash:before{content:"ļ°"}.fa-warning:before,.fa-exclamation-triangle:before{content:"ļ±"}.fa-plane:before{content:"ļ²"}.fa-calendar:before{content:"ļ³"}.fa-random:before{content:"ļ“"}.fa-comment:before{content:"ļµ"}.fa-magnet:before{content:"ļ¶"}.fa-chevron-up:before{content:"ļ·"}.fa-chevron-down:before{content:"ļø"}.fa-retweet:before{content:"ļ¹"}.fa-shopping-cart:before{content:"ļŗ"}.fa-folder:before{content:"ļ»"}.fa-folder-open:before{content:"ļ¼"}.fa-arrows-v:before{content:"ļ½"}.fa-arrows-h:before{content:"ļ¾"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"ļ"}.fa-twitter-square:before{content:"ļ"}.fa-facebook-square:before{content:"ļ"}.fa-camera-retro:before{content:"ļ"}.fa-key:before{content:"ļ"}.fa-gears:before,.fa-cogs:before{content:"ļ
"}.fa-comments:before{content:"ļ"}.fa-thumbs-o-up:before{content:"ļ"}.fa-thumbs-o-down:before{content:"ļ"}.fa-star-half:before{content:"ļ"}.fa-heart-o:before{content:"ļ"}.fa-sign-out:before{content:"ļ"}.fa-linkedin-square:before{content:"ļ"}.fa-thumb-tack:before{content:"ļ"}.fa-external-link:before{content:"ļ"}.fa-sign-in:before{content:"ļ"}.fa-trophy:before{content:"ļ"}.fa-github-square:before{content:"ļ"}.fa-upload:before{content:"ļ"}.fa-lemon-o:before{content:"ļ"}.fa-phone:before{content:"ļ"}.fa-square-o:before{content:"ļ"}.fa-bookmark-o:before{content:"ļ"}.fa-phone-square:before{content:"ļ"}.fa-twitter:before{content:"ļ"}.fa-facebook-f:before,.fa-facebook:before{content:"ļ"}.fa-github:before{content:"ļ"}.fa-unlock:before{content:"ļ"}.fa-credit-card:before{content:"ļ"}.fa-rss:before{content:"ļ"}.fa-hdd-o:before{content:"ļ "}.fa-bullhorn:before{content:"ļ”"}.fa-bell:before{content:"ļ³"}.fa-certificate:before{content:"ļ£"}.fa-hand-o-right:before{content:"ļ¤"}.fa-hand-o-left:before{content:"ļ„"}.fa-hand-o-up:before{content:"ļ¦"}.fa-hand-o-down:before{content:"ļ§"}.fa-arrow-circle-left:before{content:"ļØ"}.fa-arrow-circle-right:before{content:"ļ©"}.fa-arrow-circle-up:before{content:"ļŖ"}.fa-arrow-circle-down:before{content:"ļ«"}.fa-globe:before{content:"ļ¬"}.fa-wrench:before{content:"ļ"}.fa-tasks:before{content:"ļ®"}.fa-filter:before{content:"ļ°"}.fa-briefcase:before{content:"ļ±"}.fa-arrows-alt:before{content:"ļ²"}.fa-group:before,.fa-users:before{content:"ļ"}.fa-chain:before,.fa-link:before{content:"ļ"}.fa-cloud:before{content:"ļ"}.fa-flask:before{content:"ļ"}.fa-cut:before,.fa-scissors:before{content:"ļ"}.fa-copy:before,.fa-files-o:before{content:"ļ
"}.fa-paperclip:before{content:"ļ"}.fa-save:before,.fa-floppy-o:before{content:"ļ"}.fa-square:before{content:"ļ"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"ļ"}.fa-list-ul:before{content:"ļ"}.fa-list-ol:before{content:"ļ"}.fa-strikethrough:before{content:"ļ"}.fa-underline:before{content:"ļ"}.fa-table:before{content:"ļ"}.fa-magic:before{content:"ļ"}.fa-truck:before{content:"ļ"}.fa-pinterest:before{content:"ļ"}.fa-pinterest-square:before{content:"ļ"}.fa-google-plus-square:before{content:"ļ"}.fa-google-plus:before{content:"ļ"}.fa-money:before{content:"ļ"}.fa-caret-down:before{content:"ļ"}.fa-caret-up:before{content:"ļ"}.fa-caret-left:before{content:"ļ"}.fa-caret-right:before{content:"ļ"}.fa-columns:before{content:"ļ"}.fa-unsorted:before,.fa-sort:before{content:"ļ"}.fa-sort-down:before,.fa-sort-desc:before{content:"ļ"}.fa-sort-up:before,.fa-sort-asc:before{content:"ļ"}.fa-envelope:before{content:"ļ "}.fa-linkedin:before{content:"ļ”"}.fa-rotate-left:before,.fa-undo:before{content:"ļ¢"}.fa-legal:before,.fa-gavel:before{content:"ļ£"}.fa-dashboard:before,.fa-tachometer:before{content:"ļ¤"}.fa-comment-o:before{content:"ļ„"}.fa-comments-o:before{content:"ļ¦"}.fa-flash:before,.fa-bolt:before{content:"ļ§"}.fa-sitemap:before{content:"ļØ"}.fa-umbrella:before{content:"ļ©"}.fa-paste:before,.fa-clipboard:before{content:"ļŖ"}.fa-lightbulb-o:before{content:"ļ«"}.fa-exchange:before{content:"ļ¬"}.fa-cloud-download:before{content:"ļ"}.fa-cloud-upload:before{content:"ļ®"}.fa-user-md:before{content:"ļ°"}.fa-stethoscope:before{content:"ļ±"}.fa-suitcase:before{content:"ļ²"}.fa-bell-o:before{content:"ļ¢"}.fa-coffee:before{content:"ļ“"}.fa-cutlery:before{content:"ļµ"}.fa-file-text-o:before{content:"ļ¶"}.fa-building-o:before{content:"ļ·"}.fa-hospital-o:before{content:"ļø"}.fa-ambulance:before{content:"ļ¹"}.fa-medkit:before{content:"ļŗ"}.fa-fighter-jet:before{content:"ļ»"}.fa-beer:before{content:"ļ¼"}.fa-h-square:before{content:"ļ½"}.fa-plus-square:before{content:"ļ¾"}.fa-angle-double-left:before{content:"ļ"}.fa-angle-double-right:before{content:"ļ"}.fa-angle-double-up:before{content:"ļ"}.fa-angle-double-down:before{content:"ļ"}.fa-angle-left:before{content:"ļ"}.fa-angle-right:before{content:"ļ
"}.fa-angle-up:before{content:"ļ"}.fa-angle-down:before{content:"ļ"}.fa-desktop:before{content:"ļ"}.fa-laptop:before{content:"ļ"}.fa-tablet:before{content:"ļ"}.fa-mobile-phone:before,.fa-mobile:before{content:"ļ"}.fa-circle-o:before{content:"ļ"}.fa-quote-left:before{content:"ļ"}.fa-quote-right:before{content:"ļ"}.fa-spinner:before{content:"ļ"}.fa-circle:before{content:"ļ"}.fa-mail-reply:before,.fa-reply:before{content:"ļ"}.fa-github-alt:before{content:"ļ"}.fa-folder-o:before{content:"ļ"}.fa-folder-open-o:before{content:"ļ"}.fa-smile-o:before{content:"ļ"}.fa-frown-o:before{content:"ļ"}.fa-meh-o:before{content:"ļ"}.fa-gamepad:before{content:"ļ"}.fa-keyboard-o:before{content:"ļ"}.fa-flag-o:before{content:"ļ"}.fa-flag-checkered:before{content:"ļ"}.fa-terminal:before{content:"ļ "}.fa-code:before{content:"ļ”"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"ļ¢"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"ļ£"}.fa-location-arrow:before{content:"ļ¤"}.fa-crop:before{content:"ļ„"}.fa-code-fork:before{content:"ļ¦"}.fa-unlink:before,.fa-chain-broken:before{content:"ļ§"}.fa-question:before{content:"ļØ"}.fa-info:before{content:"ļ©"}.fa-exclamation:before{content:"ļŖ"}.fa-superscript:before{content:"ļ«"}.fa-subscript:before{content:"ļ¬"}.fa-eraser:before{content:"ļ"}.fa-puzzle-piece:before{content:"ļ®"}.fa-microphone:before{content:"ļ°"}.fa-microphone-slash:before{content:"ļ±"}.fa-shield:before{content:"ļ²"}.fa-calendar-o:before{content:"ļ³"}.fa-fire-extinguisher:before{content:"ļ“"}.fa-rocket:before{content:"ļµ"}.fa-maxcdn:before{content:"ļ¶"}.fa-chevron-circle-left:before{content:"ļ·"}.fa-chevron-circle-right:before{content:"ļø"}.fa-chevron-circle-up:before{content:"ļ¹"}.fa-chevron-circle-down:before{content:"ļŗ"}.fa-html5:before{content:"ļ»"}.fa-css3:before{content:"ļ¼"}.fa-anchor:before{content:"ļ½"}.fa-unlock-alt:before{content:"ļ¾"}.fa-bullseye:before{content:"ļ
"}.fa-ellipsis-h:before{content:"ļ
"}.fa-ellipsis-v:before{content:"ļ
"}.fa-rss-square:before{content:"ļ
"}.fa-play-circle:before{content:"ļ
"}.fa-ticket:before{content:"ļ
"}.fa-minus-square:before{content:"ļ
"}.fa-minus-square-o:before{content:"ļ
"}.fa-level-up:before{content:"ļ
"}.fa-level-down:before{content:"ļ
"}.fa-check-square:before{content:"ļ
"}.fa-pencil-square:before{content:"ļ
"}.fa-external-link-square:before{content:"ļ
"}.fa-share-square:before{content:"ļ
"}.fa-compass:before{content:"ļ
"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"ļ
"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"ļ
"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"ļ
"}.fa-euro:before,.fa-eur:before{content:"ļ
"}.fa-gbp:before{content:"ļ
"}.fa-dollar:before,.fa-usd:before{content:"ļ
"}.fa-rupee:before,.fa-inr:before{content:"ļ
"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"ļ
"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"ļ
"}.fa-won:before,.fa-krw:before{content:"ļ
"}.fa-bitcoin:before,.fa-btc:before{content:"ļ
"}.fa-file:before{content:"ļ
"}.fa-file-text:before{content:"ļ
"}.fa-sort-alpha-asc:before{content:"ļ
"}.fa-sort-alpha-desc:before{content:"ļ
"}.fa-sort-amount-asc:before{content:"ļ
"}.fa-sort-amount-desc:before{content:"ļ
”"}.fa-sort-numeric-asc:before{content:"ļ
¢"}.fa-sort-numeric-desc:before{content:"ļ
£"}.fa-thumbs-up:before{content:"ļ
¤"}.fa-thumbs-down:before{content:"ļ
„"}.fa-youtube-square:before{content:"ļ
¦"}.fa-youtube:before{content:"ļ
§"}.fa-xing:before{content:"ļ
Ø"}.fa-xing-square:before{content:"ļ
©"}.fa-youtube-play:before{content:"ļ
Ŗ"}.fa-dropbox:before{content:"ļ
«"}.fa-stack-overflow:before{content:"ļ
¬"}.fa-instagram:before{content:"ļ
"}.fa-flickr:before{content:"ļ
®"}.fa-adn:before{content:"ļ
°"}.fa-bitbucket:before{content:"ļ
±"}.fa-bitbucket-square:before{content:"ļ
²"}.fa-tumblr:before{content:"ļ
³"}.fa-tumblr-square:before{content:"ļ
“"}.fa-long-arrow-down:before{content:"ļ
µ"}.fa-long-arrow-up:before{content:"ļ
¶"}.fa-long-arrow-left:before{content:"ļ
·"}.fa-long-arrow-right:before{content:"ļ
ø"}.fa-apple:before{content:"ļ
¹"}.fa-windows:before{content:"ļ
ŗ"}.fa-android:before{content:"ļ
»"}.fa-linux:before{content:"ļ
¼"}.fa-dribbble:before{content:"ļ
½"}.fa-skype:before{content:"ļ
¾"}.fa-foursquare:before{content:"ļ"}.fa-trello:before{content:"ļ"}.fa-female:before{content:"ļ"}.fa-male:before{content:"ļ"}.fa-gittip:before,.fa-gratipay:before{content:"ļ"}.fa-sun-o:before{content:"ļ
"}.fa-moon-o:before{content:"ļ"}.fa-archive:before{content:"ļ"}.fa-bug:before{content:"ļ"}.fa-vk:before{content:"ļ"}.fa-weibo:before{content:"ļ"}.fa-renren:before{content:"ļ"}.fa-pagelines:before{content:"ļ"}.fa-stack-exchange:before{content:"ļ"}.fa-arrow-circle-o-right:before{content:"ļ"}.fa-arrow-circle-o-left:before{content:"ļ"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"ļ"}.fa-dot-circle-o:before{content:"ļ"}.fa-wheelchair:before{content:"ļ"}.fa-vimeo-square:before{content:"ļ"}.fa-turkish-lira:before,.fa-try:before{content:"ļ"}.fa-plus-square-o:before{content:"ļ"}.fa-space-shuttle:before{content:"ļ"}.fa-slack:before{content:"ļ"}.fa-envelope-square:before{content:"ļ"}.fa-wordpress:before{content:"ļ"}.fa-openid:before{content:"ļ"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"ļ"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"ļ"}.fa-yahoo:before{content:"ļ"}.fa-google:before{content:"ļ "}.fa-reddit:before{content:"ļ”"}.fa-reddit-square:before{content:"ļ¢"}.fa-stumbleupon-circle:before{content:"ļ£"}.fa-stumbleupon:before{content:"ļ¤"}.fa-delicious:before{content:"ļ„"}.fa-digg:before{content:"ļ¦"}.fa-pied-piper:before{content:"ļ§"}.fa-pied-piper-alt:before{content:"ļØ"}.fa-drupal:before{content:"ļ©"}.fa-joomla:before{content:"ļŖ"}.fa-language:before{content:"ļ«"}.fa-fax:before{content:"ļ¬"}.fa-building:before{content:"ļ"}.fa-child:before{content:"ļ®"}.fa-paw:before{content:"ļ°"}.fa-spoon:before{content:"ļ±"}.fa-cube:before{content:"ļ²"}.fa-cubes:before{content:"ļ³"}.fa-behance:before{content:"ļ“"}.fa-behance-square:before{content:"ļµ"}.fa-steam:before{content:"ļ¶"}.fa-steam-square:before{content:"ļ·"}.fa-recycle:before{content:"ļø"}.fa-automobile:before,.fa-car:before{content:"ļ¹"}.fa-cab:before,.fa-taxi:before{content:"ļŗ"}.fa-tree:before{content:"ļ»"}.fa-spotify:before{content:"ļ¼"}.fa-deviantart:before{content:"ļ½"}.fa-soundcloud:before{content:"ļ¾"}.fa-database:before{content:"ļ"}.fa-file-pdf-o:before{content:"ļ"}.fa-file-word-o:before{content:"ļ"}.fa-file-excel-o:before{content:"ļ"}.fa-file-powerpoint-o:before{content:"ļ"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"ļ
"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"ļ"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"ļ"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"ļ"}.fa-file-code-o:before{content:"ļ"}.fa-vine:before{content:"ļ"}.fa-codepen:before{content:"ļ"}.fa-jsfiddle:before{content:"ļ"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"ļ"}.fa-circle-o-notch:before{content:"ļ"}.fa-ra:before,.fa-rebel:before{content:"ļ"}.fa-ge:before,.fa-empire:before{content:"ļ"}.fa-git-square:before{content:"ļ"}.fa-git:before{content:"ļ"}.fa-hacker-news:before{content:"ļ"}.fa-tencent-weibo:before{content:"ļ"}.fa-qq:before{content:"ļ"}.fa-wechat:before,.fa-weixin:before{content:"ļ"}.fa-send:before,.fa-paper-plane:before{content:"ļ"}.fa-send-o:before,.fa-paper-plane-o:before{content:"ļ"}.fa-history:before{content:"ļ"}.fa-genderless:before,.fa-circle-thin:before{content:"ļ"}.fa-header:before{content:"ļ"}.fa-paragraph:before{content:"ļ"}.fa-sliders:before{content:"ļ"}.fa-share-alt:before{content:"ļ "}.fa-share-alt-square:before{content:"ļ”"}.fa-bomb:before{content:"ļ¢"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"ļ£"}.fa-tty:before{content:"ļ¤"}.fa-binoculars:before{content:"ļ„"}.fa-plug:before{content:"ļ¦"}.fa-slideshare:before{content:"ļ§"}.fa-twitch:before{content:"ļØ"}.fa-yelp:before{content:"ļ©"}.fa-newspaper-o:before{content:"ļŖ"}.fa-wifi:before{content:"ļ«"}.fa-calculator:before{content:"ļ¬"}.fa-paypal:before{content:"ļ"}.fa-google-wallet:before{content:"ļ®"}.fa-cc-visa:before{content:"ļ°"}.fa-cc-mastercard:before{content:"ļ±"}.fa-cc-discover:before{content:"ļ²"}.fa-cc-amex:before{content:"ļ³"}.fa-cc-paypal:before{content:"ļ“"}.fa-cc-stripe:before{content:"ļµ"}.fa-bell-slash:before{content:"ļ¶"}.fa-bell-slash-o:before{content:"ļ·"}.fa-trash:before{content:"ļø"}.fa-copyright:before{content:"ļ¹"}.fa-at:before{content:"ļŗ"}.fa-eyedropper:before{content:"ļ»"}.fa-paint-brush:before{content:"ļ¼"}.fa-birthday-cake:before{content:"ļ½"}.fa-area-chart:before{content:"ļ¾"}.fa-pie-chart:before{content:"ļ"}.fa-line-chart:before{content:"ļ"}.fa-lastfm:before{content:"ļ"}.fa-lastfm-square:before{content:"ļ"}.fa-toggle-off:before{content:"ļ"}.fa-toggle-on:before{content:"ļ
"}.fa-bicycle:before{content:"ļ"}.fa-bus:before{content:"ļ"}.fa-ioxhost:before{content:"ļ"}.fa-angellist:before{content:"ļ"}.fa-cc:before{content:"ļ"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"ļ"}.fa-meanpath:before{content:"ļ"}.fa-buysellads:before{content:"ļ"}.fa-connectdevelop:before{content:"ļ"}.fa-dashcube:before{content:"ļ"}.fa-forumbee:before{content:"ļ"}.fa-leanpub:before{content:"ļ"}.fa-sellsy:before{content:"ļ"}.fa-shirtsinbulk:before{content:"ļ"}.fa-simplybuilt:before{content:"ļ"}.fa-skyatlas:before{content:"ļ"}.fa-cart-plus:before{content:"ļ"}.fa-cart-arrow-down:before{content:"ļ"}.fa-diamond:before{content:"ļ"}.fa-ship:before{content:"ļ"}.fa-user-secret:before{content:"ļ"}.fa-motorcycle:before{content:"ļ"}.fa-street-view:before{content:"ļ"}.fa-heartbeat:before{content:"ļ"}.fa-venus:before{content:"ļ”"}.fa-mars:before{content:"ļ¢"}.fa-mercury:before{content:"ļ£"}.fa-transgender:before{content:"ļ¤"}.fa-transgender-alt:before{content:"ļ„"}.fa-venus-double:before{content:"ļ¦"}.fa-mars-double:before{content:"ļ§"}.fa-venus-mars:before{content:"ļØ"}.fa-mars-stroke:before{content:"ļ©"}.fa-mars-stroke-v:before{content:"ļŖ"}.fa-mars-stroke-h:before{content:"ļ«"}.fa-neuter:before{content:"ļ¬"}.fa-facebook-official:before{content:"ļ°"}.fa-pinterest-p:before{content:"ļ±"}.fa-whatsapp:before{content:"ļ²"}.fa-server:before{content:"ļ³"}.fa-user-plus:before{content:"ļ“"}.fa-user-times:before{content:"ļµ"}.fa-hotel:before,.fa-bed:before{content:"ļ¶"}.fa-viacoin:before{content:"ļ·"}.fa-train:before{content:"ļø"}.fa-subway:before{content:"ļ¹"}.fa-medium:before{content:"ļŗ"}.mCustomScrollbar{touch-action:none}.mCustomScrollbar.mCS_no_scrollbar{touch-action:auto}.mCustomScrollBox{position:relative;overflow:hidden;height:100%;max-width:100%;outline:none;direction:ltr}.mCSB_container{overflow:hidden;width:auto;height:auto}.mCSB_inside>.mCSB_container{margin-right:30px}.mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden{margin-right:0}.mCS-dir-rtl>.mCSB_inside>.mCSB_container{margin-right:0;margin-left:30px}.mCS-dir-rtl>.mCSB_inside>.mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden{margin-left:0}.mCSB_scrollTools{position:absolute;width:16px;height:auto;left:auto;top:0;right:0;bottom:0;opacity:0.75;filter:"alpha(opacity=75)"}.mCSB_outside+.mCSB_scrollTools{right:-26px}.mCS-dir-rtl>.mCSB_inside>.mCSB_scrollTools,.mCS-dir-rtl>.mCSB_outside+.mCSB_scrollTools{right:auto;left:0}.mCS-dir-rtl>.mCSB_outside+.mCSB_scrollTools{left:-26px}.mCSB_scrollTools .mCSB_draggerContainer{position:absolute;top:0;left:0;bottom:0;right:0;height:auto}.mCSB_scrollTools a+.mCSB_draggerContainer{margin:20px 0}.mCSB_scrollTools .mCSB_draggerRail{width:2px;height:100%;margin:0 auto;border-radius:16px;background-color:#000;background-color:rgba(0,0,0,0.4);filter:"alpha(opacity=40)"}.mCSB_scrollTools .mCSB_dragger{cursor:pointer;width:100%;height:30px;z-index:1}.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{position:relative;width:4px;height:100%;margin:0 auto;border-radius:16px;text-align:center;background-color:#fff;background-color:rgba(255,255,255,0.75);filter:"alpha(opacity=75)"}.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{width:12px}.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{width:8px}.mCSB_scrollTools .mCSB_buttonUp,.mCSB_scrollTools .mCSB_buttonDown{display:block;position:absolute;height:20px;width:100%;overflow:hidden;margin:0 auto;cursor:pointer}.mCSB_scrollTools .mCSB_buttonDown{bottom:0;background-position:0 -20px}.mCSB_horizontal.mCSB_inside>.mCSB_container{margin-right:0;margin-bottom:30px}.mCSB_horizontal.mCSB_outside>.mCSB_container{min-height:100%}.mCSB_horizontal>.mCSB_container.mCS_no_scrollbar_x.mCS_x_hidden{margin-bottom:0}.mCSB_scrollTools.mCSB_scrollTools_horizontal{width:auto;height:16px;top:auto;right:0;bottom:0;left:0}.mCustomScrollBox+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal{bottom:-26px}.mCSB_scrollTools.mCSB_scrollTools_horizontal a+.mCSB_draggerContainer{margin:0 20px}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:2px;margin:7px 0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_dragger{width:30px;height:100%;left:0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:4px;margin:6px auto}.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{height:12px;margin:2px auto}.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{height:8px;margin:4px 0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonLeft,.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonRight{display:block;position:absolute;width:20px;height:100%;overflow:hidden;margin:0 auto;cursor:pointer}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonLeft{left:0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonRight{right:0}.mCSB_container_wrapper{position:absolute;height:auto;width:auto;overflow:hidden;top:0;left:0;right:0;bottom:0;margin-right:30px;margin-bottom:30px}.mCSB_container_wrapper>.mCSB_container{padding-right:30px;padding-bottom:30px}.mCSB_vertical_horizontal>.mCSB_scrollTools.mCSB_scrollTools_vertical{bottom:20px}.mCSB_vertical_horizontal>.mCSB_scrollTools.mCSB_scrollTools_horizontal{right:20px}.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden+.mCSB_scrollTools.mCSB_scrollTools_vertical{bottom:0}.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden+.mCSB_scrollTools ~ .mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_scrollTools.mCSB_scrollTools_horizontal{right:0}.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_scrollTools.mCSB_scrollTools_horizontal{left:20px}.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden+.mCSB_scrollTools ~ .mCSB_scrollTools.mCSB_scrollTools_horizontal{left:0}.mCS-dir-rtl>.mCSB_inside>.mCSB_container_wrapper{margin-right:0;margin-left:30px}.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden>.mCSB_container{padding-right:0;box-sizing:border-box}.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden>.mCSB_container{padding-bottom:0;box-sizing:border-box}.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden{margin-right:0;margin-left:0}.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden{margin-bottom:0}.mCSB_scrollTools,.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCSB_scrollTools .mCSB_buttonUp,.mCSB_scrollTools .mCSB_buttonDown,.mCSB_scrollTools .mCSB_buttonLeft,.mCSB_scrollTools .mCSB_buttonRight{transition:opacity .2s ease-in-out, background-color .2s ease-in-out}.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger_bar,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerRail,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger_bar,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerRail{transition:width .2s ease-out .2s, height .2s ease-out .2s, margin-left .2s ease-out .2s, margin-right .2s ease-out .2s, margin-top .2s ease-out .2s, margin-bottom .2s ease-out .2s, opacity .2s ease-in-out, background-color .2s ease-in-out}.mCS-autoHide>.mCustomScrollBox>.mCSB_scrollTools,.mCS-autoHide>.mCustomScrollBox ~ .mCSB_scrollTools{opacity:0;filter:"alpha(opacity=0)"}.mCustomScrollbar>.mCustomScrollBox>.mCSB_scrollTools.mCSB_scrollTools_onDrag,.mCustomScrollbar>.mCustomScrollBox ~ .mCSB_scrollTools.mCSB_scrollTools_onDrag,.mCustomScrollBox:hover>.mCSB_scrollTools,.mCustomScrollBox:hover ~ .mCSB_scrollTools,.mCS-autoHide:hover>.mCustomScrollBox>.mCSB_scrollTools,.mCS-autoHide:hover>.mCustomScrollBox ~ .mCSB_scrollTools{opacity:1;filter:"alpha(opacity=100)"}.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,0.85);filter:"alpha(opacity=85)"}.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,0.9);filter:"alpha(opacity=90)"}.mCSB_scrollTools .mCSB_buttonUp,.mCSB_scrollTools .mCSB_buttonDown,.mCSB_scrollTools .mCSB_buttonLeft,.mCSB_scrollTools .mCSB_buttonRight{background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAACQCAYAAACPtWCAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxMURDMzE5NzIzQkNFMTExOTY0QkYwNzFDNzkwNTlDNCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpDOTMwRUZENEMxMUUxMUUzOUYxQkJGN0E1MDMzNTg1MCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpDOTMwRUZEM0MxMUUxMUUzOUYxQkJGN0E1MDMzNTg1MCIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MGJlMjMyZC1hNzgzLTI1NGQtOTI4Yy02NDI0YmQxNTg0YWEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MTFEQzMxOTcyM0JDRTExMTk2NEJGMDcxQzc5MDU5QzQiLz4gPC9yZGY6RGVzY3Jp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');background-repeat:no-repeat;opacity:0.4;filter:"alpha(opacity=40)"}.mCSB_scrollTools .mCSB_buttonUp{background-position:0 0}.mCSB_scrollTools .mCSB_buttonLeft{background-position:0 -40px}.mCSB_scrollTools .mCSB_buttonRight{background-position:0 -56px}.mCSB_scrollTools .mCSB_buttonUp:hover,.mCSB_scrollTools .mCSB_buttonDown:hover,.mCSB_scrollTools .mCSB_buttonLeft:hover,.mCSB_scrollTools .mCSB_buttonRight:hover{opacity:0.75;filter:"alpha(opacity=75)"}.mCSB_scrollTools .mCSB_buttonUp:active,.mCSB_scrollTools .mCSB_buttonDown:active,.mCSB_scrollTools .mCSB_buttonLeft:active,.mCSB_scrollTools .mCSB_buttonRight:active{opacity:0.9;filter:"alpha(opacity=90)"}.mCS-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,0.15)}.mCS-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,0.75)}.mCS-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:rgba(0,0,0,0.85)}.mCS-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{background-color:rgba(0,0,0,0.9)}.mCS-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-80px 0}.mCS-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-80px -20px}.mCS-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-80px -40px}.mCS-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-80px -56px}.mCS-light-2.mCSB_scrollTools .mCSB_draggerRail,.mCS-dark-2.mCSB_scrollTools .mCSB_draggerRail{width:4px;background-color:#fff;background-color:rgba(255,255,255,0.1);border-radius:1px}.mCS-light-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-dark-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:4px;background-color:#fff;background-color:rgba(255,255,255,0.75);border-radius:1px}.mCS-light-2.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-dark-2.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-dark-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:4px;margin:6px auto}.mCS-light-2.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,0.85)}.mCS-light-2.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-light-2.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,0.9)}.mCS-light-2.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px 0}.mCS-light-2.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -20px}.mCS-light-2.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -40px}.mCS-light-2.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -56px}.mCS-dark-2.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,0.1);border-radius:1px}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,0.75);border-radius:1px}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,0.85)}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-dark-2.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,0.9)}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px 0}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -20px}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -40px}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -56px}.mCS-light-thick.mCSB_scrollTools .mCSB_draggerRail,.mCS-dark-thick.mCSB_scrollTools .mCSB_draggerRail{width:4px;background-color:#fff;background-color:rgba(255,255,255,0.1);border-radius:2px}.mCS-light-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:6px;background-color:#fff;background-color:rgba(255,255,255,0.75);border-radius:2px}.mCS-light-thick.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-dark-thick.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:4px;margin:6px 0}.mCS-light-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-dark-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:6px;margin:5px auto}.mCS-light-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,0.85)}.mCS-light-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-light-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,0.9)}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonUp{background-position:-16px 0}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonDown{background-position:-16px -20px}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonLeft{background-position:-20px -40px}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonRight{background-position:-20px -56px}.mCS-dark-thick.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,0.1);border-radius:2px}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,0.75);border-radius:2px}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,0.85)}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,0.9)}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonUp{background-position:-96px 0}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonDown{background-position:-96px -20px}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonLeft{background-position:-100px -40px}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonRight{background-position:-100px -56px}.mCS-light-thin.mCSB_scrollTools .mCSB_draggerRail{background-color:#fff;background-color:rgba(255,255,255,0.1)}.mCS-light-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:2px}.mCS-light-thin.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-dark-thin.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%}.mCS-light-thin.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-dark-thin.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:2px;margin:7px auto}.mCS-dark-thin.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,0.15)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,0.75)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,0.85)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,0.9)}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonUp{background-position:-80px 0}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonDown{background-position:-80px -20px}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonLeft{background-position:-80px -40px}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonRight{background-position:-80px -56px}.mCS-rounded.mCSB_scrollTools .mCSB_draggerRail{background-color:#fff;background-color:rgba(255,255,255,0.15)}.mCS-rounded.mCSB_scrollTools .mCSB_dragger,.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger,.mCS-rounded-dots.mCSB_scrollTools .mCSB_dragger,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger{height:14px}.mCS-rounded.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:14px;margin:0 1px}.mCS-rounded.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-rounded-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_dragger{width:14px}.mCS-rounded.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{height:14px;margin:1px 0}.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{width:16px;height:16px;margin:-1px 0}.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{width:4px}.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{height:16px;width:16px;margin:0 -1px}.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{height:4px;margin:6px 0}.mCS-rounded.mCSB_scrollTools .mCSB_buttonUp{background-position:0 -72px}.mCS-rounded.mCSB_scrollTools .mCSB_buttonDown{background-position:0 -92px}.mCS-rounded.mCSB_scrollTools .mCSB_buttonLeft{background-position:0 -112px}.mCS-rounded.mCSB_scrollTools .mCSB_buttonRight{background-position:0 -128px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,0.75)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,0.15)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,0.85)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,0.9)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-80px -72px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-80px -92px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-80px -112px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-80px -128px}.mCS-rounded-dots.mCSB_scrollTools_vertical .mCSB_draggerRail,.mCS-rounded-dots-dark.mCSB_scrollTools_vertical .mCSB_draggerRail{width:4px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_draggerRail,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail{background-color:transparent;background-position:center}.mCS-rounded-dots.mCSB_scrollTools .mCSB_draggerRail,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAANElEQVQYV2NkIAAYiVbw//9/Y6DiM1ANJoyMjGdBbLgJQAX/kU0DKgDLkaQAvxW4HEvQFwCRcxIJK1XznAAAAABJRU5ErkJggg==");background-repeat:repeat-y;opacity:0.3;filter:"alpha(opacity=30)"}.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail{height:4px;margin:6px 0;background-repeat:repeat-x}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonUp{background-position:-16px -72px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonDown{background-position:-16px -92px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonLeft{background-position:-20px -112px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonRight{background-position:-20px -128px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAALElEQVQYV2NkIAAYSVFgDFR8BqrBBEifBbGRTfiPZhpYjiQFBK3A6l6CvgAAE9kGCd1mvgEAAAAASUVORK5CYII=")}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-96px -72px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-96px -92px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-100px -112px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-100px -128px}.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-repeat:repeat-y;background-image:linear-gradient(to right, rgba(255,255,255,0.5) 0%,rgba(255,255,255,0) 100%)}.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{background-repeat:repeat-x;background-image:linear-gradient(to bottom, rgba(255,255,255,0.5) 0%,rgba(255,255,255,0) 100%)}.mCS-3d.mCSB_scrollTools_vertical .mCSB_dragger,.mCS-3d-dark.mCSB_scrollTools_vertical .mCSB_dragger{height:70px}.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger{width:70px}.mCS-3d.mCSB_scrollTools,.mCS-3d-dark.mCSB_scrollTools{opacity:1;filter:"alpha(opacity=30)"}.mCS-3d.mCSB_scrollTools .mCSB_draggerRail,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{border-radius:16px}.mCS-3d.mCSB_scrollTools .mCSB_draggerRail,.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail{width:8px;background-color:#000;background-color:rgba(0,0,0,0.2);box-shadow:inset 1px 0 1px rgba(0,0,0,0.5),inset -1px 0 1px rgba(255,255,255,0.2)}.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{background-color:#555}.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:8px}.mCS-3d.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:8px;margin:4px 0;box-shadow:inset 0 1px 1px rgba(0,0,0,0.5),inset 0 -1px 1px rgba(255,255,255,0.2)}.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:8px;margin:4px auto}.mCS-3d.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-3d.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-3d.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-3d.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,0.1);box-shadow:inset 1px 0 1px rgba(0,0,0,0.1)}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail{box-shadow:inset 0 1px 1px rgba(0,0,0,0.1)}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCS-3d-thick.mCSB_scrollTools,.mCS-3d-thick-dark.mCSB_scrollTools{opacity:1;filter:"alpha(opacity=30)"}.mCS-3d-thick.mCSB_scrollTools,.mCS-3d-thick-dark.mCSB_scrollTools,.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerContainer,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerContainer{border-radius:7px}.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{border-radius:5px;box-shadow:inset 1px 0 0 rgba(255,255,255,0.4);width:12px;margin:2px;position:absolute;height:auto;top:0;bottom:0;left:0;right:0}.mCSB_inside+.mCS-3d-thick.mCSB_scrollTools_vertical,.mCSB_inside+.mCS-3d-thick-dark.mCSB_scrollTools_vertical{right:1px}.mCS-3d-thick.mCSB_scrollTools_vertical,.mCS-3d-thick-dark.mCSB_scrollTools_vertical{box-shadow:inset 1px 0 1px rgba(0,0,0,0.1),inset 0 0 14px rgba(0,0,0,0.5)}.mCS-3d-thick.mCSB_scrollTools_horizontal,.mCS-3d-thick-dark.mCSB_scrollTools_horizontal{bottom:1px;box-shadow:inset 0 1px 1px rgba(0,0,0,0.1),inset 0 0 14px rgba(0,0,0,0.5)}.mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{box-shadow:inset 0 1px 0 rgba(255,255,255,0.4);height:12px;width:auto}.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{background-color:#555}.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerContainer{background-color:#000;background-color:rgba(0,0,0,0.05);box-shadow:inset 1px 1px 16px rgba(0,0,0,0.1)}.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-3d-thick-dark.mCSB_scrollTools{box-shadow:inset 0 0 14px rgba(0,0,0,0.2)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal{box-shadow:inset 0 1px 1px rgba(0,0,0,0.1),inset 0 0 14px rgba(0,0,0,0.2)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{box-shadow:inset 1px 0 0 rgba(255,255,255,0.4),inset -1px 0 0 rgba(0,0,0,0.2)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{box-shadow:inset 0 1px 0 rgba(255,255,255,0.4),inset 0 -1px 0 rgba(0,0,0,0.2)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{background-color:#777}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerContainer{background-color:#fff;background-color:rgba(0,0,0,0.05);box-shadow:inset 1px 1px 16px rgba(0,0,0,0.1)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCSB_outside+.mCS-minimal.mCSB_scrollTools_vertical,.mCSB_outside+.mCS-minimal-dark.mCSB_scrollTools_vertical{right:0;margin:12px 0}.mCustomScrollBox.mCS-minimal+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox.mCS-minimal+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox.mCS-minimal-dark+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox.mCS-minimal-dark+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal{bottom:0;margin:0 12px}.mCS-dir-rtl>.mCSB_outside+.mCS-minimal.mCSB_scrollTools_vertical,.mCS-dir-rtl>.mCSB_outside+.mCS-minimal-dark.mCSB_scrollTools_vertical{left:0;right:auto}.mCS-minimal.mCSB_scrollTools .mCSB_draggerRail,.mCS-minimal-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent}.mCS-minimal.mCSB_scrollTools_vertical .mCSB_dragger,.mCS-minimal-dark.mCSB_scrollTools_vertical .mCSB_dragger{height:50px}.mCS-minimal.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-minimal-dark.mCSB_scrollTools_horizontal .mCSB_dragger{width:50px}.mCS-minimal.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,0.2);filter:"alpha(opacity=20)"}.mCS-minimal.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-minimal.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,0.5);filter:"alpha(opacity=50)"}.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,0.2);filter:"alpha(opacity=20)"}.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,0.5);filter:"alpha(opacity=50)"}.mCS-light-3.mCSB_scrollTools .mCSB_draggerRail,.mCS-dark-3.mCSB_scrollTools .mCSB_draggerRail{width:6px;background-color:#000;background-color:rgba(0,0,0,0.2)}.mCS-light-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-dark-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:6px}.mCS-light-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-dark-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-3.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-dark-3.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:6px;margin:5px 0}.mCS-light-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-dark-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-dark-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{width:12px}.mCS-light-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-dark-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-dark-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{height:12px;margin:2px 0}.mCS-light-3.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-light-3.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-light-3.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-light-3.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,0.75)}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,0.85)}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-dark-3.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,0.9)}.mCS-dark-3.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,0.1)}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCS-inset.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-2.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-3.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail{width:12px;background-color:#000;background-color:rgba(0,0,0,0.2)}.mCS-inset.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:6px;margin:3px 5px;position:absolute;height:auto;top:0;bottom:0;left:0;right:0}.mCS-inset.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-2-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{height:6px;margin:5px 3px;position:absolute;width:auto;top:0;bottom:0;left:0;right:0}.mCS-inset.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-2.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-2-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-3.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-3-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:12px;margin:2px 0}.mCS-inset.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-2.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-inset.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-2.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-inset.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-2.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-inset.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-2.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,0.75)}.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,0.85)}.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,0.9)}.mCS-inset-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,0.1)}.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCS-inset-2.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent;border-width:1px;border-style:solid;border-color:#fff;border-color:rgba(255,255,255,0.2);box-sizing:border-box}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail{border-color:#000;border-color:rgba(0,0,0,0.2)}.mCS-inset-3.mCSB_scrollTools .mCSB_draggerRail{background-color:#fff;background-color:rgba(255,255,255,0.6)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,0.6)}.mCS-inset-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,0.75)}.mCS-inset-3.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,0.85)}.mCS-inset-3.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-inset-3.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,0.9)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,0.75)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,0.85)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,0.9)}table.dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.dataTable thead th,table.dataTable tfoot th{font-weight:bold}table.dataTable thead th,table.dataTable thead td{padding:10px 18px;border-bottom:1px solid #3c3f41}table.dataTable thead th:active,table.dataTable thead td:active{outline:none}table.dataTable tfoot th,table.dataTable tfoot td{padding:10px 18px 6px 18px;border-top:1px solid #3c3f41}table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting{cursor:pointer;*cursor:hand}table.dataTable thead .sorting{background:url("../img/data-tables/sort_both.png") no-repeat center right}table.dataTable thead .sorting_asc{background:url("../img/data-tables/sort_asc.png") no-repeat center right}table.dataTable thead .sorting_desc{background:url("../img/data-tables/sort_desc.png") no-repeat center right}table.dataTable thead .sorting_asc_disabled{background:url("../img/data-tables/sort_asc_disabled.png") no-repeat center right}table.dataTable thead .sorting_desc_disabled{background:url("../img/data-tables/sort_desc_disabled.png") no-repeat center right}table.dataTable tbody tr{background-color:#212121}table.dataTable tbody tr.selected{background-color:#b0bed9}table.dataTable tbody th,table.dataTable tbody td{padding:8px 10px}table.dataTable.row-border tbody th,table.dataTable.row-border tbody td,table.dataTable.display tbody th,table.dataTable.display tbody td{border-top:1px solid #3c3f41}table.dataTable.row-border tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.display tbody tr:first-child td{border-top:none}table.dataTable.cell-border tbody th,table.dataTable.cell-border tbody td{border-top:1px solid #dddddd;border-right:1px solid #dddddd}table.dataTable.cell-border tbody tr th:first-child,table.dataTable.cell-border tbody tr td:first-child{border-left:1px solid #dddddd}table.dataTable.cell-border tbody tr:first-child th,table.dataTable.cell-border tbody tr:first-child td{border-top:none}table.dataTable.stripe tbody tr.odd,table.dataTable.display tbody tr.odd{background-color:#2b2b2b}table.dataTable.stripe tbody tr.odd.selected,table.dataTable.display tbody tr.odd.selected{background-color:#abb9d3}table.dataTable.hover tbody tr:hover,table.dataTable.hover tbody tr.odd:hover,table.dataTable.hover tbody tr.even:hover,table.dataTable.display tbody tr:hover,table.dataTable.display tbody tr.odd:hover,table.dataTable.display tbody tr.even:hover{background-color:#e28a0d;color:#2b2b2b}table.dataTable.hover tbody tr:hover a,table.dataTable.hover tbody tr.odd:hover a,table.dataTable.hover tbody tr.even:hover a,table.dataTable.display tbody tr:hover a,table.dataTable.display tbody tr.odd:hover a,table.dataTable.display tbody tr.even:hover a{color:#2b2b2b !important}table.dataTable.hover tbody tr:hover td>.btn,table.dataTable.hover tbody tr:hover td>button.DTTT_button,table.dataTable.hover tbody tr:hover td>div.DTTT_button,table.dataTable.hover tbody tr:hover td>a.DTTT_button,table.dataTable.hover tbody tr.odd:hover td>.btn,table.dataTable.hover tbody tr.odd:hover td>button.DTTT_button,table.dataTable.hover tbody tr.odd:hover td>div.DTTT_button,table.dataTable.hover tbody tr.odd:hover td>a.DTTT_button,table.dataTable.hover tbody tr.even:hover td>.btn,table.dataTable.hover tbody tr.even:hover td>button.DTTT_button,table.dataTable.hover tbody tr.even:hover td>div.DTTT_button,table.dataTable.hover tbody tr.even:hover td>a.DTTT_button,table.dataTable.display tbody tr:hover td>.btn,table.dataTable.display tbody tr:hover td>button.DTTT_button,table.dataTable.display tbody tr:hover td>div.DTTT_button,table.dataTable.display tbody tr:hover td>a.DTTT_button,table.dataTable.display tbody tr.odd:hover td>.btn,table.dataTable.display tbody tr.odd:hover td>button.DTTT_button,table.dataTable.display tbody tr.odd:hover td>div.DTTT_button,table.dataTable.display tbody tr.odd:hover td>a.DTTT_button,table.dataTable.display tbody tr.even:hover td>.btn,table.dataTable.display tbody tr.even:hover td>button.DTTT_button,table.dataTable.display tbody tr.even:hover td>div.DTTT_button,table.dataTable.display tbody tr.even:hover td>a.DTTT_button{color:#eaeaea !important}table.dataTable.hover tbody tr:hover.selected,table.dataTable.hover tbody tr.odd:hover.selected,table.dataTable.hover tbody tr.even:hover.selected,table.dataTable.display tbody tr:hover.selected,table.dataTable.display tbody tr.odd:hover.selected,table.dataTable.display tbody tr.even:hover.selected{background-color:#a9b7d1}table.dataTable.order-column tbody tr>.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3,table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3{background-color:#f9f9f9}table.dataTable.order-column tbody tr.selected>.sorting_1,table.dataTable.order-column tbody tr.selected>.sorting_2,table.dataTable.order-column tbody tr.selected>.sorting_3,table.dataTable.display tbody tr.selected>.sorting_1,table.dataTable.display tbody tr.selected>.sorting_2,table.dataTable.display tbody tr.selected>.sorting_3{background-color:#acbad4}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#212C30}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:whitesmoke}table.dataTable.display tbody tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1{background-color:#a6b3cd}table.dataTable.display tbody tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2{background-color:#a7b5ce}table.dataTable.display tbody tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3{background-color:#a9b6d0}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#212C30}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fbfbfb}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fdfdfd}table.dataTable.display tbody tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1{background-color:#acbad4}table.dataTable.display tbody tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2{background-color:#adbbd6}table.dataTable.display tbody tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.display tbody tr.odd:hover>.sorting_1,table.dataTable.display tbody tr.even:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr.odd:hover>.sorting_1,table.dataTable.order-column.hover tbody tr.even:hover>.sorting_1{background-color:#c2760c}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.display tbody tr.odd:hover>.sorting_2,table.dataTable.display tbody tr.even:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr.odd:hover>.sorting_2,table.dataTable.order-column.hover tbody tr.even:hover>.sorting_2{background-color:#ebebeb}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.display tbody tr.odd:hover>.sorting_3,table.dataTable.display tbody tr.even:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr.odd:hover>.sorting_3,table.dataTable.order-column.hover tbody tr.even:hover>.sorting_3{background-color:#eeeeee}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.display tbody tr.odd:hover.selected>.sorting_1,table.dataTable.display tbody tr.even:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr.odd:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr.even:hover.selected>.sorting_1{background-color:#a1aec7}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.display tbody tr.odd:hover.selected>.sorting_2,table.dataTable.display tbody tr.even:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr.odd:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr.even:hover.selected>.sorting_2{background-color:#a2afc8}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.display tbody tr.odd:hover.selected>.sorting_3,table.dataTable.display tbody tr.even:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr.odd:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr.even:hover.selected>.sorting_3{background-color:#a4b2cb}table.dataTable.no-footer{border-bottom:1px solid #3c3f41}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable.compact thead th,table.dataTable.compact thead td{padding:5px 9px}table.dataTable.compact tfoot th,table.dataTable.compact tfoot td{padding:5px 9px 3px 9px}table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px 5px}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable th,table.dataTable td{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:0.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:0.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:0.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:0.3em 0.7em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;color:#333333 !important;border:1px solid transparent}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#adadad !important;border:none;background-color:#313335;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #313335), color-stop(100%, #2b2b2b));background:-webkit-linear-gradient(top, #313335 0%, #2b2b2b 100%);background:-moz-linear-gradient(top, #313335 0%, #2b2b2b 100%);background:-ms-linear-gradient(top, #313335 0%, #2b2b2b 100%);background:-o-linear-gradient(top, #313335 0%, #2b2b2b 100%);background:linear-gradient(to bottom, #313335 0%,#2b2b2b 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:#313335 !important;border:1px solid transparent;background-color:#c2760c;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #c2760c), color-stop(100%, #c2760c));background:-webkit-linear-gradient(top, #c2760c 0%, #c2760c 100%);background:-moz-linear-gradient(top, #c2760c 0%, #c2760c 100%);background:-ms-linear-gradient(top, #c2760c 0%, #c2760c 100%);background:-o-linear-gradient(top, #c2760c 0%, #c2760c 100%);background:linear-gradient(to bottom, #c2760c 0%,#c2760c 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#2b2b2b;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));background:-webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:linear-gradient(to bottom, #2b2b2b 0%,#0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:white;background:-webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0)));background:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:linear-gradient(to right, rgba(255,255,255,0) 0%,rgba(255,255,255,0.9) 25%,rgba(255,255,255,0.9) 75%,rgba(255,255,255,0) 100%)}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:#63676a}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111111}.dataTables_wrapper.no-footer div.dataTables_scrollHead table,.dataTables_wrapper.no-footer div.dataTables_scrollBody table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:0.5em}}@media screen and (max-width: 640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:0.5em}}div.DTTT_container{position:relative;float:right;margin-bottom:1em}@media screen and (max-width: 640px){div.DTTT_container{float:none !important;text-align:center}div.DTTT_container:after{visibility:hidden;display:block;content:"";clear:both;height:0}}button.DTTT_button,div.DTTT_button,a.DTTT_button{margin-left:10px;position:relative;display:inline-block}.DTTT_button embed{outline:none}button.DTTT_button_collection span{padding-right:17px;background:url(../images/collection.png) no-repeat center right}button.DTTT_button_collection:hover span{padding-right:17px;background:#f0f0f0 url(../images/collection_hover.png) no-repeat center right}table.DTTT_selectable tbody tr{cursor:pointer;*cursor:hand}table.dataTable tr.DTTT_selected.odd{background-color:#9FAFD1}table.dataTable tr.DTTT_selected.odd td.sorting_1{background-color:#9FAFD1}table.dataTable tr.DTTT_selected.odd td.sorting_2{background-color:#9FAFD1}table.dataTable tr.DTTT_selected.odd td.sorting_3{background-color:#9FAFD1}table.dataTable tr.DTTT_selected.even{background-color:#B0BED9}table.dataTable tr.DTTT_selected.even td.sorting_1{background-color:#B0BED9}table.dataTable tr.DTTT_selected.even td.sorting_2{background-color:#B0BED9}table.dataTable tr.DTTT_selected.even td.sorting_3{background-color:#B0BED9}div.DTTT_collection{width:150px;padding:8px 8px 4px 8px;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.4);background-color:#f3f3f3;background-color:rgba(255,255,255,0.3);overflow:hidden;z-index:2002;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;-webkit-box-shadow:3px 3px 5px rgba(0,0,0,0.3);-moz-box-shadow:3px 3px 5px rgba(0,0,0,0.3);-ms-box-shadow:3px 3px 5px rgba(0,0,0,0.3);-o-box-shadow:3px 3px 5px rgba(0,0,0,0.3);box-shadow:3px 3px 5px rgba(0,0,0,0.3)}div.DTTT_collection_background{background:transparent url(../images/background.png) repeat top left;z-index:2001}div.DTTT_collection button.DTTT_button,div.DTTT_collection div.DTTT_button,div.DTTT_collection a.DTTT_button{position:relative;left:0;right:0;display:block;float:none;margin-bottom:4px;-webkit-box-shadow:1px 1px 3px #999;-moz-box-shadow:1px 1px 3px #999;-ms-box-shadow:1px 1px 3px #999;-o-box-shadow:1px 1px 3px #999;box-shadow:1px 1px 3px #999}.DTTT_print_info{position:fixed;top:50%;left:50%;width:400px;height:150px;margin-left:-200px;margin-top:-75px;text-align:center;color:#333;padding:10px 30px;background:#ffffff;background:-webkit-linear-gradient(top, #fff 0%, #f3f3f3 89%, #f9f9f9 100%);background:-moz-linear-gradient(top, #fff 0%, #f3f3f3 89%, #f9f9f9 100%);background:-ms-linear-gradient(top, #fff 0%, #f3f3f3 89%, #f9f9f9 100%);background:-o-linear-gradient(top, #fff 0%, #f3f3f3 89%, #f9f9f9 100%);background:linear-gradient(to bottom, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#f9f9f9',GradientType=0 );opacity:0.95;border:1px solid black;border:1px solid rgba(0,0,0,0.5);-webkit-border-radius:6px;-moz-border-radius:6px;-ms-border-radius:6px;-o-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.5);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.5);-ms-box-shadow:0 3px 7px rgba(0,0,0,0.5);-o-box-shadow:0 3px 7px rgba(0,0,0,0.5);box-shadow:0 3px 7px rgba(0,0,0,0.5)}.DTTT_print_info h6{font-weight:normal;font-size:28px;line-height:28px;margin:1em}.DTTT_print_info p{font-size:14px;line-height:20px}/*!
@@ -24,7 +24,7 @@
*/table.dataTable thead th{position:relative;background-image:none !important}table.dataTable thead th.sorting:after,table.dataTable thead th.sorting_asc:after,table.dataTable thead th.sorting_desc:after{position:absolute;top:12px;right:8px;display:block;font-family:FontAwesome;margin-top:-5px}table.dataTable thead th:after{color:#568a89}table.dataTable thead th.sorting:after{content:"\f0dc";color:#5cb85c;font-size:0.8em;margin-top:-5px}table.dataTable thead th.sorting_asc:after{content:"\f0de"}table.dataTable thead th.sorting_desc:after{content:"\f0dd"}div.dataTables_scrollBody table.dataTable thead th.sorting:after,div.dataTables_scrollBody table.dataTable thead th.sorting_asc:after,div.dataTables_scrollBody table.dataTable thead th.sorting_desc:after{content:""}table.table thead th.sorting:after,table.table thead th.sorting_asc:after,table.table thead th.sorting_desc:after{top:8px}div.dataTables_paginate a.paginate_button.first,div.dataTables_paginate a.paginate_button.previous{position:relative;padding-left:24px}div.dataTables_paginate a.paginate_button.next,div.dataTables_paginate a.paginate_button.last{position:relative;padding-right:24px}div.dataTables_paginate a.first:before,div.dataTables_paginate a.previous:before{position:absolute;top:4px;left:10px;display:block;font-family:FontAwesome}div.dataTables_paginate a.next:after,div.dataTables_paginate a.last:after{position:absolute;top:4px;right:10px;display:block;font-family:FontAwesome}div.dataTables_paginate a.first:before{content:"\f100"}div.dataTables_paginate a.previous:before{content:"\f104"}div.dataTables_paginate a.next:after{content:"\f105"}div.dataTables_paginate a.last:after{content:"\f101"}div.dataTables_paginate li.first>a,div.dataTables_paginate li.previous>a{position:relative;padding-left:24px}div.dataTables_paginate li.next>a,div.dataTables_paginate li.last>a{position:relative;padding-right:24px}div.dataTables_paginate li.first a:before,div.dataTables_paginate li.previous a:before{position:absolute;top:6px;left:10px;display:block;font-family:FontAwesome}div.dataTables_paginate li.next a:after,div.dataTables_paginate li.last a:after{position:absolute;top:6px;right:10px;display:block;font-family:FontAwesome}div.dataTables_paginate li.first a:before{content:"\f100"}div.dataTables_paginate li.previous a:before{content:"\f104"}div.dataTables_paginate li.next a:after{content:"\f105"}div.dataTables_paginate li.last a:after{content:"\f101"}div.columns div.dataTables_paginate li.first a:before,div.columns div.dataTables_paginate li.previous a:before,div.columns div.dataTables_paginate li.next a:after,div.columns div.dataTables_paginate li.last a:after{top:0}/*! X-editable - v1.5.0
* In-place editing with Twitter Bootstrap, jQuery UI or pure jQuery
* http://github.com/vitalets/x-editable
-* Copyright (c) 2013 Vitaliy Potapov; Licensed MIT */.editableform{margin-bottom:0}.editableform .control-group{margin-bottom:0;white-space:nowrap;line-height:20px}.editable-buttons{display:inline-block;vertical-align:top;margin-left:7px;zoom:1;*display:inline}.editable-buttons.editable-buttons-bottom{display:block;margin-top:7px;margin-left:0}.editable-input{vertical-align:top;display:inline-block;width:auto;white-space:normal;zoom:1;*display:inline}.editable-buttons .editable-cancel{margin-left:7px}.editable-buttons button.ui-button-icon-only{height:24px;width:30px}.editableform-loading{height:25px;width:auto;min-width:25px}.editable-inline .editableform-loading{background-position:left 5px}.editable-error-block{max-width:300px;margin:5px 0 0 0;width:auto;white-space:normal}.editable-error-block.ui-state-error{padding:3px}.editable-error{color:red}.editableform .editable-date{padding:0;margin:0;float:left}.editable-inline .add-on .icon-th{margin-top:3px;margin-left:1px}.editable-checklist label input[type="checkbox"],.editable-checklist label span{vertical-align:middle;margin:0}.editable-checklist label{white-space:nowrap}.editable-wysihtml5{width:566px;height:250px}.editable-clear{clear:both;font-size:0.9em;text-decoration:none;text-align:right}.editable-clear-x{display:block;width:13px;height:13px;position:absolute;opacity:0.6;z-index:100;top:50%;right:6px;margin-top:-6px}.editable-clear-x:hover{opacity:1}.editable-pre-wrapped{white-space:pre-wrap}.editable-container.editable-popup{max-width:none !important}.editable-container.popover{width:auto}.editable-container.editable-inline{display:inline-block;vertical-align:middle;width:auto;zoom:1;*display:inline}.editable-container.ui-widget{font-size:inherit;z-index:9990}.editable-click,a.editable-click,a.editable-click:hover{text-decoration:none;border-bottom:dashed 1px #568a89}.editable-click.editable-disabled,a.editable-click.editable-disabled,a.editable-click.editable-disabled:hover{color:#585858;cursor:default;border-bottom:none}.editable-empty,.editable-empty:hover,.editable-empty:focus{font-style:italic;color:#d9534f;text-decoration:none}.editable-unsaved{font-weight:bold}.editable-bg-transition{-webkit-transition:background-color 1400ms ease-out;-moz-transition:background-color 1400ms ease-out;-o-transition:background-color 1400ms ease-out;-ms-transition:background-color 1400ms ease-out;transition:background-color 1400ms ease-out}.form-horizontal .editable{padding-top:5px;display:inline-block}/*!
+* Copyright (c) 2013 Vitaliy Potapov; Licensed MIT */.editableform{margin-bottom:0}.editableform .form-group{margin-left:0 !important}.editableform .control-group{margin-bottom:0;white-space:nowrap;line-height:20px}.editable-buttons{display:inline-block;vertical-align:top;margin-left:7px;zoom:1;*display:inline}.editable-buttons.editable-buttons-bottom{display:block;margin-top:7px;margin-left:0}.editable-input{vertical-align:top;display:inline-block;width:auto;white-space:normal;zoom:1;*display:inline}.editable-buttons .editable-cancel{margin-left:7px}.editable-buttons button.ui-button-icon-only{height:24px;width:30px}.editableform-loading{height:25px;width:auto;min-width:25px}.editable-inline .editableform-loading{background-position:left 5px}.editable-error-block{max-width:300px;margin:5px 0 0 0;width:auto;white-space:normal}.editable-error-block.ui-state-error{padding:3px}.editable-error{color:red}.editableform .editable-date{padding:0;margin:0;float:left}.editable-inline .add-on .icon-th{margin-top:3px;margin-left:1px}.editable-checklist label input[type="checkbox"],.editable-checklist label span{vertical-align:middle;margin:0}.editable-checklist label{white-space:nowrap}.editable-wysihtml5{width:566px;height:250px}.editable-clear{clear:both;font-size:0.9em;text-decoration:none;text-align:right}.editable-clear-x{display:block;width:13px;height:13px;position:absolute;opacity:0.6;z-index:100;top:50%;right:6px;margin-top:-6px}.editable-clear-x:hover{opacity:1}.editable-pre-wrapped{white-space:pre-wrap}.editable-container.editable-popup{max-width:none !important}.editable-container.popover{width:auto}.editable-container.editable-inline{display:inline-block;vertical-align:middle;width:auto;zoom:1;*display:inline}.editable-container.ui-widget{font-size:inherit;z-index:9990}.editable-click,a.editable-click,a.editable-click:hover{text-decoration:none;border-bottom:dashed 1px #568a89}.editable-click.editable-disabled,a.editable-click.editable-disabled,a.editable-click.editable-disabled:hover{color:#585858;cursor:default;border-bottom:none}.editable-empty,.editable-empty:hover,.editable-empty:focus{font-style:italic;color:#d9534f;text-decoration:none}.editable-unsaved{font-weight:bold}.editable-bg-transition{-webkit-transition:background-color 1400ms ease-out;-moz-transition:background-color 1400ms ease-out;-o-transition:background-color 1400ms ease-out;-ms-transition:background-color 1400ms ease-out;transition:background-color 1400ms ease-out}.form-horizontal .editable{padding-top:5px;display:inline-block}/*!
* Datepicker for Bootstrap
*
* Copyright 2012 Stefan Petre
@@ -32,4 +32,4 @@
* Licensed under the Apache License v2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
- */.datepicker{padding:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;direction:ltr}.datepicker-inline{width:220px}.datepicker.datepicker-rtl{direction:rtl}.datepicker.datepicker-rtl table tr td span{float:right}.datepicker-dropdown{top:0;left:0}.datepicker-dropdown: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:6px}.datepicker-dropdown:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:7px}.datepicker>div{display:none}.datepicker.days div.datepicker-days{display:block}.datepicker.months div.datepicker-months{display:block}.datepicker.years div.datepicker-years{display:block}.datepicker table{margin:0}.datepicker td,.datepicker th{text-align:center;width:20px;height:20px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border:none}.table-striped .datepicker table tr td,.table-striped .datepicker table tr th{background-color:transparent}.datepicker table tr td.day:hover{background:#eeeeee;cursor:pointer}.datepicker table tr td.old,.datepicker table tr td.new{color:#999999}.datepicker table tr td.disabled,.datepicker table tr td.disabled:hover{background:none;color:#999999;cursor:default}.datepicker table tr td.today,.datepicker table tr td.today:hover,.datepicker table tr td.today.disabled,.datepicker table tr td.today.disabled:hover{background-color:#fde19a;background-image:-moz-linear-gradient(top, #fdd49a, #fdf59a);background-image:-ms-linear-gradient(top, #fdd49a, #fdf59a);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a));background-image:-webkit-linear-gradient(top, #fdd49a, #fdf59a);background-image:-o-linear-gradient(top, #fdd49a, #fdf59a);background-image:linear-gradient(to bottom, #fdd49a,#fdf59a);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0);border-color:#fdf59a #fdf59a #fbed50;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#000}.datepicker table tr td.today:hover,.datepicker table tr td.today:hover:hover,.datepicker table tr td.today.disabled:hover,.datepicker table tr td.today.disabled:hover:hover,.datepicker table tr td.today:active,.datepicker table tr td.today:hover:active,.datepicker table tr td.today.disabled:active,.datepicker table tr td.today.disabled:hover:active,.datepicker table tr td.today.active,.datepicker table tr td.today:hover.active,.datepicker table tr td.today.disabled.active,.datepicker table tr td.today.disabled:hover.active,.datepicker table tr td.today.disabled,.datepicker table tr td.today:hover.disabled,.datepicker table tr td.today.disabled.disabled,.datepicker table tr td.today.disabled:hover.disabled,.datepicker table tr td.today[disabled],.datepicker table tr td.today:hover[disabled],.datepicker table tr td.today.disabled[disabled],.datepicker table tr td.today.disabled:hover[disabled]{background-color:#fdf59a}.datepicker table tr td.today:active,.datepicker table tr td.today:hover:active,.datepicker table tr td.today.disabled:active,.datepicker table tr td.today.disabled:hover:active,.datepicker table tr td.today.active,.datepicker table tr td.today:hover.active,.datepicker table tr td.today.disabled.active,.datepicker table tr td.today.disabled:hover.active{background-color:#fbf069 \9}.datepicker table tr td.today:hover:hover{color:#000}.datepicker table tr td.today.active:hover{color:#fff}.datepicker table tr td.range,.datepicker table tr td.range:hover,.datepicker table tr td.range.disabled,.datepicker table tr td.range.disabled:hover{background:#eeeeee;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.datepicker table tr td.range.today,.datepicker table tr td.range.today:hover,.datepicker table tr td.range.today.disabled,.datepicker table tr td.range.today.disabled:hover{background-color:#f3d17a;background-image:-moz-linear-gradient(top, #f3c17a, #f3e97a);background-image:-ms-linear-gradient(top, #f3c17a, #f3e97a);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f3c17a), to(#f3e97a));background-image:-webkit-linear-gradient(top, #f3c17a, #f3e97a);background-image:-o-linear-gradient(top, #f3c17a, #f3e97a);background-image:linear-gradient(to bottom, #f3c17a,#f3e97a);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3c17a', endColorstr='#f3e97a', GradientType=0);border-color:#f3e97a #f3e97a #edde34;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.datepicker table tr td.range.today:hover,.datepicker table tr td.range.today:hover:hover,.datepicker table tr td.range.today.disabled:hover,.datepicker table tr td.range.today.disabled:hover:hover,.datepicker table tr td.range.today:active,.datepicker table tr td.range.today:hover:active,.datepicker table tr td.range.today.disabled:active,.datepicker table tr td.range.today.disabled:hover:active,.datepicker table tr td.range.today.active,.datepicker table tr td.range.today:hover.active,.datepicker table tr td.range.today.disabled.active,.datepicker table tr td.range.today.disabled:hover.active,.datepicker table tr td.range.today.disabled,.datepicker table tr td.range.today:hover.disabled,.datepicker table tr td.range.today.disabled.disabled,.datepicker table tr td.range.today.disabled:hover.disabled,.datepicker table tr td.range.today[disabled],.datepicker table tr td.range.today:hover[disabled],.datepicker table tr td.range.today.disabled[disabled],.datepicker table tr td.range.today.disabled:hover[disabled]{background-color:#f3e97a}.datepicker table tr td.range.today:active,.datepicker table tr td.range.today:hover:active,.datepicker table tr td.range.today.disabled:active,.datepicker table tr td.range.today.disabled:hover:active,.datepicker table tr td.range.today.active,.datepicker table tr td.range.today:hover.active,.datepicker table tr td.range.today.disabled.active,.datepicker table tr td.range.today.disabled:hover.active{background-color:#efe24b \9}.datepicker table tr td.selected,.datepicker table tr td.selected:hover,.datepicker table tr td.selected.disabled,.datepicker table tr td.selected.disabled:hover{background-color:#9e9e9e;background-image:-moz-linear-gradient(top, #b3b3b3, gray);background-image:-ms-linear-gradient(top, #b3b3b3, gray);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#b3b3b3), to(gray));background-image:-webkit-linear-gradient(top, #b3b3b3, gray);background-image:-o-linear-gradient(top, #b3b3b3, gray);background-image:linear-gradient(to bottom, #b3b3b3,#808080);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b3b3b3', endColorstr='#808080', GradientType=0);border-color:#808080 #808080 #595959;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.datepicker table tr td.selected:hover,.datepicker table tr td.selected:hover:hover,.datepicker table tr td.selected.disabled:hover,.datepicker table tr td.selected.disabled:hover:hover,.datepicker table tr td.selected:active,.datepicker table tr td.selected:hover:active,.datepicker table tr td.selected.disabled:active,.datepicker table tr td.selected.disabled:hover:active,.datepicker table tr td.selected.active,.datepicker table tr td.selected:hover.active,.datepicker table tr td.selected.disabled.active,.datepicker table tr td.selected.disabled:hover.active,.datepicker table tr td.selected.disabled,.datepicker table tr td.selected:hover.disabled,.datepicker table tr td.selected.disabled.disabled,.datepicker table tr td.selected.disabled:hover.disabled,.datepicker table tr td.selected[disabled],.datepicker table tr td.selected:hover[disabled],.datepicker table tr td.selected.disabled[disabled],.datepicker table tr td.selected.disabled:hover[disabled]{background-color:#808080}.datepicker table tr td.selected:active,.datepicker table tr td.selected:hover:active,.datepicker table tr td.selected.disabled:active,.datepicker table tr td.selected.disabled:hover:active,.datepicker table tr td.selected.active,.datepicker table tr td.selected:hover.active,.datepicker table tr td.selected.disabled.active,.datepicker table tr td.selected.disabled:hover.active{background-color:#666666 \9}.datepicker table tr td.active,.datepicker table tr td.active:hover,.datepicker table tr td.active.disabled,.datepicker table tr td.active.disabled:hover{background-color:#006dcc;background-image:-moz-linear-gradient(top, #08c, #04c);background-image:-ms-linear-gradient(top, #08c, #04c);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#04c));background-image:-webkit-linear-gradient(top, #08c, #04c);background-image:-o-linear-gradient(top, #08c, #04c);background-image:linear-gradient(to bottom, #0088cc,#0044cc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);border-color:#0044cc #0044cc #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.datepicker table tr td.active:hover,.datepicker table tr td.active:hover:hover,.datepicker table tr td.active.disabled:hover,.datepicker table tr td.active.disabled:hover:hover,.datepicker table tr td.active:active,.datepicker table tr td.active:hover:active,.datepicker table tr td.active.disabled:active,.datepicker table tr td.active.disabled:hover:active,.datepicker table tr td.active.active,.datepicker table tr td.active:hover.active,.datepicker table tr td.active.disabled.active,.datepicker table tr td.active.disabled:hover.active,.datepicker table tr td.active.disabled,.datepicker table tr td.active:hover.disabled,.datepicker table tr td.active.disabled.disabled,.datepicker table tr td.active.disabled:hover.disabled,.datepicker table tr td.active[disabled],.datepicker table tr td.active:hover[disabled],.datepicker table tr td.active.disabled[disabled],.datepicker table tr td.active.disabled:hover[disabled]{background-color:#0044cc}.datepicker table tr td.active:active,.datepicker table tr td.active:hover:active,.datepicker table tr td.active.disabled:active,.datepicker table tr td.active.disabled:hover:active,.datepicker table tr td.active.active,.datepicker table tr td.active:hover.active,.datepicker table tr td.active.disabled.active,.datepicker table tr td.active.disabled:hover.active{background-color:#003399 \9}.datepicker table tr td span{display:block;width:23%;height:54px;line-height:54px;float:left;margin:1%;cursor:pointer;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.datepicker table tr td span:hover{background:#eeeeee}.datepicker table tr td span.disabled,.datepicker table tr td span.disabled:hover{background:none;color:#999999;cursor:default}.datepicker table tr td span.active,.datepicker table tr td span.active:hover,.datepicker table tr td span.active.disabled,.datepicker table tr td span.active.disabled:hover{background-color:#006dcc;background-image:-moz-linear-gradient(top, #08c, #04c);background-image:-ms-linear-gradient(top, #08c, #04c);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#04c));background-image:-webkit-linear-gradient(top, #08c, #04c);background-image:-o-linear-gradient(top, #08c, #04c);background-image:linear-gradient(to bottom, #0088cc,#0044cc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);border-color:#0044cc #0044cc #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.datepicker table tr td span.active:hover,.datepicker table tr td span.active:hover:hover,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active.disabled:hover:hover,.datepicker table tr td span.active:active,.datepicker table tr td span.active:hover:active,.datepicker table tr td span.active.disabled:active,.datepicker table tr td span.active.disabled:hover:active,.datepicker table tr td span.active.active,.datepicker table tr td span.active:hover.active,.datepicker table tr td span.active.disabled.active,.datepicker table tr td span.active.disabled:hover.active,.datepicker table tr td span.active.disabled,.datepicker table tr td span.active:hover.disabled,.datepicker table tr td span.active.disabled.disabled,.datepicker table tr td span.active.disabled:hover.disabled,.datepicker table tr td span.active[disabled],.datepicker table tr td span.active:hover[disabled],.datepicker table tr td span.active.disabled[disabled],.datepicker table tr td span.active.disabled:hover[disabled]{background-color:#0044cc}.datepicker table tr td span.active:active,.datepicker table tr td span.active:hover:active,.datepicker table tr td span.active.disabled:active,.datepicker table tr td span.active.disabled:hover:active,.datepicker table tr td span.active.active,.datepicker table tr td span.active:hover.active,.datepicker table tr td span.active.disabled.active,.datepicker table tr td span.active.disabled:hover.active{background-color:#003399 \9}.datepicker table tr td span.old,.datepicker table tr td span.new{color:#999999}.datepicker th.datepicker-switch{width:145px}.datepicker thead tr:first-child th,.datepicker tfoot tr th{cursor:pointer}.datepicker thead tr:first-child th:hover,.datepicker tfoot tr th:hover{background:#eeeeee}.datepicker .cw{font-size:10px;width:12px;padding:0 2px 0 5px;vertical-align:middle}.datepicker thead tr:first-child th.cw{cursor:default;background-color:transparent}.input-append.date .add-on i,.input-prepend.date .add-on i{display:block;cursor:pointer;width:16px;height:16px}.input-daterange input{text-align:center}.input-daterange input:first-child{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-daterange input:last-child{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-daterange .add-on{display:inline-block;width:auto;min-width:16px;height:18px;padding:4px 5px;font-weight:normal;line-height:18px;text-align:center;text-shadow:0 1px 0 #ffffff;vertical-align:middle;background-color:#eeeeee;border:1px solid #ccc;margin-left:-5px;margin-right:-5px}.ui-pnotify{top:25px;right:25px;position:absolute;height:auto;z-index:9999}html>body>.ui-pnotify{position:fixed}.ui-pnotify .ui-pnotify-shadow{-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0px 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.ui-pnotify-container{background-position:0 0;padding:.8em;height:100%;margin:0}.ui-pnotify-sharp{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.ui-pnotify-title{display:block;margin-bottom:.4em;margin-top:0}.ui-pnotify-text{display:block;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}.ui-pnotify-icon,.ui-pnotify-icon span{display:block;float:left;margin-right:.2em}.ui-pnotify.stack-topleft,.ui-pnotify.stack-bottomleft{left:25px;right:auto}.ui-pnotify.stack-bottomright,.ui-pnotify.stack-bottomleft{bottom:25px;top:auto}.ui-pnotify.stack-bar-top{right:0;top:0}.ui-pnotify.stack-bar-bottom{right:auto;bottom:0;top:auto;left:auto}html,body,#sb-site,.sb-site-container,.sb-slidebar{margin:0;padding:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html,body{width:100%;overflow-x:hidden}html{height:100%}body{min-height:100%;height:auto;position:relative}html.sb-scroll-lock.sb-active:not(.sb-static){overflow:hidden}#sb-site,.sb-site-container{width:100%;position:relative;z-index:1;background:url("../img/pf-bg.jpg") #05050a;background-repeat:no-repeat}.sb-slidebar{height:100%;overflow-y:auto;position:fixed;top:0;z-index:0;display:none;background-color:#313335;-webkit-transform:translate(0px)}.sb-left{left:0;-webkit-box-shadow:inset -5px 0px 10px 0px rgba(0,0,0,0.4);box-shadow:inset -5px 0px 10px 0px rgba(0,0,0,0.4)}.sb-right{right:0;-webkit-box-shadow:inset 5px 0px 10px 0px rgba(0,0,0,0.4);box-shadow:inset 5px 0px 10px 0px rgba(0,0,0,0.4)}html.sb-static .sb-slidebar,.sb-slidebar.sb-static{position:absolute}.sb-slidebar.sb-active{display:block}.sb-style-overlay{z-index:9999}.sb-momentum-scrolling{-webkit-overflow-scrolling:touch}.sb-slidebar{width:30%}.sb-width-thin{width:15%}.sb-width-wide{width:45%}@media (max-width: 480px){.sb-slidebar{width:70%}.sb-width-thin{width:55%}.sb-width-wide{width:85%}}@media (min-width: 481px){.sb-slidebar{width:55%}.sb-width-thin{width:40%}.sb-width-wide{width:70%}}@media (min-width: 768px){.sb-slidebar{width:40%}.sb-width-thin{width:25%}.sb-width-wide{width:55%}}@media (min-width: 992px){.sb-slidebar{width:30%}.sb-width-thin{width:15%}.sb-width-wide{width:45%}}@media (min-width: 1200px){.sb-slidebar{width:20%}.sb-width-thin{width:5%}.sb-width-wide{width:35%}}.sb-slide,#sb-site,.sb-site-container,.sb-slidebar{-webkit-transition:-webkit-transform 400ms ease;-moz-transition:-moz-transform 400ms ease;-o-transition:-o-transform 400ms ease;transition:transform 400ms ease;-webkit-transition-property:-webkit-transform, left, right;-webkit-backface-visibility:hidden}.sb-hide{display:none}.pf-pie-chart{position:relative;display:table-cell;text-align:center;vertical-align:middle}.pf-pie-chart span{display:inline-block}.pf-pie-chart canvas{position:absolute;top:0;left:0}.pf-pie-chart-map-timer{width:36px;height:36px;margin:3px}.pf-pie-chart-map-timer canvas{top:3px;left:3px}.pf-pie-chart-map-timer span{font-size:10px}.pf-pie-chart-map-timer span:after{content:'s';margin-left:1px}div.pf-map-drag-to-select{background:#375959;display:none;opacity:0.3;z-index:9000;border:1px dashed #adadad;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}div.pf-map-drag-to-select.active{display:block}.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;overflow:hidden;padding-left:8px;padding-right:20px;text-overflow:ellipsis}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{border:none;font-size:100%;margin-top:5px}.select2-dropdown{background-color:#313335;border:1px solid #63676a;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1500;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.3);box-shadow:0 6px 12px rgba(0,0,0,0.3)}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:10px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0;border-color:#568a89}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-container--default .select2-selection--single{background-color:#313335;border:1px solid #63676a;border-radius:0px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#adadad;line-height:28px;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;color:#a52521}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#63676a}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:#313335;border:1px solid #63676a;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#63676a;margin-top:5px;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#adadad;color:#2b2b2b;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#a52521;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0;-webkit-transition:border-color 0.3s ease-out;transition:border-color 0.3s ease-out;border-color:#568a89}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #63676a}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#375959;color:#eaeaea}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#adadad;color:#2b2b2b}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#313335;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #ffffff 50%,#eeeeee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff', endColorstr='#eee', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #adadad}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#63676a}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eeeeee 50%,#cccccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eee', endColorstr='#ccc', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #adadad}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #ffffff 0%,#eeeeee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff', endColorstr='#eee', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eeeeee 50%,#ffffff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eee', endColorstr='#fff', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #adadad}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#adadad;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #adadad}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#2b2b2b}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#adadad}html{margin:0;padding:0;height:100%;position:relative}body{margin:0;padding:0;min-height:100%;direction:ltr}body.mobile-view-activated.hidden-menu{overflow-x:hidden}body.modal-open{overflow:hidden !important}a:hover,a:active,a:focus,button,button:active,button:focus,object,embed,input::-moz-focus-inner{outline:0}h1,h3,h4{margin:0;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}.page-title{margin:12px 0 28px}.page-title span{font-size:15px;color:#313335;display:inline-block;vertical-align:1px}label{font-weight:normal}*:focus{outline:0 !important}a,input,button{-ms-touch-action:none !important}textarea:focus,select: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{outline:0;outline:thin dotted \9;box-shadow:inset -1px 1px 6px 0 rgba(0,0,0,0.8) !important}.input-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn,.input-group-sm>.input-group-btn>button.DTTT_button,.input-group-sm>.input-group-btn>div.DTTT_button,.input-group-sm>.input-group-btn>a.DTTT_button,.input-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn,.input-group-lg>.input-group-btn>button.DTTT_button,.input-group-lg>.input-group-btn>div.DTTT_button,.input-group-lg>.input-group-btn>a.DTTT_button,.input-xs,.form-control{border-radius:0px !important;-webkit-border-radius:0px !important;-moz-border-radius:0px !important}.input-xs{height:24px;padding:2px 10px;font-size:11px;line-height:1.5}.btn-xs,.btn-group-xs>.btn,.btn-group-xs>button.DTTT_button,.btn-group-xs>div.DTTT_button,.btn-group-xs>a.DTTT_button{padding:0px 2px;font-size:10px;line-height:1.3}.btn-sm,.btn-group-sm>.btn,.btn-group-sm>button.DTTT_button,.btn-group-sm>div.DTTT_button,.btn-group-sm>a.DTTT_button,button.DTTT_button,div.DTTT_button,a.DTTT_button{padding:6px 10px 5px}.btn-lg,.btn-group-lg>.btn,.btn-group-lg>button.DTTT_button,.btn-group-lg>div.DTTT_button,.btn-group-lg>a.DTTT_button{padding:10px 16px}.no-space{margin:0}.no-space>[class*="col-"]{margin:0 !important;padding-right:0;padding-left:0}h1{letter-spacing:-1px;font-size:22px;margin:10px 0}h1 small{font-size:12px;font-weight:300;letter-spacing:-1px}.lead{font-size:13px}h2{font-family:"Oxygen", "Open Sans", Arial, Helvetica, Sans-Serif;letter-spacing:0px;font-size:14px;margin:20px 0;line-height:normal}h3{display:block;font-size:17px;font-weight:400;margin:20px 0;line-height:normal}h4{line-height:normal;margin:20px 0 10px 0}h5{font-size:15px;font-weight:300;margin:10px 0;line-height:normal}h6{font-size:13px;margin:10px 0;font-weight:bold;line-height:normal}.row-seperator-header{margin:15px 14px 20px;border-bottom:none;display:block;color:#303133;font-size:20px;font-weight:400}.center-canvas,.center-child-canvas>canvas{display:block !important;margin:0 auto !important}.smart-accordion-default.panel-group{margin-bottom:0px}.smart-accordion-default.panel-group .panel+.panel{margin-top:-1px}.smart-accordion-default.panel-group .panel-heading{padding:0px}.smart-accordion-default.panel-group .panel-title a{display:block;padding:10px 15px;text-decoration:none !important}.smart-accordion-default .panel-heading,.panel-group .panel{border-radius:0px;-webkit-border-radius:0px;-moz-border-radius:0px}.smart-accordion-default .panel-default>.panel-heading{background-color:#f3f3f3}.smart-accordion-default .panel-default{border-color:#8d9194}.smart-accordion-default .panel-title>a>:first-child{display:none}.smart-accordion-default .panel-title>a.collapsed>.fa{display:none}.smart-accordion-default .panel-title>a.collapsed>:first-child{display:inline-block}.no-padding .smart-accordion-default>div{border-left:none !important;border-right:none !important}.no-padding .smart-accordion-default>div:first-child{border-top:none !important}.no-padding .smart-accordion-default>div:last-child{border-bottom:none !important}.onoffswitch-container{margin-top:4px;margin-left:7px;display:inline-block}.onoffswitch{position:relative;width:50px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;margin-top:3px;margin-bottom:3px;margin-left:5px;display:inline-block;vertical-align:middle}.onoffswitch-checkbox{display:none}.onoffswitch-label{display:block;overflow:hidden;cursor:pointer;border:1px solid #484c4e;border-radius:50px;border-color:#777b7f #7c8184 #686c6f;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.onoffswitch-inner{width:200%;margin-left:-100%;display:block}.onoffswitch-inner:before,.onoffswitch-inner:after{float:left;width:50%;height:15px;padding:0;line-height:15px;font-size:10px;color:#fff;font-family:Trebuchet, Arial, sans-serif;font-weight:bold;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.onoffswitch-inner:before{content:attr(data-swchon-text);text-shadow:0 -1px 0 #313335;padding-left:7px;background-color:#3276b1;color:#fff;box-shadow:inset 0 2px 6px rgba(0,0,0,0.5),0 1px 2px rgba(0,0,0,0.05);text-align:left}.onoffswitch-inner:after{content:attr(data-swchoff-text);padding-right:7px;text-shadow:0 -1px 0 #fff;background-color:#fff;color:#3c3f41;text-align:right;box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.onoffswitch-switch{width:19px;height:19px;margin:-2px;background:white;border:1px solid #64686b;border-radius:50px;position:absolute;top:0;bottom:0;right:32px;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;background-color:#eaeaea;background-image:-moz-linear-gradient(top, #fff, #adadad);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#adadad));background-image:-webkit-linear-gradient(top, #fff, #adadad);background-image:-o-linear-gradient(top, #fff, #adadad);background-image:linear-gradient(to bottom, #ffffff,#adadad);background-repeat:repeat-x;-webkit-box-shadow:1px 1px 4px 0px rgba(0,0,0,0.3);box-shadow:1px 1px 4px 0px rgba(0,0,0,0.3)}.onoffswitch-checkbox+.onoffswitch-label .onoffswitch-switch:before,.onoffswitch-checkbox:checked+.onoffswitch-label .onoffswitch-switch:before{content:"\f00d";color:#a52521;display:block;text-align:center;line-height:19px;font-size:10px;text-shadow:0 -1px 0 #fff;font-weight:bold;font-family:FontAwesome}.onoffswitch-checkbox:checked+.onoffswitch-label .onoffswitch-switch:before{content:"\f00c";color:#428bca}.onoffswitch-checkbox:checked+.onoffswitch-label .onoffswitch-inner{margin-left:0;display:block}.onoffswitch-checkbox:checked+.onoffswitch-label .onoffswitch-switch{right:0px}.onoffswitch-switch:hover{background-color:#adadad}.onoffswitch-switch:active{background-color:#adadad;box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.onoffswitch-checkbox:disabled+.onoffswitch-label .onoffswitch-inner:after,.onoffswitch-checkbox:checked:disabled+.onoffswitch-label .onoffswitch-inner:before{text-shadow:0 1px 0 #fff;background:#bfbfbf;color:#313335}.onoffswitch-checkbox:checked:disabled+.onoffswitch-label .onoffswitch-switch,.onoffswitch-checkbox:disabled+.onoffswitch-label .onoffswitch-switch{background-color:#eaeaea;background-image:-moz-linear-gradient(top, #bfbfbf, #eaeaea);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#bfbfbf), to(#eaeaea));background-image:-webkit-linear-gradient(top, #bfbfbf, #eaeaea);background-image:-o-linear-gradient(top, #bfbfbf, #eaeaea);background-image:linear-gradient(to bottom, #bfbfbf,#eaeaea);box-shadow:none !important}.onoffswitch-checkbox:disabled+.onoffswitch-label,.onoffswitch-checkbox:checked:disabled+.onoffswitch-label .onoffswitch-label{border-color:#74797c #63676a #525558 !important}.onoffswitch-checkbox:checked+.onoffswitch-label{border-color:#3276b1 #2a6395 #255681}.onoffswitch+span,.onoffswitch-title{display:inline-block;vertical-align:middle;margin-top:-5px}.form-control{box-shadow:none !important;-webkit-box-shadow:none !important;-moz-box-shadow:none !important}.form hr{margin-left:-13px;margin-right:-13px;border-color:rgba(0,0,0,0.1);margin-top:20px;margin-bottom:20px}.form fieldset{display:block;border:none;background:rgba(255,255,255,0.9);position:relative}fieldset{position:relative}.form-actions{display:block;padding:13px 14px 15px;border-top:1px solid rgba(0,0,0,0.1);background:rgba(239,239,239,0.9);margin-top:25px;margin-left:-13px;margin-right:-13px;margin-bottom:-13px;text-align:right}.well .form-actions{margin-left:-19px;margin-right:-19px;margin-bottom:-19px}.well.well-lg .form-actions{margin-left:-24px;margin-right:-24px;margin-bottom:-24px}.well.well-sm .form-actions{margin-left:-9px;margin-right:-9px;margin-bottom:-9px}.popover-content .form-actions{margin:0 -14px -9px;border-radius:0 0 3px 3px;padding:9px 14px}.no-padding .form .form-actions{margin:0;display:block;padding:13px 14px 15px;border-top:1px solid rgba(0,0,0,0.1);background:rgba(248,248,248,0.9);text-align:right;margin-top:25px}.form header,legend{display:block;padding:8px 0;border-bottom:1px dashed rgba(0,0,0,0.2);background:#fff;font-size:16px;font-weight:300;color:#2b2b2b;margin:25px 0px 20px}.no-padding .form header{margin:25px 14px 0}.form header:first-child{margin-top:10px}legend{font-weight:400;margin-top:0px;background:none}.input-group-addon{padding:6px 10px;border-radius:0;-moz-border-radius:0;-webkit-border-radius:0}.input-group-addon{transition:border-color 0.3s;-o-transition:border-color 0.3s;-ms-transition:border-color 0.3s;-moz-transition:border-color 0.3s;-webkit-transition:border-color 0.3s;transition:background-color 0.3s;-o-transition:background-color 0.3s;-ms-transition:background-color 0.3s;-moz-transition:background-color 0.3s;-webkit-transition:background-color 0.3s}.input-group-addon .fa{font-size:14px}.input-group-addon .fa-lg,.input-group-addon .fa-2x{font-size:2em}.input-group-addon .fa-3x,.input-group-addon .fa-4x,.input-group-addon .fa-5x{font-size:30px}input[type="text"]:focus+.input-group-addon{border-color:#0091d9;background-color:#666;color:#fff}.has-warning input[type="text"],.has-warning input[type="text"]+.input-group-addon{border-color:#e28a0d}.has-warning input[type="text"]+.input-group-addon{background-color:#fdedd8;color:#2b2b2b}.has-warning input[type="text"]:focus,.has-warning input[type="text"]:focus+.input-group-addon{border-color:#e28a0d}.has-warning input[type="text"]:focus+.input-group-addon{background-color:#f29717;color:#fff}.has-error .input-group-addon{border-color:#a52521;background:#f6d1d0;color:#2b2b2b}.has-error input[type="text"],.has-error input[type="text"]+.input-group-addon{border-color:#a52521}.has-error input[type="text"]+.input-group-addon{background-color:#f6d1d0;color:#2b2b2b}.has-error input[type="text"]:focus,.has-error input[type="text"]:focus+.input-group-addon{border-color:#d8403b}.has-error input[type="text"]:focus+.input-group-addon{background-color:#d8403b;color:#fff}.has-success input[type="text"]:focus+.input-group-addon{border-color:#4f9e4f;background-color:#4f9e4f;color:#fff}.form fieldset .form-group:last-child,.form fieldset .form-group:last-child .note,.form .form-group:last-child,.form .form-group:last-child .note{margin-bottom:0}.note{margin-top:6px;padding:0 1px;font-size:11px;line-height:15px;color:#63676a}.input-icon-right{position:relative}.input-icon-right>i,.input-icon-left>i{position:absolute;right:10px;top:30%;font-size:16px;color:#bfbfbf}.input-icon-left>i{right:auto;left:24px}.input-icon-right .form-control{padding-right:27px}.input-icon-left .form-control{padding-left:29px}input[type="text"].ui-autocomplete-loading,input[type="password"].ui-autocomplete-loading,input[type="datetime"].ui-autocomplete-loading,input[type="datetime-local"].ui-autocomplete-loading,input[type="date"].ui-autocomplete-loading,input[type="month"].ui-autocomplete-loading,input[type="time"].ui-autocomplete-loading,input[type="week"].ui-autocomplete-loading,input[type="number"].ui-autocomplete-loading,input[type="email"].ui-autocomplete-loading,input[type="url"].ui-autocomplete-loading,input[type="search"].ui-autocomplete-loading,input[type="tel"].ui-autocomplete-loading,input[type="color"].ui-autocomplete-loading{background-image:url("../img/select2-spinner.gif") !important;background-repeat:no-repeat;background-position:99% 50%;padding-right:27px}.input-group-addon .checkbox,.input-group-addon .radio{min-height:0px;margin-right:0px !important;padding-top:0}.input-group-addon label input[type="checkbox"].checkbox+span,.input-group-addon label input[type="radio"].radiobox+span,.input-group-addon label input[type="radio"].radiobox+span:before,.input-group-addon label input[type="checkbox"].checkbox+span:before{margin-right:0px}.input-group-addon .onoffswitch,.input-group-addon .onoffswitch-label{margin:0}.alert{margin-bottom:10px;margin-top:0px;padding:5px 15px 5px 34px;color:#675100;border-width:0px;border-left-width:3px;padding:10px}.alert .ui-pnotify-title{line-height:12px}.alert .ui-pnotify-text{font-size:10px}.alert .close{top:0px;right:-5px;line-height:20px}.alert-heading{font-weight:600}.alert-danger{border-color:#a52521;color:#2b2b2b;background:#f6d1d0;text-shadow:none}.alert-danger .ui-pnotify-icon{color:#a52521}.alert-warning{border-color:#e28a0d;color:#2b2b2b;background:#fef8f0}.alert-warning .ui-pnotify-icon{color:#e28a0d}.alert-success{border-color:#4f9e4f;color:#2b2b2b;background:#d1e8d1}.alert-success .ui-pnotify-icon{color:#4f9e4f}.alert-info{border-color:#316490;color:#2b2b2b;background:#abc9e2}.alert-info .ui-pnotify-icon{color:#316490}.progress-micro{height:3px !important;line-height:3px !important}.progress-xs{height:7px !important;line-height:7px !important}.progress-sm{height:14px !important;line-height:14px !important}.progress-lg{height:30px !important;line-height:30px !important}.progress .progress-bar{position:absolute;overflow:hidden;line-height:18px}.progress .progressbar-back-text{position:absolute;width:100%;height:100%;font-size:12px;line-height:20px;text-align:center}.progress .progressbar-front-text{display:block;width:100%;font-size:12px;line-height:20px;text-align:center}.progress.right .progress-bar{right:0}.progress.right .progressbar-front-text{position:absolute;right:0}.progress.vertical{width:25px;height:100%;min-height:150px;margin-right:20px;display:inline-block;margin-bottom:0px}.progress.wide-bar{width:40px}.progress.vertical.bottom{position:relative}.progress.vertical.bottom .progressbar-front-text{position:absolute;bottom:0}.progress.vertical .progress-bar{width:100%;height:0;-webkit-transition:height 0.6s ease;transition:height 0.6s ease}.progress.vertical.bottom .progress-bar{position:absolute;bottom: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}}@-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{position:relative;margin-bottom:20px;overflow:hidden;height:18px;background:#adadad;box-shadow:0 1px 0 transparent,0 0 0 1px #aeb1b3 inset;-webkit-box-shadow:0 1px 0 transparent,0 0 0 1px #aeb1b3 inset;-moz-box-shadow:0 1px 0 transparent,0 0 0 1px #aeb1b3 inset;border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px}.progress-bar{float:left;width:0;height:100%;font-size:11px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);font-weight:bold;text-shadow:0 -1px 0 rgba(0,0,0,0.25);-webkit-transition:width 1.5s ease-in-out;transition:width 1.5s ease-in-out}.progress-striped .progress-bar{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:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0));background-size:40px 40px}.progress.active .progress-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-bar-danger{background-color:#a52521}.progress-striped .progress-bar-danger{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:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0))}.progress-bar-success{background-color:#4f9e4f}.progress-striped .progress-bar-success{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:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0))}.progress-bar-warning{background-color:#e28a0d}.progress-striped .progress-bar-warning{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:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0))}.progress-bar-info{background-color:#316490}.progress-striped .progress-bar-info{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:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0))}.progress-info .bar,.progress .bar-info{background:#316490}.vertical-bars{padding:0;margin:0}.vertical-bars:after{content:"";display:block;height:0;clear:both}.vertical-bars li{padding:14px 0;width:25%;display:block;float:left;text-align:center}.vertical-bars li:first-child{border-left:none}.vertical-bars>li>.progress.vertical:first-child{margin-left:auto}.vertical-bars>li>.progress.vertical{margin:0 auto;float:none}.nav-tabs{border-bottom:none}.nav-tabs>li>a .badge{font-size:11px;padding:3px 5px 3px 5px;opacity:.5;margin-left:5px;min-width:17px;font-weight:normal}.tabs-left .nav-tabs>li>a .badge{margin-right:5px;margin-left:0px}.nav-tabs>li>a .label{display:inline-block;font-size:11px;margin-left:5px;opacity:.5}.nav-tabs>li>a{color:#adadad;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}.nav-tabs>li>a:hover{color:#1d1d1d;border-color:transparent transparent #adadad transparent;margin-top:1px;border-top-width:0}.nav-tabs>li.active>a{background-color:#adadad;color:#2b2b2b;border-top-width:0px !important;margin-top:1px !important;font-weight:bold}.tabs-left .nav-tabs>li.active>a{-webkit-box-shadow:-2px 0 0 #428bca;-moz-box-shadow:-2px 0 0 #428bca;box-shadow:-2px 0 0 #428bca;border-top-width:1px !important;border-left:none !important;margin-left:1px !important}.tabs-left .nav-pills>li.active>a{border:none !important;box-shadow:none !important;-webkit-box-shadow:none !important;-moz-box-shadow:none !important}.tabs-right .nav-tabs>li.active>a{-webkit-box-shadow:2px 0 0 #428bca;-moz-box-shadow:2px 0 0 #428bca;box-shadow:2px 0 0 #428bca;border-top-width:1px !important;border-right:none !important;margin-right:1px !important}.tabs-below .nav-tabs>li.active>a{-webkit-box-shadow:0 2px 0 #428bca;-moz-box-shadow:0 2px 0 #428bca;box-shadow:0 2px 0 #428bca;border-bottom-width:0px !important;border-top:none !important;margin-top:0px !important}.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 #9b9b9b}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li,.tabs-left>.nav-pills>li,.tabs-right>.nav-pills>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a,.tabs-left>.nav-pills>li>a,.tabs-right>.nav-pills>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs,.tabs-left>.nav-pills{float:left;margin-right:19px;border-right:1px solid #9b9b9b}.tabs-left>.nav-pills{border-right:none}.tabs-left>.nav-tabs>li>a{margin-right:-1px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#adadad #949494 #adadad #adadad}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#949494 transparent #949494 #9b9b9b;*border-right-color:#fff}.tabs-left>.tab-content{margin-left:109px}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #9b9b9b}.tabs-right>.nav-tabs>li>a{margin-left:-1px}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#adadad #adadad #adadad #9b9b9b}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#9b9b9b #9b9b9b #9b9b9b transparent;*border-left-color:#fff}.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 #9b9b9b}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#9b9b9b;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #9b9b9b #9b9b9b #9b9b9b}.nav-tabs.bordered{background:#fff;border:1px solid #9b9b9b}.nav-tabs.bordered>:first-child a{border-left-width:0px !important}.nav-tabs.bordered+.tab-content{border:1px solid #9b9b9b;border-top:none}.tabs-pull-right.nav-tabs>li,.tabs-pull-right.nav-pills>li{float:right}.tabs-pull-right.nav-tabs>li:first-child>a,.tabs-pull-right.nav-pills>li:first-child>a{margin-right:1px}.tabs-pull-right.bordered.nav-tabs>li:first-child>a,.tabs-pull-right.bordered.nav-pills>li:first-child>a{border-left-width:1px !important;margin-right:0px;border-right-width:0px}.dropdown-menu-xs{min-width:37px}.dropdown-menu-xs>li>a{padding:3px 10px}.dropdown-menu-xs>li>a:hover i{color:#fff !important}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px}.dropdown-submenu:hover>.dropdown-menu{display:block}.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:#2b2b2b;margin-top:5px;margin-right:-10px}.dropdown-submenu:hover>a:after{border-left-color:#adadad}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px}.pagination>li>a,.pagination>li>span{box-shadow:inset 0 -2px 0 rgba(0,0,0,0.05);-moz-box-shadow:inset 0 -2px 0 rgba(0,0,0,0.05);-webkit-box-shadow:inset 0 -2px 0 rgba(0,0,0,0.05)}.disabled{color:#fff}.btn-default.disabled,button.disabled.DTTT_button,div.disabled.DTTT_button,a.disabled.DTTT_button{color:#63676a}.btn,button.DTTT_button,div.DTTT_button,a.DTTT_button{font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px;box-shadow:inset 0 -2px 0 rgba(0,0,0,0.05);-moz-box-shadow:inset 0 -2px 0 rgba(0,0,0,0.05);-webkit-box-shadow:inset 0 -2px 0 rgba(0,0,0,0.05)}.btn:active,button.DTTT_button:active,div.DTTT_button:active,a.DTTT_button:active{position:relative;top:1px;left:1px}.btn.btn-ribbon,button.btn-ribbon.DTTT_button,div.btn-ribbon.DTTT_button,a.btn-ribbon.DTTT_button{background-color:#707070;background-image:-moz-linear-gradient(top, #777, #666);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#777), to(#666));background-image:-webkit-linear-gradient(top, #777, #666);background-image:-o-linear-gradient(top, #777, #666);background-image:linear-gradient(to bottom, #777777,#666666);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff777777', endColorstr='#ff666666', GradientType=0);color:white;padding:0 5px;line-height:20px;vertical-align:middle;height:20px;display:block;border:none;float:left;margin:0 8px 0 0;cursor:pointer}.btn.btn-ribbon>i,button.btn-ribbon.DTTT_button>i,div.btn-ribbon.DTTT_button>i,a.btn-ribbon.DTTT_button>i{font-size:111%}.ribbon-button-alignment{padding-top:10px;display:inline-block}.ribbon-button-alignment.pull-right>.btn.btn-ribbon,.ribbon-button-alignment.pull-right>button.btn-ribbon.DTTT_button,.ribbon-button-alignment.pull-right>div.btn-ribbon.DTTT_button,.ribbon-button-alignment.pull-right>a.btn-ribbon.DTTT_button{margin:0 0 0 8px}.panel-purple{border-color:#6e587a}.panel-purple>.panel-heading{color:#fff;background-color:#6e587a;border-color:#6e587a}.panel-greenLight{border-color:#71843f}.panel-greenLight>.panel-heading{color:#fff;background-color:#71843f;border-color:#71843f}.panel-greenDark{border-color:#496949}.panel-greenDark>.panel-heading{color:#fff;background-color:#496949;border-color:#496949}.panel-darken{border-color:#313335}.panel-darken>.panel-heading{color:#fff;background-color:#404040;border-color:#404040}.panel-pink{border-color:#e06fdf}.panel-pink>.panel-heading{color:#fff;background-color:#e06fdf;border-color:#e06fdf}.panel-green{border-color:#5cb85c}.panel-green>.panel-heading{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.panel-blueLight{border-color:#92a2a8}.panel-blueLight>.panel-heading{color:#fff;background-color:#92a2a8;border-color:#92a2a8}.panel-pinkDark{border-color:#a8829f}.panel-pinkDark>.panel-heading{color:#fff;background-color:#a8829f;border-color:#a8829f}.panel-redLight{border-color:#a65858}.panel-redLight>.panel-heading{color:#fff;background-color:#a65858;border-color:#a65858}.panel-red{border-color:#d9534f}.panel-red>.panel-heading{color:#fff;background-color:#d9534f;border-color:#d9534f}.panel-teal{border-color:#568a89}.panel-teal>.panel-heading{color:#fff;background-color:#568a89;border-color:#568a89}.panel-orange{border-color:#e28a0d}.panel-orange>.panel-heading{color:#fff;background-color:#e28a0d;border-color:#e28a0d}.panel-blueDark{border-color:#4c4f53}.panel-blueDark>.panel-heading{color:#fff;background-color:#4c4f53;border-color:#4c4f53}.panel-magenta{border-color:#6e3671}.panel-magenta>.panel-heading{color:#fff;background-color:#6e3671;border-color:#6e3671}.panel-blue{border-color:#428bca}.panel-blue>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-footer>.btn-block{border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px;border-bottom:none;border-left:none;border-right:none}.btn-circle{width:30px;height:30px;text-align:center;padding:6px 0;font-size:12px;line-height:18px;border-radius:50%;-moz-border-radius:50%;-webkit-border-radius:50%}.btn-circle.btn-lg,.btn-group-lg>.btn-circle.btn,.btn-group-lg>button.btn-circle.DTTT_button,.btn-group-lg>div.btn-circle.DTTT_button,.btn-group-lg>a.btn-circle.DTTT_button{width:50px;height:50px;padding:10px 15px;font-size:18px;line-height:30px;border-radius:50%;-moz-border-radius:50%;-webkit-border-radius:50%}.btn-circle.btn-xl{width:70px;height:70px;padding:10px 15px;font-size:24px;line-height:50px;border-radius:50%;-moz-border-radius:50%;-webkit-border-radius:50%}.btn-metro{margin:0 0 20px;padding-top:15px;padding-bottom:15px}.btn-metro>span{display:block;vertical-align:bottom;margin-top:10px;text-transform:uppercase}.btn-metro>span.label{position:absolute;top:0px;right:0px}.btn-label{position:relative;left:-12px;display:inline-block;padding:6px 12px;background:rgba(0,0,0,0.15);border-radius:3px 0 0 3px}.btn-labeled{padding-top:0;padding-bottom:0}.btn-link{box-shadow:none;-webkit-box-shadow:none;font-size:13px}.morris-hover.morris-default-style{border-radius:5px;padding:5px;color:#666;background:rgba(29,29,29,0.9);border:solid 2px #375959;font-family:'Oxygen Bold';font-size:10px;text-align:left;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.4);box-shadow:0 6px 12px rgba(0,0,0,0.4)}.morris-hover.morris-default-style .morris-hover-row-label{font-weight:bold}.morris-hover.morris-default-style .morris-hover-point{white-space:nowrap}.morris-hover{position:absolute;z-index:903}.fixed-page-footer .morris-hover{z-index:900}.txt-color.txt-color-blue{color:#428bca !important}.txt-color.txt-color-blueLight{color:#92a2a8 !important}.txt-color.txt-color-blueDark{color:#4c4f53 !important}.txt-color.txt-color-grayLightest{color:#eaeaea !important}.txt-color.txt-color-grayLight{color:#63676a !important}.txt-color.txt-color-gray{color:#3c3f41 !important}.txt-color.txt-color-grayDark{color:#313335 !important}.txt-color.txt-color-green,.txt-color.pf-log-info{color:#5cb85c !important}.txt-color.txt-color-greenLight{color:#71843f !important}.txt-color.txt-color-greenDark{color:#496949 !important}.txt-color.txt-color-red,.txt-color.pf-log-error{color:#d9534f !important}.txt-color.txt-color-yellow{color:#b09b5b !important}.txt-color.txt-color-orange{color:#e28a0d !important}.txt-color.txt-color-orangeDark{color:#c2760c !important}.txt-color.txt-color-pink{color:#e06fdf !important}.txt-color.txt-color-pinkDark{color:#a8829f !important}.txt-color.txt-color-purple{color:#6e587a !important}.txt-color.txt-color-darken{color:#404040 !important}.txt-color.txt-color-lighten{color:#d5e7ec !important}.txt-color.txt-color-white{color:#fff !important}.txt-color.txt-color-magenta{color:#6e3671 !important}.txt-color.txt-color-teal{color:#568a89 !important}.txt-color.txt-color-redLight{color:#a65858 !important}.txt-color.txt-color-primary{color:#375959 !important}.txt-color.txt-color-success{color:#4f9e4f !important}.txt-color.txt-color-information{color:#316490 !important}.txt-color.txt-color-warning,.txt-color.pf-log-warning{color:#e28a0d !important}.txt-color.txt-color-danger{color:#a52521 !important}.bg-color.bg-color-blue{background-color:#428bca !important}.bg-color.bg-color-blueLight{background-color:#92a2a8 !important}.bg-color.bg-color-blueDark{background-color:#4c4f53 !important}.bg-color.bg-color-green{background-color:#5cb85c !important}.bg-color.bg-color-greenLight{background-color:#71843f !important}.bg-color.bg-color-greenDark{background-color:#496949 !important}.bg-color.bg-color-red{background-color:#d9534f !important}.bg-color.bg-color-yellow{background-color:#b09b5b !important}.bg-color.bg-color-orange{background-color:#e28a0d !important}.bg-color.bg-color-orangeDark{background-color:#c2760c !important}.bg-color.bg-color-pink{background-color:#e06fdf !important}.bg-color.bg-color-pinkDark{background-color:#a8829f !important}.bg-color.bg-color-purple{background-color:#6e587a !important}.bg-color.bg-color-darken{background-color:#404040 !important}.bg-color.bg-color-lighten{background-color:#d5e7ec !important}.bg-color.bg-color-white{background-color:#fff !important}.bg-color.bg-color-grayDark{background-color:#525252 !important}.bg-color.bg-color-magenta{background-color:#6e3671 !important}.bg-color.bg-color-teal{background-color:#568a89 !important}.bg-color.bg-color-redLight{background-color:#a65858 !important}body{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}a{color:#477372}a:hover{color:#6caead}em{font-style:italic}em.pf-brand{text-transform:uppercase}.pf-loading-overlay{position:absolute;width:100%;height:100%;top:0;left:0;opacity:0;background:#2b2b2b;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.pf-loading-overlay .pf-loading-overlay-wrapper{width:25px;height:25px;margin:auto;text-align:center;position:absolute;top:0;left:0;bottom:0;right:0}.pf-loading-overlay .pf-loading-overlay-wrapper i{padding:3px}.sb-left .list-group-item{-webkit-box-shadow:inset -10px 0px 5px -5px rgba(0,0,0,0.4);box-shadow:inset -10px 0px 5px -5px rgba(0,0,0,0.4)}.sb-right .list-group-item{-webkit-box-shadow:inset 10px 0px 5px -5px rgba(0,0,0,0.4);box-shadow:inset 10px 0px 5px -5px rgba(0,0,0,0.4)}.pf-map-type-global{color:#568a89}.pf-map-type-alliance{color:#428bca}.pf-map-type-private{color:#5cb85c}#pf-map-module{margin:20px 10px 0 10px}#pf-map-module #pf-map-tabs .pf-map-type-tab-default{border-top:2px solid transparent}#pf-map-module #pf-map-tabs .pf-map-type-tab-global{border-top:2px solid #5cb85c}#pf-map-module #pf-map-tabs .pf-map-type-tab-alliance{border-top:2px solid #428bca}#pf-map-module #pf-map-tabs .pf-map-type-tab-private{border-top:2px solid #568a89}.pf-map-content-row{margin:10px 0 0 0;padding-bottom:40px}.pf-map-content-row .pf-module{font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;background:rgba(60,63,65,0.3);padding:10px;width:100%;margin-bottom:10px;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.pf-system-effect{display:none;cursor:default;color:#adadad}.pf-system-effect-magnetar{color:#e06fdf;display:inline-block}.pf-system-effect-redgiant{color:#d9534f;display:inline-block}.pf-system-effect-pulsar{color:#428bca;display:inline-block}.pf-system-effect-wolfryet{color:#e28a0d;display:inline-block}.pf-system-effect-cataclysmic{color:#ffb;display:inline-block}.pf-system-effect-blackhole{color:#1d1d1d;display:inline-block}.pf-system-info-rally .pf-system-head{background-color:#782d77;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjEuMCIgeTE9IjEuMCIgeDI9IjAuMCIgeTI9IjAuMCI+PHN0b3Agb2Zmc2V0PSIyNSUiIHN0b3AtY29sb3I9IiMzZTI2NGUiLz48c3RvcCBvZmZzZXQ9IjI1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iIzNlMjY0ZSIvPjxzdG9wIG9mZnNldD0iNzUlIiBzdG9wLWNvbG9yPSIjM2UyNjRlIi8+PHN0b3Agb2Zmc2V0PSI3NSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-moz-linear-gradient(135deg, #3e264e 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,#3e264e 50%,#3e264e 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0));background-image:-webkit-linear-gradient(135deg, #3e264e 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,#3e264e 50%,#3e264e 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0));background-image:linear-gradient(-45deg, #3e264e 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,#3e264e 50%,#3e264e 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0));background-size:25px 25px;-webkit-animation:move 3s linear infinite;-moz-animation:move 3s linear infinite;-ms-animation:move 3s linear infinite;animation:move 3s linear infinite}.pf-system-security-0-0{color:#be0000}.pf-system-security-0-1{color:#ab2600}.pf-system-security-0-2{color:#be3900}.pf-system-security-0-3{color:#c24e02}.pf-system-security-0-4{color:#ab5f00}.pf-system-security-0-5{color:#bebe00}.pf-system-security-0-6{color:#73bf26}.pf-system-security-0-7{color:#00bf00}.pf-system-security-0-8{color:#00bf39}.pf-system-security-0-9{color:#39bf99}.pf-system-security-1-0{color:#28c0bf}.pf-system-sec{margin-right:5px;cursor:-moz-grab;cursor:-webkit-grab}.pf-system-sec-highSec{color:#5cb85c}.pf-system-sec-lowSec{color:#e28a0d}.pf-system-sec-nullSec{color:#d9534f}.pf-system-sec-high{color:#d9534f}.pf-system-sec-mid{color:#e28a0d}.pf-system-sec-low{color:#428bca}.pf-system-status-friendly{border-color:#428bca !important;color:#428bca}.pf-system-status-occupied{border-color:#e28a0d !important;color:#e28a0d}.pf-system-status-hostile{border-color:#d9534f !important;color:#d9534f}.pf-system-status-empty{border-color:#5cb85c !important;color:#5cb85c}.pf-system-status-unscanned{border-color:#568a89 !important;color:#568a89}.pf-system-effect-dialog-wrapper .table,.pf-jump-info-dialog .table{margin:15px 0}.pf-system-effect-dialog-wrapper .table td,.pf-jump-info-dialog .table td{text-transform:capitalize}.pf-fake-connection{box-sizing:content-box;display:inline-block;width:70px;height:4px;margin-right:5px;border-top:2px solid #63676a;border-bottom:2px solid #63676a;background-color:#3c3f41;position:relative;font-family:"Oxygen","Helvetica Neue",Helvetica,Arial,sans-serif}.pf-fake-connection.pf-map-connection-stargate{background-color:#63676a;border-color:#63676a}.pf-fake-connection.pf-map-connection-jumpbridge{background-color:#6caead;border-color:#3c3f41;background:repeating-linear-gradient(to right, #6caead, #6caead 10px, #3c3f41 10px, #3c3f41 20px)}.pf-fake-connection.pf-map-connection-wh-eol{border-color:#d747d6}.pf-fake-connection.pf-map-connection-wh-reduced{background-color:#e28a0d}.pf-fake-connection.pf-map-connection-wh-critical{background-color:#a52521}.pf-fake-connection.pf-map-connection-frig{border-style:dashed;border-left:none;border-right:none}.pf-fake-connection.pf-map-connection-frig:after{content:'frig';background-color:#e28a0d;color:#1d1d1d;padding:0px 3px;position:absolute;left:25px;top:-6px;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.pf-fake-connection.pf-map-connection-preserve-mass:after{content:'save mass';background-color:#a52521;color:#eaeaea;padding:0px 3px;position:absolute;left:9px;top:-6px;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.tooltip-inner{color:#5cb85c;background-color:#3c3f41;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;padding:5px 5px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.4);box-shadow:0 6px 12px rgba(0,0,0,0.4)}.tooltip.top .tooltip-arrow{border-top-color:#63676a}.tooltip.right .tooltip-arrow{border-right-color:#63676a}.tooltip.bottom .tooltip-arrow{border-bottom-color:#63676a}.tooltip.left .tooltip-arrow{border-left-color:#63676a}#pf-head{margin-bottom:0px}#pf-head a:focus{color:#477372}#pf-head a:hover{text-decoration:none}#pf-head a:hover .badge{color:#6caead}#pf-head i{margin-right:2px}#pf-head .pf-head-menu .pf-head-menu-logo{width:18px;height:18px;display:inline-block;float:left;background:url('data:image/png;base64,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')}#pf-head .pf-head-menu:hover .pf-head-menu-logo{background:url('data:image/png;base64,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')}#pf-head .pf-head-menu:focus .pf-head-menu-logo{background:url('data:image/png;base64,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')}#pf-head .badge{background-color:#3c3f41;color:#adadad}#pf-head .pf-head-active-user,#pf-head .pf-head-current-location{display:none}#pf-head .pf-head-active-user .badge,#pf-head .pf-head-current-location .badge{-webkit-transition:color 0.3s ease-out;transition:color 0.3s ease-out}#pf-head .pf-head-program-status{cursor:pointer}#pf-footer{position:absolute;bottom:0;left:0;width:100%;margin:0;background:rgba(60,63,65,0.3)}#pf-footer a{font-family:"Oxygen" Georgia,"Times New Roman",Times,serif;color:#375959}#pf-footer a:hover{color:#477372;text-decoration:none}@-webkit-keyframes move{0%{background-position:0 0}100%{background-position:50px 50px}}@-moz-keyframes move{0%{background-position:0 0}100%{background-position:50px 50px}}@-ms-keyframes move{0%{background-position:0 0}100%{background-position:50px 50px}}@keyframes move{0%{background-position:0 0}100%{background-position:50px 50px}}@-webkit-keyframes bounce{0%, 20%, 50%, 80%, 100%{-webkit-transform:translateY(0)}40%{-webkit-transform:translateY(-8px)}60%{-webkit-transform:translateY(-4px)}}@keyframes bounce{0%, 20%, 50%, 80%, 100%{transform:translateY(0)}40%{transform:translateY(-8px)}60%{transform:translateY(-4px)}}.pf-map-tab-content .pf-map-wrapper{position:relative;width:100%;max-width:2515px;height:550px;overflow:auto;padding:5px;background:rgba(43,43,43,0.93);box-shadow:inset -3px 3px 10px 0 rgba(0,0,0,0.3);border-bottom-right-radius:5px;border-bottom-left-radius:5px;border-width:1px;border-style:solid;border-color:#adadad}.pf-map-overlay{position:absolute;display:none;z-index:10000;width:36px;height:36px;bottom:23px;right:10px;background:rgba(0,0,0,0.2);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.pf-grid-small{background:url('data:image/png;base64,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') !important}.pf-map{width:2500px;height:520px;position:relative;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}.pf-map ._jsPlumb_overlay{opacity:1;pointer-events:none}.pf-map ._jsPlumb_hover._jsPlumb_overlay{opacity:0}.pf-map ._jsPlumb_hover:not(._jsPlumb_overlay){-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-delay:0.5s;animation-delay:0.5s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-timing-function:linear;animation-timing-function:linear;animation-iteration-count:infinite;-webkit-animation-iteration-count:infinite;-webkit-animation-name:bounce;animation-name:bounce}.pf-map ._jsPlumb_target_hover,.pf-map ._jsPlumb_source_hover{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-delay:0.5s;animation-delay:0.5s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-timing-function:linear;animation-timing-function:linear;animation-iteration-count:infinite;-webkit-animation-iteration-count:infinite;-webkit-animation-name:bounce;animation-name:bounce;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.3);box-shadow:0 6px 12px rgba(0,0,0,0.3)}.pf-map .pf-system{position:absolute;min-width:60px;height:auto;background-color:#313335;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;z-index:100;border-width:2px;border-style:solid;border-color:#63676a;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-webkit-transition:border-color 0.5s ease-out,box-shadow 0.2s ease-out;transition:border-color 0.5s ease-out,box-shadow 0.2s ease-out;-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}.pf-map .pf-system:hover{-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.3);box-shadow:0 6px 12px rgba(0,0,0,0.3);-moz-transform:translate3d(0, -2px, 0);-ms-transform:translate3d(0, -2px, 0);-webkit-transform:translate3d(0, -2px, 0);transform:translate3d(0, -2px, 0)}.pf-map .pf-system .pf-system-head{padding:0px 3px 0px 3px;cursor:pointer;font-family:Arial;font-weight:bold}.pf-map .pf-system .pf-system-head .pf-system-head-name{border:none;display:inline-block;min-width:41px;color:#adadad;margin-right:2px}.pf-map .pf-system .pf-system-head .fa-lock{display:none}.pf-map .pf-system .pf-system-head .pf-system-head-expand{margin-left:2px;color:#63676a;display:none}.pf-map .pf-system .pf-system-body{height:0px;width:100%;overflow:hidden;cursor:-moz-grab;cursor:-webkit-grab;cursor:grab;padding:0 2px;white-space:nowrap;display:none;border-top-width:1px;border-top-style:dashed;border-top-color:#63676a}.pf-map .pf-system .pf-system-body .pf-system-body-item{color:#63676a;font-size:10px}.pf-map .pf-system .pf-system-body .pf-system-body-item .pf-system-body-right{text-overflow:ellipsis;float:right;color:#568a89;display:none}.pf-map .pf-system .pf-system-body .pf-system-body-item .pf-user-status{font-size:7px}.pf-map .pf-system .pf-system-body .pf-system-body-item .pf-user-status-corp{color:#5cb85c}.pf-map .pf-system .pf-system-body .pf-system-body-item .pf-user-status-ally{color:#428bca}.pf-map .pf-system .tooltip.in{opacity:1}.pf-map .pf-system .tooltip .tooltip-inner{color:#313335;background-color:#adadad;padding:3px 3px}.pf-map .pf-system-active:not(.pf-map-endpoint-source):not(.pf-map-endpoint-target){-webkit-box-shadow:#ffb 0px 0px 8px 0px;box-shadow:#ffb 0px 0px 8px 0px}.pf-map .pf-system-selected:not(.pf-map-endpoint-source):not(.pf-map-endpoint-target){-webkit-box-shadow:#58100d 0px 0px 8px 0px;box-shadow:#58100d 0px 0px 8px 0px}.pf-map .pf-system-selected:not(.pf-map-endpoint-source):not(.pf-map-endpoint-target) .pf-system-head,.pf-map .pf-system-selected:not(.pf-map-endpoint-source):not(.pf-map-endpoint-target) .pf-system-body{background-color:#58100d}.pf-map .pf-system-locked .pf-system-sec{cursor:default !important}.pf-map .pf-system-locked .pf-system-body{cursor:default !important}.pf-map .pf-system-locked .fa-lock{color:#63676a !important;display:inline-block !important}.pf-map .pf-map-endpoint-source,.pf-map .pf-map-endpoint-target{z-index:50}.pf-map .pf-map-endpoint-source svg,.pf-map .pf-map-endpoint-target svg{width:10;height:10}.pf-map .pf-map-endpoint-source svg circle,.pf-map .pf-map-endpoint-target svg circle{-webkit-transition:stroke 0.2s ease-out;transition:stroke 0.2s ease-out}.pf-map .pf-map-endpoint-source svg *,.pf-map .pf-map-endpoint-target svg *{stroke:#63676a;stroke-width:2;fill:#3c3f41;cursor:pointer}.pf-map .pf-map-endpoint-source svg *:hover,.pf-map .pf-map-endpoint-target svg *:hover{stroke:#eaeaea}.pf-map .pf-map-endpoint-source:hover circle,.pf-map .pf-map-endpoint-target:hover circle{stroke:#eaeaea !important}.pf-map svg._jsPlumb_connector{cursor:pointer;stroke-linecap:round}.pf-map svg._jsPlumb_connector path{-webkit-transition:stroke 0.2s ease-out;transition:stroke 0.2s ease-out}.pf-map svg._jsPlumb_connector path:not(:first-child){stroke:#3c3f41}.pf-map svg._jsPlumb_connector path:first-child{stroke:#63676a}.pf-map svg._jsPlumb_connector:hover path:first-child{stroke:#eaeaea}.pf-map svg.pf-map-connection-stargate path:first-child{stroke:#63676a}.pf-map svg.pf-map-connection-stargate path:not(:first-child){stroke:#63676a}.pf-map svg.pf-map-connection-stargate:hover path:first-child{stroke:#eaeaea}.pf-map svg.pf-map-connection-jumpbridge path:first-child{stroke:rgba(255,255,255,0)}.pf-map svg.pf-map-connection-jumpbridge path:not(:first-child){stroke:#568a89}.pf-map svg.pf-map-connection-jumpbridge:hover path:first-child{stroke:rgba(255,255,255,0)}.pf-map svg.pf-map-connection-jumpbridge:hover path:not(:first-child){stroke:#eaeaea}.pf-map svg.pf-map-connection-wh-eol path:first-child{stroke:#d747d6}.pf-map svg.pf-map-connection-wh-eol:hover path:first-child{stroke:#eaeaea}.pf-map svg.pf-map-connection-wh-reduced path:not(:first-child){stroke:#e28a0d}.pf-map svg.pf-map-connection-wh-critical path:not(:first-child){stroke:#a52521}.pf-map .pf-map-connection-overlay{padding:1px 4px;font-size:11px;z-index:1020;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.4);box-shadow:0 6px 12px rgba(0,0,0,0.4)}.pf-map .frig{background-color:#f0ad4e;color:#1d1d1d}.pf-map .mass{background-color:#a52521;color:#eaeaea}.ui-dialog-content label{min-width:60px}.dropdown-menu{font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;z-index:1020}.dropdown-menu i{width:20px}.pf-system-tooltip-inner{color:#adadad;padding:2px 4px;min-width:25px;-webkit-transition:color 0.2s ease-out;transition:color 0.2s ease-out}.pf-system-info-module .breadcrumb{font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}.pf-system-info-module .breadcrumb li{text-transform:capitalize}.pf-system-info-module .pf-system-info-table{padding-right:7px;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}.pf-system-info-module .popover table{color:#adadad;font-size:10px}.pf-system-info-module .popover table td{padding:0 5px}.pf-system-info-module .pf-system-info-graph-kills{width:100%;height:150px;padding:10px 0;position:relative}.pf-system-info-module .pf-system-route-table{font-size:10px}.pf-sig-table-module .pf-sig-table{font-size:10px}.pf-sig-table-module .pf-sig-table .pf-sig-table-edit-name-input{text-transform:uppercase}.pf-sig-table-module .pf-sig-table th.pf-sig-table-counter{padding-right:20px !important}.pf-sig-table-module .pf-sig-table .pf-sig-table-counter{text-align:right}.pf-sig-table-module .pf-sig-table .pf-sig-table-counter .pf-digit-counter-small{width:20px;display:inline-block;font-size:10px}.pf-sig-table-module .pf-sig-table .pf-sig-table-counter .pf-digit-counter-large{width:26px;display:inline-block;font-size:10px}.pf-sig-table-module .pf-sig-table .popover-content table{border-spacing:0}.pf-sig-table-module .pf-sig-table .popover-content table tr{background-color:#3c3f41}.pf-sig-table-module .pf-sig-table .popover-content table tr:not(:last-child) td{border-bottom:1px solid #313335}.pf-sig-table-module .pf-sig-table .popover-content table tr td{padding:2px 5px}.pf-sig-table-module .pf-sig-table .popover-content table tr td:first-child{color:#63676a}.pf-sig-table-module .pf-sig-table .popover-content table tr td:last-child{color:#adadad}.pf-sig-table-module .pf-sig-table-tools{height:45px}.pf-sig-table-module .pf-sig-table-tools .btn:not(:last-child),.pf-sig-table-module .pf-sig-table-tools button.DTTT_button:not(:last-child),.pf-sig-table-module .pf-sig-table-tools div.DTTT_button:not(:last-child),.pf-sig-table-module .pf-sig-table-tools a.DTTT_button:not(:last-child){margin-right:10px}.pf-sig-table-module .pf-sig-table-tools-action{height:75px;display:none}input,select{background-color:#313335;color:#adadad;border:1px solid #63676a;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}input:focus,select:focus{border-color:#568a89}.pf-icon{display:inline-block}.pf-icon-dotlan{background:url("../img/icons/dotlan_logo.png");width:17px;height:17px;opacity:0.8;margin:-5px 10px 0 10px}.modal-content .dataTable,.modal-content .table{font-size:10px;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}#pf-manual-scrollspy{position:relative;height:500px;overflow:auto}.pf-dialog-dynamic-area{padding:10px;min-height:100px;position:relative;background-color:#313335;overflow:hidden;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.pf-log-graph{height:100px;width:100%}
+ */.datepicker{padding:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;direction:ltr}.datepicker-inline{width:220px}.datepicker.datepicker-rtl{direction:rtl}.datepicker.datepicker-rtl table tr td span{float:right}.datepicker-dropdown{top:0;left:0}.datepicker-dropdown: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:6px}.datepicker-dropdown:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:7px}.datepicker>div{display:none}.datepicker.days div.datepicker-days{display:block}.datepicker.months div.datepicker-months{display:block}.datepicker.years div.datepicker-years{display:block}.datepicker table{margin:0}.datepicker td,.datepicker th{text-align:center;width:20px;height:20px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border:none}.table-striped .datepicker table tr td,.table-striped .datepicker table tr th{background-color:transparent}.datepicker table tr td.day:hover{background:#eeeeee;cursor:pointer}.datepicker table tr td.old,.datepicker table tr td.new{color:#999999}.datepicker table tr td.disabled,.datepicker table tr td.disabled:hover{background:none;color:#999999;cursor:default}.datepicker table tr td.today,.datepicker table tr td.today:hover,.datepicker table tr td.today.disabled,.datepicker table tr td.today.disabled:hover{background-color:#fde19a;background-image:-moz-linear-gradient(top, #fdd49a, #fdf59a);background-image:-ms-linear-gradient(top, #fdd49a, #fdf59a);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a));background-image:-webkit-linear-gradient(top, #fdd49a, #fdf59a);background-image:-o-linear-gradient(top, #fdd49a, #fdf59a);background-image:linear-gradient(to bottom, #fdd49a,#fdf59a);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0);border-color:#fdf59a #fdf59a #fbed50;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#000}.datepicker table tr td.today:hover,.datepicker table tr td.today:hover:hover,.datepicker table tr td.today.disabled:hover,.datepicker table tr td.today.disabled:hover:hover,.datepicker table tr td.today:active,.datepicker table tr td.today:hover:active,.datepicker table tr td.today.disabled:active,.datepicker table tr td.today.disabled:hover:active,.datepicker table tr td.today.active,.datepicker table tr td.today:hover.active,.datepicker table tr td.today.disabled.active,.datepicker table tr td.today.disabled:hover.active,.datepicker table tr td.today.disabled,.datepicker table tr td.today:hover.disabled,.datepicker table tr td.today.disabled.disabled,.datepicker table tr td.today.disabled:hover.disabled,.datepicker table tr td.today[disabled],.datepicker table tr td.today:hover[disabled],.datepicker table tr td.today.disabled[disabled],.datepicker table tr td.today.disabled:hover[disabled]{background-color:#fdf59a}.datepicker table tr td.today:active,.datepicker table tr td.today:hover:active,.datepicker table tr td.today.disabled:active,.datepicker table tr td.today.disabled:hover:active,.datepicker table tr td.today.active,.datepicker table tr td.today:hover.active,.datepicker table tr td.today.disabled.active,.datepicker table tr td.today.disabled:hover.active{background-color:#fbf069 \9}.datepicker table tr td.today:hover:hover{color:#000}.datepicker table tr td.today.active:hover{color:#fff}.datepicker table tr td.range,.datepicker table tr td.range:hover,.datepicker table tr td.range.disabled,.datepicker table tr td.range.disabled:hover{background:#eeeeee;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.datepicker table tr td.range.today,.datepicker table tr td.range.today:hover,.datepicker table tr td.range.today.disabled,.datepicker table tr td.range.today.disabled:hover{background-color:#f3d17a;background-image:-moz-linear-gradient(top, #f3c17a, #f3e97a);background-image:-ms-linear-gradient(top, #f3c17a, #f3e97a);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f3c17a), to(#f3e97a));background-image:-webkit-linear-gradient(top, #f3c17a, #f3e97a);background-image:-o-linear-gradient(top, #f3c17a, #f3e97a);background-image:linear-gradient(to bottom, #f3c17a,#f3e97a);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3c17a', endColorstr='#f3e97a', GradientType=0);border-color:#f3e97a #f3e97a #edde34;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.datepicker table tr td.range.today:hover,.datepicker table tr td.range.today:hover:hover,.datepicker table tr td.range.today.disabled:hover,.datepicker table tr td.range.today.disabled:hover:hover,.datepicker table tr td.range.today:active,.datepicker table tr td.range.today:hover:active,.datepicker table tr td.range.today.disabled:active,.datepicker table tr td.range.today.disabled:hover:active,.datepicker table tr td.range.today.active,.datepicker table tr td.range.today:hover.active,.datepicker table tr td.range.today.disabled.active,.datepicker table tr td.range.today.disabled:hover.active,.datepicker table tr td.range.today.disabled,.datepicker table tr td.range.today:hover.disabled,.datepicker table tr td.range.today.disabled.disabled,.datepicker table tr td.range.today.disabled:hover.disabled,.datepicker table tr td.range.today[disabled],.datepicker table tr td.range.today:hover[disabled],.datepicker table tr td.range.today.disabled[disabled],.datepicker table tr td.range.today.disabled:hover[disabled]{background-color:#f3e97a}.datepicker table tr td.range.today:active,.datepicker table tr td.range.today:hover:active,.datepicker table tr td.range.today.disabled:active,.datepicker table tr td.range.today.disabled:hover:active,.datepicker table tr td.range.today.active,.datepicker table tr td.range.today:hover.active,.datepicker table tr td.range.today.disabled.active,.datepicker table tr td.range.today.disabled:hover.active{background-color:#efe24b \9}.datepicker table tr td.selected,.datepicker table tr td.selected:hover,.datepicker table tr td.selected.disabled,.datepicker table tr td.selected.disabled:hover{background-color:#9e9e9e;background-image:-moz-linear-gradient(top, #b3b3b3, gray);background-image:-ms-linear-gradient(top, #b3b3b3, gray);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#b3b3b3), to(gray));background-image:-webkit-linear-gradient(top, #b3b3b3, gray);background-image:-o-linear-gradient(top, #b3b3b3, gray);background-image:linear-gradient(to bottom, #b3b3b3,#808080);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b3b3b3', endColorstr='#808080', GradientType=0);border-color:#808080 #808080 #595959;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.datepicker table tr td.selected:hover,.datepicker table tr td.selected:hover:hover,.datepicker table tr td.selected.disabled:hover,.datepicker table tr td.selected.disabled:hover:hover,.datepicker table tr td.selected:active,.datepicker table tr td.selected:hover:active,.datepicker table tr td.selected.disabled:active,.datepicker table tr td.selected.disabled:hover:active,.datepicker table tr td.selected.active,.datepicker table tr td.selected:hover.active,.datepicker table tr td.selected.disabled.active,.datepicker table tr td.selected.disabled:hover.active,.datepicker table tr td.selected.disabled,.datepicker table tr td.selected:hover.disabled,.datepicker table tr td.selected.disabled.disabled,.datepicker table tr td.selected.disabled:hover.disabled,.datepicker table tr td.selected[disabled],.datepicker table tr td.selected:hover[disabled],.datepicker table tr td.selected.disabled[disabled],.datepicker table tr td.selected.disabled:hover[disabled]{background-color:#808080}.datepicker table tr td.selected:active,.datepicker table tr td.selected:hover:active,.datepicker table tr td.selected.disabled:active,.datepicker table tr td.selected.disabled:hover:active,.datepicker table tr td.selected.active,.datepicker table tr td.selected:hover.active,.datepicker table tr td.selected.disabled.active,.datepicker table tr td.selected.disabled:hover.active{background-color:#666666 \9}.datepicker table tr td.active,.datepicker table tr td.active:hover,.datepicker table tr td.active.disabled,.datepicker table tr td.active.disabled:hover{background-color:#006dcc;background-image:-moz-linear-gradient(top, #08c, #04c);background-image:-ms-linear-gradient(top, #08c, #04c);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#04c));background-image:-webkit-linear-gradient(top, #08c, #04c);background-image:-o-linear-gradient(top, #08c, #04c);background-image:linear-gradient(to bottom, #0088cc,#0044cc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);border-color:#0044cc #0044cc #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.datepicker table tr td.active:hover,.datepicker table tr td.active:hover:hover,.datepicker table tr td.active.disabled:hover,.datepicker table tr td.active.disabled:hover:hover,.datepicker table tr td.active:active,.datepicker table tr td.active:hover:active,.datepicker table tr td.active.disabled:active,.datepicker table tr td.active.disabled:hover:active,.datepicker table tr td.active.active,.datepicker table tr td.active:hover.active,.datepicker table tr td.active.disabled.active,.datepicker table tr td.active.disabled:hover.active,.datepicker table tr td.active.disabled,.datepicker table tr td.active:hover.disabled,.datepicker table tr td.active.disabled.disabled,.datepicker table tr td.active.disabled:hover.disabled,.datepicker table tr td.active[disabled],.datepicker table tr td.active:hover[disabled],.datepicker table tr td.active.disabled[disabled],.datepicker table tr td.active.disabled:hover[disabled]{background-color:#0044cc}.datepicker table tr td.active:active,.datepicker table tr td.active:hover:active,.datepicker table tr td.active.disabled:active,.datepicker table tr td.active.disabled:hover:active,.datepicker table tr td.active.active,.datepicker table tr td.active:hover.active,.datepicker table tr td.active.disabled.active,.datepicker table tr td.active.disabled:hover.active{background-color:#003399 \9}.datepicker table tr td span{display:block;width:23%;height:54px;line-height:54px;float:left;margin:1%;cursor:pointer;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.datepicker table tr td span:hover{background:#eeeeee}.datepicker table tr td span.disabled,.datepicker table tr td span.disabled:hover{background:none;color:#999999;cursor:default}.datepicker table tr td span.active,.datepicker table tr td span.active:hover,.datepicker table tr td span.active.disabled,.datepicker table tr td span.active.disabled:hover{background-color:#006dcc;background-image:-moz-linear-gradient(top, #08c, #04c);background-image:-ms-linear-gradient(top, #08c, #04c);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#04c));background-image:-webkit-linear-gradient(top, #08c, #04c);background-image:-o-linear-gradient(top, #08c, #04c);background-image:linear-gradient(to bottom, #0088cc,#0044cc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);border-color:#0044cc #0044cc #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.datepicker table tr td span.active:hover,.datepicker table tr td span.active:hover:hover,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active.disabled:hover:hover,.datepicker table tr td span.active:active,.datepicker table tr td span.active:hover:active,.datepicker table tr td span.active.disabled:active,.datepicker table tr td span.active.disabled:hover:active,.datepicker table tr td span.active.active,.datepicker table tr td span.active:hover.active,.datepicker table tr td span.active.disabled.active,.datepicker table tr td span.active.disabled:hover.active,.datepicker table tr td span.active.disabled,.datepicker table tr td span.active:hover.disabled,.datepicker table tr td span.active.disabled.disabled,.datepicker table tr td span.active.disabled:hover.disabled,.datepicker table tr td span.active[disabled],.datepicker table tr td span.active:hover[disabled],.datepicker table tr td span.active.disabled[disabled],.datepicker table tr td span.active.disabled:hover[disabled]{background-color:#0044cc}.datepicker table tr td span.active:active,.datepicker table tr td span.active:hover:active,.datepicker table tr td span.active.disabled:active,.datepicker table tr td span.active.disabled:hover:active,.datepicker table tr td span.active.active,.datepicker table tr td span.active:hover.active,.datepicker table tr td span.active.disabled.active,.datepicker table tr td span.active.disabled:hover.active{background-color:#003399 \9}.datepicker table tr td span.old,.datepicker table tr td span.new{color:#999999}.datepicker th.datepicker-switch{width:145px}.datepicker thead tr:first-child th,.datepicker tfoot tr th{cursor:pointer}.datepicker thead tr:first-child th:hover,.datepicker tfoot tr th:hover{background:#eeeeee}.datepicker .cw{font-size:10px;width:12px;padding:0 2px 0 5px;vertical-align:middle}.datepicker thead tr:first-child th.cw{cursor:default;background-color:transparent}.input-append.date .add-on i,.input-prepend.date .add-on i{display:block;cursor:pointer;width:16px;height:16px}.input-daterange input{text-align:center}.input-daterange input:first-child{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-daterange input:last-child{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-daterange .add-on{display:inline-block;width:auto;min-width:16px;height:18px;padding:4px 5px;font-weight:normal;line-height:18px;text-align:center;text-shadow:0 1px 0 #ffffff;vertical-align:middle;background-color:#eeeeee;border:1px solid #ccc;margin-left:-5px;margin-right:-5px}.ui-pnotify{top:25px;right:25px;position:absolute;height:auto;z-index:9999}html>body>.ui-pnotify{position:fixed}.ui-pnotify .ui-pnotify-shadow{-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0px 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.ui-pnotify-container{background-position:0 0;padding:.8em;height:100%;margin:0}.ui-pnotify-sharp{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.ui-pnotify-title{display:block;margin-bottom:.4em;margin-top:0}.ui-pnotify-text{display:block;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}.ui-pnotify-icon,.ui-pnotify-icon span{display:block;float:left;margin-right:.2em}.ui-pnotify.stack-topleft,.ui-pnotify.stack-bottomleft{left:25px;right:auto}.ui-pnotify.stack-bottomright,.ui-pnotify.stack-bottomleft{bottom:25px;top:auto}.ui-pnotify.stack-bar-top{right:0;top:0}.ui-pnotify.stack-bar-bottom{right:auto;bottom:0;top:auto;left:auto}html,body,#sb-site,.sb-site-container,.sb-slidebar{margin:0;padding:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html,body{width:100%;overflow-x:hidden}html{height:100%}body{min-height:100%;height:auto;position:relative}html.sb-scroll-lock.sb-active:not(.sb-static){overflow:hidden}#sb-site,.sb-site-container{width:100%;position:relative;z-index:1;background:url("../img/pf-bg.jpg") #05050a;background-repeat:no-repeat}.sb-slidebar{height:100%;overflow-y:auto;position:fixed;top:0;z-index:0;display:none;background-color:#313335;-webkit-transform:translate(0px)}.sb-left{left:0;-webkit-box-shadow:inset -5px 0px 10px 0px rgba(0,0,0,0.4);box-shadow:inset -5px 0px 10px 0px rgba(0,0,0,0.4)}.sb-right{right:0;-webkit-box-shadow:inset 5px 0px 10px 0px rgba(0,0,0,0.4);box-shadow:inset 5px 0px 10px 0px rgba(0,0,0,0.4)}html.sb-static .sb-slidebar,.sb-slidebar.sb-static{position:absolute}.sb-slidebar.sb-active{display:block}.sb-style-overlay{z-index:9999}.sb-momentum-scrolling{-webkit-overflow-scrolling:touch}.sb-slidebar{width:30%}.sb-width-thin{width:15%}.sb-width-wide{width:45%}@media (max-width: 480px){.sb-slidebar{width:70%}.sb-width-thin{width:55%}.sb-width-wide{width:85%}}@media (min-width: 481px){.sb-slidebar{width:55%}.sb-width-thin{width:40%}.sb-width-wide{width:70%}}@media (min-width: 768px){.sb-slidebar{width:40%}.sb-width-thin{width:25%}.sb-width-wide{width:55%}}@media (min-width: 992px){.sb-slidebar{width:30%}.sb-width-thin{width:15%}.sb-width-wide{width:45%}}@media (min-width: 1200px){.sb-slidebar{width:20%}.sb-width-thin{width:5%}.sb-width-wide{width:35%}}.sb-slide,#sb-site,.sb-site-container,.sb-slidebar{-webkit-transition:-webkit-transform 400ms ease;-moz-transition:-moz-transform 400ms ease;-o-transition:-o-transform 400ms ease;transition:transform 400ms ease;-webkit-transition-property:-webkit-transform, left, right;-webkit-backface-visibility:hidden}.sb-hide{display:none}.pf-pie-chart{position:relative;display:table-cell;text-align:center;vertical-align:middle}.pf-pie-chart span{display:inline-block}.pf-pie-chart canvas{position:absolute;top:0;left:0}.pf-pie-chart-map-timer{width:36px;height:36px;margin:3px}.pf-pie-chart-map-timer canvas{top:3px;left:3px}.pf-pie-chart-map-timer span{font-size:10px}.pf-pie-chart-map-timer span:after{content:'s';margin-left:1px}div.pf-map-drag-to-select{background:#375959;display:none;opacity:0.3;z-index:9000;border:1px dashed #adadad;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}div.pf-map-drag-to-select.active{display:block}.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;overflow:hidden;padding-left:8px;padding-right:20px;text-overflow:ellipsis}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{border:none;font-size:100%;margin-top:5px}.select2-dropdown{background-color:#313335;border:1px solid #63676a;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1500;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.3);box-shadow:0 6px 12px rgba(0,0,0,0.3)}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:10px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0;border-color:#568a89}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-container--default .select2-selection--single{background-color:#313335;border:1px solid #63676a;border-radius:0px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#adadad;line-height:28px;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;color:#a52521}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#63676a}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:#313335;border:1px solid #63676a;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#63676a;margin-top:5px;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#adadad;color:#2b2b2b;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#a52521;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0;-webkit-transition:border-color 0.3s ease-out;transition:border-color 0.3s ease-out;border-color:#568a89}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #63676a}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#375959;color:#eaeaea}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#adadad;color:#2b2b2b}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#313335;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #ffffff 50%,#eeeeee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff', endColorstr='#eee', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #adadad}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#63676a}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eeeeee 50%,#cccccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eee', endColorstr='#ccc', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #adadad}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #ffffff 0%,#eeeeee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff', endColorstr='#eee', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eeeeee 50%,#ffffff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eee', endColorstr='#fff', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #adadad}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#adadad;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #adadad}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#2b2b2b}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#adadad}html{margin:0;padding:0;height:100%;position:relative}body{margin:0;padding:0;min-height:100%;direction:ltr}body.mobile-view-activated.hidden-menu{overflow-x:hidden}body.modal-open{overflow:hidden !important}a:hover,a:active,a:focus,button,button:active,button:focus,object,embed,input::-moz-focus-inner{outline:0}h1,h3,h4{margin:0;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}.page-title{margin:12px 0 28px}.page-title span{font-size:15px;color:#313335;display:inline-block;vertical-align:1px}label{font-weight:normal}*:focus{outline:0 !important}a,input,button{-ms-touch-action:none !important}textarea:focus,select: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{outline:0;outline:thin dotted \9;box-shadow:inset -1px 1px 5px 0 rgba(0,0,0,0.8) !important}.input-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn,.input-group-sm>.input-group-btn>button.DTTT_button,.input-group-sm>.input-group-btn>div.DTTT_button,.input-group-sm>.input-group-btn>a.DTTT_button,.input-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn,.input-group-lg>.input-group-btn>button.DTTT_button,.input-group-lg>.input-group-btn>div.DTTT_button,.input-group-lg>.input-group-btn>a.DTTT_button,.input-xs,.form-control{border-radius:0px !important;-webkit-border-radius:0px !important;-moz-border-radius:0px !important}.input-xs{height:24px;padding:2px 10px;font-size:11px;line-height:1.5}.btn-xs,.btn-group-xs>.btn,.btn-group-xs>button.DTTT_button,.btn-group-xs>div.DTTT_button,.btn-group-xs>a.DTTT_button{padding:0px 2px;font-size:10px;line-height:1.3}.btn-sm,.btn-group-sm>.btn,.btn-group-sm>button.DTTT_button,.btn-group-sm>div.DTTT_button,.btn-group-sm>a.DTTT_button,button.DTTT_button,div.DTTT_button,a.DTTT_button{padding:6px 10px 5px}.btn-lg,.btn-group-lg>.btn,.btn-group-lg>button.DTTT_button,.btn-group-lg>div.DTTT_button,.btn-group-lg>a.DTTT_button{padding:10px 16px}.no-space{margin:0}.no-space>[class*="col-"]{margin:0 !important;padding-right:0;padding-left:0}h1{letter-spacing:-1px;font-size:22px;margin:10px 0}h1 small{font-size:12px;font-weight:300;letter-spacing:-1px}.lead{font-size:13px}h2{font-family:"Oxygen", "Open Sans", Arial, Helvetica, Sans-Serif;letter-spacing:0px;font-size:14px;margin:20px 0;line-height:normal}h3{display:block;font-size:17px;font-weight:400;margin:20px 0;line-height:normal}h4{line-height:normal;margin:20px 0 10px 0}h5{font-size:15px;font-weight:300;margin:10px 0;line-height:normal}h6{font-size:13px;margin:10px 0;font-weight:bold;line-height:normal}.row-seperator-header{margin:15px 14px 20px;border-bottom:none;display:block;color:#303133;font-size:20px;font-weight:400}.center-canvas,.center-child-canvas>canvas{display:block !important;margin:0 auto !important}.smart-accordion-default.panel-group{margin-bottom:0px}.smart-accordion-default.panel-group .panel+.panel{margin-top:-1px}.smart-accordion-default.panel-group .panel-heading{padding:0px}.smart-accordion-default.panel-group .panel-title a{display:block;padding:10px 15px;text-decoration:none !important}.smart-accordion-default .panel-heading,.panel-group .panel{border-radius:0px;-webkit-border-radius:0px;-moz-border-radius:0px}.smart-accordion-default .panel-default>.panel-heading{background-color:#f3f3f3}.smart-accordion-default .panel-default{border-color:#8d9194}.smart-accordion-default .panel-title>a>:first-child{display:none}.smart-accordion-default .panel-title>a.collapsed>.fa{display:none}.smart-accordion-default .panel-title>a.collapsed>:first-child{display:inline-block}.no-padding .smart-accordion-default>div{border-left:none !important;border-right:none !important}.no-padding .smart-accordion-default>div:first-child{border-top:none !important}.no-padding .smart-accordion-default>div:last-child{border-bottom:none !important}.onoffswitch-container{margin-top:4px;margin-left:7px;display:inline-block}.onoffswitch{position:relative;width:50px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;margin-top:3px;margin-bottom:3px;margin-left:5px;display:inline-block;vertical-align:middle}.onoffswitch-checkbox{display:none}.onoffswitch-label{display:block;overflow:hidden;cursor:pointer;border:1px solid #484c4e;border-radius:50px;border-color:#777b7f #7c8184 #686c6f;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.onoffswitch-inner{width:200%;margin-left:-100%;display:block}.onoffswitch-inner:before,.onoffswitch-inner:after{float:left;width:50%;height:15px;padding:0;line-height:15px;font-size:10px;color:#fff;font-family:Trebuchet, Arial, sans-serif;font-weight:bold;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.onoffswitch-inner:before{content:attr(data-swchon-text);text-shadow:0 -1px 0 #313335;padding-left:7px;background-color:#3276b1;color:#fff;box-shadow:inset 0 2px 6px rgba(0,0,0,0.5),0 1px 2px rgba(0,0,0,0.05);text-align:left}.onoffswitch-inner:after{content:attr(data-swchoff-text);padding-right:7px;text-shadow:0 -1px 0 #fff;background-color:#fff;color:#3c3f41;text-align:right;box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.onoffswitch-switch{width:19px;height:19px;margin:-2px;background:white;border:1px solid #64686b;border-radius:50px;position:absolute;top:0;bottom:0;right:32px;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;background-color:#eaeaea;background-image:-moz-linear-gradient(top, #fff, #adadad);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#adadad));background-image:-webkit-linear-gradient(top, #fff, #adadad);background-image:-o-linear-gradient(top, #fff, #adadad);background-image:linear-gradient(to bottom, #ffffff,#adadad);background-repeat:repeat-x;-webkit-box-shadow:1px 1px 4px 0px rgba(0,0,0,0.3);box-shadow:1px 1px 4px 0px rgba(0,0,0,0.3)}.onoffswitch-checkbox+.onoffswitch-label .onoffswitch-switch:before,.onoffswitch-checkbox:checked+.onoffswitch-label .onoffswitch-switch:before{content:"\f00d";color:#a52521;display:block;text-align:center;line-height:19px;font-size:10px;text-shadow:0 -1px 0 #fff;font-weight:bold;font-family:FontAwesome}.onoffswitch-checkbox:checked+.onoffswitch-label .onoffswitch-switch:before{content:"\f00c";color:#428bca}.onoffswitch-checkbox:checked+.onoffswitch-label .onoffswitch-inner{margin-left:0;display:block}.onoffswitch-checkbox:checked+.onoffswitch-label .onoffswitch-switch{right:0px}.onoffswitch-switch:hover{background-color:#adadad}.onoffswitch-switch:active{background-color:#adadad;box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.onoffswitch-checkbox:disabled+.onoffswitch-label .onoffswitch-inner:after,.onoffswitch-checkbox:checked:disabled+.onoffswitch-label .onoffswitch-inner:before{text-shadow:0 1px 0 #fff;background:#bfbfbf;color:#313335}.onoffswitch-checkbox:checked:disabled+.onoffswitch-label .onoffswitch-switch,.onoffswitch-checkbox:disabled+.onoffswitch-label .onoffswitch-switch{background-color:#eaeaea;background-image:-moz-linear-gradient(top, #bfbfbf, #eaeaea);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#bfbfbf), to(#eaeaea));background-image:-webkit-linear-gradient(top, #bfbfbf, #eaeaea);background-image:-o-linear-gradient(top, #bfbfbf, #eaeaea);background-image:linear-gradient(to bottom, #bfbfbf,#eaeaea);box-shadow:none !important}.onoffswitch-checkbox:disabled+.onoffswitch-label,.onoffswitch-checkbox:checked:disabled+.onoffswitch-label .onoffswitch-label{border-color:#74797c #63676a #525558 !important}.onoffswitch-checkbox:checked+.onoffswitch-label{border-color:#3276b1 #2a6395 #255681}.onoffswitch+span,.onoffswitch-title{display:inline-block;vertical-align:middle;margin-top:-5px}.form-control{box-shadow:none !important;-webkit-box-shadow:none !important;-moz-box-shadow:none !important}.form hr{margin-left:-13px;margin-right:-13px;border-color:rgba(0,0,0,0.1);margin-top:20px;margin-bottom:20px}.form fieldset{display:block;border:none;background:rgba(255,255,255,0.9);position:relative}fieldset{position:relative}.form-actions{display:block;padding:13px 14px 15px;border-top:1px solid rgba(0,0,0,0.1);background:rgba(239,239,239,0.9);margin-top:25px;margin-left:-13px;margin-right:-13px;margin-bottom:-13px;text-align:right}.well .form-actions{margin-left:-19px;margin-right:-19px;margin-bottom:-19px}.well.well-lg .form-actions{margin-left:-24px;margin-right:-24px;margin-bottom:-24px}.well.well-sm .form-actions{margin-left:-9px;margin-right:-9px;margin-bottom:-9px}.popover-content .form-actions{margin:0 -14px -9px;border-radius:0 0 3px 3px;padding:9px 14px}.no-padding .form .form-actions{margin:0;display:block;padding:13px 14px 15px;border-top:1px solid rgba(0,0,0,0.1);background:rgba(248,248,248,0.9);text-align:right;margin-top:25px}.form header,legend{display:block;padding:8px 0;border-bottom:1px dashed rgba(0,0,0,0.2);background:#fff;font-size:16px;font-weight:300;color:#2b2b2b;margin:25px 0px 20px}.no-padding .form header{margin:25px 14px 0}.form header:first-child{margin-top:10px}legend{font-weight:400;margin-top:0px;background:none}.input-group-addon{padding:6px 10px;border-radius:0;-moz-border-radius:0;-webkit-border-radius:0}.input-group-addon{transition:border-color 0.3s;-o-transition:border-color 0.3s;-ms-transition:border-color 0.3s;-moz-transition:border-color 0.3s;-webkit-transition:border-color 0.3s;transition:background-color 0.3s;-o-transition:background-color 0.3s;-ms-transition:background-color 0.3s;-moz-transition:background-color 0.3s;-webkit-transition:background-color 0.3s}.input-group-addon .fa{font-size:14px}.input-group-addon .fa-lg,.input-group-addon .fa-2x{font-size:2em}.input-group-addon .fa-3x,.input-group-addon .fa-4x,.input-group-addon .fa-5x{font-size:30px}input[type="text"]:focus+.input-group-addon{border-color:#0091d9;background-color:#666;color:#fff}.has-warning input[type="text"],.has-warning input[type="text"]+.input-group-addon{border-color:#e28a0d}.has-warning input[type="text"]+.input-group-addon{background-color:#fdedd8;color:#2b2b2b}.has-warning input[type="text"]:focus,.has-warning input[type="text"]:focus+.input-group-addon{border-color:#e28a0d}.has-warning input[type="text"]:focus+.input-group-addon{background-color:#f29717;color:#fff}.has-error .input-group-addon{border-color:#a52521;background:#f6d1d0;color:#2b2b2b}.has-error input[type="text"],.has-error input[type="text"]+.input-group-addon{border-color:#a52521}.has-error input[type="text"]+.input-group-addon{background-color:#f6d1d0;color:#2b2b2b}.has-error input[type="text"]:focus,.has-error input[type="text"]:focus+.input-group-addon{border-color:#d8403b}.has-error input[type="text"]:focus+.input-group-addon{background-color:#d8403b;color:#fff}.has-success input[type="text"]:focus+.input-group-addon{border-color:#4f9e4f;background-color:#4f9e4f;color:#fff}.form fieldset .form-group:last-child,.form fieldset .form-group:last-child .note,.form .form-group:last-child,.form .form-group:last-child .note{margin-bottom:0}.note{margin-top:6px;padding:0 1px;font-size:11px;line-height:15px;color:#63676a}.input-icon-right{position:relative}.input-icon-right>i,.input-icon-left>i{position:absolute;right:10px;top:30%;font-size:16px;color:#bfbfbf}.input-icon-left>i{right:auto;left:24px}.input-icon-right .form-control{padding-right:27px}.input-icon-left .form-control{padding-left:29px}input[type="text"].ui-autocomplete-loading,input[type="password"].ui-autocomplete-loading,input[type="datetime"].ui-autocomplete-loading,input[type="datetime-local"].ui-autocomplete-loading,input[type="date"].ui-autocomplete-loading,input[type="month"].ui-autocomplete-loading,input[type="time"].ui-autocomplete-loading,input[type="week"].ui-autocomplete-loading,input[type="number"].ui-autocomplete-loading,input[type="email"].ui-autocomplete-loading,input[type="url"].ui-autocomplete-loading,input[type="search"].ui-autocomplete-loading,input[type="tel"].ui-autocomplete-loading,input[type="color"].ui-autocomplete-loading{background-image:url("../img/select2-spinner.gif") !important;background-repeat:no-repeat;background-position:99% 50%;padding-right:27px}.input-group-addon .checkbox,.input-group-addon .radio{min-height:0px;margin-right:0px !important;padding-top:0}.input-group-addon label input[type="checkbox"].checkbox+span,.input-group-addon label input[type="radio"].radiobox+span,.input-group-addon label input[type="radio"].radiobox+span:before,.input-group-addon label input[type="checkbox"].checkbox+span:before{margin-right:0px}.input-group-addon .onoffswitch,.input-group-addon .onoffswitch-label{margin:0}.alert{margin-bottom:10px;margin-top:0px;padding:5px 15px 5px 34px;color:#675100;border-width:0px;border-left-width:3px;padding:10px}.alert .ui-pnotify-title{line-height:12px}.alert .ui-pnotify-text{font-size:10px}.alert .close{top:0px;right:-5px;line-height:20px}.alert-heading{font-weight:600}.alert-danger{border-color:#a52521;color:#2b2b2b;background:#f6d1d0;text-shadow:none}.alert-danger .ui-pnotify-icon{color:#a52521}.alert-warning{border-color:#e28a0d;color:#2b2b2b;background:#fef8f0}.alert-warning .ui-pnotify-icon{color:#e28a0d}.alert-success{border-color:#4f9e4f;color:#2b2b2b;background:#d1e8d1}.alert-success .ui-pnotify-icon{color:#4f9e4f}.alert-info{border-color:#316490;color:#2b2b2b;background:#abc9e2}.alert-info .ui-pnotify-icon{color:#316490}.progress-micro{height:3px !important;line-height:3px !important}.progress-xs{height:7px !important;line-height:7px !important}.progress-sm{height:14px !important;line-height:14px !important}.progress-lg{height:30px !important;line-height:30px !important}.progress .progress-bar{position:absolute;overflow:hidden;line-height:18px}.progress .progressbar-back-text{position:absolute;width:100%;height:100%;font-size:12px;line-height:20px;text-align:center}.progress .progressbar-front-text{display:block;width:100%;font-size:12px;line-height:20px;text-align:center}.progress.right .progress-bar{right:0}.progress.right .progressbar-front-text{position:absolute;right:0}.progress.vertical{width:25px;height:100%;min-height:150px;margin-right:20px;display:inline-block;margin-bottom:0px}.progress.wide-bar{width:40px}.progress.vertical.bottom{position:relative}.progress.vertical.bottom .progressbar-front-text{position:absolute;bottom:0}.progress.vertical .progress-bar{width:100%;height:0;-webkit-transition:height 0.6s ease;transition:height 0.6s ease}.progress.vertical.bottom .progress-bar{position:absolute;bottom: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}}@-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{position:relative;margin-bottom:20px;overflow:hidden;height:18px;background:#adadad;box-shadow:0 1px 0 transparent,0 0 0 1px #aeb1b3 inset;-webkit-box-shadow:0 1px 0 transparent,0 0 0 1px #aeb1b3 inset;-moz-box-shadow:0 1px 0 transparent,0 0 0 1px #aeb1b3 inset;border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px}.progress-bar{float:left;width:0;height:100%;font-size:11px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);font-weight:bold;text-shadow:0 -1px 0 rgba(0,0,0,0.25);-webkit-transition:width 1.5s ease-in-out;transition:width 1.5s ease-in-out}.progress-striped .progress-bar{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:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0));background-size:40px 40px}.progress.active .progress-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-bar-danger{background-color:#a52521}.progress-striped .progress-bar-danger{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:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0))}.progress-bar-success{background-color:#4f9e4f}.progress-striped .progress-bar-success{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:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0))}.progress-bar-warning{background-color:#e28a0d}.progress-striped .progress-bar-warning{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:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0))}.progress-bar-info{background-color:#316490}.progress-striped .progress-bar-info{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:linear-gradient(45deg, rgba(255,255,255,0.15) 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0))}.progress-info .bar,.progress .bar-info{background:#316490}.vertical-bars{padding:0;margin:0}.vertical-bars:after{content:"";display:block;height:0;clear:both}.vertical-bars li{padding:14px 0;width:25%;display:block;float:left;text-align:center}.vertical-bars li:first-child{border-left:none}.vertical-bars>li>.progress.vertical:first-child{margin-left:auto}.vertical-bars>li>.progress.vertical{margin:0 auto;float:none}.nav-tabs{border-bottom:none}.nav-tabs>li>a .badge{font-size:11px;padding:3px 5px 3px 5px;opacity:.5;margin-left:5px;min-width:17px;font-weight:normal}.tabs-left .nav-tabs>li>a .badge{margin-right:5px;margin-left:0px}.nav-tabs>li>a .label{display:inline-block;font-size:11px;margin-left:5px;opacity:.5}.nav-tabs>li>a{color:#adadad;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}.nav-tabs>li>a:hover{color:#1d1d1d;border-color:transparent transparent #adadad transparent;margin-top:1px;border-top-width:0}.nav-tabs>li.active>a{background-color:#adadad;color:#2b2b2b;border-top-width:0px !important;margin-top:1px !important;font-weight:bold}.tabs-left .nav-tabs>li.active>a{-webkit-box-shadow:-2px 0 0 #428bca;-moz-box-shadow:-2px 0 0 #428bca;box-shadow:-2px 0 0 #428bca;border-top-width:1px !important;border-left:none !important;margin-left:1px !important}.tabs-left .nav-pills>li.active>a{border:none !important;box-shadow:none !important;-webkit-box-shadow:none !important;-moz-box-shadow:none !important}.tabs-right .nav-tabs>li.active>a{-webkit-box-shadow:2px 0 0 #428bca;-moz-box-shadow:2px 0 0 #428bca;box-shadow:2px 0 0 #428bca;border-top-width:1px !important;border-right:none !important;margin-right:1px !important}.tabs-below .nav-tabs>li.active>a{-webkit-box-shadow:0 2px 0 #428bca;-moz-box-shadow:0 2px 0 #428bca;box-shadow:0 2px 0 #428bca;border-bottom-width:0px !important;border-top:none !important;margin-top:0px !important}.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 #9b9b9b}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li,.tabs-left>.nav-pills>li,.tabs-right>.nav-pills>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a,.tabs-left>.nav-pills>li>a,.tabs-right>.nav-pills>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs,.tabs-left>.nav-pills{float:left;margin-right:19px;border-right:1px solid #9b9b9b}.tabs-left>.nav-pills{border-right:none}.tabs-left>.nav-tabs>li>a{margin-right:-1px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#adadad #949494 #adadad #adadad}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#949494 transparent #949494 #9b9b9b;*border-right-color:#fff}.tabs-left>.tab-content{margin-left:109px}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #9b9b9b}.tabs-right>.nav-tabs>li>a{margin-left:-1px}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#adadad #adadad #adadad #9b9b9b}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#9b9b9b #9b9b9b #9b9b9b transparent;*border-left-color:#fff}.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 #9b9b9b}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#9b9b9b;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #9b9b9b #9b9b9b #9b9b9b}.nav-tabs.bordered{background:#fff;border:1px solid #9b9b9b}.nav-tabs.bordered>:first-child a{border-left-width:0px !important}.nav-tabs.bordered+.tab-content{border:1px solid #9b9b9b;border-top:none}.tabs-pull-right.nav-tabs>li,.tabs-pull-right.nav-pills>li{float:right}.tabs-pull-right.nav-tabs>li:first-child>a,.tabs-pull-right.nav-pills>li:first-child>a{margin-right:1px}.tabs-pull-right.bordered.nav-tabs>li:first-child>a,.tabs-pull-right.bordered.nav-pills>li:first-child>a{border-left-width:1px !important;margin-right:0px;border-right-width:0px}.dropdown-menu-xs{min-width:37px}.dropdown-menu-xs>li>a{padding:3px 10px}.dropdown-menu-xs>li>a:hover i{color:#fff !important}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px}.dropdown-submenu:hover>.dropdown-menu{display:block}.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:#2b2b2b;margin-top:5px;margin-right:-10px}.dropdown-submenu:hover>a:after{border-left-color:#adadad}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px}.pagination>li>a,.pagination>li>span{box-shadow:inset 0 -2px 0 rgba(0,0,0,0.05);-moz-box-shadow:inset 0 -2px 0 rgba(0,0,0,0.05);-webkit-box-shadow:inset 0 -2px 0 rgba(0,0,0,0.05)}.disabled{color:#fff}.btn-default.disabled,button.disabled.DTTT_button,div.disabled.DTTT_button,a.disabled.DTTT_button{color:#63676a}.btn,button.DTTT_button,div.DTTT_button,a.DTTT_button{font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px;box-shadow:inset 0 -2px 0 rgba(0,0,0,0.05);-moz-box-shadow:inset 0 -2px 0 rgba(0,0,0,0.05);-webkit-box-shadow:inset 0 -2px 0 rgba(0,0,0,0.05)}.btn:active,button.DTTT_button:active,div.DTTT_button:active,a.DTTT_button:active{position:relative;top:1px;left:1px}.btn.btn-ribbon,button.btn-ribbon.DTTT_button,div.btn-ribbon.DTTT_button,a.btn-ribbon.DTTT_button{background-color:#707070;background-image:-moz-linear-gradient(top, #777, #666);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#777), to(#666));background-image:-webkit-linear-gradient(top, #777, #666);background-image:-o-linear-gradient(top, #777, #666);background-image:linear-gradient(to bottom, #777777,#666666);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff777777', endColorstr='#ff666666', GradientType=0);color:white;padding:0 5px;line-height:20px;vertical-align:middle;height:20px;display:block;border:none;float:left;margin:0 8px 0 0;cursor:pointer}.btn.btn-ribbon>i,button.btn-ribbon.DTTT_button>i,div.btn-ribbon.DTTT_button>i,a.btn-ribbon.DTTT_button>i{font-size:111%}.ribbon-button-alignment{padding-top:10px;display:inline-block}.ribbon-button-alignment.pull-right>.btn.btn-ribbon,.ribbon-button-alignment.pull-right>button.btn-ribbon.DTTT_button,.ribbon-button-alignment.pull-right>div.btn-ribbon.DTTT_button,.ribbon-button-alignment.pull-right>a.btn-ribbon.DTTT_button{margin:0 0 0 8px}.panel-purple{border-color:#6e587a}.panel-purple>.panel-heading{color:#fff;background-color:#6e587a;border-color:#6e587a}.panel-greenLight{border-color:#71843f}.panel-greenLight>.panel-heading{color:#fff;background-color:#71843f;border-color:#71843f}.panel-greenDark{border-color:#496949}.panel-greenDark>.panel-heading{color:#fff;background-color:#496949;border-color:#496949}.panel-darken{border-color:#313335}.panel-darken>.panel-heading{color:#fff;background-color:#404040;border-color:#404040}.panel-pink{border-color:#e06fdf}.panel-pink>.panel-heading{color:#fff;background-color:#e06fdf;border-color:#e06fdf}.panel-green{border-color:#5cb85c}.panel-green>.panel-heading{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.panel-blueLight{border-color:#92a2a8}.panel-blueLight>.panel-heading{color:#fff;background-color:#92a2a8;border-color:#92a2a8}.panel-pinkDark{border-color:#a8829f}.panel-pinkDark>.panel-heading{color:#fff;background-color:#a8829f;border-color:#a8829f}.panel-redLight{border-color:#a65858}.panel-redLight>.panel-heading{color:#fff;background-color:#a65858;border-color:#a65858}.panel-red{border-color:#d9534f}.panel-red>.panel-heading{color:#fff;background-color:#d9534f;border-color:#d9534f}.panel-teal{border-color:#568a89}.panel-teal>.panel-heading{color:#fff;background-color:#568a89;border-color:#568a89}.panel-orange{border-color:#e28a0d}.panel-orange>.panel-heading{color:#fff;background-color:#e28a0d;border-color:#e28a0d}.panel-blueDark{border-color:#4c4f53}.panel-blueDark>.panel-heading{color:#fff;background-color:#4c4f53;border-color:#4c4f53}.panel-magenta{border-color:#6e3671}.panel-magenta>.panel-heading{color:#fff;background-color:#6e3671;border-color:#6e3671}.panel-blue{border-color:#428bca}.panel-blue>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-footer>.btn-block{border-radius:0px;-moz-border-radius:0px;-webkit-border-radius:0px;border-bottom:none;border-left:none;border-right:none}.btn-circle{width:30px;height:30px;text-align:center;padding:6px 0;font-size:12px;line-height:18px;border-radius:50%;-moz-border-radius:50%;-webkit-border-radius:50%}.btn-circle.btn-lg,.btn-group-lg>.btn-circle.btn,.btn-group-lg>button.btn-circle.DTTT_button,.btn-group-lg>div.btn-circle.DTTT_button,.btn-group-lg>a.btn-circle.DTTT_button{width:50px;height:50px;padding:10px 15px;font-size:18px;line-height:30px;border-radius:50%;-moz-border-radius:50%;-webkit-border-radius:50%}.btn-circle.btn-xl{width:70px;height:70px;padding:10px 15px;font-size:24px;line-height:50px;border-radius:50%;-moz-border-radius:50%;-webkit-border-radius:50%}.btn-metro{margin:0 0 20px;padding-top:15px;padding-bottom:15px}.btn-metro>span{display:block;vertical-align:bottom;margin-top:10px;text-transform:uppercase}.btn-metro>span.label{position:absolute;top:0px;right:0px}.btn-label{position:relative;left:-12px;display:inline-block;padding:6px 12px;background:rgba(0,0,0,0.15);border-radius:3px 0 0 3px}.btn-labeled{padding-top:0;padding-bottom:0}.btn-link{box-shadow:none;-webkit-box-shadow:none;font-size:13px}.morris-hover.morris-default-style{border-radius:5px;padding:5px;color:#666;background:rgba(29,29,29,0.9);border:solid 2px #375959;font-family:'Oxygen Bold';font-size:10px;text-align:left;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.4);box-shadow:0 6px 12px rgba(0,0,0,0.4)}.morris-hover.morris-default-style .morris-hover-row-label{font-weight:bold}.morris-hover.morris-default-style .morris-hover-point{white-space:nowrap}.morris-hover{position:absolute;z-index:903}.fixed-page-footer .morris-hover{z-index:900}.txt-color.txt-color-blue{color:#428bca !important}.txt-color.txt-color-blueLight{color:#92a2a8 !important}.txt-color.txt-color-blueDark{color:#4c4f53 !important}.txt-color.txt-color-grayLightest{color:#eaeaea !important}.txt-color.txt-color-grayLight{color:#63676a !important}.txt-color.txt-color-gray{color:#3c3f41 !important}.txt-color.txt-color-grayDark{color:#313335 !important}.txt-color.txt-color-green,.txt-color.pf-log-info{color:#5cb85c !important}.txt-color.txt-color-greenLight{color:#71843f !important}.txt-color.txt-color-greenDark{color:#496949 !important}.txt-color.txt-color-red,.txt-color.pf-log-error{color:#d9534f !important}.txt-color.txt-color-yellow{color:#b09b5b !important}.txt-color.txt-color-orange{color:#e28a0d !important}.txt-color.txt-color-orangeDark{color:#c2760c !important}.txt-color.txt-color-pink{color:#e06fdf !important}.txt-color.txt-color-pinkDark{color:#a8829f !important}.txt-color.txt-color-purple{color:#6e587a !important}.txt-color.txt-color-darken{color:#404040 !important}.txt-color.txt-color-lighten{color:#d5e7ec !important}.txt-color.txt-color-white{color:#fff !important}.txt-color.txt-color-magenta{color:#6e3671 !important}.txt-color.txt-color-teal{color:#568a89 !important}.txt-color.txt-color-redLight{color:#a65858 !important}.txt-color.txt-color-primary{color:#375959 !important}.txt-color.txt-color-success{color:#4f9e4f !important}.txt-color.txt-color-information{color:#316490 !important}.txt-color.txt-color-warning,.txt-color.pf-log-warning{color:#e28a0d !important}.txt-color.txt-color-danger{color:#a52521 !important}.bg-color.bg-color-blue{background-color:#428bca !important}.bg-color.bg-color-blueLight{background-color:#92a2a8 !important}.bg-color.bg-color-blueDark{background-color:#4c4f53 !important}.bg-color.bg-color-green{background-color:#5cb85c !important}.bg-color.bg-color-greenLight{background-color:#71843f !important}.bg-color.bg-color-greenDark{background-color:#496949 !important}.bg-color.bg-color-red{background-color:#d9534f !important}.bg-color.bg-color-yellow{background-color:#b09b5b !important}.bg-color.bg-color-orange{background-color:#e28a0d !important}.bg-color.bg-color-orangeDark{background-color:#c2760c !important}.bg-color.bg-color-pink{background-color:#e06fdf !important}.bg-color.bg-color-pinkDark{background-color:#a8829f !important}.bg-color.bg-color-purple{background-color:#6e587a !important}.bg-color.bg-color-darken{background-color:#404040 !important}.bg-color.bg-color-lighten{background-color:#d5e7ec !important}.bg-color.bg-color-white{background-color:#fff !important}.bg-color.bg-color-grayDark{background-color:#525252 !important}.bg-color.bg-color-magenta{background-color:#6e3671 !important}.bg-color.bg-color-teal{background-color:#568a89 !important}.bg-color.bg-color-redLight{background-color:#a65858 !important}body{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}a{color:#477372}a:hover{color:#6caead}em{font-style:italic}em.pf-brand{text-transform:uppercase}.pf-loading-overlay{position:absolute;width:100%;height:100%;top:0;left:0;opacity:0;background:#2b2b2b;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.pf-loading-overlay .pf-loading-overlay-wrapper{width:25px;height:25px;margin:auto;text-align:center;position:absolute;top:0;left:0;bottom:0;right:0}.pf-loading-overlay .pf-loading-overlay-wrapper i{padding:3px}.sb-left .list-group-item{-webkit-box-shadow:inset -10px 0px 5px -5px rgba(0,0,0,0.4);box-shadow:inset -10px 0px 5px -5px rgba(0,0,0,0.4)}.sb-right .list-group-item{-webkit-box-shadow:inset 10px 0px 5px -5px rgba(0,0,0,0.4);box-shadow:inset 10px 0px 5px -5px rgba(0,0,0,0.4)}.pf-map-type-global{color:#568a89}.pf-map-type-alliance{color:#428bca}.pf-map-type-private{color:#5cb85c}#pf-map-module{margin:20px 10px 0 10px}#pf-map-module #pf-map-tabs .pf-map-type-tab-default{border-top:2px solid transparent}#pf-map-module #pf-map-tabs .pf-map-type-tab-global{border-top:2px solid #5cb85c}#pf-map-module #pf-map-tabs .pf-map-type-tab-alliance{border-top:2px solid #428bca}#pf-map-module #pf-map-tabs .pf-map-type-tab-private{border-top:2px solid #568a89}.pf-map-content-row{margin:10px 0 0 0;padding-bottom:40px}.pf-map-content-row .pf-module{font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;background:rgba(60,63,65,0.3);padding:10px;width:100%;margin-bottom:10px;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.pf-system-effect{display:none;cursor:default;color:#adadad}.pf-system-effect-magnetar{color:#e06fdf;display:inline-block}.pf-system-effect-redgiant{color:#d9534f;display:inline-block}.pf-system-effect-pulsar{color:#428bca;display:inline-block}.pf-system-effect-wolfryet{color:#e28a0d;display:inline-block}.pf-system-effect-cataclysmic{color:#ffb;display:inline-block}.pf-system-effect-blackhole{color:#1d1d1d;display:inline-block}.pf-system-info-rally .pf-system-head{background-color:#782d77;background-image:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjEuMCIgeTE9IjEuMCIgeDI9IjAuMCIgeTI9IjAuMCI+PHN0b3Agb2Zmc2V0PSIyNSUiIHN0b3AtY29sb3I9IiMzZTI2NGUiLz48c3RvcCBvZmZzZXQ9IjI1JSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iIzNlMjY0ZSIvPjxzdG9wIG9mZnNldD0iNzUlIiBzdG9wLWNvbG9yPSIjM2UyNjRlIi8+PHN0b3Agb2Zmc2V0PSI3NSUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4wIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjMDAwMDAwIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');background-size:100%;background-image:-moz-linear-gradient(135deg, #3e264e 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,#3e264e 50%,#3e264e 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0));background-image:-webkit-linear-gradient(135deg, #3e264e 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,#3e264e 50%,#3e264e 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0));background-image:linear-gradient(-45deg, #3e264e 25%,rgba(0,0,0,0) 25%,rgba(0,0,0,0) 50%,#3e264e 50%,#3e264e 75%,rgba(0,0,0,0) 75%,rgba(0,0,0,0));background-size:25px 25px;-webkit-animation:move 3s linear infinite;-moz-animation:move 3s linear infinite;-ms-animation:move 3s linear infinite;animation:move 3s linear infinite}.pf-system-security-0-0{color:#be0000}.pf-system-security-0-1{color:#ab2600}.pf-system-security-0-2{color:#be3900}.pf-system-security-0-3{color:#c24e02}.pf-system-security-0-4{color:#ab5f00}.pf-system-security-0-5{color:#bebe00}.pf-system-security-0-6{color:#73bf26}.pf-system-security-0-7{color:#00bf00}.pf-system-security-0-8{color:#00bf39}.pf-system-security-0-9{color:#39bf99}.pf-system-security-1-0{color:#28c0bf}.pf-system-sec{margin-right:5px;cursor:-moz-grab;cursor:-webkit-grab}.pf-system-sec-highSec{color:#5cb85c}.pf-system-sec-lowSec{color:#e28a0d}.pf-system-sec-nullSec{color:#d9534f}.pf-system-sec-high{color:#d9534f}.pf-system-sec-mid{color:#e28a0d}.pf-system-sec-low{color:#428bca}.pf-system-status-friendly{border-color:#428bca !important;color:#428bca}.pf-system-status-occupied{border-color:#e28a0d !important;color:#e28a0d}.pf-system-status-hostile{border-color:#d9534f !important;color:#d9534f}.pf-system-status-empty{border-color:#5cb85c !important;color:#5cb85c}.pf-system-status-unscanned{border-color:#568a89 !important;color:#568a89}.pf-system-effect-dialog-wrapper .table,.pf-jump-info-dialog .table{margin:15px 0}.pf-system-effect-dialog-wrapper .table td,.pf-jump-info-dialog .table td{text-transform:capitalize}.pf-fake-connection{box-sizing:content-box;display:inline-block;width:70px;height:4px;margin-right:5px;border-top:2px solid #63676a;border-bottom:2px solid #63676a;background-color:#3c3f41;position:relative;font-family:"Oxygen","Helvetica Neue",Helvetica,Arial,sans-serif}.pf-fake-connection.pf-map-connection-stargate{background-color:#63676a;border-color:#63676a}.pf-fake-connection.pf-map-connection-jumpbridge{background-color:#6caead;border-color:#3c3f41;background:repeating-linear-gradient(to right, #6caead, #6caead 10px, #3c3f41 10px, #3c3f41 20px)}.pf-fake-connection.pf-map-connection-wh-eol{border-color:#d747d6}.pf-fake-connection.pf-map-connection-wh-reduced{background-color:#e28a0d}.pf-fake-connection.pf-map-connection-wh-critical{background-color:#a52521}.pf-fake-connection.pf-map-connection-frig{border-style:dashed;border-left:none;border-right:none}.pf-fake-connection.pf-map-connection-frig:after{content:'frig';background-color:#e28a0d;color:#1d1d1d;padding:0px 3px;position:absolute;left:25px;top:-6px;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.pf-fake-connection.pf-map-connection-preserve-mass:after{content:'save mass';background-color:#a52521;color:#eaeaea;padding:0px 3px;position:absolute;left:9px;top:-6px;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.tooltip-inner{color:#5cb85c;background-color:#3c3f41;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;padding:5px 5px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.4);box-shadow:0 6px 12px rgba(0,0,0,0.4)}.tooltip.top .tooltip-arrow{border-top-color:#63676a}.tooltip.right .tooltip-arrow{border-right-color:#63676a}.tooltip.bottom .tooltip-arrow{border-bottom-color:#63676a}.tooltip.left .tooltip-arrow{border-left-color:#63676a}#pf-head{margin-bottom:0px}#pf-head a:focus{color:#477372}#pf-head a:hover{text-decoration:none}#pf-head a:hover .badge{color:#6caead}#pf-head i{margin-right:2px}#pf-head .pf-head-menu .pf-head-menu-logo{width:18px;height:18px;display:inline-block;float:left;background:url('data:image/png;base64,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')}#pf-head .pf-head-menu:hover .pf-head-menu-logo{background:url('data:image/png;base64,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')}#pf-head .pf-head-menu:focus .pf-head-menu-logo{background:url('data:image/png;base64,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')}#pf-head .badge{background-color:#3c3f41;color:#adadad}#pf-head .pf-head-active-user,#pf-head .pf-head-current-location{display:none}#pf-head .pf-head-active-user .badge,#pf-head .pf-head-current-location .badge{-webkit-transition:color 0.3s ease-out;transition:color 0.3s ease-out}#pf-head .pf-head-program-status{cursor:pointer}#pf-footer{position:absolute;bottom:0;left:0;width:100%;margin:0;background:rgba(60,63,65,0.3)}#pf-footer a{font-family:"Oxygen" Georgia,"Times New Roman",Times,serif;color:#375959}#pf-footer a:hover{color:#477372;text-decoration:none}@-webkit-keyframes move{0%{background-position:0 0}100%{background-position:50px 50px}}@-moz-keyframes move{0%{background-position:0 0}100%{background-position:50px 50px}}@-ms-keyframes move{0%{background-position:0 0}100%{background-position:50px 50px}}@keyframes move{0%{background-position:0 0}100%{background-position:50px 50px}}@-webkit-keyframes bounce{0%, 20%, 50%, 80%, 100%{-webkit-transform:translateY(0)}40%{-webkit-transform:translateY(-8px)}60%{-webkit-transform:translateY(-4px)}}@keyframes bounce{0%, 20%, 50%, 80%, 100%{transform:translateY(0)}40%{transform:translateY(-8px)}60%{transform:translateY(-4px)}}.pf-map-tab-content .pf-map-wrapper{position:relative;width:100%;max-width:2515px;height:550px;overflow:auto;padding:5px;background:rgba(43,43,43,0.93);box-shadow:inset -3px 3px 10px 0 rgba(0,0,0,0.3);border-bottom-right-radius:5px;border-bottom-left-radius:5px;border-width:1px;border-style:solid;border-color:#adadad}.pf-map-overlay{position:absolute;display:none;z-index:10000;width:36px;height:36px;bottom:23px;right:10px;background:rgba(0,0,0,0.2);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.pf-grid-small{background:url('data:image/png;base64,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') !important}.pf-map{width:2500px;height:520px;position:relative;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}.pf-map ._jsPlumb_overlay{opacity:1;pointer-events:none}.pf-map ._jsPlumb_hover._jsPlumb_overlay{opacity:0}.pf-map ._jsPlumb_hover:not(._jsPlumb_overlay){-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-delay:0.5s;animation-delay:0.5s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-timing-function:linear;animation-timing-function:linear;animation-iteration-count:infinite;-webkit-animation-iteration-count:infinite;-webkit-animation-name:bounce;animation-name:bounce}.pf-map ._jsPlumb_target_hover,.pf-map ._jsPlumb_source_hover{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-delay:0.5s;animation-delay:0.5s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-timing-function:linear;animation-timing-function:linear;animation-iteration-count:infinite;-webkit-animation-iteration-count:infinite;-webkit-animation-name:bounce;animation-name:bounce;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.3);box-shadow:0 6px 12px rgba(0,0,0,0.3)}.pf-map .pf-system{position:absolute;min-width:60px;height:auto;background-color:#313335;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;z-index:100;will-change:all, transform;border-width:2px;border-style:solid;border-color:#63676a;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-webkit-transition:border-color 0.5s ease-out,box-shadow 0.2s ease-out;transition:border-color 0.5s ease-out,box-shadow 0.2s ease-out;-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}.pf-map .pf-system:hover{-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.3);box-shadow:0 6px 12px rgba(0,0,0,0.3);-moz-transform:translate3d(0, -2px, 0);-ms-transform:translate3d(0, -2px, 0);-webkit-transform:translate3d(0, -2px, 0);transform:translate3d(0, -2px, 0)}.pf-map .pf-system .pf-system-head{padding:0px 3px 0px 3px;cursor:pointer;font-family:Arial;font-weight:bold}.pf-map .pf-system .pf-system-head .pf-system-head-name{border:none;display:inline-block;min-width:41px;color:#adadad;margin-right:2px}.pf-map .pf-system .pf-system-head .fa-lock{display:none}.pf-map .pf-system .pf-system-head .pf-system-head-expand{margin-left:2px;color:#63676a;display:none}.pf-map .pf-system .pf-system-body{height:0px;width:100%;overflow:hidden;cursor:-moz-grab;cursor:-webkit-grab;cursor:grab;padding:0 2px;white-space:nowrap;display:none;border-top-width:1px;border-top-style:dashed;border-top-color:#63676a}.pf-map .pf-system .pf-system-body .pf-system-body-item{color:#63676a;font-size:10px}.pf-map .pf-system .pf-system-body .pf-system-body-item .pf-system-body-right{text-overflow:ellipsis;float:right;color:#568a89;display:none}.pf-map .pf-system .pf-system-body .pf-system-body-item .pf-user-status{font-size:7px}.pf-map .pf-system .pf-system-body .pf-system-body-item .pf-user-status-corp{color:#5cb85c}.pf-map .pf-system .pf-system-body .pf-system-body-item .pf-user-status-ally{color:#428bca}.pf-map .pf-system .tooltip.in{opacity:1}.pf-map .pf-system .tooltip .tooltip-inner{color:#313335;background-color:#adadad;padding:3px 3px}.pf-map .pf-system-active:not(.pf-map-endpoint-source):not(.pf-map-endpoint-target){-webkit-box-shadow:#ffb 0px 0px 8px 0px;box-shadow:#ffb 0px 0px 8px 0px}.pf-map .pf-system-selected:not(.pf-map-endpoint-source):not(.pf-map-endpoint-target){-webkit-box-shadow:#58100d 0px 0px 8px 0px;box-shadow:#58100d 0px 0px 8px 0px}.pf-map .pf-system-selected:not(.pf-map-endpoint-source):not(.pf-map-endpoint-target) .pf-system-head,.pf-map .pf-system-selected:not(.pf-map-endpoint-source):not(.pf-map-endpoint-target) .pf-system-body{background-color:#58100d}.pf-map .pf-system-locked .pf-system-sec{cursor:default !important}.pf-map .pf-system-locked .pf-system-body{cursor:default !important}.pf-map .pf-system-locked .fa-lock{color:#63676a !important;display:inline-block !important}.pf-map .pf-map-endpoint-source,.pf-map .pf-map-endpoint-target{z-index:50}.pf-map .pf-map-endpoint-source svg,.pf-map .pf-map-endpoint-target svg{width:10;height:10}.pf-map .pf-map-endpoint-source svg circle,.pf-map .pf-map-endpoint-target svg circle{-webkit-transition:stroke 0.2s ease-out;transition:stroke 0.2s ease-out}.pf-map .pf-map-endpoint-source svg *,.pf-map .pf-map-endpoint-target svg *{stroke:#63676a;stroke-width:2;fill:#3c3f41;cursor:pointer}.pf-map .pf-map-endpoint-source svg *:hover,.pf-map .pf-map-endpoint-target svg *:hover{stroke:#eaeaea}.pf-map .pf-map-endpoint-source:hover circle,.pf-map .pf-map-endpoint-target:hover circle{stroke:#eaeaea !important}.pf-map svg._jsPlumb_connector{cursor:pointer;stroke-linecap:round}.pf-map svg._jsPlumb_connector path{-webkit-transition:stroke 0.2s ease-out;transition:stroke 0.2s ease-out}.pf-map svg._jsPlumb_connector path:not(:first-child){stroke:#3c3f41}.pf-map svg._jsPlumb_connector path:first-child{stroke:#63676a}.pf-map svg._jsPlumb_connector:hover path:first-child{stroke:#eaeaea}.pf-map svg.pf-map-connection-stargate path:first-child{stroke:#63676a}.pf-map svg.pf-map-connection-stargate path:not(:first-child){stroke:#63676a}.pf-map svg.pf-map-connection-stargate:hover path:first-child{stroke:#eaeaea}.pf-map svg.pf-map-connection-jumpbridge path:first-child{stroke:rgba(255,255,255,0)}.pf-map svg.pf-map-connection-jumpbridge path:not(:first-child){stroke:#568a89}.pf-map svg.pf-map-connection-jumpbridge:hover path:first-child{stroke:rgba(255,255,255,0)}.pf-map svg.pf-map-connection-jumpbridge:hover path:not(:first-child){stroke:#eaeaea}.pf-map svg.pf-map-connection-wh-eol path:first-child{stroke:#d747d6}.pf-map svg.pf-map-connection-wh-eol:hover path:first-child{stroke:#eaeaea}.pf-map svg.pf-map-connection-wh-reduced path:not(:first-child){stroke:#e28a0d}.pf-map svg.pf-map-connection-wh-critical path:not(:first-child){stroke:#a52521}.pf-map .pf-map-connection-overlay{padding:1px 4px;font-size:11px;z-index:1020;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.4);box-shadow:0 6px 12px rgba(0,0,0,0.4)}.pf-map .frig{background-color:#f0ad4e;color:#1d1d1d}.pf-map .mass{background-color:#a52521;color:#eaeaea}.ui-dialog-content label{min-width:60px}.dropdown-menu{font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif;z-index:1020}.dropdown-menu i{width:20px}.pf-system-tooltip-inner{color:#adadad;padding:2px 4px;min-width:25px;-webkit-transition:color 0.2s ease-out;transition:color 0.2s ease-out}.pf-system-info-module .breadcrumb{font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}.pf-system-info-module .breadcrumb li{text-transform:capitalize}.pf-system-info-module .pf-system-info-table{padding-right:7px;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}.pf-system-info-module .popover table{color:#adadad;font-size:10px}.pf-system-info-module .popover table td{padding:0 5px}.pf-system-info-module .pf-system-info-graph-kills{width:100%;height:150px;padding:10px 0;position:relative}.pf-system-info-module .pf-system-route-table{font-size:10px}.pf-sig-table-module .pf-sig-table{font-size:10px}.pf-sig-table-module .pf-sig-table .pf-sig-table-edit-name-input{text-transform:uppercase}.pf-sig-table-module .pf-sig-table th.pf-sig-table-counter{padding-right:20px !important}.pf-sig-table-module .pf-sig-table .pf-sig-table-counter{text-align:right}.pf-sig-table-module .pf-sig-table .pf-sig-table-counter .pf-digit-counter-small{width:20px;display:inline-block;font-size:10px}.pf-sig-table-module .pf-sig-table .pf-sig-table-counter .pf-digit-counter-large{width:26px;display:inline-block;font-size:10px}.pf-sig-table-module .pf-sig-table .popover-content table{border-spacing:0}.pf-sig-table-module .pf-sig-table .popover-content table tr{background-color:#3c3f41}.pf-sig-table-module .pf-sig-table .popover-content table tr:not(:last-child) td{border-bottom:1px solid #313335}.pf-sig-table-module .pf-sig-table .popover-content table tr td{padding:2px 5px}.pf-sig-table-module .pf-sig-table .popover-content table tr td:first-child{color:#63676a}.pf-sig-table-module .pf-sig-table .popover-content table tr td:last-child{color:#adadad}.pf-sig-table-module .pf-sig-table-tools{height:45px}.pf-sig-table-module .pf-sig-table-tools .btn:not(:last-child),.pf-sig-table-module .pf-sig-table-tools button.DTTT_button:not(:last-child),.pf-sig-table-module .pf-sig-table-tools div.DTTT_button:not(:last-child),.pf-sig-table-module .pf-sig-table-tools a.DTTT_button:not(:last-child){margin-right:10px}.pf-sig-table-module .pf-sig-table-tools-action{height:75px;display:none}input,select{background-color:#313335;color:#adadad;border:1px solid #63676a;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}input:focus,select:focus{border-color:#568a89}.pf-icon{display:inline-block}.pf-icon-dotlan{background:url("../img/icons/dotlan_logo.png");width:17px;height:17px;opacity:0.8;margin:-5px 10px 0 10px}.modal-content .dataTable,.modal-content .table{font-size:10px;font-family:"Oxygen Bold","Helvetica Neue",Helvetica,Arial,sans-serif}#pf-manual-scrollspy{position:relative;height:500px;overflow:auto}.pf-system-dialog-select{width:270px !important}.pf-dialog-dynamic-area{padding:10px;min-height:100px;position:relative;background-color:#313335;overflow:hidden;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.pf-log-graph{height:100px;width:100%}
diff --git a/public/templates/modules/map_dialog.html b/public/templates/modules/map_dialog.html
index 9eaa97bb..638c6a65 100644
--- a/public/templates/modules/map_dialog.html
+++ b/public/templates/modules/map_dialog.html
@@ -19,7 +19,7 @@
@@ -27,7 +27,7 @@
diff --git a/public/templates/modules/system_dialog.html b/public/templates/modules/system_dialog.html
index e6252089..d920fab0 100644
--- a/public/templates/modules/system_dialog.html
+++ b/public/templates/modules/system_dialog.html
@@ -1,21 +1,57 @@