BackupGuardFree - Version 1.0.5

Version Notes

Fully functional stable version

Download this release

Release Info

Developer Backup Guard
Extension BackupGuardFree
Version 1.0.5
Comparing to
See all releases


Code changes from version 1.0.4 to 1.0.5

Files changed (26) hide show
  1. app/code/community/BackupGuard/BackupGuardFree/com/config/config.magento.php +11 -2
  2. app/code/community/BackupGuard/BackupGuardFree/com/config/config.php +35 -6
  3. app/code/community/BackupGuard/BackupGuardFree/com/core/SGBoot.php +14 -19
  4. app/code/community/BackupGuard/BackupGuardFree/com/core/SGPing.php +37 -0
  5. app/code/community/BackupGuard/BackupGuardFree/com/core/backup/SGBackup.php +834 -727
  6. app/code/community/BackupGuard/BackupGuardFree/com/core/backup/SGBackupDatabase.php +15 -5
  7. app/code/community/BackupGuard/BackupGuardFree/com/core/backup/SGBackupFiles.php +31 -20
  8. app/code/community/BackupGuard/BackupGuardFree/com/core/backup/SGIBackupDelegate.php +1 -1
  9. app/code/community/BackupGuard/BackupGuardFree/com/core/exception/.DS_Store +0 -0
  10. app/code/community/BackupGuard/BackupGuardFree/com/core/exception/SGException.php +9 -1
  11. app/code/community/BackupGuard/BackupGuardFree/com/core/exception/SGExceptionHandler.php +0 -22
  12. app/code/community/BackupGuard/BackupGuardFree/com/core/functions.php +127 -119
  13. app/code/community/BackupGuard/BackupGuardFree/com/lib/SGArchive.php +53 -50
  14. app/code/community/BackupGuard/BackupGuardFree/com/lib/SGMysqldump.php +54 -48
  15. app/design/adminhtml/default/default/layout/backupguardfree.xml +2 -3
  16. app/design/adminhtml/default/default/template/backupguardfree/backups.phtml +30 -16
  17. app/design/adminhtml/default/default/template/backupguardfree/header.phtml +6 -1
  18. package.xml +4 -4
  19. skin/adminhtml/base/default/css/BackupGuardFree/.DS_Store +0 -0
  20. skin/adminhtml/base/default/css/BackupGuardFree/bgstyle.less.css +7505 -0
  21. skin/adminhtml/base/default/css/BackupGuardFree/bootstrap.css +2 -2
  22. skin/adminhtml/base/default/css/BackupGuardFree/fonts.css +9 -9
  23. skin/adminhtml/base/default/css/BackupGuardFree/main.css +5 -5
  24. skin/adminhtml/base/default/css/BackupGuardFree/sgstyles.less +0 -5
  25. skin/adminhtml/base/default/css/BackupGuardFree/spinner.css +1 -1
  26. skin/adminhtml/base/default/js/BackupGuardFree/main.js +9 -6
app/code/community/BackupGuard/BackupGuardFree/com/config/config.magento.php CHANGED
@@ -2,8 +2,10 @@
2
  $m = new Mage();
3
  $version = $m->getVersion();
4
 
 
 
5
  define('SG_ENV_VERSION', $version);
6
- define('SG_ENV_ADAPTER', 'Magento');
7
  define('SG_ENV_DB_PREFIX', (string)Mage::getConfig()->getTablePrefix());
8
 
9
  require_once(dirname(__FILE__).'/config.php');
@@ -19,6 +21,7 @@ define('SG_MAIL_RESTORE_TEMPLATE', 'backupguard_restore');
19
 
20
  //Backup
21
  define('SG_APP_ROOT_DIRECTORY', Mage::getBaseDir().'/');
 
22
  $excludes = array(
23
  'app/code/community/BackupGuard/',
24
  'app/etc/modules/BackupGuard_BackupGuardFree.xml',
@@ -31,6 +34,7 @@ $excludes = array(
31
  'app/locale/en_US/template/email/backupguard_backup_success.html',
32
  'app/locale/en_US/template/email/backupguard_restore_fail.html',
33
  'app/locale/en_US/template/email/backupguard_restore_success.html',
 
34
  'skin/adminhtml/base/default/css/BackupGuardFree/',
35
  'skin/adminhtml/base/default/css/BackupGuard/',
36
  'skin/adminhtml/base/default/js/BackupGuardFree/',
@@ -42,8 +46,13 @@ $excludes = array(
42
  define('SG_BACKUP_FILE_PATHS_EXCLUDE', implode(',', $excludes));
43
  define('SG_BACKUP_DIRECTORY', SG_APP_PATH.'../sg_backups/'); //backups will be stored here
44
 
 
 
 
 
 
45
  //Storage
46
  define('SG_STORAGE_UPLOAD_CRON', '');
47
 
48
  //The following constants can be modified at run-time
49
- define('SG_BACKUP_FILE_PATHS', 'app,js,lib,media,skin,var'); //fix this after development
2
  $m = new Mage();
3
  $version = $m->getVersion();
4
 
5
+ define('SG_ENV_WORDPRESS', 'Wordpress');
6
+ define('SG_ENV_MAGENTO', 'Magento');
7
  define('SG_ENV_VERSION', $version);
8
+ define('SG_ENV_ADAPTER', SG_ENV_MAGENTO);
9
  define('SG_ENV_DB_PREFIX', (string)Mage::getConfig()->getTablePrefix());
10
 
11
  require_once(dirname(__FILE__).'/config.php');
21
 
22
  //Backup
23
  define('SG_APP_ROOT_DIRECTORY', Mage::getBaseDir().'/');
24
+
25
  $excludes = array(
26
  'app/code/community/BackupGuard/',
27
  'app/etc/modules/BackupGuard_BackupGuardFree.xml',
34
  'app/locale/en_US/template/email/backupguard_backup_success.html',
35
  'app/locale/en_US/template/email/backupguard_restore_fail.html',
36
  'app/locale/en_US/template/email/backupguard_restore_success.html',
37
+ 'media/sg_symlinks/',
38
  'skin/adminhtml/base/default/css/BackupGuardFree/',
39
  'skin/adminhtml/base/default/css/BackupGuard/',
40
  'skin/adminhtml/base/default/js/BackupGuardFree/',
46
  define('SG_BACKUP_FILE_PATHS_EXCLUDE', implode(',', $excludes));
47
  define('SG_BACKUP_DIRECTORY', SG_APP_PATH.'../sg_backups/'); //backups will be stored here
48
 
49
+ define('SG_PING_FILE_PATH', SG_BACKUP_DIRECTORY.'ping.json');
50
+
51
+ define('SG_SYMLINK_URL', Mage::getBaseUrl('media').'sg_symlinks/');
52
+ define('SG_SYMLINK_PATH', Mage::getBaseDir('media').'/sg_symlinks/');
53
+
54
  //Storage
55
  define('SG_STORAGE_UPLOAD_CRON', '');
56
 
57
  //The following constants can be modified at run-time
58
+ define('SG_BACKUP_FILE_PATHS', 'app,js,lib,media,skin,var'); //fix this after development
app/code/community/BackupGuard/BackupGuardFree/com/config/config.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
  //Version
3
- define('SG_VERSION', '1.0.0');
4
 
5
  //Paths
6
  define('SG_APP_PATH', realpath(dirname(__FILE__).'/../').'/');
@@ -23,6 +23,17 @@ define('SG_LOG_LEVEL_LOW', 4);
23
  define('SG_BACKUP_LOG_POS_START', 1);
24
  define('SG_BACKUP_LOG_POS_END', 2);
25
 
 
 
 
 
 
 
 
 
 
 
 
26
  //Backup
27
  define('SG_ACTION_STATUS_CREATED', 0);
28
  define('SG_ACTION_STATUS_IN_PROGRESS_DB', 1);
@@ -35,11 +46,29 @@ define('SG_ACTION_STATUS_ERROR', 7);
35
  define('SG_ACTION_TYPE_BACKUP', 1);
36
  define('SG_ACTION_TYPE_RESTORE', 2);
37
  define('SG_ACTION_TYPE_UPLOAD', 3);
38
- define('SG_ACTION_PROGRESS_UPDATE_INTERVAL', 1); //in %
39
  define('SG_BACKUP_DATABASE_INSERT_LIMIT', 10000);
40
- define('SG_BACKUP_DWONLOAD_TYPE_SGBP', 1);
41
- define('SG_BACKUP_DWONLOAD_TYPE_BACKUP_LOG', 2);
42
- define('SG_BACKUP_DWONLOAD_TYPE_RESTORE_LOG', 3);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
 
44
  //The following constants can be modified at run-time
45
  define('SG_ACTION_BACKUP_FILES_AVAILABLE', 1);
@@ -49,4 +78,4 @@ define('SG_BACKUP_UPLOAD_TO_STORAGES', ''); //list of storage ids separated by c
49
 
50
  //Database tables
51
  define('SG_ACTION_TABLE_NAME', SG_ENV_DB_PREFIX.'sg_action');
52
- define('SG_CONFIG_TABLE_NAME', SG_ENV_DB_PREFIX.'sg_config');
1
  <?php
2
  //Version
3
+ define('SG_VERSION', '1.1.1');
4
 
5
  //Paths
6
  define('SG_APP_PATH', realpath(dirname(__FILE__).'/../').'/');
23
  define('SG_BACKUP_LOG_POS_START', 1);
24
  define('SG_BACKUP_LOG_POS_END', 2);
25
 
26
+ //Backup timeout in seconds
27
+ define('SG_BACKUP_TIMEOUT', 180);
28
+
29
+ //Ping data update frequency
30
+ define('SG_PING_DATE_UPDATE_FREQUENCY', 3);
31
+
32
+ //Backup file extension
33
+ define('SGBP_EXT', 'sgbp');
34
+
35
+ define('SG_NOTICE_EXECUTION_TIMEOUT', 'timeoutError');
36
+
37
  //Backup
38
  define('SG_ACTION_STATUS_CREATED', 0);
39
  define('SG_ACTION_STATUS_IN_PROGRESS_DB', 1);
46
  define('SG_ACTION_TYPE_BACKUP', 1);
47
  define('SG_ACTION_TYPE_RESTORE', 2);
48
  define('SG_ACTION_TYPE_UPLOAD', 3);
49
+ define('SG_ACTION_PROGRESS_UPDATE_INTERVAL', 3); //in %
50
  define('SG_BACKUP_DATABASE_INSERT_LIMIT', 10000);
51
+ define('SG_BACKUP_DOWNLOAD_TYPE_SGBP', 1);
52
+ define('SG_BACKUP_DOWNLOAD_TYPE_BACKUP_LOG', 2);
53
+ define('SG_BACKUP_DOWNLOAD_TYPE_RESTORE_LOG', 3);
54
+
55
+ //Mail
56
+ define('SG_MAIL_BACKUP_SUCCESS_SUBJECT', 'Backup Succeeded');
57
+ define('SG_MAIL_BACKUP_FAIL_SUBJECT', 'Backup Failed');
58
+ define('SG_MAIL_RESTORE_SUCCESS_SUBJECT', 'Restore Succeeded');
59
+ define('SG_MAIL_RESTORE_FAIL_SUBJECT', 'Restore Failed');
60
+
61
+ //Storage
62
+ define('SG_STORAGE_FTP', 1);
63
+ define('SG_STORAGE_DROPBOX', 2);
64
+ define('SG_STORAGE_GOOGLE_DRIVE', 3);
65
+ define('SG_STORAGE_GOOGLE_DRIVE_CLIENT_ID', '1030123017859-vfdlqkjhiuuu5n36pbov93v9ruo6jpj5.apps.googleusercontent.com');
66
+ define('SG_STORAGE_GOOGLE_DRIVE_SECRET', 'oUcZwC17q5ZSbYahnQkGYpyH');
67
+ define('SG_STORAGE_GOOGLE_DRIVE_REDIRECT_URI', 'https://backup-guard.com/gdrive/');
68
+ define('SG_STORAGE_DROPBOX_KEY', 'n3yhajm64h88m9t');
69
+ define('SG_STORAGE_DROPBOX_SECRET', 's8crjkls7f9wqtd');
70
+ define('SG_STORAGE_DROPBOX_CLIENT_ID', 'backup-guard');
71
+ define('SG_STORAGE_DROPBOX_REDIRECT_URI', 'https://backup-guard.com/dropbox/');
72
 
73
  //The following constants can be modified at run-time
74
  define('SG_ACTION_BACKUP_FILES_AVAILABLE', 1);
78
 
79
  //Database tables
80
  define('SG_ACTION_TABLE_NAME', SG_ENV_DB_PREFIX.'sg_action');
81
+ define('SG_CONFIG_TABLE_NAME', SG_ENV_DB_PREFIX.'sg_config');
app/code/community/BackupGuard/BackupGuardFree/com/core/SGBoot.php CHANGED
@@ -1,19 +1,23 @@
1
  <?php
 
2
  require_once(SG_CORE_PATH.'functions.php');
 
3
  require_once(SG_DATABASE_PATH.'SGDatabase.php');
4
- require_once(SG_EXCEPTION_PATH.'SGExceptionHandler.php');
5
  require_once(SG_CORE_PATH.'SGConfig.php');
6
  @include_once(SG_SCHEDULE_PATH.'SGSchedule.php');
7
 
8
  class SGBoot
9
  {
 
 
10
  public static function init()
11
  {
 
 
 
12
  //remove execution time limit
13
- set_time_limit(0);
14
 
15
- //set default exception handler
16
- SGExceptionHandler::init();
17
 
18
  //load all config variables from database
19
  SGConfig::getAll();
@@ -45,17 +49,17 @@ class SGBoot
45
  throw new SGExceptionDatabaseError('Could not execute query');
46
  }
47
  $res = $sgdb->query('CREATE TABLE `'.SG_CONFIG_TABLE_NAME.'` (
48
- `ckey` varchar(255) NOT NULL,
49
  `cvalue` varchar(255) NOT NULL,
50
  PRIMARY KEY (`ckey`)
51
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;');
52
  if ($res===false)
53
  {
54
  throw new SGExceptionDatabaseError('Could not execute query');
55
  }
56
 
57
  //populate config table
58
- $res = $sgdb->query("INSERT INTO `".SG_CONFIG_TABLE_NAME."` VALUES
59
  ('SG_BACKUP_SYNCHRONOUS_STORAGE_UPLOAD','1'),
60
  ('SG_NOTIFICATIONS_ENABLED','0'),
61
  ('SG_NOTIFICATIONS_EMAIL_ADDRESS',''),
@@ -81,20 +85,11 @@ class SGBoot
81
  `start_date` datetime NOT NULL,
82
  `update_date` datetime DEFAULT NULL,
83
  PRIMARY KEY (`id`)
84
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
85
  if ($res===false)
86
  {
87
  throw new SGExceptionDatabaseError('Could not execute query');
88
  }
89
-
90
- //try to create cron job for storage uploadings
91
- /*if (self::isFeatureAvailable('SCHEDULE'))
92
- {
93
- if (SGSchedule::isCronAvailable() && SGSchedule::create(SG_STORAGE_UPLOAD_CRON))
94
- {
95
- SGConfig::set('SG_BACKUP_SYNCHRONOUS_STORAGE_UPLOAD', 0);
96
- }
97
- }*/
98
  }
99
  catch (SGException $exception)
100
  {
@@ -182,7 +177,7 @@ class SGBoot
182
  //check PHP version
183
  if (version_compare(PHP_VERSION, '5.3.0', '<'))
184
  {
185
- throw new SGExceptionNotFound('PHP >=5.3.0 version required.');
186
  }
187
 
188
  //check ZLib library
@@ -191,4 +186,4 @@ class SGBoot
191
  throw new SGExceptionNotFound('ZLib extension is not loaded.');
192
  }
193
  }
194
- }
1
  <?php
2
+ require_once(SG_EXCEPTION_PATH.'SGException.php');
3
  require_once(SG_CORE_PATH.'functions.php');
4
+ require_once(SG_CORE_PATH.'SGPing.php');
5
  require_once(SG_DATABASE_PATH.'SGDatabase.php');
 
6
  require_once(SG_CORE_PATH.'SGConfig.php');
7
  @include_once(SG_SCHEDULE_PATH.'SGSchedule.php');
8
 
9
  class SGBoot
10
  {
11
+ public static $executionTimeLimit = 0;
12
+
13
  public static function init()
14
  {
15
+ //get current execution time limit
16
+ self::$executionTimeLimit = ini_get('max_execution_time');
17
+
18
  //remove execution time limit
19
+ @set_time_limit(0);
20
 
 
 
21
 
22
  //load all config variables from database
23
  SGConfig::getAll();
49
  throw new SGExceptionDatabaseError('Could not execute query');
50
  }
51
  $res = $sgdb->query('CREATE TABLE `'.SG_CONFIG_TABLE_NAME.'` (
52
+ `ckey` varchar(100) NOT NULL,
53
  `cvalue` varchar(255) NOT NULL,
54
  PRIMARY KEY (`ckey`)
55
+ );');
56
  if ($res===false)
57
  {
58
  throw new SGExceptionDatabaseError('Could not execute query');
59
  }
60
 
61
  //populate config table
62
+ $res = $sgdb->query("INSERT INTO `".SG_CONFIG_TABLE_NAME."` VALUES
63
  ('SG_BACKUP_SYNCHRONOUS_STORAGE_UPLOAD','1'),
64
  ('SG_NOTIFICATIONS_ENABLED','0'),
65
  ('SG_NOTIFICATIONS_EMAIL_ADDRESS',''),
85
  `start_date` datetime NOT NULL,
86
  `update_date` datetime DEFAULT NULL,
87
  PRIMARY KEY (`id`)
88
+ );");
89
  if ($res===false)
90
  {
91
  throw new SGExceptionDatabaseError('Could not execute query');
92
  }
 
 
 
 
 
 
 
 
 
93
  }
94
  catch (SGException $exception)
95
  {
177
  //check PHP version
178
  if (version_compare(PHP_VERSION, '5.3.0', '<'))
179
  {
180
+ die('PHP >=5.3.0 version required.');
181
  }
182
 
183
  //check ZLib library
186
  throw new SGExceptionNotFound('ZLib extension is not loaded.');
187
  }
188
  }
189
+ }
app/code/community/BackupGuard/BackupGuardFree/com/core/SGPing.php ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SGPing
4
+ {
5
+ public static $lastUpdateTs;
6
+
7
+ public static function shouldUpdate()
8
+ {
9
+ if ((int)time()-self::$lastUpdateTs < SG_PING_DATE_UPDATE_FREQUENCY) {
10
+ return false;
11
+ }
12
+
13
+ return true;
14
+ }
15
+
16
+ public static function ping()
17
+ {
18
+ $time = @file_get_contents(SG_PING_FILE_PATH);
19
+ $time = json_decode($time, true);
20
+
21
+ if (time()-$time['ts'] >= SG_BACKUP_TIMEOUT) {
22
+ return false;
23
+ }
24
+
25
+ return true;
26
+ }
27
+
28
+ public static function update()
29
+ {
30
+ if (self::shouldUpdate()) {
31
+ @file_put_contents(SG_PING_FILE_PATH, json_encode(array(
32
+ 'ts' => time()
33
+ )));
34
+ self::$lastUpdateTs = time();
35
+ }
36
+ }
37
+ }
app/code/community/BackupGuard/BackupGuardFree/com/core/backup/SGBackup.php CHANGED
@@ -8,734 +8,841 @@ require_once(SG_BACKUP_PATH.'SGBackupDatabase.php');
8
  require_once(SG_LOG_PATH.'SGFileLogHandler.php');
9
 
10
  //close session for writing
11
- session_write_close();
12
 
13
  class SGBackup implements SGIBackupDelegate
14
  {
15
- private $backupFiles = null;
16
- private $backupDatabase = null;
17
- private $actionId = null;
18
- private $filesBackupAvailable = false;
19
- private $databaseBackupAvailable = false;
20
- private $actionStartTs = 0;
21
- private $fileName = '';
22
- private $filesBackupPath = '';
23
- private $databaseBackupPath = '';
24
- private $backupLogPath = '';
25
- private $restoreLogPath = '';
26
- private $backgroundMode = false;
27
- private $queuedStorageUploads = array();
28
-
29
- public function __construct()
30
- {
31
- $this->filesBackupAvailable = SGConfig::get('SG_ACTION_BACKUP_FILES_AVAILABLE');
32
- $this->databaseBackupAvailable = SGConfig::get('SG_ACTION_BACKUP_DATABASE_AVAILABLE');
33
- $this->backgroundMode = SGConfig::get('SG_BACKUP_IN_BACKGROUND_MODE');
34
-
35
- $this->backupFiles = new SGBackupFiles();
36
- $this->backupFiles->setDelegate($this);
37
-
38
- if ($this->databaseBackupAvailable)
39
- {
40
- $this->backupDatabase = new SGBackupDatabase();
41
- $this->backupDatabase->setDelegate($this);
42
- }
43
- }
44
-
45
- /* Backup implementation */
46
-
47
- public function backup()
48
- {
49
- $this->fileName = self::getBackupFileName();
50
- $this->prepareBackupFolder(SG_BACKUP_DIRECTORY.$this->fileName);
51
-
52
- try
53
- {
54
- $this->prepareForBackup();
55
-
56
- if (!$this->filesBackupAvailable)
57
- {
58
- SGConfig::set('SG_BACKUP_FILE_PATHS', '', false);
59
- }
60
-
61
- if ($this->databaseBackupAvailable)
62
- {
63
- $this->backupDatabase->backup($this->databaseBackupPath);
64
-
65
- $rootDirectory = realpath(SGConfig::get('SG_APP_ROOT_DIRECTORY')).'/';
66
- $path = substr(realpath($this->databaseBackupPath), strlen($rootDirectory));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
  $this->backupFiles->addDontExclude(realpath($this->databaseBackupPath));
68
- $backupItems = SGConfig::get('SG_BACKUP_FILE_PATHS');
69
- $allItems = $backupItems?explode(',', $backupItems):array();
70
- $allItems[] = $path;
71
- SGConfig::set('SG_BACKUP_FILE_PATHS', implode(',', $allItems), false);
72
-
73
- $currentStatus = $this->getCurrentActionStatus();
74
- if ($currentStatus==SG_ACTION_STATUS_CANCELLING || $currentStatus==SG_ACTION_STATUS_CANCELLED)
75
- {
76
- $this->cancel();
77
- }
78
-
79
- self::changeActionStatus($this->actionId, SG_ACTION_STATUS_IN_PROGRESS_FILES);
80
- }
81
-
82
- $this->backupFiles->backup($this->filesBackupPath);
83
- $this->didFinishBackup();
84
- }
85
- catch (SGException $exception)
86
- {
87
- if (!$exception instanceof SGExceptionSkip)
88
- {
89
- SGBackupLog::writeExceptionObject($exception);
90
-
91
- if ($this->databaseBackupAvailable)
92
- {
93
- $this->backupDatabase->cancel();
94
- }
95
-
96
- $this->backupFiles->cancel();
97
-
98
- if (SGBoot::isFeatureAvailable('NOTIFICATIONS'))
99
- {
100
- SGBackupMailNotification::sendBackupNotification(false);
101
- }
102
-
103
- self::changeActionStatus($this->actionId, SG_ACTION_STATUS_ERROR);
104
- }
105
- else
106
- {
107
- $this->setCurrentActionStatusCancelled();
108
- }
109
-
110
- return;
111
- }
112
-
113
- $this->backupUploadToStorages();
114
- }
115
-
116
- private function backupUploadToStorages()
117
- {
118
- //check list of storages to upload if any
119
- $uploadToStorages = SGConfig::get('SG_BACKUP_SYNCHRONOUS_STORAGE_UPLOAD');
120
- if (SGBoot::isFeatureAvailable('STORAGE') && $uploadToStorages)
121
- {
122
- foreach ($this->queuedStorageUploads as $actionId)
123
- {
124
- SGBackupStorage::getInstance()->startUploadByActionId($actionId);
125
- }
126
- }
127
- }
128
-
129
- private function cleanUp()
130
- {
131
- //delete sql file
132
- if ($this->databaseBackupAvailable)
133
- {
134
- $this->backupDatabase->cancel();
135
- }
136
- }
137
-
138
- private static function getBackupFileName()
139
- {
140
- return 'sg_backup_'.(@date('YmdHis'));
141
- }
142
-
143
- private function prepareBackupFolder($backupPath)
144
- {
145
- //create backup folder
146
- if (!@mkdir($backupPath))
147
- {
148
- throw new SGExceptionMethodNotAllowed('Cannot create folder: '.$backupPath);
149
- }
150
-
151
- if (!is_writable($backupPath))
152
- {
153
- throw new SGExceptionForbidden('Permission denied. Directory is not writable: '.$backupPath);
154
- }
155
-
156
- //create backup log file
157
- $this->prepareBackupLogFile($backupPath);
158
- }
159
-
160
- private function prepareBackupLogFile($backupPath)
161
- {
162
- $file = $backupPath.'/'.$this->fileName.'_backup.log';
163
- $this->backupLogPath = $file;
164
-
165
- $content = $this->getLogFileHeader();
166
-
167
- $types = array();
168
- if ($this->filesBackupAvailable)
169
- {
170
- $types[] = 'files';
171
- }
172
- if ($this->databaseBackupAvailable)
173
- {
174
- $types[] = 'database';
175
- }
176
-
177
- $content .= 'Backup type: '.implode(',', $types).PHP_EOL.PHP_EOL;
178
-
179
- if (!file_put_contents($file, $content))
180
- {
181
- throw new SGExceptionMethodNotAllowed('Cannot create backup log file: '.$file);
182
- }
183
-
184
- //create file log handler
185
- $fileLogHandler = new SGFileLogHandler($file);
186
- SGLog::registerLogHandler($fileLogHandler, SG_LOG_LEVEL_LOW, true);
187
- }
188
-
189
- private function prepareForBackup()
190
- {
191
- //start logging
192
- SGBackupLog::writeAction('backup', SG_BACKUP_LOG_POS_START);
193
-
194
- //save timestamp for future use
195
- $this->actionStartTs = time();
196
-
197
- //create action inside db
198
- $status = $this->databaseBackupAvailable?SG_ACTION_STATUS_IN_PROGRESS_DB:SG_ACTION_STATUS_IN_PROGRESS_FILES;
199
- $this->actionId = self::createAction($this->fileName, SG_ACTION_TYPE_BACKUP, $status);
200
-
201
- //set paths
202
- $this->filesBackupPath = SG_BACKUP_DIRECTORY.$this->fileName.'/'.$this->fileName.'.sgbp';
203
- $this->databaseBackupPath = SG_BACKUP_DIRECTORY.$this->fileName.'/'.$this->fileName.'.sql';
204
-
205
- //prepare sgbp file
206
- @file_put_contents($this->filesBackupPath, '');
207
-
208
- if (!is_writable($this->filesBackupPath))
209
- {
210
- throw new SGExceptionForbidden('Could not create backup file: '.$filePath);
211
- }
212
-
213
- $this->backupFiles->setFilePath($this->filesBackupPath);
214
- SGConfig::set('SG_RUNNING_ACTION', 1, true);
215
-
216
- //check if upload to storages is needed
217
- $uploadToStorages = SGConfig::get('SG_BACKUP_UPLOAD_TO_STORAGES');
218
- if (SGBoot::isFeatureAvailable('STORAGE') && $uploadToStorages)
219
- {
220
- $storages = explode(',', $uploadToStorages);
221
- $arr = array();
222
- foreach ($storages as $storageId)
223
- {
224
- $actionId = SGBackupStorage::queueBackupForUpload($this->fileName, $storageId);
225
- $arr[] = $actionId;
226
- }
227
- $this->queuedStorageUploads = $arr;
228
- }
229
-
230
- //register shutdown function (used for handling execution time limits)
231
- register_shutdown_function('shutdownAction', $this->actionId, SG_ACTION_TYPE_BACKUP, $this->filesBackupPath, $this->databaseBackupPath);
232
- }
233
-
234
- public function cancel()
235
- {
236
- if ($this->databaseBackupAvailable)
237
- {
238
- $this->backupDatabase->cancel();
239
- }
240
-
241
- $this->backupFiles->cancel();
242
-
243
- SGBackupLog::write('Backup cancelled');
244
-
245
- throw new SGExceptionSkip();
246
- }
247
-
248
- private function didFinishBackup()
249
- {
250
- $action = $this->didFindWarnings()?SG_ACTION_STATUS_FINISHED_WARNINGS:SG_ACTION_STATUS_FINISHED;
251
- self::changeActionStatus($this->actionId, $action);
252
-
253
- SGBackupLog::writeAction('backup', SG_BACKUP_LOG_POS_END);
254
-
255
- if (SGBoot::isFeatureAvailable('NOTIFICATIONS'))
256
- {
257
- SGBackupMailNotification::sendBackupNotification(true);
258
- }
259
-
260
- SGBackupLog::write('Total duration: '.formattedDuration($this->actionStartTs, time()));
261
- SGBackupLog::write('Memory usage (peak): '.number_format(memory_get_peak_usage()/1024.0/1024.0, 2, '.', '').' MB');
262
-
263
- $this->cleanUp();
264
- }
265
-
266
- /* Restore implementation */
267
-
268
- public function restore($backupName)
269
- {
270
- $this->prepareForRestore($backupName);
271
-
272
- try
273
- {
274
- $this->backupFiles->restore($this->filesBackupPath);
275
- $this->didFinishFilesRestore();
276
- }
277
- catch (SGException $exception)
278
- {
279
- if (!$exception instanceof SGExceptionSkip)
280
- {
281
- SGBackupLog::writeExceptionObject($exception);
282
-
283
- if (SGBoot::isFeatureAvailable('NOTIFICATIONS'))
284
- {
285
- SGBackupMailNotification::sendRestoreNotification(false);
286
- }
287
-
288
- self::changeActionStatus($this->actionId, SG_ACTION_STATUS_ERROR);
289
- }
290
- else
291
- {
292
- self::changeActionStatus($this->actionId, SG_ACTION_STATUS_CANCELLED);
293
- }
294
- }
295
- }
296
-
297
- private function prepareForRestore($backupName)
298
- {
299
- //prepare file name
300
- $this->fileName = $backupName;
301
-
302
- //set paths
303
- $restorePath = SG_BACKUP_DIRECTORY.$this->fileName;
304
- $this->filesBackupPath = $restorePath.'/'.$this->fileName.'.sgbp';
305
- $this->databaseBackupPath = $restorePath.'/'.$this->fileName.'.sql';
306
-
307
- //prepare folder
308
- $this->prepareRestoreFolder($restorePath);
309
-
310
- //start logging
311
- SGBackupLog::writeAction('restore', SG_BACKUP_LOG_POS_START);
312
-
313
- SGConfig::set('SG_RUNNING_ACTION', 1, true);
314
-
315
- //save timestamp for future use
316
- $this->actionStartTs = time();
317
-
318
- //create action inside db
319
- $this->actionId = self::createAction($this->fileName, SG_ACTION_TYPE_RESTORE, SG_ACTION_STATUS_IN_PROGRESS_FILES);
320
-
321
- //register shutdown function (used for handling execution time limits)
322
- register_shutdown_function('shutdownAction', $this->actionId, SG_ACTION_TYPE_RESTORE, $this->filesBackupPath, $this->databaseBackupPath);
323
- }
324
-
325
- private function prepareRestoreFolder($restorePath)
326
- {
327
- if (!is_writable($restorePath))
328
- {
329
- throw new SGExceptionForbidden('Permission denied. Directory is not writable: '.$restorePath);
330
- }
331
-
332
- $this->filesBackupAvailable = file_exists($this->filesBackupPath);
333
-
334
- //create restore log file
335
- $this->prepareRestoreLogFile($restorePath);
336
- }
337
-
338
- private function prepareRestoreLogFile($backupPath)
339
- {
340
- $file = $backupPath.'/'.$this->fileName.'_restore.log';
341
- $this->restoreLogPath = $file;
342
-
343
- $content = $this->getLogFileHeader();
344
-
345
- $content .= PHP_EOL;
346
-
347
- if (!file_put_contents($file, $content))
348
- {
349
- throw new SGExceptionMethodNotAllowed('Cannot create restore log file: '.$file);
350
- }
351
-
352
- //create file log handler
353
- $fileLogHandler = new SGFileLogHandler($file);
354
- SGLog::registerLogHandler($fileLogHandler, SG_LOG_LEVEL_LOW, true);
355
- }
356
-
357
- private function didFinishRestore()
358
- {
359
- $action = $this->didFindWarnings()?SG_ACTION_STATUS_FINISHED_WARNINGS:SG_ACTION_STATUS_FINISHED;
360
- self::changeActionStatus($this->actionId, $action);
361
-
362
- SGBackupLog::writeAction('restore', SG_BACKUP_LOG_POS_END);
363
-
364
- if (SGBoot::isFeatureAvailable('NOTIFICATIONS'))
365
- {
366
- SGBackupMailNotification::sendRestoreNotification(true);
367
- }
368
-
369
- SGBackupLog::write('Total duration: '.formattedDuration($this->actionStartTs, time()));
370
- SGBackupLog::write('Memory usage (peak): '.number_format(memory_get_peak_usage()/1024.0/1024.0, 2, '.', '').' MB');
371
-
372
- $this->cleanUp();
373
- }
374
-
375
- private function didFinishFilesRestore()
376
- {
377
- $this->databaseBackupAvailable = file_exists($this->databaseBackupPath);
378
-
379
- if ($this->databaseBackupAvailable)
380
- {
381
- self::changeActionStatus($this->actionId, SG_ACTION_STATUS_IN_PROGRESS_DB);
382
- $this->backupDatabase->restore($this->databaseBackupPath);
383
- }
384
-
385
- $this->didFinishRestore();
386
- }
387
-
388
- /* General methods */
389
-
390
- private function getLogFileHeader()
391
- {
392
- $content = '';
393
- $content .= 'Date: '.@date('Y-m-d H:i').PHP_EOL;
394
- $content .= 'SG Backup version: '.SG_VERSION.PHP_EOL;
395
- $content .= 'OS: '.PHP_OS.PHP_EOL;
396
- $content .= 'Server: '.@$_SERVER['SERVER_SOFTWARE'].PHP_EOL;
397
- $content .= 'User agent: '.@$_SERVER['HTTP_USER_AGENT'].PHP_EOL;
398
- $content .= 'PHP version: '.PHP_VERSION.PHP_EOL;
399
- $content .= 'SAPI: '.PHP_SAPI.PHP_EOL;
400
- $content .= 'Codepage: '.setlocale(LC_CTYPE, '').PHP_EOL;
401
- $content .= 'Int size: '.PHP_INT_SIZE.PHP_EOL;
402
- if (extension_loaded('gmp')) $lib = 'gmp';
403
- else if (extension_loaded('bcmath')) $lib = 'bcmath';
404
- else $lib = 'BigInteger';
405
- $content .= 'Int lib: '.$lib.PHP_EOL;
406
- $content .= 'Memory limit: '.ini_get('memory_limit').PHP_EOL;
407
- $content .= 'Max execution time: '.ini_get('max_execution_time').PHP_EOL;
408
- $content .= 'Environment: '.SG_ENV_ADAPTER.' '.SG_ENV_VERSION.PHP_EOL;
409
-
410
- return $content;
411
- }
412
-
413
- private function didFindWarnings()
414
- {
415
- $warningsDatabase = $this->databaseBackupAvailable?$this->backupDatabase->didFindWarnings():false;
416
- $warningsFiles = $this->backupFiles->didFindWarnings();
417
- return ($warningsFiles||$warningsDatabase);
418
- }
419
-
420
- public static function createAction($name, $type, $status, $subtype = 0)
421
- {
422
- $sgdb = SGDatabase::getInstance();
423
- $res = $sgdb->query('INSERT INTO '.SG_ACTION_TABLE_NAME.' (name, type, subtype, status, start_date) VALUES (%s, %d, %d, %d, %s)', array($name, $type, $subtype, $status, @date('Y-m-d H:i:s')));
424
- if (!$res)
425
- {
426
- throw new SGExceptionDatabaseError('Could not create action');
427
- }
428
- return $sgdb->lastInsertId();
429
- }
430
-
431
- private function getCurrentActionStatus()
432
- {
433
- return self::getActionStatus($this->actionId);
434
- }
435
-
436
- private function setCurrentActionStatusCancelled()
437
- {
438
- $sgdb = SGDatabase::getInstance();
439
- $sgdb->query('UPDATE '.SG_ACTION_TABLE_NAME.' SET status=%d, update_date=%s WHERE name=%s', array(SG_ACTION_STATUS_CANCELLED, @date('Y-m-d H:i:s'), $this->fileName));
440
- }
441
-
442
- public static function changeActionStatus($actionId, $status)
443
- {
444
- $sgdb = SGDatabase::getInstance();
445
-
446
- $progress = '';
447
- if ($status==SG_ACTION_STATUS_FINISHED || $status==SG_ACTION_STATUS_FINISHED_WARNINGS)
448
- {
449
- $progress = 100;
450
- }
451
- else if ($status==SG_ACTION_STATUS_CREATED || $status==SG_ACTION_STATUS_IN_PROGRESS_FILES || $status==SG_ACTION_STATUS_IN_PROGRESS_DB)
452
- {
453
- $progress = 0;
454
- }
455
-
456
- if ($progress!=='')
457
- {
458
- $progress = ' progress='.$progress.',';
459
- }
460
-
461
- $res = $sgdb->query('UPDATE '.SG_ACTION_TABLE_NAME.' SET status=%d,'.$progress.' update_date=%s WHERE id=%d', array($status, @date('Y-m-d H:i:s'), $actionId));
462
- if (!$res)
463
- {
464
- throw new SGExceptionDatabaseError('Could not update action status');
465
- }
466
- }
467
-
468
- public static function changeActionProgress($actionId, $progress)
469
- {
470
- $sgdb = SGDatabase::getInstance();
471
- $sgdb->query('UPDATE '.SG_ACTION_TABLE_NAME.' SET progress=%d, update_date=%s WHERE id=%d', array($progress, @date('Y-m-d H:i:s'), $actionId));
472
- }
473
-
474
- /* Methods for frontend use */
475
-
476
- public static function getAction($actionId)
477
- {
478
- $sgdb = SGDatabase::getInstance();
479
- $res = $sgdb->query('SELECT * FROM '.SG_ACTION_TABLE_NAME.' WHERE id=%d', array($actionId));
480
- if (empty($res))
481
- {
482
- return false;
483
- }
484
- return $res[0];
485
- }
486
-
487
- public static function getActionProgress($actionId)
488
- {
489
- $sgdb = SGDatabase::getInstance();
490
- $res = $sgdb->query('SELECT progress FROM '.SG_ACTION_TABLE_NAME.' WHERE id=%d', array($actionId));
491
- if (empty($res))
492
- {
493
- return false;
494
- }
495
- return (int)$res[0]['progress'];
496
- }
497
-
498
- public static function getActionStatus($actionId)
499
- {
500
- $sgdb = SGDatabase::getInstance();
501
- $res = $sgdb->query('SELECT status FROM '.SG_ACTION_TABLE_NAME.' WHERE id=%d', array($actionId));
502
- if (empty($res))
503
- {
504
- return false;
505
- }
506
- return (int)$res[0]['status'];
507
- }
508
-
509
- public static function getRunningActions()
510
- {
511
- $sgdb = SGDatabase::getInstance();
512
- $res = $sgdb->query('SELECT * FROM '.SG_ACTION_TABLE_NAME.' WHERE status=%d OR status=%d OR status=%d ORDER BY status DESC', array(SG_ACTION_STATUS_IN_PROGRESS_FILES, SG_ACTION_STATUS_IN_PROGRESS_DB, SG_ACTION_STATUS_CREATED));
513
- return $res;
514
- }
515
-
516
- public static function getAllBackups()
517
- {
518
- $backups = array();
519
-
520
- $path = SG_BACKUP_DIRECTORY;
521
-
522
- clearstatcache();
523
-
524
- if ($handle = @opendir($path))
525
- {
526
- $sgdb = SGDatabase::getInstance();
527
- $data = $sgdb->query('SELECT id, name, type, subtype, status, progress, update_date FROM '.SG_ACTION_TABLE_NAME);
528
- $allBackups = array();
529
- foreach ($data as $row)
530
- {
531
- $allBackups[$row['name']][] = $row;
532
- }
533
-
534
- $i = 0;
535
- while (($file = readdir($handle)) !== false)
536
- {
537
- if ($file === '.')
538
- {
539
- continue;
540
- }
541
- if ($file === '..')
542
- {
543
- continue;
544
- }
545
-
546
- if (substr($file, 0, 10)=='sg_backup_')
547
- {
548
- $backup = array();
549
- $backup['name'] = $file;
550
- $backup['files'] = file_exists($path.$file.'/'.$file.'.sgbp')?1:0;
551
- $backup['backup_log'] = file_exists($path.$file.'/'.$file.'_backup.log')?1:0;
552
- $backup['restore_log'] = file_exists($path.$file.'/'.$file.'_restore.log')?1:0;
553
- if (!$backup['files'] && !$backup['backup_log'] && !$backup['restore_log'])
554
- {
555
- continue;
556
- }
557
- $backupRow = null;
558
- if (isset($allBackups[$file]))
559
- {
560
- $skip = false;
561
- foreach ($allBackups[$file] as $row)
562
- {
563
- if ($row['status']==SG_ACTION_STATUS_IN_PROGRESS_FILES || $backupRow['status']==SG_ACTION_STATUS_IN_PROGRESS_DB)
564
- {
565
- $backupRow = $row;
566
- break;
567
- }
568
- else if (($row['status']==SG_ACTION_STATUS_CANCELLING || $row['status']==SG_ACTION_STATUS_CANCELLED) && $row['type']!=SG_ACTION_TYPE_UPLOAD)
569
- {
570
- $skip = true;
571
- break;
572
- }
573
-
574
- $backupRow = $row;
575
-
576
- if ($row['status']==SG_ACTION_STATUS_FINISHED_WARNINGS && $row['type']!=SG_ACTION_TYPE_UPLOAD)
577
- {
578
- $key = $row['type']==SG_ACTION_TYPE_BACKUP?'backup_warning':'restore_warning';
579
- $backupRow[$key] = 1;
580
- }
581
- else if ($row['status']==SG_ACTION_STATUS_ERROR && $row['type']==SG_ACTION_TYPE_BACKUP)
582
- {
583
- $backupRow['backup_error'] = 1;
584
- break;
585
- }
586
- else if ($row['status']==SG_ACTION_STATUS_ERROR && $row['type']==SG_ACTION_TYPE_RESTORE)
587
- {
588
- $backupRow['restore_error'] = 1;
589
- }
590
- }
591
-
592
- if ($skip===true)
593
- {
594
- continue;
595
- }
596
- }
597
-
598
- if ($backupRow)
599
- {
600
- $backup['active'] = ($backupRow['status']==SG_ACTION_STATUS_IN_PROGRESS_FILES||
601
- $backupRow['status']==SG_ACTION_STATUS_IN_PROGRESS_DB||
602
- $backupRow['status']==SG_ACTION_STATUS_CREATED)?1:0; $backup['type'] = (int)$backupRow['type'];
603
- $backup['type'] = (int)$backupRow['type'];
604
- $backup['subtype'] = (int)$backupRow['subtype'];
605
- $backup['progress'] = (int)$backupRow['progress'];
606
- $backup['id'] = (int)$backupRow['id'];
607
- }
608
- else
609
- {
610
- $backup['active'] = 0;
611
- }
612
-
613
- if ($backup['active']==0)
614
- {
615
- $backup['backup_warning'] = (int)@$backupRow['backup_warning'];
616
- $backup['restore_warning'] = (int)@$backupRow['restore_warning'];
617
-
618
- $backup['backup_error'] = (int)@$backupRow['backup_error'];
619
- $backup['restore_error'] = (int)@$backupRow['restore_error'];
620
- }
621
- else
622
- {
623
- $backup['backup_warning'] = 0;
624
- $backup['restore_warning'] = 0;
625
-
626
- $backup['backup_error'] = 0;
627
- $backup['restore_error'] = 0;
628
- }
629
-
630
- $modifiedTime = filemtime($path.$file.'/.');
631
- $backup['date'] = @date('Y-m-d H:i', $modifiedTime);
632
- $backups[$modifiedTime.($i++)] = $backup;
633
- }
634
- }
635
- closedir($handle);
636
- }
637
-
638
- krsort($backups);
639
- return array_values($backups);
640
- }
641
-
642
- public static function deleteBackup($backupName, $deleteAction = true)
643
- {
644
- deleteDirectory(SG_BACKUP_DIRECTORY.$backupName);
645
-
646
- if ($deleteAction)
647
- {
648
- $sgdb = SGDatabase::getInstance();
649
- $sgdb->query('DELETE FROM '.SG_ACTION_TABLE_NAME.' WHERE name=%s', array($backupName));
650
- }
651
- }
652
-
653
- public static function cancelAction($actionId)
654
- {
655
- self::changeActionStatus($actionId, SG_ACTION_STATUS_CANCELLING);
656
- }
657
-
658
- public static function upload($filesUploadSgbp)
659
- {
660
- $filename = self::getBackupFileName();
661
- $backupDirectory = $filename.'/';
662
- $uploadPath = SG_BACKUP_DIRECTORY.$backupDirectory;
663
- $filename = $uploadPath.$filename;
664
-
665
- if (!@file_exists($uploadPath))
666
- {
667
- if (!@mkdir($uploadPath))
668
- {
669
- throw new SGExceptionForbidden('Upload folder is not accessible');
670
- }
671
- }
672
-
673
- if (!empty($filesUploadSgbp) && $filesUploadSgbp['name'] != '')
674
- {
675
- if ($filesUploadSgbp['type'] != 'application/octet-stream')
676
- {
677
- throw new SGExceptionBadRequest('Not a valid backup file');
678
- }
679
- if (!@move_uploaded_file($filesUploadSgbp['tmp_name'], $filename.'.sgbp'))
680
- {
681
- throw new SGExceptionForbidden('Error while uploading file');
682
- }
683
- }
684
- }
685
-
686
- public static function download($backupName, $type)
687
- {
688
- $backupDirectory = $backupName.'/';
689
- $fileType = 'text/plain';
690
- $fileName = SG_BACKUP_DIRECTORY.$backupDirectory.$backupName;
691
-
692
- if ($type == SG_BACKUP_DWONLOAD_TYPE_SGBP)
693
- {
694
- $fileName .= '.sgbp';
695
- $fileType = 'application/octet-stream';
696
- }
697
- else if ($type == SG_BACKUP_DWONLOAD_TYPE_BACKUP_LOG)
698
- {
699
- $fileName .= '_backup.log';
700
- }
701
- else if ($type == SG_BACKUP_DWONLOAD_TYPE_RESTORE_LOG)
702
- {
703
- $fileName .= '_restore.log';
704
- }
705
- else
706
- {
707
- header("HTTP/1.1 400 Invalid Request");
708
- exit;
709
- }
710
-
711
- downloadFile($fileName, $fileType);
712
- }
713
-
714
- /* SGIBackupDelegate implementation */
715
-
716
- public function isCancelled()
717
- {
718
- $status = $this->getCurrentActionStatus();
719
-
720
- if ($status==SG_ACTION_STATUS_CANCELLING)
721
- {
722
- $this->cancel();
723
- return true;
724
- }
725
-
726
- return false;
727
- }
728
-
729
- public function didUpdateProgress($progress)
730
- {
731
- $progress = max($progress, 0);
732
- $progress = min($progress, 100);
733
-
734
- self::changeActionProgress($this->actionId, $progress);
735
- }
736
-
737
- public function isBackgroundMode()
738
- {
739
- return $this->backgroundMode;
740
- }
741
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  require_once(SG_LOG_PATH.'SGFileLogHandler.php');
9
 
10
  //close session for writing
11
+ @session_write_close();
12
 
13
  class SGBackup implements SGIBackupDelegate
14
  {
15
+ private $backupFiles = null;
16
+ private $backupDatabase = null;
17
+ private $actionId = null;
18
+ private $filesBackupAvailable = false;
19
+ private $databaseBackupAvailable = false;
20
+ private $actionStartTs = 0;
21
+ private $fileName = '';
22
+ private $filesBackupPath = '';
23
+ private $databaseBackupPath = '';
24
+ private $backupLogPath = '';
25
+ private $restoreLogPath = '';
26
+ private $backgroundMode = false;
27
+ private $queuedStorageUploads = array();
28
+
29
+ public function __construct()
30
+ {
31
+ $this->filesBackupAvailable = SGConfig::get('SG_ACTION_BACKUP_FILES_AVAILABLE');
32
+ $this->databaseBackupAvailable = SGConfig::get('SG_ACTION_BACKUP_DATABASE_AVAILABLE');
33
+ $this->backgroundMode = SGConfig::get('SG_BACKUP_IN_BACKGROUND_MODE');
34
+
35
+ $this->backupFiles = new SGBackupFiles();
36
+ $this->backupFiles->setDelegate($this);
37
+
38
+ if ($this->databaseBackupAvailable)
39
+ {
40
+ $this->backupDatabase = new SGBackupDatabase();
41
+ $this->backupDatabase->setDelegate($this);
42
+ }
43
+ }
44
+
45
+ public function handleBackupExecutionTimeout()
46
+ {
47
+ $backupDatabase = new SGBackupDatabase();
48
+ $backupFiles = new SGBackupFiles();
49
+ $databaseBackupAvailable = SGConfig::get('SG_ACTION_BACKUP_DATABASE_AVAILABLE');
50
+ $filesBackupAvailable = SGConfig::get('SG_ACTION_BACKUP_FILES_AVAILABLE');
51
+
52
+ $filesBackupPath = SG_BACKUP_DIRECTORY.$this->fileName.'/'.$this->fileName.'.sgbp';
53
+ $databaseBackupPath = SG_BACKUP_DIRECTORY.$this->fileName.'/'.$this->fileName.'.sql';
54
+
55
+ if ($databaseBackupAvailable)
56
+ {
57
+ $backupDatabase->setFilePath($databaseBackupPath);
58
+ $backupDatabase->cancel();
59
+ }
60
+
61
+ $backupFiles->setFilePath($filesBackupPath);
62
+ $backupFiles->cancel();
63
+
64
+ if (SGBoot::isFeatureAvailable('NOTIFICATIONS'))
65
+ {
66
+ SGBackupMailNotification::sendBackupNotification(false);
67
+ }
68
+ }
69
+
70
+ public function handleRestoreExecutionTimeout()
71
+ {
72
+ if (SGBoot::isFeatureAvailable('NOTIFICATIONS'))
73
+ {
74
+ SGBackupMailNotification::sendRestoreNotification(false);
75
+ }
76
+ }
77
+
78
+
79
+ public function handleExecutionTimeout($actionId)
80
+ {
81
+ $this->actionId = $actionId;
82
+ $action = self::getAction($actionId);
83
+ $this->fileName = $action['name'];
84
+ $actionType = $action['type'];
85
+ $backupPath = SG_BACKUP_DIRECTORY.$this->fileName;
86
+
87
+ if ($actionType == SG_ACTION_TYPE_RESTORE) {
88
+ $this->handleRestoreExecutionTimeout();
89
+ $this->prepareRestoreLogFile($backupPath);
90
+ }
91
+ elseif ($actionType == SG_ACTION_TYPE_BACKUP) {
92
+ $this->handleBackupExecutionTimeout();
93
+ $this->prepareBackupLogFile($backupPath, true);
94
+ }
95
+ else{
96
+ $this->setBackupStatusToWarning($this->fileName);
97
+ $this->prepareBackupLogFile($backupPath, true);
98
+ }
99
+
100
+ //Stop all the running actions related tp the specific backup, like backup, upload...
101
+ $allActions = self::getRunningActions();
102
+ foreach ($allActions as $action) {
103
+ self::changeActionStatus($action['id'], SG_ACTION_STATUS_ERROR);
104
+ }
105
+
106
+ $exception = new SGExceptionExecutionTimeError();
107
+ SGBackupLog::writeExceptionObject($exception);
108
+ SGConfig::set('SG_EXCEPTION_TIMEOUT_ERROR', '1', true);
109
+ }
110
+
111
+ public function setBackupStatusToWarning($actionName)
112
+ {
113
+ $type = SG_ACTION_TYPE_BACKUP;
114
+ $sgdb = SGDatabase::getInstance();
115
+ $status = SG_ACTION_STATUS_FINISHED_WARNINGS;
116
+ $res = $sgdb->query('UPDATE '.SG_ACTION_TABLE_NAME.' SET status=%d,'.$progress.' update_date=%s WHERE name=%d AND type=%d', array($status, @date('Y-m-d H:i:s'), $actionName, $type));
117
+ }
118
+
119
+ /* Backup implementation */
120
+
121
+ public function backup()
122
+ {
123
+ $this->fileName = self::getBackupFileName();
124
+ $this->prepareBackupFolder(SG_BACKUP_DIRECTORY.$this->fileName);
125
+ SGPing::update();
126
+
127
+ try
128
+ {
129
+ $this->prepareForBackup();
130
+
131
+ if ($this->databaseBackupAvailable)
132
+ {
133
+ $this->backupDatabase->setFilePath($this->databaseBackupPath);
134
+ $this->backupFiles->addDontExclude(realpath($this->databaseBackupPath));
135
+
136
+ if (!$this->filesBackupAvailable)
137
+ {
138
+ SGConfig::set('SG_BACKUP_FILE_PATHS', '', false);
139
+ }
140
+
141
+ $this->backupDatabase->backup($this->databaseBackupPath);
142
+
143
+ $rootDirectory = realpath(SGConfig::get('SG_APP_ROOT_DIRECTORY')).'/';
144
+ $path = substr(realpath($this->databaseBackupPath), strlen($rootDirectory));
145
  $this->backupFiles->addDontExclude(realpath($this->databaseBackupPath));
146
+ $backupItems = SGConfig::get('SG_BACKUP_FILE_PATHS');
147
+ $allItems = $backupItems?explode(',', $backupItems):array();
148
+ $allItems[] = $path;
149
+ SGConfig::set('SG_BACKUP_FILE_PATHS', implode(',', $allItems), false);
150
+
151
+ $currentStatus = $this->getCurrentActionStatus();
152
+ if ($currentStatus==SG_ACTION_STATUS_CANCELLING || $currentStatus==SG_ACTION_STATUS_CANCELLED)
153
+ {
154
+ $this->cancel();
155
+ }
156
+
157
+ self::changeActionStatus($this->actionId, SG_ACTION_STATUS_IN_PROGRESS_FILES);
158
+ }
159
+
160
+ $this->backupFiles->backup($this->filesBackupPath);
161
+ $this->didFinishBackup();
162
+ }
163
+ catch (SGException $exception)
164
+ {
165
+ if ($exception instanceof SGExceptionSkip)
166
+ {
167
+ $this->setCurrentActionStatusCancelled();
168
+ }
169
+ else
170
+ {
171
+ SGBackupLog::writeExceptionObject($exception);
172
+
173
+ if ($this->databaseBackupAvailable)
174
+ {
175
+ $this->backupDatabase->cancel();
176
+ }
177
+
178
+ $this->backupFiles->cancel();
179
+
180
+ if (SGBoot::isFeatureAvailable('NOTIFICATIONS'))
181
+ {
182
+ SGBackupMailNotification::sendBackupNotification(false);
183
+ }
184
+
185
+ self::changeActionStatus($this->actionId, SG_ACTION_STATUS_ERROR);
186
+ }
187
+ }
188
+
189
+ //continue uploading backup to storages
190
+ try
191
+ {
192
+ $this->backupUploadToStorages();
193
+ }
194
+ catch (SGException $exception)
195
+ {
196
+ SGBackupLog::writeExceptionObject($exception);
197
+ }
198
+ }
199
+
200
+ private function backupUploadToStorages()
201
+ {
202
+ //check list of storages to upload if any
203
+ $uploadToStorages = SGConfig::get('SG_BACKUP_SYNCHRONOUS_STORAGE_UPLOAD');
204
+ if (SGBoot::isFeatureAvailable('STORAGE') && $uploadToStorages)
205
+ {
206
+ while (count($this->queuedStorageUploads))
207
+ {
208
+ $actionId = $this->queuedStorageUploads[0];
209
+ SGBackupStorage::getInstance()->startUploadByActionId($actionId);
210
+ array_shift($this->queuedStorageUploads);
211
+ }
212
+ }
213
+ }
214
+
215
+ private function cleanUp()
216
+ {
217
+ //delete sql file
218
+ if ($this->databaseBackupAvailable)
219
+ {
220
+ $this->backupDatabase->cancel();
221
+ }
222
+ }
223
+
224
+ private static function getBackupFileName()
225
+ {
226
+ return 'sg_backup_'.(@date('YmdHis'));
227
+ }
228
+
229
+ private function prepareBackupFolder($backupPath)
230
+ {
231
+ //create backup folder
232
+ if (!@mkdir($backupPath))
233
+ {
234
+ throw new SGExceptionMethodNotAllowed('Cannot create folder: '.$backupPath);
235
+ }
236
+
237
+ if (!is_writable($backupPath))
238
+ {
239
+ throw new SGExceptionForbidden('Permission denied. Directory is not writable: '.$backupPath);
240
+ }
241
+
242
+ //create backup log file
243
+ $this->prepareBackupLogFile($backupPath);
244
+ }
245
+
246
+ private function prepareBackupLogFile($backupPath, $exists = false)
247
+ {
248
+ $file = $backupPath.'/'.$this->fileName.'_backup.log';
249
+ $this->backupLogPath = $file;
250
+
251
+ if (!$exists)
252
+ {
253
+ $content = self::getLogFileHeader();
254
+
255
+ $types = array();
256
+ if ($this->filesBackupAvailable)
257
+ {
258
+ $types[] = 'files';
259
+ }
260
+ if ($this->databaseBackupAvailable)
261
+ {
262
+ $types[] = 'database';
263
+ }
264
+
265
+ $content .= 'Backup type: '.implode(',', $types).PHP_EOL.PHP_EOL;
266
+
267
+ if (!file_put_contents($file, $content))
268
+ {
269
+ throw new SGExceptionMethodNotAllowed('Cannot create backup log file: '.$file);
270
+ }
271
+ }
272
+
273
+ //create file log handler
274
+ $fileLogHandler = new SGFileLogHandler($file);
275
+ SGLog::registerLogHandler($fileLogHandler, SG_LOG_LEVEL_LOW, true);
276
+ }
277
+
278
+ private function setBackupPaths()
279
+ {
280
+ $this->filesBackupPath = SG_BACKUP_DIRECTORY.$this->fileName.'/'.$this->fileName.'.sgbp';
281
+ $this->databaseBackupPath = SG_BACKUP_DIRECTORY.$this->fileName.'/'.$this->fileName.'.sql';
282
+ }
283
+
284
+ private function prepareUploadToStorages()
285
+ {
286
+ $uploadToStorages = SGConfig::get('SG_BACKUP_UPLOAD_TO_STORAGES');
287
+ if (SGBoot::isFeatureAvailable('STORAGE') && $uploadToStorages)
288
+ {
289
+ $storages = explode(',', $uploadToStorages);
290
+ $arr = array();
291
+ foreach ($storages as $storageId)
292
+ {
293
+ $actionId = SGBackupStorage::queueBackupForUpload($this->fileName, $storageId);
294
+ $arr[] = $actionId;
295
+ }
296
+ $this->queuedStorageUploads = $arr;
297
+ }
298
+ }
299
+
300
+ private function prepareAdditionalConfigurations()
301
+ {
302
+ $this->backupFiles->setFilePath($this->filesBackupPath);
303
+ SGConfig::set('SG_RUNNING_ACTION', 1, true);
304
+ }
305
+
306
+ private function prepareForBackup()
307
+ {
308
+ //start logging
309
+ SGBackupLog::writeAction('backup', SG_BACKUP_LOG_POS_START);
310
+
311
+ //save timestamp for future use
312
+ $this->actionStartTs = time();
313
+
314
+ //create action inside db
315
+ $status = $this->databaseBackupAvailable?SG_ACTION_STATUS_IN_PROGRESS_DB:SG_ACTION_STATUS_IN_PROGRESS_FILES;
316
+ $this->actionId = self::createAction($this->fileName, SG_ACTION_TYPE_BACKUP, $status);
317
+
318
+ //set paths
319
+ $this->setBackupPaths();
320
+
321
+ //prepare sgbp file
322
+ @file_put_contents($this->filesBackupPath, '');
323
+
324
+ if (!is_writable($this->filesBackupPath))
325
+ {
326
+ throw new SGExceptionForbidden('Could not create backup file: '.$this->filesBackupPath);
327
+ }
328
+
329
+ //additional configuration
330
+ $this->prepareAdditionalConfigurations();
331
+
332
+ //check if upload to storages is needed
333
+ $this->prepareUploadToStorages();
334
+ }
335
+
336
+ public function cancel()
337
+ {
338
+ if ($this->databaseBackupAvailable)
339
+ {
340
+ $this->backupDatabase->cancel();
341
+ }
342
+
343
+ $this->backupFiles->cancel();
344
+
345
+ SGBackupLog::write('Backup cancelled');
346
+
347
+ throw new SGExceptionSkip();
348
+ }
349
+
350
+ private function didFinishBackup()
351
+ {
352
+ if(SGConfig::get('SG_REVIEW_POPUP_STATE') != SG_NEVER_SHOW_REVIEW_POPUP)
353
+ {
354
+ SGConfig::set('SG_REVIEW_POPUP_STATE', SG_SHOW_REVIEW_POPUP);
355
+ }
356
+
357
+ $action = $this->didFindWarnings()?SG_ACTION_STATUS_FINISHED_WARNINGS:SG_ACTION_STATUS_FINISHED;
358
+ self::changeActionStatus($this->actionId, $action);
359
+
360
+ SGBackupLog::writeAction('backup', SG_BACKUP_LOG_POS_END);
361
+
362
+ if (SGBoot::isFeatureAvailable('NOTIFICATIONS'))
363
+ {
364
+ SGBackupMailNotification::sendBackupNotification(true);
365
+ }
366
+
367
+ SGBackupLog::write('Total duration: '.formattedDuration($this->actionStartTs, time()));
368
+
369
+ $this->cleanUp();
370
+ }
371
+
372
+ /* Restore implementation */
373
+
374
+ public function restore($backupName)
375
+ {
376
+ $this->prepareForRestore($backupName);
377
+ SGPing::update();
378
+
379
+ try
380
+ {
381
+ $this->backupFiles->restore($this->filesBackupPath);
382
+ $this->didFinishFilesRestore();
383
+ }
384
+ catch (SGException $exception)
385
+ {
386
+ if (!$exception instanceof SGExceptionSkip)
387
+ {
388
+ SGBackupLog::writeExceptionObject($exception);
389
+
390
+ if (SGBoot::isFeatureAvailable('NOTIFICATIONS'))
391
+ {
392
+ SGBackupMailNotification::sendRestoreNotification(false);
393
+ }
394
+
395
+ self::changeActionStatus($this->actionId, SG_ACTION_STATUS_ERROR);
396
+ }
397
+ else
398
+ {
399
+ self::changeActionStatus($this->actionId, SG_ACTION_STATUS_CANCELLED);
400
+ }
401
+ }
402
+ }
403
+
404
+ private function prepareForRestore($backupName)
405
+ {
406
+ //prepare file name
407
+ $this->fileName = $backupName;
408
+
409
+ //set paths
410
+ $restorePath = SG_BACKUP_DIRECTORY.$this->fileName;
411
+ $this->filesBackupPath = $restorePath.'/'.$this->fileName.'.sgbp';
412
+ $this->databaseBackupPath = $restorePath.'/'.$this->fileName.'.sql';
413
+
414
+ //prepare folder
415
+ $this->prepareRestoreFolder($restorePath);
416
+
417
+ //start logging
418
+ SGBackupLog::writeAction('restore', SG_BACKUP_LOG_POS_START);
419
+
420
+ SGConfig::set('SG_RUNNING_ACTION', 1, true);
421
+
422
+ //save timestamp for future use
423
+ $this->actionStartTs = time();
424
+
425
+ //create action inside db
426
+ $this->actionId = self::createAction($this->fileName, SG_ACTION_TYPE_RESTORE, SG_ACTION_STATUS_IN_PROGRESS_FILES);
427
+ }
428
+
429
+ private function prepareRestoreFolder($restorePath)
430
+ {
431
+ if (!is_writable($restorePath))
432
+ {
433
+ throw new SGExceptionForbidden('Permission denied. Directory is not writable: '.$restorePath);
434
+ }
435
+
436
+ $this->filesBackupAvailable = file_exists($this->filesBackupPath);
437
+
438
+ //create restore log file
439
+ $this->prepareRestoreLogFile($restorePath);
440
+ }
441
+
442
+ private function prepareRestoreLogFile($backupPath)
443
+ {
444
+ $file = $backupPath.'/'.$this->fileName.'_restore.log';
445
+ $this->restoreLogPath = $file;
446
+
447
+ $content = self::getLogFileHeader();
448
+
449
+ $content .= PHP_EOL;
450
+
451
+ if (!file_put_contents($file, $content))
452
+ {
453
+ throw new SGExceptionMethodNotAllowed('Cannot create restore log file: '.$file);
454
+ }
455
+
456
+ //create file log handler
457
+ $fileLogHandler = new SGFileLogHandler($file);
458
+ SGLog::registerLogHandler($fileLogHandler, SG_LOG_LEVEL_LOW, true);
459
+ }
460
+
461
+ private function didFinishRestore()
462
+ {
463
+ $action = $this->didFindWarnings()?SG_ACTION_STATUS_FINISHED_WARNINGS:SG_ACTION_STATUS_FINISHED;
464
+ self::changeActionStatus($this->actionId, $action);
465
+
466
+ SGBackupLog::writeAction('restore', SG_BACKUP_LOG_POS_END);
467
+
468
+ if (SGBoot::isFeatureAvailable('NOTIFICATIONS'))
469
+ {
470
+ SGBackupMailNotification::sendRestoreNotification(true);
471
+ }
472
+
473
+ SGBackupLog::write('Total duration: '.formattedDuration($this->actionStartTs, time()));
474
+
475
+ $this->cleanUp();
476
+ }
477
+
478
+ private function didFinishFilesRestore()
479
+ {
480
+ $this->databaseBackupAvailable = file_exists($this->databaseBackupPath);
481
+
482
+ if ($this->databaseBackupAvailable)
483
+ {
484
+ self::changeActionStatus($this->actionId, SG_ACTION_STATUS_IN_PROGRESS_DB);
485
+ $this->backupDatabase->restore($this->databaseBackupPath);
486
+ }
487
+
488
+ $this->didFinishRestore();
489
+ }
490
+
491
+ /* General methods */
492
+
493
+ public static function getLogFileHeader()
494
+ {
495
+ $confs = array();
496
+ $confs['sg_version'] = SG_VERSION;
497
+ $confs['os'] = PHP_OS;
498
+ $confs['server'] = @$_SERVER['SERVER_SOFTWARE'];
499
+ $confs['php_version'] = PHP_VERSION;
500
+ $confs['sapi'] = PHP_SAPI;
501
+ $confs['codepage'] = setlocale(LC_CTYPE, '');
502
+ $confs['int_size'] = PHP_INT_SIZE;
503
+
504
+ if (extension_loaded('gmp')) $lib = 'gmp';
505
+ else if (extension_loaded('bcmath')) $lib = 'bcmath';
506
+ else $lib = 'BigInteger';
507
+
508
+ $confs['int_lib'] = $lib;
509
+ $confs['memory_limit'] = ini_get('memory_limit');
510
+ $confs['max_execution_time'] = SGBoot::$executionTimeLimit;
511
+ $confs['env'] = SG_ENV_ADAPTER.' '.SG_ENV_VERSION;
512
+
513
+ $content = '';
514
+ $content .= 'Date: '.@date('Y-m-d H:i').PHP_EOL;
515
+ $content .= 'SG Backup version: '.$confs['sg_version'].PHP_EOL;
516
+ $content .= 'OS: '.$confs['os'].PHP_EOL;
517
+ $content .= 'Server: '.$confs['server'].PHP_EOL;
518
+ $content .= 'User agent: '.@$_SERVER['HTTP_USER_AGENT'].PHP_EOL;
519
+ $content .= 'PHP version: '.$confs['php_version'].PHP_EOL;
520
+ $content .= 'SAPI: '.$confs['sapi'].PHP_EOL;
521
+ $content .= 'Codepage: '.$confs['codepage'].PHP_EOL;
522
+ $content .= 'Int size: '.$confs['int_size'].PHP_EOL;
523
+ $content .= 'Int lib: '.$confs['int_lib'].PHP_EOL;
524
+ $content .= 'Memory limit: '.$confs['memory_limit'].PHP_EOL;
525
+ $content .= 'Max execution time: '.$confs['max_execution_time'].PHP_EOL;
526
+ $content .= 'Environment: '.$confs['env'].PHP_EOL;
527
+
528
+ return $content;
529
+ }
530
+
531
+ private function didFindWarnings()
532
+ {
533
+ $warningsDatabase = $this->databaseBackupAvailable?$this->backupDatabase->didFindWarnings():false;
534
+ $warningsFiles = $this->backupFiles->didFindWarnings();
535
+ return ($warningsFiles||$warningsDatabase);
536
+ }
537
+
538
+ public static function createAction($name, $type, $status, $subtype = 0)
539
+ {
540
+ $sgdb = SGDatabase::getInstance();
541
+ $res = $sgdb->query('INSERT INTO '.SG_ACTION_TABLE_NAME.' (name, type, subtype, status, start_date) VALUES (%s, %d, %d, %d, %s)', array($name, $type, $subtype, $status, @date('Y-m-d H:i:s')));
542
+ if (!$res)
543
+ {
544
+ throw new SGExceptionDatabaseError('Could not create action');
545
+ }
546
+ return $sgdb->lastInsertId();
547
+ }
548
+
549
+ private function getCurrentActionStatus()
550
+ {
551
+ return self::getActionStatus($this->actionId);
552
+ }
553
+
554
+ private function setCurrentActionStatusCancelled()
555
+ {
556
+ $sgdb = SGDatabase::getInstance();
557
+ $sgdb->query('UPDATE '.SG_ACTION_TABLE_NAME.' SET status=%d, update_date=%s WHERE name=%s', array(SG_ACTION_STATUS_CANCELLED, @date('Y-m-d H:i:s'), $this->fileName));
558
+ }
559
+
560
+ public static function changeActionStatus($actionId, $status)
561
+ {
562
+ $sgdb = SGDatabase::getInstance();
563
+
564
+ $progress = '';
565
+ if ($status==SG_ACTION_STATUS_FINISHED || $status==SG_ACTION_STATUS_FINISHED_WARNINGS)
566
+ {
567
+ $progress = 100;
568
+ }
569
+ else if ($status==SG_ACTION_STATUS_CREATED || $status==SG_ACTION_STATUS_IN_PROGRESS_FILES || $status==SG_ACTION_STATUS_IN_PROGRESS_DB)
570
+ {
571
+ $progress = 0;
572
+ }
573
+
574
+ if ($progress!=='')
575
+ {
576
+ $progress = ' progress='.$progress.',';
577
+ }
578
+
579
+ $res = $sgdb->query('UPDATE '.SG_ACTION_TABLE_NAME.' SET status=%d,'.$progress.' update_date=%s WHERE id=%d', array($status, @date('Y-m-d H:i:s'), $actionId));
580
+ }
581
+
582
+ public static function changeActionProgress($actionId, $progress)
583
+ {
584
+ $sgdb = SGDatabase::getInstance();
585
+ $sgdb->query('UPDATE '.SG_ACTION_TABLE_NAME.' SET progress=%d, update_date=%s WHERE id=%d', array($progress, @date('Y-m-d H:i:s'), $actionId));
586
+ }
587
+
588
+ /* Methods for frontend use */
589
+
590
+ public static function getAction($actionId)
591
+ {
592
+ $sgdb = SGDatabase::getInstance();
593
+ $res = $sgdb->query('SELECT * FROM '.SG_ACTION_TABLE_NAME.' WHERE id=%d', array($actionId));
594
+ if (empty($res))
595
+ {
596
+ return false;
597
+ }
598
+ return $res[0];
599
+ }
600
+
601
+ public static function getActionProgress($actionId)
602
+ {
603
+ $sgdb = SGDatabase::getInstance();
604
+ $res = $sgdb->query('SELECT progress FROM '.SG_ACTION_TABLE_NAME.' WHERE id=%d', array($actionId));
605
+ if (empty($res))
606
+ {
607
+ return false;
608
+ }
609
+ return (int)$res[0]['progress'];
610
+ }
611
+
612
+ public static function getActionStatus($actionId)
613
+ {
614
+ $sgdb = SGDatabase::getInstance();
615
+ $res = $sgdb->query('SELECT status FROM '.SG_ACTION_TABLE_NAME.' WHERE id=%d', array($actionId));
616
+ if (empty($res))
617
+ {
618
+ return false;
619
+ }
620
+ return (int)$res[0]['status'];
621
+ }
622
+
623
+ public static function getRunningActions()
624
+ {
625
+ $sgdb = SGDatabase::getInstance();
626
+ $res = $sgdb->query('SELECT * FROM '.SG_ACTION_TABLE_NAME.' WHERE status=%d OR status=%d OR status=%d ORDER BY status DESC', array(SG_ACTION_STATUS_IN_PROGRESS_FILES, SG_ACTION_STATUS_IN_PROGRESS_DB, SG_ACTION_STATUS_CREATED));
627
+ return $res;
628
+ }
629
+
630
+ public static function getBackupFileInfo($file)
631
+ {
632
+ return pathinfo(SG_BACKUP_DIRECTORY.$file);
633
+ }
634
+
635
+ public static function autodetectBackups()
636
+ {
637
+ $path = SG_BACKUP_DIRECTORY;
638
+ $files = scandir(SG_BACKUP_DIRECTORY);
639
+ $backupLogPostfix = "_backup.log";
640
+ $restoreLogPostfix = "_restore.log";
641
+
642
+ foreach ($files as $file) {
643
+ $fileInfo = self::getBackupFileInfo($file);
644
+
645
+ if ($fileInfo['extension'] == SGBP_EXT) {
646
+ @mkdir($path.$fileInfo['filename'], 0777);
647
+
648
+ if(file_exists($path.$fileInfo['filename'])) {
649
+ rename($path.$file, $path.$fileInfo['filename'].'/'.$file);
650
+ }
651
+
652
+ if(file_exists($path.$fileInfo['filename'].$backupLogPostfix)){
653
+ rename($path.$fileInfo['filename'].$backupLogPostfix, $path.$fileInfo['filename'].'/'.$fileInfo['filename'].$backupLogPostfix);
654
+ }
655
+
656
+ if (file_exists($path.$fileInfo['filename'].$restoreLogPostfix)) {
657
+ rename($path.$fileInfo['filename'].$restoreLogPostfix, $path.$fileInfo['filename'].'/'.$fileInfo['filename'].$restoreLogPostfix);
658
+ }
659
+ }
660
+ }
661
+ }
662
+
663
+ public static function getAllBackups()
664
+ {
665
+ $backups = array();
666
+
667
+ $path = SG_BACKUP_DIRECTORY;
668
+ self::autodetectBackups();
669
+ clearstatcache();
670
+
671
+ if ($handle = @opendir($path)) {
672
+ $sgdb = SGDatabase::getInstance();
673
+ $data = $sgdb->query('SELECT id, name, type, subtype, status, progress, update_date FROM '.SG_ACTION_TABLE_NAME);
674
+ $allBackups = array();
675
+ foreach ($data as $row) {
676
+ $allBackups[$row['name']][] = $row;
677
+ }
678
+
679
+ while (($file = readdir($handle)) !== false) {
680
+ if ($file === '.' || $file === '..') {
681
+ continue;
682
+ }
683
+
684
+ if (substr($file, 0, 10)=='sg_backup_') {
685
+ $backup = array();
686
+ $backup['name'] = $file;
687
+ $backup['files'] = file_exists($path.$file.'/'.$file.'.sgbp')?1:0;
688
+ $backup['backup_log'] = file_exists($path.$file.'/'.$file.'_backup.log')?1:0;
689
+ $backup['restore_log'] = file_exists($path.$file.'/'.$file.'_restore.log')?1:0;
690
+ if (!$backup['files'] && !$backup['backup_log'] && !$backup['restore_log']) {
691
+ continue;
692
+ }
693
+ $backupRow = null;
694
+ if (isset($allBackups[$file])) {
695
+ $skip = false;
696
+ foreach ($allBackups[$file] as $row) {
697
+ if ($row['status']==SG_ACTION_STATUS_IN_PROGRESS_FILES || $backupRow['status']==SG_ACTION_STATUS_IN_PROGRESS_DB) {
698
+ $backupRow = $row;
699
+ break;
700
+ }
701
+ else if (($row['status']==SG_ACTION_STATUS_CANCELLING || $row['status']==SG_ACTION_STATUS_CANCELLED) && $row['type']!=SG_ACTION_TYPE_UPLOAD) {
702
+ $skip = true;
703
+ break;
704
+ }
705
+
706
+ $backupRow = $row;
707
+
708
+ if ($row['status']==SG_ACTION_STATUS_FINISHED_WARNINGS || $row['status']==SG_ACTION_STATUS_ERROR) {
709
+ if ($row['type'] == SG_ACTION_TYPE_UPLOAD && file_exists(SG_BACKUP_DIRECTORY.$file.DS.$file.'.sgbp')) {
710
+ $backupRow['status'] = SG_ACTION_STATUS_FINISHED_WARNINGS;
711
+ }
712
+ }
713
+ }
714
+
715
+ if ($skip===true) {
716
+ continue;
717
+ }
718
+ }
719
+
720
+ if ($backupRow) {
721
+ $backup['active'] = ($backupRow['status']==SG_ACTION_STATUS_IN_PROGRESS_FILES||
722
+ $backupRow['status']==SG_ACTION_STATUS_IN_PROGRESS_DB||
723
+ $backupRow['status']==SG_ACTION_STATUS_CREATED)?1:0;
724
+
725
+ $backup['status'] = $backupRow['status'];
726
+ $backup['type'] = (int)$backupRow['type'];
727
+ $backup['subtype'] = (int)$backupRow['subtype'];
728
+ $backup['progress'] = (int)$backupRow['progress'];
729
+ $backup['id'] = (int)$backupRow['id'];
730
+ }
731
+ else {
732
+ $backup['active'] = 0;
733
+ }
734
+
735
+ $size = '';
736
+ if ($backup['files']) {
737
+ $size = number_format(realFilesize($path.$file.'/'.$file.'.sgbp')/1024.0/1024.0, 2, '.', '').' MB';
738
+ }
739
+
740
+ $backup['size'] = $size;
741
+
742
+ $modifiedTime = filemtime($path.$file.'/.');
743
+ $backup['date'] = @date('Y-m-d H:i', $modifiedTime);
744
+ $backups[$modifiedTime] = $backup;
745
+ }
746
+ }
747
+ closedir($handle);
748
+ }
749
+
750
+ krsort($backups);
751
+ return array_values($backups);
752
+ }
753
+
754
+ public static function deleteBackup($backupName, $deleteAction = true)
755
+ {
756
+ deleteDirectory(SG_BACKUP_DIRECTORY.$backupName);
757
+
758
+ if ($deleteAction)
759
+ {
760
+ $sgdb = SGDatabase::getInstance();
761
+ $sgdb->query('DELETE FROM '.SG_ACTION_TABLE_NAME.' WHERE name=%s', array($backupName));
762
+ }
763
+ }
764
+
765
+ public static function cancelAction($actionId)
766
+ {
767
+ self::changeActionStatus($actionId, SG_ACTION_STATUS_CANCELLING);
768
+ }
769
+
770
+ public static function upload($filesUploadSgbp)
771
+ {
772
+ $filename = self::getBackupFileName();
773
+ $backupDirectory = $filename.'/';
774
+ $uploadPath = SG_BACKUP_DIRECTORY.$backupDirectory;
775
+ $filename = $uploadPath.$filename;
776
+
777
+ if (!@file_exists($uploadPath))
778
+ {
779
+ if (!@mkdir($uploadPath))
780
+ {
781
+ throw new SGExceptionForbidden('Upload folder is not accessible');
782
+ }
783
+ }
784
+
785
+ if (!empty($filesUploadSgbp) && $filesUploadSgbp['name'] != '')
786
+ {
787
+ if ($filesUploadSgbp['type'] != 'application/octet-stream')
788
+ {
789
+ throw new SGExceptionBadRequest('Not a valid backup file');
790
+ }
791
+ if (!@move_uploaded_file($filesUploadSgbp['tmp_name'], $filename.'.sgbp'))
792
+ {
793
+ throw new SGExceptionForbidden('Error while uploading file');
794
+ }
795
+ }
796
+ }
797
+
798
+ public static function download($filename, $type)
799
+ {
800
+ $backupDirectory = SG_BACKUP_DIRECTORY.$filename.'/';
801
+
802
+ switch ($type)
803
+ {
804
+ case SG_BACKUP_DOWNLOAD_TYPE_SGBP:
805
+ $filename .= '.sgbp';
806
+ downloadFileSymlink($backupDirectory, $filename);
807
+ break;
808
+ case SG_BACKUP_DOWNLOAD_TYPE_BACKUP_LOG:
809
+ $filename .= '_backup.log';
810
+ downloadFile($backupDirectory.$filename, 'text/plain');
811
+ break;
812
+ case SG_BACKUP_DOWNLOAD_TYPE_RESTORE_LOG:
813
+ $filename .= '_restore.log';
814
+ downloadFile($backupDirectory.$filename, 'text/plain');
815
+ break;
816
+ }
817
+
818
+ exit;
819
+ }
820
+
821
+ /* SGIBackupDelegate implementation */
822
+
823
+ public function isCancelled()
824
+ {
825
+ $status = $this->getCurrentActionStatus();
826
+
827
+ if ($status==SG_ACTION_STATUS_CANCELLING)
828
+ {
829
+ $this->cancel();
830
+ return true;
831
+ }
832
+
833
+ return false;
834
+ }
835
+
836
+ public function didUpdateProgress($progress)
837
+ {
838
+ $progress = max($progress, 0);
839
+ $progress = min($progress, 100);
840
+
841
+ self::changeActionProgress($this->actionId, $progress);
842
+ }
843
+
844
+ public function isBackgroundMode()
845
+ {
846
+ return $this->backgroundMode;
847
+ }
848
+ }
app/code/community/BackupGuard/BackupGuardFree/com/core/backup/SGBackupDatabase.php CHANGED
@@ -23,6 +23,11 @@ class SGBackupDatabase implements SGIMysqldumpDelegate
23
  $this->delegate = $delegate;
24
  }
25
 
 
 
 
 
 
26
  public function didFindWarnings()
27
  {
28
  return $this->warningsFound;
@@ -30,9 +35,12 @@ class SGBackupDatabase implements SGIMysqldumpDelegate
30
 
31
  public function backup($filePath)
32
  {
33
- SGBackupLog::writeAction('backup database', SG_BACKUP_LOG_POS_START);
34
  $this->backupFilePath = $filePath;
 
 
 
35
  $this->resetBackupProgress();
 
36
  $this->export();
37
  SGBackupLog::writeAction('backup database', SG_BACKUP_LOG_POS_END);
38
  }
@@ -92,8 +100,9 @@ class SGBackupDatabase implements SGIMysqldumpDelegate
92
  SGBackupLog::write('Importing table: '.$tableName);
93
  }
94
 
95
- if ($trimmedRow && $trimmedRow[strlen($trimmedRow)-1]==';')
96
  {
 
97
  $res = $this->sgdb->exec($importQuery);
98
  if ($res===false)
99
  {
@@ -102,6 +111,7 @@ class SGBackupDatabase implements SGIMysqldumpDelegate
102
  $importQuery = '';
103
  }
104
  $this->currentRowCount++;
 
105
  $this->updateProgress();
106
  }
107
  @fclose($fileHandle);
@@ -110,6 +120,7 @@ class SGBackupDatabase implements SGIMysqldumpDelegate
110
  public function didExportRow()
111
  {
112
  $this->currentRowCount++;
 
113
 
114
  if ($this->updateProgress())
115
  {
@@ -135,7 +146,6 @@ class SGBackupDatabase implements SGIMysqldumpDelegate
135
  {
136
  $this->totalRowCount = 0;
137
  $this->currentRowCount = 0;
138
- $this->progressUpdateInterval = SGConfig::get('SG_ACTION_PROGRESS_UPDATE_INTERVAL');
139
  $tableNames = $this->getTables();
140
  foreach ($tableNames as $table)
141
  {
@@ -157,7 +167,7 @@ class SGBackupDatabase implements SGIMysqldumpDelegate
157
  private function getTables()
158
  {
159
  $tableNames = array();
160
- $tables = $this->sgdb->query('SHOW TABLES FROM '.SG_DB_NAME);
161
  if (!$tables)
162
  {
163
  throw new SGExceptionDatabaseError('Could not get tables of database: '.SG_DB_NAME);
@@ -235,4 +245,4 @@ class SGBackupDatabase implements SGIMysqldumpDelegate
235
  }
236
  return is_writable($filePath);
237
  }
238
- }
23
  $this->delegate = $delegate;
24
  }
25
 
26
+ public function setFilePath($filePath)
27
+ {
28
+ $this->backupFilePath = $filePath;
29
+ }
30
+
31
  public function didFindWarnings()
32
  {
33
  return $this->warningsFound;
35
 
36
  public function backup($filePath)
37
  {
 
38
  $this->backupFilePath = $filePath;
39
+ $this->progressUpdateInterval = SGConfig::get('SG_ACTION_PROGRESS_UPDATE_INTERVAL');
40
+
41
+ SGBackupLog::writeAction('backup database', SG_BACKUP_LOG_POS_START);
42
  $this->resetBackupProgress();
43
+
44
  $this->export();
45
  SGBackupLog::writeAction('backup database', SG_BACKUP_LOG_POS_END);
46
  }
100
  SGBackupLog::write('Importing table: '.$tableName);
101
  }
102
 
103
+ if($trimmedRow && substr($trimmedRow, -9) == "/*SGEnd*/")
104
  {
105
+ $importQuery = str_replace("/*SGEnd*/", "", $importQuery);
106
  $res = $this->sgdb->exec($importQuery);
107
  if ($res===false)
108
  {
111
  $importQuery = '';
112
  }
113
  $this->currentRowCount++;
114
+ SGPing::update();
115
  $this->updateProgress();
116
  }
117
  @fclose($fileHandle);
120
  public function didExportRow()
121
  {
122
  $this->currentRowCount++;
123
+ SGPing::update();
124
 
125
  if ($this->updateProgress())
126
  {
146
  {
147
  $this->totalRowCount = 0;
148
  $this->currentRowCount = 0;
 
149
  $tableNames = $this->getTables();
150
  foreach ($tableNames as $table)
151
  {
167
  private function getTables()
168
  {
169
  $tableNames = array();
170
+ $tables = $this->sgdb->query('SHOW TABLES FROM `'.SG_DB_NAME.'`');
171
  if (!$tables)
172
  {
173
  throw new SGExceptionDatabaseError('Could not get tables of database: '.SG_DB_NAME);
245
  }
246
  return is_writable($filePath);
247
  }
248
+ }
app/code/community/BackupGuard/BackupGuardFree/com/core/backup/SGBackupFiles.php CHANGED
@@ -46,33 +46,38 @@ class SGBackupFiles implements SGArchiveDelegate
46
  SGBackupLog::writeAction('backup files', SG_BACKUP_LOG_POS_START);
47
 
48
  $excludeFilePaths = SGConfig::get('SG_BACKUP_FILE_PATHS_EXCLUDE');
49
- $this->excludeFilePaths = explode(',', $excludeFilePaths);
 
 
 
 
 
 
 
50
 
51
  $this->filePath = $filePath;
52
  $backupItems = SGConfig::get('SG_BACKUP_FILE_PATHS');
53
  $allItems = explode(',', $backupItems);
54
 
55
- SGBackupLog::write('Backup files: '.$backupItems);
56
-
57
  $this->sgbp = new SGArchive($filePath, 'w');
 
58
 
59
  if (!is_writable($filePath))
60
  {
61
  throw new SGExceptionForbidden('Could not create backup file: '.$filePath);
62
  }
63
 
 
 
64
  $this->resetBackupProgress($allItems);
65
  $this->warningsFound = false;
66
 
67
  SGBackupLog::write('Number of files to backup: '.$this->totalBackupFilesCount);
68
 
69
- foreach ($allItems as $item)
70
- {
71
  SGBackupLog::writeAction('backup file: '.$item, SG_BACKUP_LOG_POS_START);
72
-
73
  $path = $this->rootDirectory.$item;
74
  $this->addFileToArchive($path);
75
-
76
  SGBackupLog::writeAction('backup file: '.$item, SG_BACKUP_LOG_POS_END);
77
  }
78
 
@@ -89,7 +94,6 @@ class SGBackupFiles implements SGArchiveDelegate
89
 
90
  $this->resetRestoreProgress(dirname($filePath));
91
  $this->warningsFound = false;
92
-
93
  $this->extractArchive($filePath);
94
 
95
  SGBackupLog::writeAction('restore files', SG_BACKUP_LOG_POS_END);
@@ -107,7 +111,7 @@ class SGBackupFiles implements SGArchiveDelegate
107
  public function getCorrectCdrFilename($filename)
108
  {
109
  $backupsPath = $this->pathWithoutRootDirectory(realpath(SG_BACKUP_DIRECTORY));
110
-
111
  if (strpos($filename, $backupsPath)===0)
112
  {
113
  $newPath = dirname($this->pathWithoutRootDirectory(realpath($this->filePath)));
@@ -160,7 +164,7 @@ class SGBackupFiles implements SGArchiveDelegate
160
  foreach ($allItems as $item)
161
  {
162
  $path = $this->rootDirectory.$item;
163
-
164
  $count = 0;
165
  $this->numberOfFilesInDirectory($path, $count);
166
 
@@ -200,7 +204,7 @@ class SGBackupFiles implements SGArchiveDelegate
200
  private function numberOfFilesInDirectory($path, &$count = 0)
201
  {
202
  if ($this->shouldExcludeFile($path)) return;
203
-
204
  if (is_dir($path))
205
  {
206
  if ($handle = @opendir($path))
@@ -218,8 +222,13 @@ class SGBackupFiles implements SGArchiveDelegate
218
 
219
  $this->numberOfFilesInDirectory($path.'/'.$file, $count);
220
  }
 
221
  closedir($handle);
222
  }
 
 
 
 
223
  }
224
  else
225
  {
@@ -237,7 +246,7 @@ class SGBackupFiles implements SGArchiveDelegate
237
 
238
  private function addFileToArchive($path)
239
  {
240
- if ($this->shouldExcludeFile($path)) return;
241
 
242
  //check if it is a directory
243
  if (is_dir($path))
@@ -250,7 +259,7 @@ class SGBackupFiles implements SGArchiveDelegate
250
  if (is_readable($path))
251
  {
252
  $file = substr($path, strlen($this->rootDirectory));
253
- $file = str_replace('\\', '/', $file);
254
  $this->sgbp->addFileFromPath($file, $path);
255
  }
256
  else
@@ -272,12 +281,8 @@ class SGBackupFiles implements SGArchiveDelegate
272
  {
273
  SGBackgroundMode::next();
274
  }
275
- }
276
 
277
- private function warn($message)
278
- {
279
- $this->warningsFound = true;
280
- SGBackupLog::writeWarning($message);
281
  }
282
 
283
  private function backupDirectory($path)
@@ -303,7 +308,7 @@ class SGBackupFiles implements SGArchiveDelegate
303
  if (!$filesFound)
304
  {
305
  $file = substr($path, strlen($this->rootDirectory));
306
- $file = str_replace('\\', '/', $file);
307
  $this->sgbp->addFile($file.'/', ''); //create empty directory
308
  }
309
 
@@ -315,6 +320,12 @@ class SGBackupFiles implements SGArchiveDelegate
315
  }
316
  }
317
 
 
 
 
 
 
 
318
  private function updateProgress()
319
  {
320
  $progress = round($this->currentBackupFileCount*100.0/$this->totalBackupFilesCount);
@@ -333,4 +344,4 @@ class SGBackupFiles implements SGArchiveDelegate
333
 
334
  return false;
335
  }
336
- }
46
  SGBackupLog::writeAction('backup files', SG_BACKUP_LOG_POS_START);
47
 
48
  $excludeFilePaths = SGConfig::get('SG_BACKUP_FILE_PATHS_EXCLUDE');
49
+ if (!$excludeFilePaths)
50
+ {
51
+ $this->excludeFilePaths = array();
52
+ }
53
+ else
54
+ {
55
+ $this->excludeFilePaths = explode(',', $excludeFilePaths);
56
+ }
57
 
58
  $this->filePath = $filePath;
59
  $backupItems = SGConfig::get('SG_BACKUP_FILE_PATHS');
60
  $allItems = explode(',', $backupItems);
61
 
 
 
62
  $this->sgbp = new SGArchive($filePath, 'w');
63
+ $this->sgbp->setDelegate($this);
64
 
65
  if (!is_writable($filePath))
66
  {
67
  throw new SGExceptionForbidden('Could not create backup file: '.$filePath);
68
  }
69
 
70
+ SGBackupLog::write('Backup files: '.$backupItems);
71
+
72
  $this->resetBackupProgress($allItems);
73
  $this->warningsFound = false;
74
 
75
  SGBackupLog::write('Number of files to backup: '.$this->totalBackupFilesCount);
76
 
77
+ foreach ($allItems as $item) {
 
78
  SGBackupLog::writeAction('backup file: '.$item, SG_BACKUP_LOG_POS_START);
 
79
  $path = $this->rootDirectory.$item;
80
  $this->addFileToArchive($path);
 
81
  SGBackupLog::writeAction('backup file: '.$item, SG_BACKUP_LOG_POS_END);
82
  }
83
 
94
 
95
  $this->resetRestoreProgress(dirname($filePath));
96
  $this->warningsFound = false;
 
97
  $this->extractArchive($filePath);
98
 
99
  SGBackupLog::writeAction('restore files', SG_BACKUP_LOG_POS_END);
111
  public function getCorrectCdrFilename($filename)
112
  {
113
  $backupsPath = $this->pathWithoutRootDirectory(realpath(SG_BACKUP_DIRECTORY));
114
+
115
  if (strpos($filename, $backupsPath)===0)
116
  {
117
  $newPath = dirname($this->pathWithoutRootDirectory(realpath($this->filePath)));
164
  foreach ($allItems as $item)
165
  {
166
  $path = $this->rootDirectory.$item;
167
+
168
  $count = 0;
169
  $this->numberOfFilesInDirectory($path, $count);
170
 
204
  private function numberOfFilesInDirectory($path, &$count = 0)
205
  {
206
  if ($this->shouldExcludeFile($path)) return;
207
+ SGPing::update();
208
  if (is_dir($path))
209
  {
210
  if ($handle = @opendir($path))
222
 
223
  $this->numberOfFilesInDirectory($path.'/'.$file, $count);
224
  }
225
+
226
  closedir($handle);
227
  }
228
+ else
229
+ {
230
+ $this->warn('Could not read directory (skipping): '.$path);
231
+ }
232
  }
233
  else
234
  {
246
 
247
  private function addFileToArchive($path)
248
  {
249
+ if ($this->shouldExcludeFile($path)) return true;
250
 
251
  //check if it is a directory
252
  if (is_dir($path))
259
  if (is_readable($path))
260
  {
261
  $file = substr($path, strlen($this->rootDirectory));
262
+ $file = str_replace('\\', '/', $file);
263
  $this->sgbp->addFileFromPath($file, $path);
264
  }
265
  else
281
  {
282
  SGBackgroundMode::next();
283
  }
 
284
 
285
+ return;
 
 
 
286
  }
287
 
288
  private function backupDirectory($path)
308
  if (!$filesFound)
309
  {
310
  $file = substr($path, strlen($this->rootDirectory));
311
+ $file = str_replace('\\', '/', $file);
312
  $this->sgbp->addFile($file.'/', ''); //create empty directory
313
  }
314
 
320
  }
321
  }
322
 
323
+ private function warn($message)
324
+ {
325
+ $this->warningsFound = true;
326
+ SGBackupLog::writeWarning($message);
327
+ }
328
+
329
  private function updateProgress()
330
  {
331
  $progress = round($this->currentBackupFileCount*100.0/$this->totalBackupFilesCount);
344
 
345
  return false;
346
  }
347
+ }
app/code/community/BackupGuard/BackupGuardFree/com/core/backup/SGIBackupDelegate.php CHANGED
@@ -5,4 +5,4 @@ interface SGIBackupDelegate
5
  public function isCancelled();
6
  public function didUpdateProgress($progress);
7
  public function isBackgroundMode();
8
- }
5
  public function isCancelled();
6
  public function didUpdateProgress($progress);
7
  public function isBackgroundMode();
8
+ }
app/code/community/BackupGuard/BackupGuardFree/com/core/exception/.DS_Store ADDED
Binary file
app/code/community/BackupGuard/BackupGuardFree/com/core/exception/SGException.php CHANGED
@@ -62,4 +62,12 @@ class SGExceptionSkip extends SGException
62
  {
63
  parent::__construct($msg, 1, null);
64
  }
65
- }
 
 
 
 
 
 
 
 
62
  {
63
  parent::__construct($msg, 1, null);
64
  }
65
+ }
66
+
67
+ class SGExceptionExecutionTimeError extends SGException
68
+ {
69
+ public function __construct($msg = 'Execution timeout error')
70
+ {
71
+ parent::__construct($msg, 1, null);
72
+ }
73
+ }
app/code/community/BackupGuard/BackupGuardFree/com/core/exception/SGExceptionHandler.php DELETED
@@ -1,22 +0,0 @@
1
- <?php
2
- require_once(dirname(__FILE__).'/SGException.php');
3
-
4
- class SGExceptionHandler
5
- {
6
- public static function init()
7
- {
8
- set_exception_handler('SGExceptionHandler::exceptionHandler');
9
- }
10
-
11
- public static function log($exception)
12
- {
13
- echo $exception;
14
- //Sns_Log::log_exception( get_class( $ex ) , $ex->getMessage() , $ex->getFile() , $ex->getLine() );
15
- }
16
-
17
- public static function exceptionHandler($exception)
18
- {
19
- self::log($exception);
20
- return true;
21
- }
22
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/BackupGuard/BackupGuardFree/com/core/functions.php CHANGED
@@ -1,137 +1,145 @@
1
  <?php
2
  function realFilesize($filename)
3
  {
4
- $fp = fopen($filename, 'r');
5
- $return = false;
6
- if (is_resource($fp))
7
- {
8
- if (PHP_INT_SIZE < 8) // 32 bit
9
- {
10
- if (0 === fseek($fp, 0, SEEK_END))
11
- {
12
- $return = 0.0;
13
- $step = 0x7FFFFFFF;
14
- while ($step > 0)
15
- {
16
- if (0 === fseek($fp, - $step, SEEK_CUR))
17
- {
18
- $return += floatval($step);
19
- }
20
- else
21
- {
22
- $step >>= 1;
23
- }
24
- }
25
- }
26
- }
27
- else if (0 === fseek($fp, 0, SEEK_END)) // 64 bit
28
- {
29
- $return = ftell($fp);
30
- }
31
- }
32
-
33
- return $return;
34
  }
35
 
36
  function formattedDuration($startTs, $endTs)
37
  {
38
- $unit = 'seconds';
39
- $duration = $endTs-$startTs;
40
- if ($duration>=60 && $duration<3600)
41
- {
42
- $duration /= 60.0;
43
- $unit = 'minutes';
44
- }
45
- else if ($duration>=3600)
46
- {
47
- $duration /= 3600.0;
48
- $unit = 'hours';
49
- }
50
- $duration = number_format($duration, 2, '.', '');
51
-
52
- return $duration.' '.$unit;
53
  }
54
 
55
  function deleteDirectory($dirName)
56
  {
57
- $dirHandle = null;
58
- if (is_dir($dirName))
59
- {
60
- $dirHandle = opendir($dirName);
61
- }
62
-
63
- if (!$dirHandle)
64
- {
65
- return false;
66
- }
67
-
68
- while ($file = readdir($dirHandle))
69
- {
70
- if ($file != "." && $file != "..")
71
- {
72
- if (!is_dir($dirName."/".$file))
73
- {
74
- @unlink($dirName."/".$file);
75
- }
76
- else
77
- {
78
- deleteDirectory($dirName.'/'.$file);
79
- }
80
- }
81
- }
82
-
83
- closedir($dirHandle);
84
- return @rmdir($dirName);
85
  }
86
 
87
  function downloadFile($file, $type = 'application/octet-stream')
88
  {
89
- // Make sure the files exists, otherwise we are wasting our time
90
- if (!file_exists($file))
91
- {
92
- header("HTTP/1.1 404 Not Found");
93
- exit;
94
- }
95
-
96
- $size = realFilesize($file);
97
-
98
- $name = basename($file);
99
- header('Pragma: public');
100
- header('Expires: 0');
101
- header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
102
- header('Cache-Control: private', false);
103
- header('Content-Transfer-Encoding: binary');
104
- header('Content-Disposition: attachment; filename="'.$name.'";');
105
- header('Content-Type: ' . $type);
106
- header('Content-Length: ' . $size);
107
-
108
- $chunkSize = 1024 * 1024 * 8;
109
- $handle = fopen($file, 'rb');
110
- while (!feof($handle))
111
- {
112
- $buffer = fread($handle, $chunkSize);
113
- echo $buffer;
114
- ob_flush();
115
- flush();
116
- }
117
- fclose($handle);
118
-
119
- exit;
120
  }
121
 
122
- function shutdownAction($actionId, $actionType, $filePath, $dbFilePath)
123
  {
124
- $action = SGBackup::getAction($actionId);
125
- if ($action && ($action['status']==SG_ACTION_STATUS_IN_PROGRESS_DB || $action['status']==SG_ACTION_STATUS_IN_PROGRESS_FILES))
126
- {
127
- SGBackupLog::writeExceptionObject(new SGExceptionServerError('Execution time abort'));
128
-
129
- SGBackup::changeActionStatus($actionId, SG_ACTION_STATUS_ERROR);
130
-
131
- if ($actionType==SG_ACTION_TYPE_BACKUP)
132
- {
133
- @unlink($filePath);
134
- @unlink($dbFilePath);
135
- }
136
- }
137
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <?php
2
  function realFilesize($filename)
3
  {
4
+ $fp = fopen($filename, 'r');
5
+ $return = false;
6
+ if (is_resource($fp))
7
+ {
8
+ if (PHP_INT_SIZE < 8) // 32 bit
9
+ {
10
+ if (0 === fseek($fp, 0, SEEK_END))
11
+ {
12
+ $return = 0.0;
13
+ $step = 0x7FFFFFFF;
14
+ while ($step > 0)
15
+ {
16
+ if (0 === fseek($fp, - $step, SEEK_CUR))
17
+ {
18
+ $return += floatval($step);
19
+ }
20
+ else
21
+ {
22
+ $step >>= 1;
23
+ }
24
+ }
25
+ }
26
+ }
27
+ else if (0 === fseek($fp, 0, SEEK_END)) // 64 bit
28
+ {
29
+ $return = ftell($fp);
30
+ }
31
+ }
32
+
33
+ return $return;
34
  }
35
 
36
  function formattedDuration($startTs, $endTs)
37
  {
38
+ $unit = 'seconds';
39
+ $duration = $endTs-$startTs;
40
+ if ($duration>=60 && $duration<3600)
41
+ {
42
+ $duration /= 60.0;
43
+ $unit = 'minutes';
44
+ }
45
+ else if ($duration>=3600)
46
+ {
47
+ $duration /= 3600.0;
48
+ $unit = 'hours';
49
+ }
50
+ $duration = number_format($duration, 2, '.', '');
51
+
52
+ return $duration.' '.$unit;
53
  }
54
 
55
  function deleteDirectory($dirName)
56
  {
57
+ $dirHandle = null;
58
+ if (is_dir($dirName))
59
+ {
60
+ $dirHandle = opendir($dirName);
61
+ }
62
+
63
+ if (!$dirHandle)
64
+ {
65
+ return false;
66
+ }
67
+
68
+ while ($file = readdir($dirHandle))
69
+ {
70
+ if ($file != "." && $file != "..")
71
+ {
72
+ if (!is_dir($dirName."/".$file))
73
+ {
74
+ @unlink($dirName."/".$file);
75
+ }
76
+ else
77
+ {
78
+ deleteDirectory($dirName.'/'.$file);
79
+ }
80
+ }
81
+ }
82
+
83
+ closedir($dirHandle);
84
+ return @rmdir($dirName);
85
  }
86
 
87
  function downloadFile($file, $type = 'application/octet-stream')
88
  {
89
+ if (file_exists($file))
90
+ {
91
+ header('Content-Description: File Transfer');
92
+ header('Content-Type: '.$type);
93
+ header('Content-Disposition: attachment; filename="'.basename($file).'";');
94
+ header('Expires: 0');
95
+ header('Cache-Control: must-revalidate');
96
+ header('Pragma: public');
97
+ header('Content-Length: ' . filesize($file));
98
+ readfile($file);
99
+ }
100
+
101
+ exit;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102
  }
103
 
104
+ function downloadFileSymlink($safedir, $filename)
105
  {
106
+ $downloaddir = SG_SYMLINK_PATH;
107
+ $downloadURL = SG_SYMLINK_URL;
108
+
109
+ if (!file_exists($downloaddir))
110
+ {
111
+ mkdir($downloaddir, 0777);
112
+ }
113
+
114
+ $letters = 'abcdefghijklmnopqrstuvwxyz';
115
+ srand((double) microtime() * 1000000);
116
+ $string = '';
117
+
118
+ for ($i = 1; $i <= rand(4,12); $i++)
119
+ {
120
+ $q = rand(1,24);
121
+ $string = $string.$letters[$q];
122
+ }
123
+
124
+ $handle = opendir($downloaddir);
125
+ while ($dir = readdir($handle))
126
+ {
127
+ if ($dir == "." || $dir == "..")
128
+ {
129
+ continue;
130
+ }
131
+
132
+ if (is_dir($downloaddir.$dir))
133
+ {
134
+ @unlink($downloaddir . $dir . "/" . $filename);
135
+ @rmdir($downloaddir . $dir);
136
+ }
137
+ }
138
+
139
+ closedir($handle);
140
+
141
+ mkdir($downloaddir . $string, 0777);
142
+ symlink($safedir . $filename, $downloaddir . $string . "/" . $filename);
143
+ header("Location: " . $downloadURL . $string . "/" . $filename);
144
+ exit;
145
+ }
app/code/community/BackupGuard/BackupGuardFree/com/lib/SGArchive.php CHANGED
@@ -11,7 +11,7 @@ interface SGArchiveDelegate
11
 
12
  class SGArchive
13
  {
14
- const VERSION = 1;
15
  const CHUNK_SIZE = 1048576; //1mb
16
  private $filePath = '';
17
  private $mode = '';
@@ -19,7 +19,7 @@ class SGArchive
19
  private $cdr = array();
20
  private $fileOffset = null;
21
  private $delegate;
22
-
23
  public function __construct($filePath, $mode)
24
  {
25
  $this->filePath = $filePath;
@@ -27,33 +27,35 @@ class SGArchive
27
  $this->fileHandle = @fopen($filePath, $mode.'b');
28
  $this->clear();
29
  }
30
-
31
  public function setDelegate(SGArchiveDelegate $delegate)
32
  {
33
  $this->delegate = $delegate;
34
  }
35
-
36
  public function addFileFromPath($filename, $path)
37
  {
38
  $headerSize = $this->addFileHeader();
39
-
40
  $zlen = new Math_BigInteger(0);
41
  $len = new Math_BigInteger(0);
42
-
43
  $fp = fopen($path, 'rb');
44
  $filter = stream_filter_append($fp, 'zlib.deflate', STREAM_FILTER_READ);
45
-
46
  //read file in small chunks
47
  while (!feof($fp))
48
  {
49
  $data = fread($fp, self::CHUNK_SIZE);
50
  $zlen = $zlen->add(new Math_BigInteger(strlen($data)));
51
  $this->write($data);
 
52
  }
53
-
 
54
  stream_filter_remove($filter);
55
  fclose($fp);
56
-
57
  $this->addFileToCdr($filename, $zlen, $len, $headerSize);
58
  }
59
 
@@ -66,7 +68,7 @@ class SGArchive
66
  $data = gzdeflate($data);
67
  $this->write($data);
68
  }
69
-
70
  $zlen = new Math_BigInteger(strlen($data));
71
  $len = new Math_BigInteger(0);
72
 
@@ -79,7 +81,7 @@ class SGArchive
79
  $extra = '';
80
  $extraLengthInBytes = 4;
81
  $this->write($this->packToLittleEndian(strlen($extra), $extraLengthInBytes).$extra);
82
-
83
  return $extraLengthInBytes+strlen($extra);
84
  }
85
 
@@ -87,24 +89,24 @@ class SGArchive
87
  {
88
  //store cdr data for later use
89
  $this->addToCdr($filename, $zlen, $len);
90
-
91
  $this->fileOffset = $this->fileOffset->add(new Math_BigInteger($headerSize));
92
  $this->fileOffset = $this->fileOffset->add($zlen);
93
  }
94
-
95
  public function finalize()
96
  {
97
  $this->addFooter();
98
-
99
  fclose($this->fileHandle);
100
-
101
  $this->clear();
102
  }
103
-
104
  private function addFooter()
105
  {
106
  $footer = '';
107
-
108
  //save version
109
  $footer .= $this->packToLittleEndian(self::VERSION, 1);
110
 
@@ -122,16 +124,16 @@ class SGArchive
122
  //save number of bytes from here to the start of cdr
123
  $len = strlen($cdr)+strlen($extra)+13;
124
  $footer .= $this->packToLittleEndian($len, 4);
125
-
126
  $this->write($footer);
127
  }
128
-
129
  private function clear()
130
  {
131
  $this->cdr = array();
132
  $this->fileOffset = new Math_BigInteger(0);
133
  }
134
-
135
  private function addToCdr($filename, $compressedLength, $uncompressedLength)
136
  {
137
  $rec = $this->packToLittleEndian(0, 4); //crc (not used in this version)
@@ -140,21 +142,21 @@ class SGArchive
140
  $rec .= $this->packToLittleEndian($this->fileOffset);
141
  $rec .= $this->packToLittleEndian($compressedLength);
142
  $rec .= $this->packToLittleEndian($uncompressedLength); //uncompressed size (not used in this version)
143
-
144
  $this->cdr[] = $rec;
145
  }
146
-
147
  private function write($data)
148
  {
149
  fwrite($this->fileHandle, $data);
150
  fflush($this->fileHandle);
151
  }
152
-
153
  private function read($length)
154
  {
155
  return fread($this->fileHandle, $length);
156
  }
157
-
158
  private function packToLittleEndian($value, $size = 4)
159
  {
160
  if (is_int($value))
@@ -163,7 +165,7 @@ class SGArchive
163
  $value = str_pad(dechex($value), $size, '0', STR_PAD_LEFT);
164
  return strrev(pack('H'.$size, $value));
165
  }
166
-
167
  $hex = str_pad($value->toHex(), 16, '0', STR_PAD_LEFT);
168
 
169
  $high = substr($hex, 0, 8);
@@ -174,7 +176,7 @@ class SGArchive
174
 
175
  return $low.$high;
176
  }
177
-
178
  public function extractTo($destinationPath)
179
  {
180
  //read offset
@@ -184,7 +186,7 @@ class SGArchive
184
  //read version
185
  fseek($this->fileHandle, -$offset, SEEK_END);
186
  $version = hexdec($this->unpackLittleEndian($this->read(1), 1));
187
-
188
  if ($version != self::VERSION)
189
  {
190
  throw new SGExceptionBadRequest('Invalid SGArchive file');
@@ -195,37 +197,37 @@ class SGArchive
195
 
196
  //read cdr size
197
  $cdrSize = hexdec($this->unpackLittleEndian($this->read(4), 4));
198
-
199
  $this->delegate->didCountFilesInsideArchive($cdrSize);
200
-
201
  $this->extractCdr($cdrSize, $destinationPath);
202
  $this->extractFiles($destinationPath);
203
  }
204
-
205
  private function extractCdr($cdrSize, $destinationPath)
206
  {
207
  while ($cdrSize)
208
  {
209
  //read crc (not used in this version)
210
  $this->read(4);
211
-
212
  //read filename
213
  $filenameLen = hexdec($this->unpackLittleEndian($this->read(2), 2));
214
  $filename = $this->read($filenameLen);
215
  $filename = $this->delegate->getCorrectCdrFilename($filename);
216
-
217
  //read file offset (not used in this version)
218
  $this->read(8);
219
-
220
  //read compressed length
221
  $zlen = $this->unpackLittleEndian($this->read(8), 8);
222
  $zlen = new Math_BigInteger($zlen, 16);
223
-
224
  //read uncompressed length (not used in this version)
225
  $this->read(8);
226
-
227
  $cdrSize--;
228
-
229
  $path = $destinationPath.$filename;
230
  $path = str_replace('\\', '/', $path);
231
 
@@ -239,18 +241,18 @@ class SGArchive
239
  $this->delegate->didFindExtractError('Could not create directory: '.dirname($path));
240
  continue;
241
  }
242
-
243
  $this->cdr[] = array($filename, $zlen);
244
  }
245
  }
246
-
247
  private function extractFiles($destinationPath)
248
  {
249
  $zero = new Math_BigInteger(0);
250
  $blockSize = new Math_BigInteger(self::CHUNK_SIZE);
251
-
252
  fseek($this->fileHandle, 0, SEEK_SET);
253
-
254
  foreach ($this->cdr as $row)
255
  {
256
  //read extra (not used in this version)
@@ -261,15 +263,15 @@ class SGArchive
261
  {
262
  $this->delegate->didFindExtractError('Destination path is not writable: '.dirname($path));
263
  }
264
-
265
  $fp = @fopen($path, 'wb');
266
  if (is_resource($fp))
267
  {
268
  $filter = stream_filter_append($fp, 'zlib.inflate', STREAM_FILTER_WRITE);
269
  }
270
-
271
  $zlen = $row[1];
272
-
273
  while ($zlen->compare($zero)>0)
274
  {
275
  $readlen = $zlen->compare($blockSize)>=0?self::CHUNK_SIZE:(int)$zlen->toString();
@@ -280,26 +282,27 @@ class SGArchive
280
  }
281
 
282
  $zlen = $zlen->subtract($blockSize);
 
283
  }
284
-
285
  if (is_resource($fp))
286
  {
287
  stream_filter_remove($filter);
288
  fclose($fp);
289
  }
290
-
291
  $this->delegate->didExtractFile($path);
292
  }
293
  }
294
-
295
  private function unpackLittleEndian($data, $size)
296
  {
297
  $size *= 2; //2 characters for each byte
298
-
299
  $data = unpack('H'.$size, strrev($data));
300
  return $data[1];
301
  }
302
-
303
  private function createPath($path)
304
  {
305
  if (is_dir($path)) return true;
@@ -312,7 +315,7 @@ class SGArchive
312
  @chmod($path, 0777);
313
  return true;
314
  }
315
-
316
  return false;
317
  }
318
- }
11
 
12
  class SGArchive
13
  {
14
+ const VERSION = 2;
15
  const CHUNK_SIZE = 1048576; //1mb
16
  private $filePath = '';
17
  private $mode = '';
19
  private $cdr = array();
20
  private $fileOffset = null;
21
  private $delegate;
22
+
23
  public function __construct($filePath, $mode)
24
  {
25
  $this->filePath = $filePath;
27
  $this->fileHandle = @fopen($filePath, $mode.'b');
28
  $this->clear();
29
  }
30
+
31
  public function setDelegate(SGArchiveDelegate $delegate)
32
  {
33
  $this->delegate = $delegate;
34
  }
35
+
36
  public function addFileFromPath($filename, $path)
37
  {
38
  $headerSize = $this->addFileHeader();
39
+
40
  $zlen = new Math_BigInteger(0);
41
  $len = new Math_BigInteger(0);
42
+
43
  $fp = fopen($path, 'rb');
44
  $filter = stream_filter_append($fp, 'zlib.deflate', STREAM_FILTER_READ);
45
+
46
  //read file in small chunks
47
  while (!feof($fp))
48
  {
49
  $data = fread($fp, self::CHUNK_SIZE);
50
  $zlen = $zlen->add(new Math_BigInteger(strlen($data)));
51
  $this->write($data);
52
+ SGPing::update();
53
  }
54
+ SGPing::update();
55
+
56
  stream_filter_remove($filter);
57
  fclose($fp);
58
+
59
  $this->addFileToCdr($filename, $zlen, $len, $headerSize);
60
  }
61
 
68
  $data = gzdeflate($data);
69
  $this->write($data);
70
  }
71
+
72
  $zlen = new Math_BigInteger(strlen($data));
73
  $len = new Math_BigInteger(0);
74
 
81
  $extra = '';
82
  $extraLengthInBytes = 4;
83
  $this->write($this->packToLittleEndian(strlen($extra), $extraLengthInBytes).$extra);
84
+
85
  return $extraLengthInBytes+strlen($extra);
86
  }
87
 
89
  {
90
  //store cdr data for later use
91
  $this->addToCdr($filename, $zlen, $len);
92
+
93
  $this->fileOffset = $this->fileOffset->add(new Math_BigInteger($headerSize));
94
  $this->fileOffset = $this->fileOffset->add($zlen);
95
  }
96
+
97
  public function finalize()
98
  {
99
  $this->addFooter();
100
+
101
  fclose($this->fileHandle);
102
+
103
  $this->clear();
104
  }
105
+
106
  private function addFooter()
107
  {
108
  $footer = '';
109
+
110
  //save version
111
  $footer .= $this->packToLittleEndian(self::VERSION, 1);
112
 
124
  //save number of bytes from here to the start of cdr
125
  $len = strlen($cdr)+strlen($extra)+13;
126
  $footer .= $this->packToLittleEndian($len, 4);
127
+
128
  $this->write($footer);
129
  }
130
+
131
  private function clear()
132
  {
133
  $this->cdr = array();
134
  $this->fileOffset = new Math_BigInteger(0);
135
  }
136
+
137
  private function addToCdr($filename, $compressedLength, $uncompressedLength)
138
  {
139
  $rec = $this->packToLittleEndian(0, 4); //crc (not used in this version)
142
  $rec .= $this->packToLittleEndian($this->fileOffset);
143
  $rec .= $this->packToLittleEndian($compressedLength);
144
  $rec .= $this->packToLittleEndian($uncompressedLength); //uncompressed size (not used in this version)
145
+
146
  $this->cdr[] = $rec;
147
  }
148
+
149
  private function write($data)
150
  {
151
  fwrite($this->fileHandle, $data);
152
  fflush($this->fileHandle);
153
  }
154
+
155
  private function read($length)
156
  {
157
  return fread($this->fileHandle, $length);
158
  }
159
+
160
  private function packToLittleEndian($value, $size = 4)
161
  {
162
  if (is_int($value))
165
  $value = str_pad(dechex($value), $size, '0', STR_PAD_LEFT);
166
  return strrev(pack('H'.$size, $value));
167
  }
168
+
169
  $hex = str_pad($value->toHex(), 16, '0', STR_PAD_LEFT);
170
 
171
  $high = substr($hex, 0, 8);
176
 
177
  return $low.$high;
178
  }
179
+
180
  public function extractTo($destinationPath)
181
  {
182
  //read offset
186
  //read version
187
  fseek($this->fileHandle, -$offset, SEEK_END);
188
  $version = hexdec($this->unpackLittleEndian($this->read(1), 1));
189
+
190
  if ($version != self::VERSION)
191
  {
192
  throw new SGExceptionBadRequest('Invalid SGArchive file');
197
 
198
  //read cdr size
199
  $cdrSize = hexdec($this->unpackLittleEndian($this->read(4), 4));
200
+
201
  $this->delegate->didCountFilesInsideArchive($cdrSize);
202
+
203
  $this->extractCdr($cdrSize, $destinationPath);
204
  $this->extractFiles($destinationPath);
205
  }
206
+
207
  private function extractCdr($cdrSize, $destinationPath)
208
  {
209
  while ($cdrSize)
210
  {
211
  //read crc (not used in this version)
212
  $this->read(4);
213
+
214
  //read filename
215
  $filenameLen = hexdec($this->unpackLittleEndian($this->read(2), 2));
216
  $filename = $this->read($filenameLen);
217
  $filename = $this->delegate->getCorrectCdrFilename($filename);
218
+
219
  //read file offset (not used in this version)
220
  $this->read(8);
221
+
222
  //read compressed length
223
  $zlen = $this->unpackLittleEndian($this->read(8), 8);
224
  $zlen = new Math_BigInteger($zlen, 16);
225
+
226
  //read uncompressed length (not used in this version)
227
  $this->read(8);
228
+
229
  $cdrSize--;
230
+
231
  $path = $destinationPath.$filename;
232
  $path = str_replace('\\', '/', $path);
233
 
241
  $this->delegate->didFindExtractError('Could not create directory: '.dirname($path));
242
  continue;
243
  }
244
+
245
  $this->cdr[] = array($filename, $zlen);
246
  }
247
  }
248
+
249
  private function extractFiles($destinationPath)
250
  {
251
  $zero = new Math_BigInteger(0);
252
  $blockSize = new Math_BigInteger(self::CHUNK_SIZE);
253
+
254
  fseek($this->fileHandle, 0, SEEK_SET);
255
+
256
  foreach ($this->cdr as $row)
257
  {
258
  //read extra (not used in this version)
263
  {
264
  $this->delegate->didFindExtractError('Destination path is not writable: '.dirname($path));
265
  }
266
+
267
  $fp = @fopen($path, 'wb');
268
  if (is_resource($fp))
269
  {
270
  $filter = stream_filter_append($fp, 'zlib.inflate', STREAM_FILTER_WRITE);
271
  }
272
+
273
  $zlen = $row[1];
274
+ SGPing::update();
275
  while ($zlen->compare($zero)>0)
276
  {
277
  $readlen = $zlen->compare($blockSize)>=0?self::CHUNK_SIZE:(int)$zlen->toString();
282
  }
283
 
284
  $zlen = $zlen->subtract($blockSize);
285
+ SGPing::update();
286
  }
287
+
288
  if (is_resource($fp))
289
  {
290
  stream_filter_remove($filter);
291
  fclose($fp);
292
  }
293
+
294
  $this->delegate->didExtractFile($path);
295
  }
296
  }
297
+
298
  private function unpackLittleEndian($data, $size)
299
  {
300
  $size *= 2; //2 characters for each byte
301
+
302
  $data = unpack('H'.$size, strrev($data));
303
  return $data[1];
304
  }
305
+
306
  private function createPath($path)
307
  {
308
  if (is_dir($path)) return true;
315
  @chmod($path, 0777);
316
  return true;
317
  }
318
+
319
  return false;
320
  }
321
+ }
app/code/community/BackupGuard/BackupGuardFree/com/lib/SGMysqldump.php CHANGED
@@ -47,6 +47,7 @@ class SGMysqldump
47
  private $version;
48
  private $tableColumnTypes = array();
49
  private $delegate = null;
 
50
 
51
  /**
52
  * Constructor of SGMysqldump. Note that in the case of an SQLite database
@@ -93,6 +94,7 @@ class SGMysqldump
93
  $this->dbHandler = $dbHandler;
94
  $this->dbType = strtolower($type);
95
  $this->dumpSettings = self::array_replace_recursive($dumpSettingsDefault, $dumpSettings);
 
96
 
97
  $diff = array_diff(array_keys($this->dumpSettings), array_keys($dumpSettingsDefault));
98
  if (count($diff)>0) {
@@ -323,11 +325,15 @@ class SGMysqldump
323
  if (in_array($table, $this->dumpSettings['exclude-tables'], true)) {
324
  continue;
325
  }
 
326
  SGBackupLog::writeAction('backup table: '.$table, SG_BACKUP_LOG_POS_START);
 
327
  $this->getTableStructure($table);
 
328
  if (false === $this->dumpSettings['no-data']) {
329
  $this->listValues($table);
330
  }
 
331
  SGBackupLog::writeAction('backup table: '.$table, SG_BACKUP_LOG_POS_END);
332
  }
333
  }
@@ -370,9 +376,9 @@ class SGMysqldump
370
  * @param string $tableName Name of table to export
371
  * @return null
372
  */
373
- private function getTableStructure($tableName)
374
  {
375
- if (!$this->dumpSettings['no-create-info']) {
376
  $ret = '';
377
  if (!$this->dumpSettings['skip-comments']) {
378
  $ret = "--" . PHP_EOL .
@@ -511,6 +517,7 @@ class SGMysqldump
511
 
512
  $onlyOnce = true;
513
  $lineSize = 0;
 
514
 
515
  $colStmt = $this->getColumnStmt($tableName);
516
  $stmt = "SELECT $colStmt FROM `$tableName`";
@@ -519,7 +526,6 @@ class SGMysqldump
519
  $stmt .= " WHERE {$this->dumpSettings['where']}";
520
  }
521
 
522
- $offset = 0;
523
  $limit = SG_BACKUP_DATABASE_INSERT_LIMIT;
524
 
525
  while (true) {
@@ -544,7 +550,7 @@ class SGMysqldump
544
  }
545
  if ($lineSize > self::MAXLINESIZE) {
546
  $onlyOnce = true;
547
- $this->compressManager->write(";" . PHP_EOL);
548
  $lineSize = 0;
549
  }
550
 
@@ -560,7 +566,7 @@ class SGMysqldump
560
  }
561
 
562
  if (!$onlyOnce) {
563
- $this->compressManager->write(";" . PHP_EOL);
564
  }
565
 
566
  $this->endListValues($tableName);
@@ -734,7 +740,7 @@ class CompressBzip2 extends CompressManagerFactory
734
 
735
  public function open($filename)
736
  {
737
- $this->fileHandler = bzopen($filename, "w");
738
  if (false === $this->fileHandler) {
739
  throw new Exception("Output file is not writable");
740
  }
@@ -769,7 +775,7 @@ class CompressGzip extends CompressManagerFactory
769
 
770
  public function open($filename)
771
  {
772
- $this->fileHandler = gzopen($filename, "wb");
773
  if (false === $this->fileHandler) {
774
  throw new Exception("Output file is not writable");
775
  }
@@ -797,7 +803,7 @@ class CompressNone extends CompressManagerFactory
797
 
798
  public function open($filename)
799
  {
800
- $this->fileHandler = fopen($filename, "wb");
801
  if (false === $this->fileHandler) {
802
  throw new Exception("Output file is not writable");
803
  }
@@ -1110,8 +1116,8 @@ class TypeAdapterMysql extends TypeAdapterFactory
1110
 
1111
  $ret .= "CREATE DATABASE /*!32312 IF NOT EXISTS*/ `${databaseName}`".
1112
  " /*!40100 DEFAULT CHARACTER SET ${characterSet} " .
1113
- " COLLATE ${collationDb} */;" . PHP_EOL . PHP_EOL .
1114
- "USE `${databaseName}`;" . PHP_EOL . PHP_EOL;
1115
 
1116
  return $ret;
1117
  }
@@ -1137,10 +1143,10 @@ class TypeAdapterMysql extends TypeAdapterFactory
1137
  throw new Exception("Error getting table code, unknown output");
1138
  }
1139
 
1140
- $ret = "/*!40101 SET @saved_cs_client = @@character_set_client */;" . PHP_EOL .
1141
- "/*!40101 SET character_set_client = " . $dumpSettings['default-character-set'] . " */;" . PHP_EOL .
1142
- $row['Create Table'] . ";" . PHP_EOL .
1143
- "/*!40101 SET character_set_client = @saved_cs_client */;" . PHP_EOL .
1144
  PHP_EOL;
1145
  return $ret;
1146
  }
@@ -1173,7 +1179,7 @@ class TypeAdapterMysql extends TypeAdapterFactory
1173
  false === $triggerStmtReplaced3) {
1174
  $triggerStmtReplaced = $triggerStmt;
1175
  } else {
1176
- $triggerStmtReplaced = $triggerStmtReplaced3 . " */;";
1177
  }
1178
 
1179
  $ret .= $triggerStmtReplaced . PHP_EOL . PHP_EOL;
@@ -1202,9 +1208,9 @@ class TypeAdapterMysql extends TypeAdapterFactory
1202
  $triggerStmtReplaced = $triggerStmt;
1203
  }
1204
 
1205
- $ret .= "DELIMITER ;;" . PHP_EOL .
1206
- $triggerStmtReplaced . "*/;;" . PHP_EOL .
1207
- "DELIMITER ;" . PHP_EOL . PHP_EOL;
1208
  return $ret;
1209
  }
1210
 
@@ -1298,12 +1304,12 @@ class TypeAdapterMysql extends TypeAdapterFactory
1298
 
1299
  $args = func_get_args();
1300
 
1301
- return "LOCK TABLES `${args[0]}` WRITE;" . PHP_EOL;
1302
  }
1303
 
1304
  public function end_add_lock_table()
1305
  {
1306
- return "UNLOCK TABLES;" . PHP_EOL;
1307
  }
1308
 
1309
  public function start_add_disable_keys()
@@ -1312,7 +1318,7 @@ class TypeAdapterMysql extends TypeAdapterFactory
1312
  return "";
1313
  }
1314
  $args = func_get_args();
1315
- return "/*!40000 ALTER TABLE `${args[0]}` DISABLE KEYS */;" .
1316
  PHP_EOL;
1317
  }
1318
 
@@ -1322,18 +1328,18 @@ class TypeAdapterMysql extends TypeAdapterFactory
1322
  return "";
1323
  }
1324
  $args = func_get_args();
1325
- return "/*!40000 ALTER TABLE `${args[0]}` ENABLE KEYS */;" .
1326
  PHP_EOL;
1327
  }
1328
 
1329
  public function start_disable_autocommit()
1330
  {
1331
- return "SET autocommit=0;" . PHP_EOL;
1332
  }
1333
 
1334
  public function end_disable_autocommit()
1335
  {
1336
- return "COMMIT;" . PHP_EOL;
1337
  }
1338
 
1339
  public function add_drop_database()
@@ -1344,7 +1350,7 @@ class TypeAdapterMysql extends TypeAdapterFactory
1344
 
1345
  $args = func_get_args();
1346
 
1347
- return "/*!40000 DROP DATABASE IF EXISTS `${args[0]}`*/;" .
1348
  PHP_EOL . PHP_EOL;
1349
  }
1350
 
@@ -1356,7 +1362,7 @@ class TypeAdapterMysql extends TypeAdapterFactory
1356
 
1357
  $args = func_get_args();
1358
 
1359
- return "DROP TRIGGER IF EXISTS `${args[0]}`;" . PHP_EOL;
1360
  }
1361
 
1362
  public function drop_table()
@@ -1367,7 +1373,7 @@ class TypeAdapterMysql extends TypeAdapterFactory
1367
 
1368
  $args = func_get_args();
1369
 
1370
- return "DROP TABLE IF EXISTS `${args[0]}`;" . PHP_EOL;
1371
  }
1372
 
1373
  public function drop_view()
@@ -1378,8 +1384,8 @@ class TypeAdapterMysql extends TypeAdapterFactory
1378
 
1379
  $args = func_get_args();
1380
 
1381
- return "DROP TABLE IF EXISTS `${args[0]}`;" . PHP_EOL .
1382
- "/*!50001 DROP VIEW IF EXISTS `${args[0]}`*/;" . PHP_EOL;
1383
  }
1384
 
1385
  public function getDatabaseHeader()
@@ -1431,20 +1437,20 @@ class TypeAdapterMysql extends TypeAdapterFactory
1431
 
1432
  $args = func_get_args();
1433
  $dumpSettings = $args[0];
1434
- $ret = "/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;" . PHP_EOL .
1435
- "/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;" . PHP_EOL .
1436
- "/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;" . PHP_EOL .
1437
- "/*!40101 SET NAMES " . $dumpSettings['default-character-set'] . " */;" . PHP_EOL;
1438
 
1439
  if (false === $dumpSettings['skip-tz-utz']) {
1440
- $ret .= "/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;" . PHP_EOL .
1441
- "/*!40103 SET TIME_ZONE='+00:00' */;" . PHP_EOL;
1442
  }
1443
 
1444
- $ret .= "/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;" . PHP_EOL .
1445
- "/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;" . PHP_EOL .
1446
- "/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;" . PHP_EOL .
1447
- "/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;" . PHP_EOL .PHP_EOL;
1448
 
1449
  return $ret;
1450
  }
@@ -1460,17 +1466,17 @@ class TypeAdapterMysql extends TypeAdapterFactory
1460
  $ret = "";
1461
 
1462
  if (false === $dumpSettings['skip-tz-utz']) {
1463
- $ret .= "/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;" . PHP_EOL;
1464
  }
1465
 
1466
- $ret .= "/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;" . PHP_EOL .
1467
- "/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;" . PHP_EOL .
1468
- "/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;" . PHP_EOL .
1469
- "/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;" . PHP_EOL .
1470
- "/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;" . PHP_EOL .
1471
- "/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;" . PHP_EOL .
1472
- "/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;" . PHP_EOL . PHP_EOL;
1473
 
1474
  return $ret;
1475
  }
1476
- }
47
  private $version;
48
  private $tableColumnTypes = array();
49
  private $delegate = null;
50
+ private $excludeTables = array();
51
 
52
  /**
53
  * Constructor of SGMysqldump. Note that in the case of an SQLite database
94
  $this->dbHandler = $dbHandler;
95
  $this->dbType = strtolower($type);
96
  $this->dumpSettings = self::array_replace_recursive($dumpSettingsDefault, $dumpSettings);
97
+ $this->excludeTables = $dumpSettings['exclude-tables'];
98
 
99
  $diff = array_diff(array_keys($this->dumpSettings), array_keys($dumpSettingsDefault));
100
  if (count($diff)>0) {
325
  if (in_array($table, $this->dumpSettings['exclude-tables'], true)) {
326
  continue;
327
  }
328
+
329
  SGBackupLog::writeAction('backup table: '.$table, SG_BACKUP_LOG_POS_START);
330
+
331
  $this->getTableStructure($table);
332
+
333
  if (false === $this->dumpSettings['no-data']) {
334
  $this->listValues($table);
335
  }
336
+
337
  SGBackupLog::writeAction('backup table: '.$table, SG_BACKUP_LOG_POS_END);
338
  }
339
  }
376
  * @param string $tableName Name of table to export
377
  * @return null
378
  */
379
+ private function getTableStructure($tableName, $skipCreate = false)
380
  {
381
+ if (!$skipCreate && !$this->dumpSettings['no-create-info']) {
382
  $ret = '';
383
  if (!$this->dumpSettings['skip-comments']) {
384
  $ret = "--" . PHP_EOL .
517
 
518
  $onlyOnce = true;
519
  $lineSize = 0;
520
+ $offset = 0;
521
 
522
  $colStmt = $this->getColumnStmt($tableName);
523
  $stmt = "SELECT $colStmt FROM `$tableName`";
526
  $stmt .= " WHERE {$this->dumpSettings['where']}";
527
  }
528
 
 
529
  $limit = SG_BACKUP_DATABASE_INSERT_LIMIT;
530
 
531
  while (true) {
550
  }
551
  if ($lineSize > self::MAXLINESIZE) {
552
  $onlyOnce = true;
553
+ $this->compressManager->write(";/*SGEnd*/" . PHP_EOL);
554
  $lineSize = 0;
555
  }
556
 
566
  }
567
 
568
  if (!$onlyOnce) {
569
+ $this->compressManager->write(";/*SGEnd*/" . PHP_EOL);
570
  }
571
 
572
  $this->endListValues($tableName);
740
 
741
  public function open($filename)
742
  {
743
+ $this->fileHandler = bzopen($filename, 'a');
744
  if (false === $this->fileHandler) {
745
  throw new Exception("Output file is not writable");
746
  }
775
 
776
  public function open($filename)
777
  {
778
+ $this->fileHandler = gzopen($filename, "ab");
779
  if (false === $this->fileHandler) {
780
  throw new Exception("Output file is not writable");
781
  }
803
 
804
  public function open($filename)
805
  {
806
+ $this->fileHandler = fopen($filename, "ab");
807
  if (false === $this->fileHandler) {
808
  throw new Exception("Output file is not writable");
809
  }
1116
 
1117
  $ret .= "CREATE DATABASE /*!32312 IF NOT EXISTS*/ `${databaseName}`".
1118
  " /*!40100 DEFAULT CHARACTER SET ${characterSet} " .
1119
+ " COLLATE ${collationDb} */;/*SGEnd*/" . PHP_EOL . PHP_EOL .
1120
+ "USE `${databaseName}`;/*SGEnd*/" . PHP_EOL . PHP_EOL;
1121
 
1122
  return $ret;
1123
  }
1143
  throw new Exception("Error getting table code, unknown output");
1144
  }
1145
 
1146
+ $ret = "/*!40101 SET @saved_cs_client = @@character_set_client */;/*SGEnd*/" . PHP_EOL .
1147
+ "/*!40101 SET character_set_client = " . $dumpSettings['default-character-set'] . " */;/*SGEnd*/" . PHP_EOL .
1148
+ $row['Create Table'] . ";/*SGEnd*/" . PHP_EOL .
1149
+ "/*!40101 SET character_set_client = @saved_cs_client */;/*SGEnd*/" . PHP_EOL .
1150
  PHP_EOL;
1151
  return $ret;
1152
  }
1179
  false === $triggerStmtReplaced3) {
1180
  $triggerStmtReplaced = $triggerStmt;
1181
  } else {
1182
+ $triggerStmtReplaced = $triggerStmtReplaced3 . " */;/*SGEnd*/";
1183
  }
1184
 
1185
  $ret .= $triggerStmtReplaced . PHP_EOL . PHP_EOL;
1208
  $triggerStmtReplaced = $triggerStmt;
1209
  }
1210
 
1211
+ $ret .= "DELIMITER ;;/*SGEnd*/" . PHP_EOL .
1212
+ $triggerStmtReplaced . "*/;;/*SGEnd*/" . PHP_EOL .
1213
+ "DELIMITER ;/*SGEnd*/" . PHP_EOL . PHP_EOL;
1214
  return $ret;
1215
  }
1216
 
1304
 
1305
  $args = func_get_args();
1306
 
1307
+ return "LOCK TABLES `${args[0]}` WRITE;/*SGEnd*/" . PHP_EOL;
1308
  }
1309
 
1310
  public function end_add_lock_table()
1311
  {
1312
+ return "UNLOCK TABLES;/*SGEnd*/" . PHP_EOL;
1313
  }
1314
 
1315
  public function start_add_disable_keys()
1318
  return "";
1319
  }
1320
  $args = func_get_args();
1321
+ return "/*!40000 ALTER TABLE `${args[0]}` DISABLE KEYS */;/*SGEnd*/" .
1322
  PHP_EOL;
1323
  }
1324
 
1328
  return "";
1329
  }
1330
  $args = func_get_args();
1331
+ return "/*!40000 ALTER TABLE `${args[0]}` ENABLE KEYS */;/*SGEnd*/" .
1332
  PHP_EOL;
1333
  }
1334
 
1335
  public function start_disable_autocommit()
1336
  {
1337
+ return "SET autocommit=0;/*SGEnd*/" . PHP_EOL;
1338
  }
1339
 
1340
  public function end_disable_autocommit()
1341
  {
1342
+ return "COMMIT;/*SGEnd*/" . PHP_EOL;
1343
  }
1344
 
1345
  public function add_drop_database()
1350
 
1351
  $args = func_get_args();
1352
 
1353
+ return "/*!40000 DROP DATABASE IF EXISTS `${args[0]}`*/;/*SGEnd*/" .
1354
  PHP_EOL . PHP_EOL;
1355
  }
1356
 
1362
 
1363
  $args = func_get_args();
1364
 
1365
+ return "DROP TRIGGER IF EXISTS `${args[0]}`;/*SGEnd*/" . PHP_EOL;
1366
  }
1367
 
1368
  public function drop_table()
1373
 
1374
  $args = func_get_args();
1375
 
1376
+ return "DROP TABLE IF EXISTS `${args[0]}`;/*SGEnd*/" . PHP_EOL;
1377
  }
1378
 
1379
  public function drop_view()
1384
 
1385
  $args = func_get_args();
1386
 
1387
+ return "DROP TABLE IF EXISTS `${args[0]}`;/*SGEnd*/" . PHP_EOL .
1388
+ "/*!50001 DROP VIEW IF EXISTS `${args[0]}`*/;/*SGEnd*/" . PHP_EOL;
1389
  }
1390
 
1391
  public function getDatabaseHeader()
1437
 
1438
  $args = func_get_args();
1439
  $dumpSettings = $args[0];
1440
+ $ret = "/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;/*SGEnd*/" . PHP_EOL .
1441
+ "/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;/*SGEnd*/" . PHP_EOL .
1442
+ "/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;/*SGEnd*/" . PHP_EOL .
1443
+ "/*!40101 SET NAMES " . $dumpSettings['default-character-set'] . " */;/*SGEnd*/" . PHP_EOL;
1444
 
1445
  if (false === $dumpSettings['skip-tz-utz']) {
1446
+ $ret .= "/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;/*SGEnd*/" . PHP_EOL .
1447
+ "/*!40103 SET TIME_ZONE='+00:00' */;/*SGEnd*/" . PHP_EOL;
1448
  }
1449
 
1450
+ $ret .= "/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;/*SGEnd*/" . PHP_EOL .
1451
+ "/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;/*SGEnd*/" . PHP_EOL .
1452
+ "/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;/*SGEnd*/" . PHP_EOL .
1453
+ "/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;/*SGEnd*/" . PHP_EOL .PHP_EOL;
1454
 
1455
  return $ret;
1456
  }
1466
  $ret = "";
1467
 
1468
  if (false === $dumpSettings['skip-tz-utz']) {
1469
+ $ret .= "/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;/*SGEnd*/" . PHP_EOL;
1470
  }
1471
 
1472
+ $ret .= "/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;/*SGEnd*/" . PHP_EOL .
1473
+ "/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;/*SGEnd*/" . PHP_EOL .
1474
+ "/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;/*SGEnd*/" . PHP_EOL .
1475
+ "/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;/*SGEnd*/" . PHP_EOL .
1476
+ "/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;/*SGEnd*/" . PHP_EOL .
1477
+ "/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;/*SGEnd*/" . PHP_EOL .
1478
+ "/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;/*SGEnd*/" . PHP_EOL . PHP_EOL;
1479
 
1480
  return $ret;
1481
  }
1482
+ }
app/design/adminhtml/default/default/layout/backupguardfree.xml CHANGED
@@ -14,8 +14,7 @@
14
  <reference name="head">
15
  <action method="addItem">
16
  <type>skin_css</type>
17
- <name>css/BackupGuardFree/sgstyles.less</name>
18
- <params>id="less_inc"</params>
19
  </action>
20
  <action method="addItem">
21
  <type>skin_css</type>
@@ -23,4 +22,4 @@
23
  </action>
24
  </reference>
25
  </adminhtml_backupguardfree_backups>
26
- </layout>
14
  <reference name="head">
15
  <action method="addItem">
16
  <type>skin_css</type>
17
+ <name>css/BackupGuardFree/bgstyle.less.css</name>
 
18
  </action>
19
  <action method="addItem">
20
  <type>skin_css</type>
22
  </action>
23
  </reference>
24
  </adminhtml_backupguardfree_backups>
25
+ </layout>
app/design/adminhtml/default/default/template/backupguardfree/backups.phtml CHANGED
@@ -13,6 +13,7 @@
13
  <thead>
14
  <tr>
15
  <th><?php _t('Filename')?></th>
 
16
  <th><?php _t('Date')?></th>
17
  <th><?php _t('Status')?></th>
18
  <th><?php _t('Actions')?></th>
@@ -21,30 +22,41 @@
21
  <tbody>
22
  <?php if(empty($backups)):?>
23
  <tr>
24
- <td colspan="4"><?php _t('No backups found.')?></td>
25
  </tr>
26
  <?php endif;?>
27
  <?php foreach($backups as $backup): ?>
28
  <tr>
29
  <td><?php echo $backup['name'] ?></td>
 
30
  <td><?php echo $backup['date'] ?></td>
31
  <td id="sg-status-tabe-data" <?php echo $backup['active']?'data-toggle="tooltip" data-placement="top" data-original-title="" data-container="#sg-wrapper"':''?>>
32
  <?php if($backup['active']):
33
  $activeOptions = json_decode(SGConfig::get('SG_ACTIVE_BACKUP_OPTIONS'), true);
34
  $filteredStatuses = filterStatusesByActionType($backup, $activeOptions);
35
  ?>
36
- <input type="hidden" id="sg-active-action-id" value="<?php echo $backup['id']?>"/>
37
- <?php foreach ($filteredStatuses as $statusCode): ?>
38
- <span class="btn-xs sg-status-icon sg-status-<?php echo $statusCode ?>">&nbsp;</span>
39
- <?php endforeach; ?>
40
  <div class="progress sg-progress">
41
  <div class="progress-bar progress-bar-danger"></div>
42
  </div>
43
  <?php else: ?>
44
- <?php if ($backup['backup_warning'] == 1 || $backup['restore_warning'] == 1): ?>
45
- <span class="glyphicon glyphicon-warning-sign btn-xs text-warning" data-toggle="tooltip" data-placement="top" data-original-title="<?php echo $backup['backup_warning']?_t('Warnings found during backup',true):_t('Warnings found during restore',true)?>" data-container="#sg-wrapper"></span>
46
- <?php elseif ($backup['backup_error'] == 1 || $backup['restore_error'] == 1): ?>
47
- <span class="glyphicon glyphicon-warning-sign btn-xs text-danger" data-toggle="tooltip" data-placement="top" data-original-title="<?php echo $backup['backup_error']?_t('Errors found during backup',true):_t('Errors found during restore',true)?>" data-container="#sg-wrapper"></span>
 
 
 
 
 
 
 
 
 
 
48
  <?php else: ?>
49
  <span class="glyphicon glyphicon-ok btn-xs text-success"></span>
50
  <?php endif;?>
@@ -63,30 +75,32 @@
63
  <ul class="dropdown-menu">
64
  <?php if($backup['files']):?>
65
  <li>
66
- <a href="<?php echo SG_PUBLIC_AJAX_URL.'action/downloadBackup/?backupName='.$backup['name'].'&downloadType='.SG_BACKUP_DWONLOAD_TYPE_SGBP ?>">
67
  <i class="glyphicon glyphicon-hdd" aria-hidden="true"></i> <?php _t('Backup')?>
68
  </a>
69
  </li>
70
  <?php endif;?>
71
  <?php if($backup['backup_log']):?>
72
  <li>
73
- <a href="<?php echo SG_PUBLIC_AJAX_URL.'action/downloadBackup/?backupName='.$backup['name'].'&downloadType='.SG_BACKUP_DWONLOAD_TYPE_BACKUP_LOG ?>">
74
  <i class="glyphicon glyphicon-list-alt" aria-hidden="true"></i> <?php _t('Backup log')?>
75
  </a>
76
  </li>
77
  <?php endif;?>
78
  <?php if($backup['restore_log']):?>
79
  <li>
80
- <a href="<?php echo SG_PUBLIC_AJAX_URL.'action/downloadBackup/?backupName='.$backup['name'].'&downloadType='.SG_BACKUP_DWONLOAD_TYPE_RESTORE_LOG ?>">
81
  <i class="glyphicon glyphicon-th-list" aria-hidden="true"></i> <?php _t('Restore log')?>
82
  </a>
83
  </li>
84
  <?php endif;?>
85
  </ul>
86
  </div>
87
- <a href="javascript:void(0)" title="<?php _t('Restore')?>" class="btn btn-success btn-xs sg-restore" data-restore-name="<?php echo $backup['name']?>">
88
- &nbsp;<i class="glyphicon glyphicon-repeat" aria-hidden="true"></i>&nbsp;
89
- </a>
 
 
90
  <?php endif; ?>
91
  </td>
92
  </tr>
@@ -97,4 +111,4 @@
97
  <ul class="pagination"></ul>
98
  </div>
99
  </fieldset>
100
- </div>
13
  <thead>
14
  <tr>
15
  <th><?php _t('Filename')?></th>
16
+ <th><?php _t('size')?></th>
17
  <th><?php _t('Date')?></th>
18
  <th><?php _t('Status')?></th>
19
  <th><?php _t('Actions')?></th>
22
  <tbody>
23
  <?php if(empty($backups)):?>
24
  <tr>
25
+ <td colspan="5"><?php _t('No backups found.')?></td>
26
  </tr>
27
  <?php endif;?>
28
  <?php foreach($backups as $backup): ?>
29
  <tr>
30
  <td><?php echo $backup['name'] ?></td>
31
+ <td><?php echo $backup['size'] ?></td>
32
  <td><?php echo $backup['date'] ?></td>
33
  <td id="sg-status-tabe-data" <?php echo $backup['active']?'data-toggle="tooltip" data-placement="top" data-original-title="" data-container="#sg-wrapper"':''?>>
34
  <?php if($backup['active']):
35
  $activeOptions = json_decode(SGConfig::get('SG_ACTIVE_BACKUP_OPTIONS'), true);
36
  $filteredStatuses = filterStatusesByActionType($backup, $activeOptions);
37
  ?>
38
+ <input type="hidden" id="sg-active-action-id" value="<?php echo $backup['id']; ?>"/>
39
+ <?php foreach ($filteredStatuses as $statusCode): ?>
40
+ <span class="btn-xs sg-status-icon sg-status-<?php echo $statusCode; ?>">&nbsp;</span>
41
+ <?php endforeach; ?>
42
  <div class="progress sg-progress">
43
  <div class="progress-bar progress-bar-danger"></div>
44
  </div>
45
  <?php else: ?>
46
+ <?php if ($backup['status'] == SG_ACTION_STATUS_FINISHED_WARNINGS): ?>
47
+ <span class="glyphicon glyphicon-warning-sign btn-xs text-warning" data-toggle="tooltip" data-placement="top" data-original-title="<?php
48
+ if($backup['type']==SG_ACTION_TYPE_BACKUP): echo _t('Warnings found during backup',true);
49
+ elseif($backup['type']==SG_ACTION_TYPE_RESTORE): echo _t('Warnings found during restore',true);
50
+ else: echo _t('Warnings found during upload',true);
51
+ endif;
52
+ ?>" data-container="#sg-wrapper"></span>
53
+ <?php elseif ($backup['status'] == SG_ACTION_STATUS_ERROR): ?>
54
+ <span class="glyphicon glyphicon-warning-sign btn-xs text-danger" data-toggle="tooltip" data-placement="top" data-original-title="<?php
55
+ if($backup['type']==SG_ACTION_TYPE_BACKUP): echo _t('Errors found during backup',true);
56
+ elseif($backup['type']==SG_ACTION_TYPE_RESTORE): echo _t('Errors found during restore',true);
57
+ else: echo _t('Errors found during upload',true);
58
+ endif;
59
+ ?>" data-container="#sg-wrapper"></span>
60
  <?php else: ?>
61
  <span class="glyphicon glyphicon-ok btn-xs text-success"></span>
62
  <?php endif;?>
75
  <ul class="dropdown-menu">
76
  <?php if($backup['files']):?>
77
  <li>
78
+ <a href="<?php echo SG_PUBLIC_AJAX_URL.'action/downloadBackup/?backupName='.$backup['name'].'&downloadType='.SG_BACKUP_DOWNLOAD_TYPE_SGBP ?>">
79
  <i class="glyphicon glyphicon-hdd" aria-hidden="true"></i> <?php _t('Backup')?>
80
  </a>
81
  </li>
82
  <?php endif;?>
83
  <?php if($backup['backup_log']):?>
84
  <li>
85
+ <a href="<?php echo SG_PUBLIC_AJAX_URL.'action/downloadBackup/?backupName='.$backup['name'].'&downloadType='.SG_BACKUP_DOWNLOAD_TYPE_BACKUP_LOG ?>">
86
  <i class="glyphicon glyphicon-list-alt" aria-hidden="true"></i> <?php _t('Backup log')?>
87
  </a>
88
  </li>
89
  <?php endif;?>
90
  <?php if($backup['restore_log']):?>
91
  <li>
92
+ <a href="<?php echo SG_PUBLIC_AJAX_URL.'action/downloadBackup/?backupName='.$backup['name'].'&downloadType='.SG_BACKUP_DOWNLOAD_TYPE_RESTORE_LOG ?>">
93
  <i class="glyphicon glyphicon-th-list" aria-hidden="true"></i> <?php _t('Restore log')?>
94
  </a>
95
  </li>
96
  <?php endif;?>
97
  </ul>
98
  </div>
99
+ <?php if(file_exists(SG_BACKUP_DIRECTORY.$backup['name'].'/'.$backup['name'].'.sgbp')):?>
100
+ <a href="javascript:void(0)" title="<?php _t('Restore')?>" class="btn btn-success btn-xs sg-restore" data-restore-name="<?php echo $backup['name']?>">
101
+ &nbsp;<i class="glyphicon glyphicon-repeat" aria-hidden="true"></i>&nbsp;
102
+ </a>
103
+ <?php endif;?>
104
  <?php endif; ?>
105
  </td>
106
  </tr>
111
  <ul class="pagination"></ul>
112
  </div>
113
  </fieldset>
114
+ </div>
app/design/adminhtml/default/default/template/backupguardfree/header.phtml CHANGED
@@ -1,3 +1,8 @@
 
 
 
 
 
1
  <div class="sg-spinner"></div>
2
  <div class="sg-wrapper-less">
3
- <div id="sg-wrapper" style="display: none;">
1
+ <?php
2
+ if(SGConfig::get('SG_EXCEPTION_TIMEOUT_ERROR')) {
3
+ require_once(SG_PUBLIC_INCLUDE_PATH.'notification.'.strtolower(SG_ENV_ADAPTER).'.php');
4
+ }
5
+ ?>
6
  <div class="sg-spinner"></div>
7
  <div class="sg-wrapper-less">
8
+ <div id="sg-wrapper" style="display: none;">
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>BackupGuardFree</name>
4
- <version>1.0.4</version>
5
  <stability>stable</stability>
6
  <license>GNU General Public License (GPL)</license>
7
  <channel>community</channel>
@@ -10,9 +10,9 @@
10
  <description>Backup Guard is the best backup choice for Magento. We offer the easiest way to backup and restore your Magento based online business.</description>
11
  <notes>Fully functional stable version</notes>
12
  <authors><author><name>Backup Guard</name><user>backupguard</user><email>info@backup-guard.com</email></author></authors>
13
- <date>2015-08-25</date>
14
- <time>16:40:11</time>
15
- <contents><target name="magecommunity"><dir name="BackupGuard"><dir name="BackupGuardFree"><dir name="Helper"><file name="Data.php" hash="04b15859891eb315cd1f354d257e1d65"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir><dir name="Model"><dir name="Resource"><dir name="Mysql4"><file name="Setup.php" hash="845be9f6ac2a30c5b3f21a929903209d"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir><file name=".DS_Store" hash="66db1361e49569b58e3e8aedb992b9fc"/></dir><file name=".DS_Store" hash="646b26ad78ebc3149e23ed5c835878c0"/></dir><dir name="com"><file name="boot.php" hash="910d37979bd2962cdbf8d3dcd4c104bc"/><dir name="config"><file name="config.magento.free.php" hash="d50267dd6088e2332f1a6892088aba75"/><file name="config.magento.php" hash="9a567810b84bdcd73e5f26ac4d3b17fc"/><file name="config.php" hash="5310c94e72c033b047598318aba5feb2"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir><dir name="core"><file name="SGBoot.php" hash="ee12bba847eb1546acc28051dc065572"/><file name="SGConfig.php" hash="0faca670ac378139cc90e59575cb3557"/><dir name="backup"><file name="SGBackup.php" hash="74e39e7fe3fb9d533a901ede6ae1ddf1"/><file name="SGBackupDatabase.php" hash="9128886431a71688a12fa89191da51fd"/><file name="SGBackupFiles.php" hash="68488a1457451888c0e05de1cd4c3cc2"/><file name="SGBackupLog.php" hash="bf0ec89ead6df0ce99d6cb5fe951ec47"/><file name="SGIBackupDelegate.php" hash="a606022528a0ed6365c69343c7b69430"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir><dir name="database"><file name="SGDatabase.php" hash="dff778077ceb81ee00f1188ce57b5dac"/><file name="SGDatabaseAdapterMagento.php" hash="f51364359af1e8dd76c135d2d9b8039f"/><file name="SGIDatabaseAdapter.php" hash="6146b2b2f14180b8427367ffedba1291"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir><dir name="exception"><file name="SGException.php" hash="7a3cbe209f0737223373dca16475613d"/><file name="SGExceptionHandler.php" hash="def3b1b28cd285d3dc924e7111937885"/></dir><file name="functions.php" hash="1f089733e8eeb7cf468980523cc24e56"/><dir name="log"><file name="SGFileLogHandler.php" hash="e69c778949e19e440c7233628bf213fb"/><file name="SGILogHandler.php" hash="cda58db6525b5815fc90788826763ea3"/><file name="SGLog.php" hash="62a8ebece354ceda02d4d76ddf28e1e1"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir><file name=".DS_Store" hash="af5667afdc58429867d97873427b94e3"/></dir><dir name="lib"><file name="BigInteger.php" hash="b295e37ff7afb37201b8cb8c2f52d689"/><file name="SGArchive.php" hash="726b00a645bb0a7f34f977b240ebb61e"/><file name="SGMysqldump.php" hash="bec061cfefba1e5b8f2bc6ba9209c67c"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir><file name=".DS_Store" hash="2b1e654a646f22d57c5c1f2732170a6a"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="BackupguardfreeController.php" hash="b6bb4c98174f0d6d18e24c7347cdffef"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir><file name=".DS_Store" hash="548f6d732905524bd07fe9a5dc4a66c1"/></dir><dir name="etc"><file name="adminhtml.xml" hash="cacd8bd0d96b43e2f0d4f6eb15ac6a1b"/><file name="config.xml" hash="8d9f3ac91236a58ff5d712be7b61f4d5"/></dir><dir name="public"><dir name="ajax"><file name="cancelBackup.php" hash="e1861e440be94b399f3744c0c5560a96"/><file name="checkBackupCreation.php" hash="1c69edf496a5241af0c40d731a6bbb51"/><file name="checkRestoreCreation.php" hash="1c69edf496a5241af0c40d731a6bbb51"/><file name="deleteBackup.php" hash="6528bbfabb79b17ab93053b6c931aab0"/><file name="downloadBackup.php" hash="5e05d80556bc0f0045402904c7feb3ff"/><file name="getAction.php" hash="b6a88e3948a3a6a41c9b7dda6a40dc0a"/><file name="getRunningActions.php" hash="26e7a9de98697d0712696eb3f5be6bb3"/><file name="importBackup.php" hash="eff8b0ffd25301544f26df5f799067d1"/><file name="manualBackup.php" hash="21e62d45e5474653cd7e85d8bd77afc9"/><file name="modalImport.php" hash="aa8f3073849affcb5fe7c5c050eef712"/><file name="modalManualBackup.php" hash="ffd029e26382fa53de6d489ebcc72235"/><file name="resetStatus.php" hash="5a84a0e1782abf906ca9e31333c5320a"/><file name="restore.php" hash="f8c69735cfaa5aafa75fe5e232679577"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir><file name="boot.php" hash="d053522b871ce96d76beb03fe391e82e"/><dir name="config"><file name="config.magento.php" hash="eafbf7040d89ec1fdd549cb7fb53d9c9"/><file name="config.php" hash="f77ff02ae094bbd475b1b6ceefb4b2b6"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir><dir name="include"><file name="functions.php" hash="91edf152dc8312c760cfed4657fcb750"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir><file name=".DS_Store" hash="9e0267ed238925358bbaffbfebc991e1"/></dir><dir name="sg_backups"><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/><file name=".htaccess" hash="5cc8a02be988615b049f5abecba2f3a0"/></dir><dir name="sql"><dir name="backupguardfree_setup"><file name="mysql4-install-1.0.0.php" hash="d62412fdd789784f2f8fa8846d13277e"/></dir><file name=".DS_Store" hash="20e6e71aa70dbc92d48b82c1d0bcfb86"/></dir><file name=".DS_Store" hash="b36313724d1b3ea50fb621534bad508e"/></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="backupguardfree.xml" hash="a5dca884f414b85c8dc97e3ae8862d64"/></dir><dir name="template"><dir name="backupguardfree"><file name="backups.phtml" hash="0a6a3258dcb327d7d3eeb9715a01ebf5"/><file name="footer.phtml" hash="9f20a07d22abc146767b82a60f0fc0b4"/><file name="header.phtml" hash="ce282b1fbc2e73fa7276bd447472acb6"/><file name="modal.phtml" hash="4c05d97029f503498c64122cfb8d1b5c"/><file name="sidebar.phtml" hash="e82a3846fb4a5aaa415a99c3956df16d"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="BackupGuard_BackupGuardFree.xml" hash="614e5b35bdeb05dda35f45e07134ff01"/></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="base"><dir name="default"><dir name="css"><dir name="BackupGuardFree"><file name="bootstrap-switch.min.css" hash="a5fc24bfc254551bf97471e959a1a3c2"/><file name="bootstrap.css" hash="6ae0da48eef7326eef3c2948c513ef85"/><file name="fonts.css" hash="6340582acb39554d1c648848f421cedf"/><file name="main.css" hash="c6c7711a4a624746ded94ed70b088597"/><file name="sgstyles.less" hash="5c0be6a721b22a2b0b43b1d0f6f0a9fc"/><file name="spinner.css" hash="f075eca88818c436ddc7ae2bed549a7f"/></dir></dir><dir name="js"><dir name="BackupGuardFree"><file name="bootstrap-switch.min.js" hash="12ce5d59f687e3c2a8d8395aee0c89b3"/><file name="bootstrap.min.js" hash="c5df4cc68652b407c8367147e1851c00"/><file name="jquery.min.js" hash="5790ead7ad3ba27397aedfa3d263b867"/><file name="less.min.js" hash="4cc1b709ea0594b927222ddb3a144dbd"/><file name="main.js" hash="9729fb7d663451c9cd8db7cdc0b2a12b"/><file name="sgbackup.js" hash="197251cf66324e8df0a8556e3ccb9379"/><file name="sgrequesthandler.js" hash="8393a85a58356387aedb81d1978b498b"/><file name="sgrequesthandler.magento.js" hash="d84ede2a4ec4fd6996927239aa0e2943"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir></dir><dir name="media"><dir name="BackupGuardFree"><dir name="fonts"><file name="ODelI1aHBYDBqgeIAH2zlCxe5Tewm2_XWfbGchcXw4g.woff2" hash="c1bd5cd2c67859ed361a10bf2b25a270"/><file name="ODelI1aHBYDBqgeIAH2zlIa1YDtoarzwSXxTHggEXMw.woff2" hash="e39654b1857c430c950a507c50087b8a"/><file name="ODelI1aHBYDBqgeIAH2zlJbPFduIYtoLzwST68uhz_Y.woff2" hash="00bfa19cecc3900646c108e4ac706488"/><file name="OpenSans-Bold.woff" hash="cc42266cd7747dc5baf34d3c9346588f"/><file name="OpenSans-Light.woff" hash="32eb33cb1b3372cc5407ca24dc49d95f"/><file name="OpenSans.woff" hash="48a40d69fc0470991491bb9da3ea7126"/><file name="PTSerif-Caption.woff" hash="fbab4b1c8cc18cbd06cd64819399b110"/><file name="glyphicons-halflings-regular.eot" hash="f4769f9bdb7466be65088239c12046d1"/><file name="glyphicons-halflings-regular.svg" hash="89889688147bd7575d6327160d64e760"/><file name="glyphicons-halflings-regular.ttf" hash="e18bbf611f2a2e43afc071aa2f4e1512"/><file name="glyphicons-halflings-regular.woff" hash="fa2772327f55d8198301fdb8bcfc8158"/><file name="glyphicons-halflings-regular.woff2" hash="448c34a56d699c29117adc64c43affeb"/><file name="iconFont.dev.svg" hash="942fceb470bcb3b81f0ef4709c48c7d1"/><file name="iconFont.eot" hash="a4a081fea840239c3290acc40d518db3"/><file name="iconFont.json" hash="0dedee782ccf65d36f2599d22be70b56"/><file name="iconFont.svg" hash="e40fc64f66bc515730527b23da86bd5d"/><file name="iconFont.ttf" hash="a166f24c519d354ea121438fa010f7c9"/><file name="iconFont.woff" hash="1576a03757affd80023c2b76909670f2"/><file name="metroSysIcons.svg" hash="6e9df107d3ce5f4a9429bb6707781ff2"/><file name="metroSysIcons.ttf" hash="429d6273d7dde27cc53ada319ee8e94c"/><file name="metroSysIcons.woff" hash="133f18b18ab4338f4cd03c116b470afd"/><file name="toadOcfmlt9b38dHJxOBGCD5K6T8I4oZ1X3Xvlj_UeP3rGVtsTkPsbDajuO5ueQw.woff2" hash="b8f60b344e356217bccd52f5b7c5e1fe"/><file name="toadOcfmlt9b38dHJxOBGCP2LEk6lMzYsRqr3dHFImA.woff2" hash="7fde7742449b0174b0a6664889897c80"/><file name="toadOcfmlt9b38dHJxOBGDOFnJNygIkrHciC8BWzbCz3rGVtsTkPsbDajuO5ueQw.woff2" hash="79d99634f030bd764a7f239a78893862"/><file name="toadOcfmlt9b38dHJxOBGJkF8H8ye47wsfpWywda8og.woff2" hash="578d4394a9a36694716553db11ad034e"/><file name="toadOcfmlt9b38dHJxOBGMms7UHsIbjUxEJqIwog-i_3rGVtsTkPsbDajuO5ueQw.woff2" hash="44d45f6c370bee3815fa581e8ad65ed8"/><file name="toadOcfmlt9b38dHJxOBGO4s1Ux4PuImWPk5fSr6HPL3rGVtsTkPsbDajuO5ueQw.woff2" hash="d5c08021e6abbb3fbb610f4044cfd4fe"/></dir><dir name="img"><file name="backup-icons.png" hash="cfcb9705b8fc349229fa581bd906587c"/><file name="backup-icons@2x.png" hash="7407484458d8162a31f7e91a0ae3698d"/><file name="sg-ajax-loader.gif" hash="8a496edb52adab003987ab0ec33327f2"/><file name="sglogo.png" hash="08a7c06afb560f20d8c68c4843fb6a9b"/><file name="sgselect.png" hash="68f8964fd17f66faec62d2220b8c6fc3"/><file name="social-icons@2x.png" hash="cf43b681c85416d48800da97deadeeb4"/></dir><file name=".DS_Store" hash="7c9b6b8c6d59b6c19ee5d1044f9edc28"/></dir></dir></dir></dir></dir></target></contents>
16
  <compatible/>
17
  <dependencies><required><php><min>5.3.0</min><max>6.0.0</max></php><extension><name>zlib</name><min/><max/></extension></required></dependencies>
18
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>BackupGuardFree</name>
4
+ <version>1.0.5</version>
5
  <stability>stable</stability>
6
  <license>GNU General Public License (GPL)</license>
7
  <channel>community</channel>
10
  <description>Backup Guard is the best backup choice for Magento. We offer the easiest way to backup and restore your Magento based online business.</description>
11
  <notes>Fully functional stable version</notes>
12
  <authors><author><name>Backup Guard</name><user>backupguard</user><email>info@backup-guard.com</email></author></authors>
13
+ <date>2016-03-15</date>
14
+ <time>11:41:26</time>
15
+ <contents><target name="magecommunity"><dir name="BackupGuard"><dir name="BackupGuardFree"><dir name="Helper"><file name="Data.php" hash="04b15859891eb315cd1f354d257e1d65"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir><dir name="Model"><dir name="Resource"><dir name="Mysql4"><file name="Setup.php" hash="845be9f6ac2a30c5b3f21a929903209d"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir><file name=".DS_Store" hash="66db1361e49569b58e3e8aedb992b9fc"/></dir><file name=".DS_Store" hash="646b26ad78ebc3149e23ed5c835878c0"/></dir><dir name="com"><file name="boot.php" hash="910d37979bd2962cdbf8d3dcd4c104bc"/><dir name="config"><file name="config.magento.free.php" hash="d50267dd6088e2332f1a6892088aba75"/><file name="config.magento.php" hash="6d6f459154033d32a5b3d9eaa2d2d2ca"/><file name="config.php" hash="9bd047850c31149313bc8d358c0e3afa"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir><dir name="core"><file name="SGBoot.php" hash="0da9b9a7cbf93b64c306857c0577d581"/><file name="SGConfig.php" hash="0faca670ac378139cc90e59575cb3557"/><file name="SGPing.php" hash="cf5dddf3714848edba171a3f652ce0d0"/><dir name="backup"><file name="SGBackup.php" hash="9f6375b414173eaeb0e8d59d8282475b"/><file name="SGBackupDatabase.php" hash="2f390ca11863945e098666d1590e658c"/><file name="SGBackupFiles.php" hash="614f763ce3c147d36399f2ca4378e679"/><file name="SGBackupLog.php" hash="bf0ec89ead6df0ce99d6cb5fe951ec47"/><file name="SGIBackupDelegate.php" hash="b5db5f3afdf588d1808f15634b4493ca"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir><dir name="database"><file name="SGDatabase.php" hash="dff778077ceb81ee00f1188ce57b5dac"/><file name="SGDatabaseAdapterMagento.php" hash="f51364359af1e8dd76c135d2d9b8039f"/><file name="SGIDatabaseAdapter.php" hash="6146b2b2f14180b8427367ffedba1291"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir><dir name="exception"><file name="SGException.php" hash="9a69304caf29f2970adc0aa556f5e3b5"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir><file name="functions.php" hash="b74abfd7267aa3f512638a51e82bdccb"/><dir name="log"><file name="SGFileLogHandler.php" hash="e69c778949e19e440c7233628bf213fb"/><file name="SGILogHandler.php" hash="cda58db6525b5815fc90788826763ea3"/><file name="SGLog.php" hash="62a8ebece354ceda02d4d76ddf28e1e1"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir><file name=".DS_Store" hash="af5667afdc58429867d97873427b94e3"/></dir><dir name="lib"><file name="BigInteger.php" hash="b295e37ff7afb37201b8cb8c2f52d689"/><file name="SGArchive.php" hash="745cd1034c32587aa1f541e389ae8c6d"/><file name="SGMysqldump.php" hash="68f9db9ca58471b343c4317f1dc26590"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir><file name=".DS_Store" hash="2b1e654a646f22d57c5c1f2732170a6a"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="BackupguardfreeController.php" hash="b6bb4c98174f0d6d18e24c7347cdffef"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir><file name=".DS_Store" hash="548f6d732905524bd07fe9a5dc4a66c1"/></dir><dir name="etc"><file name="adminhtml.xml" hash="cacd8bd0d96b43e2f0d4f6eb15ac6a1b"/><file name="config.xml" hash="8d9f3ac91236a58ff5d712be7b61f4d5"/></dir><dir name="public"><dir name="ajax"><file name="cancelBackup.php" hash="e1861e440be94b399f3744c0c5560a96"/><file name="checkBackupCreation.php" hash="1c69edf496a5241af0c40d731a6bbb51"/><file name="checkRestoreCreation.php" hash="1c69edf496a5241af0c40d731a6bbb51"/><file name="deleteBackup.php" hash="6528bbfabb79b17ab93053b6c931aab0"/><file name="downloadBackup.php" hash="98f7783387fe9cc6bb35751777429ecd"/><file name="getAction.php" hash="7a3c4b5a4daa5fe0491aaacf98484959"/><file name="getRunningActions.php" hash="26e7a9de98697d0712696eb3f5be6bb3"/><file name="hideNotice.php" hash="2fe634a46ebe98166f031cc625fb0e96"/><file name="importBackup.php" hash="eff8b0ffd25301544f26df5f799067d1"/><file name="manualBackup.php" hash="bc8f991a7fb71a823d3a0093edd2eb74"/><file name="modalImport.php" hash="d4ee99d6460eb1124e34b6f305ff1d88"/><file name="modalManualBackup.php" hash="ffd029e26382fa53de6d489ebcc72235"/><file name="resetStatus.php" hash="5a84a0e1782abf906ca9e31333c5320a"/><file name="restore.php" hash="f8c69735cfaa5aafa75fe5e232679577"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir><file name="boot.php" hash="d053522b871ce96d76beb03fe391e82e"/><dir name="config"><file name="config.magento.php" hash="eafbf7040d89ec1fdd549cb7fb53d9c9"/><file name="config.php" hash="e9190f3d1f76335854d84818280f5eb7"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir><dir name="include"><file name="functions.php" hash="b8fed6ffa90cedeb7f3d58dc7a3c6983"/><file name="notification.magento.php" hash="07795085e0f996eac67797847ebb8e76"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir><file name=".DS_Store" hash="2f012ad187ee2a6283a004465ff8e45f"/></dir><dir name="sg_backups"><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/><file name=".htaccess" hash="5cc8a02be988615b049f5abecba2f3a0"/></dir><dir name="sql"><dir name="backupguardfree_setup"><file name="mysql4-install-1.0.0.php" hash="d62412fdd789784f2f8fa8846d13277e"/></dir><file name=".DS_Store" hash="20e6e71aa70dbc92d48b82c1d0bcfb86"/></dir><file name=".DS_Store" hash="b36313724d1b3ea50fb621534bad508e"/></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="backupguardfree.xml" hash="9ec35e7858eccd45d4e4a7fcd8ea117a"/></dir><dir name="template"><dir name="backupguardfree"><file name="backups.phtml" hash="918f0a5de161ff139eb1e9c22d71f908"/><file name="footer.phtml" hash="9f20a07d22abc146767b82a60f0fc0b4"/><file name="header.phtml" hash="4b7c727dcb4418641d7197e055a6fd2b"/><file name="modal.phtml" hash="4c05d97029f503498c64122cfb8d1b5c"/><file name="sidebar.phtml" hash="e82a3846fb4a5aaa415a99c3956df16d"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="BackupGuard_BackupGuardFree.xml" hash="614e5b35bdeb05dda35f45e07134ff01"/></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="base"><dir name="default"><dir name="css"><dir name="BackupGuardFree"><file name="bgstyle.less.css" hash="cd2266d14889c669646a133f18753eec"/><file name="bootstrap-switch.min.css" hash="a5fc24bfc254551bf97471e959a1a3c2"/><file name="bootstrap.css" hash="b2e9c4ecf3b7cec6e1c4c640aa5c53c6"/><file name="fonts.css" hash="7b665c6a2cd31f95c47cec63b2cdbb49"/><file name="main.css" hash="b00db9909061e896729a2f1e38d4f0b8"/><file name="spinner.css" hash="e9c9db39afbe5c9ee3c2ab02f5842be8"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir></dir><dir name="js"><dir name="BackupGuardFree"><file name="bootstrap-switch.min.js" hash="12ce5d59f687e3c2a8d8395aee0c89b3"/><file name="bootstrap.min.js" hash="c5df4cc68652b407c8367147e1851c00"/><file name="jquery.min.js" hash="5790ead7ad3ba27397aedfa3d263b867"/><file name="less.min.js" hash="4cc1b709ea0594b927222ddb3a144dbd"/><file name="main.js" hash="126f5e26602b50a9068b41eac277ec6c"/><file name="sgbackup.js" hash="197251cf66324e8df0a8556e3ccb9379"/><file name="sgrequesthandler.js" hash="8393a85a58356387aedb81d1978b498b"/><file name="sgrequesthandler.magento.js" hash="d84ede2a4ec4fd6996927239aa0e2943"/><file name=".DS_Store" hash="194577a7e20bdcc7afbb718f502c134c"/></dir></dir><dir name="media"><dir name="BackupGuardFree"><dir name="fonts"><file name="ODelI1aHBYDBqgeIAH2zlCxe5Tewm2_XWfbGchcXw4g.woff2" hash="c1bd5cd2c67859ed361a10bf2b25a270"/><file name="ODelI1aHBYDBqgeIAH2zlIa1YDtoarzwSXxTHggEXMw.woff2" hash="e39654b1857c430c950a507c50087b8a"/><file name="ODelI1aHBYDBqgeIAH2zlJbPFduIYtoLzwST68uhz_Y.woff2" hash="00bfa19cecc3900646c108e4ac706488"/><file name="OpenSans-Bold.woff" hash="cc42266cd7747dc5baf34d3c9346588f"/><file name="OpenSans-Light.woff" hash="32eb33cb1b3372cc5407ca24dc49d95f"/><file name="OpenSans.woff" hash="48a40d69fc0470991491bb9da3ea7126"/><file name="PTSerif-Caption.woff" hash="fbab4b1c8cc18cbd06cd64819399b110"/><file name="glyphicons-halflings-regular.eot" hash="f4769f9bdb7466be65088239c12046d1"/><file name="glyphicons-halflings-regular.svg" hash="89889688147bd7575d6327160d64e760"/><file name="glyphicons-halflings-regular.ttf" hash="e18bbf611f2a2e43afc071aa2f4e1512"/><file name="glyphicons-halflings-regular.woff" hash="fa2772327f55d8198301fdb8bcfc8158"/><file name="glyphicons-halflings-regular.woff2" hash="448c34a56d699c29117adc64c43affeb"/><file name="iconFont.dev.svg" hash="942fceb470bcb3b81f0ef4709c48c7d1"/><file name="iconFont.eot" hash="a4a081fea840239c3290acc40d518db3"/><file name="iconFont.json" hash="0dedee782ccf65d36f2599d22be70b56"/><file name="iconFont.svg" hash="e40fc64f66bc515730527b23da86bd5d"/><file name="iconFont.ttf" hash="a166f24c519d354ea121438fa010f7c9"/><file name="iconFont.woff" hash="1576a03757affd80023c2b76909670f2"/><file name="metroSysIcons.svg" hash="6e9df107d3ce5f4a9429bb6707781ff2"/><file name="metroSysIcons.ttf" hash="429d6273d7dde27cc53ada319ee8e94c"/><file name="metroSysIcons.woff" hash="133f18b18ab4338f4cd03c116b470afd"/><file name="toadOcfmlt9b38dHJxOBGCD5K6T8I4oZ1X3Xvlj_UeP3rGVtsTkPsbDajuO5ueQw.woff2" hash="b8f60b344e356217bccd52f5b7c5e1fe"/><file name="toadOcfmlt9b38dHJxOBGCP2LEk6lMzYsRqr3dHFImA.woff2" hash="7fde7742449b0174b0a6664889897c80"/><file name="toadOcfmlt9b38dHJxOBGDOFnJNygIkrHciC8BWzbCz3rGVtsTkPsbDajuO5ueQw.woff2" hash="79d99634f030bd764a7f239a78893862"/><file name="toadOcfmlt9b38dHJxOBGJkF8H8ye47wsfpWywda8og.woff2" hash="578d4394a9a36694716553db11ad034e"/><file name="toadOcfmlt9b38dHJxOBGMms7UHsIbjUxEJqIwog-i_3rGVtsTkPsbDajuO5ueQw.woff2" hash="44d45f6c370bee3815fa581e8ad65ed8"/><file name="toadOcfmlt9b38dHJxOBGO4s1Ux4PuImWPk5fSr6HPL3rGVtsTkPsbDajuO5ueQw.woff2" hash="d5c08021e6abbb3fbb610f4044cfd4fe"/></dir><dir name="img"><file name="backup-icons.png" hash="cfcb9705b8fc349229fa581bd906587c"/><file name="backup-icons@2x.png" hash="7407484458d8162a31f7e91a0ae3698d"/><file name="sg-ajax-loader.gif" hash="8a496edb52adab003987ab0ec33327f2"/><file name="sglogo.png" hash="08a7c06afb560f20d8c68c4843fb6a9b"/><file name="sgselect.png" hash="68f8964fd17f66faec62d2220b8c6fc3"/><file name="social-icons@2x.png" hash="cf43b681c85416d48800da97deadeeb4"/></dir><file name=".DS_Store" hash="7c9b6b8c6d59b6c19ee5d1044f9edc28"/></dir></dir></dir></dir></dir></target></contents>
16
  <compatible/>
17
  <dependencies><required><php><min>5.3.0</min><max>6.0.0</max></php><extension><name>zlib</name><min/><max/></extension></required></dependencies>
18
  </package>
skin/adminhtml/base/default/css/BackupGuardFree/.DS_Store ADDED
Binary file
skin/adminhtml/base/default/css/BackupGuardFree/bgstyle.less.css ADDED
@@ -0,0 +1,7505 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .sg-wrapper-less {
2
+ /* vietnamese */
3
+ /* latin-ext */
4
+ /* latin */
5
+ /* vietnamese */
6
+ /* latin-ext */
7
+ /* latin */
8
+ /* vietnamese */
9
+ /* latin-ext */
10
+ /* latin */
11
+ /*!
12
+ * bootswatch v3.3.4+1
13
+ * Homepage: http://bootswatch.com
14
+ * Copyright 2012-2015 Thomas Park
15
+ * Licensed under MIT
16
+ * Based on Bootstrap
17
+ */
18
+ /*! normalize.css v3.0.2 | MIT License | git.io/normalize */
19
+ /*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
20
+ /* Sidebar Styles */
21
+ /*Files*/
22
+ /*ftp*/
23
+ /*dropbox*/
24
+ /*gdrive*/
25
+ /*rdb*/
26
+ /*rfiles*/
27
+ }
28
+ @font-face {
29
+ font-family: 'Source Sans Pro';
30
+ font-style: normal;
31
+ font-weight: 300;
32
+ src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../../media/BackupGuardFree/fonts/toadOcfmlt9b38dHJxOBGCD5K6T8I4oZ1X3Xvlj_UeP3rGVtsTkPsbDajuO5ueQw.woff2') format('woff2');
33
+ unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;
34
+ }
35
+ @font-face {
36
+ font-family: 'Source Sans Pro';
37
+ font-style: normal;
38
+ font-weight: 300;
39
+ src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../../media/BackupGuardFree/fonts/toadOcfmlt9b38dHJxOBGDOFnJNygIkrHciC8BWzbCz3rGVtsTkPsbDajuO5ueQw.woff2') format('woff2');
40
+ unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
41
+ }
42
+ @font-face {
43
+ font-family: 'Source Sans Pro';
44
+ font-style: normal;
45
+ font-weight: 300;
46
+ src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../../media/BackupGuardFree/fonts/toadOcfmlt9b38dHJxOBGCP2LEk6lMzYsRqr3dHFImA.woff2') format('woff2');
47
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
48
+ }
49
+ @font-face {
50
+ font-family: 'Source Sans Pro';
51
+ font-style: normal;
52
+ font-weight: 400;
53
+ src: local('Source Sans Pro'), local('SourceSansPro-Regular'), url('../../media/BackupGuardFree/fonts/ODelI1aHBYDBqgeIAH2zlCxe5Tewm2_XWfbGchcXw4g.woff2') format('woff2');
54
+ unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;
55
+ }
56
+ @font-face {
57
+ font-family: 'Source Sans Pro';
58
+ font-style: normal;
59
+ font-weight: 400;
60
+ src: local('Source Sans Pro'), local('SourceSansPro-Regular'), url('../../media/BackupGuardFree/fonts/ODelI1aHBYDBqgeIAH2zlIa1YDtoarzwSXxTHggEXMw.woff2') format('woff2');
61
+ unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
62
+ }
63
+ @font-face {
64
+ font-family: 'Source Sans Pro';
65
+ font-style: normal;
66
+ font-weight: 400;
67
+ src: local('Source Sans Pro'), local('SourceSansPro-Regular'), url('../../media/BackupGuardFree/fonts/ODelI1aHBYDBqgeIAH2zlJbPFduIYtoLzwST68uhz_Y.woff2') format('woff2');
68
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
69
+ }
70
+ @font-face {
71
+ font-family: 'Source Sans Pro';
72
+ font-style: normal;
73
+ font-weight: 700;
74
+ src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../../media/BackupGuardFree/fonts/toadOcfmlt9b38dHJxOBGMms7UHsIbjUxEJqIwog-i_3rGVtsTkPsbDajuO5ueQw.woff2') format('woff2');
75
+ unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;
76
+ }
77
+ @font-face {
78
+ font-family: 'Source Sans Pro';
79
+ font-style: normal;
80
+ font-weight: 700;
81
+ src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../../media/BackupGuardFree/fonts/toadOcfmlt9b38dHJxOBGO4s1Ux4PuImWPk5fSr6HPL3rGVtsTkPsbDajuO5ueQw.woff2') format('woff2');
82
+ unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
83
+ }
84
+ @font-face {
85
+ font-family: 'Source Sans Pro';
86
+ font-style: normal;
87
+ font-weight: 700;
88
+ src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../../media/BackupGuardFree/fonts/toadOcfmlt9b38dHJxOBGJkF8H8ye47wsfpWywda8og.woff2') format('woff2');
89
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
90
+ }
91
+ .sg-wrapper-less html {
92
+ font-family: sans-serif;
93
+ -ms-text-size-adjust: 100%;
94
+ -webkit-text-size-adjust: 100%;
95
+ }
96
+ .sg-wrapper-less body {
97
+ margin: 0;
98
+ }
99
+ .sg-wrapper-less article,
100
+ .sg-wrapper-less aside,
101
+ .sg-wrapper-less details,
102
+ .sg-wrapper-less figcaption,
103
+ .sg-wrapper-less figure,
104
+ .sg-wrapper-less footer,
105
+ .sg-wrapper-less header,
106
+ .sg-wrapper-less hgroup,
107
+ .sg-wrapper-less main,
108
+ .sg-wrapper-less menu,
109
+ .sg-wrapper-less nav,
110
+ .sg-wrapper-less section,
111
+ .sg-wrapper-less summary {
112
+ display: block;
113
+ }
114
+ .sg-wrapper-less audio,
115
+ .sg-wrapper-less canvas,
116
+ .sg-wrapper-less progress,
117
+ .sg-wrapper-less video {
118
+ display: inline-block;
119
+ vertical-align: baseline;
120
+ }
121
+ .sg-wrapper-less audio:not([controls]) {
122
+ display: none;
123
+ height: 0;
124
+ }
125
+ .sg-wrapper-less [hidden],
126
+ .sg-wrapper-less template {
127
+ display: none;
128
+ }
129
+ .sg-wrapper-less a {
130
+ background-color: transparent;
131
+ }
132
+ .sg-wrapper-less a:active,
133
+ .sg-wrapper-less a:hover {
134
+ outline: 0;
135
+ }
136
+ .sg-wrapper-less abbr[title] {
137
+ border-bottom: 1px dotted;
138
+ }
139
+ .sg-wrapper-less b,
140
+ .sg-wrapper-less strong {
141
+ font-weight: bold;
142
+ }
143
+ .sg-wrapper-less dfn {
144
+ font-style: italic;
145
+ }
146
+ .sg-wrapper-less h1 {
147
+ font-size: 2em;
148
+ margin: 0.67em 0;
149
+ }
150
+ .sg-wrapper-less mark {
151
+ background: #ff0;
152
+ color: #000;
153
+ }
154
+ .sg-wrapper-less small {
155
+ font-size: 80%;
156
+ }
157
+ .sg-wrapper-less sub,
158
+ .sg-wrapper-less sup {
159
+ font-size: 75%;
160
+ line-height: 0;
161
+ position: relative;
162
+ vertical-align: baseline;
163
+ }
164
+ .sg-wrapper-less sup {
165
+ top: -0.5em;
166
+ }
167
+ .sg-wrapper-less sub {
168
+ bottom: -0.25em;
169
+ }
170
+ .sg-wrapper-less img {
171
+ border: 0;
172
+ }
173
+ .sg-wrapper-less svg:not(:root) {
174
+ overflow: hidden;
175
+ }
176
+ .sg-wrapper-less figure {
177
+ margin: 1em 40px;
178
+ }
179
+ .sg-wrapper-less hr {
180
+ -moz-box-sizing: content-box;
181
+ -webkit-box-sizing: content-box;
182
+ box-sizing: content-box;
183
+ height: 0;
184
+ }
185
+ .sg-wrapper-less pre {
186
+ overflow: auto;
187
+ }
188
+ .sg-wrapper-less code,
189
+ .sg-wrapper-less kbd,
190
+ .sg-wrapper-less pre,
191
+ .sg-wrapper-less samp {
192
+ font-family: monospace, monospace;
193
+ font-size: 1em;
194
+ }
195
+ .sg-wrapper-less button,
196
+ .sg-wrapper-less input,
197
+ .sg-wrapper-less optgroup,
198
+ .sg-wrapper-less select,
199
+ .sg-wrapper-less textarea {
200
+ color: inherit;
201
+ font: inherit;
202
+ margin: 0;
203
+ }
204
+ .sg-wrapper-less button {
205
+ overflow: visible;
206
+ }
207
+ .sg-wrapper-less button,
208
+ .sg-wrapper-less select {
209
+ text-transform: none;
210
+ }
211
+ .sg-wrapper-less button,
212
+ .sg-wrapper-less html input[type="button"],
213
+ .sg-wrapper-less input[type="reset"],
214
+ .sg-wrapper-less input[type="submit"] {
215
+ -webkit-appearance: button;
216
+ cursor: pointer;
217
+ }
218
+ .sg-wrapper-less button[disabled],
219
+ .sg-wrapper-less html input[disabled] {
220
+ cursor: default;
221
+ }
222
+ .sg-wrapper-less button::-moz-focus-inner,
223
+ .sg-wrapper-less input::-moz-focus-inner {
224
+ border: 0;
225
+ padding: 0;
226
+ }
227
+ .sg-wrapper-less input {
228
+ line-height: normal;
229
+ }
230
+ .sg-wrapper-less input[type="checkbox"],
231
+ .sg-wrapper-less input[type="radio"] {
232
+ -webkit-box-sizing: border-box;
233
+ -moz-box-sizing: border-box;
234
+ box-sizing: border-box;
235
+ padding: 0;
236
+ }
237
+ .sg-wrapper-less input[type="number"]::-webkit-inner-spin-button,
238
+ .sg-wrapper-less input[type="number"]::-webkit-outer-spin-button {
239
+ height: auto;
240
+ }
241
+ .sg-wrapper-less input[type="search"] {
242
+ -webkit-appearance: textfield;
243
+ -moz-box-sizing: content-box;
244
+ -webkit-box-sizing: content-box;
245
+ box-sizing: content-box;
246
+ }
247
+ .sg-wrapper-less input[type="search"]::-webkit-search-cancel-button,
248
+ .sg-wrapper-less input[type="search"]::-webkit-search-decoration {
249
+ -webkit-appearance: none;
250
+ }
251
+ .sg-wrapper-less fieldset {
252
+ border: 1px solid #c0c0c0;
253
+ margin: 0 2px;
254
+ padding: 0.35em 0.625em 0.75em;
255
+ }
256
+ .sg-wrapper-less legend {
257
+ border: 0;
258
+ padding: 0;
259
+ }
260
+ .sg-wrapper-less textarea {
261
+ overflow: auto;
262
+ }
263
+ .sg-wrapper-less optgroup {
264
+ font-weight: bold;
265
+ }
266
+ .sg-wrapper-less table {
267
+ border-collapse: collapse;
268
+ border-spacing: 0;
269
+ }
270
+ .sg-wrapper-less td,
271
+ .sg-wrapper-less th {
272
+ padding: 0;
273
+ }
274
+ @media print {
275
+ .sg-wrapper-less *,
276
+ .sg-wrapper-less *:before,
277
+ .sg-wrapper-less *:after {
278
+ background: transparent !important;
279
+ color: #000 !important;
280
+ -webkit-box-shadow: none !important;
281
+ box-shadow: none !important;
282
+ text-shadow: none !important;
283
+ }
284
+ .sg-wrapper-less a,
285
+ .sg-wrapper-less a:visited {
286
+ text-decoration: underline;
287
+ }
288
+ .sg-wrapper-less a[href]:after {
289
+ content: " (" attr(href) ")";
290
+ }
291
+ .sg-wrapper-less abbr[title]:after {
292
+ content: " (" attr(title) ")";
293
+ }
294
+ .sg-wrapper-less a[href^="#"]:after,
295
+ .sg-wrapper-less a[href^="javascript:"]:after {
296
+ content: "";
297
+ }
298
+ .sg-wrapper-less pre,
299
+ .sg-wrapper-less blockquote {
300
+ border: 1px solid #999;
301
+ page-break-inside: avoid;
302
+ }
303
+ .sg-wrapper-less thead {
304
+ display: table-header-group;
305
+ }
306
+ .sg-wrapper-less tr,
307
+ .sg-wrapper-less img {
308
+ page-break-inside: avoid;
309
+ }
310
+ .sg-wrapper-less img {
311
+ max-width: 100% !important;
312
+ }
313
+ .sg-wrapper-less p,
314
+ .sg-wrapper-less h2,
315
+ .sg-wrapper-less h3 {
316
+ orphans: 3;
317
+ widows: 3;
318
+ }
319
+ .sg-wrapper-less h2,
320
+ .sg-wrapper-less h3 {
321
+ page-break-after: avoid;
322
+ }
323
+ .sg-wrapper-less select {
324
+ background: #fff !important;
325
+ }
326
+ .sg-wrapper-less .navbar {
327
+ display: none;
328
+ }
329
+ .sg-wrapper-less .btn > .caret,
330
+ .sg-wrapper-less .dropup > .btn > .caret {
331
+ border-top-color: #000 !important;
332
+ }
333
+ .sg-wrapper-less .label {
334
+ border: 1px solid #000;
335
+ }
336
+ .sg-wrapper-less .table {
337
+ border-collapse: collapse !important;
338
+ }
339
+ .sg-wrapper-less .table td,
340
+ .sg-wrapper-less .table th {
341
+ background-color: #fff !important;
342
+ }
343
+ .sg-wrapper-less .table-bordered th,
344
+ .sg-wrapper-less .table-bordered td {
345
+ border: 1px solid #ddd !important;
346
+ }
347
+ }
348
+ @font-face {
349
+ font-family: 'Glyphicons Halflings';
350
+ src: url('../../media/BackupGuardFree/fonts/glyphicons-halflings-regular.eot');
351
+ src: url('../../media/BackupGuardFree/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../../media/BackupGuardFree/fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../../media/BackupGuardFree/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../../media/BackupGuardFree/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../../media/BackupGuardFree/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
352
+ }
353
+ .sg-wrapper-less .glyphicon {
354
+ position: relative;
355
+ top: 1px;
356
+ display: inline-block;
357
+ font-family: 'Glyphicons Halflings';
358
+ font-style: normal;
359
+ font-weight: normal;
360
+ line-height: 1;
361
+ -webkit-font-smoothing: antialiased;
362
+ -moz-osx-font-smoothing: grayscale;
363
+ }
364
+ .sg-wrapper-less .glyphicon-asterisk:before {
365
+ content: "\2a";
366
+ }
367
+ .sg-wrapper-less .glyphicon-plus:before {
368
+ content: "\2b";
369
+ }
370
+ .sg-wrapper-less .glyphicon-euro:before,
371
+ .sg-wrapper-less .glyphicon-eur:before {
372
+ content: "\20ac";
373
+ }
374
+ .sg-wrapper-less .glyphicon-minus:before {
375
+ content: "\2212";
376
+ }
377
+ .sg-wrapper-less .glyphicon-cloud:before {
378
+ content: "\2601";
379
+ }
380
+ .sg-wrapper-less .glyphicon-envelope:before {
381
+ content: "\2709";
382
+ }
383
+ .sg-wrapper-less .glyphicon-pencil:before {
384
+ content: "\270f";
385
+ }
386
+ .sg-wrapper-less .glyphicon-glass:before {
387
+ content: "\e001";
388
+ }
389
+ .sg-wrapper-less .glyphicon-music:before {
390
+ content: "\e002";
391
+ }
392
+ .sg-wrapper-less .glyphicon-search:before {
393
+ content: "\e003";
394
+ }
395
+ .sg-wrapper-less .glyphicon-heart:before {
396
+ content: "\e005";
397
+ }
398
+ .sg-wrapper-less .glyphicon-star:before {
399
+ content: "\e006";
400
+ }
401
+ .sg-wrapper-less .glyphicon-star-empty:before {
402
+ content: "\e007";
403
+ }
404
+ .sg-wrapper-less .glyphicon-user:before {
405
+ content: "\e008";
406
+ }
407
+ .sg-wrapper-less .glyphicon-film:before {
408
+ content: "\e009";
409
+ }
410
+ .sg-wrapper-less .glyphicon-th-large:before {
411
+ content: "\e010";
412
+ }
413
+ .sg-wrapper-less .glyphicon-th:before {
414
+ content: "\e011";
415
+ }
416
+ .sg-wrapper-less .glyphicon-th-list:before {
417
+ content: "\e012";
418
+ }
419
+ .sg-wrapper-less .glyphicon-ok:before {
420
+ content: "\e013";
421
+ }
422
+ .sg-wrapper-less .glyphicon-remove:before {
423
+ content: "\e014";
424
+ }
425
+ .sg-wrapper-less .glyphicon-zoom-in:before {
426
+ content: "\e015";
427
+ }
428
+ .sg-wrapper-less .glyphicon-zoom-out:before {
429
+ content: "\e016";
430
+ }
431
+ .sg-wrapper-less .glyphicon-off:before {
432
+ content: "\e017";
433
+ }
434
+ .sg-wrapper-less .glyphicon-signal:before {
435
+ content: "\e018";
436
+ }
437
+ .sg-wrapper-less .glyphicon-cog:before {
438
+ content: "\e019";
439
+ }
440
+ .sg-wrapper-less .glyphicon-trash:before {
441
+ content: "\e020";
442
+ }
443
+ .sg-wrapper-less .glyphicon-home:before {
444
+ content: "\e021";
445
+ }
446
+ .sg-wrapper-less .glyphicon-file:before {
447
+ content: "\e022";
448
+ }
449
+ .sg-wrapper-less .glyphicon-time:before {
450
+ content: "\e023";
451
+ }
452
+ .sg-wrapper-less .glyphicon-road:before {
453
+ content: "\e024";
454
+ }
455
+ .sg-wrapper-less .glyphicon-download-alt:before {
456
+ content: "\e025";
457
+ }
458
+ .sg-wrapper-less .glyphicon-download:before {
459
+ content: "\e026";
460
+ }
461
+ .sg-wrapper-less .glyphicon-upload:before {
462
+ content: "\e027";
463
+ }
464
+ .sg-wrapper-less .glyphicon-inbox:before {
465
+ content: "\e028";
466
+ }
467
+ .sg-wrapper-less .glyphicon-play-circle:before {
468
+ content: "\e029";
469
+ }
470
+ .sg-wrapper-less .glyphicon-repeat:before {
471
+ content: "\e030";
472
+ }
473
+ .sg-wrapper-less .glyphicon-refresh:before {
474
+ content: "\e031";
475
+ }
476
+ .sg-wrapper-less .glyphicon-list-alt:before {
477
+ content: "\e032";
478
+ }
479
+ .sg-wrapper-less .glyphicon-lock:before {
480
+ content: "\e033";
481
+ }
482
+ .sg-wrapper-less .glyphicon-flag:before {
483
+ content: "\e034";
484
+ }
485
+ .sg-wrapper-less .glyphicon-headphones:before {
486
+ content: "\e035";
487
+ }
488
+ .sg-wrapper-less .glyphicon-volume-off:before {
489
+ content: "\e036";
490
+ }
491
+ .sg-wrapper-less .glyphicon-volume-down:before {
492
+ content: "\e037";
493
+ }
494
+ .sg-wrapper-less .glyphicon-volume-up:before {
495
+ content: "\e038";
496
+ }
497
+ .sg-wrapper-less .glyphicon-qrcode:before {
498
+ content: "\e039";
499
+ }
500
+ .sg-wrapper-less .glyphicon-barcode:before {
501
+ content: "\e040";
502
+ }
503
+ .sg-wrapper-less .glyphicon-tag:before {
504
+ content: "\e041";
505
+ }
506
+ .sg-wrapper-less .glyphicon-tags:before {
507
+ content: "\e042";
508
+ }
509
+ .sg-wrapper-less .glyphicon-book:before {
510
+ content: "\e043";
511
+ }
512
+ .sg-wrapper-less .glyphicon-bookmark:before {
513
+ content: "\e044";
514
+ }
515
+ .sg-wrapper-less .glyphicon-print:before {
516
+ content: "\e045";
517
+ }
518
+ .sg-wrapper-less .glyphicon-camera:before {
519
+ content: "\e046";
520
+ }
521
+ .sg-wrapper-less .glyphicon-font:before {
522
+ content: "\e047";
523
+ }
524
+ .sg-wrapper-less .glyphicon-bold:before {
525
+ content: "\e048";
526
+ }
527
+ .sg-wrapper-less .glyphicon-italic:before {
528
+ content: "\e049";
529
+ }
530
+ .sg-wrapper-less .glyphicon-text-height:before {
531
+ content: "\e050";
532
+ }
533
+ .sg-wrapper-less .glyphicon-text-width:before {
534
+ content: "\e051";
535
+ }
536
+ .sg-wrapper-less .glyphicon-align-left:before {
537
+ content: "\e052";
538
+ }
539
+ .sg-wrapper-less .glyphicon-align-center:before {
540
+ content: "\e053";
541
+ }
542
+ .sg-wrapper-less .glyphicon-align-right:before {
543
+ content: "\e054";
544
+ }
545
+ .sg-wrapper-less .glyphicon-align-justify:before {
546
+ content: "\e055";
547
+ }
548
+ .sg-wrapper-less .glyphicon-list:before {
549
+ content: "\e056";
550
+ }
551
+ .sg-wrapper-less .glyphicon-indent-left:before {
552
+ content: "\e057";
553
+ }
554
+ .sg-wrapper-less .glyphicon-indent-right:before {
555
+ content: "\e058";
556
+ }
557
+ .sg-wrapper-less .glyphicon-facetime-video:before {
558
+ content: "\e059";
559
+ }
560
+ .sg-wrapper-less .glyphicon-picture:before {
561
+ content: "\e060";
562
+ }
563
+ .sg-wrapper-less .glyphicon-map-marker:before {
564
+ content: "\e062";
565
+ }
566
+ .sg-wrapper-less .glyphicon-adjust:before {
567
+ content: "\e063";
568
+ }
569
+ .sg-wrapper-less .glyphicon-tint:before {
570
+ content: "\e064";
571
+ }
572
+ .sg-wrapper-less .glyphicon-edit:before {
573
+ content: "\e065";
574
+ }
575
+ .sg-wrapper-less .glyphicon-share:before {
576
+ content: "\e066";
577
+ }
578
+ .sg-wrapper-less .glyphicon-check:before {
579
+ content: "\e067";
580
+ }
581
+ .sg-wrapper-less .glyphicon-move:before {
582
+ content: "\e068";
583
+ }
584
+ .sg-wrapper-less .glyphicon-step-backward:before {
585
+ content: "\e069";
586
+ }
587
+ .sg-wrapper-less .glyphicon-fast-backward:before {
588
+ content: "\e070";
589
+ }
590
+ .sg-wrapper-less .glyphicon-backward:before {
591
+ content: "\e071";
592
+ }
593
+ .sg-wrapper-less .glyphicon-play:before {
594
+ content: "\e072";
595
+ }
596
+ .sg-wrapper-less .glyphicon-pause:before {
597
+ content: "\e073";
598
+ }
599
+ .sg-wrapper-less .glyphicon-stop:before {
600
+ content: "\e074";
601
+ }
602
+ .sg-wrapper-less .glyphicon-forward:before {
603
+ content: "\e075";
604
+ }
605
+ .sg-wrapper-less .glyphicon-fast-forward:before {
606
+ content: "\e076";
607
+ }
608
+ .sg-wrapper-less .glyphicon-step-forward:before {
609
+ content: "\e077";
610
+ }
611
+ .sg-wrapper-less .glyphicon-eject:before {
612
+ content: "\e078";
613
+ }
614
+ .sg-wrapper-less .glyphicon-chevron-left:before {
615
+ content: "\e079";
616
+ }
617
+ .sg-wrapper-less .glyphicon-chevron-right:before {
618
+ content: "\e080";
619
+ }
620
+ .sg-wrapper-less .glyphicon-plus-sign:before {
621
+ content: "\e081";
622
+ }
623
+ .sg-wrapper-less .glyphicon-minus-sign:before {
624
+ content: "\e082";
625
+ }
626
+ .sg-wrapper-less .glyphicon-remove-sign:before {
627
+ content: "\e083";
628
+ }
629
+ .sg-wrapper-less .glyphicon-ok-sign:before {
630
+ content: "\e084";
631
+ }
632
+ .sg-wrapper-less .glyphicon-question-sign:before {
633
+ content: "\e085";
634
+ }
635
+ .sg-wrapper-less .glyphicon-info-sign:before {
636
+ content: "\e086";
637
+ }
638
+ .sg-wrapper-less .glyphicon-screenshot:before {
639
+ content: "\e087";
640
+ }
641
+ .sg-wrapper-less .glyphicon-remove-circle:before {
642
+ content: "\e088";
643
+ }
644
+ .sg-wrapper-less .glyphicon-ok-circle:before {
645
+ content: "\e089";
646
+ }
647
+ .sg-wrapper-less .glyphicon-ban-circle:before {
648
+ content: "\e090";
649
+ }
650
+ .sg-wrapper-less .glyphicon-arrow-left:before {
651
+ content: "\e091";
652
+ }
653
+ .sg-wrapper-less .glyphicon-arrow-right:before {
654
+ content: "\e092";
655
+ }
656
+ .sg-wrapper-less .glyphicon-arrow-up:before {
657
+ content: "\e093";
658
+ }
659
+ .sg-wrapper-less .glyphicon-arrow-down:before {
660
+ content: "\e094";
661
+ }
662
+ .sg-wrapper-less .glyphicon-share-alt:before {
663
+ content: "\e095";
664
+ }
665
+ .sg-wrapper-less .glyphicon-resize-full:before {
666
+ content: "\e096";
667
+ }
668
+ .sg-wrapper-less .glyphicon-resize-small:before {
669
+ content: "\e097";
670
+ }
671
+ .sg-wrapper-less .glyphicon-exclamation-sign:before {
672
+ content: "\e101";
673
+ }
674
+ .sg-wrapper-less .glyphicon-gift:before {
675
+ content: "\e102";
676
+ }
677
+ .sg-wrapper-less .glyphicon-leaf:before {
678
+ content: "\e103";
679
+ }
680
+ .sg-wrapper-less .glyphicon-fire:before {
681
+ content: "\e104";
682
+ }
683
+ .sg-wrapper-less .glyphicon-eye-open:before {
684
+ content: "\e105";
685
+ }
686
+ .sg-wrapper-less .glyphicon-eye-close:before {
687
+ content: "\e106";
688
+ }
689
+ .sg-wrapper-less .glyphicon-warning-sign:before {
690
+ content: "\e107";
691
+ }
692
+ .sg-wrapper-less .glyphicon-plane:before {
693
+ content: "\e108";
694
+ }
695
+ .sg-wrapper-less .glyphicon-calendar:before {
696
+ content: "\e109";
697
+ }
698
+ .sg-wrapper-less .glyphicon-random:before {
699
+ content: "\e110";
700
+ }
701
+ .sg-wrapper-less .glyphicon-comment:before {
702
+ content: "\e111";
703
+ }
704
+ .sg-wrapper-less .glyphicon-magnet:before {
705
+ content: "\e112";
706
+ }
707
+ .sg-wrapper-less .glyphicon-chevron-up:before {
708
+ content: "\e113";
709
+ }
710
+ .sg-wrapper-less .glyphicon-chevron-down:before {
711
+ content: "\e114";
712
+ }
713
+ .sg-wrapper-less .glyphicon-retweet:before {
714
+ content: "\e115";
715
+ }
716
+ .sg-wrapper-less .glyphicon-shopping-cart:before {
717
+ content: "\e116";
718
+ }
719
+ .sg-wrapper-less .glyphicon-folder-close:before {
720
+ content: "\e117";
721
+ }
722
+ .sg-wrapper-less .glyphicon-folder-open:before {
723
+ content: "\e118";
724
+ }
725
+ .sg-wrapper-less .glyphicon-resize-vertical:before {
726
+ content: "\e119";
727
+ }
728
+ .sg-wrapper-less .glyphicon-resize-horizontal:before {
729
+ content: "\e120";
730
+ }
731
+ .sg-wrapper-less .glyphicon-hdd:before {
732
+ content: "\e121";
733
+ }
734
+ .sg-wrapper-less .glyphicon-bullhorn:before {
735
+ content: "\e122";
736
+ }
737
+ .sg-wrapper-less .glyphicon-bell:before {
738
+ content: "\e123";
739
+ }
740
+ .sg-wrapper-less .glyphicon-certificate:before {
741
+ content: "\e124";
742
+ }
743
+ .sg-wrapper-less .glyphicon-thumbs-up:before {
744
+ content: "\e125";
745
+ }
746
+ .sg-wrapper-less .glyphicon-thumbs-down:before {
747
+ content: "\e126";
748
+ }
749
+ .sg-wrapper-less .glyphicon-hand-right:before {
750
+ content: "\e127";
751
+ }
752
+ .sg-wrapper-less .glyphicon-hand-left:before {
753
+ content: "\e128";
754
+ }
755
+ .sg-wrapper-less .glyphicon-hand-up:before {
756
+ content: "\e129";
757
+ }
758
+ .sg-wrapper-less .glyphicon-hand-down:before {
759
+ content: "\e130";
760
+ }
761
+ .sg-wrapper-less .glyphicon-circle-arrow-right:before {
762
+ content: "\e131";
763
+ }
764
+ .sg-wrapper-less .glyphicon-circle-arrow-left:before {
765
+ content: "\e132";
766
+ }
767
+ .sg-wrapper-less .glyphicon-circle-arrow-up:before {
768
+ content: "\e133";
769
+ }
770
+ .sg-wrapper-less .glyphicon-circle-arrow-down:before {
771
+ content: "\e134";
772
+ }
773
+ .sg-wrapper-less .glyphicon-globe:before {
774
+ content: "\e135";
775
+ }
776
+ .sg-wrapper-less .glyphicon-wrench:before {
777
+ content: "\e136";
778
+ }
779
+ .sg-wrapper-less .glyphicon-tasks:before {
780
+ content: "\e137";
781
+ }
782
+ .sg-wrapper-less .glyphicon-filter:before {
783
+ content: "\e138";
784
+ }
785
+ .sg-wrapper-less .glyphicon-briefcase:before {
786
+ content: "\e139";
787
+ }
788
+ .sg-wrapper-less .glyphicon-fullscreen:before {
789
+ content: "\e140";
790
+ }
791
+ .sg-wrapper-less .glyphicon-dashboard:before {
792
+ content: "\e141";
793
+ }
794
+ .sg-wrapper-less .glyphicon-paperclip:before {
795
+ content: "\e142";
796
+ }
797
+ .sg-wrapper-less .glyphicon-heart-empty:before {
798
+ content: "\e143";
799
+ }
800
+ .sg-wrapper-less .glyphicon-link:before {
801
+ content: "\e144";
802
+ }
803
+ .sg-wrapper-less .glyphicon-phone:before {
804
+ content: "\e145";
805
+ }
806
+ .sg-wrapper-less .glyphicon-pushpin:before {
807
+ content: "\e146";
808
+ }
809
+ .sg-wrapper-less .glyphicon-usd:before {
810
+ content: "\e148";
811
+ }
812
+ .sg-wrapper-less .glyphicon-gbp:before {
813
+ content: "\e149";
814
+ }
815
+ .sg-wrapper-less .glyphicon-sort:before {
816
+ content: "\e150";
817
+ }
818
+ .sg-wrapper-less .glyphicon-sort-by-alphabet:before {
819
+ content: "\e151";
820
+ }
821
+ .sg-wrapper-less .glyphicon-sort-by-alphabet-alt:before {
822
+ content: "\e152";
823
+ }
824
+ .sg-wrapper-less .glyphicon-sort-by-order:before {
825
+ content: "\e153";
826
+ }
827
+ .sg-wrapper-less .glyphicon-sort-by-order-alt:before {
828
+ content: "\e154";
829
+ }
830
+ .sg-wrapper-less .glyphicon-sort-by-attributes:before {
831
+ content: "\e155";
832
+ }
833
+ .sg-wrapper-less .glyphicon-sort-by-attributes-alt:before {
834
+ content: "\e156";
835
+ }
836
+ .sg-wrapper-less .glyphicon-unchecked:before {
837
+ content: "\e157";
838
+ }
839
+ .sg-wrapper-less .glyphicon-expand:before {
840
+ content: "\e158";
841
+ }
842
+ .sg-wrapper-less .glyphicon-collapse-down:before {
843
+ content: "\e159";
844
+ }
845
+ .sg-wrapper-less .glyphicon-collapse-up:before {
846
+ content: "\e160";
847
+ }
848
+ .sg-wrapper-less .glyphicon-log-in:before {
849
+ content: "\e161";
850
+ }
851
+ .sg-wrapper-less .glyphicon-flash:before {
852
+ content: "\e162";
853
+ }
854
+ .sg-wrapper-less .glyphicon-log-out:before {
855
+ content: "\e163";
856
+ }
857
+ .sg-wrapper-less .glyphicon-new-window:before {
858
+ content: "\e164";
859
+ }
860
+ .sg-wrapper-less .glyphicon-record:before {
861
+ content: "\e165";
862
+ }
863
+ .sg-wrapper-less .glyphicon-save:before {
864
+ content: "\e166";
865
+ }
866
+ .sg-wrapper-less .glyphicon-open:before {
867
+ content: "\e167";
868
+ }
869
+ .sg-wrapper-less .glyphicon-saved:before {
870
+ content: "\e168";
871
+ }
872
+ .sg-wrapper-less .glyphicon-import:before {
873
+ content: "\e169";
874
+ }
875
+ .sg-wrapper-less .glyphicon-export:before {
876
+ content: "\e170";
877
+ }
878
+ .sg-wrapper-less .glyphicon-send:before {
879
+ content: "\e171";
880
+ }
881
+ .sg-wrapper-less .glyphicon-floppy-disk:before {
882
+ content: "\e172";
883
+ }
884
+ .sg-wrapper-less .glyphicon-floppy-saved:before {
885
+ content: "\e173";
886
+ }
887
+ .sg-wrapper-less .glyphicon-floppy-remove:before {
888
+ content: "\e174";
889
+ }
890
+ .sg-wrapper-less .glyphicon-floppy-save:before {
891
+ content: "\e175";
892
+ }
893
+ .sg-wrapper-less .glyphicon-floppy-open:before {
894
+ content: "\e176";
895
+ }
896
+ .sg-wrapper-less .glyphicon-credit-card:before {
897
+ content: "\e177";
898
+ }
899
+ .sg-wrapper-less .glyphicon-transfer:before {
900
+ content: "\e178";
901
+ }
902
+ .sg-wrapper-less .glyphicon-cutlery:before {
903
+ content: "\e179";
904
+ }
905
+ .sg-wrapper-less .glyphicon-header:before {
906
+ content: "\e180";
907
+ }
908
+ .sg-wrapper-less .glyphicon-compressed:before {
909
+ content: "\e181";
910
+ }
911
+ .sg-wrapper-less .glyphicon-earphone:before {
912
+ content: "\e182";
913
+ }
914
+ .sg-wrapper-less .glyphicon-phone-alt:before {
915
+ content: "\e183";
916
+ }
917
+ .sg-wrapper-less .glyphicon-tower:before {
918
+ content: "\e184";
919
+ }
920
+ .sg-wrapper-less .glyphicon-stats:before {
921
+ content: "\e185";
922
+ }
923
+ .sg-wrapper-less .glyphicon-sd-video:before {
924
+ content: "\e186";
925
+ }
926
+ .sg-wrapper-less .glyphicon-hd-video:before {
927
+ content: "\e187";
928
+ }
929
+ .sg-wrapper-less .glyphicon-subtitles:before {
930
+ content: "\e188";
931
+ }
932
+ .sg-wrapper-less .glyphicon-sound-stereo:before {
933
+ content: "\e189";
934
+ }
935
+ .sg-wrapper-less .glyphicon-sound-dolby:before {
936
+ content: "\e190";
937
+ }
938
+ .sg-wrapper-less .glyphicon-sound-5-1:before {
939
+ content: "\e191";
940
+ }
941
+ .sg-wrapper-less .glyphicon-sound-6-1:before {
942
+ content: "\e192";
943
+ }
944
+ .sg-wrapper-less .glyphicon-sound-7-1:before {
945
+ content: "\e193";
946
+ }
947
+ .sg-wrapper-less .glyphicon-copyright-mark:before {
948
+ content: "\e194";
949
+ }
950
+ .sg-wrapper-less .glyphicon-registration-mark:before {
951
+ content: "\e195";
952
+ }
953
+ .sg-wrapper-less .glyphicon-cloud-download:before {
954
+ content: "\e197";
955
+ }
956
+ .sg-wrapper-less .glyphicon-cloud-upload:before {
957
+ content: "\e198";
958
+ }
959
+ .sg-wrapper-less .glyphicon-tree-conifer:before {
960
+ content: "\e199";
961
+ }
962
+ .sg-wrapper-less .glyphicon-tree-deciduous:before {
963
+ content: "\e200";
964
+ }
965
+ .sg-wrapper-less .glyphicon-cd:before {
966
+ content: "\e201";
967
+ }
968
+ .sg-wrapper-less .glyphicon-save-file:before {
969
+ content: "\e202";
970
+ }
971
+ .sg-wrapper-less .glyphicon-open-file:before {
972
+ content: "\e203";
973
+ }
974
+ .sg-wrapper-less .glyphicon-level-up:before {
975
+ content: "\e204";
976
+ }
977
+ .sg-wrapper-less .glyphicon-copy:before {
978
+ content: "\e205";
979
+ }
980
+ .sg-wrapper-less .glyphicon-paste:before {
981
+ content: "\e206";
982
+ }
983
+ .sg-wrapper-less .glyphicon-alert:before {
984
+ content: "\e209";
985
+ }
986
+ .sg-wrapper-less .glyphicon-equalizer:before {
987
+ content: "\e210";
988
+ }
989
+ .sg-wrapper-less .glyphicon-king:before {
990
+ content: "\e211";
991
+ }
992
+ .sg-wrapper-less .glyphicon-queen:before {
993
+ content: "\e212";
994
+ }
995
+ .sg-wrapper-less .glyphicon-pawn:before {
996
+ content: "\e213";
997
+ }
998
+ .sg-wrapper-less .glyphicon-bishop:before {
999
+ content: "\e214";
1000
+ }
1001
+ .sg-wrapper-less .glyphicon-knight:before {
1002
+ content: "\e215";
1003
+ }
1004
+ .sg-wrapper-less .glyphicon-baby-formula:before {
1005
+ content: "\e216";
1006
+ }
1007
+ .sg-wrapper-less .glyphicon-tent:before {
1008
+ content: "\26fa";
1009
+ }
1010
+ .sg-wrapper-less .glyphicon-blackboard:before {
1011
+ content: "\e218";
1012
+ }
1013
+ .sg-wrapper-less .glyphicon-bed:before {
1014
+ content: "\e219";
1015
+ }
1016
+ .sg-wrapper-less .glyphicon-apple:before {
1017
+ content: "\f8ff";
1018
+ }
1019
+ .sg-wrapper-less .glyphicon-erase:before {
1020
+ content: "\e221";
1021
+ }
1022
+ .sg-wrapper-less .glyphicon-hourglass:before {
1023
+ content: "\231b";
1024
+ }
1025
+ .sg-wrapper-less .glyphicon-lamp:before {
1026
+ content: "\e223";
1027
+ }
1028
+ .sg-wrapper-less .glyphicon-duplicate:before {
1029
+ content: "\e224";
1030
+ }
1031
+ .sg-wrapper-less .glyphicon-piggy-bank:before {
1032
+ content: "\e225";
1033
+ }
1034
+ .sg-wrapper-less .glyphicon-scissors:before {
1035
+ content: "\e226";
1036
+ }
1037
+ .sg-wrapper-less .glyphicon-bitcoin:before {
1038
+ content: "\e227";
1039
+ }
1040
+ .sg-wrapper-less .glyphicon-btc:before {
1041
+ content: "\e227";
1042
+ }
1043
+ .sg-wrapper-less .glyphicon-xbt:before {
1044
+ content: "\e227";
1045
+ }
1046
+ .sg-wrapper-less .glyphicon-yen:before {
1047
+ content: "\00a5";
1048
+ }
1049
+ .sg-wrapper-less .glyphicon-jpy:before {
1050
+ content: "\00a5";
1051
+ }
1052
+ .sg-wrapper-less .glyphicon-ruble:before {
1053
+ content: "\20bd";
1054
+ }
1055
+ .sg-wrapper-less .glyphicon-rub:before {
1056
+ content: "\20bd";
1057
+ }
1058
+ .sg-wrapper-less .glyphicon-scale:before {
1059
+ content: "\e230";
1060
+ }
1061
+ .sg-wrapper-less .glyphicon-ice-lolly:before {
1062
+ content: "\e231";
1063
+ }
1064
+ .sg-wrapper-less .glyphicon-ice-lolly-tasted:before {
1065
+ content: "\e232";
1066
+ }
1067
+ .sg-wrapper-less .glyphicon-education:before {
1068
+ content: "\e233";
1069
+ }
1070
+ .sg-wrapper-less .glyphicon-option-horizontal:before {
1071
+ content: "\e234";
1072
+ }
1073
+ .sg-wrapper-less .glyphicon-option-vertical:before {
1074
+ content: "\e235";
1075
+ }
1076
+ .sg-wrapper-less .glyphicon-menu-hamburger:before {
1077
+ content: "\e236";
1078
+ }
1079
+ .sg-wrapper-less .glyphicon-modal-window:before {
1080
+ content: "\e237";
1081
+ }
1082
+ .sg-wrapper-less .glyphicon-oil:before {
1083
+ content: "\e238";
1084
+ }
1085
+ .sg-wrapper-less .glyphicon-grain:before {
1086
+ content: "\e239";
1087
+ }
1088
+ .sg-wrapper-less .glyphicon-sunglasses:before {
1089
+ content: "\e240";
1090
+ }
1091
+ .sg-wrapper-less .glyphicon-text-size:before {
1092
+ content: "\e241";
1093
+ }
1094
+ .sg-wrapper-less .glyphicon-text-color:before {
1095
+ content: "\e242";
1096
+ }
1097
+ .sg-wrapper-less .glyphicon-text-background:before {
1098
+ content: "\e243";
1099
+ }
1100
+ .sg-wrapper-less .glyphicon-object-align-top:before {
1101
+ content: "\e244";
1102
+ }
1103
+ .sg-wrapper-less .glyphicon-object-align-bottom:before {
1104
+ content: "\e245";
1105
+ }
1106
+ .sg-wrapper-less .glyphicon-object-align-horizontal:before {
1107
+ content: "\e246";
1108
+ }
1109
+ .sg-wrapper-less .glyphicon-object-align-left:before {
1110
+ content: "\e247";
1111
+ }
1112
+ .sg-wrapper-less .glyphicon-object-align-vertical:before {
1113
+ content: "\e248";
1114
+ }
1115
+ .sg-wrapper-less .glyphicon-object-align-right:before {
1116
+ content: "\e249";
1117
+ }
1118
+ .sg-wrapper-less .glyphicon-triangle-right:before {
1119
+ content: "\e250";
1120
+ }
1121
+ .sg-wrapper-less .glyphicon-triangle-left:before {
1122
+ content: "\e251";
1123
+ }
1124
+ .sg-wrapper-less .glyphicon-triangle-bottom:before {
1125
+ content: "\e252";
1126
+ }
1127
+ .sg-wrapper-less .glyphicon-triangle-top:before {
1128
+ content: "\e253";
1129
+ }
1130
+ .sg-wrapper-less .glyphicon-console:before {
1131
+ content: "\e254";
1132
+ }
1133
+ .sg-wrapper-less .glyphicon-superscript:before {
1134
+ content: "\e255";
1135
+ }
1136
+ .sg-wrapper-less .glyphicon-subscript:before {
1137
+ content: "\e256";
1138
+ }
1139
+ .sg-wrapper-less .glyphicon-menu-left:before {
1140
+ content: "\e257";
1141
+ }
1142
+ .sg-wrapper-less .glyphicon-menu-right:before {
1143
+ content: "\e258";
1144
+ }
1145
+ .sg-wrapper-less .glyphicon-menu-down:before {
1146
+ content: "\e259";
1147
+ }
1148
+ .sg-wrapper-less .glyphicon-menu-up:before {
1149
+ content: "\e260";
1150
+ }
1151
+ .sg-wrapper-less * {
1152
+ -webkit-box-sizing: border-box;
1153
+ -moz-box-sizing: border-box;
1154
+ box-sizing: border-box;
1155
+ }
1156
+ .sg-wrapper-less *:before,
1157
+ .sg-wrapper-less *:after {
1158
+ -webkit-box-sizing: border-box;
1159
+ -moz-box-sizing: border-box;
1160
+ box-sizing: border-box;
1161
+ }
1162
+ .sg-wrapper-less html {
1163
+ font-size: 10px;
1164
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
1165
+ }
1166
+ .sg-wrapper-less #sg-wrapper {
1167
+ font-family: "Source Sans Pro", Calibri, Candara, Arial, sans-serif;
1168
+ font-size: 15px;
1169
+ line-height: 1.42857143;
1170
+ color: #333333;
1171
+ background-color: #ffffff;
1172
+ }
1173
+ .sg-wrapper-less input,
1174
+ .sg-wrapper-less button,
1175
+ .sg-wrapper-less select,
1176
+ .sg-wrapper-less textarea {
1177
+ font-family: inherit;
1178
+ font-size: inherit;
1179
+ line-height: inherit;
1180
+ }
1181
+ .sg-wrapper-less a {
1182
+ color: #2780e3;
1183
+ text-decoration: none;
1184
+ }
1185
+ .sg-wrapper-less a:hover,
1186
+ .sg-wrapper-less a:focus {
1187
+ color: #165ba8;
1188
+ text-decoration: underline;
1189
+ }
1190
+ .sg-wrapper-less a:focus {
1191
+ outline: thin dotted;
1192
+ outline: 5px auto -webkit-focus-ring-color;
1193
+ outline-offset: -2px;
1194
+ }
1195
+ .sg-wrapper-less figure {
1196
+ margin: 0;
1197
+ }
1198
+ .sg-wrapper-less img {
1199
+ vertical-align: middle;
1200
+ }
1201
+ .sg-wrapper-less .img-responsive,
1202
+ .sg-wrapper-less .thumbnail > img,
1203
+ .sg-wrapper-less .thumbnail a > img,
1204
+ .sg-wrapper-less .carousel-inner > .item > img,
1205
+ .sg-wrapper-less .carousel-inner > .item > a > img {
1206
+ display: block;
1207
+ max-width: 100%;
1208
+ height: auto;
1209
+ }
1210
+ .sg-wrapper-less .img-rounded {
1211
+ border-radius: 0;
1212
+ }
1213
+ .sg-wrapper-less .img-thumbnail {
1214
+ padding: 4px;
1215
+ line-height: 1.42857143;
1216
+ background-color: #ffffff;
1217
+ border: 1px solid #dddddd;
1218
+ border-radius: 0;
1219
+ -webkit-transition: all 0.2s ease-in-out;
1220
+ -o-transition: all 0.2s ease-in-out;
1221
+ transition: all 0.2s ease-in-out;
1222
+ display: inline-block;
1223
+ max-width: 100%;
1224
+ height: auto;
1225
+ }
1226
+ .sg-wrapper-less .img-circle {
1227
+ border-radius: 50%;
1228
+ }
1229
+ .sg-wrapper-less hr {
1230
+ margin-top: 21px;
1231
+ margin-bottom: 21px;
1232
+ border: 0;
1233
+ border-top: 1px solid #e6e6e6;
1234
+ }
1235
+ .sg-wrapper-less .sr-only {
1236
+ position: absolute;
1237
+ width: 1px;
1238
+ height: 1px;
1239
+ margin: -1px;
1240
+ padding: 0;
1241
+ overflow: hidden;
1242
+ clip: rect(0, 0, 0, 0);
1243
+ border: 0;
1244
+ }
1245
+ .sg-wrapper-less .sr-only-focusable:active,
1246
+ .sg-wrapper-less .sr-only-focusable:focus {
1247
+ position: static;
1248
+ width: auto;
1249
+ height: auto;
1250
+ margin: 0;
1251
+ overflow: visible;
1252
+ clip: auto;
1253
+ }
1254
+ .sg-wrapper-less [role="button"] {
1255
+ cursor: pointer;
1256
+ }
1257
+ .sg-wrapper-less h1,
1258
+ .sg-wrapper-less h2,
1259
+ .sg-wrapper-less h3,
1260
+ .sg-wrapper-less h4,
1261
+ .sg-wrapper-less h5,
1262
+ .sg-wrapper-less h6,
1263
+ .sg-wrapper-less .h1,
1264
+ .sg-wrapper-less .h2,
1265
+ .sg-wrapper-less .h3,
1266
+ .sg-wrapper-less .h4,
1267
+ .sg-wrapper-less .h5,
1268
+ .sg-wrapper-less .h6 {
1269
+ font-family: "Source Sans Pro", Calibri, Candara, Arial, sans-serif;
1270
+ font-weight: 300;
1271
+ line-height: 1.1;
1272
+ color: inherit;
1273
+ }
1274
+ .sg-wrapper-less h1 small,
1275
+ .sg-wrapper-less h2 small,
1276
+ .sg-wrapper-less h3 small,
1277
+ .sg-wrapper-less h4 small,
1278
+ .sg-wrapper-less h5 small,
1279
+ .sg-wrapper-less h6 small,
1280
+ .sg-wrapper-less .h1 small,
1281
+ .sg-wrapper-less .h2 small,
1282
+ .sg-wrapper-less .h3 small,
1283
+ .sg-wrapper-less .h4 small,
1284
+ .sg-wrapper-less .h5 small,
1285
+ .sg-wrapper-less .h6 small,
1286
+ .sg-wrapper-less h1 .small,
1287
+ .sg-wrapper-less h2 .small,
1288
+ .sg-wrapper-less h3 .small,
1289
+ .sg-wrapper-less h4 .small,
1290
+ .sg-wrapper-less h5 .small,
1291
+ .sg-wrapper-less h6 .small,
1292
+ .sg-wrapper-less .h1 .small,
1293
+ .sg-wrapper-less .h2 .small,
1294
+ .sg-wrapper-less .h3 .small,
1295
+ .sg-wrapper-less .h4 .small,
1296
+ .sg-wrapper-less .h5 .small,
1297
+ .sg-wrapper-less .h6 .small {
1298
+ font-weight: normal;
1299
+ line-height: 1;
1300
+ color: #999999;
1301
+ }
1302
+ .sg-wrapper-less h1,
1303
+ .sg-wrapper-less .h1,
1304
+ .sg-wrapper-less h2,
1305
+ .sg-wrapper-less .h2,
1306
+ .sg-wrapper-less h3,
1307
+ .sg-wrapper-less .h3 {
1308
+ margin-top: 21px;
1309
+ margin-bottom: 10.5px;
1310
+ }
1311
+ .sg-wrapper-less h1 small,
1312
+ .sg-wrapper-less .h1 small,
1313
+ .sg-wrapper-less h2 small,
1314
+ .sg-wrapper-less .h2 small,
1315
+ .sg-wrapper-less h3 small,
1316
+ .sg-wrapper-less .h3 small,
1317
+ .sg-wrapper-less h1 .small,
1318
+ .sg-wrapper-less .h1 .small,
1319
+ .sg-wrapper-less h2 .small,
1320
+ .sg-wrapper-less .h2 .small,
1321
+ .sg-wrapper-less h3 .small,
1322
+ .sg-wrapper-less .h3 .small {
1323
+ font-size: 65%;
1324
+ }
1325
+ .sg-wrapper-less h4,
1326
+ .sg-wrapper-less .h4,
1327
+ .sg-wrapper-less h5,
1328
+ .sg-wrapper-less .h5,
1329
+ .sg-wrapper-less h6,
1330
+ .sg-wrapper-less .h6 {
1331
+ margin-top: 10.5px;
1332
+ margin-bottom: 10.5px;
1333
+ }
1334
+ .sg-wrapper-less h4 small,
1335
+ .sg-wrapper-less .h4 small,
1336
+ .sg-wrapper-less h5 small,
1337
+ .sg-wrapper-less .h5 small,
1338
+ .sg-wrapper-less h6 small,
1339
+ .sg-wrapper-less .h6 small,
1340
+ .sg-wrapper-less h4 .small,
1341
+ .sg-wrapper-less .h4 .small,
1342
+ .sg-wrapper-less h5 .small,
1343
+ .sg-wrapper-less .h5 .small,
1344
+ .sg-wrapper-less h6 .small,
1345
+ .sg-wrapper-less .h6 .small {
1346
+ font-size: 75%;
1347
+ }
1348
+ .sg-wrapper-less h1,
1349
+ .sg-wrapper-less .h1 {
1350
+ font-size: 39px;
1351
+ }
1352
+ .sg-wrapper-less h2,
1353
+ .sg-wrapper-less .h2 {
1354
+ font-size: 32px;
1355
+ }
1356
+ .sg-wrapper-less h3,
1357
+ .sg-wrapper-less .h3 {
1358
+ font-size: 26px;
1359
+ }
1360
+ .sg-wrapper-less h4,
1361
+ .sg-wrapper-less .h4 {
1362
+ font-size: 19px;
1363
+ }
1364
+ .sg-wrapper-less h5,
1365
+ .sg-wrapper-less .h5 {
1366
+ font-size: 15px;
1367
+ }
1368
+ .sg-wrapper-less h6,
1369
+ .sg-wrapper-less .h6 {
1370
+ font-size: 13px;
1371
+ }
1372
+ .sg-wrapper-less p {
1373
+ margin: 0 0 10.5px;
1374
+ }
1375
+ .sg-wrapper-less .lead {
1376
+ margin-bottom: 21px;
1377
+ font-size: 17px;
1378
+ font-weight: 300;
1379
+ line-height: 1.4;
1380
+ }
1381
+ @media (min-width: 768px) {
1382
+ .sg-wrapper-less .lead {
1383
+ font-size: 22.5px;
1384
+ }
1385
+ }
1386
+ .sg-wrapper-less small,
1387
+ .sg-wrapper-less .small {
1388
+ font-size: 86%;
1389
+ }
1390
+ .sg-wrapper-less mark,
1391
+ .sg-wrapper-less .mark {
1392
+ background-color: #ff7518;
1393
+ padding: .2em;
1394
+ }
1395
+ .sg-wrapper-less .text-left {
1396
+ text-align: left;
1397
+ }
1398
+ .sg-wrapper-less .text-right {
1399
+ text-align: right;
1400
+ }
1401
+ .sg-wrapper-less .text-center {
1402
+ text-align: center;
1403
+ }
1404
+ .sg-wrapper-less .text-justify {
1405
+ text-align: justify;
1406
+ }
1407
+ .sg-wrapper-less .text-nowrap {
1408
+ white-space: nowrap;
1409
+ }
1410
+ .sg-wrapper-less .text-lowercase {
1411
+ text-transform: lowercase;
1412
+ }
1413
+ .sg-wrapper-less .text-uppercase {
1414
+ text-transform: uppercase;
1415
+ }
1416
+ .sg-wrapper-less .text-capitalize {
1417
+ text-transform: capitalize;
1418
+ }
1419
+ .sg-wrapper-less .text-muted {
1420
+ color: #999999;
1421
+ }
1422
+ .sg-wrapper-less .text-primary {
1423
+ color: #2780e3;
1424
+ }
1425
+ .sg-wrapper-less a.text-primary:hover {
1426
+ color: #1967be;
1427
+ }
1428
+ .sg-wrapper-less .text-success {
1429
+ color: #ffffff;
1430
+ }
1431
+ .sg-wrapper-less a.text-success:hover {
1432
+ color: #e6e6e6;
1433
+ }
1434
+ .sg-wrapper-less .text-info {
1435
+ color: #ffffff;
1436
+ }
1437
+ .sg-wrapper-less a.text-info:hover {
1438
+ color: #e6e6e6;
1439
+ }
1440
+ .sg-wrapper-less .text-warning {
1441
+ color: #ffffff;
1442
+ }
1443
+ .sg-wrapper-less a.text-warning:hover {
1444
+ color: #e6e6e6;
1445
+ }
1446
+ .sg-wrapper-less .text-danger {
1447
+ color: #ffffff;
1448
+ }
1449
+ .sg-wrapper-less a.text-danger:hover {
1450
+ color: #e6e6e6;
1451
+ }
1452
+ .sg-wrapper-less .bg-primary {
1453
+ color: #fff;
1454
+ background-color: #2780e3;
1455
+ }
1456
+ .sg-wrapper-less a.bg-primary:hover {
1457
+ background-color: #1967be;
1458
+ }
1459
+ .sg-wrapper-less .bg-success {
1460
+ background-color: #3fb618;
1461
+ }
1462
+ .sg-wrapper-less a.bg-success:hover {
1463
+ background-color: #2f8912;
1464
+ }
1465
+ .sg-wrapper-less .bg-info {
1466
+ background-color: #9954bb;
1467
+ }
1468
+ .sg-wrapper-less a.bg-info:hover {
1469
+ background-color: #7e3f9d;
1470
+ }
1471
+ .sg-wrapper-less .bg-warning {
1472
+ background-color: #ff7518;
1473
+ }
1474
+ .sg-wrapper-less a.bg-warning:hover {
1475
+ background-color: #e45c00;
1476
+ }
1477
+ .sg-wrapper-less .bg-danger {
1478
+ background-color: #ff0039;
1479
+ }
1480
+ .sg-wrapper-less a.bg-danger:hover {
1481
+ background-color: #cc002e;
1482
+ }
1483
+ .sg-wrapper-less .page-header {
1484
+ padding-bottom: 9.5px;
1485
+ margin: 42px 0 21px;
1486
+ border-bottom: 1px solid #e6e6e6;
1487
+ }
1488
+ .sg-wrapper-less ul,
1489
+ .sg-wrapper-less ol {
1490
+ margin-top: 0;
1491
+ margin-bottom: 10.5px;
1492
+ }
1493
+ .sg-wrapper-less ul ul,
1494
+ .sg-wrapper-less ol ul,
1495
+ .sg-wrapper-less ul ol,
1496
+ .sg-wrapper-less ol ol {
1497
+ margin-bottom: 0;
1498
+ }
1499
+ .sg-wrapper-less .list-unstyled {
1500
+ padding-left: 0;
1501
+ list-style: none;
1502
+ }
1503
+ .sg-wrapper-less .list-inline {
1504
+ padding-left: 0;
1505
+ list-style: none;
1506
+ margin-left: -5px;
1507
+ }
1508
+ .sg-wrapper-less .list-inline > li {
1509
+ display: inline-block;
1510
+ padding-left: 5px;
1511
+ padding-right: 5px;
1512
+ }
1513
+ .sg-wrapper-less dl {
1514
+ margin-top: 0;
1515
+ margin-bottom: 21px;
1516
+ }
1517
+ .sg-wrapper-less dt,
1518
+ .sg-wrapper-less dd {
1519
+ line-height: 1.42857143;
1520
+ }
1521
+ .sg-wrapper-less dt {
1522
+ font-weight: bold;
1523
+ }
1524
+ .sg-wrapper-less dd {
1525
+ margin-left: 0;
1526
+ }
1527
+ @media (min-width: 768px) {
1528
+ .sg-wrapper-less .dl-horizontal dt {
1529
+ float: left;
1530
+ width: 160px;
1531
+ clear: left;
1532
+ text-align: right;
1533
+ overflow: hidden;
1534
+ text-overflow: ellipsis;
1535
+ white-space: nowrap;
1536
+ }
1537
+ .sg-wrapper-less .dl-horizontal dd {
1538
+ margin-left: 180px;
1539
+ }
1540
+ }
1541
+ .sg-wrapper-less abbr[title],
1542
+ .sg-wrapper-less abbr[data-original-title] {
1543
+ cursor: help;
1544
+ border-bottom: 1px dotted #999999;
1545
+ }
1546
+ .sg-wrapper-less .initialism {
1547
+ font-size: 90%;
1548
+ text-transform: uppercase;
1549
+ }
1550
+ .sg-wrapper-less blockquote {
1551
+ padding: 10.5px 21px;
1552
+ margin: 0 0 21px;
1553
+ font-size: 18.75px;
1554
+ border-left: 5px solid #e6e6e6;
1555
+ }
1556
+ .sg-wrapper-less blockquote p:last-child,
1557
+ .sg-wrapper-less blockquote ul:last-child,
1558
+ .sg-wrapper-less blockquote ol:last-child {
1559
+ margin-bottom: 0;
1560
+ }
1561
+ .sg-wrapper-less blockquote footer,
1562
+ .sg-wrapper-less blockquote small,
1563
+ .sg-wrapper-less blockquote .small {
1564
+ display: block;
1565
+ font-size: 80%;
1566
+ line-height: 1.42857143;
1567
+ color: #999999;
1568
+ }
1569
+ .sg-wrapper-less blockquote footer:before,
1570
+ .sg-wrapper-less blockquote small:before,
1571
+ .sg-wrapper-less blockquote .small:before {
1572
+ content: '\2014 \00A0';
1573
+ }
1574
+ .sg-wrapper-less .blockquote-reverse,
1575
+ .sg-wrapper-less blockquote.pull-right {
1576
+ padding-right: 15px;
1577
+ padding-left: 0;
1578
+ border-right: 5px solid #e6e6e6;
1579
+ border-left: 0;
1580
+ text-align: right;
1581
+ }
1582
+ .sg-wrapper-less .blockquote-reverse footer:before,
1583
+ .sg-wrapper-less blockquote.pull-right footer:before,
1584
+ .sg-wrapper-less .blockquote-reverse small:before,
1585
+ .sg-wrapper-less blockquote.pull-right small:before,
1586
+ .sg-wrapper-less .blockquote-reverse .small:before,
1587
+ .sg-wrapper-less blockquote.pull-right .small:before {
1588
+ content: '';
1589
+ }
1590
+ .sg-wrapper-less .blockquote-reverse footer:after,
1591
+ .sg-wrapper-less blockquote.pull-right footer:after,
1592
+ .sg-wrapper-less .blockquote-reverse small:after,
1593
+ .sg-wrapper-less blockquote.pull-right small:after,
1594
+ .sg-wrapper-less .blockquote-reverse .small:after,
1595
+ .sg-wrapper-less blockquote.pull-right .small:after {
1596
+ content: '\00A0 \2014';
1597
+ }
1598
+ .sg-wrapper-less address {
1599
+ margin-bottom: 21px;
1600
+ font-style: normal;
1601
+ line-height: 1.42857143;
1602
+ }
1603
+ .sg-wrapper-less code,
1604
+ .sg-wrapper-less kbd,
1605
+ .sg-wrapper-less pre,
1606
+ .sg-wrapper-less samp {
1607
+ font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
1608
+ }
1609
+ .sg-wrapper-less code {
1610
+ padding: 2px 4px;
1611
+ font-size: 90%;
1612
+ color: #c7254e;
1613
+ background-color: #f9f2f4;
1614
+ border-radius: 0;
1615
+ }
1616
+ .sg-wrapper-less kbd {
1617
+ padding: 2px 4px;
1618
+ font-size: 90%;
1619
+ color: #ffffff;
1620
+ background-color: #333333;
1621
+ border-radius: 0;
1622
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
1623
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
1624
+ }
1625
+ .sg-wrapper-less kbd kbd {
1626
+ padding: 0;
1627
+ font-size: 100%;
1628
+ font-weight: bold;
1629
+ -webkit-box-shadow: none;
1630
+ box-shadow: none;
1631
+ }
1632
+ .sg-wrapper-less pre {
1633
+ display: block;
1634
+ padding: 10px;
1635
+ margin: 0 0 10.5px;
1636
+ font-size: 14px;
1637
+ line-height: 1.42857143;
1638
+ word-break: break-all;
1639
+ word-wrap: break-word;
1640
+ color: #333333;
1641
+ background-color: #f5f5f5;
1642
+ border: 1px solid #cccccc;
1643
+ border-radius: 0;
1644
+ }
1645
+ .sg-wrapper-less pre code {
1646
+ padding: 0;
1647
+ font-size: inherit;
1648
+ color: inherit;
1649
+ white-space: pre-wrap;
1650
+ background-color: transparent;
1651
+ border-radius: 0;
1652
+ }
1653
+ .sg-wrapper-less .pre-scrollable {
1654
+ max-height: 340px;
1655
+ overflow-y: scroll;
1656
+ }
1657
+ .sg-wrapper-less .container {
1658
+ margin-right: auto;
1659
+ margin-left: auto;
1660
+ padding-left: 15px;
1661
+ padding-right: 15px;
1662
+ }
1663
+ @media (min-width: 768px) {
1664
+ .sg-wrapper-less .container {
1665
+ width: 750px;
1666
+ }
1667
+ }
1668
+ @media (min-width: 992px) {
1669
+ .sg-wrapper-less .container {
1670
+ width: 970px;
1671
+ }
1672
+ }
1673
+ @media (min-width: 1200px) {
1674
+ .sg-wrapper-less .container {
1675
+ width: 1170px;
1676
+ }
1677
+ }
1678
+ .sg-wrapper-less .container-fluid {
1679
+ margin-right: auto;
1680
+ margin-left: auto;
1681
+ padding-left: 15px;
1682
+ padding-right: 15px;
1683
+ }
1684
+ .sg-wrapper-less .row {
1685
+ margin-left: -15px;
1686
+ margin-right: -15px;
1687
+ }
1688
+ .sg-wrapper-less .col-xs-1,
1689
+ .sg-wrapper-less .col-sm-1,
1690
+ .sg-wrapper-less .col-md-1,
1691
+ .sg-wrapper-less .col-lg-1,
1692
+ .sg-wrapper-less .col-xs-2,
1693
+ .sg-wrapper-less .col-sm-2,
1694
+ .sg-wrapper-less .col-md-2,
1695
+ .sg-wrapper-less .col-lg-2,
1696
+ .sg-wrapper-less .col-xs-3,
1697
+ .sg-wrapper-less .col-sm-3,
1698
+ .sg-wrapper-less .col-md-3,
1699
+ .sg-wrapper-less .col-lg-3,
1700
+ .sg-wrapper-less .col-xs-4,
1701
+ .sg-wrapper-less .col-sm-4,
1702
+ .sg-wrapper-less .col-md-4,
1703
+ .sg-wrapper-less .col-lg-4,
1704
+ .sg-wrapper-less .col-xs-5,
1705
+ .sg-wrapper-less .col-sm-5,
1706
+ .sg-wrapper-less .col-md-5,
1707
+ .sg-wrapper-less .col-lg-5,
1708
+ .sg-wrapper-less .col-xs-6,
1709
+ .sg-wrapper-less .col-sm-6,
1710
+ .sg-wrapper-less .col-md-6,
1711
+ .sg-wrapper-less .col-lg-6,
1712
+ .sg-wrapper-less .col-xs-7,
1713
+ .sg-wrapper-less .col-sm-7,
1714
+ .sg-wrapper-less .col-md-7,
1715
+ .sg-wrapper-less .col-lg-7,
1716
+ .sg-wrapper-less .col-xs-8,
1717
+ .sg-wrapper-less .col-sm-8,
1718
+ .sg-wrapper-less .col-md-8,
1719
+ .sg-wrapper-less .col-lg-8,
1720
+ .sg-wrapper-less .col-xs-9,
1721
+ .sg-wrapper-less .col-sm-9,
1722
+ .sg-wrapper-less .col-md-9,
1723
+ .sg-wrapper-less .col-lg-9,
1724
+ .sg-wrapper-less .col-xs-10,
1725
+ .sg-wrapper-less .col-sm-10,
1726
+ .sg-wrapper-less .col-md-10,
1727
+ .sg-wrapper-less .col-lg-10,
1728
+ .sg-wrapper-less .col-xs-11,
1729
+ .sg-wrapper-less .col-sm-11,
1730
+ .sg-wrapper-less .col-md-11,
1731
+ .sg-wrapper-less .col-lg-11,
1732
+ .sg-wrapper-less .col-xs-12,
1733
+ .sg-wrapper-less .col-sm-12,
1734
+ .sg-wrapper-less .col-md-12,
1735
+ .sg-wrapper-less .col-lg-12 {
1736
+ position: relative;
1737
+ min-height: 1px;
1738
+ padding-left: 15px;
1739
+ padding-right: 15px;
1740
+ }
1741
+ .sg-wrapper-less .col-xs-1,
1742
+ .sg-wrapper-less .col-xs-2,
1743
+ .sg-wrapper-less .col-xs-3,
1744
+ .sg-wrapper-less .col-xs-4,
1745
+ .sg-wrapper-less .col-xs-5,
1746
+ .sg-wrapper-less .col-xs-6,
1747
+ .sg-wrapper-less .col-xs-7,
1748
+ .sg-wrapper-less .col-xs-8,
1749
+ .sg-wrapper-less .col-xs-9,
1750
+ .sg-wrapper-less .col-xs-10,
1751
+ .sg-wrapper-less .col-xs-11,
1752
+ .sg-wrapper-less .col-xs-12 {
1753
+ float: left;
1754
+ }
1755
+ .sg-wrapper-less .col-xs-12 {
1756
+ width: 100%;
1757
+ }
1758
+ .sg-wrapper-less .col-xs-11 {
1759
+ width: 91.66666667%;
1760
+ }
1761
+ .sg-wrapper-less .col-xs-10 {
1762
+ width: 83.33333333%;
1763
+ }
1764
+ .sg-wrapper-less .col-xs-9 {
1765
+ width: 75%;
1766
+ }
1767
+ .sg-wrapper-less .col-xs-8 {
1768
+ width: 66.66666667%;
1769
+ }
1770
+ .sg-wrapper-less .col-xs-7 {
1771
+ width: 58.33333333%;
1772
+ }
1773
+ .sg-wrapper-less .col-xs-6 {
1774
+ width: 50%;
1775
+ }
1776
+ .sg-wrapper-less .col-xs-5 {
1777
+ width: 41.66666667%;
1778
+ }
1779
+ .sg-wrapper-less .col-xs-4 {
1780
+ width: 33.33333333%;
1781
+ }
1782
+ .sg-wrapper-less .col-xs-3 {
1783
+ width: 25%;
1784
+ }
1785
+ .sg-wrapper-less .col-xs-2 {
1786
+ width: 16.66666667%;
1787
+ }
1788
+ .sg-wrapper-less .col-xs-1 {
1789
+ width: 8.33333333%;
1790
+ }
1791
+ .sg-wrapper-less .col-xs-pull-12 {
1792
+ right: 100%;
1793
+ }
1794
+ .sg-wrapper-less .col-xs-pull-11 {
1795
+ right: 91.66666667%;
1796
+ }
1797
+ .sg-wrapper-less .col-xs-pull-10 {
1798
+ right: 83.33333333%;
1799
+ }
1800
+ .sg-wrapper-less .col-xs-pull-9 {
1801
+ right: 75%;
1802
+ }
1803
+ .sg-wrapper-less .col-xs-pull-8 {
1804
+ right: 66.66666667%;
1805
+ }
1806
+ .sg-wrapper-less .col-xs-pull-7 {
1807
+ right: 58.33333333%;
1808
+ }
1809
+ .sg-wrapper-less .col-xs-pull-6 {
1810
+ right: 50%;
1811
+ }
1812
+ .sg-wrapper-less .col-xs-pull-5 {
1813
+ right: 41.66666667%;
1814
+ }
1815
+ .sg-wrapper-less .col-xs-pull-4 {
1816
+ right: 33.33333333%;
1817
+ }
1818
+ .sg-wrapper-less .col-xs-pull-3 {
1819
+ right: 25%;
1820
+ }
1821
+ .sg-wrapper-less .col-xs-pull-2 {
1822
+ right: 16.66666667%;
1823
+ }
1824
+ .sg-wrapper-less .col-xs-pull-1 {
1825
+ right: 8.33333333%;
1826
+ }
1827
+ .sg-wrapper-less .col-xs-pull-0 {
1828
+ right: auto;
1829
+ }
1830
+ .sg-wrapper-less .col-xs-push-12 {
1831
+ left: 100%;
1832
+ }
1833
+ .sg-wrapper-less .col-xs-push-11 {
1834
+ left: 91.66666667%;
1835
+ }
1836
+ .sg-wrapper-less .col-xs-push-10 {
1837
+ left: 83.33333333%;
1838
+ }
1839
+ .sg-wrapper-less .col-xs-push-9 {
1840
+ left: 75%;
1841
+ }
1842
+ .sg-wrapper-less .col-xs-push-8 {
1843
+ left: 66.66666667%;
1844
+ }
1845
+ .sg-wrapper-less .col-xs-push-7 {
1846
+ left: 58.33333333%;
1847
+ }
1848
+ .sg-wrapper-less .col-xs-push-6 {
1849
+ left: 50%;
1850
+ }
1851
+ .sg-wrapper-less .col-xs-push-5 {
1852
+ left: 41.66666667%;
1853
+ }
1854
+ .sg-wrapper-less .col-xs-push-4 {
1855
+ left: 33.33333333%;
1856
+ }
1857
+ .sg-wrapper-less .col-xs-push-3 {
1858
+ left: 25%;
1859
+ }
1860
+ .sg-wrapper-less .col-xs-push-2 {
1861
+ left: 16.66666667%;
1862
+ }
1863
+ .sg-wrapper-less .col-xs-push-1 {
1864
+ left: 8.33333333%;
1865
+ }
1866
+ .sg-wrapper-less .col-xs-push-0 {
1867
+ left: auto;
1868
+ }
1869
+ .sg-wrapper-less .col-xs-offset-12 {
1870
+ margin-left: 100%;
1871
+ }
1872
+ .sg-wrapper-less .col-xs-offset-11 {
1873
+ margin-left: 91.66666667%;
1874
+ }
1875
+ .sg-wrapper-less .col-xs-offset-10 {
1876
+ margin-left: 83.33333333%;
1877
+ }
1878
+ .sg-wrapper-less .col-xs-offset-9 {
1879
+ margin-left: 75%;
1880
+ }
1881
+ .sg-wrapper-less .col-xs-offset-8 {
1882
+ margin-left: 66.66666667%;
1883
+ }
1884
+ .sg-wrapper-less .col-xs-offset-7 {
1885
+ margin-left: 58.33333333%;
1886
+ }
1887
+ .sg-wrapper-less .col-xs-offset-6 {
1888
+ margin-left: 50%;
1889
+ }
1890
+ .sg-wrapper-less .col-xs-offset-5 {
1891
+ margin-left: 41.66666667%;
1892
+ }
1893
+ .sg-wrapper-less .col-xs-offset-4 {
1894
+ margin-left: 33.33333333%;
1895
+ }
1896
+ .sg-wrapper-less .col-xs-offset-3 {
1897
+ margin-left: 25%;
1898
+ }
1899
+ .sg-wrapper-less .col-xs-offset-2 {
1900
+ margin-left: 16.66666667%;
1901
+ }
1902
+ .sg-wrapper-less .col-xs-offset-1 {
1903
+ margin-left: 8.33333333%;
1904
+ }
1905
+ .sg-wrapper-less .col-xs-offset-0 {
1906
+ margin-left: 0%;
1907
+ }
1908
+ @media (min-width: 768px) {
1909
+ .sg-wrapper-less .col-sm-1,
1910
+ .sg-wrapper-less .col-sm-2,
1911
+ .sg-wrapper-less .col-sm-3,
1912
+ .sg-wrapper-less .col-sm-4,
1913
+ .sg-wrapper-less .col-sm-5,
1914
+ .sg-wrapper-less .col-sm-6,
1915
+ .sg-wrapper-less .col-sm-7,
1916
+ .sg-wrapper-less .col-sm-8,
1917
+ .sg-wrapper-less .col-sm-9,
1918
+ .sg-wrapper-less .col-sm-10,
1919
+ .sg-wrapper-less .col-sm-11,
1920
+ .sg-wrapper-less .col-sm-12 {
1921
+ float: left;
1922
+ }
1923
+ .sg-wrapper-less .col-sm-12 {
1924
+ width: 100%;
1925
+ }
1926
+ .sg-wrapper-less .col-sm-11 {
1927
+ width: 91.66666667%;
1928
+ }
1929
+ .sg-wrapper-less .col-sm-10 {
1930
+ width: 83.33333333%;
1931
+ }
1932
+ .sg-wrapper-less .col-sm-9 {
1933
+ width: 75%;
1934
+ }
1935
+ .sg-wrapper-less .col-sm-8 {
1936
+ width: 66.66666667%;
1937
+ }
1938
+ .sg-wrapper-less .col-sm-7 {
1939
+ width: 58.33333333%;
1940
+ }
1941
+ .sg-wrapper-less .col-sm-6 {
1942
+ width: 50%;
1943
+ }
1944
+ .sg-wrapper-less .col-sm-5 {
1945
+ width: 41.66666667%;
1946
+ }
1947
+ .sg-wrapper-less .col-sm-4 {
1948
+ width: 33.33333333%;
1949
+ }
1950
+ .sg-wrapper-less .col-sm-3 {
1951
+ width: 25%;
1952
+ }
1953
+ .sg-wrapper-less .col-sm-2 {
1954
+ width: 16.66666667%;
1955
+ }
1956
+ .sg-wrapper-less .col-sm-1 {
1957
+ width: 8.33333333%;
1958
+ }
1959
+ .sg-wrapper-less .col-sm-pull-12 {
1960
+ right: 100%;
1961
+ }
1962
+ .sg-wrapper-less .col-sm-pull-11 {
1963
+ right: 91.66666667%;
1964
+ }
1965
+ .sg-wrapper-less .col-sm-pull-10 {
1966
+ right: 83.33333333%;
1967
+ }
1968
+ .sg-wrapper-less .col-sm-pull-9 {
1969
+ right: 75%;
1970
+ }
1971
+ .sg-wrapper-less .col-sm-pull-8 {
1972
+ right: 66.66666667%;
1973
+ }
1974
+ .sg-wrapper-less .col-sm-pull-7 {
1975
+ right: 58.33333333%;
1976
+ }
1977
+ .sg-wrapper-less .col-sm-pull-6 {
1978
+ right: 50%;
1979
+ }
1980
+ .sg-wrapper-less .col-sm-pull-5 {
1981
+ right: 41.66666667%;
1982
+ }
1983
+ .sg-wrapper-less .col-sm-pull-4 {
1984
+ right: 33.33333333%;
1985
+ }
1986
+ .sg-wrapper-less .col-sm-pull-3 {
1987
+ right: 25%;
1988
+ }
1989
+ .sg-wrapper-less .col-sm-pull-2 {
1990
+ right: 16.66666667%;
1991
+ }
1992
+ .sg-wrapper-less .col-sm-pull-1 {
1993
+ right: 8.33333333%;
1994
+ }
1995
+ .sg-wrapper-less .col-sm-pull-0 {
1996
+ right: auto;
1997
+ }
1998
+ .sg-wrapper-less .col-sm-push-12 {
1999
+ left: 100%;
2000
+ }
2001
+ .sg-wrapper-less .col-sm-push-11 {
2002
+ left: 91.66666667%;
2003
+ }
2004
+ .sg-wrapper-less .col-sm-push-10 {
2005
+ left: 83.33333333%;
2006
+ }
2007
+ .sg-wrapper-less .col-sm-push-9 {
2008
+ left: 75%;
2009
+ }
2010
+ .sg-wrapper-less .col-sm-push-8 {
2011
+ left: 66.66666667%;
2012
+ }
2013
+ .sg-wrapper-less .col-sm-push-7 {
2014
+ left: 58.33333333%;
2015
+ }
2016
+ .sg-wrapper-less .col-sm-push-6 {
2017
+ left: 50%;
2018
+ }
2019
+ .sg-wrapper-less .col-sm-push-5 {
2020
+ left: 41.66666667%;
2021
+ }
2022
+ .sg-wrapper-less .col-sm-push-4 {
2023
+ left: 33.33333333%;
2024
+ }
2025
+ .sg-wrapper-less .col-sm-push-3 {
2026
+ left: 25%;
2027
+ }
2028
+ .sg-wrapper-less .col-sm-push-2 {
2029
+ left: 16.66666667%;
2030
+ }
2031
+ .sg-wrapper-less .col-sm-push-1 {
2032
+ left: 8.33333333%;
2033
+ }
2034
+ .sg-wrapper-less .col-sm-push-0 {
2035
+ left: auto;
2036
+ }
2037
+ .sg-wrapper-less .col-sm-offset-12 {
2038
+ margin-left: 100%;
2039
+ }
2040
+ .sg-wrapper-less .col-sm-offset-11 {
2041
+ margin-left: 91.66666667%;
2042
+ }
2043
+ .sg-wrapper-less .col-sm-offset-10 {
2044
+ margin-left: 83.33333333%;
2045
+ }
2046
+ .sg-wrapper-less .col-sm-offset-9 {
2047
+ margin-left: 75%;
2048
+ }
2049
+ .sg-wrapper-less .col-sm-offset-8 {
2050
+ margin-left: 66.66666667%;
2051
+ }
2052
+ .sg-wrapper-less .col-sm-offset-7 {
2053
+ margin-left: 58.33333333%;
2054
+ }
2055
+ .sg-wrapper-less .col-sm-offset-6 {
2056
+ margin-left: 50%;
2057
+ }
2058
+ .sg-wrapper-less .col-sm-offset-5 {
2059
+ margin-left: 41.66666667%;
2060
+ }
2061
+ .sg-wrapper-less .col-sm-offset-4 {
2062
+ margin-left: 33.33333333%;
2063
+ }
2064
+ .sg-wrapper-less .col-sm-offset-3 {
2065
+ margin-left: 25%;
2066
+ }
2067
+ .sg-wrapper-less .col-sm-offset-2 {
2068
+ margin-left: 16.66666667%;
2069
+ }
2070
+ .sg-wrapper-less .col-sm-offset-1 {
2071
+ margin-left: 8.33333333%;
2072
+ }
2073
+ .sg-wrapper-less .col-sm-offset-0 {
2074
+ margin-left: 0%;
2075
+ }
2076
+ }
2077
+ @media (min-width: 992px) {
2078
+ .sg-wrapper-less .col-md-1,
2079
+ .sg-wrapper-less .col-md-2,
2080
+ .sg-wrapper-less .col-md-3,
2081
+ .sg-wrapper-less .col-md-4,
2082
+ .sg-wrapper-less .col-md-5,
2083
+ .sg-wrapper-less .col-md-6,
2084
+ .sg-wrapper-less .col-md-7,
2085
+ .sg-wrapper-less .col-md-8,
2086
+ .sg-wrapper-less .col-md-9,
2087
+ .sg-wrapper-less .col-md-10,
2088
+ .sg-wrapper-less .col-md-11,
2089
+ .sg-wrapper-less .col-md-12 {
2090
+ float: left;
2091
+ }
2092
+ .sg-wrapper-less .col-md-12 {
2093
+ width: 100%;
2094
+ }
2095
+ .sg-wrapper-less .col-md-11 {
2096
+ width: 91.66666667%;
2097
+ }
2098
+ .sg-wrapper-less .col-md-10 {
2099
+ width: 83.33333333%;
2100
+ }
2101
+ .sg-wrapper-less .col-md-9 {
2102
+ width: 75%;
2103
+ }
2104
+ .sg-wrapper-less .col-md-8 {
2105
+ width: 66.66666667%;
2106
+ }
2107
+ .sg-wrapper-less .col-md-7 {
2108
+ width: 58.33333333%;
2109
+ }
2110
+ .sg-wrapper-less .col-md-6 {
2111
+ width: 50%;
2112
+ }
2113
+ .sg-wrapper-less .col-md-5 {
2114
+ width: 41.66666667%;
2115
+ }
2116
+ .sg-wrapper-less .col-md-4 {
2117
+ width: 33.33333333%;
2118
+ }
2119
+ .sg-wrapper-less .col-md-3 {
2120
+ width: 25%;
2121
+ }
2122
+ .sg-wrapper-less .col-md-2 {
2123
+ width: 16.66666667%;
2124
+ }
2125
+ .sg-wrapper-less .col-md-1 {
2126
+ width: 8.33333333%;
2127
+ }
2128
+ .sg-wrapper-less .col-md-pull-12 {
2129
+ right: 100%;
2130
+ }
2131
+ .sg-wrapper-less .col-md-pull-11 {
2132
+ right: 91.66666667%;
2133
+ }
2134
+ .sg-wrapper-less .col-md-pull-10 {
2135
+ right: 83.33333333%;
2136
+ }
2137
+ .sg-wrapper-less .col-md-pull-9 {
2138
+ right: 75%;
2139
+ }
2140
+ .sg-wrapper-less .col-md-pull-8 {
2141
+ right: 66.66666667%;
2142
+ }
2143
+ .sg-wrapper-less .col-md-pull-7 {
2144
+ right: 58.33333333%;
2145
+ }
2146
+ .sg-wrapper-less .col-md-pull-6 {
2147
+ right: 50%;
2148
+ }
2149
+ .sg-wrapper-less .col-md-pull-5 {
2150
+ right: 41.66666667%;
2151
+ }
2152
+ .sg-wrapper-less .col-md-pull-4 {
2153
+ right: 33.33333333%;
2154
+ }
2155
+ .sg-wrapper-less .col-md-pull-3 {
2156
+ right: 25%;
2157
+ }
2158
+ .sg-wrapper-less .col-md-pull-2 {
2159
+ right: 16.66666667%;
2160
+ }
2161
+ .sg-wrapper-less .col-md-pull-1 {
2162
+ right: 8.33333333%;
2163
+ }
2164
+ .sg-wrapper-less .col-md-pull-0 {
2165
+ right: auto;
2166
+ }
2167
+ .sg-wrapper-less .col-md-push-12 {
2168
+ left: 100%;
2169
+ }
2170
+ .sg-wrapper-less .col-md-push-11 {
2171
+ left: 91.66666667%;
2172
+ }
2173
+ .sg-wrapper-less .col-md-push-10 {
2174
+ left: 83.33333333%;
2175
+ }
2176
+ .sg-wrapper-less .col-md-push-9 {
2177
+ left: 75%;
2178
+ }
2179
+ .sg-wrapper-less .col-md-push-8 {
2180
+ left: 66.66666667%;
2181
+ }
2182
+ .sg-wrapper-less .col-md-push-7 {
2183
+ left: 58.33333333%;
2184
+ }
2185
+ .sg-wrapper-less .col-md-push-6 {
2186
+ left: 50%;
2187
+ }
2188
+ .sg-wrapper-less .col-md-push-5 {
2189
+ left: 41.66666667%;
2190
+ }
2191
+ .sg-wrapper-less .col-md-push-4 {
2192
+ left: 33.33333333%;
2193
+ }
2194
+ .sg-wrapper-less .col-md-push-3 {
2195
+ left: 25%;
2196
+ }
2197
+ .sg-wrapper-less .col-md-push-2 {
2198
+ left: 16.66666667%;
2199
+ }
2200
+ .sg-wrapper-less .col-md-push-1 {
2201
+ left: 8.33333333%;
2202
+ }
2203
+ .sg-wrapper-less .col-md-push-0 {
2204
+ left: auto;
2205
+ }
2206
+ .sg-wrapper-less .col-md-offset-12 {
2207
+ margin-left: 100%;
2208
+ }
2209
+ .sg-wrapper-less .col-md-offset-11 {
2210
+ margin-left: 91.66666667%;
2211
+ }
2212
+ .sg-wrapper-less .col-md-offset-10 {
2213
+ margin-left: 83.33333333%;
2214
+ }
2215
+ .sg-wrapper-less .col-md-offset-9 {
2216
+ margin-left: 75%;
2217
+ }
2218
+ .sg-wrapper-less .col-md-offset-8 {
2219
+ margin-left: 66.66666667%;
2220
+ }
2221
+ .sg-wrapper-less .col-md-offset-7 {
2222
+ margin-left: 58.33333333%;
2223
+ }
2224
+ .sg-wrapper-less .col-md-offset-6 {
2225
+ margin-left: 50%;
2226
+ }
2227
+ .sg-wrapper-less .col-md-offset-5 {
2228
+ margin-left: 41.66666667%;
2229
+ }
2230
+ .sg-wrapper-less .col-md-offset-4 {
2231
+ margin-left: 33.33333333%;
2232
+ }
2233
+ .sg-wrapper-less .col-md-offset-3 {
2234
+ margin-left: 25%;
2235
+ }
2236
+ .sg-wrapper-less .col-md-offset-2 {
2237
+ margin-left: 16.66666667%;
2238
+ }
2239
+ .sg-wrapper-less .col-md-offset-1 {
2240
+ margin-left: 8.33333333%;
2241
+ }
2242
+ .sg-wrapper-less .col-md-offset-0 {
2243
+ margin-left: 0%;
2244
+ }
2245
+ }
2246
+ @media (min-width: 1200px) {
2247
+ .sg-wrapper-less .col-lg-1,
2248
+ .sg-wrapper-less .col-lg-2,
2249
+ .sg-wrapper-less .col-lg-3,
2250
+ .sg-wrapper-less .col-lg-4,
2251
+ .sg-wrapper-less .col-lg-5,
2252
+ .sg-wrapper-less .col-lg-6,
2253
+ .sg-wrapper-less .col-lg-7,
2254
+ .sg-wrapper-less .col-lg-8,
2255
+ .sg-wrapper-less .col-lg-9,
2256
+ .sg-wrapper-less .col-lg-10,
2257
+ .sg-wrapper-less .col-lg-11,
2258
+ .sg-wrapper-less .col-lg-12 {
2259
+ float: left;
2260
+ }
2261
+ .sg-wrapper-less .col-lg-12 {
2262
+ width: 100%;
2263
+ }
2264
+ .sg-wrapper-less .col-lg-11 {
2265
+ width: 91.66666667%;
2266
+ }
2267
+ .sg-wrapper-less .col-lg-10 {
2268
+ width: 83.33333333%;
2269
+ }
2270
+ .sg-wrapper-less .col-lg-9 {
2271
+ width: 75%;
2272
+ }
2273
+ .sg-wrapper-less .col-lg-8 {
2274
+ width: 66.66666667%;
2275
+ }
2276
+ .sg-wrapper-less .col-lg-7 {
2277
+ width: 58.33333333%;
2278
+ }
2279
+ .sg-wrapper-less .col-lg-6 {
2280
+ width: 50%;
2281
+ }
2282
+ .sg-wrapper-less .col-lg-5 {
2283
+ width: 41.66666667%;
2284
+ }
2285
+ .sg-wrapper-less .col-lg-4 {
2286
+ width: 33.33333333%;
2287
+ }
2288
+ .sg-wrapper-less .col-lg-3 {
2289
+ width: 25%;
2290
+ }
2291
+ .sg-wrapper-less .col-lg-2 {
2292
+ width: 16.66666667%;
2293
+ }
2294
+ .sg-wrapper-less .col-lg-1 {
2295
+ width: 8.33333333%;
2296
+ }
2297
+ .sg-wrapper-less .col-lg-pull-12 {
2298
+ right: 100%;
2299
+ }
2300
+ .sg-wrapper-less .col-lg-pull-11 {
2301
+ right: 91.66666667%;
2302
+ }
2303
+ .sg-wrapper-less .col-lg-pull-10 {
2304
+ right: 83.33333333%;
2305
+ }
2306
+ .sg-wrapper-less .col-lg-pull-9 {
2307
+ right: 75%;
2308
+ }
2309
+ .sg-wrapper-less .col-lg-pull-8 {
2310
+ right: 66.66666667%;
2311
+ }
2312
+ .sg-wrapper-less .col-lg-pull-7 {
2313
+ right: 58.33333333%;
2314
+ }
2315
+ .sg-wrapper-less .col-lg-pull-6 {
2316
+ right: 50%;
2317
+ }
2318
+ .sg-wrapper-less .col-lg-pull-5 {
2319
+ right: 41.66666667%;
2320
+ }
2321
+ .sg-wrapper-less .col-lg-pull-4 {
2322
+ right: 33.33333333%;
2323
+ }
2324
+ .sg-wrapper-less .col-lg-pull-3 {
2325
+ right: 25%;
2326
+ }
2327
+ .sg-wrapper-less .col-lg-pull-2 {
2328
+ right: 16.66666667%;
2329
+ }
2330
+ .sg-wrapper-less .col-lg-pull-1 {
2331
+ right: 8.33333333%;
2332
+ }
2333
+ .sg-wrapper-less .col-lg-pull-0 {
2334
+ right: auto;
2335
+ }
2336
+ .sg-wrapper-less .col-lg-push-12 {
2337
+ left: 100%;
2338
+ }
2339
+ .sg-wrapper-less .col-lg-push-11 {
2340
+ left: 91.66666667%;
2341
+ }
2342
+ .sg-wrapper-less .col-lg-push-10 {
2343
+ left: 83.33333333%;
2344
+ }
2345
+ .sg-wrapper-less .col-lg-push-9 {
2346
+ left: 75%;
2347
+ }
2348
+ .sg-wrapper-less .col-lg-push-8 {
2349
+ left: 66.66666667%;
2350
+ }
2351
+ .sg-wrapper-less .col-lg-push-7 {
2352
+ left: 58.33333333%;
2353
+ }
2354
+ .sg-wrapper-less .col-lg-push-6 {
2355
+ left: 50%;
2356
+ }
2357
+ .sg-wrapper-less .col-lg-push-5 {
2358
+ left: 41.66666667%;
2359
+ }
2360
+ .sg-wrapper-less .col-lg-push-4 {
2361
+ left: 33.33333333%;
2362
+ }
2363
+ .sg-wrapper-less .col-lg-push-3 {
2364
+ left: 25%;
2365
+ }
2366
+ .sg-wrapper-less .col-lg-push-2 {
2367
+ left: 16.66666667%;
2368
+ }
2369
+ .sg-wrapper-less .col-lg-push-1 {
2370
+ left: 8.33333333%;
2371
+ }
2372
+ .sg-wrapper-less .col-lg-push-0 {
2373
+ left: auto;
2374
+ }
2375
+ .sg-wrapper-less .col-lg-offset-12 {
2376
+ margin-left: 100%;
2377
+ }
2378
+ .sg-wrapper-less .col-lg-offset-11 {
2379
+ margin-left: 91.66666667%;
2380
+ }
2381
+ .sg-wrapper-less .col-lg-offset-10 {
2382
+ margin-left: 83.33333333%;
2383
+ }
2384
+ .sg-wrapper-less .col-lg-offset-9 {
2385
+ margin-left: 75%;
2386
+ }
2387
+ .sg-wrapper-less .col-lg-offset-8 {
2388
+ margin-left: 66.66666667%;
2389
+ }
2390
+ .sg-wrapper-less .col-lg-offset-7 {
2391
+ margin-left: 58.33333333%;
2392
+ }
2393
+ .sg-wrapper-less .col-lg-offset-6 {
2394
+ margin-left: 50%;
2395
+ }
2396
+ .sg-wrapper-less .col-lg-offset-5 {
2397
+ margin-left: 41.66666667%;
2398
+ }
2399
+ .sg-wrapper-less .col-lg-offset-4 {
2400
+ margin-left: 33.33333333%;
2401
+ }
2402
+ .sg-wrapper-less .col-lg-offset-3 {
2403
+ margin-left: 25%;
2404
+ }
2405
+ .sg-wrapper-less .col-lg-offset-2 {
2406
+ margin-left: 16.66666667%;
2407
+ }
2408
+ .sg-wrapper-less .col-lg-offset-1 {
2409
+ margin-left: 8.33333333%;
2410
+ }
2411
+ .sg-wrapper-less .col-lg-offset-0 {
2412
+ margin-left: 0%;
2413
+ }
2414
+ }
2415
+ .sg-wrapper-less table {
2416
+ background-color: transparent;
2417
+ }
2418
+ .sg-wrapper-less caption {
2419
+ padding-top: 8px;
2420
+ padding-bottom: 8px;
2421
+ color: #999999;
2422
+ text-align: left;
2423
+ }
2424
+ .sg-wrapper-less th {
2425
+ text-align: left;
2426
+ }
2427
+ .sg-wrapper-less .table {
2428
+ width: 100%;
2429
+ max-width: 100%;
2430
+ margin-bottom: 21px;
2431
+ }
2432
+ .sg-wrapper-less .table > thead > tr > th,
2433
+ .sg-wrapper-less .table > tbody > tr > th,
2434
+ .sg-wrapper-less .table > tfoot > tr > th,
2435
+ .sg-wrapper-less .table > thead > tr > td,
2436
+ .sg-wrapper-less .table > tbody > tr > td,
2437
+ .sg-wrapper-less .table > tfoot > tr > td {
2438
+ padding: 8px;
2439
+ line-height: 1.42857143;
2440
+ vertical-align: top;
2441
+ border-top: 1px solid #dddddd;
2442
+ }
2443
+ .sg-wrapper-less .table > thead > tr > th {
2444
+ vertical-align: bottom;
2445
+ border-bottom: 2px solid #dddddd;
2446
+ }
2447
+ .sg-wrapper-less .table > caption + thead > tr:first-child > th,
2448
+ .sg-wrapper-less .table > colgroup + thead > tr:first-child > th,
2449
+ .sg-wrapper-less .table > thead:first-child > tr:first-child > th,
2450
+ .sg-wrapper-less .table > caption + thead > tr:first-child > td,
2451
+ .sg-wrapper-less .table > colgroup + thead > tr:first-child > td,
2452
+ .sg-wrapper-less .table > thead:first-child > tr:first-child > td {
2453
+ border-top: 0;
2454
+ }
2455
+ .sg-wrapper-less .table > tbody + tbody {
2456
+ border-top: 2px solid #dddddd;
2457
+ }
2458
+ .sg-wrapper-less .table .table {
2459
+ background-color: #ffffff;
2460
+ }
2461
+ .sg-wrapper-less .table-condensed > thead > tr > th,
2462
+ .sg-wrapper-less .table-condensed > tbody > tr > th,
2463
+ .sg-wrapper-less .table-condensed > tfoot > tr > th,
2464
+ .sg-wrapper-less .table-condensed > thead > tr > td,
2465
+ .sg-wrapper-less .table-condensed > tbody > tr > td,
2466
+ .sg-wrapper-less .table-condensed > tfoot > tr > td {
2467
+ padding: 5px;
2468
+ }
2469
+ .sg-wrapper-less .table-bordered {
2470
+ border: 1px solid #dddddd;
2471
+ }
2472
+ .sg-wrapper-less .table-bordered > thead > tr > th,
2473
+ .sg-wrapper-less .table-bordered > tbody > tr > th,
2474
+ .sg-wrapper-less .table-bordered > tfoot > tr > th,
2475
+ .sg-wrapper-less .table-bordered > thead > tr > td,
2476
+ .sg-wrapper-less .table-bordered > tbody > tr > td,
2477
+ .sg-wrapper-less .table-bordered > tfoot > tr > td {
2478
+ border: 1px solid #dddddd;
2479
+ }
2480
+ .sg-wrapper-less .table-bordered > thead > tr > th,
2481
+ .sg-wrapper-less .table-bordered > thead > tr > td {
2482
+ border-bottom-width: 2px;
2483
+ }
2484
+ .sg-wrapper-less .table-striped > tbody > tr:nth-of-type(odd) {
2485
+ background-color: #f9f9f9;
2486
+ }
2487
+ .sg-wrapper-less .table-hover > tbody > tr:hover {
2488
+ background-color: #f5f5f5;
2489
+ }
2490
+ .sg-wrapper-less table col[class*="col-"] {
2491
+ position: static;
2492
+ float: none;
2493
+ display: table-column;
2494
+ }
2495
+ .sg-wrapper-less table td[class*="col-"],
2496
+ .sg-wrapper-less table th[class*="col-"] {
2497
+ position: static;
2498
+ float: none;
2499
+ display: table-cell;
2500
+ }
2501
+ .sg-wrapper-less .table > thead > tr > td.active,
2502
+ .sg-wrapper-less .table > tbody > tr > td.active,
2503
+ .sg-wrapper-less .table > tfoot > tr > td.active,
2504
+ .sg-wrapper-less .table > thead > tr > th.active,
2505
+ .sg-wrapper-less .table > tbody > tr > th.active,
2506
+ .sg-wrapper-less .table > tfoot > tr > th.active,
2507
+ .sg-wrapper-less .table > thead > tr.active > td,
2508
+ .sg-wrapper-less .table > tbody > tr.active > td,
2509
+ .sg-wrapper-less .table > tfoot > tr.active > td,
2510
+ .sg-wrapper-less .table > thead > tr.active > th,
2511
+ .sg-wrapper-less .table > tbody > tr.active > th,
2512
+ .sg-wrapper-less .table > tfoot > tr.active > th {
2513
+ background-color: #f5f5f5;
2514
+ }
2515
+ .sg-wrapper-less .table-hover > tbody > tr > td.active:hover,
2516
+ .sg-wrapper-less .table-hover > tbody > tr > th.active:hover,
2517
+ .sg-wrapper-less .table-hover > tbody > tr.active:hover > td,
2518
+ .sg-wrapper-less .table-hover > tbody > tr:hover > .active,
2519
+ .sg-wrapper-less .table-hover > tbody > tr.active:hover > th {
2520
+ background-color: #e8e8e8;
2521
+ }
2522
+ .sg-wrapper-less .table > thead > tr > td.success,
2523
+ .sg-wrapper-less .table > tbody > tr > td.success,
2524
+ .sg-wrapper-less .table > tfoot > tr > td.success,
2525
+ .sg-wrapper-less .table > thead > tr > th.success,
2526
+ .sg-wrapper-less .table > tbody > tr > th.success,
2527
+ .sg-wrapper-less .table > tfoot > tr > th.success,
2528
+ .sg-wrapper-less .table > thead > tr.success > td,
2529
+ .sg-wrapper-less .table > tbody > tr.success > td,
2530
+ .sg-wrapper-less .table > tfoot > tr.success > td,
2531
+ .sg-wrapper-less .table > thead > tr.success > th,
2532
+ .sg-wrapper-less .table > tbody > tr.success > th,
2533
+ .sg-wrapper-less .table > tfoot > tr.success > th {
2534
+ background-color: #3fb618;
2535
+ }
2536
+ .sg-wrapper-less .table-hover > tbody > tr > td.success:hover,
2537
+ .sg-wrapper-less .table-hover > tbody > tr > th.success:hover,
2538
+ .sg-wrapper-less .table-hover > tbody > tr.success:hover > td,
2539
+ .sg-wrapper-less .table-hover > tbody > tr:hover > .success,
2540
+ .sg-wrapper-less .table-hover > tbody > tr.success:hover > th {
2541
+ background-color: #379f15;
2542
+ }
2543
+ .sg-wrapper-less .table > thead > tr > td.info,
2544
+ .sg-wrapper-less .table > tbody > tr > td.info,
2545
+ .sg-wrapper-less .table > tfoot > tr > td.info,
2546
+ .sg-wrapper-less .table > thead > tr > th.info,
2547
+ .sg-wrapper-less .table > tbody > tr > th.info,
2548
+ .sg-wrapper-less .table > tfoot > tr > th.info,
2549
+ .sg-wrapper-less .table > thead > tr.info > td,
2550
+ .sg-wrapper-less .table > tbody > tr.info > td,
2551
+ .sg-wrapper-less .table > tfoot > tr.info > td,
2552
+ .sg-wrapper-less .table > thead > tr.info > th,
2553
+ .sg-wrapper-less .table > tbody > tr.info > th,
2554
+ .sg-wrapper-less .table > tfoot > tr.info > th {
2555
+ background-color: #9954bb;
2556
+ }
2557
+ .sg-wrapper-less .table-hover > tbody > tr > td.info:hover,
2558
+ .sg-wrapper-less .table-hover > tbody > tr > th.info:hover,
2559
+ .sg-wrapper-less .table-hover > tbody > tr.info:hover > td,
2560
+ .sg-wrapper-less .table-hover > tbody > tr:hover > .info,
2561
+ .sg-wrapper-less .table-hover > tbody > tr.info:hover > th {
2562
+ background-color: #8d46b0;
2563
+ }
2564
+ .sg-wrapper-less .table > thead > tr > td.warning,
2565
+ .sg-wrapper-less .table > tbody > tr > td.warning,
2566
+ .sg-wrapper-less .table > tfoot > tr > td.warning,
2567
+ .sg-wrapper-less .table > thead > tr > th.warning,
2568
+ .sg-wrapper-less .table > tbody > tr > th.warning,
2569
+ .sg-wrapper-less .table > tfoot > tr > th.warning,
2570
+ .sg-wrapper-less .table > thead > tr.warning > td,
2571
+ .sg-wrapper-less .table > tbody > tr.warning > td,
2572
+ .sg-wrapper-less .table > tfoot > tr.warning > td,
2573
+ .sg-wrapper-less .table > thead > tr.warning > th,
2574
+ .sg-wrapper-less .table > tbody > tr.warning > th,
2575
+ .sg-wrapper-less .table > tfoot > tr.warning > th {
2576
+ background-color: #ff7518;
2577
+ }
2578
+ .sg-wrapper-less .table-hover > tbody > tr > td.warning:hover,
2579
+ .sg-wrapper-less .table-hover > tbody > tr > th.warning:hover,
2580
+ .sg-wrapper-less .table-hover > tbody > tr.warning:hover > td,
2581
+ .sg-wrapper-less .table-hover > tbody > tr:hover > .warning,
2582
+ .sg-wrapper-less .table-hover > tbody > tr.warning:hover > th {
2583
+ background-color: #fe6600;
2584
+ }
2585
+ .sg-wrapper-less .table > thead > tr > td.danger,
2586
+ .sg-wrapper-less .table > tbody > tr > td.danger,
2587
+ .sg-wrapper-less .table > tfoot > tr > td.danger,
2588
+ .sg-wrapper-less .table > thead > tr > th.danger,
2589
+ .sg-wrapper-less .table > tbody > tr > th.danger,
2590
+ .sg-wrapper-less .table > tfoot > tr > th.danger,
2591
+ .sg-wrapper-less .table > thead > tr.danger > td,
2592
+ .sg-wrapper-less .table > tbody > tr.danger > td,
2593
+ .sg-wrapper-less .table > tfoot > tr.danger > td,
2594
+ .sg-wrapper-less .table > thead > tr.danger > th,
2595
+ .sg-wrapper-less .table > tbody > tr.danger > th,
2596
+ .sg-wrapper-less .table > tfoot > tr.danger > th {
2597
+ background-color: #ff0039;
2598
+ }
2599
+ .sg-wrapper-less .table-hover > tbody > tr > td.danger:hover,
2600
+ .sg-wrapper-less .table-hover > tbody > tr > th.danger:hover,
2601
+ .sg-wrapper-less .table-hover > tbody > tr.danger:hover > td,
2602
+ .sg-wrapper-less .table-hover > tbody > tr:hover > .danger,
2603
+ .sg-wrapper-less .table-hover > tbody > tr.danger:hover > th {
2604
+ background-color: #e60033;
2605
+ }
2606
+ .sg-wrapper-less .table-responsive {
2607
+ overflow-x: auto;
2608
+ min-height: 0.01%;
2609
+ }
2610
+ @media screen and (max-width: 767px) {
2611
+ .sg-wrapper-less .table-responsive {
2612
+ width: 100%;
2613
+ margin-bottom: 15.75px;
2614
+ overflow-y: hidden;
2615
+ -ms-overflow-style: -ms-autohiding-scrollbar;
2616
+ border: 1px solid #dddddd;
2617
+ }
2618
+ .sg-wrapper-less .table-responsive > .table {
2619
+ margin-bottom: 0;
2620
+ }
2621
+ .sg-wrapper-less .table-responsive > .table > thead > tr > th,
2622
+ .sg-wrapper-less .table-responsive > .table > tbody > tr > th,
2623
+ .sg-wrapper-less .table-responsive > .table > tfoot > tr > th,
2624
+ .sg-wrapper-less .table-responsive > .table > thead > tr > td,
2625
+ .sg-wrapper-less .table-responsive > .table > tbody > tr > td,
2626
+ .sg-wrapper-less .table-responsive > .table > tfoot > tr > td {
2627
+ white-space: nowrap;
2628
+ }
2629
+ .sg-wrapper-less .table-responsive > .table-bordered {
2630
+ border: 0;
2631
+ }
2632
+ .sg-wrapper-less .table-responsive > .table-bordered > thead > tr > th:first-child,
2633
+ .sg-wrapper-less .table-responsive > .table-bordered > tbody > tr > th:first-child,
2634
+ .sg-wrapper-less .table-responsive > .table-bordered > tfoot > tr > th:first-child,
2635
+ .sg-wrapper-less .table-responsive > .table-bordered > thead > tr > td:first-child,
2636
+ .sg-wrapper-less .table-responsive > .table-bordered > tbody > tr > td:first-child,
2637
+ .sg-wrapper-less .table-responsive > .table-bordered > tfoot > tr > td:first-child {
2638
+ border-left: 0;
2639
+ }
2640
+ .sg-wrapper-less .table-responsive > .table-bordered > thead > tr > th:last-child,
2641
+ .sg-wrapper-less .table-responsive > .table-bordered > tbody > tr > th:last-child,
2642
+ .sg-wrapper-less .table-responsive > .table-bordered > tfoot > tr > th:last-child,
2643
+ .sg-wrapper-less .table-responsive > .table-bordered > thead > tr > td:last-child,
2644
+ .sg-wrapper-less .table-responsive > .table-bordered > tbody > tr > td:last-child,
2645
+ .sg-wrapper-less .table-responsive > .table-bordered > tfoot > tr > td:last-child {
2646
+ border-right: 0;
2647
+ }
2648
+ .sg-wrapper-less .table-responsive > .table-bordered > tbody > tr:last-child > th,
2649
+ .sg-wrapper-less .table-responsive > .table-bordered > tfoot > tr:last-child > th,
2650
+ .sg-wrapper-less .table-responsive > .table-bordered > tbody > tr:last-child > td,
2651
+ .sg-wrapper-less .table-responsive > .table-bordered > tfoot > tr:last-child > td {
2652
+ border-bottom: 0;
2653
+ }
2654
+ }
2655
+ .sg-wrapper-less fieldset {
2656
+ padding: 0;
2657
+ margin: 0;
2658
+ border: 0;
2659
+ min-width: 0;
2660
+ }
2661
+ .sg-wrapper-less legend {
2662
+ display: block;
2663
+ width: 100%;
2664
+ padding: 0;
2665
+ margin-bottom: 21px;
2666
+ font-size: 22.5px;
2667
+ line-height: inherit;
2668
+ color: #333333;
2669
+ border: 0;
2670
+ border-bottom: 1px solid #e5e5e5;
2671
+ }
2672
+ .sg-wrapper-less label {
2673
+ display: inline-block;
2674
+ max-width: 100%;
2675
+ margin-bottom: 5px;
2676
+ font-weight: bold;
2677
+ }
2678
+ .sg-wrapper-less input[type="search"] {
2679
+ -webkit-box-sizing: border-box;
2680
+ -moz-box-sizing: border-box;
2681
+ box-sizing: border-box;
2682
+ }
2683
+ .sg-wrapper-less input[type="radio"],
2684
+ .sg-wrapper-less input[type="checkbox"] {
2685
+ margin: 4px 0 0;
2686
+ margin-top: 1px \9;
2687
+ line-height: normal;
2688
+ }
2689
+ .sg-wrapper-less input[type="file"] {
2690
+ display: block;
2691
+ }
2692
+ .sg-wrapper-less input[type="range"] {
2693
+ display: block;
2694
+ width: 100%;
2695
+ }
2696
+ .sg-wrapper-less select[multiple],
2697
+ .sg-wrapper-less select[size] {
2698
+ height: auto;
2699
+ }
2700
+ .sg-wrapper-less input[type="file"]:focus,
2701
+ .sg-wrapper-less input[type="radio"]:focus,
2702
+ .sg-wrapper-less input[type="checkbox"]:focus {
2703
+ outline: thin dotted;
2704
+ outline: 5px auto -webkit-focus-ring-color;
2705
+ outline-offset: -2px;
2706
+ }
2707
+ .sg-wrapper-less output {
2708
+ display: block;
2709
+ padding-top: 11px;
2710
+ font-size: 15px;
2711
+ line-height: 1.42857143;
2712
+ color: #333333;
2713
+ }
2714
+ .sg-wrapper-less .form-control {
2715
+ display: block;
2716
+ width: 100%;
2717
+ height: 43px;
2718
+ padding: 10px 18px;
2719
+ font-size: 15px;
2720
+ line-height: 1.42857143;
2721
+ color: #333333;
2722
+ background-color: #ffffff;
2723
+ background-image: none;
2724
+ border: 1px solid #cccccc;
2725
+ border-radius: 0;
2726
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
2727
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
2728
+ -webkit-transition: border-color ease-in-out 0.15s, -webkit-box-shadow ease-in-out 0.15s;
2729
+ -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
2730
+ transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
2731
+ }
2732
+ .sg-wrapper-less .form-control:focus {
2733
+ border-color: #66afe9;
2734
+ outline: 0;
2735
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);
2736
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);
2737
+ }
2738
+ .sg-wrapper-less .form-control::-moz-placeholder {
2739
+ color: #999999;
2740
+ opacity: 1;
2741
+ }
2742
+ .sg-wrapper-less .form-control:-ms-input-placeholder {
2743
+ color: #999999;
2744
+ }
2745
+ .sg-wrapper-less .form-control::-webkit-input-placeholder {
2746
+ color: #999999;
2747
+ }
2748
+ .sg-wrapper-less .form-control[disabled],
2749
+ .sg-wrapper-less .form-control[readonly],
2750
+ .sg-wrapper-less fieldset[disabled] .form-control {
2751
+ background-color: #e6e6e6;
2752
+ opacity: 1;
2753
+ }
2754
+ .sg-wrapper-less .form-control[disabled],
2755
+ .sg-wrapper-less fieldset[disabled] .form-control {
2756
+ cursor: not-allowed;
2757
+ }
2758
+ .sg-wrapper-less textarea.form-control {
2759
+ height: auto;
2760
+ }
2761
+ .sg-wrapper-less input[type="search"] {
2762
+ -webkit-appearance: none;
2763
+ }
2764
+ @media screen and (-webkit-min-device-pixel-ratio: 0) {
2765
+ .sg-wrapper-less input[type="date"],
2766
+ .sg-wrapper-less input[type="time"],
2767
+ .sg-wrapper-less input[type="datetime-local"],
2768
+ .sg-wrapper-less input[type="month"] {
2769
+ line-height: 43px;
2770
+ }
2771
+ .sg-wrapper-less input[type="date"].input-sm,
2772
+ .sg-wrapper-less input[type="time"].input-sm,
2773
+ .sg-wrapper-less input[type="datetime-local"].input-sm,
2774
+ .sg-wrapper-less input[type="month"].input-sm,
2775
+ .sg-wrapper-less .input-group-sm input[type="date"],
2776
+ .sg-wrapper-less .input-group-sm input[type="time"],
2777
+ .sg-wrapper-less .input-group-sm input[type="datetime-local"],
2778
+ .sg-wrapper-less .input-group-sm input[type="month"] {
2779
+ line-height: 31px;
2780
+ }
2781
+ .sg-wrapper-less input[type="date"].input-lg,
2782
+ .sg-wrapper-less input[type="time"].input-lg,
2783
+ .sg-wrapper-less input[type="datetime-local"].input-lg,
2784
+ .sg-wrapper-less input[type="month"].input-lg,
2785
+ .sg-wrapper-less .input-group-lg input[type="date"],
2786
+ .sg-wrapper-less .input-group-lg input[type="time"],
2787
+ .sg-wrapper-less .input-group-lg input[type="datetime-local"],
2788
+ .sg-wrapper-less .input-group-lg input[type="month"] {
2789
+ line-height: 64px;
2790
+ }
2791
+ }
2792
+ .sg-wrapper-less .form-group {
2793
+ margin-bottom: 15px;
2794
+ }
2795
+ .sg-wrapper-less .radio,
2796
+ .sg-wrapper-less .checkbox {
2797
+ position: relative;
2798
+ display: block;
2799
+ margin-top: 10px;
2800
+ margin-bottom: 10px;
2801
+ }
2802
+ .sg-wrapper-less .radio label,
2803
+ .sg-wrapper-less .checkbox label {
2804
+ min-height: 21px;
2805
+ padding-left: 20px;
2806
+ margin-bottom: 0;
2807
+ font-weight: normal;
2808
+ cursor: pointer;
2809
+ }
2810
+ .sg-wrapper-less .radio input[type="radio"],
2811
+ .sg-wrapper-less .radio-inline input[type="radio"],
2812
+ .sg-wrapper-less .checkbox input[type="checkbox"],
2813
+ .sg-wrapper-less .checkbox-inline input[type="checkbox"] {
2814
+ position: absolute;
2815
+ margin-left: -20px;
2816
+ margin-top: 4px \9;
2817
+ }
2818
+ .sg-wrapper-less .radio + .radio,
2819
+ .sg-wrapper-less .checkbox + .checkbox {
2820
+ margin-top: -5px;
2821
+ }
2822
+ .sg-wrapper-less .radio-inline,
2823
+ .sg-wrapper-less .checkbox-inline {
2824
+ position: relative;
2825
+ display: inline-block;
2826
+ padding-left: 20px;
2827
+ margin-bottom: 0;
2828
+ vertical-align: middle;
2829
+ font-weight: normal;
2830
+ cursor: pointer;
2831
+ }
2832
+ .sg-wrapper-less .radio-inline + .radio-inline,
2833
+ .sg-wrapper-less .checkbox-inline + .checkbox-inline {
2834
+ margin-top: 0;
2835
+ margin-left: 10px;
2836
+ }
2837
+ .sg-wrapper-less input[type="radio"][disabled],
2838
+ .sg-wrapper-less input[type="checkbox"][disabled],
2839
+ .sg-wrapper-less input[type="radio"].disabled,
2840
+ .sg-wrapper-less input[type="checkbox"].disabled,
2841
+ .sg-wrapper-less fieldset[disabled] input[type="radio"],
2842
+ .sg-wrapper-less fieldset[disabled] input[type="checkbox"] {
2843
+ cursor: not-allowed;
2844
+ }
2845
+ .sg-wrapper-less .radio-inline.disabled,
2846
+ .sg-wrapper-less .checkbox-inline.disabled,
2847
+ .sg-wrapper-less fieldset[disabled] .radio-inline,
2848
+ .sg-wrapper-less fieldset[disabled] .checkbox-inline {
2849
+ cursor: not-allowed;
2850
+ }
2851
+ .sg-wrapper-less .radio.disabled label,
2852
+ .sg-wrapper-less .checkbox.disabled label,
2853
+ .sg-wrapper-less fieldset[disabled] .radio label,
2854
+ .sg-wrapper-less fieldset[disabled] .checkbox label {
2855
+ cursor: not-allowed;
2856
+ }
2857
+ .sg-wrapper-less .form-control-static {
2858
+ padding-top: 11px;
2859
+ padding-bottom: 11px;
2860
+ margin-bottom: 0;
2861
+ min-height: 36px;
2862
+ }
2863
+ .sg-wrapper-less .form-control-static.input-lg,
2864
+ .sg-wrapper-less .form-control-static.input-sm {
2865
+ padding-left: 0;
2866
+ padding-right: 0;
2867
+ }
2868
+ .sg-wrapper-less .input-sm {
2869
+ height: 31px;
2870
+ padding: 5px 10px;
2871
+ font-size: 13px;
2872
+ line-height: 1.5;
2873
+ border-radius: 0;
2874
+ }
2875
+ .sg-wrapper-less select.input-sm {
2876
+ height: 31px;
2877
+ line-height: 31px;
2878
+ }
2879
+ .sg-wrapper-less textarea.input-sm,
2880
+ .sg-wrapper-less select[multiple].input-sm {
2881
+ height: auto;
2882
+ }
2883
+ .sg-wrapper-less .form-group-sm .form-control {
2884
+ height: 31px;
2885
+ padding: 5px 10px;
2886
+ font-size: 13px;
2887
+ line-height: 1.5;
2888
+ border-radius: 0;
2889
+ }
2890
+ .sg-wrapper-less select.form-group-sm .form-control {
2891
+ height: 31px;
2892
+ line-height: 31px;
2893
+ }
2894
+ .sg-wrapper-less textarea.form-group-sm .form-control,
2895
+ .sg-wrapper-less select[multiple].form-group-sm .form-control {
2896
+ height: auto;
2897
+ }
2898
+ .sg-wrapper-less .form-group-sm .form-control-static {
2899
+ height: 31px;
2900
+ padding: 5px 10px;
2901
+ font-size: 13px;
2902
+ line-height: 1.5;
2903
+ min-height: 34px;
2904
+ }
2905
+ .sg-wrapper-less .input-lg {
2906
+ height: 64px;
2907
+ padding: 18px 30px;
2908
+ font-size: 19px;
2909
+ line-height: 1.3333333;
2910
+ border-radius: 0;
2911
+ }
2912
+ .sg-wrapper-less select.input-lg {
2913
+ height: 64px;
2914
+ line-height: 64px;
2915
+ }
2916
+ .sg-wrapper-less textarea.input-lg,
2917
+ .sg-wrapper-less select[multiple].input-lg {
2918
+ height: auto;
2919
+ }
2920
+ .sg-wrapper-less .form-group-lg .form-control {
2921
+ height: 64px;
2922
+ padding: 18px 30px;
2923
+ font-size: 19px;
2924
+ line-height: 1.3333333;
2925
+ border-radius: 0;
2926
+ }
2927
+ .sg-wrapper-less select.form-group-lg .form-control {
2928
+ height: 64px;
2929
+ line-height: 64px;
2930
+ }
2931
+ .sg-wrapper-less textarea.form-group-lg .form-control,
2932
+ .sg-wrapper-less select[multiple].form-group-lg .form-control {
2933
+ height: auto;
2934
+ }
2935
+ .sg-wrapper-less .form-group-lg .form-control-static {
2936
+ height: 64px;
2937
+ padding: 18px 30px;
2938
+ font-size: 19px;
2939
+ line-height: 1.3333333;
2940
+ min-height: 40px;
2941
+ }
2942
+ .sg-wrapper-less .has-feedback {
2943
+ position: relative;
2944
+ }
2945
+ .sg-wrapper-less .has-feedback .form-control {
2946
+ padding-right: 53.75px;
2947
+ }
2948
+ .sg-wrapper-less .form-control-feedback {
2949
+ position: absolute;
2950
+ top: 0;
2951
+ right: 0;
2952
+ z-index: 2;
2953
+ display: block;
2954
+ width: 43px;
2955
+ height: 43px;
2956
+ line-height: 43px;
2957
+ text-align: center;
2958
+ pointer-events: none;
2959
+ }
2960
+ .sg-wrapper-less .input-lg + .form-control-feedback {
2961
+ width: 64px;
2962
+ height: 64px;
2963
+ line-height: 64px;
2964
+ }
2965
+ .sg-wrapper-less .input-sm + .form-control-feedback {
2966
+ width: 31px;
2967
+ height: 31px;
2968
+ line-height: 31px;
2969
+ }
2970
+ .sg-wrapper-less .has-success .help-block,
2971
+ .sg-wrapper-less .has-success .control-label,
2972
+ .sg-wrapper-less .has-success .radio,
2973
+ .sg-wrapper-less .has-success .checkbox,
2974
+ .sg-wrapper-less .has-success .radio-inline,
2975
+ .sg-wrapper-less .has-success .checkbox-inline,
2976
+ .sg-wrapper-less .has-success.radio label,
2977
+ .sg-wrapper-less .has-success.checkbox label,
2978
+ .sg-wrapper-less .has-success.radio-inline label,
2979
+ .sg-wrapper-less .has-success.checkbox-inline label {
2980
+ color: #ffffff;
2981
+ }
2982
+ .sg-wrapper-less .has-success .form-control {
2983
+ border-color: #ffffff;
2984
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
2985
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
2986
+ }
2987
+ .sg-wrapper-less .has-success .form-control:focus {
2988
+ border-color: #e6e6e6;
2989
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
2990
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
2991
+ }
2992
+ .sg-wrapper-less .has-success .input-group-addon {
2993
+ color: #ffffff;
2994
+ border-color: #ffffff;
2995
+ background-color: #3fb618;
2996
+ }
2997
+ .sg-wrapper-less .has-success .form-control-feedback {
2998
+ color: #ffffff;
2999
+ }
3000
+ .sg-wrapper-less .has-warning .help-block,
3001
+ .sg-wrapper-less .has-warning .control-label,
3002
+ .sg-wrapper-less .has-warning .radio,
3003
+ .sg-wrapper-less .has-warning .checkbox,
3004
+ .sg-wrapper-less .has-warning .radio-inline,
3005
+ .sg-wrapper-less .has-warning .checkbox-inline,
3006
+ .sg-wrapper-less .has-warning.radio label,
3007
+ .sg-wrapper-less .has-warning.checkbox label,
3008
+ .sg-wrapper-less .has-warning.radio-inline label,
3009
+ .sg-wrapper-less .has-warning.checkbox-inline label {
3010
+ color: #ffffff;
3011
+ }
3012
+ .sg-wrapper-less .has-warning .form-control {
3013
+ border-color: #ffffff;
3014
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
3015
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
3016
+ }
3017
+ .sg-wrapper-less .has-warning .form-control:focus {
3018
+ border-color: #e6e6e6;
3019
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
3020
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
3021
+ }
3022
+ .sg-wrapper-less .has-warning .input-group-addon {
3023
+ color: #ffffff;
3024
+ border-color: #ffffff;
3025
+ background-color: #ff7518;
3026
+ }
3027
+ .sg-wrapper-less .has-warning .form-control-feedback {
3028
+ color: #ffffff;
3029
+ }
3030
+ .sg-wrapper-less .has-error .help-block,
3031
+ .sg-wrapper-less .has-error .control-label,
3032
+ .sg-wrapper-less .has-error .radio,
3033
+ .sg-wrapper-less .has-error .checkbox,
3034
+ .sg-wrapper-less .has-error .radio-inline,
3035
+ .sg-wrapper-less .has-error .checkbox-inline,
3036
+ .sg-wrapper-less .has-error.radio label,
3037
+ .sg-wrapper-less .has-error.checkbox label,
3038
+ .sg-wrapper-less .has-error.radio-inline label,
3039
+ .sg-wrapper-less .has-error.checkbox-inline label {
3040
+ color: #ffffff;
3041
+ }
3042
+ .sg-wrapper-less .has-error .form-control {
3043
+ border-color: #ffffff;
3044
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
3045
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
3046
+ }
3047
+ .sg-wrapper-less .has-error .form-control:focus {
3048
+ border-color: #e6e6e6;
3049
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
3050
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
3051
+ }
3052
+ .sg-wrapper-less .has-error .input-group-addon {
3053
+ color: #ffffff;
3054
+ border-color: #ffffff;
3055
+ background-color: #ff0039;
3056
+ }
3057
+ .sg-wrapper-less .has-error .form-control-feedback {
3058
+ color: #ffffff;
3059
+ }
3060
+ .sg-wrapper-less .has-feedback label ~ .form-control-feedback {
3061
+ top: 26px;
3062
+ }
3063
+ .sg-wrapper-less .has-feedback label.sr-only ~ .form-control-feedback {
3064
+ top: 0;
3065
+ }
3066
+ .sg-wrapper-less .help-block {
3067
+ display: block;
3068
+ margin-top: 5px;
3069
+ margin-bottom: 10px;
3070
+ color: #737373;
3071
+ }
3072
+ @media (min-width: 768px) {
3073
+ .sg-wrapper-less .form-inline .form-group {
3074
+ display: inline-block;
3075
+ margin-bottom: 0;
3076
+ vertical-align: middle;
3077
+ }
3078
+ .sg-wrapper-less .form-inline .form-control {
3079
+ display: inline-block;
3080
+ width: auto;
3081
+ vertical-align: middle;
3082
+ }
3083
+ .sg-wrapper-less .form-inline .form-control-static {
3084
+ display: inline-block;
3085
+ }
3086
+ .sg-wrapper-less .form-inline .input-group {
3087
+ display: inline-table;
3088
+ vertical-align: middle;
3089
+ }
3090
+ .sg-wrapper-less .form-inline .input-group .input-group-addon,
3091
+ .sg-wrapper-less .form-inline .input-group .input-group-btn,
3092
+ .sg-wrapper-less .form-inline .input-group .form-control {
3093
+ width: auto;
3094
+ }
3095
+ .sg-wrapper-less .form-inline .input-group > .form-control {
3096
+ width: 100%;
3097
+ }
3098
+ .sg-wrapper-less .form-inline .control-label {
3099
+ margin-bottom: 0;
3100
+ vertical-align: middle;
3101
+ }
3102
+ .sg-wrapper-less .form-inline .radio,
3103
+ .sg-wrapper-less .form-inline .checkbox {
3104
+ display: inline-block;
3105
+ margin-top: 0;
3106
+ margin-bottom: 0;
3107
+ vertical-align: middle;
3108
+ }
3109
+ .sg-wrapper-less .form-inline .radio label,
3110
+ .sg-wrapper-less .form-inline .checkbox label {
3111
+ padding-left: 0;
3112
+ }
3113
+ .sg-wrapper-less .form-inline .radio input[type="radio"],
3114
+ .sg-wrapper-less .form-inline .checkbox input[type="checkbox"] {
3115
+ position: relative;
3116
+ margin-left: 0;
3117
+ }
3118
+ .sg-wrapper-less .form-inline .has-feedback .form-control-feedback {
3119
+ top: 0;
3120
+ }
3121
+ }
3122
+ .sg-wrapper-less .form-horizontal .radio,
3123
+ .sg-wrapper-less .form-horizontal .checkbox,
3124
+ .sg-wrapper-less .form-horizontal .radio-inline,
3125
+ .sg-wrapper-less .form-horizontal .checkbox-inline {
3126
+ margin-top: 0;
3127
+ margin-bottom: 0;
3128
+ padding-top: 11px;
3129
+ }
3130
+ .sg-wrapper-less .form-horizontal .radio,
3131
+ .sg-wrapper-less .form-horizontal .checkbox {
3132
+ min-height: 32px;
3133
+ }
3134
+ .sg-wrapper-less .form-horizontal .form-group {
3135
+ margin-left: -15px;
3136
+ margin-right: -15px;
3137
+ }
3138
+ @media (min-width: 768px) {
3139
+ .sg-wrapper-less .form-horizontal .control-label {
3140
+ text-align: right;
3141
+ margin-bottom: 0;
3142
+ padding-top: 11px;
3143
+ }
3144
+ }
3145
+ .sg-wrapper-less .form-horizontal .has-feedback .form-control-feedback {
3146
+ right: 15px;
3147
+ }
3148
+ @media (min-width: 768px) {
3149
+ .sg-wrapper-less .form-horizontal .form-group-lg .control-label {
3150
+ padding-top: 24.9999994px;
3151
+ }
3152
+ }
3153
+ @media (min-width: 768px) {
3154
+ .sg-wrapper-less .form-horizontal .form-group-sm .control-label {
3155
+ padding-top: 6px;
3156
+ }
3157
+ }
3158
+ .sg-wrapper-less .btn {
3159
+ display: inline-block;
3160
+ margin-bottom: 0;
3161
+ font-weight: normal;
3162
+ text-align: center;
3163
+ vertical-align: middle;
3164
+ -ms-touch-action: manipulation;
3165
+ touch-action: manipulation;
3166
+ cursor: pointer;
3167
+ background-image: none;
3168
+ border: 1px solid transparent;
3169
+ white-space: nowrap;
3170
+ padding: 10px 18px;
3171
+ font-size: 15px;
3172
+ line-height: 1.42857143;
3173
+ border-radius: 0;
3174
+ -webkit-user-select: none;
3175
+ -moz-user-select: none;
3176
+ -ms-user-select: none;
3177
+ user-select: none;
3178
+ }
3179
+ .sg-wrapper-less .btn:focus,
3180
+ .sg-wrapper-less .btn:active:focus,
3181
+ .sg-wrapper-less .btn.active:focus,
3182
+ .sg-wrapper-less .btn.focus,
3183
+ .sg-wrapper-less .btn:active.focus,
3184
+ .sg-wrapper-less .btn.active.focus {
3185
+ outline: thin dotted;
3186
+ outline: 5px auto -webkit-focus-ring-color;
3187
+ outline-offset: -2px;
3188
+ }
3189
+ .sg-wrapper-less .btn:hover,
3190
+ .sg-wrapper-less .btn:focus,
3191
+ .sg-wrapper-less .btn.focus {
3192
+ color: #ffffff;
3193
+ text-decoration: none;
3194
+ }
3195
+ .sg-wrapper-less .btn:active,
3196
+ .sg-wrapper-less .btn.active {
3197
+ outline: 0;
3198
+ background-image: none;
3199
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
3200
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
3201
+ }
3202
+ .sg-wrapper-less .btn.disabled,
3203
+ .sg-wrapper-less .btn[disabled],
3204
+ .sg-wrapper-less fieldset[disabled] .btn {
3205
+ cursor: not-allowed;
3206
+ pointer-events: none;
3207
+ opacity: 0.65;
3208
+ filter: alpha(opacity=65);
3209
+ -webkit-box-shadow: none;
3210
+ box-shadow: none;
3211
+ }
3212
+ .sg-wrapper-less .btn-default {
3213
+ color: #ffffff;
3214
+ background-color: #222222;
3215
+ border-color: #222222;
3216
+ }
3217
+ .sg-wrapper-less .btn-default:hover,
3218
+ .sg-wrapper-less .btn-default:focus,
3219
+ .sg-wrapper-less .btn-default.focus,
3220
+ .sg-wrapper-less .btn-default:active,
3221
+ .sg-wrapper-less .btn-default.active,
3222
+ .sg-wrapper-less .open > .dropdown-toggle.btn-default {
3223
+ color: #ffffff;
3224
+ background-color: #090909;
3225
+ border-color: #040404;
3226
+ }
3227
+ .sg-wrapper-less .btn-default:active,
3228
+ .sg-wrapper-less .btn-default.active,
3229
+ .sg-wrapper-less .open > .dropdown-toggle.btn-default {
3230
+ background-image: none;
3231
+ }
3232
+ .sg-wrapper-less .btn-default.disabled,
3233
+ .sg-wrapper-less .btn-default[disabled],
3234
+ .sg-wrapper-less fieldset[disabled] .btn-default,
3235
+ .sg-wrapper-less .btn-default.disabled:hover,
3236
+ .sg-wrapper-less .btn-default[disabled]:hover,
3237
+ .sg-wrapper-less fieldset[disabled] .btn-default:hover,
3238
+ .sg-wrapper-less .btn-default.disabled:focus,
3239
+ .sg-wrapper-less .btn-default[disabled]:focus,
3240
+ .sg-wrapper-less fieldset[disabled] .btn-default:focus,
3241
+ .sg-wrapper-less .btn-default.disabled.focus,
3242
+ .sg-wrapper-less .btn-default[disabled].focus,
3243
+ .sg-wrapper-less fieldset[disabled] .btn-default.focus,
3244
+ .sg-wrapper-less .btn-default.disabled:active,
3245
+ .sg-wrapper-less .btn-default[disabled]:active,
3246
+ .sg-wrapper-less fieldset[disabled] .btn-default:active,
3247
+ .sg-wrapper-less .btn-default.disabled.active,
3248
+ .sg-wrapper-less .btn-default[disabled].active,
3249
+ .sg-wrapper-less fieldset[disabled] .btn-default.active {
3250
+ background-color: #222222;
3251
+ border-color: #222222;
3252
+ }
3253
+ .sg-wrapper-less .btn-default .badge {
3254
+ color: #222222;
3255
+ background-color: #ffffff;
3256
+ }
3257
+ .sg-wrapper-less .btn-primary {
3258
+ color: #ffffff;
3259
+ background-color: #2780e3;
3260
+ border-color: #2780e3;
3261
+ }
3262
+ .sg-wrapper-less .btn-primary:hover,
3263
+ .sg-wrapper-less .btn-primary:focus,
3264
+ .sg-wrapper-less .btn-primary.focus,
3265
+ .sg-wrapper-less .btn-primary:active,
3266
+ .sg-wrapper-less .btn-primary.active,
3267
+ .sg-wrapper-less .open > .dropdown-toggle.btn-primary {
3268
+ color: #ffffff;
3269
+ background-color: #1967be;
3270
+ border-color: #1862b5;
3271
+ }
3272
+ .sg-wrapper-less .btn-primary:active,
3273
+ .sg-wrapper-less .btn-primary.active,
3274
+ .sg-wrapper-less .open > .dropdown-toggle.btn-primary {
3275
+ background-image: none;
3276
+ }
3277
+ .sg-wrapper-less .btn-primary.disabled,
3278
+ .sg-wrapper-less .btn-primary[disabled],
3279
+ .sg-wrapper-less fieldset[disabled] .btn-primary,
3280
+ .sg-wrapper-less .btn-primary.disabled:hover,
3281
+ .sg-wrapper-less .btn-primary[disabled]:hover,
3282
+ .sg-wrapper-less fieldset[disabled] .btn-primary:hover,
3283
+ .sg-wrapper-less .btn-primary.disabled:focus,
3284
+ .sg-wrapper-less .btn-primary[disabled]:focus,
3285
+ .sg-wrapper-less fieldset[disabled] .btn-primary:focus,
3286
+ .sg-wrapper-less .btn-primary.disabled.focus,
3287
+ .sg-wrapper-less .btn-primary[disabled].focus,
3288
+ .sg-wrapper-less fieldset[disabled] .btn-primary.focus,
3289
+ .sg-wrapper-less .btn-primary.disabled:active,
3290
+ .sg-wrapper-less .btn-primary[disabled]:active,
3291
+ .sg-wrapper-less fieldset[disabled] .btn-primary:active,
3292
+ .sg-wrapper-less .btn-primary.disabled.active,
3293
+ .sg-wrapper-less .btn-primary[disabled].active,
3294
+ .sg-wrapper-less fieldset[disabled] .btn-primary.active {
3295
+ background-color: #2780e3;
3296
+ border-color: #2780e3;
3297
+ }
3298
+ .sg-wrapper-less .btn-primary .badge {
3299
+ color: #2780e3;
3300
+ background-color: #ffffff;
3301
+ }
3302
+ .sg-wrapper-less .btn-success {
3303
+ color: #ffffff;
3304
+ background-color: #3fb618;
3305
+ border-color: #3fb618;
3306
+ }
3307
+ .sg-wrapper-less .btn-success:hover,
3308
+ .sg-wrapper-less .btn-success:focus,
3309
+ .sg-wrapper-less .btn-success.focus,
3310
+ .sg-wrapper-less .btn-success:active,
3311
+ .sg-wrapper-less .btn-success.active,
3312
+ .sg-wrapper-less .open > .dropdown-toggle.btn-success {
3313
+ color: #ffffff;
3314
+ background-color: #2f8912;
3315
+ border-color: #2c8011;
3316
+ }
3317
+ .sg-wrapper-less .btn-success:active,
3318
+ .sg-wrapper-less .btn-success.active,
3319
+ .sg-wrapper-less .open > .dropdown-toggle.btn-success {
3320
+ background-image: none;
3321
+ }
3322
+ .sg-wrapper-less .btn-success.disabled,
3323
+ .sg-wrapper-less .btn-success[disabled],
3324
+ .sg-wrapper-less fieldset[disabled] .btn-success,
3325
+ .sg-wrapper-less .btn-success.disabled:hover,
3326
+ .sg-wrapper-less .btn-success[disabled]:hover,
3327
+ .sg-wrapper-less fieldset[disabled] .btn-success:hover,
3328
+ .sg-wrapper-less .btn-success.disabled:focus,
3329
+ .sg-wrapper-less .btn-success[disabled]:focus,
3330
+ .sg-wrapper-less fieldset[disabled] .btn-success:focus,
3331
+ .sg-wrapper-less .btn-success.disabled.focus,
3332
+ .sg-wrapper-less .btn-success[disabled].focus,
3333
+ .sg-wrapper-less fieldset[disabled] .btn-success.focus,
3334
+ .sg-wrapper-less .btn-success.disabled:active,
3335
+ .sg-wrapper-less .btn-success[disabled]:active,
3336
+ .sg-wrapper-less fieldset[disabled] .btn-success:active,
3337
+ .sg-wrapper-less .btn-success.disabled.active,
3338
+ .sg-wrapper-less .btn-success[disabled].active,
3339
+ .sg-wrapper-less fieldset[disabled] .btn-success.active {
3340
+ background-color: #3fb618;
3341
+ border-color: #3fb618;
3342
+ }
3343
+ .sg-wrapper-less .btn-success .badge {
3344
+ color: #3fb618;
3345
+ background-color: #ffffff;
3346
+ }
3347
+ .sg-wrapper-less .btn-info {
3348
+ color: #ffffff;
3349
+ background-color: #9954bb;
3350
+ border-color: #9954bb;
3351
+ }
3352
+ .sg-wrapper-less .btn-info:hover,
3353
+ .sg-wrapper-less .btn-info:focus,
3354
+ .sg-wrapper-less .btn-info.focus,
3355
+ .sg-wrapper-less .btn-info:active,
3356
+ .sg-wrapper-less .btn-info.active,
3357
+ .sg-wrapper-less .open > .dropdown-toggle.btn-info {
3358
+ color: #ffffff;
3359
+ background-color: #7e3f9d;
3360
+ border-color: #783c96;
3361
+ }
3362
+ .sg-wrapper-less .btn-info:active,
3363
+ .sg-wrapper-less .btn-info.active,
3364
+ .sg-wrapper-less .open > .dropdown-toggle.btn-info {
3365
+ background-image: none;
3366
+ }
3367
+ .sg-wrapper-less .btn-info.disabled,
3368
+ .sg-wrapper-less .btn-info[disabled],
3369
+ .sg-wrapper-less fieldset[disabled] .btn-info,
3370
+ .sg-wrapper-less .btn-info.disabled:hover,
3371
+ .sg-wrapper-less .btn-info[disabled]:hover,
3372
+ .sg-wrapper-less fieldset[disabled] .btn-info:hover,
3373
+ .sg-wrapper-less .btn-info.disabled:focus,
3374
+ .sg-wrapper-less .btn-info[disabled]:focus,
3375
+ .sg-wrapper-less fieldset[disabled] .btn-info:focus,
3376
+ .sg-wrapper-less .btn-info.disabled.focus,
3377
+ .sg-wrapper-less .btn-info[disabled].focus,
3378
+ .sg-wrapper-less fieldset[disabled] .btn-info.focus,
3379
+ .sg-wrapper-less .btn-info.disabled:active,
3380
+ .sg-wrapper-less .btn-info[disabled]:active,
3381
+ .sg-wrapper-less fieldset[disabled] .btn-info:active,
3382
+ .sg-wrapper-less .btn-info.disabled.active,
3383
+ .sg-wrapper-less .btn-info[disabled].active,
3384
+ .sg-wrapper-less fieldset[disabled] .btn-info.active {
3385
+ background-color: #9954bb;
3386
+ border-color: #9954bb;
3387
+ }
3388
+ .sg-wrapper-less .btn-info .badge {
3389
+ color: #9954bb;
3390
+ background-color: #ffffff;
3391
+ }
3392
+ .sg-wrapper-less .btn-warning {
3393
+ color: #ffffff;
3394
+ background-color: #ff7518;
3395
+ border-color: #ff7518;
3396
+ }
3397
+ .sg-wrapper-less .btn-warning:hover,
3398
+ .sg-wrapper-less .btn-warning:focus,
3399
+ .sg-wrapper-less .btn-warning.focus,
3400
+ .sg-wrapper-less .btn-warning:active,
3401
+ .sg-wrapper-less .btn-warning.active,
3402
+ .sg-wrapper-less .open > .dropdown-toggle.btn-warning {
3403
+ color: #ffffff;
3404
+ background-color: #e45c00;
3405
+ border-color: #da5800;
3406
+ }
3407
+ .sg-wrapper-less .btn-warning:active,
3408
+ .sg-wrapper-less .btn-warning.active,
3409
+ .sg-wrapper-less .open > .dropdown-toggle.btn-warning {
3410
+ background-image: none;
3411
+ }
3412
+ .sg-wrapper-less .btn-warning.disabled,
3413
+ .sg-wrapper-less .btn-warning[disabled],
3414
+ .sg-wrapper-less fieldset[disabled] .btn-warning,
3415
+ .sg-wrapper-less .btn-warning.disabled:hover,
3416
+ .sg-wrapper-less .btn-warning[disabled]:hover,
3417
+ .sg-wrapper-less fieldset[disabled] .btn-warning:hover,
3418
+ .sg-wrapper-less .btn-warning.disabled:focus,
3419
+ .sg-wrapper-less .btn-warning[disabled]:focus,
3420
+ .sg-wrapper-less fieldset[disabled] .btn-warning:focus,
3421
+ .sg-wrapper-less .btn-warning.disabled.focus,
3422
+ .sg-wrapper-less .btn-warning[disabled].focus,
3423
+ .sg-wrapper-less fieldset[disabled] .btn-warning.focus,
3424
+ .sg-wrapper-less .btn-warning.disabled:active,
3425
+ .sg-wrapper-less .btn-warning[disabled]:active,
3426
+ .sg-wrapper-less fieldset[disabled] .btn-warning:active,
3427
+ .sg-wrapper-less .btn-warning.disabled.active,
3428
+ .sg-wrapper-less .btn-warning[disabled].active,
3429
+ .sg-wrapper-less fieldset[disabled] .btn-warning.active {
3430
+ background-color: #ff7518;
3431
+ border-color: #ff7518;
3432
+ }
3433
+ .sg-wrapper-less .btn-warning .badge {
3434
+ color: #ff7518;
3435
+ background-color: #ffffff;
3436
+ }
3437
+ .sg-wrapper-less .btn-danger {
3438
+ color: #ffffff;
3439
+ background-color: #ff0039;
3440
+ border-color: #ff0039;
3441
+ }
3442
+ .sg-wrapper-less .btn-danger:hover,
3443
+ .sg-wrapper-less .btn-danger:focus,
3444
+ .sg-wrapper-less .btn-danger.focus,
3445
+ .sg-wrapper-less .btn-danger:active,
3446
+ .sg-wrapper-less .btn-danger.active,
3447
+ .sg-wrapper-less .open > .dropdown-toggle.btn-danger {
3448
+ color: #ffffff;
3449
+ background-color: #cc002e;
3450
+ border-color: #c2002b;
3451
+ }
3452
+ .sg-wrapper-less .btn-danger:active,
3453
+ .sg-wrapper-less .btn-danger.active,
3454
+ .sg-wrapper-less .open > .dropdown-toggle.btn-danger {
3455
+ background-image: none;
3456
+ }
3457
+ .sg-wrapper-less .btn-danger.disabled,
3458
+ .sg-wrapper-less .btn-danger[disabled],
3459
+ .sg-wrapper-less fieldset[disabled] .btn-danger,
3460
+ .sg-wrapper-less .btn-danger.disabled:hover,
3461
+ .sg-wrapper-less .btn-danger[disabled]:hover,
3462
+ .sg-wrapper-less fieldset[disabled] .btn-danger:hover,
3463
+ .sg-wrapper-less .btn-danger.disabled:focus,
3464
+ .sg-wrapper-less .btn-danger[disabled]:focus,
3465
+ .sg-wrapper-less fieldset[disabled] .btn-danger:focus,
3466
+ .sg-wrapper-less .btn-danger.disabled.focus,
3467
+ .sg-wrapper-less .btn-danger[disabled].focus,
3468
+ .sg-wrapper-less fieldset[disabled] .btn-danger.focus,
3469
+ .sg-wrapper-less .btn-danger.disabled:active,
3470
+ .sg-wrapper-less .btn-danger[disabled]:active,
3471
+ .sg-wrapper-less fieldset[disabled] .btn-danger:active,
3472
+ .sg-wrapper-less .btn-danger.disabled.active,
3473
+ .sg-wrapper-less .btn-danger[disabled].active,
3474
+ .sg-wrapper-less fieldset[disabled] .btn-danger.active {
3475
+ background-color: #ff0039;
3476
+ border-color: #ff0039;
3477
+ }
3478
+ .sg-wrapper-less .btn-danger .badge {
3479
+ color: #ff0039;
3480
+ background-color: #ffffff;
3481
+ }
3482
+ .sg-wrapper-less .btn-link {
3483
+ color: #2780e3;
3484
+ font-weight: normal;
3485
+ border-radius: 0;
3486
+ }
3487
+ .sg-wrapper-less .btn-link,
3488
+ .sg-wrapper-less .btn-link:active,
3489
+ .sg-wrapper-less .btn-link.active,
3490
+ .sg-wrapper-less .btn-link[disabled],
3491
+ .sg-wrapper-less fieldset[disabled] .btn-link {
3492
+ background-color: transparent;
3493
+ -webkit-box-shadow: none;
3494
+ box-shadow: none;
3495
+ }
3496
+ .sg-wrapper-less .btn-link,
3497
+ .sg-wrapper-less .btn-link:hover,
3498
+ .sg-wrapper-less .btn-link:focus,
3499
+ .sg-wrapper-less .btn-link:active {
3500
+ border-color: transparent;
3501
+ }
3502
+ .sg-wrapper-less .btn-link:hover,
3503
+ .sg-wrapper-less .btn-link:focus {
3504
+ color: #165ba8;
3505
+ text-decoration: underline;
3506
+ background-color: transparent;
3507
+ }
3508
+ .sg-wrapper-less .btn-link[disabled]:hover,
3509
+ .sg-wrapper-less fieldset[disabled] .btn-link:hover,
3510
+ .sg-wrapper-less .btn-link[disabled]:focus,
3511
+ .sg-wrapper-less fieldset[disabled] .btn-link:focus {
3512
+ color: #999999;
3513
+ text-decoration: none;
3514
+ }
3515
+ .sg-wrapper-less .btn-lg,
3516
+ .sg-wrapper-less .btn-group-lg > .btn {
3517
+ padding: 18px 30px;
3518
+ font-size: 19px;
3519
+ line-height: 1.3333333;
3520
+ border-radius: 0;
3521
+ }
3522
+ .sg-wrapper-less .btn-sm,
3523
+ .sg-wrapper-less .btn-group-sm > .btn {
3524
+ padding: 5px 10px;
3525
+ font-size: 13px;
3526
+ line-height: 1.5;
3527
+ border-radius: 0;
3528
+ }
3529
+ .sg-wrapper-less .btn-xs,
3530
+ .sg-wrapper-less .btn-group-xs > .btn {
3531
+ padding: 1px 5px;
3532
+ font-size: 13px;
3533
+ line-height: 1.5;
3534
+ border-radius: 0;
3535
+ }
3536
+ .sg-wrapper-less .btn-block {
3537
+ display: block;
3538
+ width: 100%;
3539
+ }
3540
+ .sg-wrapper-less .btn-block + .btn-block {
3541
+ margin-top: 5px;
3542
+ }
3543
+ .sg-wrapper-less input[type="submit"].btn-block,
3544
+ .sg-wrapper-less input[type="reset"].btn-block,
3545
+ .sg-wrapper-less input[type="button"].btn-block {
3546
+ width: 100%;
3547
+ }
3548
+ .sg-wrapper-less .fade {
3549
+ opacity: 0;
3550
+ -webkit-transition: opacity 0.15s linear;
3551
+ -o-transition: opacity 0.15s linear;
3552
+ transition: opacity 0.15s linear;
3553
+ }
3554
+ .sg-wrapper-less .fade.in {
3555
+ opacity: 1;
3556
+ }
3557
+ .sg-wrapper-less .collapse {
3558
+ display: none;
3559
+ }
3560
+ .sg-wrapper-less .collapse.in {
3561
+ display: block;
3562
+ }
3563
+ .sg-wrapper-less tr.collapse.in {
3564
+ display: table-row;
3565
+ }
3566
+ .sg-wrapper-less tbody.collapse.in {
3567
+ display: table-row-group;
3568
+ }
3569
+ .sg-wrapper-less .collapsing {
3570
+ position: relative;
3571
+ height: 0;
3572
+ overflow: hidden;
3573
+ -webkit-transition-property: height, visibility;
3574
+ -o-transition-property: height, visibility;
3575
+ transition-property: height, visibility;
3576
+ -webkit-transition-duration: 0.35s;
3577
+ -o-transition-duration: 0.35s;
3578
+ transition-duration: 0.35s;
3579
+ -webkit-transition-timing-function: ease;
3580
+ -o-transition-timing-function: ease;
3581
+ transition-timing-function: ease;
3582
+ }
3583
+ .sg-wrapper-less .caret {
3584
+ display: inline-block;
3585
+ width: 0;
3586
+ height: 0;
3587
+ margin-left: 2px;
3588
+ vertical-align: middle;
3589
+ border-top: 4px dashed;
3590
+ border-right: 4px solid transparent;
3591
+ border-left: 4px solid transparent;
3592
+ }
3593
+ .sg-wrapper-less .dropup,
3594
+ .sg-wrapper-less .dropdown {
3595
+ position: relative;
3596
+ }
3597
+ .sg-wrapper-less .dropdown-toggle:focus {
3598
+ outline: 0;
3599
+ }
3600
+ .sg-wrapper-less .dropdown-menu {
3601
+ position: absolute;
3602
+ top: 100%;
3603
+ left: 0;
3604
+ z-index: 1000;
3605
+ display: none;
3606
+ float: left;
3607
+ min-width: 160px;
3608
+ padding: 5px 0;
3609
+ margin: 2px 0 0;
3610
+ list-style: none;
3611
+ font-size: 15px;
3612
+ text-align: left;
3613
+ background-color: #ffffff;
3614
+ border: 1px solid #cccccc;
3615
+ border: 1px solid rgba(0, 0, 0, 0.15);
3616
+ border-radius: 0;
3617
+ -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
3618
+ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
3619
+ -webkit-background-clip: padding-box;
3620
+ background-clip: padding-box;
3621
+ }
3622
+ .sg-wrapper-less .dropdown-menu.pull-right {
3623
+ right: 0;
3624
+ left: auto;
3625
+ }
3626
+ .sg-wrapper-less .dropdown-menu .divider {
3627
+ height: 1px;
3628
+ margin: 9.5px 0;
3629
+ overflow: hidden;
3630
+ background-color: #e5e5e5;
3631
+ }
3632
+ .sg-wrapper-less .dropdown-menu > li > a {
3633
+ display: block;
3634
+ padding: 3px 20px;
3635
+ clear: both;
3636
+ font-weight: normal;
3637
+ line-height: 1.42857143;
3638
+ color: #333333;
3639
+ white-space: nowrap;
3640
+ }
3641
+ .sg-wrapper-less .dropdown-menu > li > a:hover,
3642
+ .sg-wrapper-less .dropdown-menu > li > a:focus {
3643
+ text-decoration: none;
3644
+ color: #ffffff;
3645
+ background-color: #2780e3;
3646
+ }
3647
+ .sg-wrapper-less .dropdown-menu > .active > a,
3648
+ .sg-wrapper-less .dropdown-menu > .active > a:hover,
3649
+ .sg-wrapper-less .dropdown-menu > .active > a:focus {
3650
+ color: #ffffff;
3651
+ text-decoration: none;
3652
+ outline: 0;
3653
+ background-color: #2780e3;
3654
+ }
3655
+ .sg-wrapper-less .dropdown-menu > .disabled > a,
3656
+ .sg-wrapper-less .dropdown-menu > .disabled > a:hover,
3657
+ .sg-wrapper-less .dropdown-menu > .disabled > a:focus {
3658
+ color: #999999;
3659
+ }
3660
+ .sg-wrapper-less .dropdown-menu > .disabled > a:hover,
3661
+ .sg-wrapper-less .dropdown-menu > .disabled > a:focus {
3662
+ text-decoration: none;
3663
+ background-color: transparent;
3664
+ background-image: none;
3665
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
3666
+ cursor: not-allowed;
3667
+ }
3668
+ .sg-wrapper-less .open > .dropdown-menu {
3669
+ display: block;
3670
+ }
3671
+ .sg-wrapper-less .open > a {
3672
+ outline: 0;
3673
+ }
3674
+ .sg-wrapper-less .dropdown-menu-right {
3675
+ left: auto;
3676
+ right: 0;
3677
+ }
3678
+ .sg-wrapper-less .dropdown-menu-left {
3679
+ left: 0;
3680
+ right: auto;
3681
+ }
3682
+ .sg-wrapper-less .dropdown-header {
3683
+ display: block;
3684
+ padding: 3px 20px;
3685
+ font-size: 13px;
3686
+ line-height: 1.42857143;
3687
+ color: #999999;
3688
+ white-space: nowrap;
3689
+ }
3690
+ .sg-wrapper-less .dropdown-backdrop {
3691
+ position: fixed;
3692
+ left: 0;
3693
+ right: 0;
3694
+ bottom: 0;
3695
+ top: 0;
3696
+ z-index: 990;
3697
+ }
3698
+ .sg-wrapper-less .pull-right > .dropdown-menu {
3699
+ right: 0;
3700
+ left: auto;
3701
+ }
3702
+ .sg-wrapper-less .dropup .caret,
3703
+ .sg-wrapper-less .navbar-fixed-bottom .dropdown .caret {
3704
+ border-top: 0;
3705
+ border-bottom: 4px solid;
3706
+ content: "";
3707
+ }
3708
+ .sg-wrapper-less .dropup .dropdown-menu,
3709
+ .sg-wrapper-less .navbar-fixed-bottom .dropdown .dropdown-menu {
3710
+ top: auto;
3711
+ bottom: 100%;
3712
+ margin-bottom: 2px;
3713
+ }
3714
+ @media (min-width: 768px) {
3715
+ .sg-wrapper-less .navbar-right .dropdown-menu {
3716
+ left: auto;
3717
+ right: 0;
3718
+ }
3719
+ .sg-wrapper-less .navbar-right .dropdown-menu-left {
3720
+ left: 0;
3721
+ right: auto;
3722
+ }
3723
+ }
3724
+ .sg-wrapper-less .btn-group,
3725
+ .sg-wrapper-less .btn-group-vertical {
3726
+ position: relative;
3727
+ display: inline-block;
3728
+ vertical-align: middle;
3729
+ }
3730
+ .sg-wrapper-less .btn-group > .btn,
3731
+ .sg-wrapper-less .btn-group-vertical > .btn {
3732
+ position: relative;
3733
+ float: left;
3734
+ }
3735
+ .sg-wrapper-less .btn-group > .btn:hover,
3736
+ .sg-wrapper-less .btn-group-vertical > .btn:hover,
3737
+ .sg-wrapper-less .btn-group > .btn:focus,
3738
+ .sg-wrapper-less .btn-group-vertical > .btn:focus,
3739
+ .sg-wrapper-less .btn-group > .btn:active,
3740
+ .sg-wrapper-less .btn-group-vertical > .btn:active,
3741
+ .sg-wrapper-less .btn-group > .btn.active,
3742
+ .sg-wrapper-less .btn-group-vertical > .btn.active {
3743
+ z-index: 2;
3744
+ }
3745
+ .sg-wrapper-less .btn-group .btn + .btn,
3746
+ .sg-wrapper-less .btn-group .btn + .btn-group,
3747
+ .sg-wrapper-less .btn-group .btn-group + .btn,
3748
+ .sg-wrapper-less .btn-group .btn-group + .btn-group {
3749
+ margin-left: -1px;
3750
+ }
3751
+ .sg-wrapper-less .btn-toolbar {
3752
+ margin-left: -5px;
3753
+ }
3754
+ .sg-wrapper-less .btn-toolbar .btn-group,
3755
+ .sg-wrapper-less .btn-toolbar .input-group {
3756
+ float: left;
3757
+ }
3758
+ .sg-wrapper-less .btn-toolbar > .btn,
3759
+ .sg-wrapper-less .btn-toolbar > .btn-group,
3760
+ .sg-wrapper-less .btn-toolbar > .input-group {
3761
+ margin-left: 5px;
3762
+ }
3763
+ .sg-wrapper-less .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
3764
+ border-radius: 0;
3765
+ }
3766
+ .sg-wrapper-less .btn-group > .btn:first-child {
3767
+ margin-left: 0;
3768
+ }
3769
+ .sg-wrapper-less .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
3770
+ border-bottom-right-radius: 0;
3771
+ border-top-right-radius: 0;
3772
+ }
3773
+ .sg-wrapper-less .btn-group > .btn:last-child:not(:first-child),
3774
+ .sg-wrapper-less .btn-group > .dropdown-toggle:not(:first-child) {
3775
+ border-bottom-left-radius: 0;
3776
+ border-top-left-radius: 0;
3777
+ }
3778
+ .sg-wrapper-less .btn-group > .btn-group {
3779
+ float: left;
3780
+ }
3781
+ .sg-wrapper-less .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
3782
+ border-radius: 0;
3783
+ }
3784
+ .sg-wrapper-less .btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
3785
+ .sg-wrapper-less .btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
3786
+ border-bottom-right-radius: 0;
3787
+ border-top-right-radius: 0;
3788
+ }
3789
+ .sg-wrapper-less .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
3790
+ border-bottom-left-radius: 0;
3791
+ border-top-left-radius: 0;
3792
+ }
3793
+ .sg-wrapper-less .btn-group .dropdown-toggle:active,
3794
+ .sg-wrapper-less .btn-group.open .dropdown-toggle {
3795
+ outline: 0;
3796
+ }
3797
+ .sg-wrapper-less .btn-group > .btn + .dropdown-toggle {
3798
+ padding-left: 8px;
3799
+ padding-right: 8px;
3800
+ }
3801
+ .sg-wrapper-less .btn-group > .btn-lg + .dropdown-toggle {
3802
+ padding-left: 12px;
3803
+ padding-right: 12px;
3804
+ }
3805
+ .sg-wrapper-less .btn-group.open .dropdown-toggle {
3806
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
3807
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
3808
+ }
3809
+ .sg-wrapper-less .btn-group.open .dropdown-toggle.btn-link {
3810
+ -webkit-box-shadow: none;
3811
+ box-shadow: none;
3812
+ }
3813
+ .sg-wrapper-less .btn .caret {
3814
+ margin-left: 0;
3815
+ }
3816
+ .sg-wrapper-less .btn-lg .caret {
3817
+ border-width: 5px 5px 0;
3818
+ border-bottom-width: 0;
3819
+ }
3820
+ .sg-wrapper-less .dropup .btn-lg .caret {
3821
+ border-width: 0 5px 5px;
3822
+ }
3823
+ .sg-wrapper-less .btn-group-vertical > .btn,
3824
+ .sg-wrapper-less .btn-group-vertical > .btn-group,
3825
+ .sg-wrapper-less .btn-group-vertical > .btn-group > .btn {
3826
+ display: block;
3827
+ float: none;
3828
+ width: 100%;
3829
+ max-width: 100%;
3830
+ }
3831
+ .sg-wrapper-less .btn-group-vertical > .btn-group > .btn {
3832
+ float: none;
3833
+ }
3834
+ .sg-wrapper-less .btn-group-vertical > .btn + .btn,
3835
+ .sg-wrapper-less .btn-group-vertical > .btn + .btn-group,
3836
+ .sg-wrapper-less .btn-group-vertical > .btn-group + .btn,
3837
+ .sg-wrapper-less .btn-group-vertical > .btn-group + .btn-group {
3838
+ margin-top: -1px;
3839
+ margin-left: 0;
3840
+ }
3841
+ .sg-wrapper-less .btn-group-vertical > .btn:not(:first-child):not(:last-child) {
3842
+ border-radius: 0;
3843
+ }
3844
+ .sg-wrapper-less .btn-group-vertical > .btn:first-child:not(:last-child) {
3845
+ border-top-right-radius: 0;
3846
+ border-bottom-right-radius: 0;
3847
+ border-bottom-left-radius: 0;
3848
+ }
3849
+ .sg-wrapper-less .btn-group-vertical > .btn:last-child:not(:first-child) {
3850
+ border-bottom-left-radius: 0;
3851
+ border-top-right-radius: 0;
3852
+ border-top-left-radius: 0;
3853
+ }
3854
+ .sg-wrapper-less .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
3855
+ border-radius: 0;
3856
+ }
3857
+ .sg-wrapper-less .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
3858
+ .sg-wrapper-less .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
3859
+ border-bottom-right-radius: 0;
3860
+ border-bottom-left-radius: 0;
3861
+ }
3862
+ .sg-wrapper-less .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
3863
+ border-top-right-radius: 0;
3864
+ border-top-left-radius: 0;
3865
+ }
3866
+ .sg-wrapper-less .btn-group-justified {
3867
+ display: table;
3868
+ width: 100%;
3869
+ table-layout: fixed;
3870
+ border-collapse: separate;
3871
+ }
3872
+ .sg-wrapper-less .btn-group-justified > .btn,
3873
+ .sg-wrapper-less .btn-group-justified > .btn-group {
3874
+ float: none;
3875
+ display: table-cell;
3876
+ width: 1%;
3877
+ }
3878
+ .sg-wrapper-less .btn-group-justified > .btn-group .btn {
3879
+ width: 100%;
3880
+ }
3881
+ .sg-wrapper-less .btn-group-justified > .btn-group .dropdown-menu {
3882
+ left: auto;
3883
+ }
3884
+ .sg-wrapper-less [data-toggle="buttons"] > .btn input[type="radio"],
3885
+ .sg-wrapper-less [data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
3886
+ .sg-wrapper-less [data-toggle="buttons"] > .btn input[type="checkbox"],
3887
+ .sg-wrapper-less [data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
3888
+ position: absolute;
3889
+ clip: rect(0, 0, 0, 0);
3890
+ pointer-events: none;
3891
+ }
3892
+ .sg-wrapper-less .input-group {
3893
+ position: relative;
3894
+ display: table;
3895
+ border-collapse: separate;
3896
+ }
3897
+ .sg-wrapper-less .input-group[class*="col-"] {
3898
+ float: none;
3899
+ padding-left: 0;
3900
+ padding-right: 0;
3901
+ }
3902
+ .sg-wrapper-less .input-group .form-control {
3903
+ position: relative;
3904
+ z-index: 2;
3905
+ float: left;
3906
+ width: 100%;
3907
+ margin-bottom: 0;
3908
+ }
3909
+ .sg-wrapper-less .input-group-lg > .form-control,
3910
+ .sg-wrapper-less .input-group-lg > .input-group-addon,
3911
+ .sg-wrapper-less .input-group-lg > .input-group-btn > .btn {
3912
+ height: 64px;
3913
+ padding: 18px 30px;
3914
+ font-size: 19px;
3915
+ line-height: 1.3333333;
3916
+ border-radius: 0;
3917
+ }
3918
+ .sg-wrapper-less select.input-group-lg > .form-control,
3919
+ .sg-wrapper-less select.input-group-lg > .input-group-addon,
3920
+ .sg-wrapper-less select.input-group-lg > .input-group-btn > .btn {
3921
+ height: 64px;
3922
+ line-height: 64px;
3923
+ }
3924
+ .sg-wrapper-less textarea.input-group-lg > .form-control,
3925
+ .sg-wrapper-less textarea.input-group-lg > .input-group-addon,
3926
+ .sg-wrapper-less textarea.input-group-lg > .input-group-btn > .btn,
3927
+ .sg-wrapper-less select[multiple].input-group-lg > .form-control,
3928
+ .sg-wrapper-less select[multiple].input-group-lg > .input-group-addon,
3929
+ .sg-wrapper-less select[multiple].input-group-lg > .input-group-btn > .btn {
3930
+ height: auto;
3931
+ }
3932
+ .sg-wrapper-less .input-group-sm > .form-control,
3933
+ .sg-wrapper-less .input-group-sm > .input-group-addon,
3934
+ .sg-wrapper-less .input-group-sm > .input-group-btn > .btn {
3935
+ height: 31px;
3936
+ padding: 5px 10px;
3937
+ font-size: 13px;
3938
+ line-height: 1.5;
3939
+ border-radius: 0;
3940
+ }
3941
+ .sg-wrapper-less select.input-group-sm > .form-control,
3942
+ .sg-wrapper-less select.input-group-sm > .input-group-addon,
3943
+ .sg-wrapper-less select.input-group-sm > .input-group-btn > .btn {
3944
+ height: 31px;
3945
+ line-height: 31px;
3946
+ }
3947
+ .sg-wrapper-less textarea.input-group-sm > .form-control,
3948
+ .sg-wrapper-less textarea.input-group-sm > .input-group-addon,
3949
+ .sg-wrapper-less textarea.input-group-sm > .input-group-btn > .btn,
3950
+ .sg-wrapper-less select[multiple].input-group-sm > .form-control,
3951
+ .sg-wrapper-less select[multiple].input-group-sm > .input-group-addon,
3952
+ .sg-wrapper-less select[multiple].input-group-sm > .input-group-btn > .btn {
3953
+ height: auto;
3954
+ }
3955
+ .sg-wrapper-less .input-group-addon,
3956
+ .sg-wrapper-less .input-group-btn,
3957
+ .sg-wrapper-less .input-group .form-control {
3958
+ display: table-cell;
3959
+ }
3960
+ .sg-wrapper-less .input-group-addon:not(:first-child):not(:last-child),
3961
+ .sg-wrapper-less .input-group-btn:not(:first-child):not(:last-child),
3962
+ .sg-wrapper-less .input-group .form-control:not(:first-child):not(:last-child) {
3963
+ border-radius: 0;
3964
+ }
3965
+ .sg-wrapper-less .input-group-addon,
3966
+ .sg-wrapper-less .input-group-btn {
3967
+ width: 1%;
3968
+ white-space: nowrap;
3969
+ vertical-align: middle;
3970
+ }
3971
+ .sg-wrapper-less .input-group-addon {
3972
+ padding: 10px 18px;
3973
+ font-size: 15px;
3974
+ font-weight: normal;
3975
+ line-height: 1;
3976
+ color: #333333;
3977
+ text-align: center;
3978
+ background-color: #e6e6e6;
3979
+ border: 1px solid #cccccc;
3980
+ border-radius: 0;
3981
+ }
3982
+ .sg-wrapper-less .input-group-addon.input-sm {
3983
+ padding: 5px 10px;
3984
+ font-size: 13px;
3985
+ border-radius: 0;
3986
+ }
3987
+ .sg-wrapper-less .input-group-addon.input-lg {
3988
+ padding: 18px 30px;
3989
+ font-size: 19px;
3990
+ border-radius: 0;
3991
+ }
3992
+ .sg-wrapper-less .input-group-addon input[type="radio"],
3993
+ .sg-wrapper-less .input-group-addon input[type="checkbox"] {
3994
+ margin-top: 0;
3995
+ }
3996
+ .sg-wrapper-less .input-group .form-control:first-child,
3997
+ .sg-wrapper-less .input-group-addon:first-child,
3998
+ .sg-wrapper-less .input-group-btn:first-child > .btn,
3999
+ .sg-wrapper-less .input-group-btn:first-child > .btn-group > .btn,
4000
+ .sg-wrapper-less .input-group-btn:first-child > .dropdown-toggle,
4001
+ .sg-wrapper-less .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
4002
+ .sg-wrapper-less .input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
4003
+ border-bottom-right-radius: 0;
4004
+ border-top-right-radius: 0;
4005
+ }
4006
+ .sg-wrapper-less .input-group-addon:first-child {
4007
+ border-right: 0;
4008
+ }
4009
+ .sg-wrapper-less .input-group .form-control:last-child,
4010
+ .sg-wrapper-less .input-group-addon:last-child,
4011
+ .sg-wrapper-less .input-group-btn:last-child > .btn,
4012
+ .sg-wrapper-less .input-group-btn:last-child > .btn-group > .btn,
4013
+ .sg-wrapper-less .input-group-btn:last-child > .dropdown-toggle,
4014
+ .sg-wrapper-less .input-group-btn:first-child > .btn:not(:first-child),
4015
+ .sg-wrapper-less .input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
4016
+ border-bottom-left-radius: 0;
4017
+ border-top-left-radius: 0;
4018
+ }
4019
+ .sg-wrapper-less .input-group-addon:last-child {
4020
+ border-left: 0;
4021
+ }
4022
+ .sg-wrapper-less .input-group-btn {
4023
+ position: relative;
4024
+ font-size: 0;
4025
+ white-space: nowrap;
4026
+ }
4027
+ .sg-wrapper-less .input-group-btn > .btn {
4028
+ position: relative;
4029
+ }
4030
+ .sg-wrapper-less .input-group-btn > .btn + .btn {
4031
+ margin-left: -1px;
4032
+ }
4033
+ .sg-wrapper-less .input-group-btn > .btn:hover,
4034
+ .sg-wrapper-less .input-group-btn > .btn:focus,
4035
+ .sg-wrapper-less .input-group-btn > .btn:active {
4036
+ z-index: 2;
4037
+ }
4038
+ .sg-wrapper-less .input-group-btn:first-child > .btn,
4039
+ .sg-wrapper-less .input-group-btn:first-child > .btn-group {
4040
+ margin-right: -1px;
4041
+ }
4042
+ .sg-wrapper-less .input-group-btn:last-child > .btn,
4043
+ .sg-wrapper-less .input-group-btn:last-child > .btn-group {
4044
+ margin-left: -1px;
4045
+ }
4046
+ .sg-wrapper-less .nav {
4047
+ margin-bottom: 0;
4048
+ padding-left: 0;
4049
+ list-style: none;
4050
+ }
4051
+ .sg-wrapper-less .nav > li {
4052
+ position: relative;
4053
+ display: block;
4054
+ }
4055
+ .sg-wrapper-less .nav > li > a {
4056
+ position: relative;
4057
+ display: block;
4058
+ padding: 10px 15px;
4059
+ }
4060
+ .sg-wrapper-less .nav > li > a:hover,
4061
+ .sg-wrapper-less .nav > li > a:focus {
4062
+ text-decoration: none;
4063
+ background-color: #e6e6e6;
4064
+ }
4065
+ .sg-wrapper-less .nav > li.disabled > a {
4066
+ color: #999999;
4067
+ }
4068
+ .sg-wrapper-less .nav > li.disabled > a:hover,
4069
+ .sg-wrapper-less .nav > li.disabled > a:focus {
4070
+ color: #999999;
4071
+ text-decoration: none;
4072
+ background-color: transparent;
4073
+ cursor: not-allowed;
4074
+ }
4075
+ .sg-wrapper-less .nav .open > a,
4076
+ .sg-wrapper-less .nav .open > a:hover,
4077
+ .sg-wrapper-less .nav .open > a:focus {
4078
+ background-color: #e6e6e6;
4079
+ border-color: #2780e3;
4080
+ }
4081
+ .sg-wrapper-less .nav .nav-divider {
4082
+ height: 1px;
4083
+ margin: 9.5px 0;
4084
+ overflow: hidden;
4085
+ background-color: #e5e5e5;
4086
+ }
4087
+ .sg-wrapper-less .nav > li > a > img {
4088
+ max-width: none;
4089
+ }
4090
+ .sg-wrapper-less .nav-tabs {
4091
+ border-bottom: 1px solid #dddddd;
4092
+ }
4093
+ .sg-wrapper-less .nav-tabs > li {
4094
+ float: left;
4095
+ margin-bottom: -1px;
4096
+ }
4097
+ .sg-wrapper-less .nav-tabs > li > a {
4098
+ margin-right: 2px;
4099
+ line-height: 1.42857143;
4100
+ border: 1px solid transparent;
4101
+ border-radius: 0 0 0 0;
4102
+ }
4103
+ .sg-wrapper-less .nav-tabs > li > a:hover {
4104
+ border-color: #e6e6e6 #e6e6e6 #dddddd;
4105
+ }
4106
+ .sg-wrapper-less .nav-tabs > li.active > a,
4107
+ .sg-wrapper-less .nav-tabs > li.active > a:hover,
4108
+ .sg-wrapper-less .nav-tabs > li.active > a:focus {
4109
+ color: #555555;
4110
+ background-color: #ffffff;
4111
+ border: 1px solid #dddddd;
4112
+ border-bottom-color: transparent;
4113
+ cursor: default;
4114
+ }
4115
+ .sg-wrapper-less .nav-tabs.nav-justified {
4116
+ width: 100%;
4117
+ border-bottom: 0;
4118
+ }
4119
+ .sg-wrapper-less .nav-tabs.nav-justified > li {
4120
+ float: none;
4121
+ }
4122
+ .sg-wrapper-less .nav-tabs.nav-justified > li > a {
4123
+ text-align: center;
4124
+ margin-bottom: 5px;
4125
+ }
4126
+ .sg-wrapper-less .nav-tabs.nav-justified > .dropdown .dropdown-menu {
4127
+ top: auto;
4128
+ left: auto;
4129
+ }
4130
+ @media (min-width: 768px) {
4131
+ .sg-wrapper-less .nav-tabs.nav-justified > li {
4132
+ display: table-cell;
4133
+ width: 1%;
4134
+ }
4135
+ .sg-wrapper-less .nav-tabs.nav-justified > li > a {
4136
+ margin-bottom: 0;
4137
+ }
4138
+ }
4139
+ .sg-wrapper-less .nav-tabs.nav-justified > li > a {
4140
+ margin-right: 0;
4141
+ border-radius: 0;
4142
+ }
4143
+ .sg-wrapper-less .nav-tabs.nav-justified > .active > a,
4144
+ .sg-wrapper-less .nav-tabs.nav-justified > .active > a:hover,
4145
+ .sg-wrapper-less .nav-tabs.nav-justified > .active > a:focus {
4146
+ border: 1px solid #dddddd;
4147
+ }
4148
+ @media (min-width: 768px) {
4149
+ .sg-wrapper-less .nav-tabs.nav-justified > li > a {
4150
+ border-bottom: 1px solid #dddddd;
4151
+ border-radius: 0 0 0 0;
4152
+ }
4153
+ .sg-wrapper-less .nav-tabs.nav-justified > .active > a,
4154
+ .sg-wrapper-less .nav-tabs.nav-justified > .active > a:hover,
4155
+ .sg-wrapper-less .nav-tabs.nav-justified > .active > a:focus {
4156
+ border-bottom-color: #ffffff;
4157
+ }
4158
+ }
4159
+ .sg-wrapper-less .nav-pills > li {
4160
+ float: left;
4161
+ }
4162
+ .sg-wrapper-less .nav-pills > li > a {
4163
+ border-radius: 0;
4164
+ }
4165
+ .sg-wrapper-less .nav-pills > li + li {
4166
+ margin-left: 2px;
4167
+ }
4168
+ .sg-wrapper-less .nav-pills > li.active > a,
4169
+ .sg-wrapper-less .nav-pills > li.active > a:hover,
4170
+ .sg-wrapper-less .nav-pills > li.active > a:focus {
4171
+ color: #ffffff;
4172
+ background-color: #2780e3;
4173
+ }
4174
+ .sg-wrapper-less .nav-stacked > li {
4175
+ float: none;
4176
+ }
4177
+ .sg-wrapper-less .nav-stacked > li + li {
4178
+ margin-top: 2px;
4179
+ margin-left: 0;
4180
+ }
4181
+ .sg-wrapper-less .nav-justified {
4182
+ width: 100%;
4183
+ }
4184
+ .sg-wrapper-less .nav-justified > li {
4185
+ float: none;
4186
+ }
4187
+ .sg-wrapper-less .nav-justified > li > a {
4188
+ text-align: center;
4189
+ margin-bottom: 5px;
4190
+ }
4191
+ .sg-wrapper-less .nav-justified > .dropdown .dropdown-menu {
4192
+ top: auto;
4193
+ left: auto;
4194
+ }
4195
+ @media (min-width: 768px) {
4196
+ .sg-wrapper-less .nav-justified > li {
4197
+ display: table-cell;
4198
+ width: 1%;
4199
+ }
4200
+ .sg-wrapper-less .nav-justified > li > a {
4201
+ margin-bottom: 0;
4202
+ }
4203
+ }
4204
+ .sg-wrapper-less .nav-tabs-justified {
4205
+ border-bottom: 0;
4206
+ }
4207
+ .sg-wrapper-less .nav-tabs-justified > li > a {
4208
+ margin-right: 0;
4209
+ border-radius: 0;
4210
+ }
4211
+ .sg-wrapper-less .nav-tabs-justified > .active > a,
4212
+ .sg-wrapper-less .nav-tabs-justified > .active > a:hover,
4213
+ .sg-wrapper-less .nav-tabs-justified > .active > a:focus {
4214
+ border: 1px solid #dddddd;
4215
+ }
4216
+ @media (min-width: 768px) {
4217
+ .sg-wrapper-less .nav-tabs-justified > li > a {
4218
+ border-bottom: 1px solid #dddddd;
4219
+ border-radius: 0 0 0 0;
4220
+ }
4221
+ .sg-wrapper-less .nav-tabs-justified > .active > a,
4222
+ .sg-wrapper-less .nav-tabs-justified > .active > a:hover,
4223
+ .sg-wrapper-less .nav-tabs-justified > .active > a:focus {
4224
+ border-bottom-color: #ffffff;
4225
+ }
4226
+ }
4227
+ .sg-wrapper-less .tab-content > .tab-pane {
4228
+ display: none;
4229
+ }
4230
+ .sg-wrapper-less .tab-content > .active {
4231
+ display: block;
4232
+ }
4233
+ .sg-wrapper-less .nav-tabs .dropdown-menu {
4234
+ margin-top: -1px;
4235
+ border-top-right-radius: 0;
4236
+ border-top-left-radius: 0;
4237
+ }
4238
+ .sg-wrapper-less .navbar {
4239
+ position: relative;
4240
+ min-height: 50px;
4241
+ margin-bottom: 21px;
4242
+ border: 1px solid transparent;
4243
+ }
4244
+ @media (min-width: 768px) {
4245
+ .sg-wrapper-less .navbar {
4246
+ border-radius: 0;
4247
+ }
4248
+ }
4249
+ @media (min-width: 768px) {
4250
+ .sg-wrapper-less .navbar-header {
4251
+ float: left;
4252
+ }
4253
+ }
4254
+ .sg-wrapper-less .navbar-collapse {
4255
+ overflow-x: visible;
4256
+ padding-right: 15px;
4257
+ padding-left: 15px;
4258
+ border-top: 1px solid transparent;
4259
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
4260
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
4261
+ -webkit-overflow-scrolling: touch;
4262
+ }
4263
+ .sg-wrapper-less .navbar-collapse.in {
4264
+ overflow-y: auto;
4265
+ }
4266
+ @media (min-width: 768px) {
4267
+ .sg-wrapper-less .navbar-collapse {
4268
+ width: auto;
4269
+ border-top: 0;
4270
+ -webkit-box-shadow: none;
4271
+ box-shadow: none;
4272
+ }
4273
+ .sg-wrapper-less .navbar-collapse.collapse {
4274
+ display: block !important;
4275
+ height: auto !important;
4276
+ padding-bottom: 0;
4277
+ overflow: visible !important;
4278
+ }
4279
+ .sg-wrapper-less .navbar-collapse.in {
4280
+ overflow-y: visible;
4281
+ }
4282
+ .sg-wrapper-less .navbar-fixed-top .navbar-collapse,
4283
+ .sg-wrapper-less .navbar-static-top .navbar-collapse,
4284
+ .sg-wrapper-less .navbar-fixed-bottom .navbar-collapse {
4285
+ padding-left: 0;
4286
+ padding-right: 0;
4287
+ }
4288
+ }
4289
+ .sg-wrapper-less .navbar-fixed-top .navbar-collapse,
4290
+ .sg-wrapper-less .navbar-fixed-bottom .navbar-collapse {
4291
+ max-height: 340px;
4292
+ }
4293
+ @media (max-device-width: 480px) and (orientation: landscape) {
4294
+ .sg-wrapper-less .navbar-fixed-top .navbar-collapse,
4295
+ .sg-wrapper-less .navbar-fixed-bottom .navbar-collapse {
4296
+ max-height: 200px;
4297
+ }
4298
+ }
4299
+ .sg-wrapper-less .container > .navbar-header,
4300
+ .sg-wrapper-less .container-fluid > .navbar-header,
4301
+ .sg-wrapper-less .container > .navbar-collapse,
4302
+ .sg-wrapper-less .container-fluid > .navbar-collapse {
4303
+ margin-right: -15px;
4304
+ margin-left: -15px;
4305
+ }
4306
+ @media (min-width: 768px) {
4307
+ .sg-wrapper-less .container > .navbar-header,
4308
+ .sg-wrapper-less .container-fluid > .navbar-header,
4309
+ .sg-wrapper-less .container > .navbar-collapse,
4310
+ .sg-wrapper-less .container-fluid > .navbar-collapse {
4311
+ margin-right: 0;
4312
+ margin-left: 0;
4313
+ }
4314
+ }
4315
+ .sg-wrapper-less .navbar-static-top {
4316
+ z-index: 1000;
4317
+ border-width: 0 0 1px;
4318
+ }
4319
+ @media (min-width: 768px) {
4320
+ .sg-wrapper-less .navbar-static-top {
4321
+ border-radius: 0;
4322
+ }
4323
+ }
4324
+ .sg-wrapper-less .navbar-fixed-top,
4325
+ .sg-wrapper-less .navbar-fixed-bottom {
4326
+ position: fixed;
4327
+ right: 0;
4328
+ left: 0;
4329
+ z-index: 1030;
4330
+ }
4331
+ @media (min-width: 768px) {
4332
+ .sg-wrapper-less .navbar-fixed-top,
4333
+ .sg-wrapper-less .navbar-fixed-bottom {
4334
+ border-radius: 0;
4335
+ }
4336
+ }
4337
+ .sg-wrapper-less .navbar-fixed-top {
4338
+ top: 0;
4339
+ border-width: 0 0 1px;
4340
+ }
4341
+ .sg-wrapper-less .navbar-fixed-bottom {
4342
+ bottom: 0;
4343
+ margin-bottom: 0;
4344
+ border-width: 1px 0 0;
4345
+ }
4346
+ .sg-wrapper-less .navbar-brand {
4347
+ float: left;
4348
+ padding: 14.5px 15px;
4349
+ font-size: 19px;
4350
+ line-height: 21px;
4351
+ height: 50px;
4352
+ }
4353
+ .sg-wrapper-less .navbar-brand:hover,
4354
+ .sg-wrapper-less .navbar-brand:focus {
4355
+ text-decoration: none;
4356
+ }
4357
+ .sg-wrapper-less .navbar-brand > img {
4358
+ display: block;
4359
+ }
4360
+ @media (min-width: 768px) {
4361
+ .sg-wrapper-less .navbar > .container .navbar-brand,
4362
+ .sg-wrapper-less .navbar > .container-fluid .navbar-brand {
4363
+ margin-left: -15px;
4364
+ }
4365
+ }
4366
+ .sg-wrapper-less .navbar-toggle {
4367
+ position: relative;
4368
+ float: right;
4369
+ margin-right: 15px;
4370
+ padding: 9px 10px;
4371
+ margin-top: 8px;
4372
+ margin-bottom: 8px;
4373
+ background-color: transparent;
4374
+ background-image: none;
4375
+ border: 1px solid transparent;
4376
+ border-radius: 0;
4377
+ }
4378
+ .sg-wrapper-less .navbar-toggle:focus {
4379
+ outline: 0;
4380
+ }
4381
+ .sg-wrapper-less .navbar-toggle .icon-bar {
4382
+ display: block;
4383
+ width: 22px;
4384
+ height: 2px;
4385
+ border-radius: 1px;
4386
+ }
4387
+ .sg-wrapper-less .navbar-toggle .icon-bar + .icon-bar {
4388
+ margin-top: 4px;
4389
+ }
4390
+ @media (min-width: 768px) {
4391
+ .sg-wrapper-less .navbar-toggle {
4392
+ display: none;
4393
+ }
4394
+ }
4395
+ .sg-wrapper-less .navbar-nav {
4396
+ margin: 7.25px -15px;
4397
+ }
4398
+ .sg-wrapper-less .navbar-nav > li > a {
4399
+ padding-top: 10px;
4400
+ padding-bottom: 10px;
4401
+ line-height: 21px;
4402
+ }
4403
+ @media (max-width: 767px) {
4404
+ .sg-wrapper-less .navbar-nav .open .dropdown-menu {
4405
+ position: static;
4406
+ float: none;
4407
+ width: auto;
4408
+ margin-top: 0;
4409
+ background-color: transparent;
4410
+ border: 0;
4411
+ -webkit-box-shadow: none;
4412
+ box-shadow: none;
4413
+ }
4414
+ .sg-wrapper-less .navbar-nav .open .dropdown-menu > li > a,
4415
+ .sg-wrapper-less .navbar-nav .open .dropdown-menu .dropdown-header {
4416
+ padding: 5px 15px 5px 25px;
4417
+ }
4418
+ .sg-wrapper-less .navbar-nav .open .dropdown-menu > li > a {
4419
+ line-height: 21px;
4420
+ }
4421
+ .sg-wrapper-less .navbar-nav .open .dropdown-menu > li > a:hover,
4422
+ .sg-wrapper-less .navbar-nav .open .dropdown-menu > li > a:focus {
4423
+ background-image: none;
4424
+ }
4425
+ }
4426
+ @media (min-width: 768px) {
4427
+ .sg-wrapper-less .navbar-nav {
4428
+ float: left;
4429
+ margin: 0;
4430
+ }
4431
+ .sg-wrapper-less .navbar-nav > li {
4432
+ float: left;
4433
+ }
4434
+ .sg-wrapper-less .navbar-nav > li > a {
4435
+ padding-top: 14.5px;
4436
+ padding-bottom: 14.5px;
4437
+ }
4438
+ }
4439
+ .sg-wrapper-less .navbar-form {
4440
+ margin-left: -15px;
4441
+ margin-right: -15px;
4442
+ padding: 10px 15px;
4443
+ border-top: 1px solid transparent;
4444
+ border-bottom: 1px solid transparent;
4445
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
4446
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
4447
+ margin-top: 3.5px;
4448
+ margin-bottom: 3.5px;
4449
+ }
4450
+ @media (min-width: 768px) {
4451
+ .sg-wrapper-less .navbar-form .form-group {
4452
+ display: inline-block;
4453
+ margin-bottom: 0;
4454
+ vertical-align: middle;
4455
+ }
4456
+ .sg-wrapper-less .navbar-form .form-control {
4457
+ display: inline-block;
4458
+ width: auto;
4459
+ vertical-align: middle;
4460
+ }
4461
+ .sg-wrapper-less .navbar-form .form-control-static {
4462
+ display: inline-block;
4463
+ }
4464
+ .sg-wrapper-less .navbar-form .input-group {
4465
+ display: inline-table;
4466
+ vertical-align: middle;
4467
+ }
4468
+ .sg-wrapper-less .navbar-form .input-group .input-group-addon,
4469
+ .sg-wrapper-less .navbar-form .input-group .input-group-btn,
4470
+ .sg-wrapper-less .navbar-form .input-group .form-control {
4471
+ width: auto;
4472
+ }
4473
+ .sg-wrapper-less .navbar-form .input-group > .form-control {
4474
+ width: 100%;
4475
+ }
4476
+ .sg-wrapper-less .navbar-form .control-label {
4477
+ margin-bottom: 0;
4478
+ vertical-align: middle;
4479
+ }
4480
+ .sg-wrapper-less .navbar-form .radio,
4481
+ .sg-wrapper-less .navbar-form .checkbox {
4482
+ display: inline-block;
4483
+ margin-top: 0;
4484
+ margin-bottom: 0;
4485
+ vertical-align: middle;
4486
+ }
4487
+ .sg-wrapper-less .navbar-form .radio label,
4488
+ .sg-wrapper-less .navbar-form .checkbox label {
4489
+ padding-left: 0;
4490
+ }
4491
+ .sg-wrapper-less .navbar-form .radio input[type="radio"],
4492
+ .sg-wrapper-less .navbar-form .checkbox input[type="checkbox"] {
4493
+ position: relative;
4494
+ margin-left: 0;
4495
+ }
4496
+ .sg-wrapper-less .navbar-form .has-feedback .form-control-feedback {
4497
+ top: 0;
4498
+ }
4499
+ }
4500
+ @media (max-width: 767px) {
4501
+ .sg-wrapper-less .navbar-form .form-group {
4502
+ margin-bottom: 5px;
4503
+ }
4504
+ .sg-wrapper-less .navbar-form .form-group:last-child {
4505
+ margin-bottom: 0;
4506
+ }
4507
+ }
4508
+ @media (min-width: 768px) {
4509
+ .sg-wrapper-less .navbar-form {
4510
+ width: auto;
4511
+ border: 0;
4512
+ margin-left: 0;
4513
+ margin-right: 0;
4514
+ padding-top: 0;
4515
+ padding-bottom: 0;
4516
+ -webkit-box-shadow: none;
4517
+ box-shadow: none;
4518
+ }
4519
+ }
4520
+ .sg-wrapper-less .navbar-nav > li > .dropdown-menu {
4521
+ margin-top: 0;
4522
+ border-top-right-radius: 0;
4523
+ border-top-left-radius: 0;
4524
+ }
4525
+ .sg-wrapper-less .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
4526
+ margin-bottom: 0;
4527
+ border-top-right-radius: 0;
4528
+ border-top-left-radius: 0;
4529
+ border-bottom-right-radius: 0;
4530
+ border-bottom-left-radius: 0;
4531
+ }
4532
+ .sg-wrapper-less .navbar-btn {
4533
+ margin-top: 3.5px;
4534
+ margin-bottom: 3.5px;
4535
+ }
4536
+ .sg-wrapper-less .navbar-btn.btn-sm {
4537
+ margin-top: 9.5px;
4538
+ margin-bottom: 9.5px;
4539
+ }
4540
+ .sg-wrapper-less .navbar-btn.btn-xs {
4541
+ margin-top: 14px;
4542
+ margin-bottom: 14px;
4543
+ }
4544
+ .sg-wrapper-less .navbar-text {
4545
+ margin-top: 14.5px;
4546
+ margin-bottom: 14.5px;
4547
+ }
4548
+ @media (min-width: 768px) {
4549
+ .sg-wrapper-less .navbar-text {
4550
+ float: left;
4551
+ margin-left: 15px;
4552
+ margin-right: 15px;
4553
+ }
4554
+ }
4555
+ @media (min-width: 768px) {
4556
+ .sg-wrapper-less .navbar-left {
4557
+ float: left !important;
4558
+ }
4559
+ .sg-wrapper-less .navbar-right {
4560
+ float: right !important;
4561
+ margin-right: -15px;
4562
+ }
4563
+ .sg-wrapper-less .navbar-right ~ .navbar-right {
4564
+ margin-right: 0;
4565
+ }
4566
+ }
4567
+ .sg-wrapper-less .navbar-default {
4568
+ background-color: #222222;
4569
+ border-color: #121212;
4570
+ }
4571
+ .sg-wrapper-less .navbar-default .navbar-brand {
4572
+ color: #ffffff;
4573
+ }
4574
+ .sg-wrapper-less .navbar-default .navbar-brand:hover,
4575
+ .sg-wrapper-less .navbar-default .navbar-brand:focus {
4576
+ color: #ffffff;
4577
+ background-color: none;
4578
+ }
4579
+ .sg-wrapper-less .navbar-default .navbar-text {
4580
+ color: #ffffff;
4581
+ }
4582
+ .sg-wrapper-less .navbar-default .navbar-nav > li > a {
4583
+ color: #ffffff;
4584
+ }
4585
+ .sg-wrapper-less .navbar-default .navbar-nav > li > a:hover,
4586
+ .sg-wrapper-less .navbar-default .navbar-nav > li > a:focus {
4587
+ color: #ffffff;
4588
+ background-color: #090909;
4589
+ }
4590
+ .sg-wrapper-less .navbar-default .navbar-nav > .active > a,
4591
+ .sg-wrapper-less .navbar-default .navbar-nav > .active > a:hover,
4592
+ .sg-wrapper-less .navbar-default .navbar-nav > .active > a:focus {
4593
+ color: #ffffff;
4594
+ background-color: #090909;
4595
+ }
4596
+ .sg-wrapper-less .navbar-default .navbar-nav > .disabled > a,
4597
+ .sg-wrapper-less .navbar-default .navbar-nav > .disabled > a:hover,
4598
+ .sg-wrapper-less .navbar-default .navbar-nav > .disabled > a:focus {
4599
+ color: #cccccc;
4600
+ background-color: transparent;
4601
+ }
4602
+ .sg-wrapper-less .navbar-default .navbar-toggle {
4603
+ border-color: transparent;
4604
+ }
4605
+ .sg-wrapper-less .navbar-default .navbar-toggle:hover,
4606
+ .sg-wrapper-less .navbar-default .navbar-toggle:focus {
4607
+ background-color: #090909;
4608
+ }
4609
+ .sg-wrapper-less .navbar-default .navbar-toggle .icon-bar {
4610
+ background-color: #ffffff;
4611
+ }
4612
+ .sg-wrapper-less .navbar-default .navbar-collapse,
4613
+ .sg-wrapper-less .navbar-default .navbar-form {
4614
+ border-color: #121212;
4615
+ }
4616
+ .sg-wrapper-less .navbar-default .navbar-nav > .open > a,
4617
+ .sg-wrapper-less .navbar-default .navbar-nav > .open > a:hover,
4618
+ .sg-wrapper-less .navbar-default .navbar-nav > .open > a:focus {
4619
+ background-color: #090909;
4620
+ color: #ffffff;
4621
+ }
4622
+ @media (max-width: 767px) {
4623
+ .sg-wrapper-less .navbar-default .navbar-nav .open .dropdown-menu > li > a {
4624
+ color: #ffffff;
4625
+ }
4626
+ .sg-wrapper-less .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
4627
+ .sg-wrapper-less .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
4628
+ color: #ffffff;
4629
+ background-color: #090909;
4630
+ }
4631
+ .sg-wrapper-less .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
4632
+ .sg-wrapper-less .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
4633
+ .sg-wrapper-less .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
4634
+ color: #ffffff;
4635
+ background-color: #090909;
4636
+ }
4637
+ .sg-wrapper-less .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
4638
+ .sg-wrapper-less .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
4639
+ .sg-wrapper-less .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
4640
+ color: #cccccc;
4641
+ background-color: transparent;
4642
+ }
4643
+ }
4644
+ .sg-wrapper-less .navbar-default .navbar-link {
4645
+ color: #ffffff;
4646
+ }
4647
+ .sg-wrapper-less .navbar-default .navbar-link:hover {
4648
+ color: #ffffff;
4649
+ }
4650
+ .sg-wrapper-less .navbar-default .btn-link {
4651
+ color: #ffffff;
4652
+ }
4653
+ .sg-wrapper-less .navbar-default .btn-link:hover,
4654
+ .sg-wrapper-less .navbar-default .btn-link:focus {
4655
+ color: #ffffff;
4656
+ }
4657
+ .sg-wrapper-less .navbar-default .btn-link[disabled]:hover,
4658
+ .sg-wrapper-less fieldset[disabled] .navbar-default .btn-link:hover,
4659
+ .sg-wrapper-less .navbar-default .btn-link[disabled]:focus,
4660
+ .sg-wrapper-less fieldset[disabled] .navbar-default .btn-link:focus {
4661
+ color: #cccccc;
4662
+ }
4663
+ .sg-wrapper-less .navbar-inverse {
4664
+ background-color: #2780e3;
4665
+ border-color: #1967be;
4666
+ }
4667
+ .sg-wrapper-less .navbar-inverse .navbar-brand {
4668
+ color: #ffffff;
4669
+ }
4670
+ .sg-wrapper-less .navbar-inverse .navbar-brand:hover,
4671
+ .sg-wrapper-less .navbar-inverse .navbar-brand:focus {
4672
+ color: #ffffff;
4673
+ background-color: none;
4674
+ }
4675
+ .sg-wrapper-less .navbar-inverse .navbar-text {
4676
+ color: #ffffff;
4677
+ }
4678
+ .sg-wrapper-less .navbar-inverse .navbar-nav > li > a {
4679
+ color: #ffffff;
4680
+ }
4681
+ .sg-wrapper-less .navbar-inverse .navbar-nav > li > a:hover,
4682
+ .sg-wrapper-less .navbar-inverse .navbar-nav > li > a:focus {
4683
+ color: #ffffff;
4684
+ background-color: #1967be;
4685
+ }
4686
+ .sg-wrapper-less .navbar-inverse .navbar-nav > .active > a,
4687
+ .sg-wrapper-less .navbar-inverse .navbar-nav > .active > a:hover,
4688
+ .sg-wrapper-less .navbar-inverse .navbar-nav > .active > a:focus {
4689
+ color: #ffffff;
4690
+ background-color: #1967be;
4691
+ }
4692
+ .sg-wrapper-less .navbar-inverse .navbar-nav > .disabled > a,
4693
+ .sg-wrapper-less .navbar-inverse .navbar-nav > .disabled > a:hover,
4694
+ .sg-wrapper-less .navbar-inverse .navbar-nav > .disabled > a:focus {
4695
+ color: #ffffff;
4696
+ background-color: transparent;
4697
+ }
4698
+ .sg-wrapper-less .navbar-inverse .navbar-toggle {
4699
+ border-color: transparent;
4700
+ }
4701
+ .sg-wrapper-less .navbar-inverse .navbar-toggle:hover,
4702
+ .sg-wrapper-less .navbar-inverse .navbar-toggle:focus {
4703
+ background-color: #1967be;
4704
+ }
4705
+ .sg-wrapper-less .navbar-inverse .navbar-toggle .icon-bar {
4706
+ background-color: #ffffff;
4707
+ }
4708
+ .sg-wrapper-less .navbar-inverse .navbar-collapse,
4709
+ .sg-wrapper-less .navbar-inverse .navbar-form {
4710
+ border-color: #1a6ecc;
4711
+ }
4712
+ .sg-wrapper-less .navbar-inverse .navbar-nav > .open > a,
4713
+ .sg-wrapper-less .navbar-inverse .navbar-nav > .open > a:hover,
4714
+ .sg-wrapper-less .navbar-inverse .navbar-nav > .open > a:focus {
4715
+ background-color: #1967be;
4716
+ color: #ffffff;
4717
+ }
4718
+ @media (max-width: 767px) {
4719
+ .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
4720
+ border-color: #1967be;
4721
+ }
4722
+ .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
4723
+ background-color: #1967be;
4724
+ }
4725
+ .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
4726
+ color: #ffffff;
4727
+ }
4728
+ .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
4729
+ .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
4730
+ color: #ffffff;
4731
+ background-color: #1967be;
4732
+ }
4733
+ .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
4734
+ .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
4735
+ .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
4736
+ color: #ffffff;
4737
+ background-color: #1967be;
4738
+ }
4739
+ .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
4740
+ .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
4741
+ .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
4742
+ color: #ffffff;
4743
+ background-color: transparent;
4744
+ }
4745
+ }
4746
+ .sg-wrapper-less .navbar-inverse .navbar-link {
4747
+ color: #ffffff;
4748
+ }
4749
+ .sg-wrapper-less .navbar-inverse .navbar-link:hover {
4750
+ color: #ffffff;
4751
+ }
4752
+ .sg-wrapper-less .navbar-inverse .btn-link {
4753
+ color: #ffffff;
4754
+ }
4755
+ .sg-wrapper-less .navbar-inverse .btn-link:hover,
4756
+ .sg-wrapper-less .navbar-inverse .btn-link:focus {
4757
+ color: #ffffff;
4758
+ }
4759
+ .sg-wrapper-less .navbar-inverse .btn-link[disabled]:hover,
4760
+ .sg-wrapper-less fieldset[disabled] .navbar-inverse .btn-link:hover,
4761
+ .sg-wrapper-less .navbar-inverse .btn-link[disabled]:focus,
4762
+ .sg-wrapper-less fieldset[disabled] .navbar-inverse .btn-link:focus {
4763
+ color: #ffffff;
4764
+ }
4765
+ .sg-wrapper-less .breadcrumb {
4766
+ padding: 8px 15px;
4767
+ margin-bottom: 21px;
4768
+ list-style: none;
4769
+ background-color: #f5f5f5;
4770
+ border-radius: 0;
4771
+ }
4772
+ .sg-wrapper-less .breadcrumb > li {
4773
+ display: inline-block;
4774
+ }
4775
+ .sg-wrapper-less .breadcrumb > li + li:before {
4776
+ content: "/\00a0";
4777
+ padding: 0 5px;
4778
+ color: #cccccc;
4779
+ }
4780
+ .sg-wrapper-less .breadcrumb > .active {
4781
+ color: #999999;
4782
+ }
4783
+ .sg-wrapper-less .pagination {
4784
+ display: inline-block;
4785
+ padding-left: 0;
4786
+ margin: 21px 0;
4787
+ border-radius: 0;
4788
+ }
4789
+ .sg-wrapper-less .pagination > li {
4790
+ display: inline;
4791
+ }
4792
+ .sg-wrapper-less .pagination > li > a,
4793
+ .sg-wrapper-less .pagination > li > span {
4794
+ position: relative;
4795
+ float: left;
4796
+ padding: 10px 18px;
4797
+ line-height: 1.42857143;
4798
+ text-decoration: none;
4799
+ color: #2780e3;
4800
+ background-color: #ffffff;
4801
+ border: 1px solid #dddddd;
4802
+ margin-left: -1px;
4803
+ }
4804
+ .sg-wrapper-less .pagination > li:first-child > a,
4805
+ .sg-wrapper-less .pagination > li:first-child > span {
4806
+ margin-left: 0;
4807
+ border-bottom-left-radius: 0;
4808
+ border-top-left-radius: 0;
4809
+ }
4810
+ .sg-wrapper-less .pagination > li:last-child > a,
4811
+ .sg-wrapper-less .pagination > li:last-child > span {
4812
+ border-bottom-right-radius: 0;
4813
+ border-top-right-radius: 0;
4814
+ }
4815
+ .sg-wrapper-less .pagination > li > a:hover,
4816
+ .sg-wrapper-less .pagination > li > span:hover,
4817
+ .sg-wrapper-less .pagination > li > a:focus,
4818
+ .sg-wrapper-less .pagination > li > span:focus {
4819
+ color: #165ba8;
4820
+ background-color: #e6e6e6;
4821
+ border-color: #dddddd;
4822
+ }
4823
+ .sg-wrapper-less .pagination > .active > a,
4824
+ .sg-wrapper-less .pagination > .active > span,
4825
+ .sg-wrapper-less .pagination > .active > a:hover,
4826
+ .sg-wrapper-less .pagination > .active > span:hover,
4827
+ .sg-wrapper-less .pagination > .active > a:focus,
4828
+ .sg-wrapper-less .pagination > .active > span:focus {
4829
+ z-index: 2;
4830
+ color: #999999;
4831
+ background-color: #f5f5f5;
4832
+ border-color: #dddddd;
4833
+ cursor: default;
4834
+ }
4835
+ .sg-wrapper-less .pagination > .disabled > span,
4836
+ .sg-wrapper-less .pagination > .disabled > span:hover,
4837
+ .sg-wrapper-less .pagination > .disabled > span:focus,
4838
+ .sg-wrapper-less .pagination > .disabled > a,
4839
+ .sg-wrapper-less .pagination > .disabled > a:hover,
4840
+ .sg-wrapper-less .pagination > .disabled > a:focus {
4841
+ color: #999999;
4842
+ background-color: #ffffff;
4843
+ border-color: #dddddd;
4844
+ cursor: not-allowed;
4845
+ }
4846
+ .sg-wrapper-less .pagination-lg > li > a,
4847
+ .sg-wrapper-less .pagination-lg > li > span {
4848
+ padding: 18px 30px;
4849
+ font-size: 19px;
4850
+ }
4851
+ .sg-wrapper-less .pagination-lg > li:first-child > a,
4852
+ .sg-wrapper-less .pagination-lg > li:first-child > span {
4853
+ border-bottom-left-radius: 0;
4854
+ border-top-left-radius: 0;
4855
+ }
4856
+ .sg-wrapper-less .pagination-lg > li:last-child > a,
4857
+ .sg-wrapper-less .pagination-lg > li:last-child > span {
4858
+ border-bottom-right-radius: 0;
4859
+ border-top-right-radius: 0;
4860
+ }
4861
+ .sg-wrapper-less .pagination-sm > li > a,
4862
+ .sg-wrapper-less .pagination-sm > li > span {
4863
+ padding: 5px 10px;
4864
+ font-size: 13px;
4865
+ }
4866
+ .sg-wrapper-less .pagination-sm > li:first-child > a,
4867
+ .sg-wrapper-less .pagination-sm > li:first-child > span {
4868
+ border-bottom-left-radius: 0;
4869
+ border-top-left-radius: 0;
4870
+ }
4871
+ .sg-wrapper-less .pagination-sm > li:last-child > a,
4872
+ .sg-wrapper-less .pagination-sm > li:last-child > span {
4873
+ border-bottom-right-radius: 0;
4874
+ border-top-right-radius: 0;
4875
+ }
4876
+ .sg-wrapper-less .pager {
4877
+ padding-left: 0;
4878
+ margin: 21px 0;
4879
+ list-style: none;
4880
+ text-align: center;
4881
+ }
4882
+ .sg-wrapper-less .pager li {
4883
+ display: inline;
4884
+ }
4885
+ .sg-wrapper-less .pager li > a,
4886
+ .sg-wrapper-less .pager li > span {
4887
+ display: inline-block;
4888
+ padding: 5px 14px;
4889
+ background-color: #ffffff;
4890
+ border: 1px solid #dddddd;
4891
+ border-radius: 0;
4892
+ }
4893
+ .sg-wrapper-less .pager li > a:hover,
4894
+ .sg-wrapper-less .pager li > a:focus {
4895
+ text-decoration: none;
4896
+ background-color: #e6e6e6;
4897
+ }
4898
+ .sg-wrapper-less .pager .next > a,
4899
+ .sg-wrapper-less .pager .next > span {
4900
+ float: right;
4901
+ }
4902
+ .sg-wrapper-less .pager .previous > a,
4903
+ .sg-wrapper-less .pager .previous > span {
4904
+ float: left;
4905
+ }
4906
+ .sg-wrapper-less .pager .disabled > a,
4907
+ .sg-wrapper-less .pager .disabled > a:hover,
4908
+ .sg-wrapper-less .pager .disabled > a:focus,
4909
+ .sg-wrapper-less .pager .disabled > span {
4910
+ color: #999999;
4911
+ background-color: #ffffff;
4912
+ cursor: not-allowed;
4913
+ }
4914
+ .sg-wrapper-less .label {
4915
+ display: inline;
4916
+ padding: .2em .6em .3em;
4917
+ font-size: 75%;
4918
+ font-weight: bold;
4919
+ line-height: 1;
4920
+ color: #ffffff;
4921
+ text-align: center;
4922
+ white-space: nowrap;
4923
+ vertical-align: baseline;
4924
+ border-radius: .25em;
4925
+ }
4926
+ .sg-wrapper-less a.label:hover,
4927
+ .sg-wrapper-less a.label:focus {
4928
+ color: #ffffff;
4929
+ text-decoration: none;
4930
+ cursor: pointer;
4931
+ }
4932
+ .sg-wrapper-less .label:empty {
4933
+ display: none;
4934
+ }
4935
+ .sg-wrapper-less .btn .label {
4936
+ position: relative;
4937
+ top: -1px;
4938
+ }
4939
+ .sg-wrapper-less .label-default {
4940
+ background-color: #222222;
4941
+ }
4942
+ .sg-wrapper-less .label-default[href]:hover,
4943
+ .sg-wrapper-less .label-default[href]:focus {
4944
+ background-color: #090909;
4945
+ }
4946
+ .sg-wrapper-less .label-primary {
4947
+ background-color: #2780e3;
4948
+ }
4949
+ .sg-wrapper-less .label-primary[href]:hover,
4950
+ .sg-wrapper-less .label-primary[href]:focus {
4951
+ background-color: #1967be;
4952
+ }
4953
+ .sg-wrapper-less .label-success {
4954
+ background-color: #3fb618;
4955
+ }
4956
+ .sg-wrapper-less .label-success[href]:hover,
4957
+ .sg-wrapper-less .label-success[href]:focus {
4958
+ background-color: #2f8912;
4959
+ }
4960
+ .sg-wrapper-less .label-info {
4961
+ background-color: #9954bb;
4962
+ }
4963
+ .sg-wrapper-less .label-info[href]:hover,
4964
+ .sg-wrapper-less .label-info[href]:focus {
4965
+ background-color: #7e3f9d;
4966
+ }
4967
+ .sg-wrapper-less .label-warning {
4968
+ background-color: #ff7518;
4969
+ }
4970
+ .sg-wrapper-less .label-warning[href]:hover,
4971
+ .sg-wrapper-less .label-warning[href]:focus {
4972
+ background-color: #e45c00;
4973
+ }
4974
+ .sg-wrapper-less .label-danger {
4975
+ background-color: #ff0039;
4976
+ }
4977
+ .sg-wrapper-less .label-danger[href]:hover,
4978
+ .sg-wrapper-less .label-danger[href]:focus {
4979
+ background-color: #cc002e;
4980
+ }
4981
+ .sg-wrapper-less .badge {
4982
+ display: inline-block;
4983
+ min-width: 10px;
4984
+ padding: 3px 7px;
4985
+ font-size: 13px;
4986
+ font-weight: bold;
4987
+ color: #ffffff;
4988
+ line-height: 1;
4989
+ vertical-align: baseline;
4990
+ white-space: nowrap;
4991
+ text-align: center;
4992
+ background-color: #2780e3;
4993
+ border-radius: 10px;
4994
+ }
4995
+ .sg-wrapper-less .badge:empty {
4996
+ display: none;
4997
+ }
4998
+ .sg-wrapper-less .btn .badge {
4999
+ position: relative;
5000
+ top: -1px;
5001
+ }
5002
+ .sg-wrapper-less .btn-xs .badge,
5003
+ .sg-wrapper-less .btn-group-xs > .btn .badge {
5004
+ top: 0;
5005
+ padding: 1px 5px;
5006
+ }
5007
+ .sg-wrapper-less a.badge:hover,
5008
+ .sg-wrapper-less a.badge:focus {
5009
+ color: #ffffff;
5010
+ text-decoration: none;
5011
+ cursor: pointer;
5012
+ }
5013
+ .sg-wrapper-less .list-group-item.active > .badge,
5014
+ .sg-wrapper-less .nav-pills > .active > a > .badge {
5015
+ color: #2780e3;
5016
+ background-color: #ffffff;
5017
+ }
5018
+ .sg-wrapper-less .list-group-item > .badge {
5019
+ float: right;
5020
+ }
5021
+ .sg-wrapper-less .list-group-item > .badge + .badge {
5022
+ margin-right: 5px;
5023
+ }
5024
+ .sg-wrapper-less .nav-pills > li > a > .badge {
5025
+ margin-left: 3px;
5026
+ }
5027
+ .sg-wrapper-less .jumbotron {
5028
+ padding: 30px 15px;
5029
+ margin-bottom: 30px;
5030
+ color: inherit;
5031
+ background-color: #e6e6e6;
5032
+ }
5033
+ .sg-wrapper-less .jumbotron h1,
5034
+ .sg-wrapper-less .jumbotron .h1 {
5035
+ color: inherit;
5036
+ }
5037
+ .sg-wrapper-less .jumbotron p {
5038
+ margin-bottom: 15px;
5039
+ font-size: 23px;
5040
+ font-weight: 200;
5041
+ }
5042
+ .sg-wrapper-less .jumbotron > hr {
5043
+ border-top-color: #cccccc;
5044
+ }
5045
+ .sg-wrapper-less .container .jumbotron,
5046
+ .sg-wrapper-less .container-fluid .jumbotron {
5047
+ border-radius: 0;
5048
+ }
5049
+ .sg-wrapper-less .jumbotron .container {
5050
+ max-width: 100%;
5051
+ }
5052
+ @media screen and (min-width: 768px) {
5053
+ .sg-wrapper-less .jumbotron {
5054
+ padding: 48px 0;
5055
+ }
5056
+ .sg-wrapper-less .container .jumbotron,
5057
+ .sg-wrapper-less .container-fluid .jumbotron {
5058
+ padding-left: 60px;
5059
+ padding-right: 60px;
5060
+ }
5061
+ .sg-wrapper-less .jumbotron h1,
5062
+ .sg-wrapper-less .jumbotron .h1 {
5063
+ font-size: 67.5px;
5064
+ }
5065
+ }
5066
+ .sg-wrapper-less .thumbnail {
5067
+ display: block;
5068
+ padding: 4px;
5069
+ margin-bottom: 21px;
5070
+ line-height: 1.42857143;
5071
+ background-color: #ffffff;
5072
+ border: 1px solid #dddddd;
5073
+ border-radius: 0;
5074
+ -webkit-transition: border 0.2s ease-in-out;
5075
+ -o-transition: border 0.2s ease-in-out;
5076
+ transition: border 0.2s ease-in-out;
5077
+ }
5078
+ .sg-wrapper-less .thumbnail > img,
5079
+ .sg-wrapper-less .thumbnail a > img {
5080
+ margin-left: auto;
5081
+ margin-right: auto;
5082
+ }
5083
+ .sg-wrapper-less a.thumbnail:hover,
5084
+ .sg-wrapper-less a.thumbnail:focus,
5085
+ .sg-wrapper-less a.thumbnail.active {
5086
+ border-color: #2780e3;
5087
+ }
5088
+ .sg-wrapper-less .thumbnail .caption {
5089
+ padding: 9px;
5090
+ color: #333333;
5091
+ }
5092
+ .sg-wrapper-less .alert {
5093
+ padding: 15px;
5094
+ margin-bottom: 21px;
5095
+ border: 1px solid transparent;
5096
+ border-radius: 0;
5097
+ }
5098
+ .sg-wrapper-less .alert h4 {
5099
+ margin-top: 0;
5100
+ color: inherit;
5101
+ }
5102
+ .sg-wrapper-less .alert .alert-link {
5103
+ font-weight: bold;
5104
+ }
5105
+ .sg-wrapper-less .alert > p,
5106
+ .sg-wrapper-less .alert > ul {
5107
+ margin-bottom: 0;
5108
+ }
5109
+ .sg-wrapper-less .alert > p + p {
5110
+ margin-top: 5px;
5111
+ }
5112
+ .sg-wrapper-less .alert-dismissable,
5113
+ .sg-wrapper-less .alert-dismissible {
5114
+ padding-right: 35px;
5115
+ }
5116
+ .sg-wrapper-less .alert-dismissable .close,
5117
+ .sg-wrapper-less .alert-dismissible .close {
5118
+ position: relative;
5119
+ top: -2px;
5120
+ right: -21px;
5121
+ color: inherit;
5122
+ }
5123
+ .sg-wrapper-less .alert-success {
5124
+ background-color: #3fb618;
5125
+ border-color: #4e9f15;
5126
+ color: #ffffff;
5127
+ }
5128
+ .sg-wrapper-less .alert-success hr {
5129
+ border-top-color: #438912;
5130
+ }
5131
+ .sg-wrapper-less .alert-success .alert-link {
5132
+ color: #e6e6e6;
5133
+ }
5134
+ .sg-wrapper-less .alert-info {
5135
+ background-color: #9954bb;
5136
+ border-color: #7643a8;
5137
+ color: #ffffff;
5138
+ }
5139
+ .sg-wrapper-less .alert-info hr {
5140
+ border-top-color: #693c96;
5141
+ }
5142
+ .sg-wrapper-less .alert-info .alert-link {
5143
+ color: #e6e6e6;
5144
+ }
5145
+ .sg-wrapper-less .alert-warning {
5146
+ background-color: #ff7518;
5147
+ border-color: #ff4309;
5148
+ color: #ffffff;
5149
+ }
5150
+ .sg-wrapper-less .alert-warning hr {
5151
+ border-top-color: #ee3800;
5152
+ }
5153
+ .sg-wrapper-less .alert-warning .alert-link {
5154
+ color: #e6e6e6;
5155
+ }
5156
+ .sg-wrapper-less .alert-danger {
5157
+ background-color: #ff0039;
5158
+ border-color: #f0005e;
5159
+ color: #ffffff;
5160
+ }
5161
+ .sg-wrapper-less .alert-danger hr {
5162
+ border-top-color: #d60054;
5163
+ }
5164
+ .sg-wrapper-less .alert-danger .alert-link {
5165
+ color: #e6e6e6;
5166
+ }
5167
+ @-webkit-keyframes progress-bar-stripes {
5168
+ from {
5169
+ background-position: 40px 0;
5170
+ }
5171
+ to {
5172
+ background-position: 0 0;
5173
+ }
5174
+ }
5175
+ @-o-keyframes progress-bar-stripes {
5176
+ from {
5177
+ background-position: 40px 0;
5178
+ }
5179
+ to {
5180
+ background-position: 0 0;
5181
+ }
5182
+ }
5183
+ @keyframes progress-bar-stripes {
5184
+ from {
5185
+ background-position: 40px 0;
5186
+ }
5187
+ to {
5188
+ background-position: 0 0;
5189
+ }
5190
+ }
5191
+ .sg-wrapper-less .progress {
5192
+ overflow: hidden;
5193
+ height: 21px;
5194
+ margin-bottom: 21px;
5195
+ background-color: #cccccc;
5196
+ border-radius: 0;
5197
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
5198
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
5199
+ }
5200
+ .sg-wrapper-less .progress-bar {
5201
+ float: left;
5202
+ width: 0%;
5203
+ height: 100%;
5204
+ font-size: 13px;
5205
+ line-height: 21px;
5206
+ color: #ffffff;
5207
+ text-align: center;
5208
+ background-color: #2780e3;
5209
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
5210
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
5211
+ -webkit-transition: width 0.6s ease;
5212
+ -o-transition: width 0.6s ease;
5213
+ transition: width 0.6s ease;
5214
+ }
5215
+ .sg-wrapper-less .progress-striped .progress-bar,
5216
+ .sg-wrapper-less .progress-bar-striped {
5217
+ 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);
5218
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5219
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5220
+ -webkit-background-size: 40px 40px;
5221
+ background-size: 40px 40px;
5222
+ }
5223
+ .sg-wrapper-less .progress.active .progress-bar,
5224
+ .sg-wrapper-less .progress-bar.active {
5225
+ -webkit-animation: progress-bar-stripes 2s linear infinite;
5226
+ -o-animation: progress-bar-stripes 2s linear infinite;
5227
+ animation: progress-bar-stripes 2s linear infinite;
5228
+ }
5229
+ .sg-wrapper-less .progress-bar-success {
5230
+ background-color: #3fb618;
5231
+ }
5232
+ .sg-wrapper-less .progress-striped .progress-bar-success {
5233
+ 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);
5234
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5235
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5236
+ }
5237
+ .sg-wrapper-less .progress-bar-info {
5238
+ background-color: #9954bb;
5239
+ }
5240
+ .sg-wrapper-less .progress-striped .progress-bar-info {
5241
+ 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);
5242
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5243
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5244
+ }
5245
+ .sg-wrapper-less .progress-bar-warning {
5246
+ background-color: #ff7518;
5247
+ }
5248
+ .sg-wrapper-less .progress-striped .progress-bar-warning {
5249
+ 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);
5250
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5251
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5252
+ }
5253
+ .sg-wrapper-less .progress-bar-danger {
5254
+ background-color: #ff0039;
5255
+ }
5256
+ .sg-wrapper-less .progress-striped .progress-bar-danger {
5257
+ 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);
5258
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5259
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5260
+ }
5261
+ .sg-wrapper-less .media {
5262
+ margin-top: 15px;
5263
+ }
5264
+ .sg-wrapper-less .media:first-child {
5265
+ margin-top: 0;
5266
+ }
5267
+ .sg-wrapper-less .media,
5268
+ .sg-wrapper-less .media-body {
5269
+ zoom: 1;
5270
+ overflow: hidden;
5271
+ }
5272
+ .sg-wrapper-less .media-body {
5273
+ width: 10000px;
5274
+ }
5275
+ .sg-wrapper-less .media-object {
5276
+ display: block;
5277
+ }
5278
+ .sg-wrapper-less .media-right,
5279
+ .sg-wrapper-less .media > .pull-right {
5280
+ padding-left: 10px;
5281
+ }
5282
+ .sg-wrapper-less .media-left,
5283
+ .sg-wrapper-less .media > .pull-left {
5284
+ padding-right: 10px;
5285
+ }
5286
+ .sg-wrapper-less .media-left,
5287
+ .sg-wrapper-less .media-right,
5288
+ .sg-wrapper-less .media-body {
5289
+ display: table-cell;
5290
+ vertical-align: top;
5291
+ }
5292
+ .sg-wrapper-less .media-middle {
5293
+ vertical-align: middle;
5294
+ }
5295
+ .sg-wrapper-less .media-bottom {
5296
+ vertical-align: bottom;
5297
+ }
5298
+ .sg-wrapper-less .media-heading {
5299
+ margin-top: 0;
5300
+ margin-bottom: 5px;
5301
+ }
5302
+ .sg-wrapper-less .media-list {
5303
+ padding-left: 0;
5304
+ list-style: none;
5305
+ }
5306
+ .sg-wrapper-less .list-group {
5307
+ margin-bottom: 20px;
5308
+ padding-left: 0;
5309
+ }
5310
+ .sg-wrapper-less .list-group-item {
5311
+ position: relative;
5312
+ display: block;
5313
+ padding: 10px 15px;
5314
+ margin-bottom: -1px;
5315
+ background-color: #ffffff;
5316
+ border: 1px solid #dddddd;
5317
+ }
5318
+ .sg-wrapper-less .list-group-item:first-child {
5319
+ border-top-right-radius: 0;
5320
+ border-top-left-radius: 0;
5321
+ }
5322
+ .sg-wrapper-less .list-group-item:last-child {
5323
+ margin-bottom: 0;
5324
+ border-bottom-right-radius: 0;
5325
+ border-bottom-left-radius: 0;
5326
+ }
5327
+ .sg-wrapper-less a.list-group-item {
5328
+ color: #555555;
5329
+ }
5330
+ .sg-wrapper-less a.list-group-item .list-group-item-heading {
5331
+ color: #333333;
5332
+ }
5333
+ .sg-wrapper-less a.list-group-item:hover,
5334
+ .sg-wrapper-less a.list-group-item:focus {
5335
+ text-decoration: none;
5336
+ color: #555555;
5337
+ background-color: #f5f5f5;
5338
+ }
5339
+ .sg-wrapper-less .list-group-item.disabled,
5340
+ .sg-wrapper-less .list-group-item.disabled:hover,
5341
+ .sg-wrapper-less .list-group-item.disabled:focus {
5342
+ background-color: #e6e6e6;
5343
+ color: #999999;
5344
+ cursor: not-allowed;
5345
+ }
5346
+ .sg-wrapper-less .list-group-item.disabled .list-group-item-heading,
5347
+ .sg-wrapper-less .list-group-item.disabled:hover .list-group-item-heading,
5348
+ .sg-wrapper-less .list-group-item.disabled:focus .list-group-item-heading {
5349
+ color: inherit;
5350
+ }
5351
+ .sg-wrapper-less .list-group-item.disabled .list-group-item-text,
5352
+ .sg-wrapper-less .list-group-item.disabled:hover .list-group-item-text,
5353
+ .sg-wrapper-less .list-group-item.disabled:focus .list-group-item-text {
5354
+ color: #999999;
5355
+ }
5356
+ .sg-wrapper-less .list-group-item.active,
5357
+ .sg-wrapper-less .list-group-item.active:hover,
5358
+ .sg-wrapper-less .list-group-item.active:focus {
5359
+ z-index: 2;
5360
+ color: #ffffff;
5361
+ background-color: #2780e3;
5362
+ border-color: #dddddd;
5363
+ }
5364
+ .sg-wrapper-less .list-group-item.active .list-group-item-heading,
5365
+ .sg-wrapper-less .list-group-item.active:hover .list-group-item-heading,
5366
+ .sg-wrapper-less .list-group-item.active:focus .list-group-item-heading,
5367
+ .sg-wrapper-less .list-group-item.active .list-group-item-heading > small,
5368
+ .sg-wrapper-less .list-group-item.active:hover .list-group-item-heading > small,
5369
+ .sg-wrapper-less .list-group-item.active:focus .list-group-item-heading > small,
5370
+ .sg-wrapper-less .list-group-item.active .list-group-item-heading > .small,
5371
+ .sg-wrapper-less .list-group-item.active:hover .list-group-item-heading > .small,
5372
+ .sg-wrapper-less .list-group-item.active:focus .list-group-item-heading > .small {
5373
+ color: inherit;
5374
+ }
5375
+ .sg-wrapper-less .list-group-item.active .list-group-item-text,
5376
+ .sg-wrapper-less .list-group-item.active:hover .list-group-item-text,
5377
+ .sg-wrapper-less .list-group-item.active:focus .list-group-item-text {
5378
+ color: #dceafa;
5379
+ }
5380
+ .sg-wrapper-less .list-group-item-success {
5381
+ color: #ffffff;
5382
+ background-color: #3fb618;
5383
+ }
5384
+ .sg-wrapper-less a.list-group-item-success {
5385
+ color: #ffffff;
5386
+ }
5387
+ .sg-wrapper-less a.list-group-item-success .list-group-item-heading {
5388
+ color: inherit;
5389
+ }
5390
+ .sg-wrapper-less a.list-group-item-success:hover,
5391
+ .sg-wrapper-less a.list-group-item-success:focus {
5392
+ color: #ffffff;
5393
+ background-color: #379f15;
5394
+ }
5395
+ .sg-wrapper-less a.list-group-item-success.active,
5396
+ .sg-wrapper-less a.list-group-item-success.active:hover,
5397
+ .sg-wrapper-less a.list-group-item-success.active:focus {
5398
+ color: #fff;
5399
+ background-color: #ffffff;
5400
+ border-color: #ffffff;
5401
+ }
5402
+ .sg-wrapper-less .list-group-item-info {
5403
+ color: #ffffff;
5404
+ background-color: #9954bb;
5405
+ }
5406
+ .sg-wrapper-less a.list-group-item-info {
5407
+ color: #ffffff;
5408
+ }
5409
+ .sg-wrapper-less a.list-group-item-info .list-group-item-heading {
5410
+ color: inherit;
5411
+ }
5412
+ .sg-wrapper-less a.list-group-item-info:hover,
5413
+ .sg-wrapper-less a.list-group-item-info:focus {
5414
+ color: #ffffff;
5415
+ background-color: #8d46b0;
5416
+ }
5417
+ .sg-wrapper-less a.list-group-item-info.active,
5418
+ .sg-wrapper-less a.list-group-item-info.active:hover,
5419
+ .sg-wrapper-less a.list-group-item-info.active:focus {
5420
+ color: #fff;
5421
+ background-color: #ffffff;
5422
+ border-color: #ffffff;
5423
+ }
5424
+ .sg-wrapper-less .list-group-item-warning {
5425
+ color: #ffffff;
5426
+ background-color: #ff7518;
5427
+ }
5428
+ .sg-wrapper-less a.list-group-item-warning {
5429
+ color: #ffffff;
5430
+ }
5431
+ .sg-wrapper-less a.list-group-item-warning .list-group-item-heading {
5432
+ color: inherit;
5433
+ }
5434
+ .sg-wrapper-less a.list-group-item-warning:hover,
5435
+ .sg-wrapper-less a.list-group-item-warning:focus {
5436
+ color: #ffffff;
5437
+ background-color: #fe6600;
5438
+ }
5439
+ .sg-wrapper-less a.list-group-item-warning.active,
5440
+ .sg-wrapper-less a.list-group-item-warning.active:hover,
5441
+ .sg-wrapper-less a.list-group-item-warning.active:focus {
5442
+ color: #fff;
5443
+ background-color: #ffffff;
5444
+ border-color: #ffffff;
5445
+ }
5446
+ .sg-wrapper-less .list-group-item-danger {
5447
+ color: #ffffff;
5448
+ background-color: #ff0039;
5449
+ }
5450
+ .sg-wrapper-less a.list-group-item-danger {
5451
+ color: #ffffff;
5452
+ }
5453
+ .sg-wrapper-less a.list-group-item-danger .list-group-item-heading {
5454
+ color: inherit;
5455
+ }
5456
+ .sg-wrapper-less a.list-group-item-danger:hover,
5457
+ .sg-wrapper-less a.list-group-item-danger:focus {
5458
+ color: #ffffff;
5459
+ background-color: #e60033;
5460
+ }
5461
+ .sg-wrapper-less a.list-group-item-danger.active,
5462
+ .sg-wrapper-less a.list-group-item-danger.active:hover,
5463
+ .sg-wrapper-less a.list-group-item-danger.active:focus {
5464
+ color: #fff;
5465
+ background-color: #ffffff;
5466
+ border-color: #ffffff;
5467
+ }
5468
+ .sg-wrapper-less .list-group-item-heading {
5469
+ margin-top: 0;
5470
+ margin-bottom: 5px;
5471
+ }
5472
+ .sg-wrapper-less .list-group-item-text {
5473
+ margin-bottom: 0;
5474
+ line-height: 1.3;
5475
+ }
5476
+ .sg-wrapper-less .panel {
5477
+ margin-bottom: 21px;
5478
+ background-color: #ffffff;
5479
+ border: 1px solid transparent;
5480
+ border-radius: 0;
5481
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
5482
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
5483
+ }
5484
+ .sg-wrapper-less .panel-body {
5485
+ padding: 15px;
5486
+ }
5487
+ .sg-wrapper-less .panel-heading {
5488
+ padding: 10px 15px;
5489
+ border-bottom: 1px solid transparent;
5490
+ border-top-right-radius: -1;
5491
+ border-top-left-radius: -1;
5492
+ }
5493
+ .sg-wrapper-less .panel-heading > .dropdown .dropdown-toggle {
5494
+ color: inherit;
5495
+ }
5496
+ .sg-wrapper-less .panel-title {
5497
+ margin-top: 0;
5498
+ margin-bottom: 0;
5499
+ font-size: 17px;
5500
+ color: inherit;
5501
+ }
5502
+ .sg-wrapper-less .panel-title > a,
5503
+ .sg-wrapper-less .panel-title > small,
5504
+ .sg-wrapper-less .panel-title > .small,
5505
+ .sg-wrapper-less .panel-title > small > a,
5506
+ .sg-wrapper-less .panel-title > .small > a {
5507
+ color: inherit;
5508
+ }
5509
+ .sg-wrapper-less .panel-footer {
5510
+ padding: 10px 15px;
5511
+ background-color: #f5f5f5;
5512
+ border-top: 1px solid #dddddd;
5513
+ border-bottom-right-radius: -1;
5514
+ border-bottom-left-radius: -1;
5515
+ }
5516
+ .sg-wrapper-less .panel > .list-group,
5517
+ .sg-wrapper-less .panel > .panel-collapse > .list-group {
5518
+ margin-bottom: 0;
5519
+ }
5520
+ .sg-wrapper-less .panel > .list-group .list-group-item,
5521
+ .sg-wrapper-less .panel > .panel-collapse > .list-group .list-group-item {
5522
+ border-width: 1px 0;
5523
+ border-radius: 0;
5524
+ }
5525
+ .sg-wrapper-less .panel > .list-group:first-child .list-group-item:first-child,
5526
+ .sg-wrapper-less .panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
5527
+ border-top: 0;
5528
+ border-top-right-radius: -1;
5529
+ border-top-left-radius: -1;
5530
+ }
5531
+ .sg-wrapper-less .panel > .list-group:last-child .list-group-item:last-child,
5532
+ .sg-wrapper-less .panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
5533
+ border-bottom: 0;
5534
+ border-bottom-right-radius: -1;
5535
+ border-bottom-left-radius: -1;
5536
+ }
5537
+ .sg-wrapper-less .panel-heading + .list-group .list-group-item:first-child {
5538
+ border-top-width: 0;
5539
+ }
5540
+ .sg-wrapper-less .list-group + .panel-footer {
5541
+ border-top-width: 0;
5542
+ }
5543
+ .sg-wrapper-less .panel > .table,
5544
+ .sg-wrapper-less .panel > .table-responsive > .table,
5545
+ .sg-wrapper-less .panel > .panel-collapse > .table {
5546
+ margin-bottom: 0;
5547
+ }
5548
+ .sg-wrapper-less .panel > .table caption,
5549
+ .sg-wrapper-less .panel > .table-responsive > .table caption,
5550
+ .sg-wrapper-less .panel > .panel-collapse > .table caption {
5551
+ padding-left: 15px;
5552
+ padding-right: 15px;
5553
+ }
5554
+ .sg-wrapper-less .panel > .table:first-child,
5555
+ .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child {
5556
+ border-top-right-radius: -1;
5557
+ border-top-left-radius: -1;
5558
+ }
5559
+ .sg-wrapper-less .panel > .table:first-child > thead:first-child > tr:first-child,
5560
+ .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
5561
+ .sg-wrapper-less .panel > .table:first-child > tbody:first-child > tr:first-child,
5562
+ .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
5563
+ border-top-left-radius: -1;
5564
+ border-top-right-radius: -1;
5565
+ }
5566
+ .sg-wrapper-less .panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
5567
+ .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
5568
+ .sg-wrapper-less .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
5569
+ .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
5570
+ .sg-wrapper-less .panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
5571
+ .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
5572
+ .sg-wrapper-less .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
5573
+ .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
5574
+ border-top-left-radius: -1;
5575
+ }
5576
+ .sg-wrapper-less .panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
5577
+ .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
5578
+ .sg-wrapper-less .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
5579
+ .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
5580
+ .sg-wrapper-less .panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
5581
+ .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
5582
+ .sg-wrapper-less .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
5583
+ .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
5584
+ border-top-right-radius: -1;
5585
+ }
5586
+ .sg-wrapper-less .panel > .table:last-child,
5587
+ .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child {
5588
+ border-bottom-right-radius: -1;
5589
+ border-bottom-left-radius: -1;
5590
+ }
5591
+ .sg-wrapper-less .panel > .table:last-child > tbody:last-child > tr:last-child,
5592
+ .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
5593
+ .sg-wrapper-less .panel > .table:last-child > tfoot:last-child > tr:last-child,
5594
+ .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
5595
+ border-bottom-left-radius: -1;
5596
+ border-bottom-right-radius: -1;
5597
+ }
5598
+ .sg-wrapper-less .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
5599
+ .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
5600
+ .sg-wrapper-less .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
5601
+ .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
5602
+ .sg-wrapper-less .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
5603
+ .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
5604
+ .sg-wrapper-less .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
5605
+ .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
5606
+ border-bottom-left-radius: -1;
5607
+ }
5608
+ .sg-wrapper-less .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
5609
+ .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
5610
+ .sg-wrapper-less .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
5611
+ .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
5612
+ .sg-wrapper-less .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
5613
+ .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
5614
+ .sg-wrapper-less .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
5615
+ .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
5616
+ border-bottom-right-radius: -1;
5617
+ }
5618
+ .sg-wrapper-less .panel > .panel-body + .table,
5619
+ .sg-wrapper-less .panel > .panel-body + .table-responsive,
5620
+ .sg-wrapper-less .panel > .table + .panel-body,
5621
+ .sg-wrapper-less .panel > .table-responsive + .panel-body {
5622
+ border-top: 1px solid #dddddd;
5623
+ }
5624
+ .sg-wrapper-less .panel > .table > tbody:first-child > tr:first-child th,
5625
+ .sg-wrapper-less .panel > .table > tbody:first-child > tr:first-child td {
5626
+ border-top: 0;
5627
+ }
5628
+ .sg-wrapper-less .panel > .table-bordered,
5629
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered {
5630
+ border: 0;
5631
+ }
5632
+ .sg-wrapper-less .panel > .table-bordered > thead > tr > th:first-child,
5633
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
5634
+ .sg-wrapper-less .panel > .table-bordered > tbody > tr > th:first-child,
5635
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
5636
+ .sg-wrapper-less .panel > .table-bordered > tfoot > tr > th:first-child,
5637
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
5638
+ .sg-wrapper-less .panel > .table-bordered > thead > tr > td:first-child,
5639
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
5640
+ .sg-wrapper-less .panel > .table-bordered > tbody > tr > td:first-child,
5641
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
5642
+ .sg-wrapper-less .panel > .table-bordered > tfoot > tr > td:first-child,
5643
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
5644
+ border-left: 0;
5645
+ }
5646
+ .sg-wrapper-less .panel > .table-bordered > thead > tr > th:last-child,
5647
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
5648
+ .sg-wrapper-less .panel > .table-bordered > tbody > tr > th:last-child,
5649
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
5650
+ .sg-wrapper-less .panel > .table-bordered > tfoot > tr > th:last-child,
5651
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
5652
+ .sg-wrapper-less .panel > .table-bordered > thead > tr > td:last-child,
5653
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
5654
+ .sg-wrapper-less .panel > .table-bordered > tbody > tr > td:last-child,
5655
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
5656
+ .sg-wrapper-less .panel > .table-bordered > tfoot > tr > td:last-child,
5657
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
5658
+ border-right: 0;
5659
+ }
5660
+ .sg-wrapper-less .panel > .table-bordered > thead > tr:first-child > td,
5661
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
5662
+ .sg-wrapper-less .panel > .table-bordered > tbody > tr:first-child > td,
5663
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
5664
+ .sg-wrapper-less .panel > .table-bordered > thead > tr:first-child > th,
5665
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
5666
+ .sg-wrapper-less .panel > .table-bordered > tbody > tr:first-child > th,
5667
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
5668
+ border-bottom: 0;
5669
+ }
5670
+ .sg-wrapper-less .panel > .table-bordered > tbody > tr:last-child > td,
5671
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
5672
+ .sg-wrapper-less .panel > .table-bordered > tfoot > tr:last-child > td,
5673
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
5674
+ .sg-wrapper-less .panel > .table-bordered > tbody > tr:last-child > th,
5675
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
5676
+ .sg-wrapper-less .panel > .table-bordered > tfoot > tr:last-child > th,
5677
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
5678
+ border-bottom: 0;
5679
+ }
5680
+ .sg-wrapper-less .panel > .table-responsive {
5681
+ border: 0;
5682
+ margin-bottom: 0;
5683
+ }
5684
+ .sg-wrapper-less .panel-group {
5685
+ margin-bottom: 21px;
5686
+ }
5687
+ .sg-wrapper-less .panel-group .panel {
5688
+ margin-bottom: 0;
5689
+ border-radius: 0;
5690
+ }
5691
+ .sg-wrapper-less .panel-group .panel + .panel {
5692
+ margin-top: 5px;
5693
+ }
5694
+ .sg-wrapper-less .panel-group .panel-heading {
5695
+ border-bottom: 0;
5696
+ }
5697
+ .sg-wrapper-less .panel-group .panel-heading + .panel-collapse > .panel-body,
5698
+ .sg-wrapper-less .panel-group .panel-heading + .panel-collapse > .list-group {
5699
+ border-top: 1px solid #dddddd;
5700
+ }
5701
+ .sg-wrapper-less .panel-group .panel-footer {
5702
+ border-top: 0;
5703
+ }
5704
+ .sg-wrapper-less .panel-group .panel-footer + .panel-collapse .panel-body {
5705
+ border-bottom: 1px solid #dddddd;
5706
+ }
5707
+ .sg-wrapper-less .panel-default {
5708
+ border-color: #dddddd;
5709
+ }
5710
+ .sg-wrapper-less .panel-default > .panel-heading {
5711
+ color: #333333;
5712
+ background-color: #f5f5f5;
5713
+ border-color: #dddddd;
5714
+ }
5715
+ .sg-wrapper-less .panel-default > .panel-heading + .panel-collapse > .panel-body {
5716
+ border-top-color: #dddddd;
5717
+ }
5718
+ .sg-wrapper-less .panel-default > .panel-heading .badge {
5719
+ color: #f5f5f5;
5720
+ background-color: #333333;
5721
+ }
5722
+ .sg-wrapper-less .panel-default > .panel-footer + .panel-collapse > .panel-body {
5723
+ border-bottom-color: #dddddd;
5724
+ }
5725
+ .sg-wrapper-less .panel-primary {
5726
+ border-color: #2780e3;
5727
+ }
5728
+ .sg-wrapper-less .panel-primary > .panel-heading {
5729
+ color: #ffffff;
5730
+ background-color: #2780e3;
5731
+ border-color: #2780e3;
5732
+ }
5733
+ .sg-wrapper-less .panel-primary > .panel-heading + .panel-collapse > .panel-body {
5734
+ border-top-color: #2780e3;
5735
+ }
5736
+ .sg-wrapper-less .panel-primary > .panel-heading .badge {
5737
+ color: #2780e3;
5738
+ background-color: #ffffff;
5739
+ }
5740
+ .sg-wrapper-less .panel-primary > .panel-footer + .panel-collapse > .panel-body {
5741
+ border-bottom-color: #2780e3;
5742
+ }
5743
+ .sg-wrapper-less .panel-success {
5744
+ border-color: #4e9f15;
5745
+ }
5746
+ .sg-wrapper-less .panel-success > .panel-heading {
5747
+ color: #ffffff;
5748
+ background-color: #3fb618;
5749
+ border-color: #4e9f15;
5750
+ }
5751
+ .sg-wrapper-less .panel-success > .panel-heading + .panel-collapse > .panel-body {
5752
+ border-top-color: #4e9f15;
5753
+ }
5754
+ .sg-wrapper-less .panel-success > .panel-heading .badge {
5755
+ color: #3fb618;
5756
+ background-color: #ffffff;
5757
+ }
5758
+ .sg-wrapper-less .panel-success > .panel-footer + .panel-collapse > .panel-body {
5759
+ border-bottom-color: #4e9f15;
5760
+ }
5761
+ .sg-wrapper-less .panel-info {
5762
+ border-color: #7643a8;
5763
+ }
5764
+ .sg-wrapper-less .panel-info > .panel-heading {
5765
+ color: #ffffff;
5766
+ background-color: #9954bb;
5767
+ border-color: #7643a8;
5768
+ }
5769
+ .sg-wrapper-less .panel-info > .panel-heading + .panel-collapse > .panel-body {
5770
+ border-top-color: #7643a8;
5771
+ }
5772
+ .sg-wrapper-less .panel-info > .panel-heading .badge {
5773
+ color: #9954bb;
5774
+ background-color: #ffffff;
5775
+ }
5776
+ .sg-wrapper-less .panel-info > .panel-footer + .panel-collapse > .panel-body {
5777
+ border-bottom-color: #7643a8;
5778
+ }
5779
+ .sg-wrapper-less .panel-warning {
5780
+ border-color: #ff4309;
5781
+ }
5782
+ .sg-wrapper-less .panel-warning > .panel-heading {
5783
+ color: #ffffff;
5784
+ background-color: #ff7518;
5785
+ border-color: #ff4309;
5786
+ }
5787
+ .sg-wrapper-less .panel-warning > .panel-heading + .panel-collapse > .panel-body {
5788
+ border-top-color: #ff4309;
5789
+ }
5790
+ .sg-wrapper-less .panel-warning > .panel-heading .badge {
5791
+ color: #ff7518;
5792
+ background-color: #ffffff;
5793
+ }
5794
+ .sg-wrapper-less .panel-warning > .panel-footer + .panel-collapse > .panel-body {
5795
+ border-bottom-color: #ff4309;
5796
+ }
5797
+ .sg-wrapper-less .panel-danger {
5798
+ border-color: #f0005e;
5799
+ }
5800
+ .sg-wrapper-less .panel-danger > .panel-heading {
5801
+ color: #ffffff;
5802
+ background-color: #ff0039;
5803
+ border-color: #f0005e;
5804
+ }
5805
+ .sg-wrapper-less .panel-danger > .panel-heading + .panel-collapse > .panel-body {
5806
+ border-top-color: #f0005e;
5807
+ }
5808
+ .sg-wrapper-less .panel-danger > .panel-heading .badge {
5809
+ color: #ff0039;
5810
+ background-color: #ffffff;
5811
+ }
5812
+ .sg-wrapper-less .panel-danger > .panel-footer + .panel-collapse > .panel-body {
5813
+ border-bottom-color: #f0005e;
5814
+ }
5815
+ .sg-wrapper-less .embed-responsive {
5816
+ position: relative;
5817
+ display: block;
5818
+ height: 0;
5819
+ padding: 0;
5820
+ overflow: hidden;
5821
+ }
5822
+ .sg-wrapper-less .embed-responsive .embed-responsive-item,
5823
+ .sg-wrapper-less .embed-responsive iframe,
5824
+ .sg-wrapper-less .embed-responsive embed,
5825
+ .sg-wrapper-less .embed-responsive object,
5826
+ .sg-wrapper-less .embed-responsive video {
5827
+ position: absolute;
5828
+ top: 0;
5829
+ left: 0;
5830
+ bottom: 0;
5831
+ height: 100%;
5832
+ width: 100%;
5833
+ border: 0;
5834
+ }
5835
+ .sg-wrapper-less .embed-responsive-16by9 {
5836
+ padding-bottom: 56.25%;
5837
+ }
5838
+ .sg-wrapper-less .embed-responsive-4by3 {
5839
+ padding-bottom: 75%;
5840
+ }
5841
+ .sg-wrapper-less .well {
5842
+ min-height: 20px;
5843
+ padding: 19px;
5844
+ margin-bottom: 20px;
5845
+ background-color: #f5f5f5;
5846
+ border: 1px solid #e3e3e3;
5847
+ border-radius: 0;
5848
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
5849
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
5850
+ }
5851
+ .sg-wrapper-less .well blockquote {
5852
+ border-color: #ddd;
5853
+ border-color: rgba(0, 0, 0, 0.15);
5854
+ }
5855
+ .sg-wrapper-less .well-lg {
5856
+ padding: 24px;
5857
+ border-radius: 0;
5858
+ }
5859
+ .sg-wrapper-less .well-sm {
5860
+ padding: 9px;
5861
+ border-radius: 0;
5862
+ }
5863
+ .sg-wrapper-less .close {
5864
+ float: right;
5865
+ font-size: 22.5px;
5866
+ font-weight: bold;
5867
+ line-height: 1;
5868
+ color: #ffffff;
5869
+ text-shadow: 0 1px 0 #ffffff;
5870
+ opacity: 0.2;
5871
+ filter: alpha(opacity=20);
5872
+ }
5873
+ .sg-wrapper-less .close:hover,
5874
+ .sg-wrapper-less .close:focus {
5875
+ color: #ffffff;
5876
+ text-decoration: none;
5877
+ cursor: pointer;
5878
+ opacity: 0.5;
5879
+ filter: alpha(opacity=50);
5880
+ }
5881
+ .sg-wrapper-less button.close {
5882
+ padding: 0;
5883
+ cursor: pointer;
5884
+ background: transparent;
5885
+ border: 0;
5886
+ -webkit-appearance: none;
5887
+ }
5888
+ .sg-wrapper-less .modal-open {
5889
+ overflow: hidden;
5890
+ }
5891
+ .sg-wrapper-less .modal {
5892
+ display: none;
5893
+ overflow: hidden;
5894
+ position: fixed;
5895
+ top: 0;
5896
+ right: 0;
5897
+ bottom: 0;
5898
+ left: 0;
5899
+ z-index: 1050;
5900
+ -webkit-overflow-scrolling: touch;
5901
+ outline: 0;
5902
+ }
5903
+ .sg-wrapper-less .modal.fade .modal-dialog {
5904
+ -webkit-transform: translate(0, -25%);
5905
+ -ms-transform: translate(0, -25%);
5906
+ -o-transform: translate(0, -25%);
5907
+ transform: translate(0, -25%);
5908
+ -webkit-transition: -webkit-transform 0.3s ease-out;
5909
+ -o-transition: -o-transform 0.3s ease-out;
5910
+ transition: transform 0.3s ease-out;
5911
+ }
5912
+ .sg-wrapper-less .modal.in .modal-dialog {
5913
+ -webkit-transform: translate(0, 0);
5914
+ -ms-transform: translate(0, 0);
5915
+ -o-transform: translate(0, 0);
5916
+ transform: translate(0, 0);
5917
+ }
5918
+ .sg-wrapper-less .modal-open .modal {
5919
+ overflow-x: hidden;
5920
+ overflow-y: auto;
5921
+ }
5922
+ .sg-wrapper-less .modal-dialog {
5923
+ position: relative;
5924
+ width: auto;
5925
+ margin: 10px;
5926
+ }
5927
+ .sg-wrapper-less .modal-content {
5928
+ position: relative;
5929
+ background-color: #ffffff;
5930
+ border: 1px solid #999999;
5931
+ border: 1px solid transparent;
5932
+ border-radius: 0;
5933
+ -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
5934
+ box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
5935
+ -webkit-background-clip: padding-box;
5936
+ background-clip: padding-box;
5937
+ outline: 0;
5938
+ }
5939
+ .sg-wrapper-less .modal-backdrop {
5940
+ position: fixed;
5941
+ top: 0;
5942
+ right: 0;
5943
+ bottom: 0;
5944
+ left: 0;
5945
+ z-index: 1040;
5946
+ background-color: #000000;
5947
+ }
5948
+ .sg-wrapper-less .modal-backdrop.fade {
5949
+ opacity: 0;
5950
+ filter: alpha(opacity=0);
5951
+ }
5952
+ .sg-wrapper-less .modal-backdrop.in {
5953
+ opacity: 0.5;
5954
+ filter: alpha(opacity=50);
5955
+ }
5956
+ .sg-wrapper-less .modal-header {
5957
+ padding: 15px;
5958
+ border-bottom: 1px solid #e5e5e5;
5959
+ min-height: 16.42857143px;
5960
+ }
5961
+ .sg-wrapper-less .modal-header .close {
5962
+ margin-top: -2px;
5963
+ }
5964
+ .sg-wrapper-less .modal-title {
5965
+ margin: 0;
5966
+ line-height: 1.42857143;
5967
+ }
5968
+ .sg-wrapper-less .modal-body {
5969
+ position: relative;
5970
+ padding: 20px;
5971
+ }
5972
+ .sg-wrapper-less .modal-footer {
5973
+ padding: 20px;
5974
+ text-align: right;
5975
+ border-top: 1px solid #e5e5e5;
5976
+ }
5977
+ .sg-wrapper-less .modal-footer .btn + .btn {
5978
+ margin-left: 5px;
5979
+ margin-bottom: 0;
5980
+ }
5981
+ .sg-wrapper-less .modal-footer .btn-group .btn + .btn {
5982
+ margin-left: -1px;
5983
+ }
5984
+ .sg-wrapper-less .modal-footer .btn-block + .btn-block {
5985
+ margin-left: 0;
5986
+ }
5987
+ .sg-wrapper-less .modal-scrollbar-measure {
5988
+ position: absolute;
5989
+ top: -9999px;
5990
+ width: 50px;
5991
+ height: 50px;
5992
+ overflow: scroll;
5993
+ }
5994
+ @media (min-width: 768px) {
5995
+ .sg-wrapper-less .modal-dialog {
5996
+ width: 600px;
5997
+ margin: 30px auto;
5998
+ }
5999
+ .sg-wrapper-less .modal-content {
6000
+ -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
6001
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
6002
+ }
6003
+ .sg-wrapper-less .modal-sm {
6004
+ width: 300px;
6005
+ }
6006
+ }
6007
+ @media (min-width: 992px) {
6008
+ .sg-wrapper-less .modal-lg {
6009
+ width: 900px;
6010
+ }
6011
+ }
6012
+ .sg-wrapper-less .tooltip {
6013
+ position: absolute;
6014
+ z-index: 1070;
6015
+ display: block;
6016
+ font-family: "Source Sans Pro", Calibri, Candara, Arial, sans-serif;
6017
+ font-size: 13px;
6018
+ font-weight: normal;
6019
+ line-height: 1.4;
6020
+ opacity: 0;
6021
+ filter: alpha(opacity=0);
6022
+ }
6023
+ .sg-wrapper-less .tooltip.in {
6024
+ opacity: 0.9;
6025
+ filter: alpha(opacity=90);
6026
+ }
6027
+ .sg-wrapper-less .tooltip.top {
6028
+ margin-top: -3px;
6029
+ padding: 5px 0;
6030
+ }
6031
+ .sg-wrapper-less .tooltip.right {
6032
+ margin-left: 3px;
6033
+ padding: 0 5px;
6034
+ }
6035
+ .sg-wrapper-less .tooltip.bottom {
6036
+ margin-top: 3px;
6037
+ padding: 5px 0;
6038
+ }
6039
+ .sg-wrapper-less .tooltip.left {
6040
+ margin-left: -3px;
6041
+ padding: 0 5px;
6042
+ }
6043
+ .sg-wrapper-less .tooltip-inner {
6044
+ max-width: 200px;
6045
+ padding: 3px 8px;
6046
+ color: #ffffff;
6047
+ text-align: center;
6048
+ text-decoration: none;
6049
+ background-color: #000000;
6050
+ border-radius: 0;
6051
+ }
6052
+ .sg-wrapper-less .tooltip-arrow {
6053
+ position: absolute;
6054
+ width: 0;
6055
+ height: 0;
6056
+ border-color: transparent;
6057
+ border-style: solid;
6058
+ }
6059
+ .sg-wrapper-less .tooltip.top .tooltip-arrow {
6060
+ bottom: 0;
6061
+ left: 50%;
6062
+ margin-left: -5px;
6063
+ border-width: 5px 5px 0;
6064
+ border-top-color: #000000;
6065
+ }
6066
+ .sg-wrapper-less .tooltip.top-left .tooltip-arrow {
6067
+ bottom: 0;
6068
+ right: 5px;
6069
+ margin-bottom: -5px;
6070
+ border-width: 5px 5px 0;
6071
+ border-top-color: #000000;
6072
+ }
6073
+ .sg-wrapper-less .tooltip.top-right .tooltip-arrow {
6074
+ bottom: 0;
6075
+ left: 5px;
6076
+ margin-bottom: -5px;
6077
+ border-width: 5px 5px 0;
6078
+ border-top-color: #000000;
6079
+ }
6080
+ .sg-wrapper-less .tooltip.right .tooltip-arrow {
6081
+ top: 50%;
6082
+ left: 0;
6083
+ margin-top: -5px;
6084
+ border-width: 5px 5px 5px 0;
6085
+ border-right-color: #000000;
6086
+ }
6087
+ .sg-wrapper-less .tooltip.left .tooltip-arrow {
6088
+ top: 50%;
6089
+ right: 0;
6090
+ margin-top: -5px;
6091
+ border-width: 5px 0 5px 5px;
6092
+ border-left-color: #000000;
6093
+ }
6094
+ .sg-wrapper-less .tooltip.bottom .tooltip-arrow {
6095
+ top: 0;
6096
+ left: 50%;
6097
+ margin-left: -5px;
6098
+ border-width: 0 5px 5px;
6099
+ border-bottom-color: #000000;
6100
+ }
6101
+ .sg-wrapper-less .tooltip.bottom-left .tooltip-arrow {
6102
+ top: 0;
6103
+ right: 5px;
6104
+ margin-top: -5px;
6105
+ border-width: 0 5px 5px;
6106
+ border-bottom-color: #000000;
6107
+ }
6108
+ .sg-wrapper-less .tooltip.bottom-right .tooltip-arrow {
6109
+ top: 0;
6110
+ left: 5px;
6111
+ margin-top: -5px;
6112
+ border-width: 0 5px 5px;
6113
+ border-bottom-color: #000000;
6114
+ }
6115
+ .sg-wrapper-less .popover {
6116
+ position: absolute;
6117
+ top: 0;
6118
+ left: 0;
6119
+ z-index: 1060;
6120
+ display: none;
6121
+ max-width: 276px;
6122
+ padding: 1px;
6123
+ font-family: "Source Sans Pro", Calibri, Candara, Arial, sans-serif;
6124
+ font-size: 15px;
6125
+ font-weight: normal;
6126
+ line-height: 1.42857143;
6127
+ text-align: left;
6128
+ background-color: #ffffff;
6129
+ -webkit-background-clip: padding-box;
6130
+ background-clip: padding-box;
6131
+ border: 1px solid #cccccc;
6132
+ border: 1px solid rgba(0, 0, 0, 0.2);
6133
+ border-radius: 0;
6134
+ -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
6135
+ box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
6136
+ white-space: normal;
6137
+ }
6138
+ .sg-wrapper-less .popover.top {
6139
+ margin-top: -10px;
6140
+ }
6141
+ .sg-wrapper-less .popover.right {
6142
+ margin-left: 10px;
6143
+ }
6144
+ .sg-wrapper-less .popover.bottom {
6145
+ margin-top: 10px;
6146
+ }
6147
+ .sg-wrapper-less .popover.left {
6148
+ margin-left: -10px;
6149
+ }
6150
+ .sg-wrapper-less .popover-title {
6151
+ margin: 0;
6152
+ padding: 8px 14px;
6153
+ font-size: 15px;
6154
+ background-color: #f7f7f7;
6155
+ border-bottom: 1px solid #ebebeb;
6156
+ border-radius: -1 -1 0 0;
6157
+ }
6158
+ .sg-wrapper-less .popover-content {
6159
+ padding: 9px 14px;
6160
+ }
6161
+ .sg-wrapper-less .popover > .arrow,
6162
+ .sg-wrapper-less .popover > .arrow:after {
6163
+ position: absolute;
6164
+ display: block;
6165
+ width: 0;
6166
+ height: 0;
6167
+ border-color: transparent;
6168
+ border-style: solid;
6169
+ }
6170
+ .sg-wrapper-less .popover > .arrow {
6171
+ border-width: 11px;
6172
+ }
6173
+ .sg-wrapper-less .popover > .arrow:after {
6174
+ border-width: 10px;
6175
+ content: "";
6176
+ }
6177
+ .sg-wrapper-less .popover.top > .arrow {
6178
+ left: 50%;
6179
+ margin-left: -11px;
6180
+ border-bottom-width: 0;
6181
+ border-top-color: #999999;
6182
+ border-top-color: rgba(0, 0, 0, 0.25);
6183
+ bottom: -11px;
6184
+ }
6185
+ .sg-wrapper-less .popover.top > .arrow:after {
6186
+ content: " ";
6187
+ bottom: 1px;
6188
+ margin-left: -10px;
6189
+ border-bottom-width: 0;
6190
+ border-top-color: #ffffff;
6191
+ }
6192
+ .sg-wrapper-less .popover.right > .arrow {
6193
+ top: 50%;
6194
+ left: -11px;
6195
+ margin-top: -11px;
6196
+ border-left-width: 0;
6197
+ border-right-color: #999999;
6198
+ border-right-color: rgba(0, 0, 0, 0.25);
6199
+ }
6200
+ .sg-wrapper-less .popover.right > .arrow:after {
6201
+ content: " ";
6202
+ left: 1px;
6203
+ bottom: -10px;
6204
+ border-left-width: 0;
6205
+ border-right-color: #ffffff;
6206
+ }
6207
+ .sg-wrapper-less .popover.bottom > .arrow {
6208
+ left: 50%;
6209
+ margin-left: -11px;
6210
+ border-top-width: 0;
6211
+ border-bottom-color: #999999;
6212
+ border-bottom-color: rgba(0, 0, 0, 0.25);
6213
+ top: -11px;
6214
+ }
6215
+ .sg-wrapper-less .popover.bottom > .arrow:after {
6216
+ content: " ";
6217
+ top: 1px;
6218
+ margin-left: -10px;
6219
+ border-top-width: 0;
6220
+ border-bottom-color: #ffffff;
6221
+ }
6222
+ .sg-wrapper-less .popover.left > .arrow {
6223
+ top: 50%;
6224
+ right: -11px;
6225
+ margin-top: -11px;
6226
+ border-right-width: 0;
6227
+ border-left-color: #999999;
6228
+ border-left-color: rgba(0, 0, 0, 0.25);
6229
+ }
6230
+ .sg-wrapper-less .popover.left > .arrow:after {
6231
+ content: " ";
6232
+ right: 1px;
6233
+ border-right-width: 0;
6234
+ border-left-color: #ffffff;
6235
+ bottom: -10px;
6236
+ }
6237
+ .sg-wrapper-less .carousel {
6238
+ position: relative;
6239
+ }
6240
+ .sg-wrapper-less .carousel-inner {
6241
+ position: relative;
6242
+ overflow: hidden;
6243
+ width: 100%;
6244
+ }
6245
+ .sg-wrapper-less .carousel-inner > .item {
6246
+ display: none;
6247
+ position: relative;
6248
+ -webkit-transition: 0.6s ease-in-out left;
6249
+ -o-transition: 0.6s ease-in-out left;
6250
+ transition: 0.6s ease-in-out left;
6251
+ }
6252
+ .sg-wrapper-less .carousel-inner > .item > img,
6253
+ .sg-wrapper-less .carousel-inner > .item > a > img {
6254
+ line-height: 1;
6255
+ }
6256
+ @media all and (transform-3d), (-webkit-transform-3d) {
6257
+ .sg-wrapper-less .carousel-inner > .item {
6258
+ -webkit-transition: -webkit-transform 0.6s ease-in-out;
6259
+ -o-transition: -o-transform 0.6s ease-in-out;
6260
+ transition: transform 0.6s ease-in-out;
6261
+ -webkit-backface-visibility: hidden;
6262
+ backface-visibility: hidden;
6263
+ -webkit-perspective: 1000;
6264
+ perspective: 1000;
6265
+ }
6266
+ .sg-wrapper-less .carousel-inner > .item.next,
6267
+ .sg-wrapper-less .carousel-inner > .item.active.right {
6268
+ -webkit-transform: translate3d(100%, 0, 0);
6269
+ transform: translate3d(100%, 0, 0);
6270
+ left: 0;
6271
+ }
6272
+ .sg-wrapper-less .carousel-inner > .item.prev,
6273
+ .sg-wrapper-less .carousel-inner > .item.active.left {
6274
+ -webkit-transform: translate3d(-100%, 0, 0);
6275
+ transform: translate3d(-100%, 0, 0);
6276
+ left: 0;
6277
+ }
6278
+ .sg-wrapper-less .carousel-inner > .item.next.left,
6279
+ .sg-wrapper-less .carousel-inner > .item.prev.right,
6280
+ .sg-wrapper-less .carousel-inner > .item.active {
6281
+ -webkit-transform: translate3d(0, 0, 0);
6282
+ transform: translate3d(0, 0, 0);
6283
+ left: 0;
6284
+ }
6285
+ }
6286
+ .sg-wrapper-less .carousel-inner > .active,
6287
+ .sg-wrapper-less .carousel-inner > .next,
6288
+ .sg-wrapper-less .carousel-inner > .prev {
6289
+ display: block;
6290
+ }
6291
+ .sg-wrapper-less .carousel-inner > .active {
6292
+ left: 0;
6293
+ }
6294
+ .sg-wrapper-less .carousel-inner > .next,
6295
+ .sg-wrapper-less .carousel-inner > .prev {
6296
+ position: absolute;
6297
+ top: 0;
6298
+ width: 100%;
6299
+ }
6300
+ .sg-wrapper-less .carousel-inner > .next {
6301
+ left: 100%;
6302
+ }
6303
+ .sg-wrapper-less .carousel-inner > .prev {
6304
+ left: -100%;
6305
+ }
6306
+ .sg-wrapper-less .carousel-inner > .next.left,
6307
+ .sg-wrapper-less .carousel-inner > .prev.right {
6308
+ left: 0;
6309
+ }
6310
+ .sg-wrapper-less .carousel-inner > .active.left {
6311
+ left: -100%;
6312
+ }
6313
+ .sg-wrapper-less .carousel-inner > .active.right {
6314
+ left: 100%;
6315
+ }
6316
+ .sg-wrapper-less .carousel-control {
6317
+ position: absolute;
6318
+ top: 0;
6319
+ left: 0;
6320
+ bottom: 0;
6321
+ width: 15%;
6322
+ opacity: 0.5;
6323
+ filter: alpha(opacity=50);
6324
+ font-size: 20px;
6325
+ color: #ffffff;
6326
+ text-align: center;
6327
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
6328
+ }
6329
+ .sg-wrapper-less .carousel-control.left {
6330
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
6331
+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
6332
+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001)));
6333
+ background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
6334
+ background-repeat: repeat-x;
6335
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
6336
+ }
6337
+ .sg-wrapper-less .carousel-control.right {
6338
+ left: auto;
6339
+ right: 0;
6340
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
6341
+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
6342
+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5)));
6343
+ background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
6344
+ background-repeat: repeat-x;
6345
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
6346
+ }
6347
+ .sg-wrapper-less .carousel-control:hover,
6348
+ .sg-wrapper-less .carousel-control:focus {
6349
+ outline: 0;
6350
+ color: #ffffff;
6351
+ text-decoration: none;
6352
+ opacity: 0.9;
6353
+ filter: alpha(opacity=90);
6354
+ }
6355
+ .sg-wrapper-less .carousel-control .icon-prev,
6356
+ .sg-wrapper-less .carousel-control .icon-next,
6357
+ .sg-wrapper-less .carousel-control .glyphicon-chevron-left,
6358
+ .sg-wrapper-less .carousel-control .glyphicon-chevron-right {
6359
+ position: absolute;
6360
+ top: 50%;
6361
+ z-index: 5;
6362
+ display: inline-block;
6363
+ }
6364
+ .sg-wrapper-less .carousel-control .icon-prev,
6365
+ .sg-wrapper-less .carousel-control .glyphicon-chevron-left {
6366
+ left: 50%;
6367
+ margin-left: -10px;
6368
+ }
6369
+ .sg-wrapper-less .carousel-control .icon-next,
6370
+ .sg-wrapper-less .carousel-control .glyphicon-chevron-right {
6371
+ right: 50%;
6372
+ margin-right: -10px;
6373
+ }
6374
+ .sg-wrapper-less .carousel-control .icon-prev,
6375
+ .sg-wrapper-less .carousel-control .icon-next {
6376
+ width: 20px;
6377
+ height: 20px;
6378
+ margin-top: -10px;
6379
+ line-height: 1;
6380
+ font-family: serif;
6381
+ }
6382
+ .sg-wrapper-less .carousel-control .icon-prev:before {
6383
+ content: '\2039';
6384
+ }
6385
+ .sg-wrapper-less .carousel-control .icon-next:before {
6386
+ content: '\203a';
6387
+ }
6388
+ .sg-wrapper-less .carousel-indicators {
6389
+ position: absolute;
6390
+ bottom: 10px;
6391
+ left: 50%;
6392
+ z-index: 15;
6393
+ width: 60%;
6394
+ margin-left: -30%;
6395
+ padding-left: 0;
6396
+ list-style: none;
6397
+ text-align: center;
6398
+ }
6399
+ .sg-wrapper-less .carousel-indicators li {
6400
+ display: inline-block;
6401
+ width: 10px;
6402
+ height: 10px;
6403
+ margin: 1px;
6404
+ text-indent: -999px;
6405
+ border: 1px solid #ffffff;
6406
+ border-radius: 10px;
6407
+ cursor: pointer;
6408
+ background-color: #000 \9;
6409
+ background-color: rgba(0, 0, 0, 0);
6410
+ }
6411
+ .sg-wrapper-less .carousel-indicators .active {
6412
+ margin: 0;
6413
+ width: 12px;
6414
+ height: 12px;
6415
+ background-color: #ffffff;
6416
+ }
6417
+ .sg-wrapper-less .carousel-caption {
6418
+ position: absolute;
6419
+ left: 15%;
6420
+ right: 15%;
6421
+ bottom: 20px;
6422
+ z-index: 10;
6423
+ padding-top: 20px;
6424
+ padding-bottom: 20px;
6425
+ color: #ffffff;
6426
+ text-align: center;
6427
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
6428
+ }
6429
+ .sg-wrapper-less .carousel-caption .btn {
6430
+ text-shadow: none;
6431
+ }
6432
+ @media screen and (min-width: 768px) {
6433
+ .sg-wrapper-less .carousel-control .glyphicon-chevron-left,
6434
+ .sg-wrapper-less .carousel-control .glyphicon-chevron-right,
6435
+ .sg-wrapper-less .carousel-control .icon-prev,
6436
+ .sg-wrapper-less .carousel-control .icon-next {
6437
+ width: 30px;
6438
+ height: 30px;
6439
+ margin-top: -15px;
6440
+ font-size: 30px;
6441
+ }
6442
+ .sg-wrapper-less .carousel-control .glyphicon-chevron-left,
6443
+ .sg-wrapper-less .carousel-control .icon-prev {
6444
+ margin-left: -15px;
6445
+ }
6446
+ .sg-wrapper-less .carousel-control .glyphicon-chevron-right,
6447
+ .sg-wrapper-less .carousel-control .icon-next {
6448
+ margin-right: -15px;
6449
+ }
6450
+ .sg-wrapper-less .carousel-caption {
6451
+ left: 20%;
6452
+ right: 20%;
6453
+ padding-bottom: 30px;
6454
+ }
6455
+ .sg-wrapper-less .carousel-indicators {
6456
+ bottom: 20px;
6457
+ }
6458
+ }
6459
+ .sg-wrapper-less .clearfix:before,
6460
+ .sg-wrapper-less .clearfix:after,
6461
+ .sg-wrapper-less .dl-horizontal dd:before,
6462
+ .sg-wrapper-less .dl-horizontal dd:after,
6463
+ .sg-wrapper-less .container:before,
6464
+ .sg-wrapper-less .container:after,
6465
+ .sg-wrapper-less .container-fluid:before,
6466
+ .sg-wrapper-less .container-fluid:after,
6467
+ .sg-wrapper-less .row:before,
6468
+ .sg-wrapper-less .row:after,
6469
+ .sg-wrapper-less .form-horizontal .form-group:before,
6470
+ .sg-wrapper-less .form-horizontal .form-group:after,
6471
+ .sg-wrapper-less .btn-toolbar:before,
6472
+ .sg-wrapper-less .btn-toolbar:after,
6473
+ .sg-wrapper-less .btn-group-vertical > .btn-group:before,
6474
+ .sg-wrapper-less .btn-group-vertical > .btn-group:after,
6475
+ .sg-wrapper-less .nav:before,
6476
+ .sg-wrapper-less .nav:after,
6477
+ .sg-wrapper-less .navbar:before,
6478
+ .sg-wrapper-less .navbar:after,
6479
+ .sg-wrapper-less .navbar-header:before,
6480
+ .sg-wrapper-less .navbar-header:after,
6481
+ .sg-wrapper-less .navbar-collapse:before,
6482
+ .sg-wrapper-less .navbar-collapse:after,
6483
+ .sg-wrapper-less .pager:before,
6484
+ .sg-wrapper-less .pager:after,
6485
+ .sg-wrapper-less .panel-body:before,
6486
+ .sg-wrapper-less .panel-body:after,
6487
+ .sg-wrapper-less .modal-footer:before,
6488
+ .sg-wrapper-less .modal-footer:after {
6489
+ content: " ";
6490
+ display: table;
6491
+ }
6492
+ .sg-wrapper-less .clearfix:after,
6493
+ .sg-wrapper-less .dl-horizontal dd:after,
6494
+ .sg-wrapper-less .container:after,
6495
+ .sg-wrapper-less .container-fluid:after,
6496
+ .sg-wrapper-less .row:after,
6497
+ .sg-wrapper-less .form-horizontal .form-group:after,
6498
+ .sg-wrapper-less .btn-toolbar:after,
6499
+ .sg-wrapper-less .btn-group-vertical > .btn-group:after,
6500
+ .sg-wrapper-less .nav:after,
6501
+ .sg-wrapper-less .navbar:after,
6502
+ .sg-wrapper-less .navbar-header:after,
6503
+ .sg-wrapper-less .navbar-collapse:after,
6504
+ .sg-wrapper-less .pager:after,
6505
+ .sg-wrapper-less .panel-body:after,
6506
+ .sg-wrapper-less .modal-footer:after {
6507
+ clear: both;
6508
+ }
6509
+ .sg-wrapper-less .center-block {
6510
+ display: block;
6511
+ margin-left: auto;
6512
+ margin-right: auto;
6513
+ }
6514
+ .sg-wrapper-less .pull-right {
6515
+ float: right !important;
6516
+ }
6517
+ .sg-wrapper-less .pull-left {
6518
+ float: left !important;
6519
+ }
6520
+ .sg-wrapper-less .hide {
6521
+ display: none !important;
6522
+ }
6523
+ .sg-wrapper-less .show {
6524
+ display: block !important;
6525
+ }
6526
+ .sg-wrapper-less .invisible {
6527
+ visibility: hidden;
6528
+ }
6529
+ .sg-wrapper-less .text-hide {
6530
+ font: 0/0 a;
6531
+ color: transparent;
6532
+ text-shadow: none;
6533
+ background-color: transparent;
6534
+ border: 0;
6535
+ }
6536
+ .sg-wrapper-less .hidden {
6537
+ display: none !important;
6538
+ }
6539
+ .sg-wrapper-less .affix {
6540
+ position: fixed;
6541
+ }
6542
+ @-ms-viewport {
6543
+ width: device-width;
6544
+ }
6545
+ .sg-wrapper-less .visible-xs,
6546
+ .sg-wrapper-less .visible-sm,
6547
+ .sg-wrapper-less .visible-md,
6548
+ .sg-wrapper-less .visible-lg {
6549
+ display: none !important;
6550
+ }
6551
+ .sg-wrapper-less .visible-xs-block,
6552
+ .sg-wrapper-less .visible-xs-inline,
6553
+ .sg-wrapper-less .visible-xs-inline-block,
6554
+ .sg-wrapper-less .visible-sm-block,
6555
+ .sg-wrapper-less .visible-sm-inline,
6556
+ .sg-wrapper-less .visible-sm-inline-block,
6557
+ .sg-wrapper-less .visible-md-block,
6558
+ .sg-wrapper-less .visible-md-inline,
6559
+ .sg-wrapper-less .visible-md-inline-block,
6560
+ .sg-wrapper-less .visible-lg-block,
6561
+ .sg-wrapper-less .visible-lg-inline,
6562
+ .sg-wrapper-less .visible-lg-inline-block {
6563
+ display: none !important;
6564
+ }
6565
+ @media (max-width: 767px) {
6566
+ .sg-wrapper-less .visible-xs {
6567
+ display: block !important;
6568
+ }
6569
+ .sg-wrapper-less table.visible-xs {
6570
+ display: table;
6571
+ }
6572
+ .sg-wrapper-less tr.visible-xs {
6573
+ display: table-row !important;
6574
+ }
6575
+ .sg-wrapper-less th.visible-xs,
6576
+ .sg-wrapper-less td.visible-xs {
6577
+ display: table-cell !important;
6578
+ }
6579
+ }
6580
+ @media (max-width: 767px) {
6581
+ .sg-wrapper-less .visible-xs-block {
6582
+ display: block !important;
6583
+ }
6584
+ }
6585
+ @media (max-width: 767px) {
6586
+ .sg-wrapper-less .visible-xs-inline {
6587
+ display: inline !important;
6588
+ }
6589
+ }
6590
+ @media (max-width: 767px) {
6591
+ .sg-wrapper-less .visible-xs-inline-block {
6592
+ display: inline-block !important;
6593
+ }
6594
+ }
6595
+ @media (min-width: 768px) and (max-width: 991px) {
6596
+ .sg-wrapper-less .visible-sm {
6597
+ display: block !important;
6598
+ }
6599
+ .sg-wrapper-less table.visible-sm {
6600
+ display: table;
6601
+ }
6602
+ .sg-wrapper-less tr.visible-sm {
6603
+ display: table-row !important;
6604
+ }
6605
+ .sg-wrapper-less th.visible-sm,
6606
+ .sg-wrapper-less td.visible-sm {
6607
+ display: table-cell !important;
6608
+ }
6609
+ }
6610
+ @media (min-width: 768px) and (max-width: 991px) {
6611
+ .sg-wrapper-less .visible-sm-block {
6612
+ display: block !important;
6613
+ }
6614
+ }
6615
+ @media (min-width: 768px) and (max-width: 991px) {
6616
+ .sg-wrapper-less .visible-sm-inline {
6617
+ display: inline !important;
6618
+ }
6619
+ }
6620
+ @media (min-width: 768px) and (max-width: 991px) {
6621
+ .sg-wrapper-less .visible-sm-inline-block {
6622
+ display: inline-block !important;
6623
+ }
6624
+ }
6625
+ @media (min-width: 992px) and (max-width: 1199px) {
6626
+ .sg-wrapper-less .visible-md {
6627
+ display: block !important;
6628
+ }
6629
+ .sg-wrapper-less table.visible-md {
6630
+ display: table;
6631
+ }
6632
+ .sg-wrapper-less tr.visible-md {
6633
+ display: table-row !important;
6634
+ }
6635
+ .sg-wrapper-less th.visible-md,
6636
+ .sg-wrapper-less td.visible-md {
6637
+ display: table-cell !important;
6638
+ }
6639
+ }
6640
+ @media (min-width: 992px) and (max-width: 1199px) {
6641
+ .sg-wrapper-less .visible-md-block {
6642
+ display: block !important;
6643
+ }
6644
+ }
6645
+ @media (min-width: 992px) and (max-width: 1199px) {
6646
+ .sg-wrapper-less .visible-md-inline {
6647
+ display: inline !important;
6648
+ }
6649
+ }
6650
+ @media (min-width: 992px) and (max-width: 1199px) {
6651
+ .sg-wrapper-less .visible-md-inline-block {
6652
+ display: inline-block !important;
6653
+ }
6654
+ }
6655
+ @media (min-width: 1200px) {
6656
+ .sg-wrapper-less .visible-lg {
6657
+ display: block !important;
6658
+ }
6659
+ .sg-wrapper-less table.visible-lg {
6660
+ display: table;
6661
+ }
6662
+ .sg-wrapper-less tr.visible-lg {
6663
+ display: table-row !important;
6664
+ }
6665
+ .sg-wrapper-less th.visible-lg,
6666
+ .sg-wrapper-less td.visible-lg {
6667
+ display: table-cell !important;
6668
+ }
6669
+ }
6670
+ @media (min-width: 1200px) {
6671
+ .sg-wrapper-less .visible-lg-block {
6672
+ display: block !important;
6673
+ }
6674
+ }
6675
+ @media (min-width: 1200px) {
6676
+ .sg-wrapper-less .visible-lg-inline {
6677
+ display: inline !important;
6678
+ }
6679
+ }
6680
+ @media (min-width: 1200px) {
6681
+ .sg-wrapper-less .visible-lg-inline-block {
6682
+ display: inline-block !important;
6683
+ }
6684
+ }
6685
+ @media (max-width: 767px) {
6686
+ .sg-wrapper-less .hidden-xs {
6687
+ display: none !important;
6688
+ }
6689
+ }
6690
+ @media (min-width: 768px) and (max-width: 991px) {
6691
+ .sg-wrapper-less .hidden-sm {
6692
+ display: none !important;
6693
+ }
6694
+ }
6695
+ @media (min-width: 992px) and (max-width: 1199px) {
6696
+ .sg-wrapper-less .hidden-md {
6697
+ display: none !important;
6698
+ }
6699
+ }
6700
+ @media (min-width: 1200px) {
6701
+ .sg-wrapper-less .hidden-lg {
6702
+ display: none !important;
6703
+ }
6704
+ }
6705
+ .sg-wrapper-less .visible-print {
6706
+ display: none !important;
6707
+ }
6708
+ @media print {
6709
+ .sg-wrapper-less .visible-print {
6710
+ display: block !important;
6711
+ }
6712
+ .sg-wrapper-less table.visible-print {
6713
+ display: table;
6714
+ }
6715
+ .sg-wrapper-less tr.visible-print {
6716
+ display: table-row !important;
6717
+ }
6718
+ .sg-wrapper-less th.visible-print,
6719
+ .sg-wrapper-less td.visible-print {
6720
+ display: table-cell !important;
6721
+ }
6722
+ }
6723
+ .sg-wrapper-less .visible-print-block {
6724
+ display: none !important;
6725
+ }
6726
+ @media print {
6727
+ .sg-wrapper-less .visible-print-block {
6728
+ display: block !important;
6729
+ }
6730
+ }
6731
+ .sg-wrapper-less .visible-print-inline {
6732
+ display: none !important;
6733
+ }
6734
+ @media print {
6735
+ .sg-wrapper-less .visible-print-inline {
6736
+ display: inline !important;
6737
+ }
6738
+ }
6739
+ .sg-wrapper-less .visible-print-inline-block {
6740
+ display: none !important;
6741
+ }
6742
+ @media print {
6743
+ .sg-wrapper-less .visible-print-inline-block {
6744
+ display: inline-block !important;
6745
+ }
6746
+ }
6747
+ @media print {
6748
+ .sg-wrapper-less .hidden-print {
6749
+ display: none !important;
6750
+ }
6751
+ }
6752
+ .sg-wrapper-less .navbar-inverse .badge {
6753
+ background-color: #fff;
6754
+ color: #2780e3;
6755
+ }
6756
+ .sg-wrapper-less body {
6757
+ -webkit-font-smoothing: antialiased;
6758
+ }
6759
+ .sg-wrapper-less .text-primary,
6760
+ .sg-wrapper-less .text-primary:hover {
6761
+ color: #2780e3;
6762
+ }
6763
+ .sg-wrapper-less .text-success,
6764
+ .sg-wrapper-less .text-success:hover {
6765
+ color: #3fb618;
6766
+ }
6767
+ .sg-wrapper-less .text-danger,
6768
+ .sg-wrapper-less .text-danger:hover {
6769
+ color: #ff0039;
6770
+ }
6771
+ .sg-wrapper-less .text-warning,
6772
+ .sg-wrapper-less .text-warning:hover {
6773
+ color: #ff7518;
6774
+ }
6775
+ .sg-wrapper-less .text-info,
6776
+ .sg-wrapper-less .text-info:hover {
6777
+ color: #9954bb;
6778
+ }
6779
+ .sg-wrapper-less table a:not(.btn),
6780
+ .sg-wrapper-less .table a:not(.btn) {
6781
+ text-decoration: underline;
6782
+ }
6783
+ .sg-wrapper-less table .dropdown-menu a,
6784
+ .sg-wrapper-less .table .dropdown-menu a {
6785
+ text-decoration: none;
6786
+ }
6787
+ .sg-wrapper-less table .success,
6788
+ .sg-wrapper-less .table .success,
6789
+ .sg-wrapper-less table .warning,
6790
+ .sg-wrapper-less .table .warning,
6791
+ .sg-wrapper-less table .danger,
6792
+ .sg-wrapper-less .table .danger,
6793
+ .sg-wrapper-less table .info,
6794
+ .sg-wrapper-less .table .info {
6795
+ color: #fff;
6796
+ }
6797
+ .sg-wrapper-less table .success a,
6798
+ .sg-wrapper-less .table .success a,
6799
+ .sg-wrapper-less table .warning a,
6800
+ .sg-wrapper-less .table .warning a,
6801
+ .sg-wrapper-less table .danger a,
6802
+ .sg-wrapper-less .table .danger a,
6803
+ .sg-wrapper-less table .info a,
6804
+ .sg-wrapper-less .table .info a {
6805
+ color: #fff;
6806
+ }
6807
+ .sg-wrapper-less .has-warning .help-block,
6808
+ .sg-wrapper-less .has-warning .control-label,
6809
+ .sg-wrapper-less .has-warning .form-control-feedback {
6810
+ color: #ff7518;
6811
+ }
6812
+ .sg-wrapper-less .has-warning .form-control,
6813
+ .sg-wrapper-less .has-warning .form-control:focus,
6814
+ .sg-wrapper-less .has-warning .input-group-addon {
6815
+ border: 1px solid #ff7518;
6816
+ }
6817
+ .sg-wrapper-less .has-error .help-block,
6818
+ .sg-wrapper-less .has-error .control-label,
6819
+ .sg-wrapper-less .has-error .form-control-feedback {
6820
+ color: #ff0039;
6821
+ }
6822
+ .sg-wrapper-less .has-error .form-control,
6823
+ .sg-wrapper-less .has-error .form-control:focus,
6824
+ .sg-wrapper-less .has-error .input-group-addon {
6825
+ border: 1px solid #ff0039;
6826
+ }
6827
+ .sg-wrapper-less .has-success .help-block,
6828
+ .sg-wrapper-less .has-success .control-label,
6829
+ .sg-wrapper-less .has-success .form-control-feedback {
6830
+ color: #3fb618;
6831
+ }
6832
+ .sg-wrapper-less .has-success .form-control,
6833
+ .sg-wrapper-less .has-success .form-control:focus,
6834
+ .sg-wrapper-less .has-success .input-group-addon {
6835
+ border: 1px solid #3fb618;
6836
+ }
6837
+ .sg-wrapper-less .nav-pills > li > a {
6838
+ border-radius: 0;
6839
+ }
6840
+ .sg-wrapper-less .dropdown-menu > li > a:hover,
6841
+ .sg-wrapper-less .dropdown-menu > li > a:focus {
6842
+ background-image: none;
6843
+ }
6844
+ .sg-wrapper-less .close {
6845
+ text-decoration: none;
6846
+ text-shadow: none;
6847
+ opacity: 0.4;
6848
+ }
6849
+ .sg-wrapper-less .close:hover,
6850
+ .sg-wrapper-less .close:focus {
6851
+ opacity: 1;
6852
+ }
6853
+ .sg-wrapper-less .alert {
6854
+ border: none;
6855
+ }
6856
+ .sg-wrapper-less .alert .alert-link {
6857
+ text-decoration: underline;
6858
+ color: #fff;
6859
+ }
6860
+ .sg-wrapper-less .label {
6861
+ border-radius: 0;
6862
+ }
6863
+ .sg-wrapper-less .progress {
6864
+ height: 8px;
6865
+ -webkit-box-shadow: none;
6866
+ box-shadow: none;
6867
+ }
6868
+ .sg-wrapper-less .progress .progress-bar {
6869
+ font-size: 8px;
6870
+ line-height: 8px;
6871
+ }
6872
+ .sg-wrapper-less .panel-heading,
6873
+ .sg-wrapper-less .panel-footer {
6874
+ border-top-right-radius: 0;
6875
+ border-top-left-radius: 0;
6876
+ }
6877
+ .sg-wrapper-less .panel-default .close {
6878
+ color: #333333;
6879
+ }
6880
+ .sg-wrapper-less a.list-group-item-success.active {
6881
+ background-color: #3fb618;
6882
+ }
6883
+ .sg-wrapper-less a.list-group-item-success.active:hover,
6884
+ .sg-wrapper-less a.list-group-item-success.active:focus {
6885
+ background-color: #379f15;
6886
+ }
6887
+ .sg-wrapper-less a.list-group-item-warning.active {
6888
+ background-color: #ff7518;
6889
+ }
6890
+ .sg-wrapper-less a.list-group-item-warning.active:hover,
6891
+ .sg-wrapper-less a.list-group-item-warning.active:focus {
6892
+ background-color: #fe6600;
6893
+ }
6894
+ .sg-wrapper-less a.list-group-item-danger.active {
6895
+ background-color: #ff0039;
6896
+ }
6897
+ .sg-wrapper-less a.list-group-item-danger.active:hover,
6898
+ .sg-wrapper-less a.list-group-item-danger.active:focus {
6899
+ background-color: #e60033;
6900
+ }
6901
+ .sg-wrapper-less .modal .close {
6902
+ color: #333333;
6903
+ }
6904
+ .sg-wrapper-less .popover {
6905
+ color: #333333;
6906
+ }
6907
+ .sg-wrapper-less .btn-file {
6908
+ position: relative;
6909
+ overflow: hidden;
6910
+ }
6911
+ .sg-wrapper-less .btn-file input[type=file] {
6912
+ position: absolute;
6913
+ top: 0;
6914
+ right: 0;
6915
+ min-width: 100%;
6916
+ min-height: 100%;
6917
+ font-size: 100px;
6918
+ text-align: right;
6919
+ filter: alpha(opacity=0);
6920
+ opacity: 0;
6921
+ outline: none;
6922
+ background: white;
6923
+ cursor: inherit;
6924
+ display: block;
6925
+ }
6926
+ .sg-wrapper-less select {
6927
+ background: #ffffff url("../../media/BackupGuardFree/img/sgselect.png") no-repeat !important;
6928
+ background-size: 24px 20px;
6929
+ background-position: right center !important;
6930
+ color: #888;
6931
+ outline: none;
6932
+ display: inline-block;
6933
+ -webkit-appearance: none;
6934
+ -moz-appearance: none;
6935
+ appearance: none;
6936
+ cursor: pointer;
6937
+ }
6938
+ .sg-wrapper-less #sg-wrapper {
6939
+ width: 100%;
6940
+ min-width: 650px;
6941
+ border: 1px #5c5c5c solid;
6942
+ background-color: #333333;
6943
+ }
6944
+ .sg-wrapper-less #sg-sidebar-wrapper {
6945
+ width: 210px;
6946
+ float: left;
6947
+ }
6948
+ .sg-wrapper-less #sg-content-wrapper {
6949
+ position: relative;
6950
+ float: left;
6951
+ width: calc(100% - 210px);
6952
+ /*Same as sidebar*/
6953
+ border-left: 1px #333333 solid;
6954
+ min-height: 450px;
6955
+ background-color: #ffffff;
6956
+ }
6957
+ .sg-wrapper-less #sg-content-wrapper .container-fluid {
6958
+ min-height: 380px;
6959
+ margin-top: 15px;
6960
+ }
6961
+ .sg-wrapper-less .metro .sidebar {
6962
+ margin: 0;
6963
+ padding: 0;
6964
+ background-color: #3D3D3D;
6965
+ width: 100%;
6966
+ /*height: 100%;*/
6967
+ }
6968
+ .sg-wrapper-less .metro .sidebar > ul {
6969
+ margin: 0;
6970
+ padding: 0;
6971
+ list-style: none;
6972
+ }
6973
+ .sg-wrapper-less .metro .sidebar > ul li {
6974
+ display: block;
6975
+ border: 0;
6976
+ border-bottom: 1px #5c5c5c solid;
6977
+ position: relative;
6978
+ }
6979
+ .sg-wrapper-less .metro .sidebar > ul li.title {
6980
+ padding: 20px 20px 10px 20px;
6981
+ font-weight: 300;
6982
+ letter-spacing: 0.00em;
6983
+ font-size: 2.5rem;
6984
+ line-height: 2.5rem;
6985
+ letter-spacing: 0.01em;
6986
+ color: #000000;
6987
+ font-size: 2.2rem;
6988
+ line-height: 2.2rem;
6989
+ color: #ffffff;
6990
+ height: 170px;
6991
+ background-image: url("../../media/BackupGuardFree/img/sglogo.png");
6992
+ background-size: 172px 85px;
6993
+ background-repeat: no-repeat;
6994
+ background-position: center 40px;
6995
+ }
6996
+ .sg-wrapper-less .metro .sidebar > ul li a {
6997
+ display: block;
6998
+ position: relative;
6999
+ padding: 10px 20px;
7000
+ text-decoration: none;
7001
+ color: #eeeeee;
7002
+ background-color: #3D3D3D;
7003
+ }
7004
+ .sg-wrapper-less .metro .sidebar > ul li a:hover {
7005
+ background-color: #262626;
7006
+ color: #ffffff;
7007
+ }
7008
+ .sg-wrapper-less .metro .sidebar > ul li a.dropdown-toggle:after {
7009
+ right: 10px;
7010
+ bottom: 5px;
7011
+ }
7012
+ .sg-wrapper-less .metro .sidebar > ul li a [class*="icon-"] {
7013
+ margin-right: 15px;
7014
+ }
7015
+ .sg-wrapper-less .metro .sidebar > ul li.stick {
7016
+ position: relative;
7017
+ }
7018
+ .sg-wrapper-less .metro .sidebar > ul li.stick:before {
7019
+ content: "";
7020
+ position: absolute;
7021
+ width: 7px;
7022
+ height: 40px;
7023
+ left: -7px;
7024
+ text-indent: -9999px;
7025
+ border-top-left-radius: 5px;
7026
+ border-bottom-left-radius: 5px;
7027
+ background-color: inherit;
7028
+ }
7029
+ .sg-wrapper-less .metro .sidebar > ul li.disabled a {
7030
+ background-color: #8a8a8a;
7031
+ cursor: default;
7032
+ color: #555555;
7033
+ }
7034
+ .sg-wrapper-less .metro .sidebar > ul li.active a {
7035
+ background-color: #9a1616;
7036
+ color: #ffffff;
7037
+ }
7038
+ .sg-wrapper-less .metro .sidebar > ul ul {
7039
+ margin: 0;
7040
+ padding: 0;
7041
+ list-style: none;
7042
+ position: absolute;
7043
+ display: none;
7044
+ z-index: 1000;
7045
+ background: #ffffff;
7046
+ min-width: 220px;
7047
+ width: auto;
7048
+ border: 1px solid #dcddde;
7049
+ box-shadow: none;
7050
+ position: relative !important;
7051
+ background-color: #e5e5e5;
7052
+ min-width: 100%;
7053
+ }
7054
+ .sg-wrapper-less .metro .sidebar > ul ul li {
7055
+ display: block;
7056
+ margin: 10px 0;
7057
+ padding: 0;
7058
+ vertical-align: baseline;
7059
+ position: relative;
7060
+ font-family: 'Segoe UI_', 'Open Sans', Verdana, Arial, Helvetica, sans-serif;
7061
+ }
7062
+ .sg-wrapper-less .metro .sidebar > ul ul li a {
7063
+ display: block;
7064
+ text-decoration: none;
7065
+ font-family: 'Segoe UI Light_', 'Open Sans Light', Verdana, Arial, Helvetica, sans-serif;
7066
+ font-weight: 300;
7067
+ letter-spacing: 0.00em;
7068
+ font-size: 2.5rem;
7069
+ line-height: 2.5rem;
7070
+ letter-spacing: 0.01em;
7071
+ color: #000000;
7072
+ line-height: 2.2rem;
7073
+ font-size: 2.2rem;
7074
+ color: inherit;
7075
+ }
7076
+ .sg-wrapper-less .metro .sidebar > ul ul li.title {
7077
+ font-family: 'Segoe UI Light_', 'Open Sans Light', Verdana, Arial, Helvetica, sans-serif;
7078
+ font-weight: 300;
7079
+ color: #000000;
7080
+ letter-spacing: 0.00em;
7081
+ font-size: 2.5rem;
7082
+ line-height: 2.5rem;
7083
+ letter-spacing: 0.01em;
7084
+ font-size: 4rem;
7085
+ margin-bottom: 20px;
7086
+ }
7087
+ .sg-wrapper-less .metro .sidebar > ul ul.compact a {
7088
+ font-weight: normal;
7089
+ font-size: 10.5pt;
7090
+ line-height: 12pt;
7091
+ color: inherit;
7092
+ }
7093
+ .sg-wrapper-less .metro .sidebar > ul ul.compact li.title {
7094
+ margin-bottom: 10px;
7095
+ font-family: 'Segoe UI Semibold_', 'Open Sans Bold', Verdana, Arial, Helvetica, sans-serif;
7096
+ font-weight: bold;
7097
+ color: #000000;
7098
+ font-size: 1.6rem;
7099
+ line-height: 1.6rem;
7100
+ letter-spacing: 0.02em;
7101
+ }
7102
+ .sg-wrapper-less .metro .sidebar > ul ul ul.secondary {
7103
+ margin: 0;
7104
+ padding: 0;
7105
+ list-style: none;
7106
+ margin-left: 15px;
7107
+ }
7108
+ .sg-wrapper-less .metro .sidebar > ul ul ul.secondary li a {
7109
+ font-family: 'Segoe UI Semibold_', 'Open Sans Bold', Verdana, Arial, Helvetica, sans-serif;
7110
+ font-weight: bold;
7111
+ color: #000000;
7112
+ font-size: 1.6rem;
7113
+ line-height: 1.6rem;
7114
+ letter-spacing: 0.02em;
7115
+ font-weight: normal;
7116
+ font-style: normal;
7117
+ line-height: 1.4rem;
7118
+ color: inherit;
7119
+ }
7120
+ .sg-wrapper-less .metro .sidebar > ul ul.shadow {
7121
+ box-shadow: 3px 3px 0 rgba(236, 236, 236, 0.7);
7122
+ }
7123
+ .sg-wrapper-less .metro .sidebar > ul ul li {
7124
+ margin: 5px 0 0;
7125
+ width: 100%;
7126
+ border: 1px transparent solid;
7127
+ }
7128
+ .sg-wrapper-less .metro .sidebar > ul ul li:last-child {
7129
+ margin-bottom: 5px;
7130
+ }
7131
+ .sg-wrapper-less .metro .sidebar > ul ul li.disabled,
7132
+ .sg-wrapper-less .metro .sidebar > ul ul li.disabled:hover {
7133
+ cursor: default !important;
7134
+ background: transparent !important;
7135
+ color: #eeeeee;
7136
+ }
7137
+ .sg-wrapper-less .metro .sidebar > ul ul li.disabled a,
7138
+ .sg-wrapper-less .metro .sidebar > ul ul li.disabled:hover a {
7139
+ color: inherit;
7140
+ cursor: inherit;
7141
+ background: inherit;
7142
+ }
7143
+ .sg-wrapper-less .metro .sidebar > ul ul a {
7144
+ padding: 8px 32px !important;
7145
+ color: inherit;
7146
+ font-size: 15px !important;
7147
+ line-height: 14px !important;
7148
+ cursor: pointer;
7149
+ }
7150
+ .sg-wrapper-less .metro .sidebar > ul ul li:hover {
7151
+ background: #edf4fc;
7152
+ border-color: #a8d2fd;
7153
+ }
7154
+ .sg-wrapper-less .metro .sidebar > ul ul li.checked a:before,
7155
+ .sg-wrapper-less .metro .sidebar > ul ul li.checked-partial a:before,
7156
+ .sg-wrapper-less .metro .sidebar > ul ul li.unchecked a:before {
7157
+ font-family: metroSysIcons;
7158
+ position: absolute;
7159
+ left: 10px;
7160
+ content: "\e004";
7161
+ }
7162
+ .sg-wrapper-less .metro .sidebar > ul ul li.checked-partial a:before {
7163
+ content: "\e005";
7164
+ }
7165
+ .sg-wrapper-less .metro .sidebar > ul ul li.unchecked a:before {
7166
+ content: "\e005";
7167
+ }
7168
+ .sg-wrapper-less .metro .sidebar > ul ul.place-right {
7169
+ right: -15px;
7170
+ left: auto;
7171
+ }
7172
+ .sg-wrapper-less .metro .sidebar > ul ul .divider {
7173
+ padding: 0;
7174
+ height: 1px;
7175
+ margin: 9px 1px;
7176
+ overflow: hidden;
7177
+ background-color: #e5e5e5;
7178
+ border-width: 0;
7179
+ }
7180
+ .sg-wrapper-less .metro .sidebar > ul ul .divider:hover {
7181
+ background: #e5e5e5;
7182
+ }
7183
+ .sg-wrapper-less .metro .sidebar > ul ul.open {
7184
+ display: block !important;
7185
+ }
7186
+ .sg-wrapper-less .metro .sidebar > ul ul .dropdown-menu {
7187
+ left: 100%;
7188
+ top: -10%;
7189
+ }
7190
+ .sg-wrapper-less .metro .sidebar > ul ul > li:hover > .dropdown-menu[data-show="hover"] {
7191
+ display: block;
7192
+ }
7193
+ .sg-wrapper-less .metro .sidebar > ul ul > li > a.dropdown-toggle:after {
7194
+ font-family: metroSysIcons;
7195
+ font-size: .7em;
7196
+ content: "\e001";
7197
+ left: 90%;
7198
+ top: 50%;
7199
+ margin-top: -1.4em;
7200
+ -webkit-transform: rotate(-90deg);
7201
+ -moz-transform: rotate(-90deg);
7202
+ -ms-transform: rotate(-90deg);
7203
+ -o-transform: rotate(-90deg);
7204
+ transform: rotate(-90deg);
7205
+ }
7206
+ .sg-wrapper-less .metro .sidebar > ul ul.drop-left {
7207
+ left: -100%;
7208
+ }
7209
+ .sg-wrapper-less .metro .sidebar > ul ul.drop-up {
7210
+ top: auto;
7211
+ bottom: 0;
7212
+ }
7213
+ .sg-wrapper-less .metro .sidebar > ul ul .menu-title {
7214
+ background-color: #f6f7f8;
7215
+ font-size: 12px;
7216
+ line-height: 14px;
7217
+ padding: 4px 8px;
7218
+ border: 0;
7219
+ border-bottom: 1px #dcddde solid;
7220
+ border-top: 1px #dcddde solid;
7221
+ color: #646464;
7222
+ }
7223
+ .sg-wrapper-less .metro .sidebar > ul ul .menu-title:first-child {
7224
+ margin: 0;
7225
+ border-top-width: 0;
7226
+ }
7227
+ .sg-wrapper-less .metro .sidebar > ul ul .menu-title:first-child:hover {
7228
+ border-top-width: 0;
7229
+ }
7230
+ .sg-wrapper-less .metro .sidebar > ul ul .menu-title:hover {
7231
+ background-color: #f6f7f8;
7232
+ cursor: default;
7233
+ border: 0;
7234
+ border-bottom: 1px #dcddde solid;
7235
+ border-top: 1px #dcddde solid;
7236
+ }
7237
+ .sg-wrapper-less .metro .sidebar > ul ul.inverse {
7238
+ border: 2px #3b3b3b solid;
7239
+ }
7240
+ .sg-wrapper-less .metro .sidebar > ul ul.inverse li {
7241
+ border: 0;
7242
+ }
7243
+ .sg-wrapper-less .metro .sidebar > ul ul.inverse li a {
7244
+ padding: 9px 32px !important;
7245
+ }
7246
+ .sg-wrapper-less .metro .sidebar > ul ul.inverse li:hover {
7247
+ border: 0;
7248
+ background-color: #e5e5e5;
7249
+ }
7250
+ .sg-wrapper-less .metro .sidebar > ul ul.inverse .menu-title:hover {
7251
+ background-color: #f6f7f8;
7252
+ }
7253
+ .sg-wrapper-less .metro .sidebar > ul ul.inverse .divider {
7254
+ margin-left: 0;
7255
+ margin-right: 0;
7256
+ }
7257
+ .sg-wrapper-less .metro .sidebar > ul ul.dark {
7258
+ background-color: #333333;
7259
+ border: 2px #333333 solid;
7260
+ color: #ffffff;
7261
+ }
7262
+ .sg-wrapper-less .metro .sidebar > ul ul.dark.opacity {
7263
+ background-color: rgba(61, 61, 61, 0.9);
7264
+ }
7265
+ .sg-wrapper-less .metro .sidebar > ul ul.dark li {
7266
+ border: 0;
7267
+ color: inherit;
7268
+ }
7269
+ .sg-wrapper-less .metro .sidebar > ul ul.dark li a {
7270
+ padding: 9px 32px !important;
7271
+ color: inherit;
7272
+ }
7273
+ .sg-wrapper-less .metro .sidebar > ul ul.dark li.disabled,
7274
+ .sg-wrapper-less .metro .sidebar > ul ul.dark li.disabled:hover {
7275
+ cursor: default !important;
7276
+ background: transparent !important;
7277
+ color: #555555;
7278
+ }
7279
+ .sg-wrapper-less .metro .sidebar > ul ul.dark li.disabled a,
7280
+ .sg-wrapper-less .metro .sidebar > ul ul.dark li.disabled:hover a {
7281
+ color: inherit;
7282
+ cursor: inherit;
7283
+ background: inherit;
7284
+ }
7285
+ .sg-wrapper-less .metro .sidebar > ul ul.dark li:hover {
7286
+ border: 0;
7287
+ background-color: #201a1a;
7288
+ color: #ffffff;
7289
+ }
7290
+ .sg-wrapper-less .metro .sidebar > ul ul.dark .menu-title {
7291
+ background-color: #3b3b3b;
7292
+ }
7293
+ .sg-wrapper-less .metro .sidebar > ul ul.dark .menu-title:hover {
7294
+ background-color: #3b3b3b;
7295
+ }
7296
+ .sg-wrapper-less .metro .sidebar > ul ul.dark .divider {
7297
+ margin-left: 0;
7298
+ margin-right: 0;
7299
+ background-color: #555555;
7300
+ }
7301
+ .sg-wrapper-less .metro .sidebar > ul ul.dark .divider:hover {
7302
+ background: #555555;
7303
+ }
7304
+ .sg-wrapper-less .metro .sidebar > ul ul li {
7305
+ border: 0;
7306
+ }
7307
+ .sg-wrapper-less .metro .sidebar > ul ul li a {
7308
+ background-color: #e5e5e5;
7309
+ }
7310
+ .sg-wrapper-less .metro .sidebar > ul ul li.divider {
7311
+ background-color: #c2c2c2;
7312
+ }
7313
+ .sg-wrapper-less .metro .sidebar > ul ul li.divider:hover {
7314
+ background-color: #c2c2c2;
7315
+ }
7316
+ .sg-wrapper-less .metro .sidebar > ul ul li.disabled a {
7317
+ color: #999999;
7318
+ }
7319
+ .sg-wrapper-less .metro .sidebar > ul ul li.disabled a:hover {
7320
+ color: #999999;
7321
+ }
7322
+ .sg-wrapper-less .metro .sidebar > ul ul.open {
7323
+ display: block;
7324
+ }
7325
+ .sg-wrapper-less .metro .sidebar.light {
7326
+ background-color: #ffffff;
7327
+ }
7328
+ .sg-wrapper-less .metro .sidebar.light li {
7329
+ border-bottom-color: #eeeeee;
7330
+ }
7331
+ .sg-wrapper-less .metro .sidebar.light li.title {
7332
+ color: #1d1d1d;
7333
+ }
7334
+ .sg-wrapper-less .metro .sidebar.light li a {
7335
+ color: #1d1d1d;
7336
+ background-color: #ffffff;
7337
+ }
7338
+ .sg-wrapper-less .metro .sidebar.light li a:hover {
7339
+ background-color: #00aff0;
7340
+ }
7341
+ .sg-wrapper-less .metro .sidebar.light li ul {
7342
+ background-color: #ffffff;
7343
+ border: 1px transparent solid;
7344
+ }
7345
+ .sg-wrapper-less .metro .sidebar.light li .divider {
7346
+ background-color: #eeeeee;
7347
+ }
7348
+ .sg-wrapper-less .metro .sidebar.light li .divider:hover {
7349
+ background-color: #eeeeee;
7350
+ }
7351
+ .sg-wrapper-less .metro .sidebar.light li.disabled a {
7352
+ background-color: #ffffff;
7353
+ cursor: default;
7354
+ color: #999999;
7355
+ }
7356
+ .sg-wrapper-less .metro .sidebar.light li.active a {
7357
+ background-color: #1ba1e2;
7358
+ color: #ffffff;
7359
+ }
7360
+ .sg-wrapper-less .sg-site-url {
7361
+ width: 100%;
7362
+ height: 100%;
7363
+ background-color: transparent !important;
7364
+ }
7365
+ .sg-wrapper-less .sg-footer {
7366
+ text-align: center;
7367
+ border-top: 1px #eaeaea solid;
7368
+ height: 45px;
7369
+ }
7370
+ .sg-wrapper-less .sg-footer .row {
7371
+ margin-left: 0;
7372
+ margin-right: 0;
7373
+ }
7374
+ .sg-wrapper-less .sg-footer .sg-version {
7375
+ position: absolute;
7376
+ right: 5px;
7377
+ }
7378
+ .sg-wrapper-less .sg-checkbox .checkbox,
7379
+ .sg-wrapper-less .sg-custom-backup .checkbox {
7380
+ padding-top: 2px;
7381
+ min-height: 10px;
7382
+ }
7383
+ .sg-wrapper-less .sg-close,
7384
+ .sg-wrapper-less .sg-custom-backup,
7385
+ .sg-wrapper-less .sg-custom-backup-files,
7386
+ .sg-wrapper-less .sg-custom-backup-cloud,
7387
+ .sg-wrapper-less .sg-schedule-settings-closed {
7388
+ display: none;
7389
+ }
7390
+ .sg-wrapper-less .sg-open {
7391
+ display: block;
7392
+ }
7393
+ .sg-wrapper-less .sg-switch-container {
7394
+ margin-top: 7px;
7395
+ }
7396
+ .sg-wrapper-less .sg-schedule-settings-opened {
7397
+ display: block;
7398
+ }
7399
+ .sg-wrapper-less .sg-custom-backup-schedule .checkbox:not:first-child {
7400
+ padding-top: 0 !important;
7401
+ }
7402
+ .sg-wrapper-less .sg-general-settings {
7403
+ display: none;
7404
+ }
7405
+ .sg-wrapper-less .sg-progress {
7406
+ height: 2px;
7407
+ margin: 0;
7408
+ margin-top: 1px;
7409
+ }
7410
+ .sg-wrapper-less #sg-status-tabe-data {
7411
+ padding: 7px;
7412
+ }
7413
+ .sg-wrapper-less .sg-status-icon {
7414
+ display: inline-block;
7415
+ width: 20px;
7416
+ height: 20px;
7417
+ background-image: url('../../media/BackupGuardFree/img/backup-icons.png');
7418
+ background-repeat: no-repeat;
7419
+ background-size: 220px 40px;
7420
+ }
7421
+ @media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min--moz-device-pixel-ratio: 1.5), only screen and (min-resolution: 240dpi) {
7422
+ .sg-wrapper-less .sg-status-icon {
7423
+ background-image: url('../../media/BackupGuardFree/img/backup-icons@2x.png');
7424
+ }
7425
+ }
7426
+ .sg-wrapper-less .sg-status-1 {
7427
+ background-position: -20px -20px;
7428
+ }
7429
+ .sg-wrapper-less .sg-status-1.active {
7430
+ background-position: -20px 0px;
7431
+ }
7432
+ .sg-wrapper-less .sg-status-2 {
7433
+ background-position: 0px -20px;
7434
+ }
7435
+ .sg-wrapper-less .sg-status-2.active {
7436
+ background-position: 0px 0px;
7437
+ }
7438
+ .sg-wrapper-less .sg-status-31 {
7439
+ background-position: -140px -20px;
7440
+ }
7441
+ .sg-wrapper-less .sg-status-31.active {
7442
+ background-position: -140px 0px;
7443
+ }
7444
+ .sg-wrapper-less .sg-status-32 {
7445
+ background-position: -40px -20px;
7446
+ }
7447
+ .sg-wrapper-less .sg-status-32.active {
7448
+ background-position: -40px 0px;
7449
+ }
7450
+ .sg-wrapper-less .sg-status-33 {
7451
+ background-position: -60px -20px;
7452
+ }
7453
+ .sg-wrapper-less .sg-status-33.active {
7454
+ background-position: -60px 0px;
7455
+ }
7456
+ .sg-wrapper-less .sg-status-22 {
7457
+ background-position: -180px -20px;
7458
+ }
7459
+ .sg-wrapper-less .sg-status-22.active {
7460
+ background-position: -180px 0px;
7461
+ }
7462
+ .sg-wrapper-less .sg-status-21 {
7463
+ background-position: -200px -20px;
7464
+ }
7465
+ .sg-wrapper-less .sg-status-21.active {
7466
+ background-position: -200px 0px;
7467
+ }
7468
+ .sg-wrapper-less .sg-helper-block {
7469
+ font-size: 12px;
7470
+ padding-left: 0px;
7471
+ text-align: left;
7472
+ display: block;
7473
+ margin-top: 0;
7474
+ }
7475
+ .sg-wrapper-less .sg-control-label {
7476
+ text-align: left;
7477
+ margin-bottom: 0;
7478
+ margin-top: 4px;
7479
+ }
7480
+ .sg-wrapper-less .sg-upload-label {
7481
+ padding-left: 0px;
7482
+ padding-top: 12px;
7483
+ }
7484
+ .sg-wrapper-less .sg-modal-body {
7485
+ max-height: calc(100vh - 210px);
7486
+ overflow-y: auto;
7487
+ }
7488
+ .sg-wrapper-less .sg-justify {
7489
+ text-align: justify;
7490
+ }
7491
+ .sg-wrapper-less #sg-save-cloud-folder {
7492
+ margin-left: 5px;
7493
+ display: none;
7494
+ }
7495
+ .sg-wrapper-less .sg-alert-pro {
7496
+ color: white;
7497
+ padding: 20px;
7498
+ text-align: center;
7499
+ margin-top: 20px;
7500
+ }
7501
+
7502
+ /**/
7503
+ .dismiss-button {
7504
+ float: right;
7505
+ }
skin/adminhtml/base/default/css/BackupGuardFree/bootstrap.css CHANGED
@@ -266,8 +266,8 @@ th {
266
  }
267
  @font-face {
268
  font-family: 'Glyphicons Halflings';
269
- src: url('../../media/BackupGuardFree/fonts/glyphicons-halflings-regular.eot');
270
- src: url('../../media/BackupGuardFree/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../../media/BackupGuardFree/fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../../media/BackupGuardFree/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../../media/BackupGuardFree/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../../media/BackupGuardFree/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
271
  }
272
  .glyphicon {
273
  position: relative;
266
  }
267
  @font-face {
268
  font-family: 'Glyphicons Halflings';
269
+ src: url('../../media/BackupGuard/fonts/glyphicons-halflings-regular.eot');
270
+ src: url('../../media/BackupGuard/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../../media/BackupGuard/fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../../media/BackupGuard/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../../media/BackupGuard/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../../media/BackupGuard/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
271
  }
272
  .glyphicon {
273
  position: relative;
skin/adminhtml/base/default/css/BackupGuardFree/fonts.css CHANGED
@@ -3,7 +3,7 @@
3
  font-family: 'Source Sans Pro';
4
  font-style: normal;
5
  font-weight: 300;
6
- src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../../media/BackupGuardFree/fonts/toadOcfmlt9b38dHJxOBGCD5K6T8I4oZ1X3Xvlj_UeP3rGVtsTkPsbDajuO5ueQw.woff2') format('woff2');
7
  unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;
8
  }
9
  /* latin-ext */
@@ -11,7 +11,7 @@
11
  font-family: 'Source Sans Pro';
12
  font-style: normal;
13
  font-weight: 300;
14
- src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../../media/BackupGuardFree/fonts/toadOcfmlt9b38dHJxOBGDOFnJNygIkrHciC8BWzbCz3rGVtsTkPsbDajuO5ueQw.woff2') format('woff2');
15
  unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
16
  }
17
  /* latin */
@@ -19,7 +19,7 @@
19
  font-family: 'Source Sans Pro';
20
  font-style: normal;
21
  font-weight: 300;
22
- src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../../media/BackupGuardFree/fonts/toadOcfmlt9b38dHJxOBGCP2LEk6lMzYsRqr3dHFImA.woff2') format('woff2');
23
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
24
  }
25
  /* vietnamese */
@@ -27,7 +27,7 @@
27
  font-family: 'Source Sans Pro';
28
  font-style: normal;
29
  font-weight: 400;
30
- src: local('Source Sans Pro'), local('SourceSansPro-Regular'), url('../../media/BackupGuardFree/fonts/ODelI1aHBYDBqgeIAH2zlCxe5Tewm2_XWfbGchcXw4g.woff2') format('woff2');
31
  unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;
32
  }
33
  /* latin-ext */
@@ -35,7 +35,7 @@
35
  font-family: 'Source Sans Pro';
36
  font-style: normal;
37
  font-weight: 400;
38
- src: local('Source Sans Pro'), local('SourceSansPro-Regular'), url('../../media/BackupGuardFree/fonts/ODelI1aHBYDBqgeIAH2zlIa1YDtoarzwSXxTHggEXMw.woff2') format('woff2');
39
  unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
40
  }
41
  /* latin */
@@ -43,7 +43,7 @@
43
  font-family: 'Source Sans Pro';
44
  font-style: normal;
45
  font-weight: 400;
46
- src: local('Source Sans Pro'), local('SourceSansPro-Regular'), url('../../media/BackupGuardFree/fonts/ODelI1aHBYDBqgeIAH2zlJbPFduIYtoLzwST68uhz_Y.woff2') format('woff2');
47
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
48
  }
49
  /* vietnamese */
@@ -51,7 +51,7 @@
51
  font-family: 'Source Sans Pro';
52
  font-style: normal;
53
  font-weight: 700;
54
- src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../../media/BackupGuardFree/fonts/toadOcfmlt9b38dHJxOBGMms7UHsIbjUxEJqIwog-i_3rGVtsTkPsbDajuO5ueQw.woff2') format('woff2');
55
  unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;
56
  }
57
  /* latin-ext */
@@ -59,7 +59,7 @@
59
  font-family: 'Source Sans Pro';
60
  font-style: normal;
61
  font-weight: 700;
62
- src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../../media/BackupGuardFree/fonts/toadOcfmlt9b38dHJxOBGO4s1Ux4PuImWPk5fSr6HPL3rGVtsTkPsbDajuO5ueQw.woff2') format('woff2');
63
  unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
64
  }
65
  /* latin */
@@ -67,6 +67,6 @@
67
  font-family: 'Source Sans Pro';
68
  font-style: normal;
69
  font-weight: 700;
70
- src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../../media/BackupGuardFree/fonts/toadOcfmlt9b38dHJxOBGJkF8H8ye47wsfpWywda8og.woff2') format('woff2');
71
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
72
  }
3
  font-family: 'Source Sans Pro';
4
  font-style: normal;
5
  font-weight: 300;
6
+ src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../../media/BackupGuard/fonts/toadOcfmlt9b38dHJxOBGCD5K6T8I4oZ1X3Xvlj_UeP3rGVtsTkPsbDajuO5ueQw.woff2') format('woff2');
7
  unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;
8
  }
9
  /* latin-ext */
11
  font-family: 'Source Sans Pro';
12
  font-style: normal;
13
  font-weight: 300;
14
+ src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../../media/BackupGuard/fonts/toadOcfmlt9b38dHJxOBGDOFnJNygIkrHciC8BWzbCz3rGVtsTkPsbDajuO5ueQw.woff2') format('woff2');
15
  unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
16
  }
17
  /* latin */
19
  font-family: 'Source Sans Pro';
20
  font-style: normal;
21
  font-weight: 300;
22
+ src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../../media/BackupGuard/fonts/toadOcfmlt9b38dHJxOBGCP2LEk6lMzYsRqr3dHFImA.woff2') format('woff2');
23
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
24
  }
25
  /* vietnamese */
27
  font-family: 'Source Sans Pro';
28
  font-style: normal;
29
  font-weight: 400;
30
+ src: local('Source Sans Pro'), local('SourceSansPro-Regular'), url('../../media/BackupGuard/fonts/ODelI1aHBYDBqgeIAH2zlCxe5Tewm2_XWfbGchcXw4g.woff2') format('woff2');
31
  unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;
32
  }
33
  /* latin-ext */
35
  font-family: 'Source Sans Pro';
36
  font-style: normal;
37
  font-weight: 400;
38
+ src: local('Source Sans Pro'), local('SourceSansPro-Regular'), url('../../media/BackupGuard/fonts/ODelI1aHBYDBqgeIAH2zlIa1YDtoarzwSXxTHggEXMw.woff2') format('woff2');
39
  unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
40
  }
41
  /* latin */
43
  font-family: 'Source Sans Pro';
44
  font-style: normal;
45
  font-weight: 400;
46
+ src: local('Source Sans Pro'), local('SourceSansPro-Regular'), url('../../media/BackupGuard/fonts/ODelI1aHBYDBqgeIAH2zlJbPFduIYtoLzwST68uhz_Y.woff2') format('woff2');
47
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
48
  }
49
  /* vietnamese */
51
  font-family: 'Source Sans Pro';
52
  font-style: normal;
53
  font-weight: 700;
54
+ src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../../media/BackupGuard/fonts/toadOcfmlt9b38dHJxOBGMms7UHsIbjUxEJqIwog-i_3rGVtsTkPsbDajuO5ueQw.woff2') format('woff2');
55
  unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;
56
  }
57
  /* latin-ext */
59
  font-family: 'Source Sans Pro';
60
  font-style: normal;
61
  font-weight: 700;
62
+ src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../../media/BackupGuard/fonts/toadOcfmlt9b38dHJxOBGO4s1Ux4PuImWPk5fSr6HPL3rGVtsTkPsbDajuO5ueQw.woff2') format('woff2');
63
  unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
64
  }
65
  /* latin */
67
  font-family: 'Source Sans Pro';
68
  font-style: normal;
69
  font-weight: 700;
70
+ src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../../media/BackupGuard/fonts/toadOcfmlt9b38dHJxOBGJkF8H8ye47wsfpWywda8og.woff2') format('woff2');
71
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
72
  }
skin/adminhtml/base/default/css/BackupGuardFree/main.css CHANGED
@@ -20,7 +20,7 @@
20
  }
21
 
22
  select {
23
- background: #fff url("../../media/BackupGuardFree/img/sgselect.png") no-repeat !important;
24
  background-size: 24px 20px;
25
  background-position:right center !important;
26
  color:#888;
@@ -86,7 +86,7 @@ select {
86
  line-height: 2.2rem;
87
  color: #ffffff;
88
  height: 170px;
89
- background-image: url("../../media/BackupGuardFree/img/sglogo.png");
90
  background-size: 172px 85px;
91
  background-repeat: no-repeat;
92
  background-position: center 40px;
@@ -510,7 +510,7 @@ select {
510
  display: inline-block;
511
  width: 20px;
512
  height: 20px;
513
- background-image: url('../../media/BackupGuardFree/img/backup-icons.png');
514
  background-repeat: no-repeat;
515
  background-size: 220px 40px;
516
  }
@@ -518,7 +518,7 @@ select {
518
  only screen and (min--moz-device-pixel-ratio: 1.5),
519
  only screen and (min-resolution: 240dpi) {
520
  .sg-status-icon {
521
- background-image: url('../../media/BackupGuardFree/img/backup-icons@2x.png');
522
  }
523
  }
524
  .sg-status-1{
@@ -601,4 +601,4 @@ only screen and (min-resolution: 240dpi) {
601
  padding: 20px;
602
  text-align: center;
603
  margin-top: 20px;
604
- }
20
  }
21
 
22
  select {
23
+ background: #fff url("../../media/BackupGuard/img/sgselect.png") no-repeat !important;
24
  background-size: 24px 20px;
25
  background-position:right center !important;
26
  color:#888;
86
  line-height: 2.2rem;
87
  color: #ffffff;
88
  height: 170px;
89
+ background-image: url("../../media/BackupGuard/img/sglogo.png");
90
  background-size: 172px 85px;
91
  background-repeat: no-repeat;
92
  background-position: center 40px;
510
  display: inline-block;
511
  width: 20px;
512
  height: 20px;
513
+ background-image: url('../../media/BackupGuard/img/backup-icons.png');
514
  background-repeat: no-repeat;
515
  background-size: 220px 40px;
516
  }
518
  only screen and (min--moz-device-pixel-ratio: 1.5),
519
  only screen and (min-resolution: 240dpi) {
520
  .sg-status-icon {
521
+ background-image: url('../../media/BackupGuard/img/backup-icons@2x.png');
522
  }
523
  }
524
  .sg-status-1{
601
  padding: 20px;
602
  text-align: center;
603
  margin-top: 20px;
604
+ }
skin/adminhtml/base/default/css/BackupGuardFree/sgstyles.less DELETED
@@ -1,5 +0,0 @@
1
- .sg-wrapper-less {
2
- @import (less) 'fonts.css?v=1.3';
3
- @import (less) 'bootstrap.css?v=1.16';
4
- @import (less) 'main.css?v=1.07';
5
- }
 
 
 
 
 
skin/adminhtml/base/default/css/BackupGuardFree/spinner.css CHANGED
@@ -7,6 +7,6 @@
7
  background-color: transparent;
8
  width: 32px;
9
  height: 32px;
10
- background-image: url('../../media/BackupGuardFree/img/sg-ajax-loader.gif');
11
  background-repeat: no-repeat;
12
  }
7
  background-color: transparent;
8
  width: 32px;
9
  height: 32px;
10
+ background-image: url('../../media/BackupGuard/img/sg-ajax-loader.gif');
11
  background-repeat: no-repeat;
12
  }
skin/adminhtml/base/default/js/BackupGuardFree/main.js CHANGED
@@ -1,8 +1,15 @@
1
  sgBackup = {};
2
  sgBackup.isModalOpen = false;
3
  SG_CURRENT_ACTIVE_AJAX = '';
 
 
4
  jQuery(document).ready( function() {
5
  sgBackup.init();
 
 
 
 
 
6
  });
7
 
8
  //SG init
@@ -106,9 +113,5 @@ sgBackup.hideAjaxSpinner = function(){
106
  jQuery('.sg-spinner').remove();
107
  };
108
 
109
- less.pageLoadFinished.then(
110
- function() {
111
- jQuery('#sg-wrapper').show();
112
- jQuery('.sg-spinner').remove();
113
- }
114
- );
1
  sgBackup = {};
2
  sgBackup.isModalOpen = false;
3
  SG_CURRENT_ACTIVE_AJAX = '';
4
+ SG_NOTICE_EXECUTION_TIMEOUT = 'timeoutError';
5
+
6
  jQuery(document).ready( function() {
7
  sgBackup.init();
8
+ jQuery('.dismiss-button').on('click', function(){
9
+ jQuery('#timeout-error-msg').hide();
10
+ var dismissHandler = new sgRequestHandler('hideNotice',{notice: SG_NOTICE_EXECUTION_TIMEOUT});
11
+ dismissHandler.run();
12
+ });
13
  });
14
 
15
  //SG init
113
  jQuery('.sg-spinner').remove();
114
  };
115
 
116
+ jQuery('#sg-wrapper').show();
117
+ jQuery('.sg-spinner').remove();