diff --git a/.gitignore b/.gitignore index 67ef85d9..c669bc09 100644 --- a/.gitignore +++ b/.gitignore @@ -1,12 +1,12 @@ # Local Config -/public/include/config/global.inc.php -/public/include/config/security.inc.php +/include/config/global.inc.php +/include/config/security.inc.php # Templates -/public/templates/compile/*.php -/public/templates/compile/** -/public/templates/cache/*.php -/public/templates/cache/** +/templates/compile/*.php +/templates/compile/** +/templates/cache/*.php +/templates/cache/** # Logs /cronjobs/logs @@ -14,8 +14,8 @@ /logs/* # Test configs -public/include/config/global.inc.scrypt.php -public/include/config/global.inc.sha.php +/include/config/global.inc.scrypt.php +/include/config/global.inc.sha.php # IDE Settings /.idea/* diff --git a/.htaccess b/.htaccess index d71420f8..6fb22ef2 100644 --- a/.htaccess +++ b/.htaccess @@ -1,3 +1,10 @@ ErrorDocument 404 /public/index.php?page=error&action=404 RedirectMatch 404 /logs(/|$) -Options -Indexes \ No newline at end of file +RedirectMatch 404 /templates(/|$) +RedirectMatch 404 /include(/|$) +RedirectMatch 404 /scripts(/|$) +RedirectMatch 404 /sql(/|$) +RedirectMatch 404 /upgrade(/|$) +RedirectMatch 404 /cronjobs(/|$) +RedirectMatch 404 /tests(/|$) +Options -Indexes diff --git a/cronjobs/logs/README.md b/cronjobs/logs/README.md deleted file mode 100644 index 864999fd..00000000 --- a/cronjobs/logs/README.md +++ /dev/null @@ -1 +0,0 @@ -Logging directory for cronjobs. diff --git a/cronjobs/payouts.php b/cronjobs/payouts.php index 5b9caa73..23f20e71 100755 --- a/cronjobs/payouts.php +++ b/cronjobs/payouts.php @@ -69,9 +69,9 @@ if ($setting->getValue('disable_manual_payouts') != 1 && $aManualPayouts) { foreach ($aManualPayouts as $aUserData) $dMPTotalAmount += $aUserData['confirmed']; if ($dMPTotalAmount > $dWalletBalance) { $log->logError(" Wallet does not cover MP payouts - Payout: " . $dMPTotalAmount . " - Balance: " . $dWalletBalance); - $monitoring->endCronjob($cron_name, 'E0079', 0, true); + $monitoring->endCronjob($cron_name, 'E0079', 1, true); } - + $log->logInfo("Manual Payout Sum: " . $dMPTotalAmount . " | Liquid Assets: " . $dWalletBalance . " | Wallet Balance: " . ($dWalletBalance + $dBlocksUnconfirmedBalance) . " | Unconfirmed: " . $dBlocksUnconfirmedBalance); $log->logInfo(' found ' . count($aManualPayouts) . ' queued manual payouts'); $mask = ' | %-10.10s | %-25.25s | %-20.20s | %-40.40s | %-20.20s |'; @@ -156,9 +156,9 @@ if ($setting->getValue('disable_auto_payouts') != 1 && $aAutoPayouts) { foreach ($aAutoPayouts as $aUserData) $dAPTotalAmount += $aUserData['confirmed']; if ($dAPTotalAmount > $dWalletBalance) { $log->logError(" Wallet does not cover AP payouts - Payout: " . $dAPTotalAmount . " - Balance: " . $dWalletBalance); - $monitoring->endCronjob($cron_name, 'E0079', 0, true); + $monitoring->endCronjob($cron_name, 'E0079', 1, true); } - + $log->logInfo("Auto Payout Sum: " . $dAPTotalAmount . " | Liquid Assets: " . $dWalletBalance . " | Wallet Balance: " . ($dWalletBalance + $dBlocksUnconfirmedBalance) . " | Unconfirmed: " . $dBlocksUnconfirmedBalance); $log->logInfo(' found ' . count($aAutoPayouts) . ' queued auto payouts'); $mask = ' | %-10.10s | %-25.25s | %-20.20s | %-40.40s | %-20.20s |'; diff --git a/cronjobs/pplns_payout.php b/cronjobs/pplns_payout.php index c256b279..093be4ce 100755 --- a/cronjobs/pplns_payout.php +++ b/cronjobs/pplns_payout.php @@ -115,16 +115,16 @@ foreach ($aAllBlocks as $iIndex => $aBlock) { // Add archived shares to users current shares, if we have any in archive if (is_array($aArchiveShares)) { $log->logDebug('Found shares in archive to match PPLNS target, calculating per-user shares'); - $strLogMask = "| %-20.20s | %15.15s | %15.15s | %15.15s | %15.15s | %15.15s | %15.15s |"; - $log->logDebug(sprintf($strLogMask, 'Username', 'Round Valid', 'Archive Valid', 'Total Valid', 'Round Invalid', 'Archive Invalid', 'Total Invalid')); + $strLogMask = "| %5.5s | %-20.20s | %15.15s | %15.15s | %15.15s | %15.15s | %15.15s | %15.15s |"; + $log->logDebug(sprintf($strLogMask, 'ID', 'Username', 'Round Valid', 'Archive Valid', 'Total Valid', 'Round Invalid', 'Archive Invalid', 'Total Invalid')); foreach($aAccountShares as $key => $aData) { - if (array_key_exists($aData['username'], $aArchiveShares)) { - $log->logDebug(sprintf($strLogMask, $aData['username'], - $aAccountShares[$key]['valid'], $aArchiveShares[$aData['username']]['valid'], ($aAccountShares[$key]['valid'] + $aArchiveShares[$aData['username']]['valid']), - $aAccountShares[$key]['invalid'], $aArchiveShares[$aData['username']]['invalid'], ($aAccountShares[$key]['invalid'] + $aArchiveShares[$aData['username']]['invalid'])) + if (array_key_exists(strtolower($aData['username']), $aArchiveShares)) { + $log->logDebug(sprintf($strLogMask, $aData['id'], $aData['username'], + $aAccountShares[$key]['valid'], $aArchiveShares[strtolower($aData['username'])]['valid'], ($aAccountShares[$key]['valid'] + $aArchiveShares[strtolower($aData['username'])]['valid']), + $aAccountShares[$key]['invalid'], $aArchiveShares[strtolower($aData['username'])]['invalid'], ($aAccountShares[$key]['invalid'] + $aArchiveShares[strtolower($aData['username'])]['invalid'])) ); - $aAccountShares[$key]['valid'] += $aArchiveShares[$aData['username']]['valid']; - $aAccountShares[$key]['invalid'] += $aArchiveShares[$aData['username']]['invalid']; + $aAccountShares[$key]['valid'] += $aArchiveShares[strtolower($aData['username'])]['valid']; + $aAccountShares[$key]['invalid'] += $aArchiveShares[strtolower($aData['username'])]['invalid']; } } // reverse payout @@ -132,13 +132,13 @@ foreach ($aAllBlocks as $iIndex => $aBlock) { $log->logDebug('Reverse payout enabled, adding shelved shares for all users'); $aSharesData = NULL; foreach($aAccountShares as $key => $aData) { - $aSharesData[$aData['username']] = $aData; + $aSharesData[strtolower($aData['username'])] = $aData; } // Add users from archive not in current round $strLogMask = "| %-20.20s | %15.15s | %15.15s |"; $log->logDebug(sprintf($strLogMask, 'Username', 'Shelved Valid', 'Shelved Invalid')); foreach($aArchiveShares as $key => $aArchData) { - if (!array_key_exists($aArchData['account'], $aSharesData)) { + if (!array_key_exists(strtolower($aArchData['account']), $aSharesData)) { $log->logDebug(sprintf($strLogMask, $aArchData['account'], $aArchData['valid'], $aArchData['invalid'])); $aArchData['username'] = $aArchData['account']; $aSharesData[$aArchData['account']] = $aArchData; diff --git a/cronjobs/shared.inc.php b/cronjobs/shared.inc.php index 2fb96531..f26e692b 100644 --- a/cronjobs/shared.inc.php +++ b/cronjobs/shared.inc.php @@ -35,7 +35,7 @@ if (SECHASH_CHECK) { // MODIFY THIS // We need to find our include files so set this properly -define("BASEPATH", "../public/"); +define("BASEPATH", dirname(__FILE__) . "/"); /***************************************************** * No need to change beyond this point * @@ -48,14 +48,8 @@ $dStartTime = microtime(true); $cron_name = basename($_SERVER['PHP_SELF'], '.php'); // Include our configuration (holding defines for the requires) -require_once(BASEPATH . 'include/config/global.inc.dist.php'); -require_once(BASEPATH . 'include/config/global.inc.php'); - -require_once(BASEPATH . 'include/config/security.inc.dist.php'); -@include_once(BASEPATH . 'include/config/security.inc.php'); - -require_once(BASEPATH . 'include/bootstrap.php'); -require_once(BASEPATH . 'include/version.inc.php'); +require_once(BASEPATH . '../include/bootstrap.php'); +require_once(BASEPATH . '../include/version.inc.php'); // Command line switches array_shift($argv); @@ -69,7 +63,7 @@ foreach ($argv as $option) { } // Load 3rd party logging library for running crons -$log = KLogger::instance( 'logs/' . $cron_name, KLogger::INFO ); +$log = KLogger::instance( BASEPATH . '../logs/' . $cron_name, KLogger::INFO ); $log->LogDebug('Starting ' . $cron_name); // Load the start time for later runtime calculations for monitoring diff --git a/public/include/admin_checks.php b/include/admin_checks.php similarity index 98% rename from public/include/admin_checks.php rename to include/admin_checks.php index 179d873a..4ae439a7 100644 --- a/public/include/admin_checks.php +++ b/include/admin_checks.php @@ -53,10 +53,10 @@ if (@$_SESSION['USERDATA']['is_admin'] && $user->isAdmin(@$_SESSION['USERDATA'][ } // check if we can write templates/cache and templates/compile -> error - if (!is_writable(THEME_DIR.'/cache')) { + if (!is_writable(TEMPLATE_DIR . '/cache')) { $error[] = "templates/cache folder is not writable for uid {$apache_user['name']}"; } - if (!is_writable(THEME_DIR.'/compile')) { + if (!is_writable(TEMPLATE_DIR . '/compile')) { $error[] = "templates/compile folder is not writable for uid {$apache_user['name']}"; } diff --git a/public/include/autoloader.inc.php b/include/autoloader.inc.php similarity index 96% rename from public/include/autoloader.inc.php rename to include/autoloader.inc.php index c81a4812..4d14e17e 100644 --- a/public/include/autoloader.inc.php +++ b/include/autoloader.inc.php @@ -17,6 +17,8 @@ require_once(INCLUDE_DIR . '/config/error_codes.inc.php'); require_once(CLASS_DIR . '/base.class.php'); require_once(CLASS_DIR . '/coins/coin_base.class.php'); require_once(CLASS_DIR . '/setting.class.php'); +require_once(INCLUDE_DIR . '/version.inc.php'); +if (PHP_OS == 'WINNT') require_once(CLASS_DIR . '/memcached.class.php'); // Now decide on which coin class to load and instantiate if (file_exists(CLASS_DIR . '/coins/coin_' . $config['algorithm'] . '.class.php')) { diff --git a/public/include/bootstrap.php b/include/bootstrap.php similarity index 58% rename from public/include/bootstrap.php rename to include/bootstrap.php index fe6a9d02..0e286a53 100644 --- a/public/include/bootstrap.php +++ b/include/bootstrap.php @@ -3,20 +3,20 @@ $defflip = (!cfip()) ? exit(header('HTTP/1.1 401 Unauthorized')) : 1; // Used for performance calculations $dStartTime = microtime(true); -define('INCLUDE_DIR', BASEPATH . 'include'); +define('INCLUDE_DIR', BASEPATH . '../include'); define('CLASS_DIR', INCLUDE_DIR . '/classes'); define('PAGES_DIR', INCLUDE_DIR . '/pages'); -define('THEME_DIR', BASEPATH . 'templates'); +define('TEMPLATE_DIR', BASEPATH . '../templates'); $quickstartlink = "Quick Start Guide"; // Include our configuration (holding defines for the requires) -if (!include_once(BASEPATH . 'include/config/global.inc.dist.php')) die('Unable to load base global config from ['.BASEPATH . 'include/config/global.inc.dist.php' . '] - '.$quickstartlink); -if (!@include_once(BASEPATH . 'include/config/global.inc.php')) die('Unable to load your global config from ['.BASEPATH . 'include/config/global.inc.php' . '] - '.$quickstartlink); +if (!include_once(INCLUDE_DIR . '/config/global.inc.dist.php')) die('Unable to load base global config from ['.INCLUDE_DIR. '/config/global.inc.dist.php' . '] - '.$quickstartlink); +if (!@include_once(INCLUDE_DIR . '/config/global.inc.php')) die('Unable to load your global config from ['.INCLUDE_DIR. '/config/global.inc.php' . '] - '.$quickstartlink); // load our security configs -if (!include_once(BASEPATH . 'include/config/security.inc.dist.php')) die('Unable to load base security config from ['.BASEPATH . 'include/config/security.inc.dist.php' . '] - '.$quickstartlink); -if (@file_exists(BASEPATH . 'include/config/security.inc.php')) include_once(BASEPATH . 'include/config/security.inc.php'); +if (!include_once(INCLUDE_DIR . '/config/security.inc.dist.php')) die('Unable to load base security config from ['.INCLUDE_DIR. '/config/security.inc.dist.php' . '] - '.$quickstartlink); +if (@file_exists(INCLUDE_DIR . '/config/security.inc.php')) include_once(INCLUDE_DIR . '/config/security.inc.php'); // start our session, we need it for smarty caching session_set_cookie_params(time()+$config['cookie']['duration'], $config['cookie']['path'], $config['cookie']['domain'], $config['cookie']['secure'], $config['cookie']['httponly']); @@ -29,6 +29,14 @@ if (!$session_start) { } @setcookie(session_name(), session_id(), time()+$config['cookie']['duration'], $config['cookie']['path'], $config['cookie']['domain'], $config['cookie']['secure'], $config['cookie']['httponly']); +// Set the timezone if a user has it set, default UTC +if (isset($_SESSION['USERDATA']['timezone'])) { + $aTimezones = DateTimeZone::listIdentifiers(); + date_default_timezone_set($aTimezones[$_SESSION['USERDATA']['timezone']]); +} else { + date_default_timezone_set('UTC'); +} + // Our default template to load, pages can overwrite this later $master_template = 'master.tpl'; @@ -36,4 +44,4 @@ $master_template = 'master.tpl'; // We include all needed files here, even though our templates could load them themself require_once(INCLUDE_DIR . '/autoloader.inc.php'); -?> \ No newline at end of file +?> diff --git a/public/include/classes/api.class.php b/include/classes/api.class.php similarity index 100% rename from public/include/classes/api.class.php rename to include/classes/api.class.php diff --git a/public/include/classes/base.class.php b/include/classes/base.class.php similarity index 100% rename from public/include/classes/base.class.php rename to include/classes/base.class.php diff --git a/public/include/classes/bitcoin.class.php b/include/classes/bitcoin.class.php similarity index 100% rename from public/include/classes/bitcoin.class.php rename to include/classes/bitcoin.class.php diff --git a/public/include/classes/bitcoinwrapper.class.php b/include/classes/bitcoinwrapper.class.php similarity index 100% rename from public/include/classes/bitcoinwrapper.class.php rename to include/classes/bitcoinwrapper.class.php diff --git a/public/include/classes/block.class.php b/include/classes/block.class.php similarity index 100% rename from public/include/classes/block.class.php rename to include/classes/block.class.php diff --git a/public/include/classes/coins/coin_base.class.php b/include/classes/coins/coin_base.class.php similarity index 100% rename from public/include/classes/coins/coin_base.class.php rename to include/classes/coins/coin_base.class.php diff --git a/public/include/classes/coins/coin_scrypt.class.php b/include/classes/coins/coin_scrypt.class.php similarity index 100% rename from public/include/classes/coins/coin_scrypt.class.php rename to include/classes/coins/coin_scrypt.class.php diff --git a/include/classes/coins/coin_scryptn.class.php b/include/classes/coins/coin_scryptn.class.php new file mode 100644 index 00000000..db588f61 --- /dev/null +++ b/include/classes/coins/coin_scryptn.class.php @@ -0,0 +1,16 @@ + diff --git a/public/include/classes/coins/coin_sha256d.class.php b/include/classes/coins/coin_sha256d.class.php similarity index 100% rename from public/include/classes/coins/coin_sha256d.class.php rename to include/classes/coins/coin_sha256d.class.php diff --git a/include/classes/coins/coin_x11.class.php b/include/classes/coins/coin_x11.class.php new file mode 100644 index 00000000..6e356be3 --- /dev/null +++ b/include/classes/coins/coin_x11.class.php @@ -0,0 +1,13 @@ + diff --git a/public/include/classes/csrftoken.class.php b/include/classes/csrftoken.class.php similarity index 97% rename from public/include/classes/csrftoken.class.php rename to include/classes/csrftoken.class.php index 13e20955..4a3c8269 100644 --- a/public/include/classes/csrftoken.class.php +++ b/include/classes/csrftoken.class.php @@ -82,7 +82,7 @@ class CSRFToken Extends Base { * @return string HTML image with description */ public static function getDescriptionImageHTML($dowhat="try") { - $string = "setUser($user); $csrftoken->setToken($oToken); $csrftoken->setConfig($config); $csrftoken->setErrorCodes($aErrorCodes); -?> \ No newline at end of file +?> diff --git a/public/include/classes/debug.class.php b/include/classes/debug.class.php similarity index 100% rename from public/include/classes/debug.class.php rename to include/classes/debug.class.php diff --git a/public/include/classes/invitation.class.php b/include/classes/invitation.class.php similarity index 100% rename from public/include/classes/invitation.class.php rename to include/classes/invitation.class.php diff --git a/public/include/classes/logger.class.php b/include/classes/logger.class.php similarity index 97% rename from public/include/classes/logger.class.php rename to include/classes/logger.class.php index eb7b30e5..0283798d 100644 --- a/public/include/classes/logger.class.php +++ b/include/classes/logger.class.php @@ -5,7 +5,7 @@ class Logger { private $logging = false; public function __construct($config) { if ($config['logging']['enabled'] && $config['logging']['level'] > 0) { - $this->KLogger = KLogger::instance($config['logging']['path'], $config['logging']['level']); + $this->KLogger = KLogger::instance($config['logging']['path'] . '/website', $config['logging']['level']); $this->logging = true; $this->floatStartTime = microtime(true); } diff --git a/public/include/classes/mail.class.php b/include/classes/mail.class.php similarity index 93% rename from public/include/classes/mail.class.php rename to include/classes/mail.class.php index d3375402..a60359bd 100644 --- a/public/include/classes/mail.class.php +++ b/include/classes/mail.class.php @@ -74,8 +74,8 @@ class Mail extends Base { } // Prepare the smarty templates used - $this->smarty->clearCache(BASEPATH . 'templates/mail/' . $template . '.tpl'); - $this->smarty->clearCache(BASEPATH . 'templates/mail/subject.tpl'); + $this->smarty->clearCache(TEMPLATE_DIR . '/mail/' . $template . '.tpl'); + $this->smarty->clearCache(TEMPLATE_DIR . '/mail/subject.tpl'); $this->smarty->assign('WEBSITENAME', $this->setting->getValue('website_name')); $this->smarty->assign('SUBJECT', $aData['subject']); $this->smarty->assign('DATA', $aData); @@ -84,12 +84,12 @@ class Mail extends Base { $senderEmail = $this->setting->getValue('website_email', 'test@example.com'); $senderName = $this->setting->getValue('website_name', 'test@example.com'); $message = Swift_Message::newInstance() - ->setSubject($this->smarty->fetch(BASEPATH . 'templates/mail/subject.tpl')) + ->setSubject($this->smarty->fetch(TEMPLATE_DIR . '/mail/subject.tpl')) ->setFrom(array( $senderEmail => $senderName)) ->setTo($aData['email']) ->setSender($senderEmail) ->setReturnPath($senderEmail) - ->setBody($this->smarty->fetch(BASEPATH . 'templates/mail/' . $template . '.tpl'), 'text/html'); + ->setBody($this->smarty->fetch(TEMPLATE_DIR . '/mail/' . $template . '.tpl'), 'text/html'); if (isset($aData['senderName']) && isset($aData['senderEmail']) && strlen($aData['senderName']) > 0 && diff --git a/public/include/classes/memcache_ad.class.php b/include/classes/memcache_ad.class.php similarity index 100% rename from public/include/classes/memcache_ad.class.php rename to include/classes/memcache_ad.class.php diff --git a/public/include/classes/memcached.class.php b/include/classes/memcached.class.php similarity index 100% rename from public/include/classes/memcached.class.php rename to include/classes/memcached.class.php diff --git a/public/include/classes/monitoring.class.php b/include/classes/monitoring.class.php similarity index 100% rename from public/include/classes/monitoring.class.php rename to include/classes/monitoring.class.php diff --git a/public/include/classes/news.class.php b/include/classes/news.class.php similarity index 100% rename from public/include/classes/news.class.php rename to include/classes/news.class.php diff --git a/public/include/classes/notification.class.php b/include/classes/notification.class.php similarity index 100% rename from public/include/classes/notification.class.php rename to include/classes/notification.class.php diff --git a/public/include/classes/payout.class.php b/include/classes/payout.class.php similarity index 100% rename from public/include/classes/payout.class.php rename to include/classes/payout.class.php diff --git a/public/include/classes/roundstats.class.php b/include/classes/roundstats.class.php similarity index 100% rename from public/include/classes/roundstats.class.php rename to include/classes/roundstats.class.php diff --git a/public/include/classes/setting.class.php b/include/classes/setting.class.php similarity index 100% rename from public/include/classes/setting.class.php rename to include/classes/setting.class.php diff --git a/public/include/classes/share.class.php b/include/classes/share.class.php similarity index 99% rename from public/include/classes/share.class.php rename to include/classes/share.class.php index 47c67813..b50188f8 100644 --- a/public/include/classes/share.class.php +++ b/include/classes/share.class.php @@ -146,7 +146,7 @@ class Share Extends Base { if ($this->checkStmt($stmt) && $stmt->bind_param("ii", $iMinId, $iMaxId) && $stmt->execute() && $result = $stmt->get_result()) { $aData = NULL; while ($row = $result->fetch_assoc()) { - $aData[$row['account']] = $row; + $aData[strtolower($row['account'])] = $row; } if (is_array($aData)) return $aData; } diff --git a/public/include/classes/statistics.class.php b/include/classes/statistics.class.php similarity index 98% rename from public/include/classes/statistics.class.php rename to include/classes/statistics.class.php index 22f45c23..191bb00d 100644 --- a/public/include/classes/statistics.class.php +++ b/include/classes/statistics.class.php @@ -815,21 +815,23 @@ class Statistics extends Base { * Get the Expected Time per Block in the whole Network in seconde * @return seconds double Seconds per Block */ - public function getNetworkExpectedTimePerBlock(){ + public function getExpectedTimePerBlock($type='network',$hashrate = 0){ if ($data = $this->memcache->get(__FUNCTION__)) return $data; if ($this->bitcoin->can_connect() === true) { - $dNetworkHashrate = $this->bitcoin->getnetworkhashps(); + if ($type == 'network') { + $hashrate = $this->bitcoin->getnetworkhashps(); + } else { + // We need hashes/second and expect khash as input + $hashrate = $hashrate * 1000; + } $dDifficulty = $this->bitcoin->getdifficulty(); } else { - $dNetworkHashrate = 1; + $hashrate = 1; $dDifficulty = 1; } - if($dNetworkHashrate <= 0){ - return $this->memcache->setCache(__FUNCTION__, $this->config['cointarget']); - } - - return $this->memcache->setCache(__FUNCTION__, $this->coin->calcNetworkExpectedTimePerBlock($dDifficulty, $dNetworkHashrate)); + if ($hashrate <= 0) $hashrate = 1; + return $this->memcache->setCache(__FUNCTION__ . '_' . $type, $this->coin->calcNetworkExpectedTimePerBlock($dDifficulty, $hashrate)); } /** diff --git a/public/include/classes/statscache.class.php b/include/classes/statscache.class.php similarity index 100% rename from public/include/classes/statscache.class.php rename to include/classes/statscache.class.php diff --git a/public/include/classes/strict.class.php b/include/classes/strict.class.php similarity index 100% rename from public/include/classes/strict.class.php rename to include/classes/strict.class.php diff --git a/public/include/classes/template.class.php b/include/classes/template.class.php similarity index 95% rename from public/include/classes/template.class.php rename to include/classes/template.class.php index fd0eea58..dac32fdd 100644 --- a/public/include/classes/template.class.php +++ b/include/classes/template.class.php @@ -17,13 +17,13 @@ class Template extends Base { /** * Get all available themes - * Read theme folders from THEME_DIR + * Read theme folders from TEMPLATE_DIR * * @return array - list of available themes */ public function getThemes() { $this->debug->append("STA " . __METHOD__, 4); - $aTmpThemes = glob(THEME_DIR . '/*'); + $aTmpThemes = glob(TEMPLATE_DIR . '/*'); $aThemes = array(); foreach ($aTmpThemes as $dir) { if (basename($dir) != 'cache' && basename($dir) != 'compile' && basename($dir) != 'mail') $aThemes[basename($dir)] = basename($dir); @@ -86,12 +86,12 @@ class Template extends Base { /** * Return the content of specific template file * - * @param $file - file of template related to THEME_DIR + * @param $file - file of template related to TEMPLATE_DIR * @return string - content of the template file */ public function getTemplateContent($file) { $this->debug->append("STA " . __METHOD__, 4); - $filepath = THEME_DIR . '/' . $file; + $filepath = TEMPLATE_DIR . '/' . $file; return file_get_contents($filepath); } @@ -103,7 +103,7 @@ class Template extends Base { */ public function getTemplateFiles($theme) { $this->debug->append("STA " . __METHOD__, 4); - $folder = THEME_DIR . '/' . $theme; + $folder = TEMPLATE_DIR . '/' . $theme; $dir = new RecursiveDirectoryIterator($folder); $ite = new RecursiveIteratorIterator($dir); @@ -130,7 +130,7 @@ class Template extends Base { $templates = array(); foreach($themes as $theme) { - $templates[$theme] = $this->_getTemplatesTreeRecursive(THEME_DIR . '/' . $theme); + $templates[$theme] = $this->_getTemplatesTreeRecursive(TEMPLATE_DIR . '/' . $theme); } return $templates; diff --git a/public/include/classes/token.class.php b/include/classes/token.class.php similarity index 100% rename from public/include/classes/token.class.php rename to include/classes/token.class.php diff --git a/public/include/classes/tokentype.class.php b/include/classes/tokentype.class.php similarity index 100% rename from public/include/classes/tokentype.class.php rename to include/classes/tokentype.class.php diff --git a/public/include/classes/tools.class.php b/include/classes/tools.class.php similarity index 77% rename from public/include/classes/tools.class.php rename to include/classes/tools.class.php index 210e27e0..8e861e63 100644 --- a/public/include/classes/tools.class.php +++ b/include/classes/tools.class.php @@ -7,6 +7,28 @@ $defflip = (!cfip()) ? exit(header('HTTP/1.1 401 Unauthorized')) : 1; * the scope of our web application **/ class Tools extends Base { + public function getOnlineVersions() { + // Fetch version online, cache for a bit + $key = $this->config['memcache']['keyprefix'] . 'ONLINE_VERSIONS'; + if (! $mpos_versions = $this->memcache->get($key)) { + $url = $this->config['version_url']; + $curl = curl_init(); + curl_setopt($curl, CURLOPT_URL, $url); + curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl, CURLOPT_HEADER, false); + $data = curl_exec($curl); + preg_match('/define\(\'MPOS_VERSION\', \'(.*)\'\);/', $data, $match); + $mpos_versions['MPOS_VERSION'] = $match[1]; + preg_match('/define\(\'DB_VERSION\', \'(.*)\'\);/', $data, $match); + $mpos_versions['DB_VERSION'] = $match[1]; + preg_match('/define\(\'CONFIG_VERSION\', \'(.*)\'\);/', $data, $match); + $mpos_versions['CONFIG_VERSION'] = $match[1]; + curl_close($curl); + return $this->memcache->setCache($key, $mpos_versions, 30); + } else { + return $mpos_versions; + } + } /** * Fetch JSON data from an API * @param url string API URL @@ -108,3 +130,4 @@ class Tools extends Base { $tools = new Tools(); $tools->setDebug($debug); $tools->setConfig($config); +$tools->setMemcache($memcache); diff --git a/public/include/classes/transaction.class.php b/include/classes/transaction.class.php similarity index 98% rename from public/include/classes/transaction.class.php rename to include/classes/transaction.class.php index 1999fd4b..d01b53e3 100644 --- a/public/include/classes/transaction.class.php +++ b/include/classes/transaction.class.php @@ -53,9 +53,10 @@ class Transaction extends Base { WHERE t.archived = 0 AND ( ( t.account_id = ? AND t.id <= ? AND b.confirmations >= ? ) + OR ( t.account_id = ? AND t.id <= ? AND b.confirmations = -1 ) OR ( t.account_id = ? AND t.id <= ? AND t.type IN ( 'Credit_PPS', 'Donation_PPS', 'Fee_PPS', 'TXFee', 'Debit_MP', 'Debit_AP' ) ) )"); - if ($this->checkStmt($stmt) && $stmt->bind_param('iiiii', $account_id, $txid, $this->config['confirmations'], $account_id, $txid) && $stmt->execute()) + if ($this->checkStmt($stmt) && $stmt->bind_param('iiiiiii', $account_id, $txid, $this->config['confirmations'], $account_id, $txid, $account_id, $txid) && $stmt->execute()) return true; return $this->sqlError(); } diff --git a/public/include/classes/user.class.php b/include/classes/user.class.php similarity index 91% rename from public/include/classes/user.class.php rename to include/classes/user.class.php index 68e77d3a..a8d0f308 100644 --- a/public/include/classes/user.class.php +++ b/include/classes/user.class.php @@ -7,8 +7,15 @@ class User extends Base { private $user = array(); // get and set methods - private function getHash($string) { - return hash('sha256', $string.$this->salt); + private function getHash($string, $version=0, $pepper='') { + switch($version) { + case 0: + return hash('sha256', $string.$this->salt); + break; + case 1: + return '$' . $version . '$' . $pepper . '$' . hash('sha256', $string.$this->salt.$pepper); + break; + } } public function getUserName($id) { return $this->getSingle($id, 'username', 'id'); @@ -28,6 +35,12 @@ class User extends Base { public function getUserEmailById($id) { return $this->getSingle($id, 'email', 'id', 'i'); } + public function getUserPasswordHashById($id) { + return $this->getSingle($id, 'pass', 'id', 'i'); + } + public function getUserPinHashById($id) { + return $this->getSingle($id, 'pin', 'id', 'i'); + } public function getUserNoFee($id) { return $this->getSingle($id, 'no_fees', 'id'); } @@ -257,11 +270,13 @@ class User extends Base { * @param pin int PIN to check * @return bool **/ - public function checkPin($userId, $pin=false) { + public function checkPin($userId, $pin='') { $this->debug->append("STA " . __METHOD__, 4); $this->debug->append("Confirming PIN for $userId and pin $pin", 2); - $stmt = $this->mysqli->prepare("SELECT pin FROM $this->table WHERE id=? AND pin=? LIMIT 1"); - $pin_hash = $this->getHash($pin); + $strPinHash = $this->getUserPinHashById($userId); + $aPin = explode('$', $strPinHash); + count($aPin) == 1 ? $pin_hash = $this->getHash($pin, 0) : $pin_hash = $this->getHash($pin, $aPin[1], $aPin[2]); + $stmt = $this->mysqli->prepare("SELECT pin FROM $this->table WHERE id = ? AND pin = ? LIMIT 1"); if ($stmt->bind_param('is', $userId, $pin_hash) && $stmt->execute() && $stmt->bind_result($row_pin) && $stmt->fetch()) { $this->setUserPinFailed($userId, 0); return ($pin_hash === $row_pin); @@ -289,15 +304,17 @@ class User extends Base { $this->debug->append("STA " . __METHOD__, 4); $username = $this->getUserName($userID); $email = $this->getUserEmail($username); - $current = $this->getHash($current); + $strPasswordHash = $this->getUserPasswordHashById($userID); + $aPassword = explode('$', $strPasswordHash); + count($aPassword) == 1 ? $password_hash = $this->getHash($current, 0) : $password_hash = $this->getHash($current, $aPassword[1], $aPassword[2]); $newpin = intval( '0' . rand(1,9) . rand(0,9) . rand(0,9) . rand(0,9) ); $aData['username'] = $username; $aData['email'] = $email; $aData['pin'] = $newpin; - $newpin = $this->getHash($newpin); + $newpin = $this->getHash($newpin, HASH_VERSION, bin2hex(openssl_random_pseudo_bytes(32))); $aData['subject'] = 'PIN Reset Request'; $stmt = $this->mysqli->prepare("UPDATE $this->table SET pin = ? WHERE ( id = ? AND pass = ? )"); - if ($this->checkStmt($stmt) && $stmt->bind_param('sis', $newpin, $userID, $current) && $stmt->execute()) { + if ($this->checkStmt($stmt) && $stmt->bind_param('sis', $newpin, $userID, $password_hash) && $stmt->execute()) { if ($stmt->errno == 0 && $stmt->affected_rows === 1) { if ($this->mail->sendMail('pin/reset', $aData)) { $this->log->log("info", "$username was sent a pin reset e-mail"); @@ -407,7 +424,7 @@ class User extends Base { $this->setErrorMessage('A request has already been sent to your e-mail address. Please wait an hour for it to expire.'); return false; } - + /** * Update the accounts password * @param userID int User ID @@ -427,8 +444,10 @@ class User extends Base { $this->setErrorMessage( 'New password is too short, please use more than 8 chars' ); return false; } - $current = $this->getHash($current); - $new = $this->getHash($new1); + $strPasswordHash = $this->getUserPasswordHashById($userID); + $aPassword = explode('$', $strPasswordHash); + count($aPassword) == 1 ? $password_hash = $this->getHash($current, 0) : $password_hash = $this->getHash($current, $aPassword[1], $aPassword[2]); + $new = $this->getHash($new1, HASH_VERSION, bin2hex(openssl_random_pseudo_bytes(32))); if ($this->config['twofactor']['enabled'] && $this->config['twofactor']['options']['changepw']) { $tValid = $this->token->isTokenValid($userID, $strToken, 6); if ($tValid) { @@ -448,7 +467,7 @@ class User extends Base { } $stmt = $this->mysqli->prepare("UPDATE $this->table SET pass = ? WHERE ( id = ? AND pass = ? )"); if ($this->checkStmt($stmt)) { - $stmt->bind_param('sis', $new, $userID, $current); + $stmt->bind_param('sis', $new, $userID, $password_hash); $stmt->execute(); if ($stmt->errno == 0 && $stmt->affected_rows === 1) { $this->log->log("info", $this->getUserName($userID)." updated password"); @@ -460,7 +479,7 @@ class User extends Base { $this->setErrorMessage( 'Unable to update password, current password wrong?' ); return false; } - + /** * Update account information from the edit account page * @param userID int User ID @@ -470,7 +489,7 @@ class User extends Base { * @param strToken string Token for confirmation * @return bool **/ - public function updateAccount($userID, $address, $threshold, $donate, $email, $is_anonymous, $strToken) { + public function updateAccount($userID, $address, $threshold, $donate, $email, $timezone, $is_anonymous, $strToken) { $this->debug->append("STA " . __METHOD__, 4); $bUser = false; $donate = round($donate, 2); @@ -538,10 +557,10 @@ class User extends Base { return false; } } - + // We passed all validation checks so update the account - $stmt = $this->mysqli->prepare("UPDATE $this->table SET coin_address = ?, ap_threshold = ?, donate_percent = ?, email = ?, is_anonymous = ? WHERE id = ?"); - if ($this->checkStmt($stmt) && $stmt->bind_param('sddsii', $address, $threshold, $donate, $email, $is_anonymous, $userID) && $stmt->execute()) { + $stmt = $this->mysqli->prepare("UPDATE $this->table SET coin_address = ?, ap_threshold = ?, donate_percent = ?, email = ?, timezone = ?, is_anonymous = ? WHERE id = ?"); + if ($this->checkStmt($stmt) && $stmt->bind_param('sddssii', $address, $threshold, $donate, $email, $timezone, $is_anonymous, $userID) && $stmt->execute()) { $this->log->log("info", $this->getUserName($userID)." updated their account details"); return true; } @@ -577,14 +596,15 @@ class User extends Base { private function checkUserPassword($username, $password) { $this->debug->append("STA " . __METHOD__, 4); $user = array(); - $password_hash = $this->getHash($password); - $stmt = $this->mysqli->prepare("SELECT username, id, is_admin FROM $this->table WHERE LOWER(username) = LOWER(?) AND pass = ? LIMIT 1"); - if ($this->checkStmt($stmt) && $stmt->bind_param('ss', $username, $password_hash) && $stmt->execute() && $stmt->bind_result($row_username, $row_id, $row_admin)) { + $stmt = $this->mysqli->prepare("SELECT username, pass, id, timezone, is_admin FROM $this->table WHERE LOWER(username) = LOWER(?) LIMIT 1"); + if ($this->checkStmt($stmt) && $stmt->bind_param('s', $username) && $stmt->execute() && $stmt->bind_result($row_username, $row_password, $row_id, $row_timezone, $row_admin)) { $stmt->fetch(); $stmt->close(); + $aPassword = explode('$', $row_password); + count($aPassword) == 1 ? $password_hash = $this->getHash($password, 0) : $password_hash = $this->getHash($password, $aPassword[1], $aPassword[2]); // Store the basic login information - $this->user = array('username' => $row_username, 'id' => $row_id, 'is_admin' => $row_admin); - return strtolower($username) === strtolower($row_username); + $this->user = array('username' => $row_username, 'id' => $row_id, 'timezone' => $row_timezone, 'is_admin' => $row_admin); + return $password_hash === $row_password && strtolower($username) === strtolower($row_username); } return $this->sqlError(); } @@ -683,7 +703,7 @@ class User extends Base { $this->debug->append("Fetching user information for user id: $userID"); $stmt = $this->mysqli->prepare(" SELECT - id, username, pin, api_key, is_admin, is_anonymous, email, no_fees, + id, username, pin, api_key, is_admin, is_anonymous, email, timezone, no_fees, IFNULL(donate_percent, '0') as donate_percent, coin_address, ap_threshold FROM $this->table WHERE id = ? LIMIT 0,1"); @@ -711,7 +731,7 @@ class User extends Base { * @param email2 string Email confirmation * @return bool **/ - public function register($username, $password1, $password2, $pin, $email1='', $email2='', $tac='', $strToken='') { + public function register($username, $coinaddress, $password1, $password2, $pin, $email1='', $email2='', $tac='', $strToken='') { $this->debug->append("STA " . __METHOD__, 4); if ($tac != 1) { $this->setErrorMessage('You need to accept our Terms and Conditions'); @@ -721,6 +741,10 @@ class User extends Base { $this->setErrorMessage('Username exceeding character limit'); return false; } + if (!$this->bitcoin->validateaddress($coinaddress)) { + $this->setErrorMessage('Coin address is not valid'); + return false; + } if (preg_match('/[^a-z_\-0-9]/i', $username)) { $this->setErrorMessage('Username may only contain alphanumeric characters'); return false; @@ -775,26 +799,26 @@ class User extends Base { ! $this->setting->getValue('accounts_confirm_email_disabled') ? $is_locked = 1 : $is_locked = 0; $is_admin = 0; $stmt = $this->mysqli->prepare(" - INSERT INTO $this->table (username, pass, email, signup_timestamp, pin, api_key, is_locked) - VALUES (?, ?, ?, ?, ?, ?, ?) + INSERT INTO $this->table (username, pass, email, signup_timestamp, pin, api_key, is_locked, coin_address) + VALUES (?, ?, ?, ?, ?, ?, ?, ?) "); } else { $is_locked = 0; $is_admin = 1; $stmt = $this->mysqli->prepare(" - INSERT INTO $this->table (username, pass, email, signup_timestamp, pin, api_key, is_admin, is_locked) - VALUES (?, ?, ?, ?, ?, ?, 1, ?) + INSERT INTO $this->table (username, pass, email, signup_timestamp, pin, api_key, is_admin, is_locked, coin_address) + VALUES (?, ?, ?, ?, ?, ?, 1, ?, ?) "); } // Create hashed strings using original string and salt - $password_hash = $this->getHash($password1); - $pin_hash = $this->getHash($pin); - $apikey_hash = $this->getHash($username); + $password_hash = $this->getHash($password1, HASH_VERSION, bin2hex(openssl_random_pseudo_bytes(32))); + $pin_hash = $this->getHash($pin, HASH_VERSION, bin2hex(openssl_random_pseudo_bytes(32))); + $apikey_hash = $this->getHash($username, 0); $username_clean = strip_tags($username); $signup_time = time(); - if ($this->checkStmt($stmt) && $stmt->bind_param('sssissi', $username_clean, $password_hash, $email1, $signup_time, $pin_hash, $apikey_hash, $is_locked) && $stmt->execute()) { + if ($this->checkStmt($stmt) && $stmt->bind_param('sssissis', $username_clean, $password_hash, $email1, $signup_time, $pin_hash, $apikey_hash, $is_locked, $coinaddress) && $stmt->execute()) { if (! $this->setting->getValue('accounts_confirm_email_disabled') && $is_admin != 1) { if ($token = $this->token->createToken('confirm_email', $stmt->insert_id)) { $aData['username'] = $username_clean; @@ -841,7 +865,7 @@ class User extends Base { $this->setErrorMessage( 'New password is too short, please use more than 8 chars' ); return false; } - $new_hash = $this->getHash($new1); + $new_hash = $this->getHash($new1, HASH_VERSION, bin2hex(openssl_random_pseudo_bytes(32))); $stmt = $this->mysqli->prepare("UPDATE $this->table SET pass = ? WHERE id = ?"); if ($this->checkStmt($stmt) && $stmt->bind_param('si', $new_hash, $aToken['account_id']) && $stmt->execute() && $stmt->affected_rows === 1) { if ($this->token->deleteToken($aToken['token'])) { diff --git a/public/include/classes/worker.class.php b/include/classes/worker.class.php similarity index 53% rename from public/include/classes/worker.class.php rename to include/classes/worker.class.php index 9b7344ac..1f273d3e 100644 --- a/public/include/classes/worker.class.php +++ b/include/classes/worker.class.php @@ -48,15 +48,34 @@ class Worker extends Base { $this->debug->append("STA " . __METHOD__, 4); $stmt = $this->mysqli->prepare(" SELECT w.account_id AS account_id, w.id AS id, w.username AS username - FROM " . $this->share->getTableName() . " AS s + FROM + ( + SELECT username AS s_username, MAX(shares_id) AS shares_id, MAX(shares_archive_id) AS shares_archive_id + FROM + ( + SELECT + s.username AS username, MAX(s.id) AS shares_id, NULL AS shares_archive_id + FROM . " . $this->share->getTableName() . " AS s + WHERE s.time > DATE_SUB(now(), INTERVAL ? SECOND) + AND s.our_result = 'Y' + GROUP BY s.username + UNION + SELECT + sa.username AS username, NULL AS shares_id, MAX(sa.id) AS shares_archive_id + FROM " . $this->share->getArchiveTableName() . " AS sa + WHERE sa.time > DATE_SUB(now(), INTERVAL ? SECOND) + AND sa.our_result = 'Y' + GROUP BY sa.username + ) AS derived0 + GROUP BY s_username + ) AS derived1 RIGHT JOIN " . $this->getTableName() . " AS w - ON w.username = s.username - AND s.time > DATE_SUB(now(), INTERVAL ? SECOND) - AND our_result = 'Y' + ON s_username = w.username WHERE w.monitor = 1 - AND s.id IS NULL + AND shares_id IS NULL + AND shares_archive_id IS NULL "); - if ($this->checkStmt($stmt) && $stmt->bind_param('i', $interval) && $stmt->execute() && $result = $stmt->get_result()) + if ($this->checkStmt($stmt) && $stmt->bind_param('ii', $interval, $interval) && $stmt->execute() && $result = $stmt->get_result()) return $result->fetch_all(MYSQLI_ASSOC); return $this->sqlError('E0054'); } @@ -69,38 +88,41 @@ class Worker extends Base { public function getWorker($id, $interval=600) { $this->debug->append("STA " . __METHOD__, 4); $stmt = $this->mysqli->prepare(" - SELECT id, username, password, monitor, - ( SELECT COUNT(id) FROM " . $this->share->getTableName() . " WHERE username = w.username AND time > DATE_SUB(now(), INTERVAL ? SECOND)) AS count_all, - ( SELECT COUNT(id) FROM " . $this->share->getArchiveTableName() . " WHERE username = w.username AND time > DATE_SUB(now(), INTERVAL ? SECOND)) AS count_all_archive, - ( - SELECT - IFNULL(IF(our_result='Y', ROUND(SUM(IF(difficulty=0, pow(2, (" . $this->config['difficulty'] . " - 16)), difficulty)) * POW(2, " . $this->coin->getTargetBits() . ") / ? / 1000), 0), 0) AS hashrate + SELECT id, username, password, monitor, + ( + SELECT COUNT(id) FROM " . $this->share->getTableName() . " WHERE our_result = 'Y' AND username = w.username AND time > DATE_SUB(now(), INTERVAL ? SECOND) + ) + ( + SELECT COUNT(id) FROM " . $this->share->getArchiveTableName() . " WHERE our_result = 'Y' AND username = w.username AND time > DATE_SUB(now(), INTERVAL ? SECOND) + ) AS count_all, + ( + SELECT + IFNULL(SUM(difficulty), 0) FROM " . $this->share->getTableName() . " WHERE username = w.username - AND time > DATE_SUB(now(), INTERVAL ? SECOND) + AND our_result = 'Y' + AND time > DATE_SUB(now(), INTERVAL ? SECOND) ) + ( - SELECT - IFNULL(IF(our_result='Y', ROUND(SUM(IF(difficulty=0, pow(2, (" . $this->config['difficulty'] . " - 16)), difficulty)) * POW(2, " . $this->coin->getTargetBits() . ") / ? / 1000), 0), 0) AS hashrate + SELECT + IFNULL(SUM(difficulty), 0) FROM " . $this->share->getArchiveTableName() . " WHERE username = w.username - AND time > DATE_SUB(now(), INTERVAL ? SECOND) - ) AS hashrate, - ( - SELECT IFNULL(ROUND(SUM(IF(difficulty=0, pow(2, (" . $this->config['difficulty'] . " - 16)), difficulty)) / count_all, 2), 0) - FROM " . $this->share->getTableName() . " - WHERE username = w.username AND time > DATE_SUB(now(), INTERVAL ? SECOND) - ) + ( - SELECT IFNULL(ROUND(SUM(IF(difficulty=0, pow(2, (" . $this->config['difficulty'] . " - 16)), difficulty)) / count_all_archive, 2), 0) - FROM " . $this->share->getArchiveTableName() . " - WHERE username = w.username AND time > DATE_SUB(now(), INTERVAL ? SECOND) - ) AS difficulty + AND our_result = 'Y' + AND time > DATE_SUB(now(), INTERVAL ? SECOND) + ) AS shares FROM $this->table AS w - WHERE id = ? - "); - if ($this->checkStmt($stmt) && $stmt->bind_param('iiiiiiiii',$interval, $interval, $interval, $interval, $interval, $interval, $interval, $interval, $id) && $stmt->execute() && $result = $stmt->get_result()) - return $result->fetch_assoc(); + WHERE id = ?"); + if ($this->checkStmt($stmt) && $stmt->bind_param('iiiii', $interval, $interval, $interval, $interval, $id) && $stmt->execute() && $result = $stmt->get_result()) { + $row = $result->fetch_assoc(); + $row['hashrate'] = round($this->coin->calcHashrate($row['shares'], $interval), 2); + if ($row['count_all'] > 0) { + $row['difficulty'] = round($row['shares'] / $row['count_all'], 2); + } else { + $row['difficulty'] = 0.00; + } + return $row; + } return $this->sqlError('E0055'); } @@ -113,85 +135,93 @@ class Worker extends Base { $this->debug->append("STA " . __METHOD__, 4); $stmt = $this->mysqli->prepare(" SELECT id, username, password, monitor, - ( SELECT COUNT(id) FROM " . $this->share->getTableName() . " WHERE username = w.username AND time > DATE_SUB(now(), INTERVAL ? SECOND)) AS count_all, - ( SELECT COUNT(id) FROM " . $this->share->getArchiveTableName() . " WHERE username = w.username AND time > DATE_SUB(now(), INTERVAL ? SECOND)) AS count_all_archive, - ( - SELECT - IFNULL(IF(our_result='Y', ROUND(SUM(IF(difficulty=0, pow(2, (" . $this->config['difficulty'] . " - 16)), difficulty)) * POW(2, " . $this->coin->getTargetBits() . ") / ? / 1000), 0), 0) AS hashrate + ( + SELECT COUNT(id) FROM " . $this->share->getTableName() . " WHERE our_result = 'Y' AND username = w.username AND time > DATE_SUB(now(), INTERVAL ? SECOND) + ) + ( + SELECT COUNT(id) FROM " . $this->share->getArchiveTableName() . " WHERE our_result = 'Y' AND username = w.username AND time > DATE_SUB(now(), INTERVAL ? SECOND) + ) AS count_all, + ( + SELECT + IFNULL(SUM(difficulty), 0) FROM " . $this->share->getTableName() . " WHERE username = w.username - AND time > DATE_SUB(now(), INTERVAL ? SECOND) - ) + ( - SELECT - IFNULL(IF(our_result='Y', ROUND(SUM(IF(difficulty=0, pow(2, (" . $this->config['difficulty'] . " - 16)), difficulty)) * POW(2, " . $this->coin->getTargetBits() . ") / ? / 1000), 0), 0) AS hashrate + AND our_result = 'Y' + AND time > DATE_SUB(now(), INTERVAL ? SECOND) + ) + ( + SELECT + IFNULL(SUM(difficulty), 0) FROM " . $this->share->getArchiveTableName() . " WHERE username = w.username - AND time > DATE_SUB(now(), INTERVAL ? SECOND) - ) AS hashrate, - ( - SELECT IFNULL(ROUND(SUM(IF(difficulty=0, pow(2, (" . $this->config['difficulty'] . " - 16)), difficulty)) / count_all, 2), 0) - FROM " . $this->share->getTableName() . " - WHERE username = w.username AND time > DATE_SUB(now(), INTERVAL ? SECOND) - ) + ( - SELECT IFNULL(ROUND(SUM(IF(difficulty=0, pow(2, (" . $this->config['difficulty'] . " - 16)), difficulty)) / count_all_archive, 2), 0) - FROM " . $this->share->getArchiveTableName() . " - WHERE username = w.username AND time > DATE_SUB(now(), INTERVAL ? SECOND) - ) AS difficulty + AND our_result = 'Y' + AND time > DATE_SUB(now(), INTERVAL ? SECOND) + ) AS shares FROM $this->table AS w WHERE account_id = ?"); - if ($this->checkStmt($stmt) && $stmt->bind_param('iiiiiiiii', $interval, $interval, $interval, $interval, $interval, $interval, $interval, $interval, $account_id) && $stmt->execute() && $result = $stmt->get_result()) - return $result->fetch_all(MYSQLI_ASSOC); + if ($this->checkStmt($stmt) && $stmt->bind_param('iiiii', $interval, $interval, $interval, $interval, $account_id) && $stmt->execute() && $result = $stmt->get_result()) { + $aData = array(); + while ($row = $result->fetch_assoc()) { + $row['hashrate'] = round($this->coin->calcHashrate($row['shares'], $interval), 2); + if ($row['count_all'] > 0) { + $row['difficulty'] = round($row['shares'] / $row['count_all'], 2); + } else { + $row['difficulty'] = 0.00; + } + $aData[] = $row; + } + return $aData; + } return $this->sqlError('E0056'); } /** * Fetch all workers for admin panel - * @param limit int + * @param limit int max amount of workers * @return mixed array Workers and their settings or false **/ public function getAllWorkers($iLimit=0, $interval=600, $start=0) { $this->debug->append("STA " . __METHOD__, 4); $stmt = $this->mysqli->prepare(" SELECT id, username, password, monitor, - IFNULL(IF(difficulty=0, pow(2, (" . $this->config['difficulty'] . " - 16)), difficulty), 0) AS difficulty, - ( - SELECT - IFNULL(IF(our_result='Y', ROUND(SUM(IF(difficulty=0, pow(2, (" . $this->config['difficulty'] . " - 16)), difficulty)) * POW(2, " . $this->coin->getTargetBits() . ") / ? / 1000), 0), 0) AS hashrate + ( + SELECT COUNT(id) FROM " . $this->share->getTableName() . " WHERE our_result = 'Y' AND username = w.username AND time > DATE_SUB(now(), INTERVAL ? SECOND) + ) + ( + SELECT COUNT(id) FROM " . $this->share->getArchiveTableName() . " WHERE our_result = 'Y' AND username = w.username AND time > DATE_SUB(now(), INTERVAL ? SECOND) + ) AS count_all, + IFNULL(IF(difficulty=0, pow(2, (" . $this->config['difficulty'] . " - 16)), difficulty), 0) AS difficulty, + ( + SELECT + IFNULL(SUM(difficulty), 0) FROM " . $this->share->getTableName() . " WHERE username = w.username - AND time > DATE_SUB(now(), INTERVAL ? SECOND) - ) + ( - SELECT - IFNULL(IF(our_result='Y', ROUND(SUM(IF(difficulty=0, pow(2, (" . $this->config['difficulty'] . " - 16)), difficulty)) * POW(2, " . $this->coin->getTargetBits() . ") / ? / 1000), 0), 0) AS hashrate + AND our_result = 'Y' + AND time > DATE_SUB(now(), INTERVAL ? SECOND) + ) + ( + SELECT + IFNULL(SUM(difficulty), 0) FROM " . $this->share->getArchiveTableName() . " WHERE username = w.username - AND time > DATE_SUB(now(), INTERVAL ? SECOND) - ) AS hashrate, - (( - SELECT IFNULL(ROUND(SUM(IF(difficulty=0, pow(2, (" . $this->config['difficulty'] . " - 16)), difficulty)), 2), 0) - FROM " . $this->share->getTableName() . " - WHERE username = w.username AND time > DATE_SUB(now(), INTERVAL ? SECOND) - ) + ( - SELECT IFNULL(ROUND(SUM(IF(difficulty=0, pow(2, (" . $this->config['difficulty'] . " - 16)), difficulty)), 2), 0) - FROM " . $this->share->getArchiveTableName() . " - WHERE username = w.username AND time > DATE_SUB(now(), INTERVAL ? SECOND) - )) / (( - SELECT COUNT(id) - FROM " . $this->share->getTableName() . " - WHERE username = w.username AND time > DATE_SUB(now(), INTERVAL ? SECOND) - ) + ( - SELECT COUNT(id) - FROM " . $this->share->getArchiveTableName() . " - WHERE username = w.username AND time > DATE_SUB(now(), INTERVAL ? SECOND) - )) AS avg_difficulty + AND our_result = 'Y' + AND time > DATE_SUB(now(), INTERVAL ? SECOND) + ) AS shares FROM $this->table AS w - ORDER BY hashrate DESC LIMIT ?,?"); - if ($this->checkStmt($stmt) && $stmt->bind_param('iiiiiiiiii', $interval, $interval, $interval, $interval, $interval, $interval, $interval, $interval, $start, $iLimit) && $stmt->execute() && $result = $stmt->get_result()) - return $result->fetch_all(MYSQLI_ASSOC); + ORDER BY shares DESC LIMIT ?,?"); + if ($this->checkStmt($stmt) && $stmt->bind_param('iiiiii', $interval, $interval, $interval, $interval, $start, $iLimit) && $stmt->execute() && $result = $stmt->get_result()) { + $aData = array(); + while ($row = $result->fetch_assoc()) { + $row['hashrate'] = round($this->coin->calcHashrate($row['shares'], $interval), 2); + if ($row['count_all'] > 0) { + $row['avg_difficulty'] = round($row['shares'] / $row['count_all'], 2); + } else { + $row['avg_difficulty'] = 0.00; + } + $aData[] = $row; + } + return $aData; + } return $this->sqlError('E0057'); } diff --git a/public/include/config/admin_settings.inc.php b/include/config/admin_settings.inc.php similarity index 94% rename from public/include/config/admin_settings.inc.php rename to include/config/admin_settings.inc.php index e0adf7cb..4f861830 100644 --- a/public/include/config/admin_settings.inc.php +++ b/include/config/admin_settings.inc.php @@ -13,12 +13,27 @@ $aSettings['website'][] = array( 'tooltip' => 'Enable or Disable maintenance mode. Only admins can still login.' ); $aSettings['website'][] = array( - 'display' => 'Message of the Day', 'type' => 'text', - 'size' => 25, + 'display' => 'Message of the Day', 'type' => 'textarea', + 'size' => 20, + 'height' => 3, 'default' => '', 'name' => 'system_motd', 'value' => $setting->getValue('system_motd'), 'tooltip' => 'Display a message of the day as information popup if set.' ); +$aSettings['website'][] = array( + 'display' => 'MOTD Style', 'type' => 'select', + 'options' => array( 0 => 'Success', 1 => 'Information', 2 => 'Warning', 3 => 'Danger' ), + 'default' => 0, + 'name' => 'system_motd_style', 'value' => $setting->getValue('system_motd_style'), + 'tooltip' => 'Set the Style what MOTD looks like.' +); +$aSettings['website'][] = array( + 'display' => 'MOTD Dismiss', 'type' => 'select', + 'options' => array( 0 => 'No', 1 => 'Yes' ), + 'default' => 0, + 'name' => 'system_motd_dismiss', 'value' => $setting->getValue('system_motd_dismiss'), + 'tooltip' => 'Set if users can hide MOTD.' +); $aSettings['website'][] = array( 'display' => 'Website Name', 'type' => 'text', 'size' => 25, @@ -293,6 +308,13 @@ $aSettings['system'][] = array( 'name' => 'system_error_email', 'value' => $setting->getValue('system_error_email'), 'tooltip' => 'The email address for system errors notifications, like cronjobs failures.' ); +$aSettings['system'][] = array( + 'display' => 'Date format string', 'type' => 'text', + 'site' => 25, + 'default' => '%m/%d/%Y %H:%M:%S', + 'name' => 'system_date_format', 'value' => $setting->getValue('system_date_format'), + 'tooltip' => 'Date format to be used throughout the site. Please check PHP strftime for details.' +); $aSettings['system'][] = array( 'display' => 'Disable e-mail confirmations', 'type' => 'select', 'options' => array( 0 => 'No', 1 => 'Yes' ), @@ -356,20 +378,6 @@ $aSettings['system'][] = array( 'name' => 'disable_dashboard_api', 'value' => $setting->getValue('disable_dashboard_api'), 'tooltip' => 'Disable dashboard API entirely to reduce server load.' ); -$aSettings['system'][] = array( - 'display' => 'Disable Live Navbar', 'type' => 'select', - 'options' => array( 0 => 'No', 1 => 'Yes'), - 'default' => 0, - 'name' => 'disable_navbar', 'value' => $setting->getValue('disable_navbar'), - 'tooltip' => 'Disable live updates on the navbar to reduce server load.' -); -$aSettings['system'][] = array( - 'display' => 'Disable Navbar API', 'type' => 'select', - 'options' => array( 0 => 'No', 1 => 'Yes'), - 'default' => 0, - 'name' => 'disable_navbar_api', 'value' => $setting->getValue('disable_navbar_api'), - 'tooltip' => 'Disable navbar API entirely to reduce server load. Used in pool stats and navbar mini stats.' -); $aSettings['system'][] = array( 'display' => 'Disable TX Summaries', 'type' => 'select', 'options' => array( 0 => 'No', 1 => 'Yes'), @@ -377,6 +385,13 @@ $aSettings['system'][] = array( 'name' => 'disable_transactionsummary', 'value' => $setting->getValue('disable_transactionsummary'), 'tooltip' => 'Disable transaction summaries. Helpful with large transaction tables.' ); +$aSettings['system'][] = array( + 'display' => 'Disable Worker Edit without valid Coin Address', 'type' => 'select', + 'options' => array( 0 => 'No', 1 => 'Yes'), + 'default' => 0, + 'name' => 'disable_worker_edit', 'value' => $setting->getValue('disable_worker_edit'), + 'tooltip' => 'No worker editing without valid Payout Address set in Account Settings.' +); $aSettings['system'][] = array( 'display' => 'IRC Chat Channel', 'type' => 'text', 'size' => 25, diff --git a/public/include/config/error_codes.inc.php b/include/config/error_codes.inc.php similarity index 100% rename from public/include/config/error_codes.inc.php rename to include/config/error_codes.inc.php diff --git a/public/include/config/global.inc.dist.php b/include/config/global.inc.dist.php similarity index 97% rename from public/include/config/global.inc.dist.php rename to include/config/global.inc.dist.php index cb3e7988..ca1069dd 100644 --- a/public/include/config/global.inc.dist.php +++ b/include/config/global.inc.dist.php @@ -3,9 +3,11 @@ $defflip = (!cfip()) ? exit(header('HTTP/1.1 401 Unauthorized')) : 1; /** * Do not edit this unless you have confirmed that your config has been updated! + * Also the URL to check for the most recent upstream versions available * https://github.com/MPOS/php-mpos/wiki/Config-Setup#wiki-config-version **/ $config['version'] = '0.0.8'; +$config['version_url'] = 'https://raw.githubusercontent.com/MPOS/php-mpos/master/public/include/version.inc.php'; /** * Unless you disable this, we'll do a quick check on your config first. diff --git a/public/include/config/memcache_keys.inc.php b/include/config/memcache_keys.inc.php similarity index 100% rename from public/include/config/memcache_keys.inc.php rename to include/config/memcache_keys.inc.php diff --git a/public/include/config/monitor_crons.inc.php b/include/config/monitor_crons.inc.php similarity index 100% rename from public/include/config/monitor_crons.inc.php rename to include/config/monitor_crons.inc.php diff --git a/public/include/config/security.inc.dist.php b/include/config/security.inc.dist.php similarity index 100% rename from public/include/config/security.inc.dist.php rename to include/config/security.inc.dist.php diff --git a/public/include/database.inc.php b/include/database.inc.php similarity index 100% rename from public/include/database.inc.php rename to include/database.inc.php diff --git a/public/include/lib/KLogger.php b/include/lib/KLogger.php similarity index 100% rename from public/include/lib/KLogger.php rename to include/lib/KLogger.php diff --git a/public/include/lib/Michelf/Markdown.php b/include/lib/Michelf/Markdown.php similarity index 100% rename from public/include/lib/Michelf/Markdown.php rename to include/lib/Michelf/Markdown.php diff --git a/public/include/lib/Michelf/MarkdownExtra.php b/include/lib/Michelf/MarkdownExtra.php similarity index 100% rename from public/include/lib/Michelf/MarkdownExtra.php rename to include/lib/Michelf/MarkdownExtra.php diff --git a/public/include/lib/jsonRPCClient.php b/include/lib/jsonRPCClient.php similarity index 100% rename from public/include/lib/jsonRPCClient.php rename to include/lib/jsonRPCClient.php diff --git a/public/include/lib/recaptchalib.php b/include/lib/recaptchalib.php similarity index 100% rename from public/include/lib/recaptchalib.php rename to include/lib/recaptchalib.php diff --git a/public/include/lib/scrypt.php b/include/lib/scrypt.php similarity index 100% rename from public/include/lib/scrypt.php rename to include/lib/scrypt.php diff --git a/public/include/lib/smarty_plugins/function.acl.php b/include/lib/smarty_plugins/function.acl.php similarity index 100% rename from public/include/lib/smarty_plugins/function.acl.php rename to include/lib/smarty_plugins/function.acl.php diff --git a/public/include/lib/swiftmailer/classes/Swift.php b/include/lib/swiftmailer/classes/Swift.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift.php rename to include/lib/swiftmailer/classes/Swift.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Attachment.php b/include/lib/swiftmailer/classes/Swift/Attachment.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Attachment.php rename to include/lib/swiftmailer/classes/Swift/Attachment.php diff --git a/public/include/lib/swiftmailer/classes/Swift/ByteStream/AbstractFilterableInputStream.php b/include/lib/swiftmailer/classes/Swift/ByteStream/AbstractFilterableInputStream.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/ByteStream/AbstractFilterableInputStream.php rename to include/lib/swiftmailer/classes/Swift/ByteStream/AbstractFilterableInputStream.php diff --git a/public/include/lib/swiftmailer/classes/Swift/ByteStream/ArrayByteStream.php b/include/lib/swiftmailer/classes/Swift/ByteStream/ArrayByteStream.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/ByteStream/ArrayByteStream.php rename to include/lib/swiftmailer/classes/Swift/ByteStream/ArrayByteStream.php diff --git a/public/include/lib/swiftmailer/classes/Swift/ByteStream/FileByteStream.php b/include/lib/swiftmailer/classes/Swift/ByteStream/FileByteStream.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/ByteStream/FileByteStream.php rename to include/lib/swiftmailer/classes/Swift/ByteStream/FileByteStream.php diff --git a/public/include/lib/swiftmailer/classes/Swift/ByteStream/TemporaryFileByteStream.php b/include/lib/swiftmailer/classes/Swift/ByteStream/TemporaryFileByteStream.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/ByteStream/TemporaryFileByteStream.php rename to include/lib/swiftmailer/classes/Swift/ByteStream/TemporaryFileByteStream.php diff --git a/public/include/lib/swiftmailer/classes/Swift/CharacterReader.php b/include/lib/swiftmailer/classes/Swift/CharacterReader.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/CharacterReader.php rename to include/lib/swiftmailer/classes/Swift/CharacterReader.php diff --git a/public/include/lib/swiftmailer/classes/Swift/CharacterReader/GenericFixedWidthReader.php b/include/lib/swiftmailer/classes/Swift/CharacterReader/GenericFixedWidthReader.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/CharacterReader/GenericFixedWidthReader.php rename to include/lib/swiftmailer/classes/Swift/CharacterReader/GenericFixedWidthReader.php diff --git a/public/include/lib/swiftmailer/classes/Swift/CharacterReader/UsAsciiReader.php b/include/lib/swiftmailer/classes/Swift/CharacterReader/UsAsciiReader.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/CharacterReader/UsAsciiReader.php rename to include/lib/swiftmailer/classes/Swift/CharacterReader/UsAsciiReader.php diff --git a/public/include/lib/swiftmailer/classes/Swift/CharacterReader/Utf8Reader.php b/include/lib/swiftmailer/classes/Swift/CharacterReader/Utf8Reader.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/CharacterReader/Utf8Reader.php rename to include/lib/swiftmailer/classes/Swift/CharacterReader/Utf8Reader.php diff --git a/public/include/lib/swiftmailer/classes/Swift/CharacterReaderFactory.php b/include/lib/swiftmailer/classes/Swift/CharacterReaderFactory.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/CharacterReaderFactory.php rename to include/lib/swiftmailer/classes/Swift/CharacterReaderFactory.php diff --git a/public/include/lib/swiftmailer/classes/Swift/CharacterReaderFactory/SimpleCharacterReaderFactory.php b/include/lib/swiftmailer/classes/Swift/CharacterReaderFactory/SimpleCharacterReaderFactory.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/CharacterReaderFactory/SimpleCharacterReaderFactory.php rename to include/lib/swiftmailer/classes/Swift/CharacterReaderFactory/SimpleCharacterReaderFactory.php diff --git a/public/include/lib/swiftmailer/classes/Swift/CharacterStream.php b/include/lib/swiftmailer/classes/Swift/CharacterStream.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/CharacterStream.php rename to include/lib/swiftmailer/classes/Swift/CharacterStream.php diff --git a/public/include/lib/swiftmailer/classes/Swift/CharacterStream/ArrayCharacterStream.php b/include/lib/swiftmailer/classes/Swift/CharacterStream/ArrayCharacterStream.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/CharacterStream/ArrayCharacterStream.php rename to include/lib/swiftmailer/classes/Swift/CharacterStream/ArrayCharacterStream.php diff --git a/public/include/lib/swiftmailer/classes/Swift/CharacterStream/NgCharacterStream.php b/include/lib/swiftmailer/classes/Swift/CharacterStream/NgCharacterStream.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/CharacterStream/NgCharacterStream.php rename to include/lib/swiftmailer/classes/Swift/CharacterStream/NgCharacterStream.php diff --git a/public/include/lib/swiftmailer/classes/Swift/ConfigurableSpool.php b/include/lib/swiftmailer/classes/Swift/ConfigurableSpool.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/ConfigurableSpool.php rename to include/lib/swiftmailer/classes/Swift/ConfigurableSpool.php diff --git a/public/include/lib/swiftmailer/classes/Swift/DependencyContainer.php b/include/lib/swiftmailer/classes/Swift/DependencyContainer.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/DependencyContainer.php rename to include/lib/swiftmailer/classes/Swift/DependencyContainer.php diff --git a/public/include/lib/swiftmailer/classes/Swift/DependencyException.php b/include/lib/swiftmailer/classes/Swift/DependencyException.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/DependencyException.php rename to include/lib/swiftmailer/classes/Swift/DependencyException.php diff --git a/public/include/lib/swiftmailer/classes/Swift/EmbeddedFile.php b/include/lib/swiftmailer/classes/Swift/EmbeddedFile.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/EmbeddedFile.php rename to include/lib/swiftmailer/classes/Swift/EmbeddedFile.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Encoder.php b/include/lib/swiftmailer/classes/Swift/Encoder.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Encoder.php rename to include/lib/swiftmailer/classes/Swift/Encoder.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Encoder/Base64Encoder.php b/include/lib/swiftmailer/classes/Swift/Encoder/Base64Encoder.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Encoder/Base64Encoder.php rename to include/lib/swiftmailer/classes/Swift/Encoder/Base64Encoder.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Encoder/QpEncoder.php b/include/lib/swiftmailer/classes/Swift/Encoder/QpEncoder.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Encoder/QpEncoder.php rename to include/lib/swiftmailer/classes/Swift/Encoder/QpEncoder.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Encoder/Rfc2231Encoder.php b/include/lib/swiftmailer/classes/Swift/Encoder/Rfc2231Encoder.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Encoder/Rfc2231Encoder.php rename to include/lib/swiftmailer/classes/Swift/Encoder/Rfc2231Encoder.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Encoding.php b/include/lib/swiftmailer/classes/Swift/Encoding.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Encoding.php rename to include/lib/swiftmailer/classes/Swift/Encoding.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Events/CommandEvent.php b/include/lib/swiftmailer/classes/Swift/Events/CommandEvent.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Events/CommandEvent.php rename to include/lib/swiftmailer/classes/Swift/Events/CommandEvent.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Events/CommandListener.php b/include/lib/swiftmailer/classes/Swift/Events/CommandListener.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Events/CommandListener.php rename to include/lib/swiftmailer/classes/Swift/Events/CommandListener.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Events/Event.php b/include/lib/swiftmailer/classes/Swift/Events/Event.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Events/Event.php rename to include/lib/swiftmailer/classes/Swift/Events/Event.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Events/EventDispatcher.php b/include/lib/swiftmailer/classes/Swift/Events/EventDispatcher.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Events/EventDispatcher.php rename to include/lib/swiftmailer/classes/Swift/Events/EventDispatcher.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Events/EventListener.php b/include/lib/swiftmailer/classes/Swift/Events/EventListener.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Events/EventListener.php rename to include/lib/swiftmailer/classes/Swift/Events/EventListener.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Events/EventObject.php b/include/lib/swiftmailer/classes/Swift/Events/EventObject.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Events/EventObject.php rename to include/lib/swiftmailer/classes/Swift/Events/EventObject.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Events/ResponseEvent.php b/include/lib/swiftmailer/classes/Swift/Events/ResponseEvent.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Events/ResponseEvent.php rename to include/lib/swiftmailer/classes/Swift/Events/ResponseEvent.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Events/ResponseListener.php b/include/lib/swiftmailer/classes/Swift/Events/ResponseListener.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Events/ResponseListener.php rename to include/lib/swiftmailer/classes/Swift/Events/ResponseListener.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Events/SendEvent.php b/include/lib/swiftmailer/classes/Swift/Events/SendEvent.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Events/SendEvent.php rename to include/lib/swiftmailer/classes/Swift/Events/SendEvent.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Events/SendListener.php b/include/lib/swiftmailer/classes/Swift/Events/SendListener.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Events/SendListener.php rename to include/lib/swiftmailer/classes/Swift/Events/SendListener.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Events/SimpleEventDispatcher.php b/include/lib/swiftmailer/classes/Swift/Events/SimpleEventDispatcher.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Events/SimpleEventDispatcher.php rename to include/lib/swiftmailer/classes/Swift/Events/SimpleEventDispatcher.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Events/TransportChangeEvent.php b/include/lib/swiftmailer/classes/Swift/Events/TransportChangeEvent.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Events/TransportChangeEvent.php rename to include/lib/swiftmailer/classes/Swift/Events/TransportChangeEvent.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Events/TransportChangeListener.php b/include/lib/swiftmailer/classes/Swift/Events/TransportChangeListener.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Events/TransportChangeListener.php rename to include/lib/swiftmailer/classes/Swift/Events/TransportChangeListener.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Events/TransportExceptionEvent.php b/include/lib/swiftmailer/classes/Swift/Events/TransportExceptionEvent.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Events/TransportExceptionEvent.php rename to include/lib/swiftmailer/classes/Swift/Events/TransportExceptionEvent.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Events/TransportExceptionListener.php b/include/lib/swiftmailer/classes/Swift/Events/TransportExceptionListener.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Events/TransportExceptionListener.php rename to include/lib/swiftmailer/classes/Swift/Events/TransportExceptionListener.php diff --git a/public/include/lib/swiftmailer/classes/Swift/FailoverTransport.php b/include/lib/swiftmailer/classes/Swift/FailoverTransport.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/FailoverTransport.php rename to include/lib/swiftmailer/classes/Swift/FailoverTransport.php diff --git a/public/include/lib/swiftmailer/classes/Swift/FileSpool.php b/include/lib/swiftmailer/classes/Swift/FileSpool.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/FileSpool.php rename to include/lib/swiftmailer/classes/Swift/FileSpool.php diff --git a/public/include/lib/swiftmailer/classes/Swift/FileStream.php b/include/lib/swiftmailer/classes/Swift/FileStream.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/FileStream.php rename to include/lib/swiftmailer/classes/Swift/FileStream.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Filterable.php b/include/lib/swiftmailer/classes/Swift/Filterable.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Filterable.php rename to include/lib/swiftmailer/classes/Swift/Filterable.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Image.php b/include/lib/swiftmailer/classes/Swift/Image.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Image.php rename to include/lib/swiftmailer/classes/Swift/Image.php diff --git a/public/include/lib/swiftmailer/classes/Swift/InputByteStream.php b/include/lib/swiftmailer/classes/Swift/InputByteStream.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/InputByteStream.php rename to include/lib/swiftmailer/classes/Swift/InputByteStream.php diff --git a/public/include/lib/swiftmailer/classes/Swift/IoException.php b/include/lib/swiftmailer/classes/Swift/IoException.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/IoException.php rename to include/lib/swiftmailer/classes/Swift/IoException.php diff --git a/public/include/lib/swiftmailer/classes/Swift/KeyCache.php b/include/lib/swiftmailer/classes/Swift/KeyCache.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/KeyCache.php rename to include/lib/swiftmailer/classes/Swift/KeyCache.php diff --git a/public/include/lib/swiftmailer/classes/Swift/KeyCache/ArrayKeyCache.php b/include/lib/swiftmailer/classes/Swift/KeyCache/ArrayKeyCache.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/KeyCache/ArrayKeyCache.php rename to include/lib/swiftmailer/classes/Swift/KeyCache/ArrayKeyCache.php diff --git a/public/include/lib/swiftmailer/classes/Swift/KeyCache/DiskKeyCache.php b/include/lib/swiftmailer/classes/Swift/KeyCache/DiskKeyCache.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/KeyCache/DiskKeyCache.php rename to include/lib/swiftmailer/classes/Swift/KeyCache/DiskKeyCache.php diff --git a/public/include/lib/swiftmailer/classes/Swift/KeyCache/KeyCacheInputStream.php b/include/lib/swiftmailer/classes/Swift/KeyCache/KeyCacheInputStream.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/KeyCache/KeyCacheInputStream.php rename to include/lib/swiftmailer/classes/Swift/KeyCache/KeyCacheInputStream.php diff --git a/public/include/lib/swiftmailer/classes/Swift/KeyCache/NullKeyCache.php b/include/lib/swiftmailer/classes/Swift/KeyCache/NullKeyCache.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/KeyCache/NullKeyCache.php rename to include/lib/swiftmailer/classes/Swift/KeyCache/NullKeyCache.php diff --git a/public/include/lib/swiftmailer/classes/Swift/KeyCache/SimpleKeyCacheInputStream.php b/include/lib/swiftmailer/classes/Swift/KeyCache/SimpleKeyCacheInputStream.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/KeyCache/SimpleKeyCacheInputStream.php rename to include/lib/swiftmailer/classes/Swift/KeyCache/SimpleKeyCacheInputStream.php diff --git a/public/include/lib/swiftmailer/classes/Swift/LoadBalancedTransport.php b/include/lib/swiftmailer/classes/Swift/LoadBalancedTransport.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/LoadBalancedTransport.php rename to include/lib/swiftmailer/classes/Swift/LoadBalancedTransport.php diff --git a/public/include/lib/swiftmailer/classes/Swift/MailTransport.php b/include/lib/swiftmailer/classes/Swift/MailTransport.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/MailTransport.php rename to include/lib/swiftmailer/classes/Swift/MailTransport.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mailer.php b/include/lib/swiftmailer/classes/Swift/Mailer.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mailer.php rename to include/lib/swiftmailer/classes/Swift/Mailer.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mailer/ArrayRecipientIterator.php b/include/lib/swiftmailer/classes/Swift/Mailer/ArrayRecipientIterator.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mailer/ArrayRecipientIterator.php rename to include/lib/swiftmailer/classes/Swift/Mailer/ArrayRecipientIterator.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mailer/RecipientIterator.php b/include/lib/swiftmailer/classes/Swift/Mailer/RecipientIterator.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mailer/RecipientIterator.php rename to include/lib/swiftmailer/classes/Swift/Mailer/RecipientIterator.php diff --git a/public/include/lib/swiftmailer/classes/Swift/MemorySpool.php b/include/lib/swiftmailer/classes/Swift/MemorySpool.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/MemorySpool.php rename to include/lib/swiftmailer/classes/Swift/MemorySpool.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Message.php b/include/lib/swiftmailer/classes/Swift/Message.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Message.php rename to include/lib/swiftmailer/classes/Swift/Message.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/Attachment.php b/include/lib/swiftmailer/classes/Swift/Mime/Attachment.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/Attachment.php rename to include/lib/swiftmailer/classes/Swift/Mime/Attachment.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/CharsetObserver.php b/include/lib/swiftmailer/classes/Swift/Mime/CharsetObserver.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/CharsetObserver.php rename to include/lib/swiftmailer/classes/Swift/Mime/CharsetObserver.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/ContentEncoder.php b/include/lib/swiftmailer/classes/Swift/Mime/ContentEncoder.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/ContentEncoder.php rename to include/lib/swiftmailer/classes/Swift/Mime/ContentEncoder.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/ContentEncoder/Base64ContentEncoder.php b/include/lib/swiftmailer/classes/Swift/Mime/ContentEncoder/Base64ContentEncoder.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/ContentEncoder/Base64ContentEncoder.php rename to include/lib/swiftmailer/classes/Swift/Mime/ContentEncoder/Base64ContentEncoder.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/ContentEncoder/NativeQpContentEncoder.php b/include/lib/swiftmailer/classes/Swift/Mime/ContentEncoder/NativeQpContentEncoder.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/ContentEncoder/NativeQpContentEncoder.php rename to include/lib/swiftmailer/classes/Swift/Mime/ContentEncoder/NativeQpContentEncoder.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php b/include/lib/swiftmailer/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php rename to include/lib/swiftmailer/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php b/include/lib/swiftmailer/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php rename to include/lib/swiftmailer/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/ContentEncoder/QpContentEncoderProxy.php b/include/lib/swiftmailer/classes/Swift/Mime/ContentEncoder/QpContentEncoderProxy.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/ContentEncoder/QpContentEncoderProxy.php rename to include/lib/swiftmailer/classes/Swift/Mime/ContentEncoder/QpContentEncoderProxy.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/ContentEncoder/RawContentEncoder.php b/include/lib/swiftmailer/classes/Swift/Mime/ContentEncoder/RawContentEncoder.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/ContentEncoder/RawContentEncoder.php rename to include/lib/swiftmailer/classes/Swift/Mime/ContentEncoder/RawContentEncoder.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/EmbeddedFile.php b/include/lib/swiftmailer/classes/Swift/Mime/EmbeddedFile.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/EmbeddedFile.php rename to include/lib/swiftmailer/classes/Swift/Mime/EmbeddedFile.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/EncodingObserver.php b/include/lib/swiftmailer/classes/Swift/Mime/EncodingObserver.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/EncodingObserver.php rename to include/lib/swiftmailer/classes/Swift/Mime/EncodingObserver.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/Grammar.php b/include/lib/swiftmailer/classes/Swift/Mime/Grammar.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/Grammar.php rename to include/lib/swiftmailer/classes/Swift/Mime/Grammar.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/Header.php b/include/lib/swiftmailer/classes/Swift/Mime/Header.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/Header.php rename to include/lib/swiftmailer/classes/Swift/Mime/Header.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/HeaderEncoder.php b/include/lib/swiftmailer/classes/Swift/Mime/HeaderEncoder.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/HeaderEncoder.php rename to include/lib/swiftmailer/classes/Swift/Mime/HeaderEncoder.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/HeaderEncoder/Base64HeaderEncoder.php b/include/lib/swiftmailer/classes/Swift/Mime/HeaderEncoder/Base64HeaderEncoder.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/HeaderEncoder/Base64HeaderEncoder.php rename to include/lib/swiftmailer/classes/Swift/Mime/HeaderEncoder/Base64HeaderEncoder.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php b/include/lib/swiftmailer/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php rename to include/lib/swiftmailer/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/HeaderFactory.php b/include/lib/swiftmailer/classes/Swift/Mime/HeaderFactory.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/HeaderFactory.php rename to include/lib/swiftmailer/classes/Swift/Mime/HeaderFactory.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/HeaderSet.php b/include/lib/swiftmailer/classes/Swift/Mime/HeaderSet.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/HeaderSet.php rename to include/lib/swiftmailer/classes/Swift/Mime/HeaderSet.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/Headers/AbstractHeader.php b/include/lib/swiftmailer/classes/Swift/Mime/Headers/AbstractHeader.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/Headers/AbstractHeader.php rename to include/lib/swiftmailer/classes/Swift/Mime/Headers/AbstractHeader.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/Headers/DateHeader.php b/include/lib/swiftmailer/classes/Swift/Mime/Headers/DateHeader.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/Headers/DateHeader.php rename to include/lib/swiftmailer/classes/Swift/Mime/Headers/DateHeader.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/Headers/IdentificationHeader.php b/include/lib/swiftmailer/classes/Swift/Mime/Headers/IdentificationHeader.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/Headers/IdentificationHeader.php rename to include/lib/swiftmailer/classes/Swift/Mime/Headers/IdentificationHeader.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/Headers/MailboxHeader.php b/include/lib/swiftmailer/classes/Swift/Mime/Headers/MailboxHeader.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/Headers/MailboxHeader.php rename to include/lib/swiftmailer/classes/Swift/Mime/Headers/MailboxHeader.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/Headers/OpenDKIMHeader.php b/include/lib/swiftmailer/classes/Swift/Mime/Headers/OpenDKIMHeader.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/Headers/OpenDKIMHeader.php rename to include/lib/swiftmailer/classes/Swift/Mime/Headers/OpenDKIMHeader.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/Headers/ParameterizedHeader.php b/include/lib/swiftmailer/classes/Swift/Mime/Headers/ParameterizedHeader.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/Headers/ParameterizedHeader.php rename to include/lib/swiftmailer/classes/Swift/Mime/Headers/ParameterizedHeader.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/Headers/PathHeader.php b/include/lib/swiftmailer/classes/Swift/Mime/Headers/PathHeader.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/Headers/PathHeader.php rename to include/lib/swiftmailer/classes/Swift/Mime/Headers/PathHeader.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/Headers/UnstructuredHeader.php b/include/lib/swiftmailer/classes/Swift/Mime/Headers/UnstructuredHeader.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/Headers/UnstructuredHeader.php rename to include/lib/swiftmailer/classes/Swift/Mime/Headers/UnstructuredHeader.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/Message.php b/include/lib/swiftmailer/classes/Swift/Mime/Message.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/Message.php rename to include/lib/swiftmailer/classes/Swift/Mime/Message.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/MimeEntity.php b/include/lib/swiftmailer/classes/Swift/Mime/MimeEntity.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/MimeEntity.php rename to include/lib/swiftmailer/classes/Swift/Mime/MimeEntity.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/MimePart.php b/include/lib/swiftmailer/classes/Swift/Mime/MimePart.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/MimePart.php rename to include/lib/swiftmailer/classes/Swift/Mime/MimePart.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/ParameterizedHeader.php b/include/lib/swiftmailer/classes/Swift/Mime/ParameterizedHeader.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/ParameterizedHeader.php rename to include/lib/swiftmailer/classes/Swift/Mime/ParameterizedHeader.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/SimpleHeaderFactory.php b/include/lib/swiftmailer/classes/Swift/Mime/SimpleHeaderFactory.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/SimpleHeaderFactory.php rename to include/lib/swiftmailer/classes/Swift/Mime/SimpleHeaderFactory.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/SimpleHeaderSet.php b/include/lib/swiftmailer/classes/Swift/Mime/SimpleHeaderSet.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/SimpleHeaderSet.php rename to include/lib/swiftmailer/classes/Swift/Mime/SimpleHeaderSet.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/SimpleMessage.php b/include/lib/swiftmailer/classes/Swift/Mime/SimpleMessage.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/SimpleMessage.php rename to include/lib/swiftmailer/classes/Swift/Mime/SimpleMessage.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Mime/SimpleMimeEntity.php b/include/lib/swiftmailer/classes/Swift/Mime/SimpleMimeEntity.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Mime/SimpleMimeEntity.php rename to include/lib/swiftmailer/classes/Swift/Mime/SimpleMimeEntity.php diff --git a/public/include/lib/swiftmailer/classes/Swift/MimePart.php b/include/lib/swiftmailer/classes/Swift/MimePart.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/MimePart.php rename to include/lib/swiftmailer/classes/Swift/MimePart.php diff --git a/public/include/lib/swiftmailer/classes/Swift/NullTransport.php b/include/lib/swiftmailer/classes/Swift/NullTransport.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/NullTransport.php rename to include/lib/swiftmailer/classes/Swift/NullTransport.php diff --git a/public/include/lib/swiftmailer/classes/Swift/OutputByteStream.php b/include/lib/swiftmailer/classes/Swift/OutputByteStream.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/OutputByteStream.php rename to include/lib/swiftmailer/classes/Swift/OutputByteStream.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Plugins/AntiFloodPlugin.php b/include/lib/swiftmailer/classes/Swift/Plugins/AntiFloodPlugin.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Plugins/AntiFloodPlugin.php rename to include/lib/swiftmailer/classes/Swift/Plugins/AntiFloodPlugin.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Plugins/BandwidthMonitorPlugin.php b/include/lib/swiftmailer/classes/Swift/Plugins/BandwidthMonitorPlugin.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Plugins/BandwidthMonitorPlugin.php rename to include/lib/swiftmailer/classes/Swift/Plugins/BandwidthMonitorPlugin.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Plugins/Decorator/Replacements.php b/include/lib/swiftmailer/classes/Swift/Plugins/Decorator/Replacements.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Plugins/Decorator/Replacements.php rename to include/lib/swiftmailer/classes/Swift/Plugins/Decorator/Replacements.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Plugins/DecoratorPlugin.php b/include/lib/swiftmailer/classes/Swift/Plugins/DecoratorPlugin.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Plugins/DecoratorPlugin.php rename to include/lib/swiftmailer/classes/Swift/Plugins/DecoratorPlugin.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Plugins/ImpersonatePlugin.php b/include/lib/swiftmailer/classes/Swift/Plugins/ImpersonatePlugin.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Plugins/ImpersonatePlugin.php rename to include/lib/swiftmailer/classes/Swift/Plugins/ImpersonatePlugin.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Plugins/Logger.php b/include/lib/swiftmailer/classes/Swift/Plugins/Logger.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Plugins/Logger.php rename to include/lib/swiftmailer/classes/Swift/Plugins/Logger.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Plugins/LoggerPlugin.php b/include/lib/swiftmailer/classes/Swift/Plugins/LoggerPlugin.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Plugins/LoggerPlugin.php rename to include/lib/swiftmailer/classes/Swift/Plugins/LoggerPlugin.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Plugins/Loggers/ArrayLogger.php b/include/lib/swiftmailer/classes/Swift/Plugins/Loggers/ArrayLogger.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Plugins/Loggers/ArrayLogger.php rename to include/lib/swiftmailer/classes/Swift/Plugins/Loggers/ArrayLogger.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Plugins/Loggers/EchoLogger.php b/include/lib/swiftmailer/classes/Swift/Plugins/Loggers/EchoLogger.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Plugins/Loggers/EchoLogger.php rename to include/lib/swiftmailer/classes/Swift/Plugins/Loggers/EchoLogger.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Plugins/MessageLogger.php b/include/lib/swiftmailer/classes/Swift/Plugins/MessageLogger.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Plugins/MessageLogger.php rename to include/lib/swiftmailer/classes/Swift/Plugins/MessageLogger.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Plugins/Pop/Pop3Connection.php b/include/lib/swiftmailer/classes/Swift/Plugins/Pop/Pop3Connection.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Plugins/Pop/Pop3Connection.php rename to include/lib/swiftmailer/classes/Swift/Plugins/Pop/Pop3Connection.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Plugins/Pop/Pop3Exception.php b/include/lib/swiftmailer/classes/Swift/Plugins/Pop/Pop3Exception.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Plugins/Pop/Pop3Exception.php rename to include/lib/swiftmailer/classes/Swift/Plugins/Pop/Pop3Exception.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Plugins/PopBeforeSmtpPlugin.php b/include/lib/swiftmailer/classes/Swift/Plugins/PopBeforeSmtpPlugin.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Plugins/PopBeforeSmtpPlugin.php rename to include/lib/swiftmailer/classes/Swift/Plugins/PopBeforeSmtpPlugin.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Plugins/RedirectingPlugin.php b/include/lib/swiftmailer/classes/Swift/Plugins/RedirectingPlugin.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Plugins/RedirectingPlugin.php rename to include/lib/swiftmailer/classes/Swift/Plugins/RedirectingPlugin.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Plugins/Reporter.php b/include/lib/swiftmailer/classes/Swift/Plugins/Reporter.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Plugins/Reporter.php rename to include/lib/swiftmailer/classes/Swift/Plugins/Reporter.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Plugins/ReporterPlugin.php b/include/lib/swiftmailer/classes/Swift/Plugins/ReporterPlugin.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Plugins/ReporterPlugin.php rename to include/lib/swiftmailer/classes/Swift/Plugins/ReporterPlugin.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Plugins/Reporters/HitReporter.php b/include/lib/swiftmailer/classes/Swift/Plugins/Reporters/HitReporter.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Plugins/Reporters/HitReporter.php rename to include/lib/swiftmailer/classes/Swift/Plugins/Reporters/HitReporter.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Plugins/Reporters/HtmlReporter.php b/include/lib/swiftmailer/classes/Swift/Plugins/Reporters/HtmlReporter.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Plugins/Reporters/HtmlReporter.php rename to include/lib/swiftmailer/classes/Swift/Plugins/Reporters/HtmlReporter.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Plugins/Sleeper.php b/include/lib/swiftmailer/classes/Swift/Plugins/Sleeper.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Plugins/Sleeper.php rename to include/lib/swiftmailer/classes/Swift/Plugins/Sleeper.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Plugins/ThrottlerPlugin.php b/include/lib/swiftmailer/classes/Swift/Plugins/ThrottlerPlugin.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Plugins/ThrottlerPlugin.php rename to include/lib/swiftmailer/classes/Swift/Plugins/ThrottlerPlugin.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Plugins/Timer.php b/include/lib/swiftmailer/classes/Swift/Plugins/Timer.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Plugins/Timer.php rename to include/lib/swiftmailer/classes/Swift/Plugins/Timer.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Preferences.php b/include/lib/swiftmailer/classes/Swift/Preferences.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Preferences.php rename to include/lib/swiftmailer/classes/Swift/Preferences.php diff --git a/public/include/lib/swiftmailer/classes/Swift/ReplacementFilterFactory.php b/include/lib/swiftmailer/classes/Swift/ReplacementFilterFactory.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/ReplacementFilterFactory.php rename to include/lib/swiftmailer/classes/Swift/ReplacementFilterFactory.php diff --git a/public/include/lib/swiftmailer/classes/Swift/RfcComplianceException.php b/include/lib/swiftmailer/classes/Swift/RfcComplianceException.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/RfcComplianceException.php rename to include/lib/swiftmailer/classes/Swift/RfcComplianceException.php diff --git a/public/include/lib/swiftmailer/classes/Swift/SendmailTransport.php b/include/lib/swiftmailer/classes/Swift/SendmailTransport.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/SendmailTransport.php rename to include/lib/swiftmailer/classes/Swift/SendmailTransport.php diff --git a/public/include/lib/swiftmailer/classes/Swift/SignedMessage.php b/include/lib/swiftmailer/classes/Swift/SignedMessage.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/SignedMessage.php rename to include/lib/swiftmailer/classes/Swift/SignedMessage.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Signer.php b/include/lib/swiftmailer/classes/Swift/Signer.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Signer.php rename to include/lib/swiftmailer/classes/Swift/Signer.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Signers/BodySigner.php b/include/lib/swiftmailer/classes/Swift/Signers/BodySigner.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Signers/BodySigner.php rename to include/lib/swiftmailer/classes/Swift/Signers/BodySigner.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Signers/DKIMSigner.php b/include/lib/swiftmailer/classes/Swift/Signers/DKIMSigner.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Signers/DKIMSigner.php rename to include/lib/swiftmailer/classes/Swift/Signers/DKIMSigner.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Signers/DomainKeySigner.php b/include/lib/swiftmailer/classes/Swift/Signers/DomainKeySigner.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Signers/DomainKeySigner.php rename to include/lib/swiftmailer/classes/Swift/Signers/DomainKeySigner.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Signers/HeaderSigner.php b/include/lib/swiftmailer/classes/Swift/Signers/HeaderSigner.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Signers/HeaderSigner.php rename to include/lib/swiftmailer/classes/Swift/Signers/HeaderSigner.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Signers/OpenDKIMSigner.php b/include/lib/swiftmailer/classes/Swift/Signers/OpenDKIMSigner.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Signers/OpenDKIMSigner.php rename to include/lib/swiftmailer/classes/Swift/Signers/OpenDKIMSigner.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Signers/SMimeSigner.php b/include/lib/swiftmailer/classes/Swift/Signers/SMimeSigner.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Signers/SMimeSigner.php rename to include/lib/swiftmailer/classes/Swift/Signers/SMimeSigner.php diff --git a/public/include/lib/swiftmailer/classes/Swift/SmtpTransport.php b/include/lib/swiftmailer/classes/Swift/SmtpTransport.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/SmtpTransport.php rename to include/lib/swiftmailer/classes/Swift/SmtpTransport.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Spool.php b/include/lib/swiftmailer/classes/Swift/Spool.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Spool.php rename to include/lib/swiftmailer/classes/Swift/Spool.php diff --git a/public/include/lib/swiftmailer/classes/Swift/SpoolTransport.php b/include/lib/swiftmailer/classes/Swift/SpoolTransport.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/SpoolTransport.php rename to include/lib/swiftmailer/classes/Swift/SpoolTransport.php diff --git a/public/include/lib/swiftmailer/classes/Swift/StreamFilter.php b/include/lib/swiftmailer/classes/Swift/StreamFilter.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/StreamFilter.php rename to include/lib/swiftmailer/classes/Swift/StreamFilter.php diff --git a/public/include/lib/swiftmailer/classes/Swift/StreamFilters/ByteArrayReplacementFilter.php b/include/lib/swiftmailer/classes/Swift/StreamFilters/ByteArrayReplacementFilter.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/StreamFilters/ByteArrayReplacementFilter.php rename to include/lib/swiftmailer/classes/Swift/StreamFilters/ByteArrayReplacementFilter.php diff --git a/public/include/lib/swiftmailer/classes/Swift/StreamFilters/StringReplacementFilter.php b/include/lib/swiftmailer/classes/Swift/StreamFilters/StringReplacementFilter.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/StreamFilters/StringReplacementFilter.php rename to include/lib/swiftmailer/classes/Swift/StreamFilters/StringReplacementFilter.php diff --git a/public/include/lib/swiftmailer/classes/Swift/StreamFilters/StringReplacementFilterFactory.php b/include/lib/swiftmailer/classes/Swift/StreamFilters/StringReplacementFilterFactory.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/StreamFilters/StringReplacementFilterFactory.php rename to include/lib/swiftmailer/classes/Swift/StreamFilters/StringReplacementFilterFactory.php diff --git a/public/include/lib/swiftmailer/classes/Swift/SwiftException.php b/include/lib/swiftmailer/classes/Swift/SwiftException.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/SwiftException.php rename to include/lib/swiftmailer/classes/Swift/SwiftException.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Transport.php b/include/lib/swiftmailer/classes/Swift/Transport.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Transport.php rename to include/lib/swiftmailer/classes/Swift/Transport.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Transport/AbstractSmtpTransport.php b/include/lib/swiftmailer/classes/Swift/Transport/AbstractSmtpTransport.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Transport/AbstractSmtpTransport.php rename to include/lib/swiftmailer/classes/Swift/Transport/AbstractSmtpTransport.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php b/include/lib/swiftmailer/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php rename to include/lib/swiftmailer/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php b/include/lib/swiftmailer/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php rename to include/lib/swiftmailer/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Transport/Esmtp/Auth/NTLMAuthenticator.php b/include/lib/swiftmailer/classes/Swift/Transport/Esmtp/Auth/NTLMAuthenticator.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Transport/Esmtp/Auth/NTLMAuthenticator.php rename to include/lib/swiftmailer/classes/Swift/Transport/Esmtp/Auth/NTLMAuthenticator.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php b/include/lib/swiftmailer/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php rename to include/lib/swiftmailer/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Transport/Esmtp/Auth/XOAuth2Authenticator.php b/include/lib/swiftmailer/classes/Swift/Transport/Esmtp/Auth/XOAuth2Authenticator.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Transport/Esmtp/Auth/XOAuth2Authenticator.php rename to include/lib/swiftmailer/classes/Swift/Transport/Esmtp/Auth/XOAuth2Authenticator.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Transport/Esmtp/AuthHandler.php b/include/lib/swiftmailer/classes/Swift/Transport/Esmtp/AuthHandler.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Transport/Esmtp/AuthHandler.php rename to include/lib/swiftmailer/classes/Swift/Transport/Esmtp/AuthHandler.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Transport/Esmtp/Authenticator.php b/include/lib/swiftmailer/classes/Swift/Transport/Esmtp/Authenticator.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Transport/Esmtp/Authenticator.php rename to include/lib/swiftmailer/classes/Swift/Transport/Esmtp/Authenticator.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Transport/EsmtpHandler.php b/include/lib/swiftmailer/classes/Swift/Transport/EsmtpHandler.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Transport/EsmtpHandler.php rename to include/lib/swiftmailer/classes/Swift/Transport/EsmtpHandler.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Transport/EsmtpTransport.php b/include/lib/swiftmailer/classes/Swift/Transport/EsmtpTransport.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Transport/EsmtpTransport.php rename to include/lib/swiftmailer/classes/Swift/Transport/EsmtpTransport.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Transport/FailoverTransport.php b/include/lib/swiftmailer/classes/Swift/Transport/FailoverTransport.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Transport/FailoverTransport.php rename to include/lib/swiftmailer/classes/Swift/Transport/FailoverTransport.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Transport/IoBuffer.php b/include/lib/swiftmailer/classes/Swift/Transport/IoBuffer.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Transport/IoBuffer.php rename to include/lib/swiftmailer/classes/Swift/Transport/IoBuffer.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Transport/LoadBalancedTransport.php b/include/lib/swiftmailer/classes/Swift/Transport/LoadBalancedTransport.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Transport/LoadBalancedTransport.php rename to include/lib/swiftmailer/classes/Swift/Transport/LoadBalancedTransport.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Transport/MailInvoker.php b/include/lib/swiftmailer/classes/Swift/Transport/MailInvoker.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Transport/MailInvoker.php rename to include/lib/swiftmailer/classes/Swift/Transport/MailInvoker.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Transport/MailTransport.php b/include/lib/swiftmailer/classes/Swift/Transport/MailTransport.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Transport/MailTransport.php rename to include/lib/swiftmailer/classes/Swift/Transport/MailTransport.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Transport/NullTransport.php b/include/lib/swiftmailer/classes/Swift/Transport/NullTransport.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Transport/NullTransport.php rename to include/lib/swiftmailer/classes/Swift/Transport/NullTransport.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Transport/SendmailTransport.php b/include/lib/swiftmailer/classes/Swift/Transport/SendmailTransport.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Transport/SendmailTransport.php rename to include/lib/swiftmailer/classes/Swift/Transport/SendmailTransport.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Transport/SimpleMailInvoker.php b/include/lib/swiftmailer/classes/Swift/Transport/SimpleMailInvoker.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Transport/SimpleMailInvoker.php rename to include/lib/swiftmailer/classes/Swift/Transport/SimpleMailInvoker.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Transport/SmtpAgent.php b/include/lib/swiftmailer/classes/Swift/Transport/SmtpAgent.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Transport/SmtpAgent.php rename to include/lib/swiftmailer/classes/Swift/Transport/SmtpAgent.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Transport/SpoolTransport.php b/include/lib/swiftmailer/classes/Swift/Transport/SpoolTransport.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Transport/SpoolTransport.php rename to include/lib/swiftmailer/classes/Swift/Transport/SpoolTransport.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Transport/StreamBuffer.php b/include/lib/swiftmailer/classes/Swift/Transport/StreamBuffer.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Transport/StreamBuffer.php rename to include/lib/swiftmailer/classes/Swift/Transport/StreamBuffer.php diff --git a/public/include/lib/swiftmailer/classes/Swift/TransportException.php b/include/lib/swiftmailer/classes/Swift/TransportException.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/TransportException.php rename to include/lib/swiftmailer/classes/Swift/TransportException.php diff --git a/public/include/lib/swiftmailer/classes/Swift/Validate.php b/include/lib/swiftmailer/classes/Swift/Validate.php similarity index 100% rename from public/include/lib/swiftmailer/classes/Swift/Validate.php rename to include/lib/swiftmailer/classes/Swift/Validate.php diff --git a/public/include/lib/swiftmailer/dependency_maps/cache_deps.php b/include/lib/swiftmailer/dependency_maps/cache_deps.php similarity index 100% rename from public/include/lib/swiftmailer/dependency_maps/cache_deps.php rename to include/lib/swiftmailer/dependency_maps/cache_deps.php diff --git a/public/include/lib/swiftmailer/dependency_maps/message_deps.php b/include/lib/swiftmailer/dependency_maps/message_deps.php similarity index 100% rename from public/include/lib/swiftmailer/dependency_maps/message_deps.php rename to include/lib/swiftmailer/dependency_maps/message_deps.php diff --git a/public/include/lib/swiftmailer/dependency_maps/mime_deps.php b/include/lib/swiftmailer/dependency_maps/mime_deps.php similarity index 100% rename from public/include/lib/swiftmailer/dependency_maps/mime_deps.php rename to include/lib/swiftmailer/dependency_maps/mime_deps.php diff --git a/public/include/lib/swiftmailer/dependency_maps/transport_deps.php b/include/lib/swiftmailer/dependency_maps/transport_deps.php similarity index 100% rename from public/include/lib/swiftmailer/dependency_maps/transport_deps.php rename to include/lib/swiftmailer/dependency_maps/transport_deps.php diff --git a/public/include/lib/swiftmailer/mime_types.php b/include/lib/swiftmailer/mime_types.php similarity index 100% rename from public/include/lib/swiftmailer/mime_types.php rename to include/lib/swiftmailer/mime_types.php diff --git a/public/include/lib/swiftmailer/preferences.php b/include/lib/swiftmailer/preferences.php similarity index 100% rename from public/include/lib/swiftmailer/preferences.php rename to include/lib/swiftmailer/preferences.php diff --git a/public/include/lib/swiftmailer/swift_init.php b/include/lib/swiftmailer/swift_init.php similarity index 100% rename from public/include/lib/swiftmailer/swift_init.php rename to include/lib/swiftmailer/swift_init.php diff --git a/public/include/lib/swiftmailer/swift_required.php b/include/lib/swiftmailer/swift_required.php similarity index 100% rename from public/include/lib/swiftmailer/swift_required.php rename to include/lib/swiftmailer/swift_required.php diff --git a/public/include/lib/swiftmailer/swift_required_pear.php b/include/lib/swiftmailer/swift_required_pear.php similarity index 100% rename from public/include/lib/swiftmailer/swift_required_pear.php rename to include/lib/swiftmailer/swift_required_pear.php diff --git a/public/include/lib/swiftmailer/swiftmailer_generate_mimes_config.php b/include/lib/swiftmailer/swiftmailer_generate_mimes_config.php similarity index 100% rename from public/include/lib/swiftmailer/swiftmailer_generate_mimes_config.php rename to include/lib/swiftmailer/swiftmailer_generate_mimes_config.php diff --git a/public/include/pages/about.inc.php b/include/pages/about.inc.php similarity index 100% rename from public/include/pages/about.inc.php rename to include/pages/about.inc.php diff --git a/public/include/pages/about/api.inc.php b/include/pages/about/api.inc.php similarity index 100% rename from public/include/pages/about/api.inc.php rename to include/pages/about/api.inc.php diff --git a/public/include/pages/about/chat.inc.php b/include/pages/about/chat.inc.php similarity index 100% rename from public/include/pages/about/chat.inc.php rename to include/pages/about/chat.inc.php diff --git a/public/include/pages/about/moot.inc.php b/include/pages/about/moot.inc.php similarity index 100% rename from public/include/pages/about/moot.inc.php rename to include/pages/about/moot.inc.php diff --git a/public/include/pages/about/pool.inc.php b/include/pages/about/pool.inc.php similarity index 100% rename from public/include/pages/about/pool.inc.php rename to include/pages/about/pool.inc.php diff --git a/public/include/pages/about/pplns.inc.php b/include/pages/about/pplns.inc.php similarity index 100% rename from public/include/pages/about/pplns.inc.php rename to include/pages/about/pplns.inc.php diff --git a/public/include/pages/account.inc.php b/include/pages/account.inc.php similarity index 100% rename from public/include/pages/account.inc.php rename to include/pages/account.inc.php diff --git a/public/include/pages/account/confirm.inc.php b/include/pages/account/confirm.inc.php similarity index 100% rename from public/include/pages/account/confirm.inc.php rename to include/pages/account/confirm.inc.php diff --git a/include/pages/account/earnings.inc.php b/include/pages/account/earnings.inc.php new file mode 100644 index 00000000..51453b5a --- /dev/null +++ b/include/pages/account/earnings.inc.php @@ -0,0 +1,23 @@ +isAuthenticated() AND !$setting->getValue('disable_transactionsummary')) { + if (!$smarty->isCached('master.tpl', $smarty_cache_key)) { + $iLimit = 30; + $debug->append('No cached version available, fetching from backend', 3); + $aTransactionSummary = $transaction->getTransactionSummary($_SESSION['USERDATA']['id']); + $aTransactionSummaryByTime = $transaction->getTransactionTypebyTime($_SESSION['USERDATA']['id']); + $smarty->assign('SUMMARY', $aTransactionSummary); + $smarty->assign('BYTIME', $aTransactionSummaryByTime); + } else { + $debug->append('Using cached page', 3); + } + $smarty->assign('CONTENT', 'default.tpl'); +} else if (!$setting->getValue('disable_transactionsummary')) { + $smarty->assign('CONTENT', 'disabled.tpl'); +} else { + $smarty->assign('CONTENT', 'disabled.tpl'); +} + +?> diff --git a/public/include/pages/account/edit.inc.php b/include/pages/account/edit.inc.php similarity index 95% rename from public/include/pages/account/edit.inc.php rename to include/pages/account/edit.inc.php index 95aff459..78782ad4 100644 --- a/public/include/pages/account/edit.inc.php +++ b/include/pages/account/edit.inc.php @@ -132,10 +132,11 @@ if ($user->isAuthenticated()) { if ($config['twofactor']['enabled'] && $config['twofactor']['options']['details'] && !$ea_editable) { $_SESSION['POPUP'][] = array('CONTENT' => 'You have not yet unlocked account updates.', 'TYPE' => 'alert alert-danger'); } else if (!$config['csrf']['enabled'] || $config['csrf']['enabled'] && $csrftoken->valid) { - if ($user->updateAccount($_SESSION['USERDATA']['id'], $_POST['paymentAddress'], $_POST['payoutThreshold'], $_POST['donatePercent'], $_POST['email'], $_POST['is_anonymous'], $oldtoken_ea)) { - $_SESSION['POPUP'][] = array('CONTENT' => 'Account details updated', 'TYPE' => 'alert alert-success'); + if ($user->updateAccount($_SESSION['USERDATA']['id'], $_POST['paymentAddress'], $_POST['payoutThreshold'], $_POST['donatePercent'], $_POST['email'], $_POST['timezone'], $_POST['is_anonymous'], $oldtoken_ea)) { + $_SESSION['USERDATA']['timezone'] = $_POST['timezone']; + $_SESSION['POPUP'][] = array('CONTENT' => 'Account details updated', 'TYPE' => 'alert alert-success'); } else { - $_SESSION['POPUP'][] = array('CONTENT' => 'Failed to update your account: ' . $user->getError(), 'TYPE' => 'alert alert-danger'); + $_SESSION['POPUP'][] = array('CONTENT' => 'Failed to update your account: ' . $user->getError(), 'TYPE' => 'alert alert-danger'); } } else { $_SESSION['POPUP'][] = array('CONTENT' => $csrftoken->getErrorWithDescriptionHTML(), 'TYPE' => 'alert alert-warning'); @@ -197,6 +198,10 @@ if ($config['twofactor']['enabled'] && $user->isAuthenticated()) { $smarty->assign("DETAILSSENT", $ea_sent); } +// Grab our timezones +$smarty->assign('TIMEZONES', DateTimeZone::listIdentifiers()); + +// Fetch donation threshold $smarty->assign("DONATE_THRESHOLD", $config['donate_threshold']); // Tempalte specifics diff --git a/public/include/pages/account/invitations.inc.php b/include/pages/account/invitations.inc.php similarity index 100% rename from public/include/pages/account/invitations.inc.php rename to include/pages/account/invitations.inc.php diff --git a/public/include/pages/account/notifications.inc.php b/include/pages/account/notifications.inc.php similarity index 100% rename from public/include/pages/account/notifications.inc.php rename to include/pages/account/notifications.inc.php diff --git a/public/include/pages/account/qrcode.inc.php b/include/pages/account/qrcode.inc.php similarity index 100% rename from public/include/pages/account/qrcode.inc.php rename to include/pages/account/qrcode.inc.php diff --git a/public/include/pages/account/reset_failed.inc.php b/include/pages/account/reset_failed.inc.php similarity index 100% rename from public/include/pages/account/reset_failed.inc.php rename to include/pages/account/reset_failed.inc.php diff --git a/public/include/pages/account/transactions.inc.php b/include/pages/account/transactions.inc.php similarity index 100% rename from public/include/pages/account/transactions.inc.php rename to include/pages/account/transactions.inc.php diff --git a/public/include/pages/account/unlock.inc.php b/include/pages/account/unlock.inc.php similarity index 100% rename from public/include/pages/account/unlock.inc.php rename to include/pages/account/unlock.inc.php diff --git a/include/pages/account/workers.inc.php b/include/pages/account/workers.inc.php new file mode 100644 index 00000000..eeb9fb26 --- /dev/null +++ b/include/pages/account/workers.inc.php @@ -0,0 +1,62 @@ +isAuthenticated()) { + + + if (!$user->getCoinAddress($_SESSION['USERDATA']['id']) AND $setting->getValue('disable_worker_edit')) { + + $_SESSION['POPUP'][] = array('CONTENT' => 'You have no payout address set.', 'TYPE' => 'alert alert-danger'); + $_SESSION['POPUP'][] = array('CONTENT' => 'You can not add workers unless a valid Payout Address is set in your User Settings.', 'TYPE' => 'alert alert-danger'); + $smarty->assign('CONTENT', 'disabled.tpl'); + + } else { + switch (@$_REQUEST['do']) { + case 'delete': + if (!$config['csrf']['enabled'] || $config['csrf']['enabled'] && $csrftoken->valid) { + if ($worker->deleteWorker($_SESSION['USERDATA']['id'], $_GET['id'])) { + $_SESSION['POPUP'][] = array('CONTENT' => 'Worker removed', 'TYPE' => 'alert alert-success'); + } else { + $_SESSION['POPUP'][] = array('CONTENT' => $worker->getError(), 'TYPE' => 'alert alert-danger'); + } + } else { + $_SESSION['POPUP'][] = array('CONTENT' => $csrftoken->getErrorWithDescriptionHTML(), 'TYPE' => 'alert alert-warning'); + } + break; + + case 'add': + if (!$config['csrf']['enabled'] || $config['csrf']['enabled'] && $csrftoken->valid) { + if ($worker->addWorker($_SESSION['USERDATA']['id'], $_POST['username'], $_POST['password'])) { + $_SESSION['POPUP'][] = array('CONTENT' => 'Worker added', 'TYPE' => 'alert alert-success'); + } else { + $_SESSION['POPUP'][] = array('CONTENT' => $worker->getError(), 'TYPE' => 'alert alert-danger'); + } + } else { + $_SESSION['POPUP'][] = array('CONTENT' => $csrftoken->getErrorWithDescriptionHTML(), 'TYPE' => 'alert alert-warning'); + } + break; + + case 'update': + if (!$config['csrf']['enabled'] || $config['csrf']['enabled'] && $csrftoken->valid) { + if ($worker->updateWorkers($_SESSION['USERDATA']['id'], @$_POST['data'])) { + $_SESSION['POPUP'][] = array('CONTENT' => 'Worker updated', 'TYPE' => 'alert alert-success'); + } else { + $_SESSION['POPUP'][] = array('CONTENT' => $worker->getError(), 'TYPE' => 'alert alert-danger'); + } + } else { + $_SESSION['POPUP'][] = array('CONTENT' => $csrftoken->getErrorWithDescriptionHTML(), 'TYPE' => 'alert alert-warning'); + } + break; + } + + $smarty->assign('DISABLE_IDLEWORKERNOTIFICATIONS', $setting->getValue('notifications_disable_idle_worker')); + $aWorkers = $worker->getWorkers($_SESSION['USERDATA']['id']); + if (!$aWorkers) $_SESSION['POPUP'][] = array('CONTENT' => 'You have no workers configured', 'TYPE' => 'alert alert-danger'); + + $smarty->assign('WORKERS', $aWorkers); + $smarty->assign('CONTENT', 'default.tpl'); + } +} + + +?> diff --git a/public/include/pages/admin.inc.php b/include/pages/admin.inc.php similarity index 100% rename from public/include/pages/admin.inc.php rename to include/pages/admin.inc.php diff --git a/public/include/pages/admin/dashboard.inc.php b/include/pages/admin/dashboard.inc.php similarity index 89% rename from public/include/pages/admin/dashboard.inc.php rename to include/pages/admin/dashboard.inc.php index d5ab1bdc..63d2738f 100644 --- a/public/include/pages/admin/dashboard.inc.php +++ b/include/pages/admin/dashboard.inc.php @@ -14,9 +14,14 @@ if ($bitcoin->can_connect() === true){ $_SESSION['POPUP'][] = array('CONTENT' => 'Unable to connect to wallet RPC service: ' . $bitcoin->can_connect(), 'TYPE' => 'alert alert-danger'); } +// Grab versions from Online source +require_once(CLASS_DIR . '/tools.class.php'); +$online_versions = $tools->getOnlineVersions(); + // Fetch version information $version['CURRENT'] = array('DB' => DB_VERSION, 'CONFIG' => CONFIG_VERSION, 'CORE' => MPOS_VERSION); -$version['INSTALLED'] = array('DB' => $setting->getValue('DB_VERSION'), 'CONFIG' => $config['version'], 'CORE' => MPOS_VERSION); +$version['INSTALLED'] = array('DB' => $setting->getValue('DB_VERSION'), 'CONFIG' => $config['version'], 'CORE' => $online_versions['MPOS_VERSION']); +$version['ONLINE'] = array('DB' => $online_versions['DB_VERSION'], 'CONFIG' => $online_versions['CONFIG_VERSION'], 'CORE' => $online_versions['MPOS_VERSION']); // Fetch our cron list $aMonitorCrons require_once(INCLUDE_DIR . '/config/monitor_crons.inc.php'); diff --git a/public/include/pages/account/earnings.inc.php b/include/pages/admin/earnings.inc.php similarity index 100% rename from public/include/pages/account/earnings.inc.php rename to include/pages/admin/earnings.inc.php diff --git a/public/include/pages/admin/invitations.inc.php b/include/pages/admin/invitations.inc.php similarity index 100% rename from public/include/pages/admin/invitations.inc.php rename to include/pages/admin/invitations.inc.php diff --git a/public/include/pages/admin/monitoring.inc.php b/include/pages/admin/monitoring.inc.php similarity index 100% rename from public/include/pages/admin/monitoring.inc.php rename to include/pages/admin/monitoring.inc.php diff --git a/public/include/pages/admin/news.inc.php b/include/pages/admin/news.inc.php similarity index 100% rename from public/include/pages/admin/news.inc.php rename to include/pages/admin/news.inc.php diff --git a/public/include/pages/admin/news_edit.inc.php b/include/pages/admin/news_edit.inc.php similarity index 96% rename from public/include/pages/admin/news_edit.inc.php rename to include/pages/admin/news_edit.inc.php index 8b21c0e5..3d5eceed 100644 --- a/public/include/pages/admin/news_edit.inc.php +++ b/include/pages/admin/news_edit.inc.php @@ -12,7 +12,7 @@ use \Michelf\Markdown; if (@$_REQUEST['do'] == 'save') { if ($news->updateNews($_REQUEST['id'], $_REQUEST['header'], $_REQUEST['content'], $_REQUEST['active'])) { - $_SESSION['POPUP'][] = array('CONTENT' => 'News updated', 'TYPE' => 'success'); + $_SESSION['POPUP'][] = array('CONTENT' => 'News updated', 'TYPE' => 'alert alert-success'); } else { $_SESSION['POPUP'][] = array('CONTENT' => 'News update failed: ' . $news->getError(), 'TYPE' => 'alert alert-danger'); } diff --git a/public/include/pages/admin/newsletter.inc.php b/include/pages/admin/newsletter.inc.php similarity index 100% rename from public/include/pages/admin/newsletter.inc.php rename to include/pages/admin/newsletter.inc.php diff --git a/public/include/pages/admin/poolworkers.inc.php b/include/pages/admin/poolworkers.inc.php similarity index 100% rename from public/include/pages/admin/poolworkers.inc.php rename to include/pages/admin/poolworkers.inc.php diff --git a/public/include/pages/admin/registrations.inc.php b/include/pages/admin/registrations.inc.php similarity index 100% rename from public/include/pages/admin/registrations.inc.php rename to include/pages/admin/registrations.inc.php diff --git a/public/include/pages/admin/reports.inc.php b/include/pages/admin/reports.inc.php similarity index 100% rename from public/include/pages/admin/reports.inc.php rename to include/pages/admin/reports.inc.php diff --git a/public/include/pages/admin/settings.inc.php b/include/pages/admin/settings.inc.php similarity index 100% rename from public/include/pages/admin/settings.inc.php rename to include/pages/admin/settings.inc.php diff --git a/public/include/pages/admin/transactions.inc.php b/include/pages/admin/transactions.inc.php similarity index 100% rename from public/include/pages/admin/transactions.inc.php rename to include/pages/admin/transactions.inc.php diff --git a/public/include/pages/admin/user.inc.php b/include/pages/admin/user.inc.php similarity index 100% rename from public/include/pages/admin/user.inc.php rename to include/pages/admin/user.inc.php diff --git a/public/include/pages/admin/userdetails.inc.php b/include/pages/admin/userdetails.inc.php similarity index 100% rename from public/include/pages/admin/userdetails.inc.php rename to include/pages/admin/userdetails.inc.php diff --git a/public/include/pages/admin/wallet.inc.php b/include/pages/admin/wallet.inc.php similarity index 100% rename from public/include/pages/admin/wallet.inc.php rename to include/pages/admin/wallet.inc.php diff --git a/public/include/pages/api.inc.php b/include/pages/api.inc.php similarity index 100% rename from public/include/pages/api.inc.php rename to include/pages/api.inc.php diff --git a/public/include/pages/api/getblockcount.inc.php b/include/pages/api/getblockcount.inc.php similarity index 100% rename from public/include/pages/api/getblockcount.inc.php rename to include/pages/api/getblockcount.inc.php diff --git a/public/include/pages/api/getblocksfound.inc.php b/include/pages/api/getblocksfound.inc.php similarity index 100% rename from public/include/pages/api/getblocksfound.inc.php rename to include/pages/api/getblocksfound.inc.php diff --git a/public/include/pages/api/getblockstats.inc.php b/include/pages/api/getblockstats.inc.php similarity index 100% rename from public/include/pages/api/getblockstats.inc.php rename to include/pages/api/getblockstats.inc.php diff --git a/public/include/pages/api/getcronjobstatus.inc.php b/include/pages/api/getcronjobstatus.inc.php similarity index 100% rename from public/include/pages/api/getcronjobstatus.inc.php rename to include/pages/api/getcronjobstatus.inc.php diff --git a/public/include/pages/api/getcurrentworkers.inc.php b/include/pages/api/getcurrentworkers.inc.php similarity index 100% rename from public/include/pages/api/getcurrentworkers.inc.php rename to include/pages/api/getcurrentworkers.inc.php diff --git a/public/include/pages/api/getdashboarddata.inc.php b/include/pages/api/getdashboarddata.inc.php similarity index 90% rename from public/include/pages/api/getdashboarddata.inc.php rename to include/pages/api/getdashboarddata.inc.php index b4b3575b..ccd8a645 100644 --- a/public/include/pages/api/getdashboarddata.inc.php +++ b/include/pages/api/getdashboarddata.inc.php @@ -78,10 +78,22 @@ $iEstShares = $statistics->getEstimatedShares($dDifficulty); $iEstShares > 0 && $aRoundShares['valid'] > 0 ? $dEstPercent = round(100 / $iEstShares * $aRoundShares['valid'], 2) : $dEstPercent = 0; // Some estimates -$dExpectedTimePerBlock = $statistics->getNetworkExpectedTimePerBlock(); +$dExpectedTimePerBlock = $statistics->getExpectedTimePerBlock(); +$dPoolExpectedTimePerBlock = $statistics->getExpectedTimePerBlock('pool', $dPoolHashrate); $dEstNextDifficulty = $statistics->getExpectedNextDifficulty(); $iBlocksUntilDiffChange = $statistics->getBlocksUntilDiffChange(); +// Block statistics +$aLastBlocks = $statistics->getBlocksFound(5); +if (!$user->isAdmin(@$_SESSION['USERDATA']['id'])) { + foreach ($aLastBlocks as $key => $data) { + if ($data['is_anonymous'] == 1) { + $aLastBlocks[$key]['worker_name'] = 'anonymous'; + $aLastBlocks[$key]['finder'] = 'anonymous'; + } + } +} + // Output JSON format $data = array( 'raw' => array( 'personal' => array( 'hashrate' => $dPersonalHashrate ), 'pool' => array( 'hashrate' => $dPoolHashrate ), 'network' => array( 'hashrate' => $dNetworkHashrate / 1000, 'esttimeperblock' => $dExpectedTimePerBlock, 'nextdifficulty' => $dEstNextDifficulty, 'blocksuntildiffchange' => $iBlocksUntilDiffChange ) ), @@ -94,6 +106,8 @@ $data = array( 'name' => $setting->getValue('website_name'), 'currency' => $config['currency'] ), + 'esttimeperblock' => round($dPoolExpectedTimePerBlock, 2), + 'blocks' => $aLastBlocks, 'workers' => $worker->getCountAllActiveWorkers(), 'hashrate' => $dPoolHashrateAdjusted, 'shares' => array( 'valid' => $aRoundShares['valid'], 'invalid' => $aRoundShares['invalid'], 'invalid_percent' => $dPoolInvalidPercent, 'estimated' => $iEstShares, 'progress' => $dEstPercent ), 'price' => $aPrice, diff --git a/public/include/pages/api/getdifficulty.inc.php b/include/pages/api/getdifficulty.inc.php similarity index 100% rename from public/include/pages/api/getdifficulty.inc.php rename to include/pages/api/getdifficulty.inc.php diff --git a/public/include/pages/api/getestimatedtime.inc.php b/include/pages/api/getestimatedtime.inc.php similarity index 100% rename from public/include/pages/api/getestimatedtime.inc.php rename to include/pages/api/getestimatedtime.inc.php diff --git a/public/include/pages/api/gethourlyhashrates.inc.php b/include/pages/api/gethourlyhashrates.inc.php similarity index 100% rename from public/include/pages/api/gethourlyhashrates.inc.php rename to include/pages/api/gethourlyhashrates.inc.php diff --git a/public/include/pages/api/getpoolhashrate.inc.php b/include/pages/api/getpoolhashrate.inc.php similarity index 100% rename from public/include/pages/api/getpoolhashrate.inc.php rename to include/pages/api/getpoolhashrate.inc.php diff --git a/public/include/pages/api/getpoolinfo.inc.php b/include/pages/api/getpoolinfo.inc.php similarity index 100% rename from public/include/pages/api/getpoolinfo.inc.php rename to include/pages/api/getpoolinfo.inc.php diff --git a/public/include/pages/api/getpoolsharerate.inc.php b/include/pages/api/getpoolsharerate.inc.php similarity index 100% rename from public/include/pages/api/getpoolsharerate.inc.php rename to include/pages/api/getpoolsharerate.inc.php diff --git a/public/include/pages/api/getpoolstatus.inc.php b/include/pages/api/getpoolstatus.inc.php similarity index 100% rename from public/include/pages/api/getpoolstatus.inc.php rename to include/pages/api/getpoolstatus.inc.php diff --git a/public/include/pages/api/gettimesincelastblock.inc.php b/include/pages/api/gettimesincelastblock.inc.php similarity index 100% rename from public/include/pages/api/gettimesincelastblock.inc.php rename to include/pages/api/gettimesincelastblock.inc.php diff --git a/public/include/pages/api/gettopcontributors.inc.php b/include/pages/api/gettopcontributors.inc.php similarity index 100% rename from public/include/pages/api/gettopcontributors.inc.php rename to include/pages/api/gettopcontributors.inc.php diff --git a/public/include/pages/api/getuserbalance.inc.php b/include/pages/api/getuserbalance.inc.php similarity index 100% rename from public/include/pages/api/getuserbalance.inc.php rename to include/pages/api/getuserbalance.inc.php diff --git a/public/include/pages/api/getuserhashrate.inc.php b/include/pages/api/getuserhashrate.inc.php similarity index 100% rename from public/include/pages/api/getuserhashrate.inc.php rename to include/pages/api/getuserhashrate.inc.php diff --git a/public/include/pages/api/getusersharerate.inc.php b/include/pages/api/getusersharerate.inc.php similarity index 100% rename from public/include/pages/api/getusersharerate.inc.php rename to include/pages/api/getusersharerate.inc.php diff --git a/public/include/pages/api/getuserstatus.inc.php b/include/pages/api/getuserstatus.inc.php similarity index 100% rename from public/include/pages/api/getuserstatus.inc.php rename to include/pages/api/getuserstatus.inc.php diff --git a/public/include/pages/api/getusertransactions.inc.php b/include/pages/api/getusertransactions.inc.php similarity index 100% rename from public/include/pages/api/getusertransactions.inc.php rename to include/pages/api/getusertransactions.inc.php diff --git a/public/include/pages/api/getuserworkers.inc.php b/include/pages/api/getuserworkers.inc.php similarity index 100% rename from public/include/pages/api/getuserworkers.inc.php rename to include/pages/api/getuserworkers.inc.php diff --git a/public/include/pages/api/public.inc.php b/include/pages/api/public.inc.php similarity index 100% rename from public/include/pages/api/public.inc.php rename to include/pages/api/public.inc.php diff --git a/public/include/pages/contactform.inc.php b/include/pages/contactform.inc.php similarity index 100% rename from public/include/pages/contactform.inc.php rename to include/pages/contactform.inc.php diff --git a/public/include/pages/contactform/contactform.inc.php b/include/pages/contactform/contactform.inc.php similarity index 100% rename from public/include/pages/contactform/contactform.inc.php rename to include/pages/contactform/contactform.inc.php diff --git a/public/include/pages/dashboard.inc.php b/include/pages/dashboard.inc.php similarity index 80% rename from public/include/pages/dashboard.inc.php rename to include/pages/dashboard.inc.php index 7047cfb8..e813c834 100644 --- a/public/include/pages/dashboard.inc.php +++ b/include/pages/dashboard.inc.php @@ -33,11 +33,23 @@ if ($user->isAuthenticated()) { // Avoid confusion, ensure our nethash isn't higher than poolhash if ($iCurrentPoolHashrate > $dNetworkHashrate) $dNetworkHashrate = $iCurrentPoolHashrate; - $dExpectedTimePerBlock = $statistics->getNetworkExpectedTimePerBlock(); + $dExpectedTimePerBlock = $statistics->getExpectedTimePerBlock('pool', $iCurrentPoolHashrate); $dEstNextDifficulty = $statistics->getExpectedNextDifficulty(); $iBlocksUntilDiffChange = $statistics->getBlocksUntilDiffChange(); + // Block statistics + $aLastBlocks = $statistics->getBlocksFound(5); + if (!$user->isAdmin(@$_SESSION['USERDATA']['id'])) { + foreach ($aLastBlocks as $key => $data) { + if ($data['is_anonymous'] == 1) { + $aLastBlocks[$key]['worker_name'] = 'anonymous'; + $aLastBlocks[$key]['finder'] = 'anonymous'; + } + } + } + // Make it available in Smarty + $smarty->assign('BLOCKSFOUND', $aLastBlocks); $smarty->assign('DISABLED_DASHBOARD', $setting->getValue('disable_dashboard')); $smarty->assign('DISABLED_DASHBOARD_API', $setting->getValue('disable_dashboard_api')); $smarty->assign('ESTIMATES', array('shares' => $iEstShares, 'percent' => $dEstPercent)); diff --git a/public/include/pages/error.inc.php b/include/pages/error.inc.php similarity index 100% rename from public/include/pages/error.inc.php rename to include/pages/error.inc.php diff --git a/public/include/pages/error/404.inc.php b/include/pages/error/404.inc.php similarity index 100% rename from public/include/pages/error/404.inc.php rename to include/pages/error/404.inc.php diff --git a/public/include/pages/error/ratelimit.inc.php b/include/pages/error/ratelimit.inc.php similarity index 100% rename from public/include/pages/error/ratelimit.inc.php rename to include/pages/error/ratelimit.inc.php diff --git a/public/include/pages/gettingstarted.inc.php b/include/pages/gettingstarted.inc.php similarity index 100% rename from public/include/pages/gettingstarted.inc.php rename to include/pages/gettingstarted.inc.php diff --git a/public/include/pages/home.inc.php b/include/pages/home.inc.php similarity index 100% rename from public/include/pages/home.inc.php rename to include/pages/home.inc.php diff --git a/public/include/pages/login.inc.php b/include/pages/login.inc.php similarity index 100% rename from public/include/pages/login.inc.php rename to include/pages/login.inc.php diff --git a/public/include/pages/logout.inc.php b/include/pages/logout.inc.php similarity index 100% rename from public/include/pages/logout.inc.php rename to include/pages/logout.inc.php diff --git a/public/include/pages/news.inc.php b/include/pages/news.inc.php similarity index 100% rename from public/include/pages/news.inc.php rename to include/pages/news.inc.php diff --git a/public/include/pages/password.inc.php b/include/pages/password.inc.php similarity index 100% rename from public/include/pages/password.inc.php rename to include/pages/password.inc.php diff --git a/public/include/pages/password/change.inc.php b/include/pages/password/change.inc.php similarity index 100% rename from public/include/pages/password/change.inc.php rename to include/pages/password/change.inc.php diff --git a/public/include/pages/password/reset.inc.php b/include/pages/password/reset.inc.php similarity index 100% rename from public/include/pages/password/reset.inc.php rename to include/pages/password/reset.inc.php diff --git a/public/include/pages/register.inc.php b/include/pages/register.inc.php similarity index 100% rename from public/include/pages/register.inc.php rename to include/pages/register.inc.php diff --git a/public/include/pages/register/register.inc.php b/include/pages/register/register.inc.php similarity index 92% rename from public/include/pages/register/register.inc.php rename to include/pages/register/register.inc.php index e2dcd75f..60d988c6 100644 --- a/public/include/pages/register/register.inc.php +++ b/include/pages/register/register.inc.php @@ -26,7 +26,7 @@ if ($setting->getValue('disable_invitations') && $setting->getValue('lock_regist if ($setting->getValue('recaptcha_enabled') != 1 || $setting->getValue('recaptcha_enabled_registrations') != 1 || $rsp->is_valid) { // Check if recaptcha is enabled, process form data if valid or disabled isset($_POST['token']) ? $token = $_POST['token'] : $token = ''; - if ($user->register(@$_POST['username'], @$_POST['password1'], @$_POST['password2'], @$_POST['pin'], @$_POST['email1'], @$_POST['email2'], @$_POST['tac'], $token)) { + if ($user->register(@$_POST['username'], @$_POST['coinaddress'], @$_POST['password1'], @$_POST['password2'], @$_POST['pin'], @$_POST['email1'], @$_POST['email2'], @$_POST['tac'], $token)) { (!$setting->getValue('accounts_confirm_email_disabled')) ? $_SESSION['POPUP'][] = array('CONTENT' => 'Please check your mailbox to activate this account') : $_SESSION['POPUP'][] = array('CONTENT' => 'Account created, please login'); } else { $_SESSION['POPUP'][] = array('CONTENT' => 'Unable to create account: ' . $user->getError(), 'TYPE' => 'alert alert-danger'); diff --git a/public/include/pages/statistics.inc.php b/include/pages/statistics.inc.php similarity index 100% rename from public/include/pages/statistics.inc.php rename to include/pages/statistics.inc.php diff --git a/public/include/pages/statistics/blockfinder.inc.php b/include/pages/statistics/blockfinder.inc.php similarity index 100% rename from public/include/pages/statistics/blockfinder.inc.php rename to include/pages/statistics/blockfinder.inc.php diff --git a/public/include/pages/statistics/blocks.inc.php b/include/pages/statistics/blocks.inc.php similarity index 97% rename from public/include/pages/statistics/blocks.inc.php rename to include/pages/statistics/blocks.inc.php index 90ea8425..3fd0d616 100644 --- a/public/include/pages/statistics/blocks.inc.php +++ b/include/pages/statistics/blocks.inc.php @@ -34,9 +34,9 @@ if (!$smarty->isCached('master.tpl', $smarty_cache_key)) { $test = true; $count = 10; $percent = 30; - if (@$_REQUEST['count'] && is_numeric($_REQUEST['count'])) + if (@$_REQUEST['count'] && is_numeric($_REQUEST['count'])) $count = $_REQUEST['count']; - if (@$_REQUEST['percent'] && is_numeric($_REQUEST['percent'])) + if (@$_REQUEST['percent'] && is_numeric($_REQUEST['percent'])) $percent = $_REQUEST['percent']; } @@ -48,19 +48,19 @@ if (!$smarty->isCached('master.tpl', $smarty_cache_key)) { if ($setting->getValue('statistics_show_block_average') && !$test) { $aBlocksFoundData[$key]['block_avg'] = round($block->getAvgBlockShares($aData['height'], $config['pplns']['blockavg']['blockcount'])); $use_average = true; - } + } } } else if ($config['payout_system'] == 'prop' || $config['payout_system'] == 'pps') { if ($setting->getValue('statistics_show_block_average') && !$test) { foreach($aBlocksFoundData as $key => $aData) { $aBlocksFoundData[$key]['block_avg'] = round($block->getAvgBlockShares($aData['height'], $config['pplns']['blockavg']['blockcount'])); $use_average = true; - } + } } } // show test data in graph if ($test) { - $use_average = true; + $use_average = true; foreach($aBlocksFoundData as $key => $aData) { if ($_REQUEST['test'] == 1) { $aBlocksFoundData[$key]['block_avg'] = round($block->getAvgBlockShares($aData['height'], $count)); diff --git a/public/include/pages/statistics/donors.inc.php b/include/pages/statistics/donors.inc.php similarity index 100% rename from public/include/pages/statistics/donors.inc.php rename to include/pages/statistics/donors.inc.php diff --git a/public/include/pages/statistics/graphs.inc.php b/include/pages/statistics/graphs.inc.php similarity index 100% rename from public/include/pages/statistics/graphs.inc.php rename to include/pages/statistics/graphs.inc.php diff --git a/public/include/pages/statistics/pool.inc.php b/include/pages/statistics/pool.inc.php similarity index 94% rename from public/include/pages/statistics/pool.inc.php rename to include/pages/statistics/pool.inc.php index 47ba55c4..cc27b12f 100644 --- a/public/include/pages/statistics/pool.inc.php +++ b/include/pages/statistics/pool.inc.php @@ -32,7 +32,7 @@ if (!$smarty->isCached('master.tpl', $smarty_cache_key)) { $iCurrentPoolHashrate = $statistics->getCurrentHashrate(); // Time in seconds, not hours, using modifier in smarty to translate - $iCurrentPoolHashrate > 0 ? $iEstTime = $dDifficulty * pow(2,32) / ($iCurrentPoolHashrate * 1000) : $iEstTime = 0; + $iCurrentPoolHashrate > 0 ? $iEstTime = $statistics->getExpectedTimePerBlock('pool', $iCurrentPoolHashrate) : $iEstTime = 0; // Time since last block if (!empty($aBlockData)) { @@ -54,7 +54,7 @@ if (!$smarty->isCached('master.tpl', $smarty_cache_key)) { $dEstPercent = 0; } - $dExpectedTimePerBlock = $statistics->getNetworkExpectedTimePerBlock(); + $dExpectedTimePerBlock = $statistics->getExpectedTimePerBlock(); $dEstNextDifficulty = $statistics->getExpectedNextDifficulty(); $iBlocksUntilDiffChange = $statistics->getBlocksUntilDiffChange(); diff --git a/public/include/pages/statistics/round.inc.php b/include/pages/statistics/round.inc.php similarity index 100% rename from public/include/pages/statistics/round.inc.php rename to include/pages/statistics/round.inc.php diff --git a/public/include/pages/statistics/uptime.inc.php b/include/pages/statistics/uptime.inc.php similarity index 100% rename from public/include/pages/statistics/uptime.inc.php rename to include/pages/statistics/uptime.inc.php diff --git a/public/include/pages/tac.inc.php b/include/pages/tac.inc.php similarity index 100% rename from public/include/pages/tac.inc.php rename to include/pages/tac.inc.php diff --git a/public/include/pages/tacpop.inc.php b/include/pages/tacpop.inc.php similarity index 100% rename from public/include/pages/tacpop.inc.php rename to include/pages/tacpop.inc.php diff --git a/public/include/smarty.inc.php b/include/smarty.inc.php similarity index 82% rename from public/include/smarty.inc.php rename to include/smarty.inc.php index bb931fe5..ac2935d9 100644 --- a/public/include/smarty.inc.php +++ b/include/smarty.inc.php @@ -13,8 +13,8 @@ $smarty = new Smarty; // Assign our local paths $debug->append('Define Smarty Paths', 3); -$smarty->template_dir = BASEPATH . 'templates/' . THEME . '/'; -$smarty->compile_dir = BASEPATH . 'templates/compile/' . THEME . '/'; +$smarty->template_dir = TEMPLATE_DIR . '/' . THEME . '/'; +$smarty->compile_dir = TEMPLATE_DIR . '/compile/' . THEME . '/'; $smarty_cache_key = md5(serialize($_REQUEST) . serialize(@$_SESSION['USERDATA']['id'])); // Optional smarty caching, check Smarty documentation for details @@ -22,7 +22,7 @@ if ($config['smarty']['cache']) { $debug->append('Enable smarty cache'); $smarty->setCaching(Smarty::CACHING_LIFETIME_SAVED); $smarty->cache_lifetime = $config['smarty']['cache_lifetime']; - $smarty->cache_dir = BASEPATH . "templates/cache/" . THEME; + $smarty->cache_dir = TEMPLATE_DIR . '/cache/' . THEME; $smarty->escape_html = true; $smarty->use_sub_dirs = true; } diff --git a/public/include/smarty/libs/Smarty.class.php b/include/smarty/libs/Smarty.class.php similarity index 100% rename from public/include/smarty/libs/Smarty.class.php rename to include/smarty/libs/Smarty.class.php diff --git a/public/include/smarty/libs/SmartyBC.class.php b/include/smarty/libs/SmartyBC.class.php similarity index 100% rename from public/include/smarty/libs/SmartyBC.class.php rename to include/smarty/libs/SmartyBC.class.php diff --git a/public/include/smarty/libs/debug.tpl b/include/smarty/libs/debug.tpl similarity index 100% rename from public/include/smarty/libs/debug.tpl rename to include/smarty/libs/debug.tpl diff --git a/public/include/smarty/libs/plugins/block.textformat.php b/include/smarty/libs/plugins/block.textformat.php similarity index 100% rename from public/include/smarty/libs/plugins/block.textformat.php rename to include/smarty/libs/plugins/block.textformat.php diff --git a/public/include/smarty/libs/plugins/function.counter.php b/include/smarty/libs/plugins/function.counter.php similarity index 100% rename from public/include/smarty/libs/plugins/function.counter.php rename to include/smarty/libs/plugins/function.counter.php diff --git a/public/include/smarty/libs/plugins/function.cycle.php b/include/smarty/libs/plugins/function.cycle.php similarity index 100% rename from public/include/smarty/libs/plugins/function.cycle.php rename to include/smarty/libs/plugins/function.cycle.php diff --git a/public/include/smarty/libs/plugins/function.fetch.php b/include/smarty/libs/plugins/function.fetch.php similarity index 100% rename from public/include/smarty/libs/plugins/function.fetch.php rename to include/smarty/libs/plugins/function.fetch.php diff --git a/public/include/smarty/libs/plugins/function.html_checkboxes.php b/include/smarty/libs/plugins/function.html_checkboxes.php similarity index 100% rename from public/include/smarty/libs/plugins/function.html_checkboxes.php rename to include/smarty/libs/plugins/function.html_checkboxes.php diff --git a/public/include/smarty/libs/plugins/function.html_image.php b/include/smarty/libs/plugins/function.html_image.php similarity index 100% rename from public/include/smarty/libs/plugins/function.html_image.php rename to include/smarty/libs/plugins/function.html_image.php diff --git a/public/include/smarty/libs/plugins/function.html_options.php b/include/smarty/libs/plugins/function.html_options.php similarity index 100% rename from public/include/smarty/libs/plugins/function.html_options.php rename to include/smarty/libs/plugins/function.html_options.php diff --git a/public/include/smarty/libs/plugins/function.html_radios.php b/include/smarty/libs/plugins/function.html_radios.php similarity index 100% rename from public/include/smarty/libs/plugins/function.html_radios.php rename to include/smarty/libs/plugins/function.html_radios.php diff --git a/public/include/smarty/libs/plugins/function.html_select_date.php b/include/smarty/libs/plugins/function.html_select_date.php similarity index 100% rename from public/include/smarty/libs/plugins/function.html_select_date.php rename to include/smarty/libs/plugins/function.html_select_date.php diff --git a/public/include/smarty/libs/plugins/function.html_select_time.php b/include/smarty/libs/plugins/function.html_select_time.php similarity index 100% rename from public/include/smarty/libs/plugins/function.html_select_time.php rename to include/smarty/libs/plugins/function.html_select_time.php diff --git a/public/include/smarty/libs/plugins/function.html_table.php b/include/smarty/libs/plugins/function.html_table.php similarity index 100% rename from public/include/smarty/libs/plugins/function.html_table.php rename to include/smarty/libs/plugins/function.html_table.php diff --git a/public/include/smarty/libs/plugins/function.mailto.php b/include/smarty/libs/plugins/function.mailto.php similarity index 100% rename from public/include/smarty/libs/plugins/function.mailto.php rename to include/smarty/libs/plugins/function.mailto.php diff --git a/public/include/smarty/libs/plugins/function.math.php b/include/smarty/libs/plugins/function.math.php similarity index 100% rename from public/include/smarty/libs/plugins/function.math.php rename to include/smarty/libs/plugins/function.math.php diff --git a/public/include/smarty/libs/plugins/modifier.capitalize.php b/include/smarty/libs/plugins/modifier.capitalize.php similarity index 100% rename from public/include/smarty/libs/plugins/modifier.capitalize.php rename to include/smarty/libs/plugins/modifier.capitalize.php diff --git a/public/include/smarty/libs/plugins/modifier.date_format.php b/include/smarty/libs/plugins/modifier.date_format.php similarity index 100% rename from public/include/smarty/libs/plugins/modifier.date_format.php rename to include/smarty/libs/plugins/modifier.date_format.php diff --git a/public/include/smarty/libs/plugins/modifier.debug_print_var.php b/include/smarty/libs/plugins/modifier.debug_print_var.php similarity index 100% rename from public/include/smarty/libs/plugins/modifier.debug_print_var.php rename to include/smarty/libs/plugins/modifier.debug_print_var.php diff --git a/public/include/smarty/libs/plugins/modifier.escape.php b/include/smarty/libs/plugins/modifier.escape.php similarity index 100% rename from public/include/smarty/libs/plugins/modifier.escape.php rename to include/smarty/libs/plugins/modifier.escape.php diff --git a/public/include/smarty/libs/plugins/modifier.regex_replace.php b/include/smarty/libs/plugins/modifier.regex_replace.php similarity index 100% rename from public/include/smarty/libs/plugins/modifier.regex_replace.php rename to include/smarty/libs/plugins/modifier.regex_replace.php diff --git a/public/include/smarty/libs/plugins/modifier.relative_date.php b/include/smarty/libs/plugins/modifier.relative_date.php similarity index 100% rename from public/include/smarty/libs/plugins/modifier.relative_date.php rename to include/smarty/libs/plugins/modifier.relative_date.php diff --git a/public/include/smarty/libs/plugins/modifier.replace.php b/include/smarty/libs/plugins/modifier.replace.php similarity index 100% rename from public/include/smarty/libs/plugins/modifier.replace.php rename to include/smarty/libs/plugins/modifier.replace.php diff --git a/include/smarty/libs/plugins/modifier.seconds_to_hhmmss.php b/include/smarty/libs/plugins/modifier.seconds_to_hhmmss.php new file mode 100644 index 00000000..08a06417 --- /dev/null +++ b/include/smarty/libs/plugins/modifier.seconds_to_hhmmss.php @@ -0,0 +1,18 @@ + $config['twofactor'], 'csrf' => $config['csrf'], 'config' => array( + 'date' => $setting->getValue('system_date_format', '%m/%d/%Y %H:%M:%S'), 'website_design' => $setting->getValue('website_design'), 'poolnav_enabled' => $setting->getValue('poolnav_enabled'), 'poolnav_pools' => $setting->getValue('poolnav_pools'), @@ -77,6 +78,8 @@ $aGlobal = array( 'disable_auto_payouts' => $setting->getValue('disable_auto_payouts'), 'disable_contactform' => $setting->getValue('disable_contactform'), 'disable_contactform_guest' => $setting->getValue('disable_contactform_guest'), + 'disable_worker_edit' => $setting->getValue('disable_worker_edit'), + 'disable_transactionsummary' => $setting->getValue('disable_transactionsummary'), 'algorithm' => $config['algorithm'], 'getbalancewithunconfirmed' => $config['getbalancewithunconfirmed'], 'target_bits' => $coin->getTargetBits(), @@ -186,8 +189,30 @@ if (@$_SESSION['USERDATA']['id']) { if ($setting->getValue('maintenance')) $_SESSION['POPUP'][] = array('CONTENT' => 'This pool is currently in maintenance mode.', 'TYPE' => 'alert alert-warning'); -if ($motd = $setting->getValue('system_motd')) - $_SESSION['POPUP'][] = array('CONTENT' => $motd, 'DISMISS' => 'yes', 'ID' => 'motd', 'TYPE' => 'alert alert-info'); +if ($motd = $setting->getValue('system_motd')) { + if ($setting->getValue('system_motd_dismiss')) { + $motd_dismiss = "yes"; + } else { + $motd_dismiss = "no"; + } + switch ($setting->getValue('system_motd_style', 0)) { + case 0: + $motd_style = "alert-success"; + break; + case 1: + $motd_style = "alert-info"; + break; + case 2: + $motd_style = "alert-warning"; + break; + case 3: + $motd_style = "alert-danger"; + break; + default: + $motd_style = "alert-info"; + } + $_SESSION['POPUP'][] = array('CONTENT' => $motd, 'DISMISS' => $motd_dismiss, 'ID' => 'motd', 'TYPE' => 'alert ' . $motd_style . ''); +} // check for deprecated theme if ($setting->getValue('website_theme') == "mpos") diff --git a/public/include/version.inc.php b/include/version.inc.php similarity index 94% rename from public/include/version.inc.php rename to include/version.inc.php index 2348930e..f0ea33f7 100644 --- a/public/include/version.inc.php +++ b/include/version.inc.php @@ -2,8 +2,9 @@ $defflip = (!cfip()) ? exit(header('HTTP/1.1 401 Unauthorized')) : 1; define('MPOS_VERSION', '0.0.4'); -define('DB_VERSION', '0.0.8'); +define('DB_VERSION', '0.0.10'); define('CONFIG_VERSION', '0.0.8'); +define('HASH_VERSION', 1); // Fetch installed database version $db_version = $setting->getValue('DB_VERSION'); diff --git a/public/.htaccess b/public/.htaccess index 9750f3bb..20cf67c6 100644 --- a/public/.htaccess +++ b/public/.htaccess @@ -1,4 +1,2 @@ ErrorDocument 404 /index.php?page=error&action=404 -RedirectMatch 404 /templates(/|$) -RedirectMatch 404 /include(/|$) RedirectMatch 404 /.git(/|$) diff --git a/public/include/pages/account/workers.inc.php b/public/include/pages/account/workers.inc.php deleted file mode 100644 index 2284aa41..00000000 --- a/public/include/pages/account/workers.inc.php +++ /dev/null @@ -1,51 +0,0 @@ -isAuthenticated()) { - switch (@$_REQUEST['do']) { - case 'delete': - if (!$config['csrf']['enabled'] || $config['csrf']['enabled'] && $csrftoken->valid) { - if ($worker->deleteWorker($_SESSION['USERDATA']['id'], $_GET['id'])) { - $_SESSION['POPUP'][] = array('CONTENT' => 'Worker removed', 'TYPE' => 'alert alert-success'); - } else { - $_SESSION['POPUP'][] = array('CONTENT' => $worker->getError(), 'TYPE' => 'alert alert-danger'); - } - } else { - $_SESSION['POPUP'][] = array('CONTENT' => $csrftoken->getErrorWithDescriptionHTML(), 'TYPE' => 'alert alert-warning'); - } - break; - - case 'add': - if (!$config['csrf']['enabled'] || $config['csrf']['enabled'] && $csrftoken->valid) { - if ($worker->addWorker($_SESSION['USERDATA']['id'], $_POST['username'], $_POST['password'])) { - $_SESSION['POPUP'][] = array('CONTENT' => 'Worker added', 'TYPE' => 'alert alert-success'); - } else { - $_SESSION['POPUP'][] = array('CONTENT' => $worker->getError(), 'TYPE' => 'alert alert-danger'); - } - } else { - $_SESSION['POPUP'][] = array('CONTENT' => $csrftoken->getErrorWithDescriptionHTML(), 'TYPE' => 'alert alert-warning'); - } - break; - - case 'update': - if (!$config['csrf']['enabled'] || $config['csrf']['enabled'] && $csrftoken->valid) { - if ($worker->updateWorkers($_SESSION['USERDATA']['id'], @$_POST['data'])) { - $_SESSION['POPUP'][] = array('CONTENT' => 'Worker updated', 'TYPE' => 'alert alert-success'); - } else { - $_SESSION['POPUP'][] = array('CONTENT' => $worker->getError(), 'TYPE' => 'alert alert-danger'); - } - } else { - $_SESSION['POPUP'][] = array('CONTENT' => $csrftoken->getErrorWithDescriptionHTML(), 'TYPE' => 'alert alert-warning'); - } - break; - } - - $smarty->assign('DISABLE_IDLEWORKERNOTIFICATIONS', $setting->getValue('notifications_disable_idle_worker')); - $aWorkers = $worker->getWorkers($_SESSION['USERDATA']['id']); - if (!$aWorkers) $_SESSION['POPUP'][] = array('CONTENT' => 'You have no workers configured', 'TYPE' => 'alert alert-danger'); - - $smarty->assign('WORKERS', $aWorkers); -} -$smarty->assign('CONTENT', 'default.tpl'); - -?> diff --git a/public/include/pages/admin/earnings.inc.php b/public/include/pages/admin/earnings.inc.php deleted file mode 100644 index c4fe7015..00000000 --- a/public/include/pages/admin/earnings.inc.php +++ /dev/null @@ -1,21 +0,0 @@ -isAuthenticated()) { - if (!$smarty->isCached('master.tpl', $smarty_cache_key)) { - $iLimit = 30; - $debug->append('No cached version available, fetching from backend', 3); - if (!$setting->getValue('disable_transactionsummary')) { - $aTransactionSummary = $transaction->getTransactionSummary($_SESSION['USERDATA']['id']); - $aTransactionSummaryByTime = $transaction->getTransactionTypebyTime($_SESSION['USERDATA']['id']); - $smarty->assign('SUMMARY', $aTransactionSummary); - $smarty->assign('BYTIME', $aTransactionSummaryByTime); - } - } else { - $debug->append('Using cached page', 3); - } -} - -$smarty->assign('CONTENT', 'default.tpl'); -?> diff --git a/public/include/pages/api/getnavbardata.inc.php b/public/include/pages/api/getnavbardata.inc.php deleted file mode 100644 index 24ab357e..00000000 --- a/public/include/pages/api/getnavbardata.inc.php +++ /dev/null @@ -1,76 +0,0 @@ -getValue('disable_navbar_api')) { - echo $api->get_json(array('error' => 'disabled')); - die(); -} - -// System load check -if ($load = @sys_getloadavg()) { - if (isset($config['system']['load']['max']) && $load[0] > $config['system']['load']['max']) { - header('HTTP/1.1 503 Too busy, try again later'); - die('Server too busy. Please try again later.'); - } -} - -// Fetch RPC information -if ($bitcoin->can_connect() === true) { - $dNetworkHashrate = $bitcoin->getnetworkhashps(); - $dDifficulty = $bitcoin->getdifficulty(); - $iBlock = $bitcoin->getblockcount(); -} else { - $dNetworkHashrate = 0; - $dDifficulty = 1; - $iBlock = 0; -} - -// Some settings -if ( ! $interval = $setting->getValue('statistics_ajax_data_interval')) $interval = 300; -if ( ! $dPoolHashrateModifier = $setting->getValue('statistics_pool_hashrate_modifier') ) $dPoolHashrateModifier = 1; -if ( ! $dNetworkHashrateModifier = $setting->getValue('statistics_network_hashrate_modifier') ) $dNetworkHashrateModifier = 1; - -// Fetch raw data -$statistics->setGetCache(false); -$dPoolHashrate = $statistics->getCurrentHashrate($interval); -if ($dPoolHashrate > $dNetworkHashrate) $dNetworkHashrate = $dPoolHashrate; -$statistics->setGetCache(true); - -// Small helper -$aHashunits = array( '1' => 'KH/s', '0.001' => 'MH/s', '0.000001' => 'GH/s', '0.000000001' => 'TH/s' ); - -// Apply pool modifiers -$dPoolHashrateAdjusted = $dPoolHashrate * $dPoolHashrateModifier; -$dNetworkHashrateAdjusted = $dNetworkHashrate / 1000 * $dNetworkHashrateModifier; - -// Use caches for this one -$aRoundShares = $statistics->getRoundShares(); - -$iTotalRoundShares = $aRoundShares['valid'] + $aRoundShares['invalid']; -if ($iTotalRoundShares > 0) { - $dPoolInvalidPercent = round($aRoundShares['invalid'] / $iTotalRoundShares * 100, 2); -} else { - $dUserInvalidPercent = 0; - $dPoolInvalidPercent = 0; -} - -// Round progress -$iEstShares = $statistics->getEstimatedShares($dDifficulty); -if ($iEstShares > 0 && $aRoundShares['valid'] > 0) { - $dEstPercent = round(100 / $iEstShares * $aRoundShares['valid'], 2); -} else { - $dEstPercent = 0; -} - -// Output JSON format -$data = array( - 'raw' => array( 'workers' => $worker->getCountAllActiveWorkers(), 'pool' => array( 'hashrate' => $dPoolHashrate ) ), - 'pool' => array( 'workers' => $worker->getCountAllActiveWorkers(), 'hashrate' => $dPoolHashrateAdjusted, 'estimated' => $iEstShares, 'progress' => $dEstPercent ), - 'network' => array( 'hashrate' => $dNetworkHashrateAdjusted, 'difficulty' => $dDifficulty, 'block' => $iBlock ) -); -echo $api->get_json($data); - -// Supress master template -$supress_master = 1; -?> diff --git a/public/index.php b/public/index.php index b1d1d60a..d169fff9 100644 --- a/public/index.php +++ b/public/index.php @@ -37,20 +37,14 @@ if (SECHASH_CHECK) { define("BASEPATH", dirname(__FILE__) . "/"); // all our includes and config etc are now in bootstrap -include_once('include/bootstrap.php'); +include_once(BASEPATH . '../include/bootstrap.php'); // switch to https if config option is enabled $hts = ($config['https_only'] && (!empty($_SERVER['QUERY_STRING']))) ? "https://".$_SERVER['SERVER_NAME'].$_SERVER['SCRIPT_NAME']."?".$_SERVER['QUERY_STRING'] : "https://".$_SERVER['SERVER_NAME'].$_SERVER['SCRIPT_NAME']; ($config['https_only'] && @!$_SERVER['HTTPS']) ? exit(header("Location: ".$hts)):0; -// Rate limiting +// Rate limiting, we use our initilized memcache from bootstrap/autoloader if ($config['memcache']['enabled'] && $config['mc_antidos']['enabled']) { - if (PHP_OS == 'WINNT') { - require_once(CLASS_DIR . '/memcached.class.php'); - } - // memcache antidos needs a memcache handle - $memcache = new Memcached(); - $memcache->addServer($config['memcache']['host'], $config['memcache']['port']); require_once(CLASS_DIR . '/memcache_ad.class.php'); $skip_check = false; // if this is an api call we need to be careful not to time them out for those calls separately @@ -107,7 +101,6 @@ if (count(@$_SESSION['last_ip_pop']) == 2) { // version check and config check if not disabled if (@$_SESSION['USERDATA']['is_admin'] && $user->isAdmin(@$_SESSION['USERDATA']['id'])) { - require_once(INCLUDE_DIR . '/version.inc.php'); if (!@$config['skip_config_tests']) { require_once(INCLUDE_DIR . '/admin_checks.php'); } diff --git a/public/site_assets/bootstrap/audio/ding.ogg b/public/site_assets/bootstrap/audio/ding.ogg new file mode 100644 index 00000000..201777fe Binary files /dev/null and b/public/site_assets/bootstrap/audio/ding.ogg differ diff --git a/public/site_assets/bootstrap/css/bootstrap.css b/public/site_assets/bootstrap/css/bootstrap.css index 25d47e1d..7f366519 100644 --- a/public/site_assets/bootstrap/css/bootstrap.css +++ b/public/site_assets/bootstrap/css/bootstrap.css @@ -1,5 +1,5 @@ /*! - * Bootstrap v3.1.0 (http://getbootstrap.com) + * Bootstrap v3.1.1 (http://getbootstrap.com) * Copyright 2011-2014 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ @@ -275,7 +275,7 @@ html { body { font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; - line-height: 1.428571429; + line-height: 1.42857143; color: #333; background-color: #fff; } @@ -307,7 +307,11 @@ figure { img { vertical-align: middle; } -.img-responsive { +.img-responsive, +.thumbnail > img, +.thumbnail a > img, +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { display: block; max-width: 100%; height: auto; @@ -320,7 +324,7 @@ img { max-width: 100%; height: auto; padding: 4px; - line-height: 1.428571429; + line-height: 1.42857143; background-color: #fff; border: 1px solid #ddd; border-radius: 4px; @@ -580,6 +584,7 @@ ol ol { } .list-inline { padding-left: 0; + margin-left: -5px; list-style: none; } .list-inline > li { @@ -587,16 +592,13 @@ ol ol { padding-right: 5px; padding-left: 5px; } -.list-inline > li:first-child { - padding-left: 0; -} dl { margin-top: 0; margin-bottom: 20px; } dt, dd { - line-height: 1.428571429; + line-height: 1.42857143; } dt { font-weight: bold; @@ -643,7 +645,7 @@ blockquote small, blockquote .small { display: block; font-size: 80%; - line-height: 1.428571429; + line-height: 1.42857143; color: #999; } blockquote footer:before, @@ -682,7 +684,7 @@ blockquote:after { address { margin-bottom: 20px; font-style: normal; - line-height: 1.428571429; + line-height: 1.42857143; } code, kbd, @@ -711,7 +713,7 @@ pre { padding: 9.5px; margin: 0 0 10px; font-size: 13px; - line-height: 1.428571429; + line-height: 1.42857143; color: #333; word-break: break-all; word-wrap: break-word; @@ -775,73 +777,73 @@ pre code { width: 100%; } .col-xs-11 { - width: 91.66666666666666%; + width: 91.66666667%; } .col-xs-10 { - width: 83.33333333333334%; + width: 83.33333333%; } .col-xs-9 { width: 75%; } .col-xs-8 { - width: 66.66666666666666%; + width: 66.66666667%; } .col-xs-7 { - width: 58.333333333333336%; + width: 58.33333333%; } .col-xs-6 { width: 50%; } .col-xs-5 { - width: 41.66666666666667%; + width: 41.66666667%; } .col-xs-4 { - width: 33.33333333333333%; + width: 33.33333333%; } .col-xs-3 { width: 25%; } .col-xs-2 { - width: 16.666666666666664%; + width: 16.66666667%; } .col-xs-1 { - width: 8.333333333333332%; + width: 8.33333333%; } .col-xs-pull-12 { right: 100%; } .col-xs-pull-11 { - right: 91.66666666666666%; + right: 91.66666667%; } .col-xs-pull-10 { - right: 83.33333333333334%; + right: 83.33333333%; } .col-xs-pull-9 { right: 75%; } .col-xs-pull-8 { - right: 66.66666666666666%; + right: 66.66666667%; } .col-xs-pull-7 { - right: 58.333333333333336%; + right: 58.33333333%; } .col-xs-pull-6 { right: 50%; } .col-xs-pull-5 { - right: 41.66666666666667%; + right: 41.66666667%; } .col-xs-pull-4 { - right: 33.33333333333333%; + right: 33.33333333%; } .col-xs-pull-3 { right: 25%; } .col-xs-pull-2 { - right: 16.666666666666664%; + right: 16.66666667%; } .col-xs-pull-1 { - right: 8.333333333333332%; + right: 8.33333333%; } .col-xs-pull-0 { right: 0; @@ -850,37 +852,37 @@ pre code { left: 100%; } .col-xs-push-11 { - left: 91.66666666666666%; + left: 91.66666667%; } .col-xs-push-10 { - left: 83.33333333333334%; + left: 83.33333333%; } .col-xs-push-9 { left: 75%; } .col-xs-push-8 { - left: 66.66666666666666%; + left: 66.66666667%; } .col-xs-push-7 { - left: 58.333333333333336%; + left: 58.33333333%; } .col-xs-push-6 { left: 50%; } .col-xs-push-5 { - left: 41.66666666666667%; + left: 41.66666667%; } .col-xs-push-4 { - left: 33.33333333333333%; + left: 33.33333333%; } .col-xs-push-3 { left: 25%; } .col-xs-push-2 { - left: 16.666666666666664%; + left: 16.66666667%; } .col-xs-push-1 { - left: 8.333333333333332%; + left: 8.33333333%; } .col-xs-push-0 { left: 0; @@ -889,37 +891,37 @@ pre code { margin-left: 100%; } .col-xs-offset-11 { - margin-left: 91.66666666666666%; + margin-left: 91.66666667%; } .col-xs-offset-10 { - margin-left: 83.33333333333334%; + margin-left: 83.33333333%; } .col-xs-offset-9 { margin-left: 75%; } .col-xs-offset-8 { - margin-left: 66.66666666666666%; + margin-left: 66.66666667%; } .col-xs-offset-7 { - margin-left: 58.333333333333336%; + margin-left: 58.33333333%; } .col-xs-offset-6 { margin-left: 50%; } .col-xs-offset-5 { - margin-left: 41.66666666666667%; + margin-left: 41.66666667%; } .col-xs-offset-4 { - margin-left: 33.33333333333333%; + margin-left: 33.33333333%; } .col-xs-offset-3 { margin-left: 25%; } .col-xs-offset-2 { - margin-left: 16.666666666666664%; + margin-left: 16.66666667%; } .col-xs-offset-1 { - margin-left: 8.333333333333332%; + margin-left: 8.33333333%; } .col-xs-offset-0 { margin-left: 0; @@ -932,73 +934,73 @@ pre code { width: 100%; } .col-sm-11 { - width: 91.66666666666666%; + width: 91.66666667%; } .col-sm-10 { - width: 83.33333333333334%; + width: 83.33333333%; } .col-sm-9 { width: 75%; } .col-sm-8 { - width: 66.66666666666666%; + width: 66.66666667%; } .col-sm-7 { - width: 58.333333333333336%; + width: 58.33333333%; } .col-sm-6 { width: 50%; } .col-sm-5 { - width: 41.66666666666667%; + width: 41.66666667%; } .col-sm-4 { - width: 33.33333333333333%; + width: 33.33333333%; } .col-sm-3 { width: 25%; } .col-sm-2 { - width: 16.666666666666664%; + width: 16.66666667%; } .col-sm-1 { - width: 8.333333333333332%; + width: 8.33333333%; } .col-sm-pull-12 { right: 100%; } .col-sm-pull-11 { - right: 91.66666666666666%; + right: 91.66666667%; } .col-sm-pull-10 { - right: 83.33333333333334%; + right: 83.33333333%; } .col-sm-pull-9 { right: 75%; } .col-sm-pull-8 { - right: 66.66666666666666%; + right: 66.66666667%; } .col-sm-pull-7 { - right: 58.333333333333336%; + right: 58.33333333%; } .col-sm-pull-6 { right: 50%; } .col-sm-pull-5 { - right: 41.66666666666667%; + right: 41.66666667%; } .col-sm-pull-4 { - right: 33.33333333333333%; + right: 33.33333333%; } .col-sm-pull-3 { right: 25%; } .col-sm-pull-2 { - right: 16.666666666666664%; + right: 16.66666667%; } .col-sm-pull-1 { - right: 8.333333333333332%; + right: 8.33333333%; } .col-sm-pull-0 { right: 0; @@ -1007,37 +1009,37 @@ pre code { left: 100%; } .col-sm-push-11 { - left: 91.66666666666666%; + left: 91.66666667%; } .col-sm-push-10 { - left: 83.33333333333334%; + left: 83.33333333%; } .col-sm-push-9 { left: 75%; } .col-sm-push-8 { - left: 66.66666666666666%; + left: 66.66666667%; } .col-sm-push-7 { - left: 58.333333333333336%; + left: 58.33333333%; } .col-sm-push-6 { left: 50%; } .col-sm-push-5 { - left: 41.66666666666667%; + left: 41.66666667%; } .col-sm-push-4 { - left: 33.33333333333333%; + left: 33.33333333%; } .col-sm-push-3 { left: 25%; } .col-sm-push-2 { - left: 16.666666666666664%; + left: 16.66666667%; } .col-sm-push-1 { - left: 8.333333333333332%; + left: 8.33333333%; } .col-sm-push-0 { left: 0; @@ -1046,37 +1048,37 @@ pre code { margin-left: 100%; } .col-sm-offset-11 { - margin-left: 91.66666666666666%; + margin-left: 91.66666667%; } .col-sm-offset-10 { - margin-left: 83.33333333333334%; + margin-left: 83.33333333%; } .col-sm-offset-9 { margin-left: 75%; } .col-sm-offset-8 { - margin-left: 66.66666666666666%; + margin-left: 66.66666667%; } .col-sm-offset-7 { - margin-left: 58.333333333333336%; + margin-left: 58.33333333%; } .col-sm-offset-6 { margin-left: 50%; } .col-sm-offset-5 { - margin-left: 41.66666666666667%; + margin-left: 41.66666667%; } .col-sm-offset-4 { - margin-left: 33.33333333333333%; + margin-left: 33.33333333%; } .col-sm-offset-3 { margin-left: 25%; } .col-sm-offset-2 { - margin-left: 16.666666666666664%; + margin-left: 16.66666667%; } .col-sm-offset-1 { - margin-left: 8.333333333333332%; + margin-left: 8.33333333%; } .col-sm-offset-0 { margin-left: 0; @@ -1090,73 +1092,73 @@ pre code { width: 100%; } .col-md-11 { - width: 91.66666666666666%; + width: 91.66666667%; } .col-md-10 { - width: 83.33333333333334%; + width: 83.33333333%; } .col-md-9 { width: 75%; } .col-md-8 { - width: 66.66666666666666%; + width: 66.66666667%; } .col-md-7 { - width: 58.333333333333336%; + width: 58.33333333%; } .col-md-6 { width: 50%; } .col-md-5 { - width: 41.66666666666667%; + width: 41.66666667%; } .col-md-4 { - width: 33.33333333333333%; + width: 33.33333333%; } .col-md-3 { width: 25%; } .col-md-2 { - width: 16.666666666666664%; + width: 16.66666667%; } .col-md-1 { - width: 8.333333333333332%; + width: 8.33333333%; } .col-md-pull-12 { right: 100%; } .col-md-pull-11 { - right: 91.66666666666666%; + right: 91.66666667%; } .col-md-pull-10 { - right: 83.33333333333334%; + right: 83.33333333%; } .col-md-pull-9 { right: 75%; } .col-md-pull-8 { - right: 66.66666666666666%; + right: 66.66666667%; } .col-md-pull-7 { - right: 58.333333333333336%; + right: 58.33333333%; } .col-md-pull-6 { right: 50%; } .col-md-pull-5 { - right: 41.66666666666667%; + right: 41.66666667%; } .col-md-pull-4 { - right: 33.33333333333333%; + right: 33.33333333%; } .col-md-pull-3 { right: 25%; } .col-md-pull-2 { - right: 16.666666666666664%; + right: 16.66666667%; } .col-md-pull-1 { - right: 8.333333333333332%; + right: 8.33333333%; } .col-md-pull-0 { right: 0; @@ -1165,37 +1167,37 @@ pre code { left: 100%; } .col-md-push-11 { - left: 91.66666666666666%; + left: 91.66666667%; } .col-md-push-10 { - left: 83.33333333333334%; + left: 83.33333333%; } .col-md-push-9 { left: 75%; } .col-md-push-8 { - left: 66.66666666666666%; + left: 66.66666667%; } .col-md-push-7 { - left: 58.333333333333336%; + left: 58.33333333%; } .col-md-push-6 { left: 50%; } .col-md-push-5 { - left: 41.66666666666667%; + left: 41.66666667%; } .col-md-push-4 { - left: 33.33333333333333%; + left: 33.33333333%; } .col-md-push-3 { left: 25%; } .col-md-push-2 { - left: 16.666666666666664%; + left: 16.66666667%; } .col-md-push-1 { - left: 8.333333333333332%; + left: 8.33333333%; } .col-md-push-0 { left: 0; @@ -1204,37 +1206,37 @@ pre code { margin-left: 100%; } .col-md-offset-11 { - margin-left: 91.66666666666666%; + margin-left: 91.66666667%; } .col-md-offset-10 { - margin-left: 83.33333333333334%; + margin-left: 83.33333333%; } .col-md-offset-9 { margin-left: 75%; } .col-md-offset-8 { - margin-left: 66.66666666666666%; + margin-left: 66.66666667%; } .col-md-offset-7 { - margin-left: 58.333333333333336%; + margin-left: 58.33333333%; } .col-md-offset-6 { margin-left: 50%; } .col-md-offset-5 { - margin-left: 41.66666666666667%; + margin-left: 41.66666667%; } .col-md-offset-4 { - margin-left: 33.33333333333333%; + margin-left: 33.33333333%; } .col-md-offset-3 { margin-left: 25%; } .col-md-offset-2 { - margin-left: 16.666666666666664%; + margin-left: 16.66666667%; } .col-md-offset-1 { - margin-left: 8.333333333333332%; + margin-left: 8.33333333%; } .col-md-offset-0 { margin-left: 0; @@ -1248,73 +1250,73 @@ pre code { width: 100%; } .col-lg-11 { - width: 91.66666666666666%; + width: 91.66666667%; } .col-lg-10 { - width: 83.33333333333334%; + width: 83.33333333%; } .col-lg-9 { width: 75%; } .col-lg-8 { - width: 66.66666666666666%; + width: 66.66666667%; } .col-lg-7 { - width: 58.333333333333336%; + width: 58.33333333%; } .col-lg-6 { width: 50%; } .col-lg-5 { - width: 41.66666666666667%; + width: 41.66666667%; } .col-lg-4 { - width: 33.33333333333333%; + width: 33.33333333%; } .col-lg-3 { width: 25%; } .col-lg-2 { - width: 16.666666666666664%; + width: 16.66666667%; } .col-lg-1 { - width: 8.333333333333332%; + width: 8.33333333%; } .col-lg-pull-12 { right: 100%; } .col-lg-pull-11 { - right: 91.66666666666666%; + right: 91.66666667%; } .col-lg-pull-10 { - right: 83.33333333333334%; + right: 83.33333333%; } .col-lg-pull-9 { right: 75%; } .col-lg-pull-8 { - right: 66.66666666666666%; + right: 66.66666667%; } .col-lg-pull-7 { - right: 58.333333333333336%; + right: 58.33333333%; } .col-lg-pull-6 { right: 50%; } .col-lg-pull-5 { - right: 41.66666666666667%; + right: 41.66666667%; } .col-lg-pull-4 { - right: 33.33333333333333%; + right: 33.33333333%; } .col-lg-pull-3 { right: 25%; } .col-lg-pull-2 { - right: 16.666666666666664%; + right: 16.66666667%; } .col-lg-pull-1 { - right: 8.333333333333332%; + right: 8.33333333%; } .col-lg-pull-0 { right: 0; @@ -1323,37 +1325,37 @@ pre code { left: 100%; } .col-lg-push-11 { - left: 91.66666666666666%; + left: 91.66666667%; } .col-lg-push-10 { - left: 83.33333333333334%; + left: 83.33333333%; } .col-lg-push-9 { left: 75%; } .col-lg-push-8 { - left: 66.66666666666666%; + left: 66.66666667%; } .col-lg-push-7 { - left: 58.333333333333336%; + left: 58.33333333%; } .col-lg-push-6 { left: 50%; } .col-lg-push-5 { - left: 41.66666666666667%; + left: 41.66666667%; } .col-lg-push-4 { - left: 33.33333333333333%; + left: 33.33333333%; } .col-lg-push-3 { left: 25%; } .col-lg-push-2 { - left: 16.666666666666664%; + left: 16.66666667%; } .col-lg-push-1 { - left: 8.333333333333332%; + left: 8.33333333%; } .col-lg-push-0 { left: 0; @@ -1362,37 +1364,37 @@ pre code { margin-left: 100%; } .col-lg-offset-11 { - margin-left: 91.66666666666666%; + margin-left: 91.66666667%; } .col-lg-offset-10 { - margin-left: 83.33333333333334%; + margin-left: 83.33333333%; } .col-lg-offset-9 { margin-left: 75%; } .col-lg-offset-8 { - margin-left: 66.66666666666666%; + margin-left: 66.66666667%; } .col-lg-offset-7 { - margin-left: 58.333333333333336%; + margin-left: 58.33333333%; } .col-lg-offset-6 { margin-left: 50%; } .col-lg-offset-5 { - margin-left: 41.66666666666667%; + margin-left: 41.66666667%; } .col-lg-offset-4 { - margin-left: 33.33333333333333%; + margin-left: 33.33333333%; } .col-lg-offset-3 { margin-left: 25%; } .col-lg-offset-2 { - margin-left: 16.666666666666664%; + margin-left: 16.66666667%; } .col-lg-offset-1 { - margin-left: 8.333333333333332%; + margin-left: 8.33333333%; } .col-lg-offset-0 { margin-left: 0; @@ -1416,7 +1418,7 @@ th { .table > tbody > tr > td, .table > tfoot > tr > td { padding: 8px; - line-height: 1.428571429; + line-height: 1.42857143; vertical-align: top; border-top: 1px solid #ddd; } @@ -1683,7 +1685,7 @@ output { display: block; padding-top: 7px; font-size: 14px; - line-height: 1.428571429; + line-height: 1.42857143; color: #555; } .form-control { @@ -1692,7 +1694,7 @@ output { height: 34px; padding: 6px 12px; font-size: 14px; - line-height: 1.428571429; + line-height: 1.42857143; color: #555; background-color: #fff; background-image: none; @@ -1709,9 +1711,6 @@ output { -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); } -.form-control:-moz-placeholder { - color: #999; -} .form-control::-moz-placeholder { color: #999; opacity: 1; @@ -1732,6 +1731,9 @@ fieldset[disabled] .form-control { textarea.form-control { height: auto; } +input[type="search"] { + -webkit-appearance: none; +} input[type="date"] { line-height: 34px; } @@ -1935,6 +1937,9 @@ select[multiple].input-lg { width: auto; vertical-align: middle; } + .form-inline .input-group > .form-control { + width: 100%; + } .form-inline .control-label { margin-bottom: 0; vertical-align: middle; @@ -1991,7 +1996,7 @@ select[multiple].input-lg { margin-bottom: 0; font-size: 14px; font-weight: normal; - line-height: 1.428571429; + line-height: 1.42857143; text-align: center; white-space: nowrap; vertical-align: middle; @@ -1999,13 +2004,14 @@ select[multiple].input-lg { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; - -o-user-select: none; user-select: none; background-image: none; border: 1px solid transparent; border-radius: 4px; } -.btn:focus { +.btn:focus, +.btn:active:focus, +.btn.active:focus { outline: thin dotted; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; @@ -2311,19 +2317,22 @@ fieldset[disabled] .btn-link:focus { color: #999; text-decoration: none; } -.btn-lg { +.btn-lg, +.btn-group-lg > .btn { padding: 10px 16px; font-size: 18px; line-height: 1.33; border-radius: 6px; } -.btn-sm { +.btn-sm, +.btn-group-sm > .btn { padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 3px; } -.btn-xs { +.btn-xs, +.btn-group-xs > .btn { padding: 1px 5px; font-size: 12px; line-height: 1.5; @@ -3033,7 +3042,7 @@ input[type="button"].btn-block { padding: 3px 20px; clear: both; font-weight: normal; - line-height: 1.428571429; + line-height: 1.42857143; color: #333; white-space: nowrap; } @@ -3082,7 +3091,7 @@ input[type="button"].btn-block { display: block; padding: 3px 20px; font-size: 12px; - line-height: 1.428571429; + line-height: 1.42857143; color: #999; } .dropdown-backdrop { @@ -3196,24 +3205,6 @@ input[type="button"].btn-block { .btn-group.open .dropdown-toggle { outline: 0; } -.btn-group-xs > .btn { - padding: 1px 5px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.btn-group-sm > .btn { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.btn-group-lg > .btn { - padding: 10px 16px; - font-size: 18px; - line-height: 1.33; - border-radius: 6px; -} .btn-group > .btn + .dropdown-toggle { padding-right: 8px; padding-left: 8px; @@ -3313,6 +3304,8 @@ input[type="button"].btn-block { padding-left: 0; } .input-group .form-control { + position: relative; + z-index: 2; float: left; width: 100%; margin-bottom: 0; @@ -3507,7 +3500,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { } .nav-tabs > li > a { margin-right: 2px; - line-height: 1.428571429; + line-height: 1.42857143; border: 1px solid transparent; border-radius: 4px 4px 0 0; } @@ -3745,7 +3738,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { } .navbar-brand { float: left; - height: 20px; + height: 50px; padding: 15px 15px; font-size: 18px; line-height: 20px; @@ -3865,6 +3858,9 @@ select[multiple].input-group-sm > .input-group-btn > .btn { width: auto; vertical-align: middle; } + .navbar-form .input-group > .form-control { + width: 100%; + } .navbar-form .control-label { margin-bottom: 0; vertical-align: middle; @@ -4146,7 +4142,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { float: left; padding: 6px 12px; margin-left: -1px; - line-height: 1.428571429; + line-height: 1.42857143; color: #428bca; text-decoration: none; background-color: #fff; @@ -4407,7 +4403,7 @@ a.list-group-item.active > .badge, display: block; padding: 4px; margin-bottom: 20px; - line-height: 1.428571429; + line-height: 1.42857143; background-color: #fff; border: 1px solid #ddd; border-radius: 4px; @@ -4416,9 +4412,6 @@ a.list-group-item.active > .badge, } .thumbnail > img, .thumbnail a > img { - display: block; - max-width: 100%; - height: auto; margin-right: auto; margin-left: auto; } @@ -4769,7 +4762,32 @@ a.list-group-item-danger.active:focus { box-shadow: 0 1px 1px rgba(0, 0, 0, .05); } .panel-body { - padding: 20px 10px 0px 10px; + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; +} +.panel-title > a { + color: inherit; +} +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; } .panel > .list-group { margin-bottom: 0; @@ -4778,17 +4796,13 @@ a.list-group-item-danger.active:focus { border-width: 1px 0; border-radius: 0; } -.panel > .list-group .list-group-item:first-child { - border-top: 0; -} -.panel > .list-group .list-group-item:last-child { - border-bottom: 0; -} .panel > .list-group:first-child .list-group-item:first-child { + border-top: 0; border-top-left-radius: 3px; border-top-right-radius: 3px; } .panel > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; } @@ -4799,6 +4813,11 @@ a.list-group-item-danger.active:focus { .panel > .table-responsive > .table { margin-bottom: 0; } +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} .panel > .table:first-child > thead:first-child > tr:first-child td:first-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, @@ -4819,6 +4838,11 @@ a.list-group-item-danger.active:focus { .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { border-top-right-radius: 3px; } +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, @@ -4879,63 +4903,30 @@ a.list-group-item-danger.active:focus { .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { border-right: 0; } -.panel > .table-bordered > thead > tr:first-child > th, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, -.panel > .table-bordered > tbody > tr:first-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th, -.panel > .table-bordered > tfoot > tr:first-child > th, -.panel > .table-responsive > .table-bordered > tfoot > tr:first-child > th, .panel > .table-bordered > thead > tr:first-child > td, .panel > .table-responsive > .table-bordered > thead > tr:first-child > td, .panel > .table-bordered > tbody > tr:first-child > td, .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, -.panel > .table-bordered > tfoot > tr:first-child > td, -.panel > .table-responsive > .table-bordered > tfoot > tr:first-child > td { - border-top: 0; +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; } -.panel > .table-bordered > thead > tr:last-child > th, -.panel > .table-responsive > .table-bordered > thead > tr:last-child > th, -.panel > .table-bordered > tbody > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, -.panel > .table-bordered > tfoot > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th, -.panel > .table-bordered > thead > tr:last-child > td, -.panel > .table-responsive > .table-bordered > thead > tr:last-child > td, .panel > .table-bordered > tbody > tr:last-child > td, .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, .panel > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td { +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { border-bottom: 0; } .panel > .table-responsive { margin-bottom: 0; border: 0; } -.panel-heading { - padding: 10px 15px; - border-bottom: 1px solid transparent; - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel-heading > .dropdown .dropdown-toggle { - color: inherit; -} -.panel-title { - margin-top: 0; - margin-bottom: 0; - font-size: 16px; - color: inherit; -} -.panel-title > a { - color: inherit; -} -.panel-footer { - padding: 10px 15px; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} .panel-group { margin-bottom: 20px; } @@ -5154,7 +5145,7 @@ button.close { opacity: .5; } .modal-header { - min-height: 16.428571429px; + min-height: 16.42857143px; padding: 15px; border-bottom: 1px solid #e5e5e5; } @@ -5163,7 +5154,7 @@ button.close { } .modal-title { margin: 0; - line-height: 1.428571429; + line-height: 1.42857143; } .modal-body { position: relative; @@ -5197,6 +5188,8 @@ button.close { .modal-sm { width: 300px; } +} +@media (min-width: 992px) { .modal-lg { width: 900px; } @@ -5342,8 +5335,8 @@ button.close { .popover-content { padding: 9px 14px; } -.popover .arrow, -.popover .arrow:after { +.popover > .arrow, +.popover > .arrow:after { position: absolute; display: block; width: 0; @@ -5351,14 +5344,14 @@ button.close { border-color: transparent; border-style: solid; } -.popover .arrow { +.popover > .arrow { border-width: 11px; } -.popover .arrow:after { +.popover > .arrow:after { content: ""; border-width: 10px; } -.popover.top .arrow { +.popover.top > .arrow { bottom: -11px; left: 50%; margin-left: -11px; @@ -5366,14 +5359,14 @@ button.close { border-top-color: rgba(0, 0, 0, .25); border-bottom-width: 0; } -.popover.top .arrow:after { +.popover.top > .arrow:after { bottom: 1px; margin-left: -10px; content: " "; border-top-color: #fff; border-bottom-width: 0; } -.popover.right .arrow { +.popover.right > .arrow { top: 50%; left: -11px; margin-top: -11px; @@ -5381,14 +5374,14 @@ button.close { border-right-color: rgba(0, 0, 0, .25); border-left-width: 0; } -.popover.right .arrow:after { +.popover.right > .arrow:after { bottom: -10px; left: 1px; content: " "; border-right-color: #fff; border-left-width: 0; } -.popover.bottom .arrow { +.popover.bottom > .arrow { top: -11px; left: 50%; margin-left: -11px; @@ -5396,14 +5389,14 @@ button.close { border-bottom-color: #999; border-bottom-color: rgba(0, 0, 0, .25); } -.popover.bottom .arrow:after { +.popover.bottom > .arrow:after { top: 1px; margin-left: -10px; content: " "; border-top-width: 0; border-bottom-color: #fff; } -.popover.left .arrow { +.popover.left > .arrow { top: 50%; right: -11px; margin-top: -11px; @@ -5411,7 +5404,7 @@ button.close { border-left-color: #999; border-left-color: rgba(0, 0, 0, .25); } -.popover.left .arrow:after { +.popover.left > .arrow:after { right: 1px; bottom: -10px; content: " "; @@ -5434,9 +5427,6 @@ button.close { } .carousel-inner > .item > img, .carousel-inner > .item > a > img { - display: block; - max-width: 100%; - height: auto; line-height: 1; } .carousel-inner > .active, @@ -5580,8 +5570,8 @@ button.close { text-shadow: none; } @media screen and (min-width: 768px) { - .carousel-control .glyphicons-chevron-left, - .carousel-control .glyphicons-chevron-right, + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, .carousel-control .icon-prev, .carousel-control .icon-next { width: 30px; @@ -5684,9 +5674,9 @@ button.close { width: device-width; } .visible-xs, -tr.visible-xs, -th.visible-xs, -td.visible-xs { +.visible-sm, +.visible-md, +.visible-lg { display: none !important; } @media (max-width: 767px) { @@ -5704,12 +5694,6 @@ td.visible-xs { display: table-cell !important; } } -.visible-sm, -tr.visible-sm, -th.visible-sm, -td.visible-sm { - display: none !important; -} @media (min-width: 768px) and (max-width: 991px) { .visible-sm { display: block !important; @@ -5725,12 +5709,6 @@ td.visible-sm { display: table-cell !important; } } -.visible-md, -tr.visible-md, -th.visible-md, -td.visible-md { - display: none !important; -} @media (min-width: 992px) and (max-width: 1199px) { .visible-md { display: block !important; @@ -5746,12 +5724,6 @@ td.visible-md { display: table-cell !important; } } -.visible-lg, -tr.visible-lg, -th.visible-lg, -td.visible-lg { - display: none !important; -} @media (min-width: 1200px) { .visible-lg { display: block !important; @@ -5768,41 +5740,26 @@ td.visible-lg { } } @media (max-width: 767px) { - .hidden-xs, - tr.hidden-xs, - th.hidden-xs, - td.hidden-xs { + .hidden-xs { display: none !important; } } @media (min-width: 768px) and (max-width: 991px) { - .hidden-sm, - tr.hidden-sm, - th.hidden-sm, - td.hidden-sm { + .hidden-sm { display: none !important; } } @media (min-width: 992px) and (max-width: 1199px) { - .hidden-md, - tr.hidden-md, - th.hidden-md, - td.hidden-md { + .hidden-md { display: none !important; } } @media (min-width: 1200px) { - .hidden-lg, - tr.hidden-lg, - th.hidden-lg, - td.hidden-lg { + .hidden-lg { display: none !important; } } -.visible-print, -tr.visible-print, -th.visible-print, -td.visible-print { +.visible-print { display: none !important; } @media print { @@ -5821,10 +5778,7 @@ td.visible-print { } } @media print { - .hidden-print, - tr.hidden-print, - th.hidden-print, - td.hidden-print { + .hidden-print { display: none !important; } } diff --git a/public/site_assets/bootstrap/css/bootstrap.css.map b/public/site_assets/bootstrap/css/bootstrap.css.map new file mode 100644 index 00000000..6bc5a2dc --- /dev/null +++ b/public/site_assets/bootstrap/css/bootstrap.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["less/normalize.less","less/print.less","less/scaffolding.less","less/mixins.less","less/variables.less","less/thumbnails.less","less/carousel.less","less/type.less","less/code.less","less/grid.less","less/tables.less","less/forms.less","less/buttons.less","less/button-groups.less","less/component-animations.less","less/glyphicons.less","less/dropdowns.less","less/input-groups.less","less/navs.less","less/navbar.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/pager.less","less/labels.less","less/badges.less","less/jumbotron.less","less/alerts.less","less/progress-bars.less","less/media.less","less/list-group.less","less/panels.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/popovers.less","less/responsive-utilities.less"],"names":[],"mappings":"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","sourcesContent":["/*! normalize.css v3.0.0 | MIT License | git.io/normalize */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS text size adjust after orientation change, without disabling\n// user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined in IE 8/9.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9.\n// Hide the `template` element in IE, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background: transparent;\n}\n\n//\n// Improve readability when focused and also mouse hovered in all browsers.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9, Safari 5, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari 5 and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari 5, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow displayed oddly in IE 9.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari 5.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8+, and Opera\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome\n// (include `-moz` to future-proof).\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box; // 2\n box-sizing: content-box;\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}","//\n// Basic print styles\n// --------------------------------------------------\n// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css\n\n@media print {\n\n * {\n text-shadow: none !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n background: transparent !important;\n box-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links for images, or javascript/internal links\n a[href^=\"javascript:\"]:after,\n a[href^=\"#\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245\n // Once fixed, we can just straight up remove this.\n select {\n background: #fff !important;\n }\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .table {\n td,\n th {\n background-color: #fff !important;\n }\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n}\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 62.5%;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: underline;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n","//\n// Mixins\n// --------------------------------------------------\n\n\n// Utilities\n// -------------------------\n\n// Clearfix\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n// contenteditable attribute is included anywhere else in the document.\n// Otherwise it causes space to appear at the top and bottom of elements\n// that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n// `:before` to contain the top-margins of child elements.\n.clearfix() {\n &:before,\n &:after {\n content: \" \"; // 1\n display: table; // 2\n }\n &:after {\n clear: both;\n }\n}\n\n// WebKit-style focus\n.tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n\n// Center-align a block level element\n.center-block() {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n\n// Sizing shortcuts\n.size(@width; @height) {\n width: @width;\n height: @height;\n}\n.square(@size) {\n .size(@size; @size);\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n &::-moz-placeholder { color: @color; // Firefox\n opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Text overflow\n// Requires inline-block or block for proper styling\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n// CSS image replacement\n//\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. Note\n// that we cannot chain the mixins together in Less, so they are repeated.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (will be removed in v4)\n.hide-text() {\n font: ~\"0/0\" a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n// New mixin to use as of v3.0.1\n.text-hide() {\n .hide-text();\n}\n\n\n\n// CSS3 PROPERTIES\n// --------------------------------------------------\n\n// Single side border-radius\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support the\n// standard `box-shadow` property.\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Transitions\n.transition(@transition) {\n -webkit-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n// Transformations\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n transform: rotate(@degrees);\n}\n.scale(@ratio; @ratio-y...) {\n -webkit-transform: scale(@ratio, @ratio-y);\n -ms-transform: scale(@ratio, @ratio-y); // IE9 only\n transform: scale(@ratio, @ratio-y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n transform: translate(@x, @y);\n}\n.skew(@x; @y) {\n -webkit-transform: skew(@x, @y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n transform: skew(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// User select\n// For selecting text on the page\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n\n// Resize anything\n.resizable(@direction) {\n resize: @direction; // Options: horizontal, vertical, both\n overflow: auto; // Safari fix\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Opacity\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n\n\n\n// GRADIENTS\n// --------------------------------------------------\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, color-stop(@start-color @start-percent), color-stop(@end-color @end-percent)); // Safari 5.1-6, Chrome 10+\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n\n// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n\n\n\n// Retina images\n//\n// Short retina mixin for setting background-image and -size\n\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// COMPONENT MIXINS\n// --------------------------------------------------\n\n// Horizontal dividers\n// -------------------------\n// Dividers (basically an hr) within dropdowns and nav lists\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n\n// Panels\n// -------------------------\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n border-color: @border;\n\n & > .panel-heading {\n color: @heading-text-color;\n background-color: @heading-bg-color;\n border-color: @heading-border;\n\n + .panel-collapse .panel-body {\n border-top-color: @border;\n }\n }\n & > .panel-footer {\n + .panel-collapse .panel-body {\n border-bottom-color: @border;\n }\n }\n}\n\n// Alerts\n// -------------------------\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\n }\n}\n\n// Tables\n// -------------------------\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n\n// List Groups\n// -------------------------\n.list-group-item-variant(@state; @background; @color) {\n .list-group-item-@{state} {\n color: @color;\n background-color: @background;\n\n a& {\n color: @color;\n\n .list-group-item-heading { color: inherit; }\n\n &:hover,\n &:focus {\n color: @color;\n background-color: darken(@background, 5%);\n }\n &.active,\n &.active:hover,\n &.active:focus {\n color: #fff;\n background-color: @color;\n border-color: @color;\n }\n }\n }\n}\n\n// Button variants\n// -------------------------\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:hover,\n &:focus,\n &:active,\n &.active,\n .open .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 8%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &:active,\n &.active {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n// -------------------------\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n\n// Pagination\n// -------------------------\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n\n// Labels\n// -------------------------\n.label-variant(@color) {\n background-color: @color;\n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\n}\n\n// Contextual backgrounds\n// -------------------------\n.bg-variant(@color) {\n background-color: @color;\n a&:hover {\n background-color: darken(@color, 10%);\n }\n}\n\n// Typography\n// -------------------------\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover {\n color: darken(@color, 10%);\n }\n}\n\n// Navbar vertical align\n// -------------------------\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n\n// Progress bars\n// -------------------------\n.progress-bar-variant(@color) {\n background-color: @color;\n .progress-striped & {\n #gradient > .striped();\n }\n}\n\n// Responsive utilities\n// -------------------------\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n display: block !important;\n table& { display: table; }\n tr& { display: table-row !important; }\n th&,\n td& { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n display: none !important;\n}\n\n\n// Grid System\n// -----------\n\n// Centered container element\n.container-fixed() {\n margin-right: auto;\n margin-left: auto;\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: (@gutter / -2);\n margin-right: (@gutter / -2);\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n @media (min-width: @screen-xs-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-xs-column-push(@columns) {\n @media (min-width: @screen-xs-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-xs-column-pull(@columns) {\n @media (min-width: @screen-xs-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n\n// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n // Color the label and help text\n .help-block,\n .control-label,\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline {\n color: @text-color;\n }\n // Set the border and box shadow on specific inputs to match\n .form-control {\n border-color: @border-color;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n &:focus {\n border-color: darken(@border-color, 10%);\n @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\n .box-shadow(@shadow);\n }\n }\n // Set validation states also for addons\n .input-group-addon {\n color: @text-color;\n border-color: @border-color;\n background-color: @background-color;\n }\n // Optional feedback icon\n .form-control-feedback {\n color: @text-color;\n }\n}\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-focus-border` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n\n.form-control-focus(@color: @input-border-focus) {\n @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n &:focus {\n border-color: @color;\n outline: 0;\n .box-shadow(~\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\");\n }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. `` background color\n@input-bg: #fff;\n//** `` background color\n@input-bg-disabled: @gray-lighter;\n\n//** Text color for ``s\n@input-color: @gray;\n//** `` border color\n@input-border: #ccc;\n//** `` border radius\n@input-border-radius: @border-radius-base;\n//** Border color for inputs on focus\n@input-border-focus: #66afe9;\n\n//** Placeholder text color\n@input-color-placeholder: @gray-light;\n\n//** Default `.form-control` height\n@input-height-base: (@line-height-computed + (@padding-base-vertical * 2) + 2);\n//** Large `.form-control` height\n@input-height-large: (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);\n//** Small `.form-control` height\n@input-height-small: (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);\n\n@legend-color: @gray-dark;\n@legend-border-color: #e5e5e5;\n\n//** Background color for textual input addons\n@input-group-addon-bg: @gray-lighter;\n//** Border color for textual input addons\n@input-group-addon-border-color: @input-border;\n\n\n//== Dropdowns\n//\n//## Dropdown menu container and contents.\n\n//** Background for the dropdown menu.\n@dropdown-bg: #fff;\n//** Dropdown menu `border-color`.\n@dropdown-border: rgba(0,0,0,.15);\n//** Dropdown menu `border-color` **for IE8**.\n@dropdown-fallback-border: #ccc;\n//** Divider color for between dropdown items.\n@dropdown-divider-bg: #e5e5e5;\n\n//** Dropdown link text color.\n@dropdown-link-color: @gray-dark;\n//** Hover color for dropdown links.\n@dropdown-link-hover-color: darken(@gray-dark, 5%);\n//** Hover background for dropdown links.\n@dropdown-link-hover-bg: #f5f5f5;\n\n//** Active dropdown menu item text color.\n@dropdown-link-active-color: @component-active-color;\n//** Active dropdown menu item background color.\n@dropdown-link-active-bg: @component-active-bg;\n\n//** Disabled dropdown menu item background color.\n@dropdown-link-disabled-color: @gray-light;\n\n//** Text color for headers within dropdown menus.\n@dropdown-header-color: @gray-light;\n\n// Note: Deprecated @dropdown-caret-color as of v3.1.0\n@dropdown-caret-color: #000;\n\n\n//-- Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n//\n// Note: These variables are not generated into the Customizer.\n\n@zindex-navbar: 1000;\n@zindex-dropdown: 1000;\n@zindex-popover: 1010;\n@zindex-tooltip: 1030;\n@zindex-navbar-fixed: 1030;\n@zindex-modal-background: 1040;\n@zindex-modal: 1050;\n\n\n//== Media queries breakpoints\n//\n//## Define the breakpoints at which your layout will change, adapting to different screen sizes.\n\n// Extra small screen / phone\n// Note: Deprecated @screen-xs and @screen-phone as of v3.0.1\n@screen-xs: 480px;\n@screen-xs-min: @screen-xs;\n@screen-phone: @screen-xs-min;\n\n// Small screen / tablet\n// Note: Deprecated @screen-sm and @screen-tablet as of v3.0.1\n@screen-sm: 768px;\n@screen-sm-min: @screen-sm;\n@screen-tablet: @screen-sm-min;\n\n// Medium screen / desktop\n// Note: Deprecated @screen-md and @screen-desktop as of v3.0.1\n@screen-md: 992px;\n@screen-md-min: @screen-md;\n@screen-desktop: @screen-md-min;\n\n// Large screen / wide desktop\n// Note: Deprecated @screen-lg and @screen-lg-desktop as of v3.0.1\n@screen-lg: 1200px;\n@screen-lg-min: @screen-lg;\n@screen-lg-desktop: @screen-lg-min;\n\n// So media queries don't overlap when required, provide a maximum\n@screen-xs-max: (@screen-sm-min - 1);\n@screen-sm-max: (@screen-md-min - 1);\n@screen-md-max: (@screen-lg-min - 1);\n\n\n//== Grid system\n//\n//## Define your custom responsive grid.\n\n//** Number of columns in the grid.\n@grid-columns: 12;\n//** Padding between columns. Gets divided in half for the left and right.\n@grid-gutter-width: 30px;\n// Navbar collapse\n//** Point at which the navbar becomes uncollapsed.\n@grid-float-breakpoint: @screen-sm-min;\n//** Point at which the navbar begins collapsing.\n@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);\n\n\n//== Container sizes\n//\n//## Define the maximum width of `.container` for different screen sizes.\n\n// Small screen / tablet\n@container-tablet: ((720px + @grid-gutter-width));\n//** For `@screen-sm-min` and up.\n@container-sm: @container-tablet;\n\n// Medium screen / desktop\n@container-desktop: ((940px + @grid-gutter-width));\n//** For `@screen-md-min` and up.\n@container-md: @container-desktop;\n\n// Large screen / wide desktop\n@container-large-desktop: ((1140px + @grid-gutter-width));\n//** For `@screen-lg-min` and up.\n@container-lg: @container-large-desktop;\n\n\n//== Navbar\n//\n//##\n\n// Basics of a navbar\n@navbar-height: 50px;\n@navbar-margin-bottom: @line-height-computed;\n@navbar-border-radius: @border-radius-base;\n@navbar-padding-horizontal: floor((@grid-gutter-width / 2));\n@navbar-padding-vertical: ((@navbar-height - @line-height-computed) / 2);\n@navbar-collapse-max-height: 340px;\n\n@navbar-default-color: #777;\n@navbar-default-bg: #f8f8f8;\n@navbar-default-border: darken(@navbar-default-bg, 6.5%);\n\n// Navbar links\n@navbar-default-link-color: #777;\n@navbar-default-link-hover-color: #333;\n@navbar-default-link-hover-bg: transparent;\n@navbar-default-link-active-color: #555;\n@navbar-default-link-active-bg: darken(@navbar-default-bg, 6.5%);\n@navbar-default-link-disabled-color: #ccc;\n@navbar-default-link-disabled-bg: transparent;\n\n// Navbar brand label\n@navbar-default-brand-color: @navbar-default-link-color;\n@navbar-default-brand-hover-color: darken(@navbar-default-brand-color, 10%);\n@navbar-default-brand-hover-bg: transparent;\n\n// Navbar toggle\n@navbar-default-toggle-hover-bg: #ddd;\n@navbar-default-toggle-icon-bar-bg: #888;\n@navbar-default-toggle-border-color: #ddd;\n\n\n// Inverted navbar\n// Reset inverted navbar basics\n@navbar-inverse-color: @gray-light;\n@navbar-inverse-bg: #222;\n@navbar-inverse-border: darken(@navbar-inverse-bg, 10%);\n\n// Inverted navbar links\n@navbar-inverse-link-color: @gray-light;\n@navbar-inverse-link-hover-color: #fff;\n@navbar-inverse-link-hover-bg: transparent;\n@navbar-inverse-link-active-color: @navbar-inverse-link-hover-color;\n@navbar-inverse-link-active-bg: darken(@navbar-inverse-bg, 10%);\n@navbar-inverse-link-disabled-color: #444;\n@navbar-inverse-link-disabled-bg: transparent;\n\n// Inverted navbar brand label\n@navbar-inverse-brand-color: @navbar-inverse-link-color;\n@navbar-inverse-brand-hover-color: #fff;\n@navbar-inverse-brand-hover-bg: transparent;\n\n// Inverted navbar toggle\n@navbar-inverse-toggle-hover-bg: #333;\n@navbar-inverse-toggle-icon-bar-bg: #fff;\n@navbar-inverse-toggle-border-color: #333;\n\n\n//== Navs\n//\n//##\n\n//=== Shared nav styles\n@nav-link-padding: 10px 15px;\n@nav-link-hover-bg: @gray-lighter;\n\n@nav-disabled-link-color: @gray-light;\n@nav-disabled-link-hover-color: @gray-light;\n\n@nav-open-link-hover-color: #fff;\n\n//== Tabs\n@nav-tabs-border-color: #ddd;\n\n@nav-tabs-link-hover-border-color: @gray-lighter;\n\n@nav-tabs-active-link-hover-bg: @body-bg;\n@nav-tabs-active-link-hover-color: @gray;\n@nav-tabs-active-link-hover-border-color: #ddd;\n\n@nav-tabs-justified-link-border-color: #ddd;\n@nav-tabs-justified-active-link-border-color: @body-bg;\n\n//== Pills\n@nav-pills-border-radius: @border-radius-base;\n@nav-pills-active-link-hover-bg: @component-active-bg;\n@nav-pills-active-link-hover-color: @component-active-color;\n\n\n//== Pagination\n//\n//##\n\n@pagination-color: @link-color;\n@pagination-bg: #fff;\n@pagination-border: #ddd;\n\n@pagination-hover-color: @link-hover-color;\n@pagination-hover-bg: @gray-lighter;\n@pagination-hover-border: #ddd;\n\n@pagination-active-color: #fff;\n@pagination-active-bg: @brand-primary;\n@pagination-active-border: @brand-primary;\n\n@pagination-disabled-color: @gray-light;\n@pagination-disabled-bg: #fff;\n@pagination-disabled-border: #ddd;\n\n\n//== Pager\n//\n//##\n\n@pager-bg: @pagination-bg;\n@pager-border: @pagination-border;\n@pager-border-radius: 15px;\n\n@pager-hover-bg: @pagination-hover-bg;\n\n@pager-active-bg: @pagination-active-bg;\n@pager-active-color: @pagination-active-color;\n\n@pager-disabled-color: @pagination-disabled-color;\n\n\n//== Jumbotron\n//\n//##\n\n@jumbotron-padding: 30px;\n@jumbotron-color: inherit;\n@jumbotron-bg: @gray-lighter;\n@jumbotron-heading-color: inherit;\n@jumbotron-font-size: ceil((@font-size-base * 1.5));\n\n\n//== Form states and alerts\n//\n//## Define colors for form feedback states and, by default, alerts.\n\n@state-success-text: #3c763d;\n@state-success-bg: #dff0d8;\n@state-success-border: darken(spin(@state-success-bg, -10), 5%);\n\n@state-info-text: #31708f;\n@state-info-bg: #d9edf7;\n@state-info-border: darken(spin(@state-info-bg, -10), 7%);\n\n@state-warning-text: #8a6d3b;\n@state-warning-bg: #fcf8e3;\n@state-warning-border: darken(spin(@state-warning-bg, -10), 5%);\n\n@state-danger-text: #a94442;\n@state-danger-bg: #f2dede;\n@state-danger-border: darken(spin(@state-danger-bg, -10), 5%);\n\n\n//== Tooltips\n//\n//##\n\n//** Tooltip max width\n@tooltip-max-width: 200px;\n//** Tooltip text color\n@tooltip-color: #fff;\n//** Tooltip background color\n@tooltip-bg: #000;\n@tooltip-opacity: .9;\n\n//** Tooltip arrow width\n@tooltip-arrow-width: 5px;\n//** Tooltip arrow color\n@tooltip-arrow-color: @tooltip-bg;\n\n\n//== Popovers\n//\n//##\n\n//** Popover body background color\n@popover-bg: #fff;\n//** Popover maximum width\n@popover-max-width: 276px;\n//** Popover border color\n@popover-border-color: rgba(0,0,0,.2);\n//** Popover fallback border color\n@popover-fallback-border-color: #ccc;\n\n//** Popover title background color\n@popover-title-bg: darken(@popover-bg, 3%);\n\n//** Popover arrow width\n@popover-arrow-width: 10px;\n//** Popover arrow color\n@popover-arrow-color: #fff;\n\n//** Popover outer arrow width\n@popover-arrow-outer-width: (@popover-arrow-width + 1);\n//** Popover outer arrow color\n@popover-arrow-outer-color: fadein(@popover-border-color, 5%);\n//** Popover outer arrow fallback color\n@popover-arrow-outer-fallback-color: darken(@popover-fallback-border-color, 20%);\n\n\n//== Labels\n//\n//##\n\n//** Default label background color\n@label-default-bg: @gray-light;\n//** Primary label background color\n@label-primary-bg: @brand-primary;\n//** Success label background color\n@label-success-bg: @brand-success;\n//** Info label background color\n@label-info-bg: @brand-info;\n//** Warning label background color\n@label-warning-bg: @brand-warning;\n//** Danger label background color\n@label-danger-bg: @brand-danger;\n\n//** Default label text color\n@label-color: #fff;\n//** Default text color of a linked label\n@label-link-hover-color: #fff;\n\n\n//== Modals\n//\n//##\n\n//** Padding applied to the modal body\n@modal-inner-padding: 20px;\n\n//** Padding applied to the modal title\n@modal-title-padding: 15px;\n//** Modal title line-height\n@modal-title-line-height: @line-height-base;\n\n//** Background color of modal content area\n@modal-content-bg: #fff;\n//** Modal content border color\n@modal-content-border-color: rgba(0,0,0,.2);\n//** Modal content border color **for IE8**\n@modal-content-fallback-border-color: #999;\n\n//** Modal backdrop background color\n@modal-backdrop-bg: #000;\n//** Modal backdrop opacity\n@modal-backdrop-opacity: .5;\n//** Modal header border color\n@modal-header-border-color: #e5e5e5;\n//** Modal footer border color\n@modal-footer-border-color: @modal-header-border-color;\n\n@modal-lg: 900px;\n@modal-md: 600px;\n@modal-sm: 300px;\n\n\n//== Alerts\n//\n//## Define alert colors, border radius, and padding.\n\n@alert-padding: 15px;\n@alert-border-radius: @border-radius-base;\n@alert-link-font-weight: bold;\n\n@alert-success-bg: @state-success-bg;\n@alert-success-text: @state-success-text;\n@alert-success-border: @state-success-border;\n\n@alert-info-bg: @state-info-bg;\n@alert-info-text: @state-info-text;\n@alert-info-border: @state-info-border;\n\n@alert-warning-bg: @state-warning-bg;\n@alert-warning-text: @state-warning-text;\n@alert-warning-border: @state-warning-border;\n\n@alert-danger-bg: @state-danger-bg;\n@alert-danger-text: @state-danger-text;\n@alert-danger-border: @state-danger-border;\n\n\n//== Progress bars\n//\n//##\n\n//** Background color of the whole progress component\n@progress-bg: #f5f5f5;\n//** Progress bar text color\n@progress-bar-color: #fff;\n\n//** Default progress bar color\n@progress-bar-bg: @brand-primary;\n//** Success progress bar color\n@progress-bar-success-bg: @brand-success;\n//** Warning progress bar color\n@progress-bar-warning-bg: @brand-warning;\n//** Danger progress bar color\n@progress-bar-danger-bg: @brand-danger;\n//** Info progress bar color\n@progress-bar-info-bg: @brand-info;\n\n\n//== List group\n//\n//##\n\n//** Background color on `.list-group-item`\n@list-group-bg: #fff;\n//** `.list-group-item` border color\n@list-group-border: #ddd;\n//** List group border radius\n@list-group-border-radius: @border-radius-base;\n\n//** Background color of single list elements on hover\n@list-group-hover-bg: #f5f5f5;\n//** Text color of active list elements\n@list-group-active-color: @component-active-color;\n//** Background color of active list elements\n@list-group-active-bg: @component-active-bg;\n//** Border color of active list elements\n@list-group-active-border: @list-group-active-bg;\n@list-group-active-text-color: lighten(@list-group-active-bg, 40%);\n\n@list-group-link-color: #555;\n@list-group-link-heading-color: #333;\n\n\n//== Panels\n//\n//##\n\n@panel-bg: #fff;\n@panel-body-padding: 15px;\n@panel-border-radius: @border-radius-base;\n\n//** Border color for elements within panels\n@panel-inner-border: #ddd;\n@panel-footer-bg: #f5f5f5;\n\n@panel-default-text: @gray-dark;\n@panel-default-border: #ddd;\n@panel-default-heading-bg: #f5f5f5;\n\n@panel-primary-text: #fff;\n@panel-primary-border: @brand-primary;\n@panel-primary-heading-bg: @brand-primary;\n\n@panel-success-text: @state-success-text;\n@panel-success-border: @state-success-border;\n@panel-success-heading-bg: @state-success-bg;\n\n@panel-info-text: @state-info-text;\n@panel-info-border: @state-info-border;\n@panel-info-heading-bg: @state-info-bg;\n\n@panel-warning-text: @state-warning-text;\n@panel-warning-border: @state-warning-border;\n@panel-warning-heading-bg: @state-warning-bg;\n\n@panel-danger-text: @state-danger-text;\n@panel-danger-border: @state-danger-border;\n@panel-danger-heading-bg: @state-danger-bg;\n\n\n//== Thumbnails\n//\n//##\n\n//** Padding around the thumbnail image\n@thumbnail-padding: 4px;\n//** Thumbnail background color\n@thumbnail-bg: @body-bg;\n//** Thumbnail border color\n@thumbnail-border: #ddd;\n//** Thumbnail border radius\n@thumbnail-border-radius: @border-radius-base;\n\n//** Custom text color for thumbnail captions\n@thumbnail-caption-color: @text-color;\n//** Padding around the thumbnail caption\n@thumbnail-caption-padding: 9px;\n\n\n//== Wells\n//\n//##\n\n@well-bg: #f5f5f5;\n@well-border: darken(@well-bg, 7%);\n\n\n//== Badges\n//\n//##\n\n@badge-color: #fff;\n//** Linked badge text color on hover\n@badge-link-hover-color: #fff;\n@badge-bg: @gray-light;\n\n//** Badge text color in active nav link\n@badge-active-color: @link-color;\n//** Badge background color in active nav link\n@badge-active-bg: #fff;\n\n@badge-font-weight: bold;\n@badge-line-height: 1;\n@badge-border-radius: 10px;\n\n\n//== Breadcrumbs\n//\n//##\n\n@breadcrumb-padding-vertical: 8px;\n@breadcrumb-padding-horizontal: 15px;\n//** Breadcrumb background color\n@breadcrumb-bg: #f5f5f5;\n//** Breadcrumb text color\n@breadcrumb-color: #ccc;\n//** Text color of current page in the breadcrumb\n@breadcrumb-active-color: @gray-light;\n//** Textual separator for between breadcrumb elements\n@breadcrumb-separator: \"/\";\n\n\n//== Carousel\n//\n//##\n\n@carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6);\n\n@carousel-control-color: #fff;\n@carousel-control-width: 15%;\n@carousel-control-opacity: .5;\n@carousel-control-font-size: 20px;\n\n@carousel-indicator-active-bg: #fff;\n@carousel-indicator-border-color: #fff;\n\n@carousel-caption-color: #fff;\n\n\n//== Close\n//\n//##\n\n@close-font-weight: bold;\n@close-color: #000;\n@close-text-shadow: 0 1px 0 #fff;\n\n\n//== Code\n//\n//##\n\n@code-color: #c7254e;\n@code-bg: #f9f2f4;\n\n@kbd-color: #fff;\n@kbd-bg: #333;\n\n@pre-bg: #f5f5f5;\n@pre-color: @gray-dark;\n@pre-border-color: #ccc;\n@pre-scrollable-max-height: 340px;\n\n\n//== Type\n//\n//##\n\n//** Text muted color\n@text-muted: @gray-light;\n//** Abbreviations and acronyms border color\n@abbr-border-color: @gray-light;\n//** Headings small color\n@headings-small-color: @gray-light;\n//** Blockquote small color\n@blockquote-small-color: @gray-light;\n//** Blockquote font size\n@blockquote-font-size: (@font-size-base * 1.25);\n//** Blockquote border color\n@blockquote-border-color: @gray-lighter;\n//** Page header border color\n@page-header-border-color: @gray-lighter;\n\n\n//== Miscellaneous\n//\n//##\n\n//** Horizontal line color.\n@hr-border: @gray-lighter;\n\n//** Horizontal offset for forms and lists.\n@component-offset-horizontal: 180px;\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n display: block;\n padding: @thumbnail-padding;\n margin-bottom: @line-height-computed;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n > img,\n a > img {\n &:extend(.img-responsive);\n margin-left: auto;\n margin-right: auto;\n }\n\n // Add a hover state for linked versions only\n a&:hover,\n a&:focus,\n a&.active {\n border-color: @link-color;\n }\n\n // Image captions\n .caption {\n padding: @thumbnail-caption-padding;\n color: @thumbnail-caption-color;\n }\n}\n","//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n position: relative;\n}\n\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n\n > .item {\n display: none;\n position: relative;\n .transition(.6s ease-in-out left);\n\n // Account for jankitude on images\n > img,\n > a > img {\n &:extend(.img-responsive);\n line-height: 1;\n }\n }\n\n > .active,\n > .next,\n > .prev { display: block; }\n\n > .active {\n left: 0;\n }\n\n > .next,\n > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n }\n\n > .next {\n left: 100%;\n }\n > .prev {\n left: -100%;\n }\n > .next.left,\n > .prev.right {\n left: 0;\n }\n\n > .active.left {\n left: -100%;\n }\n > .active.right {\n left: 100%;\n }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: @carousel-control-width;\n .opacity(@carousel-control-opacity);\n font-size: @carousel-control-font-size;\n color: @carousel-control-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n // We can't have this transition here because WebKit cancels the carousel\n // animation if you trip this while in the middle of another animation.\n\n // Set gradients for backgrounds\n &.left {\n #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));\n }\n &.right {\n left: auto;\n right: 0;\n #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));\n }\n\n // Hover/focus state\n &:hover,\n &:focus {\n outline: none;\n color: @carousel-control-color;\n text-decoration: none;\n .opacity(.9);\n }\n\n // Toggles\n .icon-prev,\n .icon-next,\n .glyphicon-chevron-left,\n .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n z-index: 5;\n display: inline-block;\n }\n .icon-prev,\n .glyphicon-chevron-left {\n left: 50%;\n }\n .icon-next,\n .glyphicon-chevron-right {\n right: 50%;\n }\n .icon-prev,\n .icon-next {\n width: 20px;\n height: 20px;\n margin-top: -10px;\n margin-left: -10px;\n font-family: serif;\n }\n\n .icon-prev {\n &:before {\n content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n }\n }\n .icon-next {\n &:before {\n content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n }\n }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n\n li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid @carousel-indicator-border-color;\n border-radius: 10px;\n cursor: pointer;\n\n // IE8-9 hack for event handling\n //\n // Internet Explorer 8-9 does not support clicks on elements without a set\n // `background-color`. We cannot use `filter` since that's not viewed as a\n // background color by the browser. Thus, a hack is needed.\n //\n // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n // set alpha transparency for the best results possible.\n background-color: #000 \\9; // IE8\n background-color: rgba(0,0,0,0); // IE9\n }\n .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: @carousel-indicator-active-bg;\n }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: @carousel-caption-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n & .btn {\n text-shadow: none; // No shadow for button elements in carousel-caption\n }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n\n // Scale up the controls a smidge\n .carousel-control {\n .glyphicon-chevron-left,\n .glyphicon-chevron-right,\n .icon-prev,\n .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -15px;\n margin-left: -15px;\n font-size: 30px;\n }\n }\n\n // Show and left align the captions\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n\n // Move up the indicators\n .carousel-indicators {\n bottom: 20px;\n }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 200;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: 14px base font * 85% = about 12px\nsmall,\n.small { font-size: 85%; }\n\n// Undo browser default styling\ncite { font-style: normal; }\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// --------------------------------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n@media (min-width: @grid-float-breakpoint) {\n .dl-horizontal {\n dt {\n float: left;\n width: (@component-offset-horizontal - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @component-offset-horizontal;\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n }\n}\n\n// MISC\n// ----\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Quotes\nblockquote:before,\nblockquote:after {\n content: \"\";\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n white-space: nowrap;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n max-width: 100%;\n background-color: @table-bg;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-child(odd) {\n > td,\n > th {\n background-color: @table-bg-accent;\n }\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n > td,\n > th {\n background-color: @table-bg-hover;\n }\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n@media (max-width: @screen-xs-max) {\n .table-responsive {\n width: 100%;\n margin-bottom: (@line-height-computed * 0.75);\n overflow-y: hidden;\n overflow-x: scroll;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n -webkit-overflow-scrolling: touch;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: -webkit-min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; /* IE8-9 */\n line-height: normal;\n}\n\n// Set the height of file controls to match text inputs\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Disabled and read-only inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &[disabled],\n &[readonly],\n fieldset[disabled] & {\n cursor: not-allowed;\n background-color: @input-bg-disabled;\n opacity: 1; // iOS fix for unreadable disabled content\n }\n\n // Reset height for `textarea`s\n textarea& {\n height: auto;\n }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n\n\n// Special styles for iOS date input\n//\n// In Mobile Safari, date inputs require a pixel line-height that matches the\n// given height of the input.\n\ninput[type=\"date\"] {\n line-height: @input-height-base;\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n margin-bottom: 15px;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n display: block;\n min-height: @line-height-computed; // clear the floating input if there is no label text\n margin-top: 10px;\n margin-bottom: 10px;\n padding-left: 20px;\n label {\n display: inline;\n font-weight: normal;\n cursor: pointer;\n }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n float: left;\n margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n//\n// Note: Neither radios nor checkboxes can be readonly.\ninput[type=\"radio\"],\ninput[type=\"checkbox\"],\n.radio,\n.radio-inline,\n.checkbox,\n.checkbox-inline {\n &[disabled],\n fieldset[disabled] & {\n cursor: not-allowed;\n }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n\n.input-sm {\n .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n.input-lg {\n .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n.has-feedback {\n // Enable absolute positioning\n position: relative;\n\n // Ensure icons don't overlap text\n .form-control {\n padding-right: (@input-height-base * 1.25);\n }\n\n // Feedback icon (requires .glyphicon classes)\n .form-control-feedback {\n position: absolute;\n top: (@line-height-computed + 5); // Height of the `label` and its margin\n right: 0;\n display: block;\n width: @input-height-base;\n height: @input-height-base;\n line-height: @input-height-base;\n text-align: center;\n }\n}\n\n// Feedback states\n.has-success {\n .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n.has-warning {\n .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n.has-error {\n .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n margin-bottom: 0; // Remove default margin from `p`\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n display: block; // account for any element using help-block\n margin-top: 5px;\n margin-bottom: 10px;\n color: lighten(@text-color, 25%); // lighten the text some for contrast\n}\n\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n\n // Kick in the inline\n @media (min-width: @screen-sm-min) {\n // Inline-block all the things for \"inline\"\n .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n\n // In navbar-form, allow folks to *not* use `.form-group`\n .form-control {\n display: inline-block;\n width: auto; // Prevent labels from stacking above inputs in `.form-group`\n vertical-align: middle;\n }\n // Input groups need that 100% width though\n .input-group > .form-control {\n width: 100%;\n }\n\n .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n\n // Remove default margin on radios/checkboxes that were used for stacking, and\n // then undo the floating of radios and checkboxes to match (which also avoids\n // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).\n .radio,\n .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n padding-left: 0;\n vertical-align: middle;\n }\n .radio input[type=\"radio\"],\n .checkbox input[type=\"checkbox\"] {\n float: none;\n margin-left: 0;\n }\n\n // Validation states\n //\n // Reposition the icon because it's now within a grid column and columns have\n // `position: relative;` on them. Also accounts for the grid gutter padding.\n .has-feedback .form-control-feedback {\n top: 0;\n }\n }\n}\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n // Consistent vertical alignment of labels, radios, and checkboxes\n .control-label,\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n }\n // Account for padding we're adding to ensure the alignment and of help text\n // and other content below items\n .radio,\n .checkbox {\n min-height: (@line-height-computed + (@padding-base-vertical + 1));\n }\n\n // Make form groups behave like rows\n .form-group {\n .make-row();\n }\n\n .form-control-static {\n padding-top: (@padding-base-vertical + 1);\n }\n\n // Only right align form labels here when the columns stop stacking\n @media (min-width: @screen-sm-min) {\n .control-label {\n text-align: right;\n }\n }\n\n // Validation states\n //\n // Reposition the icon because it's now within a grid column and columns have\n // `position: relative;` on them. Also accounts for the grid gutter padding.\n .has-feedback .form-control-feedback {\n top: 0;\n right: (@grid-gutter-width / 2);\n }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n display: inline-block;\n margin-bottom: 0; // For input.btn\n font-weight: @btn-font-weight;\n text-align: center;\n vertical-align: middle;\n cursor: pointer;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n white-space: nowrap;\n .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base);\n .user-select(none);\n\n &,\n &:active,\n &.active {\n &:focus {\n .tab-focus();\n }\n }\n\n &:hover,\n &:focus {\n color: @btn-default-color;\n text-decoration: none;\n }\n\n &:active,\n &.active {\n outline: 0;\n background-image: none;\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n cursor: not-allowed;\n pointer-events: none; // Future-proof disabling of clicks\n .opacity(.65);\n .box-shadow(none);\n }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n color: @link-color;\n font-weight: normal;\n cursor: pointer;\n border-radius: 0;\n\n &,\n &:active,\n &[disabled],\n fieldset[disabled] & {\n background-color: transparent;\n .box-shadow(none);\n }\n &,\n &:hover,\n &:focus,\n &:active {\n border-color: transparent;\n }\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: underline;\n background-color: transparent;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @btn-link-disabled-color;\n text-decoration: none;\n }\n }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n // line-height: ensure even-numbered height of button next to large input\n .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n.btn-sm {\n // line-height: ensure proper height of button next to small input\n .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n.btn-xs {\n .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n display: block;\n width: 100%;\n padding-left: 0;\n padding-right: 0;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; // match .btn alignment given font-size hack above\n > .btn {\n position: relative;\n float: left;\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active,\n &.active {\n z-index: 2;\n }\n &:focus {\n // Remove focus outline when dropdown JS adds it after closing the menu\n outline: none;\n }\n }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n .btn + .btn,\n .btn + .btn-group,\n .btn-group + .btn,\n .btn-group + .btn-group {\n margin-left: -1px;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n margin-left: -5px; // Offset the first child's margin\n &:extend(.clearfix all);\n\n .btn-group,\n .input-group {\n float: left;\n }\n > .btn,\n > .btn-group,\n > .input-group {\n margin-left: 5px;\n }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n margin-left: 0;\n &:not(:last-child):not(.dropdown-toggle) {\n .border-right-radius(0);\n }\n}\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-right-radius(0);\n }\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n .box-shadow(none);\n }\n}\n\n\n// Reposition the caret\n.btn .caret {\n margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n border-width: @caret-width-large @caret-width-large 0;\n border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n > .btn,\n > .btn-group,\n > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n }\n\n // Clear floats so dropdown menus can be properly placed\n > .btn-group {\n &:extend(.clearfix all);\n > .btn {\n float: none;\n }\n }\n\n > .btn + .btn,\n > .btn + .btn-group,\n > .btn-group + .btn,\n > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n }\n}\n\n.btn-group-vertical > .btn {\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n &:first-child:not(:last-child) {\n border-top-right-radius: @border-radius-base;\n .border-bottom-radius(0);\n }\n &:last-child:not(:first-child) {\n border-bottom-left-radius: @border-radius-base;\n .border-top-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-bottom-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-top-radius(0);\n}\n\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n > .btn,\n > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n }\n > .btn-group .btn {\n width: 100%;\n }\n}\n\n\n// Checkbox and radio options\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n display: none;\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552.\n\n.fade {\n opacity: 0;\n .transition(opacity .15s linear);\n &.in {\n opacity: 1;\n }\n}\n\n.collapse {\n display: none;\n &.in {\n display: block;\n }\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n .transition(height .35s ease);\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// Star\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: ~\"url('@{icon-font-path}@{icon-font-name}.eot')\";\n src: ~\"url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype')\",\n ~\"url('@{icon-font-path}@{icon-font-name}.woff') format('woff')\",\n ~\"url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype')\",\n ~\"url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg')\";\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\2a\"; } }\n.glyphicon-plus { &:before { content: \"\\2b\"; } }\n.glyphicon-euro { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: @caret-width-base solid;\n border-right: @caret-width-base solid transparent;\n border-left: @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropdown {\n position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: @zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0; // override default ul\n list-style: none;\n font-size: @font-size-base;\n background-color: @dropdown-bg;\n border: 1px solid @dropdown-fallback-border; // IE8 fallback\n border: 1px solid @dropdown-border;\n border-radius: @border-radius-base;\n .box-shadow(0 6px 12px rgba(0,0,0,.175));\n background-clip: padding-box;\n\n // Aligns the dropdown menu to right\n //\n // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n &.pull-right {\n right: 0;\n left: auto;\n }\n\n // Dividers (basically an hr) within the dropdown\n .divider {\n .nav-divider(@dropdown-divider-bg);\n }\n\n // Links within the dropdown menu\n > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: @line-height-base;\n color: @dropdown-link-color;\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n &:hover,\n &:focus {\n text-decoration: none;\n color: @dropdown-link-hover-color;\n background-color: @dropdown-link-hover-bg;\n }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-active-color;\n text-decoration: none;\n outline: 0;\n background-color: @dropdown-link-active-bg;\n }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-disabled-color;\n }\n}\n// Nuke hover/focus effects\n.dropdown-menu > .disabled > a {\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none; // Remove CSS gradient\n .reset-filter();\n cursor: not-allowed;\n }\n}\n\n// Open state for the dropdown\n.open {\n // Show the menu\n > .dropdown-menu {\n display: block;\n }\n\n // Remove the outline when :focus is triggered\n > a {\n outline: 0;\n }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n left: auto; // Reset the default from `.dropdown-menu`\n right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: @font-size-small;\n line-height: @line-height-base;\n color: @dropdown-header-color;\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n // Reverse the caret\n .caret {\n border-top: 0;\n border-bottom: @caret-width-base solid;\n content: \"\";\n }\n // Different positioning for bottom up menu\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 1px;\n }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-right {\n .dropdown-menu {\n .dropdown-menu-right();\n }\n // Necessary for overrides of the default right aligned menu.\n // Will remove come v4 in all likelihood.\n .dropdown-menu-left {\n .dropdown-menu-left();\n }\n }\n}\n\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n position: relative; // For dropdowns\n display: table;\n border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n // Undo padding and float of grid classes\n &[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n }\n\n .form-control {\n // Ensure that the input is always above the *appended* addon button for\n // proper border colors.\n position: relative;\n z-index: 2;\n\n // IE9 fubars the placeholder attribute in text inputs and the arrows on\n // select elements in input groups. To fix it, we float the input. Details:\n // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n float: left;\n\n width: 100%;\n margin-bottom: 0;\n }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn { .input-lg(); }\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn { .input-sm(); }\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 1;\n color: @input-color;\n text-align: center;\n background-color: @input-group-addon-bg;\n border: 1px solid @input-group-addon-border-color;\n border-radius: @border-radius-base;\n\n // Sizing\n &.input-sm {\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n border-radius: @border-radius-small;\n }\n &.input-lg {\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n border-radius: @border-radius-large;\n }\n\n // Nuke default margins from checkboxes and radios to vertically center within.\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n margin-top: 0;\n }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n .border-right-radius(0);\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n .border-left-radius(0);\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n position: relative;\n // Jankily prevent input button groups from wrapping with `white-space` and\n // `font-size` in combination with `inline-block` on buttons.\n font-size: 0;\n white-space: nowrap;\n\n // Negative margin for spacing, position for bringing hovered/focused/actived\n // element above the siblings.\n > .btn {\n position: relative;\n + .btn {\n margin-left: -1px;\n }\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active {\n z-index: 2;\n }\n }\n\n // Negative margin to only have a 1px border between the two\n &:first-child {\n > .btn,\n > .btn-group {\n margin-right: -1px;\n }\n }\n &:last-child {\n > .btn,\n > .btn-group {\n margin-left: -1px;\n }\n }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n margin-bottom: 0;\n padding-left: 0; // Override default ul/ol\n list-style: none;\n &:extend(.clearfix all);\n\n > li {\n position: relative;\n display: block;\n\n > a {\n position: relative;\n display: block;\n padding: @nav-link-padding;\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: @nav-link-hover-bg;\n }\n }\n\n // Disabled state sets text to gray and nukes hover/tab effects\n &.disabled > a {\n color: @nav-disabled-link-color;\n\n &:hover,\n &:focus {\n color: @nav-disabled-link-hover-color;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed;\n }\n }\n }\n\n // Open dropdowns\n .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @nav-link-hover-bg;\n border-color: @link-color;\n }\n }\n\n // Nav dividers (deprecated with v3.0.1)\n //\n // This should have been removed in v3 with the dropping of `.nav-list`, but\n // we missed it. We don't currently support this anywhere, but in the interest\n // of maintaining backward compatibility in case you use it, it's deprecated.\n .nav-divider {\n .nav-divider();\n }\n\n // Prevent IE8 from misplacing imgs\n //\n // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n > li > a > img {\n max-width: none;\n }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n border-bottom: 1px solid @nav-tabs-border-color;\n > li {\n float: left;\n // Make the list-items overlay the bottom border\n margin-bottom: -1px;\n\n // Actual tabs (as links)\n > a {\n margin-right: 2px;\n line-height: @line-height-base;\n border: 1px solid transparent;\n border-radius: @border-radius-base @border-radius-base 0 0;\n &:hover {\n border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n }\n }\n\n // Active state, and its :hover to override normal :hover\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-tabs-active-link-hover-color;\n background-color: @nav-tabs-active-link-hover-bg;\n border: 1px solid @nav-tabs-active-link-hover-border-color;\n border-bottom-color: transparent;\n cursor: default;\n }\n }\n }\n // pulling this in mainly for less shorthand\n &.nav-justified {\n .nav-justified();\n .nav-tabs-justified();\n }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n > li {\n float: left;\n\n // Links rendered as pills\n > a {\n border-radius: @nav-pills-border-radius;\n }\n + li {\n margin-left: 2px;\n }\n\n // Active state\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-pills-active-link-hover-color;\n background-color: @nav-pills-active-link-hover-bg;\n }\n }\n }\n}\n\n\n// Stacked pills\n.nav-stacked {\n > li {\n float: none;\n + li {\n margin-top: 2px;\n margin-left: 0; // no need for this gap between nav items\n }\n }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n width: 100%;\n\n > li {\n float: none;\n > a {\n text-align: center;\n margin-bottom: 5px;\n }\n }\n\n > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n }\n\n @media (min-width: @screen-sm-min) {\n > li {\n display: table-cell;\n width: 1%;\n > a {\n margin-bottom: 0;\n }\n }\n }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n border-bottom: 0;\n\n > li > a {\n // Override margin from .nav-tabs\n margin-right: 0;\n border-radius: @border-radius-base;\n }\n\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border: 1px solid @nav-tabs-justified-link-border-color;\n }\n\n @media (min-width: @screen-sm-min) {\n > li > a {\n border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n border-radius: @border-radius-base @border-radius-base 0 0;\n }\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border-bottom-color: @nav-tabs-justified-active-link-border-color;\n }\n }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n // make dropdown border overlap tab border\n margin-top: -1px;\n // Remove the top rounded corners here since there is a hard edge above the menu\n .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n position: relative;\n min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n margin-bottom: @navbar-margin-bottom;\n border: 1px solid transparent;\n\n // Prevent floats from breaking the navbar\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: @navbar-border-radius;\n }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n max-height: @navbar-collapse-max-height;\n overflow-x: visible;\n padding-right: @navbar-padding-horizontal;\n padding-left: @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n &:extend(.clearfix all);\n -webkit-overflow-scrolling: touch;\n\n &.in {\n overflow-y: auto;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border-top: 0;\n box-shadow: none;\n\n &.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0; // Override default setting\n overflow: visible !important;\n }\n\n &.in {\n overflow-y: visible;\n }\n\n // Undo the collapse side padding for navbars with containers to ensure\n // alignment of right-aligned contents.\n .navbar-fixed-top &,\n .navbar-static-top &,\n .navbar-fixed-bottom & {\n padding-left: 0;\n padding-right: 0;\n }\n }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n > .navbar-header,\n > .navbar-collapse {\n margin-right: -@navbar-padding-horizontal;\n margin-left: -@navbar-padding-horizontal;\n\n @media (min-width: @grid-float-breakpoint) {\n margin-right: 0;\n margin-left: 0;\n }\n }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n z-index: @zindex-navbar;\n border-width: 0 0 1px;\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: @zindex-navbar-fixed;\n\n // Undo the rounded corners\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0; // override .navbar defaults\n border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n float: left;\n padding: @navbar-padding-vertical @navbar-padding-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-computed;\n height: @navbar-height;\n\n &:hover,\n &:focus {\n text-decoration: none;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n .navbar > .container &,\n .navbar > .container-fluid & {\n margin-left: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: @navbar-padding-horizontal;\n padding: 9px 10px;\n .navbar-vertical-align(34px);\n background-color: transparent;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n border-radius: @border-radius-base;\n\n // We remove the `outline` here, but later compensate by attaching `:hover`\n // styles to `:focus`.\n &:focus {\n outline: none;\n }\n\n // Bars\n .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n }\n .icon-bar + .icon-bar {\n margin-top: 4px;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n display: none;\n }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: @line-height-computed;\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n > li > a,\n .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n > li > a {\n line-height: @line-height-computed;\n &:hover,\n &:focus {\n background-image: none;\n }\n }\n }\n }\n\n // Uncollapse the nav\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin: 0;\n\n > li {\n float: left;\n > a {\n padding-top: @navbar-padding-vertical;\n padding-bottom: @navbar-padding-vertical;\n }\n }\n\n &.navbar-right:last-child {\n margin-right: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-left { .pull-left(); }\n .navbar-right { .pull-right(); }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n margin-left: -@navbar-padding-horizontal;\n margin-right: -@navbar-padding-horizontal;\n padding: 10px @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n\n // Mixin behavior for optimum display\n .form-inline();\n\n .form-group {\n @media (max-width: @grid-float-breakpoint-max) {\n margin-bottom: 5px;\n }\n }\n\n // Vertically center in expanded, horizontal navbar\n .navbar-vertical-align(@input-height-base);\n\n // Undo 100% width for pull classes\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n .box-shadow(none);\n\n // Outdent the form if last child to line up with content down the page\n &.navbar-right:last-child {\n margin-right: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n .navbar-vertical-align(@input-height-base);\n\n &.btn-sm {\n .navbar-vertical-align(@input-height-small);\n }\n &.btn-xs {\n .navbar-vertical-align(22);\n }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n .navbar-vertical-align(@line-height-computed);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin-left: @navbar-padding-horizontal;\n margin-right: @navbar-padding-horizontal;\n\n // Outdent the form if last child to line up with content down the page\n &.navbar-right:last-child {\n margin-right: 0;\n }\n }\n}\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n background-color: @navbar-default-bg;\n border-color: @navbar-default-border;\n\n .navbar-brand {\n color: @navbar-default-brand-color;\n &:hover,\n &:focus {\n color: @navbar-default-brand-hover-color;\n background-color: @navbar-default-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-default-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-default-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n\n .navbar-toggle {\n border-color: @navbar-default-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-default-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-default-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: @navbar-default-border;\n }\n\n // Dropdown menu items\n .navbar-nav {\n // Remove background color from open dropdown\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-default-link-active-bg;\n color: @navbar-default-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n > li > a {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n }\n }\n\n\n // Links in navbars\n //\n // Add a class to ensure links outside the navbar nav are colored correctly.\n\n .navbar-link {\n color: @navbar-default-link-color;\n &:hover {\n color: @navbar-default-link-hover-color;\n }\n }\n\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n background-color: @navbar-inverse-bg;\n border-color: @navbar-inverse-border;\n\n .navbar-brand {\n color: @navbar-inverse-brand-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-brand-hover-color;\n background-color: @navbar-inverse-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-inverse-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-inverse-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n\n // Darken the responsive nav toggle\n .navbar-toggle {\n border-color: @navbar-inverse-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-inverse-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-inverse-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: darken(@navbar-inverse-bg, 7%);\n }\n\n // Dropdowns\n .navbar-nav {\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-inverse-link-active-bg;\n color: @navbar-inverse-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display\n .open .dropdown-menu {\n > .dropdown-header {\n border-color: @navbar-inverse-border;\n }\n .divider {\n background-color: @navbar-inverse-border;\n }\n > li > a {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n }\n }\n\n .navbar-link {\n color: @navbar-inverse-link-color;\n &:hover {\n color: @navbar-inverse-link-hover-color;\n }\n }\n\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n .clearfix();\n}\n.center-block {\n .center-block();\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n display: none !important;\n visibility: hidden !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n position: fixed;\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n margin-bottom: @line-height-computed;\n list-style: none;\n background-color: @breadcrumb-bg;\n border-radius: @border-radius-base;\n\n > li {\n display: inline-block;\n\n + li:before {\n content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n padding: 0 5px;\n color: @breadcrumb-color;\n }\n }\n\n > .active {\n color: @breadcrumb-active-color;\n }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: @line-height-computed 0;\n border-radius: @border-radius-base;\n\n > li {\n display: inline; // Remove list-style and block-level defaults\n > a,\n > span {\n position: relative;\n float: left; // Collapse white-space\n padding: @padding-base-vertical @padding-base-horizontal;\n line-height: @line-height-base;\n text-decoration: none;\n color: @pagination-color;\n background-color: @pagination-bg;\n border: 1px solid @pagination-border;\n margin-left: -1px;\n }\n &:first-child {\n > a,\n > span {\n margin-left: 0;\n .border-left-radius(@border-radius-base);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius-base);\n }\n }\n }\n\n > li > a,\n > li > span {\n &:hover,\n &:focus {\n color: @pagination-hover-color;\n background-color: @pagination-hover-bg;\n border-color: @pagination-hover-border;\n }\n }\n\n > .active > a,\n > .active > span {\n &,\n &:hover,\n &:focus {\n z-index: 2;\n color: @pagination-active-color;\n background-color: @pagination-active-bg;\n border-color: @pagination-active-border;\n cursor: default;\n }\n }\n\n > .disabled {\n > span,\n > span:hover,\n > span:focus,\n > a,\n > a:hover,\n > a:focus {\n color: @pagination-disabled-color;\n background-color: @pagination-disabled-bg;\n border-color: @pagination-disabled-border;\n cursor: not-allowed;\n }\n }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small);\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n padding-left: 0;\n margin: @line-height-computed 0;\n list-style: none;\n text-align: center;\n &:extend(.clearfix all);\n li {\n display: inline;\n > a,\n > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: @pager-bg;\n border: 1px solid @pager-border;\n border-radius: @pager-border-radius;\n }\n\n > a:hover,\n > a:focus {\n text-decoration: none;\n background-color: @pager-hover-bg;\n }\n }\n\n .next {\n > a,\n > span {\n float: right;\n }\n }\n\n .previous {\n > a,\n > span {\n float: left;\n }\n }\n\n .disabled {\n > a,\n > a:hover,\n > a:focus,\n > span {\n color: @pager-disabled-color;\n background-color: @pager-bg;\n cursor: not-allowed;\n }\n }\n\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: @label-color;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n\n // Add hover effects, but only for links\n &[href] {\n &:hover,\n &:focus {\n color: @label-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Empty labels collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for labels in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n .label-variant(@label-default-bg);\n}\n\n.label-primary {\n .label-variant(@label-primary-bg);\n}\n\n.label-success {\n .label-variant(@label-success-bg);\n}\n\n.label-info {\n .label-variant(@label-info-bg);\n}\n\n.label-warning {\n .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n .label-variant(@label-danger-bg);\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base classes\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: @font-size-small;\n font-weight: @badge-font-weight;\n color: @badge-color;\n line-height: @badge-line-height;\n vertical-align: baseline;\n white-space: nowrap;\n text-align: center;\n background-color: @badge-bg;\n border-radius: @badge-border-radius;\n\n // Empty badges collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for badges in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n .btn-xs & {\n top: 0;\n padding: 1px 5px;\n }\n}\n\n// Hover state, but only for links\na.badge {\n &:hover,\n &:focus {\n color: @badge-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n}\n\n// Account for counters in navs\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: @badge-active-color;\n background-color: @badge-active-bg;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n padding: @jumbotron-padding;\n margin-bottom: @jumbotron-padding;\n color: @jumbotron-color;\n background-color: @jumbotron-bg;\n\n h1,\n .h1 {\n color: @jumbotron-heading-color;\n }\n p {\n margin-bottom: (@jumbotron-padding / 2);\n font-size: @jumbotron-font-size;\n font-weight: 200;\n }\n\n .container & {\n border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n }\n\n .container {\n max-width: 100%;\n }\n\n @media screen and (min-width: @screen-sm-min) {\n padding-top: (@jumbotron-padding * 1.6);\n padding-bottom: (@jumbotron-padding * 1.6);\n\n .container & {\n padding-left: (@jumbotron-padding * 2);\n padding-right: (@jumbotron-padding * 2);\n }\n\n h1,\n .h1 {\n font-size: (@font-size-base * 4.5);\n }\n }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n padding: @alert-padding;\n margin-bottom: @line-height-computed;\n border: 1px solid transparent;\n border-radius: @alert-border-radius;\n\n // Headings for larger alerts\n h4 {\n margin-top: 0;\n // Specified for the h4 to prevent conflicts of changing @headings-color\n color: inherit;\n }\n // Provide class for links that match alerts\n .alert-link {\n font-weight: @alert-link-font-weight;\n }\n\n // Improve alignment and spacing of inner content\n > p,\n > ul {\n margin-bottom: 0;\n }\n > p + p {\n margin-top: 5px;\n }\n}\n\n// Dismissable alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable {\n padding-right: (@alert-padding + 20);\n\n // Adjust close link position\n .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n.alert-info {\n .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n.alert-warning {\n .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n.alert-danger {\n .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n overflow: hidden;\n height: @line-height-computed;\n margin-bottom: @line-height-computed;\n background-color: @progress-bg;\n border-radius: @border-radius-base;\n .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: @font-size-small;\n line-height: @line-height-computed;\n color: @progress-bar-color;\n text-align: center;\n background-color: @progress-bar-bg;\n .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n .transition(width .6s ease);\n}\n\n// Striped bars\n.progress-striped .progress-bar {\n #gradient > .striped();\n background-size: 40px 40px;\n}\n\n// Call animation for the active one\n.progress.active .progress-bar {\n .animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Media objects\n// Source: http://stubbornella.org/content/?p=497\n// --------------------------------------------------\n\n\n// Common styles\n// -------------------------\n\n// Clear the floats\n.media,\n.media-body {\n overflow: hidden;\n zoom: 1;\n}\n\n// Proper spacing between instances of .media\n.media,\n.media .media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n\n// For images and videos, set to block\n.media-object {\n display: block;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n margin: 0 0 5px;\n}\n\n\n// Media image alignment\n// -------------------------\n\n.media {\n > .pull-left {\n margin-right: 10px;\n }\n > .pull-right {\n margin-left: 10px;\n }\n}\n\n\n// Media list variation\n// -------------------------\n\n// Undo default ul/ol styles\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on