Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • monero-project/ccs-back
  • xiphon/ccs-back
  • Fudin/ccs-back
  • john_r365/ccs-back
  • plowsofff/ccs-back
5 results
Show changes
Showing
with 2548 additions and 3694 deletions
<?php
namespace App\Repository;
use GuzzleHttp\Client;
class MergeRequest implements Proposal
{
private $merge_request;
public function __construct($merge_request)
{
$this->merge_request = $merge_request;
}
public function iid() : int
{
return $this->merge_request->iid;
}
public function id() : int
{
return $this->merge_request->id;
}
public function url() : string
{
return $this->merge_request->web_url;
}
public function title() : string
{
return $this->merge_request->title;
}
public function author() : string
{
return $this->merge_request->author->username;
}
public function created_at() : int
{
return strtotime($this->merge_request->created_at);
}
}
class Gitlab implements Repository
{
private $client;
private $base_url;
private const stateToString = [ State::Opened => 'opened',
State::Merged => 'merged'];
public function __construct(Client $client, string $repository_url)
{
$this->client = $client;
$this->base_url = $repository_url;
}
public function mergeRequests($state)
{
$url = $this->base_url . '/merge_requests?scope=all&per_page=50&state=' . Self::stateToString[$state];
$response = $this->client->request('GET', $url);
return collect(json_decode($response->getBody()))->map(function ($merge_request) {
return new MergeRequest($merge_request);
});
}
public function getNewFiles($merge_request)
{
$url = $this->base_url . '/merge_requests/' . $merge_request->iid() . '/changes';
$response = $this->client->request('GET', $url);
return collect(json_decode($response->getBody())->changes)->filter(function ($change) {
return $change->new_file;
})->map(function ($change) {
return $change->new_path;
});
}
}
<?php
namespace App\Repository;
use GuzzleHttp\Client;
interface State
{
const Merged = 0;
const Opened = 1;
const All = 2;
}
interface Proposal
{
public function id() : int;
public function url() : string;
public function title() : string;
public function author() : string;
public function created_at() : int;
}
interface Repository
{
public function __construct(Client $client, string $repository_url);
public function mergeRequests($state);
public function getNewFiles(Proposal $proposal);
}
......@@ -4,7 +4,7 @@ use Faker\Generator as Faker;
$factory->define(\App\Deposit::class, function (Faker $faker) {
return [
'payment_id' => $faker->sha256,
'subaddr_index' => $faker->randomNumber(),
'amount' => $faker->randomNumber(2),
'time_received' => $faker->dateTime,
'tx_id' => $faker->sha256,
......
......@@ -3,11 +3,10 @@
use Faker\Generator as Faker;
$factory->define(\App\Project::class, function (Faker $faker) {
$state = $faker->randomElement(['OPENED', 'IDEA', 'FUNDING-REQUIRED', 'WORK-IN-PROGRESS', 'COMPLETED']);
$status = $faker->randomElement(['opened', 'closed', 'locked', 'merged']);
$state = $faker->randomElement(['FUNDING-REQUIRED', 'WORK-IN-PROGRESS', 'COMPLETED']);
return [
'title' => $faker->sentence(),
'payment_id' => $faker->sha256,
'subaddr_index' => $faker->randomNumber(),
'address' => $faker->sha256,
'address_uri' => "monero:{$faker->sha256}",
'qr_code' => $faker->file(),
......
......@@ -17,7 +17,7 @@ class CreateProjectsTable extends Migration
$table->increments('id');
$table->string('author');
$table->string('title');
$table->string('payment_id')->nullable();
$table->unsignedInteger('subaddr_index')->nullable();
$table->string('address')->nullable();
$table->string('address_uri')->nullable();
$table->string('qr_code')->nullable();
......
......@@ -15,8 +15,8 @@ class CreateDepositsTable extends Migration
{
Schema::create('deposits', function (Blueprint $table) {
$table->increments('id');
$table->string('payment_id');
$table->unsignedInteger('confirmations')->default(0);
$table->unsignedInteger('subaddr_index');
$table->string('amount');
$table->dateTime('time_received');
$table->string('tx_id');
......
......@@ -12,7 +12,7 @@ class ProjectsTableSeeder extends Seeder
public function run()
{
factory(\App\Project::class, 20)->create()->each(function ($p) {
$p->deposits()->saveMany(factory(\App\Deposit::class, rand(0,12))->make(['payment_id' => $p->payment_id]));
$p->deposits()->saveMany(factory(\App\Deposit::class, rand(0,12))->make(['subaddr_index' => $p->subaddr_index]));
});
}
}
<?php
namespace GitLab;
use GuzzleHttp\Client;
class Connection
{
/** @var Client */
private $client;
public function __construct(Client $client)
{
$this->client = $client;
}
public function mergeRequests($state = 'all') {
$url = env('GITLAB_URL') . '/merge_requests?scope=all&per_page=50&state='. $state;
$response = $this->client->request('GET', $url, ['headers' => ['Private-Token' => env('GITLAB_ACCESS_TOKEN')]]);
return collect(json_decode($response->getBody()));
}
public function getNewFiles($merge_request_iid) {
$url = env('GITLAB_URL') . '/merge_requests/' . $merge_request_iid . '/changes';
$response = $this->client->request('GET', $url, ['headers' => ['Private-Token' => env('GITLAB_ACCESS_TOKEN')]]);
$deserialized = collect(json_decode($response->getBody()));
$result = [];
foreach ($deserialized['changes'] as $change) {
if ($change->new_file) {
$result[] = $change->new_path;
}
}
return $result;
}
}
\ No newline at end of file
......@@ -37,11 +37,11 @@ interface WalletManager
public function blockHeight();
/**
* Creates a new integrated address
* Creates a new subaddress
*
* @return array ['integrated_address', 'payment_id']
* @return array ['address', 'address_index']
*/
public function createIntegratedAddress();
public function createSubaddress();
/**
* Gets any incoming transactions
......@@ -64,12 +64,12 @@ interface WalletManager
* creates a uri for easier wallet parsing
*
* @param string $address address comprising of primary, sub or integrated address
* @param string $paymentId payment id when not using integrated addresses
* @param int $amount atomic amount requested
* @param string $paymentId payment id when not using integrated addresses
*
* @return string the uri string which can be used to generate a QR code
*/
public function createUri($address, $paymentId = null, $amount = null);
public function createUri($address, $amount = null, $paymentId = null);
/**
* creates a random 64 char payment id
......
......@@ -16,7 +16,7 @@ class Transaction
public $confirmations;
public $payment_id;
public $subaddr_index;
public $block_height;
......@@ -31,7 +31,7 @@ class Transaction
* @param $timeReceived
* @param $paymentId
*/
public function __construct($id, $amount, $address, $confirmations, $time, $timeReceived, $paymentId = null, $blockheight = null)
public function __construct($id, $amount, $address, $confirmations, $time, $timeReceived, $subaddr_index = null, $blockheight = null)
{
$this->amount = $amount;
$this->time_received = $timeReceived;
......@@ -39,7 +39,7 @@ class Transaction
$this->address = $address;
$this->id = $id;
$this->confirmations = $confirmations;
$this->payment_id = $paymentId;
$this->subaddr_index = $subaddr_index;
$this->block_height = $blockheight;
$this->correctTimeRecieved();
}
......
......@@ -28,15 +28,15 @@ class Wallet
public function getPaymentAddress()
{
$integratedAddress = $this->createIntegratedAddress();
if (!$integratedAddress) {
$subaddress = $this->createSubaddress();
if (!$subaddress) {
return ['address' => 'not valid', 'expiration_time' => 900];
}
$project = new Project();
$project->payment_id = $integratedAddress['payment_id'];
$project->subaddr_index = $subaddress['address_index'];
$project->save();
return ['address' => $integratedAddress['integrated_address'], 'paymentId' => $integratedAddress['payment_id']];
return ['address' => $subaddress['address'], 'subaddr_index' => $subaddress['address_index']];
}
/**
......@@ -49,71 +49,41 @@ class Wallet
return $this->client->balance();
}
public function mempoolTransfers()
{
return $this->client->incomingTransfers();
}
public function bulkPayments($paymentIds)
{
$blockBuffer = 10;
return $this->client->payments($paymentIds, intval($this->wallet->last_scanned_block_height) - $blockBuffer);
}
/**
* Scans the monero blockchain for transactions for the payment ids
*
* @param $blockheight
* @param $paymentIDs
* @param $min_height
* @param $account_index
*
* @return array|Transaction
* @return \Illuminate\Support\Collection
*/
public function scanBlocks($blockheight, $paymentIDs)
public function scanIncomingTransfers($min_height = 0, $account_index = 0)
{
$response = $this->bulkPayments($paymentIDs);
$address = $this->getAddress();
$transactions = [];
if ($response && isset($response['payments'])) {
foreach ($response['payments'] as $payment) {
$transaction = new Transaction(
$payment['tx_hash'],
$payment['amount'],
$address,
$blockheight - $payment['block_height'],
0,
Carbon::now(),
$payment['payment_id'],
$payment['block_height']
);
$transactions[] = $transaction;
}
$response = $this->client->incomingTransfers($min_height);
if (!$response) {
return collect([]);
}
return collect($transactions);
}
/**
* @param $blockheight
*
* @return \Illuminate\Support\Collection
*/
public function scanMempool($blockheight)
{
$address = $this->getAddress();
$transactions = [];
$response = $this->mempoolTransfers();
if ($response && isset($response['pool'])) {
foreach ($response['pool'] as $payment) {
const toScan = ['pool', 'in'];
foreach (toScan as $entry) {
if (!isset($response[$entry])) {
continue;
}
foreach ($response[$entry] as $payment) {
if $payment['subaddr_index']['major'] != $account_index {
continue;
}
if ($payment['locked']) {
continue;
}
$transaction = new Transaction(
$payment['txid'],
$payment['amount'],
$address,
0,
$payment['address'],
$payment['confirmations'],
0,
Carbon::now(),
$payment['payment_id'],
$blockheight
$payment['subaddr_index']['minor'],
$payment['height']
);
$transactions[] = $transaction;
}
......@@ -143,37 +113,34 @@ class Wallet
}
/**
* Returns XMR integrated address
* Returns XMR subaddress
*
* @return mixed
*/
public function createIntegratedAddress()
public function createSubaddress()
{
return $this->client->createIntegratedAddress();
return $this->client->createSubaddress();
}
/**
* @param $amount
* @param $address
* @param $paymentId
* @param $amount
*
* @return string
*/
public function createQrCodeString($amount, $address, $paymentId = ''): string
public function createQrCodeString($address, $amount): string
{
// @todo add tx_payment_id support
// monero payment_id is passed through the address
return 'monero:'.$address.'?tx_amount='.$amount;
}
/**
* gets all the payment_ids outstanding from the address_pool, we use these to check against the latest mined blocks
* gets all the subaddr_indexes outstanding from the address_pool, we use these to check against the latest mined blocks
*
* @return Collection
*/
public function getPaymentIds()
public function getSubaddressIndexes()
{
return Project::pluck('payment_id'); //stop scanning for payment_ids after 24h
return Project::pluck('subaddr_index'); //stop scanning for subaddr_index after 24h
}
}
<?php
namespace Monero;
interface WalletCommon
{
public static function digitsAfterTheRadixPoint() : int;
public function getPaymentAddress();
public function scanIncomingTransfers($min_height = 0);
public function blockHeight() : int;
public function createQrCodeString($address, $amount = null) : string;
}
......@@ -6,8 +6,13 @@ use App\Project;
use Carbon\Carbon;
use Illuminate\Support\Collection;
class WalletOld
class WalletOld implements WalletCommon
{
public static function digitsAfterTheRadixPoint() : int
{
return 12;
}
/**
* WalletOld constructor.
*
......@@ -15,7 +20,9 @@ class WalletOld
*/
public function __construct($client = null)
{
$this->client = $client ?: new jsonRPCClient(env('RPC_URL'));
$this->client = $client ?: new jsonRPCClient([ 'username' => env('RPC_USER'),
'password' => env('RPC_PASSWORD'),
'url' => env('RPC_URL')]);
}
/**
......@@ -28,12 +35,12 @@ class WalletOld
public function getPaymentAddress()
{
$integratedAddress = $this->createIntegratedAddress();
if (!$integratedAddress) {
$subaddress = $this->createSubaddress();
if (!$subaddress) {
return ['address' => 'not valid'];
}
return ['address' => $integratedAddress['integrated_address'], 'paymentId' => $integratedAddress['payment_id']];
return ['address' => $subaddress['address'], 'subaddr_index' => $subaddress['address_index']];
}
/**
......@@ -46,71 +53,40 @@ class WalletOld
return $this->client->balance();
}
public function mempoolTransfers()
{
return $this->client->incomingTransfers();
}
public function bulkPayments($paymentIds)
{
$blockBuffer = 10;
return $this->client->payments($paymentIds, intval($this->wallet->last_scanned_block_height) - $blockBuffer);
}
/**
* Scans the monero blockchain for transactions for the payment ids
*
* @param int $blockheight
* @param Collection $paymentIDs
*
* @return array|Transaction
*/
public function scanBlocks($blockheight, $paymentIDs)
{
$response = $this->bulkPayments($paymentIDs);
$address = $this->getAddress();
$transactions = [];
if ($response && isset($response['payments'])) {
foreach ($response['payments'] as $payment) {
$transaction = new Transaction(
$payment['tx_hash'],
$payment['amount'],
$address,
$blockheight - $payment['block_height'],
0,
Carbon::now(),
$payment['payment_id'],
$payment['block_height']
);
$transactions[] = $transaction;
}
}
return collect($transactions);
}
/**
* @param $blockheight
* @param $account_index
*
* @return \Illuminate\Support\Collection
*/
public function scanMempool($blockheight)
public function scanIncomingTransfers($min_height = 0, $account_index = 0)
{
$address = $this->getAddress();
$response = $this->client->incomingTransfers($min_height);
if (!$response) {
return collect([]);
}
$transactions = [];
$response = $this->mempoolTransfers();
if ($response && isset($response['pool'])) {
foreach ($response['pool'] as $payment) {
foreach (['pool', 'in'] as $entry) {
if (!isset($response[$entry])) {
continue;
}
foreach ($response[$entry] as $payment) {
if ($payment['subaddr_index']['major'] != $account_index) {
continue;
}
if ($payment['locked']) {
continue;
}
$transaction = new Transaction(
$payment['txid'],
$payment['amount'],
$address,
0,
$payment['address'],
$payment['confirmations'],
0,
Carbon::now(),
$payment['payment_id'],
$blockheight
$payment['subaddr_index']['minor'],
$payment['height']
);
$transactions[] = $transaction;
}
......@@ -124,7 +100,7 @@ class WalletOld
*
* @return int
*/
public function blockHeight()
public function blockHeight() : int
{
return $this->client->blockHeight();
}
......@@ -140,35 +116,34 @@ class WalletOld
}
/**
* Returns XMR integrated address
* Returns XMR subaddress
*
* @return mixed
*/
public function createIntegratedAddress()
public function createSubaddress()
{
return $this->client->createIntegratedAddress();
return $this->client->createSubaddress();
}
/**
* @param $amount
* @param $address
* @param $paymentId
* @param $amount
*
* @return string
*/
public function createQrCodeString($address, $amount = null, $paymentId = null): string
public function createQrCodeString($address, $amount = null): string
{
return $this->client->createUri($address, $amount, $paymentId);
return $this->client->createUri($address, $amount);
}
/**
* gets all the payment_ids outstanding from the address_pool, we use these to check against the latest mined blocks
* gets all the subaddr_indexes outstanding from the address_pool, we use these to check against the latest mined blocks
*
* @return Collection
*/
public function getPaymentIds()
public function getSubaddressIndexes()
{
return Project::pluck('payment_id'); //stop scanning for payment_ids after 24h
return Project::pluck('subaddr_index'); //stop scanning for subaddr_index after 24h
}
}
<?php
namespace Monero;
use Carbon\Carbon;
class WalletZcoin implements WalletCommon
{
private $rpc;
public static function digitsAfterTheRadixPoint() : int
{
return 8;
}
public function __construct()
{
$this->rpc = new jsonRpcBase([ 'auth_type' => 'basic',
'username' => env('RPC_USER'),
'password' => env('RPC_PASSWORD'),
'url' => env('RPC_URL')]);
}
public function getPaymentAddress()
{
return ['address' => $this->rpc->request('getnewaddress')];
}
private function decodeTxAmount(string $tx_amount) : int
{
$tx_amount = str_replace(',', '.', $tx_amount);
$amount = explode('.', $tx_amount);
if (sizeof($amount) < 1 || sizeof($amount) > 2) {
throw new \Exception('Failed to decode tx amount ' . $tx_amount);
}
$fraction = $amount[1] ?? "";
if (strlen($fraction) > $this->digitsAfterTheRadixPoint()) {
throw new \Exception('Failed to decode tx amount, too many digits after the redix point ' . $tx_amount);
}
$amount = $amount[0] . str_pad($fraction, $this->digitsAfterTheRadixPoint(), '0');
$amount = intval($amount);
if ($amount == 0) {
throw new \Exception('Failed to convert tx amount to int ' . $tx_amount);
}
return $amount;
}
public function scanIncomingTransfers($skip_txes = 0)
{
return collect($this->rpc->request('listtransactions', ['', 100, $skip_txes]))->filter(function ($tx) {
return $tx['category'] == 'receive';
})->map(function ($tx) {
return new Transaction(
$tx['txid'],
$this->decodeTxAmount($tx['amount']),
$tx['address'],
$tx['confirmations'],
0,
Carbon::now(),
0,
isset($tx['blockhash']) ? $this->blockHeightByHash($tx['blockhash']) : 0
);
});
}
public function blockHeight() : int
{
return $this->rpc->request('getblockcount');
}
public function createQrCodeString($address, $amount = null) : string
{
return 'zcoin:' . $address . ($amount ? '?amount=' . $amount : '');
}
private function blockHeightByHash($block_hash) : int
{
return $this->rpc->request('getblockheader', [$block_hash])['height'];
}
}
......@@ -12,18 +12,7 @@ use Illuminate\Support\Facades\Log;
*/
class jsonRPCClient implements Contracts\WalletManager
{
/** @var string */
private $username = 'test2';
/** @var string */
private $password = 'test2';
/** @var string */
private $url = 'http://127.0.0.1:28080/json_rpc';
/** @var Client|null */
private $client;
private $rpc;
/**
* JsonRPCClient constructor.
......@@ -32,20 +21,7 @@ class jsonRPCClient implements Contracts\WalletManager
*/
public function __construct($options, $client = null)
{
$this->username = $options['username'] ?? $this->username;
$this->password = $options['password'] ?? $this->password;
$this->url = $options['url'] ?? $this->url;
if (empty($client)) {
$client = new Client([
'base_uri' => $this->url,
'headers' => [
'Content-Type' => 'application/json',
]
]);
}
$this->client = $client;
$this->rpc = new jsonRpcBase($options, $client);
}
/**
......@@ -55,7 +31,7 @@ class jsonRPCClient implements Contracts\WalletManager
*/
public function balance() : int
{
$response = $this->request('get_balance');
$response = $this->rpc->request('get_balance');
return $response['balance'];
}
......@@ -66,7 +42,7 @@ class jsonRPCClient implements Contracts\WalletManager
*/
public function unlockedBalance() : int
{
$response = $this->request('get_balance');
$response = $this->rpc->request('get_balance');
return $response['unlocked_balance'];
}
......@@ -77,7 +53,7 @@ class jsonRPCClient implements Contracts\WalletManager
*/
public function address() : string
{
$response = $this->request('get_address');
$response = $this->rpc->request('get_address');
return $response['address'];
}
......@@ -88,17 +64,21 @@ class jsonRPCClient implements Contracts\WalletManager
*/
public function blockHeight() : int
{
$response = $this->request('get_height');
$response = $this->rpc->request('get_height');
return $response['height'];
}
/**
* Creates a new integrated address
* Creates a new subaddress
*
* @return array ['integrated_address', 'payment_id']
* @param int $account_index account index to create subaddress (maajor index)
* @param string $label label to assign to new subaddress
*
* @return array ['address', 'address_index']
*/
public function createIntegratedAddress() : array
public function createSubaddress($account_index = 0, $label = '') : array
{
$response = $this->request('make_integrated_address');
$response = $this->rpc->request('create_address', ['account_index' => $account_index, 'label' => $label]);
return $response;
}
......@@ -109,7 +89,7 @@ class jsonRPCClient implements Contracts\WalletManager
*/
public function incomingTransfers($min_height = 0) : array
{
$response = $this->request('get_transfers', ['pool' => true, 'in' => true, 'min_height' => $min_height, 'filter_by_height' => $min_height > 0 ? true : false]);
$response = $this->rpc->request('get_transfers', ['pool' => true, 'in' => true, 'min_height' => $min_height, 'filter_by_height' => $min_height > 0 ? true : false]);
return $response;
}
......@@ -124,7 +104,7 @@ class jsonRPCClient implements Contracts\WalletManager
*/
public function payments($paymentIds, $minHeight) : array
{
$response = $this->request('get_bulk_payments', ['payment_ids' => $paymentIds, 'min_block_height' => $minHeight]);
$response = $this->rpc->request('get_bulk_payments', ['payment_ids' => $paymentIds, 'min_block_height' => $minHeight]);
return $response;
}
......@@ -133,14 +113,14 @@ class jsonRPCClient implements Contracts\WalletManager
* creates a uri for easier wallet parsing
*
* @param string $address address comprising of primary, sub or integrated address
* @param string $paymentId payment id when not using integrated addresses
* @param int $amount atomic amount requested
* @param string $paymentId payment id when not using integrated addresses
*
* @return string the uri string which can be used to generate a QR code
*/
public function createUri($address, $paymentId = null, $amount = null) : string
public function createUri($address, $amount = null, $paymentId = null) : string
{
$response = $this->request('make_uri', ['address' => $address, 'amount' => $amount, 'payment_id' => $paymentId]);
$response = $this->rpc->request('make_uri', ['address' => $address, 'amount' => $amount, 'payment_id' => $paymentId]);
return $response['uri'];
}
......@@ -154,60 +134,4 @@ class jsonRPCClient implements Contracts\WalletManager
{
return bin2hex(openssl_random_pseudo_bytes(32));
}
/**
* Sets up the request data body
*
* @param string $method name of the rpc command
* @param array $params associative array of variables being passed to the method
*
* @return false|string will return a json string or false
*/
private function preparePayload($method, $params)
{
$payload = [
'jsonrpc' => '2.0',
'id' => '0',
'method' => $method,
'params' => $params,
];
return json_encode($payload);
}
/**
* Send off request to rpc server
*
* @param string $method name of the rpc command
* @param array $params associative array of variables being passed to the method
*
* @return mixed the rpc query result
*
* @throws \RuntimeException
*/
protected function request(string $method, array $params = [])
{
$payload = $this->preparePayload($method, $params);
try {
$response = $this->client->request('POST', '',[
'auth' => [$this->username, $this->password, 'digest'],
'body' => $payload,
'headers' => [
'Content-Type' => 'application/json',
]
]);
$body = $response->getBody();
} catch (GuzzleException $exception) {
Log::error($exception);
throw new \RuntimeException('Connection to node unsuccessful');
}
$result = json_decode((string) $body, true);
if (isset($result['error'])) {
throw new \RuntimeException($result['error']['message']);
}
return $result['result'];
}
}
<?php
namespace Monero;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Support\Facades\Log;
class jsonRpcBase
{
/** @var string */
private $username = 'test2';
/** @var string */
private $password = 'test2';
/** @var string */
private $url = 'http://127.0.0.1:28080/json_rpc';
/** @var Client|null */
private $client;
private $auth_type;
/**
* JsonRPCClient constructor.
* @param array $options
* @param null $client
*/
public function __construct($options, $client = null)
{
$this->username = $options['username'] ?? $this->username;
$this->password = $options['password'] ?? $this->password;
$this->url = $options['url'] ?? $this->url;
$this->auth_type = $options['auth_type'] ?? 'digest';
if (empty($client)) {
$client = new Client([
'base_uri' => $this->url,
'headers' => [
'Content-Type' => 'application/json',
]
]);
}
$this->client = $client;
}
/**
* Sets up the request data body
*
* @param string $method name of the rpc command
* @param array $params associative array of variables being passed to the method
*
* @return false|string will return a json string or false
*/
private function preparePayload($method, $params)
{
$payload = [
'jsonrpc' => '2.0',
'id' => '0',
'method' => $method,
'params' => $params,
];
return json_encode($payload);
}
/**
* Send off request to rpc server
*
* @param string $method name of the rpc command
* @param array $params associative array of variables being passed to the method
*
* @return mixed the rpc query result
*
* @throws \RuntimeException
*/
public function request(string $method, array $params = [])
{
$payload = $this->preparePayload($method, $params);
try {
$response = $this->client->request('POST', '',[
'auth' => [$this->username, $this->password, $this->auth_type],
'body' => $payload,
'headers' => [
'Content-Type' => 'application/json',
]
]);
$body = $response->getBody();
} catch (GuzzleException $exception) {
Log::error($exception);
error_log($exception);
throw new \RuntimeException('Connection to node ' . $this->url . ' unsuccessful');
}
$result = json_decode((string) $body, true);
if (isset($result['error'])) {
throw new \RuntimeException($result['error']['message']);
}
return $result['result'];
}
}
......@@ -6,12 +6,26 @@
font-style: normal;
src: url('../fonts/Hind-500.eot');
src: url('../fonts/Hind-500.eot?#iefix') format('embedded-opentype'),
local('Hind Medium'),
local('Hind-500'),
url('../fonts/Hind-500.woff2') format('woff2'),
url('../fonts/Hind-500.woff') format('woff'),
url('../fonts/Hind-500.ttf') format('truetype'),
url('../fonts/Hind-500.svg#Hind') format('svg');
local('Hind Medium'),
local('Hind-500'),
url('../fonts/Hind-500.woff2') format('woff2'),
url('../fonts/Hind-500.woff') format('woff'),
url('../fonts/Hind-500.ttf') format('truetype'),
url('../fonts/Hind-500.svg#Hind') format('svg');
}
/* hind-600 - latin */
@font-face {
font-family: 'Hind';
font-style: normal;
font-weight: 600;
src: url('..../fonts/Hind-600.eot');
src: local('Hind SemiBold'), local('Hind-600'),
url('..../fonts/Hind-600.eot?#iefix') format('embedded-opentype'),
url('../fonts/Hind-600.woff2') format('woff2'),
url('../fonts/Hind-600.woff') format('woff'),
url('../fonts/Hind-600.ttf') format('truetype'),
url('../fonts/Hind-600.svg#Hind') format('svg');
}
@font-face {
......@@ -20,12 +34,12 @@
font-style: normal;
src: url('../fonts/Hind-700.eot');
src: url('../fonts/Hind-700.eot?#iefix') format('embedded-opentype'),
local('Hind Bold'),
local('Hind-700'),
url('../fonts/Hind-700.woff2') format('woff2'),
url('../fonts/Hind-700.woff') format('woff'),
url('../fonts/Hind-700.ttf') format('truetype'),
url('../fonts/Hind-700.svg#Hind') format('svg');
local('Hind Bold'),
local('Hind-700'),
url('../fonts/Hind-700.woff2') format('woff2'),
url('../fonts/Hind-700.woff') format('woff'),
url('../fonts/Hind-700.ttf') format('truetype'),
url('../fonts/Hind-700.svg#Hind') format('svg');
}
@font-face {
......@@ -34,42 +48,53 @@
font-style: normal;
src: url('../fonts/Open-Sans-regular.eot');
src: url('../fonts/Open-Sans-regular.eot?#iefix') format('embedded-opentype'),
local('Open Sans'),
local('Open-Sans-regular'),
url('../fonts/Open-Sans-regular.woff2') format('woff2'),
url('../fonts/Open-Sans-regular.woff') format('woff'),
url('../fonts/Open-Sans-regular.ttf') format('truetype'),
url('../fonts/Open-Sans-regular.svg#OpenSans') format('svg');
local('Open Sans'),
local('Open-Sans-regular'),
url('../fonts/Open-Sans-regular.woff2') format('woff2'),
url('../fonts/Open-Sans-regular.woff') format('woff'),
url('../fonts/Open-Sans-regular.ttf') format('truetype'),
url('../fonts/Open-Sans-regular.svg#OpenSans') format('svg');
}
@font-face {
font-family: 'Open Sans';
font-weight: 800;
font-weight: 700;
font-style: normal;
src: url('../fonts/Open-Sans-800.eot');
src: url('../fonts/Open-Sans-800.eot?#iefix') format('embedded-opentype'),
local('Open Sans Extrabold'),
local('Open-Sans-800'),
url('../fonts/Open-Sans-800.woff2') format('woff2'),
url('../fonts/Open-Sans-800.woff') format('woff'),
url('../fonts/Open-Sans-800.ttf') format('truetype'),
url('../fonts/Open-Sans-800.svg#OpenSans') format('svg');
src: url('../fonts/Open-Sans-700.eot');
src: url('../fonts/Open-Sans-700.eot?#iefix') format('embedded-opentype'),
local('Open Sans Extrabold'),
local('Open-Sans-700'),
url('../fonts/Open-Sans-700.woff2') format('woff2'),
url('../fonts/Open-Sans-700.woff') format('woff'),
url('../fonts/Open-Sans-700.ttf') format('truetype'),
url('../fonts/Open-Sans-700.svg#OpenSans') format('svg');
}
@font-face {
font-family: 'icons';
src: url('../fonts/icons.eot?58817762');
src: url('../fonts/icons.eot?58817762#iefix') format('embedded-opentype'),
url('../fonts/icons.woff2?58817762') format('woff2'),
url('../fonts/icons.woff?58817762') format('woff'),
url('../fonts/icons.ttf?58817762') format('truetype'),
url('../fonts/icons.svg?58817762#icons') format('svg');
url('../fonts/icons.woff2?58817762') format('woff2'),
url('../fonts/icons.woff?58817762') format('woff'),
url('../fonts/icons.ttf?58817762') format('truetype'),
url('../fonts/icons.svg?58817762#icons') format('svg');
font-weight: normal;
font-style: normal;
}
/*FLEXBOX*/
.container,
.container-fluid {
margin-left: auto;
margin-right: auto;
}
.container-fluid {
padding-right: 0;
padding-left: 0;
}
.row {
box-sizing: border-box;
display: -ms-flexbox;
......@@ -86,20 +111,6 @@
flex-wrap: wrap;
}
.row.reverse {
-ms-flex-direction: row-reverse;
-webkit-box-orient: horizontal;
-webkit-box-direction: reverse;
flex-direction: row-reverse;
}
.col.reverse {
-ms-flex-direction: column-reverse;
-webkit-box-orient: vertical;
-webkit-box-direction: reverse;
flex-direction: column-reverse;
}
.col-xs,
.col-xs-1,
.col-xs-2,
......@@ -118,7 +129,7 @@
-webkit-box-flex: 0;
flex: 0 0 auto;
/*padding-right: 1rem;
padding-left: 1rem;*/
padding-left: 1rem;*/
}
.col-xs {
......@@ -131,18 +142,6 @@
max-width: 100%;
}
.col-xs-1 {
-ms-flex-preferred-size: 8.333%;
flex-basis: 8.333%;
max-width: 8.333%;
}
.col-xs-2 {
-ms-flex-preferred-size: 16.667%;
flex-basis: 16.667%;
max-width: 16.667%;
}
.col-xs-3 {
-ms-flex-preferred-size: 25%;
flex-basis: 25%;
......@@ -185,68 +184,12 @@
max-width: 75%;
}
.col-xs-10 {
-ms-flex-preferred-size: 83.333%;
flex-basis: 83.333%;
max-width: 83.333%;
}
.col-xs-11 {
-ms-flex-preferred-size: 91.667%;
flex-basis: 91.667%;
max-width: 91.667%;
}
.col-xs-12 {
-ms-flex-preferred-size: 100%;
flex-basis: 100%;
max-width: 100%;
}
.col-xs-offset-1 {
margin-left: 8.333%;
}
.col-xs-offset-2 {
margin-left: 16.667%;
}
.col-xs-offset-3 {
margin-left: 25%;
}
.col-xs-offset-4 {
margin-left: 33.333%;
}
.col-xs-offset-5 {
margin-left: 41.667%;
}
.col-xs-offset-6 {
margin-left: 50%;
}
.col-xs-offset-7 {
margin-left: 58.333%;
}
.col-xs-offset-8 {
margin-left: 66.667%;
}
.col-xs-offset-9 {
margin-left: 75%;
}
.col-xs-offset-10 {
margin-left: 83.333%;
}
.col-xs-offset-11 {
margin-left: 91.667%;
}
.start-xs {
-ms-flex-pack: start;
-webkit-box-pack: start;
......@@ -310,9 +253,6 @@
}
@media only screen and (min-width: 48em) {
.container {
width: 46rem;
}
.col-sm,
.col-sm-1,
......@@ -327,206 +267,138 @@
.col-sm-10,
.col-sm-11,
.col-sm-12 {
box-sizing: border-box;
-ms-flex: 0 0 auto;
-webkit-box-flex: 0;
flex: 0 0 auto;
/*padding-right: 1rem;
padding-left: 1rem;*/
box-sizing: border-box;
-ms-flex: 0 0 auto;
-webkit-box-flex: 0;
flex: 0 0 auto;
/*padding-right: 1rem;
padding-left: 1rem;*/
}
.col-sm {
-webkit-flex-grow: 1;
-ms-flex-positive: 1;
-webkit-box-flex: 1;
flex-grow: 1;
-ms-flex-preferred-size: 0;
flex-basis: 0;
max-width: 100%;
}
.col-sm-1 {
-ms-flex-preferred-size: 8.333%;
flex-basis: 8.333%;
max-width: 8.333%;
}
.col-sm-2 {
-ms-flex-preferred-size: 16.667%;
flex-basis: 16.667%;
max-width: 16.667%;
-webkit-flex-grow: 1;
-ms-flex-positive: 1;
-webkit-box-flex: 1;
flex-grow: 1;
-ms-flex-preferred-size: 0;
flex-basis: 0;
max-width: 100%;
}
.col-sm-3 {
-ms-flex-preferred-size: 25%;
flex-basis: 25%;
max-width: 25%;
-ms-flex-preferred-size: 25%;
flex-basis: 25%;
max-width: 25%;
}
.col-sm-4 {
-ms-flex-preferred-size: 33.333%;
flex-basis: 33.333%;
max-width: 33.333%;
-ms-flex-preferred-size: 33.333%;
flex-basis: 33.333%;
max-width: 33.333%;
}
.col-sm-5 {
-ms-flex-preferred-size: 41.667%;
flex-basis: 41.667%;
max-width: 41.667%;
-ms-flex-preferred-size: 41.667%;
flex-basis: 41.667%;
max-width: 41.667%;
}
.col-sm-6 {
-ms-flex-preferred-size: 50%;
flex-basis: 50%;
max-width: 50%;
-ms-flex-preferred-size: 50%;
flex-basis: 50%;
max-width: 50%;
}
.col-sm-7 {
-ms-flex-preferred-size: 58.333%;
flex-basis: 58.333%;
max-width: 58.333%;
-ms-flex-preferred-size: 58.333%;
flex-basis: 58.333%;
max-width: 58.333%;
}
.col-sm-8 {
-ms-flex-preferred-size: 66.667%;
flex-basis: 66.667%;
max-width: 66.667%;
-ms-flex-preferred-size: 66.667%;
flex-basis: 66.667%;
max-width: 66.667%;
}
.col-sm-9 {
-ms-flex-preferred-size: 75%;
flex-basis: 75%;
max-width: 75%;
}
.col-sm-10 {
-ms-flex-preferred-size: 83.333%;
flex-basis: 83.333%;
max-width: 83.333%;
}
.col-sm-11 {
-ms-flex-preferred-size: 91.667%;
flex-basis: 91.667%;
max-width: 91.667%;
-ms-flex-preferred-size: 75%;
flex-basis: 75%;
max-width: 75%;
}
.col-sm-12 {
-ms-flex-preferred-size: 100%;
flex-basis: 100%;
max-width: 100%;
}
.col-sm-offset-1 {
margin-left: 8.333%;
}
.col-sm-offset-2 {
margin-left: 16.667%;
}
.col-sm-offset-3 {
margin-left: 25%;
}
.col-sm-offset-4 {
margin-left: 33.333%;
}
.col-sm-offset-5 {
margin-left: 41.667%;
}
.col-sm-offset-6 {
margin-left: 50%;
}
.col-sm-offset-7 {
margin-left: 58.333%;
}
.col-sm-offset-8 {
margin-left: 66.667%;
}
.col-sm-offset-9 {
margin-left: 75%;
}
.col-sm-offset-10 {
margin-left: 83.333%;
}
.col-sm-offset-11 {
margin-left: 91.667%;
-ms-flex-preferred-size: 100%;
flex-basis: 100%;
max-width: 100%;
}
.start-sm {
-ms-flex-pack: start;
-webkit-box-pack: start;
justify-content: flex-start;
text-align: start;
-ms-flex-pack: start;
-webkit-box-pack: start;
justify-content: flex-start;
text-align: start;
}
.center-sm {
-ms-flex-pack: center;
-webkit-box-pack: center;
justify-content: center;
text-align: center;
-ms-flex-pack: center;
-webkit-box-pack: center;
justify-content: center;
text-align: center;
}
.end-sm {
-ms-flex-pack: end;
-webkit-box-pack: end;
justify-content: flex-end;
text-align: right;
-ms-flex-pack: end;
-webkit-box-pack: end;
justify-content: flex-end;
text-align: right;
}
.top-sm {
-ms-flex-align: start;
-webkit-box-align: start;
align-items: flex-start;
-ms-flex-align: start;
-webkit-box-align: start;
align-items: flex-start;
}
.middle-sm {
-ms-flex-align: center;
-webkit-box-align: center;
align-items: center;
-ms-flex-align: center;
-webkit-box-align: center;
align-items: center;
}
.bottom-sm {
-ms-flex-align: end;
-webkit-box-align: end;
align-items: flex-end;
-ms-flex-align: end;
-webkit-box-align: end;
align-items: flex-end;
}
.around-sm {
-ms-flex-pack: distribute;
justify-content: space-around;
-ms-flex-pack: distribute;
justify-content: space-around;
}
.between-sm {
-ms-flex-pack: justify;
-webkit-box-pack: justify;
justify-content: space-between;
-ms-flex-pack: justify;
-webkit-box-pack: justify;
justify-content: space-between;
}
.first-sm {
-ms-flex-order: -1;
-webkit-box-ordinal-group: 0;
order: -1;
-ms-flex-order: -1;
-webkit-box-ordinal-group: 0;
order: -1;
}
.last-sm {
-ms-flex-order: 1;
-webkit-box-ordinal-group: 2;
order: 1;
-ms-flex-order: 1;
-webkit-box-ordinal-group: 2;
order: 1;
}
}
@media only screen and (min-width: 62em) {
.container {
width: 61rem;
width: 61rem;
}
.col-md,
......@@ -542,204 +414,128 @@
.col-md-10,
.col-md-11,
.col-md-12 {
box-sizing: border-box;
-ms-flex: 0 0 auto;
-webkit-box-flex: 0;
flex: 0 0 auto;
}
.col-md {
-webkit-flex-grow: 1;
-ms-flex-positive: 1;
-webkit-box-flex: 1;
flex-grow: 1;
-ms-flex-preferred-size: 0;
flex-basis: 0;
max-width: 100%;
}
.col-md-1 {
-ms-flex-preferred-size: 8.333%;
flex-basis: 8.333%;
max-width: 8.333%;
}
.col-md-2 {
-ms-flex-preferred-size: 16.667%;
flex-basis: 16.667%;
max-width: 16.667%;
box-sizing: border-box;
-ms-flex: 0 0 auto;
-webkit-box-flex: 0;
flex: 0 0 auto;
}
.col-md-3 {
-ms-flex-preferred-size: 25%;
flex-basis: 25%;
max-width: 25%;
-ms-flex-preferred-size: 25%;
flex-basis: 25%;
max-width: 25%;
}
.col-md-4 {
-ms-flex-preferred-size: 33.333%;
flex-basis: 33.333%;
max-width: 33.333%;
-ms-flex-preferred-size: 33.333%;
flex-basis: 33.333%;
max-width: 33.333%;
}
.col-md-5 {
-ms-flex-preferred-size: 41.667%;
flex-basis: 41.667%;
max-width: 41.667%;
-ms-flex-preferred-size: 41.667%;
flex-basis: 41.667%;
max-width: 41.667%;
}
.col-md-6 {
-ms-flex-preferred-size: 50%;
flex-basis: 50%;
max-width: 50%;
-ms-flex-preferred-size: 50%;
flex-basis: 50%;
max-width: 50%;
}
.col-md-7 {
-ms-flex-preferred-size: 58.333%;
flex-basis: 58.333%;
max-width: 58.333%;
-ms-flex-preferred-size: 58.333%;
flex-basis: 58.333%;
max-width: 58.333%;
}
.col-md-8 {
-ms-flex-preferred-size: 66.667%;
flex-basis: 66.667%;
max-width: 66.667%;
-ms-flex-preferred-size: 66.667%;
flex-basis: 66.667%;
max-width: 66.667%;
}
.col-md-9 {
-ms-flex-preferred-size: 75%;
flex-basis: 75%;
max-width: 75%;
}
.col-md-10 {
-ms-flex-preferred-size: 83.333%;
flex-basis: 83.333%;
max-width: 83.333%;
}
.col-md-11 {
-ms-flex-preferred-size: 91.667%;
flex-basis: 91.667%;
max-width: 91.667%;
-ms-flex-preferred-size: 75%;
flex-basis: 75%;
max-width: 75%;
}
.col-md-12 {
-ms-flex-preferred-size: 100%;
flex-basis: 100%;
max-width: 100%;
}
.col-md-offset-1 {
margin-left: 8.333%;
}
.col-md-offset-2 {
margin-left: 16.667%;
}
.col-md-offset-3 {
margin-left: 25%;
}
.col-md-offset-4 {
margin-left: 33.333%;
}
.col-md-offset-5 {
margin-left: 41.667%;
}
.col-md-offset-6 {
margin-left: 50%;
}
.col-md-offset-7 {
margin-left: 58.333%;
}
.col-md-offset-8 {
margin-left: 66.667%;
}
.col-md-offset-9 {
margin-left: 75%;
}
.col-md-offset-10 {
margin-left: 83.333%;
}
.col-md-offset-11 {
margin-left: 91.667%;
-ms-flex-preferred-size: 100%;
flex-basis: 100%;
max-width: 100%;
}
.start-md {
-ms-flex-pack: start;
-webkit-box-pack: start;
justify-content: flex-start;
text-align: start;
-ms-flex-pack: start;
-webkit-box-pack: start;
justify-content: flex-start;
text-align: start;
}
.center-md {
-ms-flex-pack: center;
-webkit-box-pack: center;
justify-content: center;
text-align: center;
-ms-flex-pack: center;
-webkit-box-pack: center;
justify-content: center;
text-align: center;
}
.end-md {
-ms-flex-pack: end;
-webkit-box-pack: end;
justify-content: flex-end;
text-align: right;
-ms-flex-pack: end;
-webkit-box-pack: end;
justify-content: flex-end;
text-align: right;
}
.top-md {
-ms-flex-align: start;
-webkit-box-align: start;
align-items: flex-start;
-ms-flex-align: start;
-webkit-box-align: start;
align-items: flex-start;
}
.middle-md {
-ms-flex-align: center;
-webkit-box-align: center;
align-items: center;
-ms-flex-align: center;
-webkit-box-align: center;
align-items: center;
}
.bottom-md {
-ms-flex-align: end;
-webkit-box-align: end;
align-items: flex-end;
-ms-flex-align: end;
-webkit-box-align: end;
align-items: flex-end;
}
.around-md {
-ms-flex-pack: distribute;
justify-content: space-around;
-ms-flex-pack: distribute;
justify-content: space-around;
}
.between-md {
-ms-flex-pack: justify;
-webkit-box-pack: justify;
justify-content: space-between;
-ms-flex-pack: justify;
-webkit-box-pack: justify;
justify-content: space-between;
}
.first-md {
-ms-flex-order: -1;
-webkit-box-ordinal-group: 0;
order: -1;
-ms-flex-order: -1;
-webkit-box-ordinal-group: 0;
order: -1;
}
.last-md {
-ms-flex-order: 1;
-webkit-box-ordinal-group: 2;
order: 1;
-ms-flex-order: 1;
-webkit-box-ordinal-group: 2;
order: 1;
}
}
@media only screen and (min-width: 75em) {
.container {
width: 71rem;
width: 71rem;
margin-left: auto;
margin-right: auto;
}
.col-lg,
......@@ -755,316 +551,157 @@
.col-lg-10,
.col-lg-11,
.col-lg-12 {
box-sizing: border-box;
-ms-flex: 0 0 auto;
-webkit-box-flex: 0;
flex: 0 0 auto;
}
.col-lg {
-webkit-flex-grow: 1;
-ms-flex-positive: 1;
-webkit-box-flex: 1;
flex-grow: 1;
-ms-flex-preferred-size: 0;
flex-basis: 0;
max-width: 100%;
}
.col-lg-1 {
-ms-flex-preferred-size: 8.333%;
flex-basis: 8.333%;
max-width: 8.333%;
}
.col-lg-2 {
-ms-flex-preferred-size: 16.667%;
flex-basis: 16.667%;
max-width: 16.667%;
}
.col-lg-3 {
-ms-flex-preferred-size: 25%;
flex-basis: 25%;
max-width: 25%;
}
.col-lg-4 {
-ms-flex-preferred-size: 33.333%;
flex-basis: 33.333%;
max-width: 33.333%;
}
.col-lg-5 {
-ms-flex-preferred-size: 41.667%;
flex-basis: 41.667%;
max-width: 41.667%;
}
.col-lg-6 {
-ms-flex-preferred-size: 50%;
flex-basis: 50%;
max-width: 50%;
}
.col-lg-7 {
-ms-flex-preferred-size: 58.333%;
flex-basis: 58.333%;
max-width: 58.333%;
box-sizing: border-box;
-ms-flex: 0 0 auto;
-webkit-box-flex: 0;
flex: 0 0 auto;
}
.col-lg-8 {
-ms-flex-preferred-size: 66.667%;
flex-basis: 66.667%;
max-width: 66.667%;
}
.col-lg-9 {
-ms-flex-preferred-size: 75%;
flex-basis: 75%;
max-width: 75%;
}
.col-lg-10 {
-ms-flex-preferred-size: 83.333%;
flex-basis: 83.333%;
max-width: 83.333%;
}
.col-lg-11 {
-ms-flex-preferred-size: 91.667%;
flex-basis: 91.667%;
max-width: 91.667%;
}
.col-lg-12 {
-ms-flex-preferred-size: 100%;
flex-basis: 100%;
max-width: 100%;
}
.col-lg-offset-1 {
margin-left: 8.333%;
}
.col-lg-offset-2 {
margin-left: 16.667%;
}
.col-lg-offset-3 {
margin-left: 25%;
}
.col-lg-offset-4 {
margin-left: 33.333%;
}
.col-lg-offset-5 {
margin-left: 41.667%;
}
.col-lg-offset-6 {
margin-left: 50%;
}
.col-lg-offset-7 {
margin-left: 58.333%;
}
.col-lg-offset-8 {
margin-left: 66.667%;
}
.col-lg-offset-9 {
margin-left: 75%;
}
.col-lg-offset-10 {
margin-left: 83.333%;
}
.col-lg-offset-11 {
margin-left: 91.667%;
}
.start-lg {
-ms-flex-pack: start;
-webkit-box-pack: start;
justify-content: flex-start;
text-align: start;
}
.center-lg {
-ms-flex-pack: center;
-webkit-box-pack: center;
justify-content: center;
text-align: center;
}
.end-lg {
-ms-flex-pack: end;
-webkit-box-pack: end;
justify-content: flex-end;
text-align: right;
}
.top-lg {
-ms-flex-align: start;
-webkit-box-align: start;
align-items: flex-start;
}
.middle-lg {
-ms-flex-align: center;
-webkit-box-align: center;
align-items: center;
}
.bottom-lg {
-ms-flex-align: end;
-webkit-box-align: end;
align-items: flex-end;
}
.around-lg {
-ms-flex-pack: distribute;
justify-content: space-around;
}
.between-lg {
-ms-flex-pack: justify;
-webkit-box-pack: justify;
justify-content: space-between;
}
.first-lg {
-ms-flex-order: -1;
-webkit-box-ordinal-group: 0;
order: -1;
}
-ms-flex-preferred-size: 66.667%;
flex-basis: 66.667%;
max-width: 66.667%;
.last-lg {
-ms-flex-order: 1;
-webkit-box-ordinal-group: 2;
order: 1;
}
}
}
/******************GENERAL**********************/
body {
margin: 0;
padding: 0;
font-family: 'Open Sans', sans-serif;
font-weight: 400;
color: #4c4c4c;
background-color: #edeef0;
margin: 0;
padding: 0;
font-family: 'Open Sans', sans-serif;
font-weight: 400;
color: #4c4c4c;
background-color: #edeef0;
}
body p, body blockquote, body ul {
line-height: 1.7;
font-size: 1.0625rem;
body p,
body blockquote,
body ul {
line-height: 1.7;
font-size: 1rem;
}
a {
color: #ff7519;
text-decoration: none;
color: #ff7519;
text-decoration: none;
}
a:hover, a:focus, a:active {
text-decoration: underline;
outline: 0;
a:hover,
a:focus,
a:active {
text-decoration: underline;
outline: 0;
}
textarea:focus, input:focus{
outline: none;
textarea:focus,
input:focus {
outline: none;
}
a, button, input, select, textarea, label, label:checked, label:focus {
-webkit-tap-highlight-color: rgba(0,0,0,0);
-webkit-tap-highlight-color: transparent;
a,
button,
input,
select,
textarea,
label,
label:checked,
label:focus {
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-webkit-tap-highlight-color: transparent;
}
h1, h2, h3, h4, h5, h6, p {margin: 0; padding: 0;}
h1,
h2,
h3,
h4,
h5,
h6,
p {
margin: 0;
padding: 0;
}
img, video {max-width: 100%;}
img,
video {
max-width: 100%;
}
::-webkit-input-placeholder {
color: #AAA;
}
::-moz-placeholder {
color: #AAA;
}
:-moz-placeholder {
color: #AAA;
}
:-ms-input-placeholder {
color: #AAA;
}
::-ms-input-placeholder {
color: #AAA;
}
.container, .container-fluid {
margin-left: auto;
margin-right: auto;
}
.container-fluid {
padding-right: 0;
padding-left: 0;
}
.list-unstyled {
list-style: none;
padding-left: 0;
list-style: none;
padding-left: 0;
}
.list-inline>li {
display: inline;
.list-inline > li {
display: inline;
}
.text-center {text-align: center;}
.text-center {
text-align: center;
}
.text-adapted {
max-width: 40rem;
margin-left: auto;
margin-right: auto;
max-width: 40rem;
margin-left: auto;
margin-right: auto;
}
.info-block, .white-nav {
background-color: #ffffff;
-moz-box-shadow: 0 2px 4px rgba(50,50,93,.1);
-webkit-box-shadow: 0 2px 4px rgba(50,50,93,.1);
box-shadow: 0 2px 4px rgba(50,50,93,.1);
.info-block,
.white-nav {
background-color: #ffffff;
-moz-box-shadow: 0 2px 4px rgba(50, 50, 93, .1);
-webkit-box-shadow: 0 2px 4px rgba(50, 50, 93, .1);
box-shadow: 0 2px 4px rgba(50, 50, 93, .1);
}
.bold {
font-weight: 600;
font-weight: 600;
}
code {
white-space: pre-wrap;
background-color: #fff1e8;
color: #2f6f9f;
padding: 0.2rem;
margin: 0 0.2rem;
border-radius: 0.2rem;
text-indent: 0;
line-height: 1.1rem;
white-space: pre-wrap;
background-color: #fff1e8;
color: #2f6f9f;
padding: 0.2rem;
margin: 0 0.2rem;
border-radius: 0.2rem;
text-indent: 0;
line-height: 1.1rem;
}
pre.highlight {
background-color: #fff1e8;
color: #2f6f9f;
padding: 0.7rem;
border-radius: 0.2rem;
text-indent: -6px;
background-color: #fff1e8;
color: #2f6f9f;
padding: 0.7rem;
border-radius: 0.2rem;
text-indent: -6px;
}
pre.highlight>code {
background-color: none;
pre.highlight > code {
background-color: none;
}
.arrow-down {
......@@ -1075,3274 +712,2219 @@ pre.highlight>code {
border-top: 3px solid #393939;
}
.untranslated {
background-color: #ff7519;
position: fixed;
bottom: 0;
left: 0;
z-index: 4;
width: 100%;
text-align: center;
color: white;
padding-bottom: 1rem;
}
@media only screen and (max-width: 75rem) {
.untranslated.yes {
display: none;
}
body p,
body blockquote,
body ul {
font-size: 16px;
font-size: 1rem;
}
.untranslated.no {
display: block;
}
@media only screen and (max-width: 62rem) {
.page-wrapper {
padding-top: 4.5rem;
}
code {
word-break: break-all;
}
}
@media only screen and (max-width: 48rem) {
body {
font-size: 1rem;
}
.page-wrapper {
padding-top: 4.5rem;
}
.upgrade-content {
background-color: #e5ba38;
top: 0;
left: 0;
z-index: 4;
width: 100%;
text-align: center;
color: #4c4c4c;
padding-bottom: 1.3rem;
padding-top: 1.3rem;
-moz-box-shadow: 0 2px 6px rgba(50,50,93,.1);
-webkit-box-shadow: 0 2px 6px rgba(50,50,93,.1);
box-shadow: 0 2px 6px rgba(50,50,93,.1);
margin-bottom: 0.4rem;
position: relative;
}
.untranslated p {
font-size: 0.6rem;
}
.upgrade-content a {
color: #4c4c4c;
font-size: 1.1rem;
}
.upgrade-content p {
padding: 0;
display: block;
font-size: 1.1rem;
}
/*******************HEADINGS*************************/
#upgrade-toggle {
display: none;
h1 {
font-family: 'Hind', 'Open Sans', sans-serif;
font-weight: 600;
line-height: 1;
}
#upgrade-toggle:checked ~ .upgrade-content, #upgrade-toggle:checked ~ .upgrade-x {
display: none;
h2 {
font-family: 'Hind', 'Open Sans', sans-serif;
font-weight: 600;
line-height: 1.3;
}
label.upgrade-x {
position: absolute;
right: 1rem;
width: 32px;
height: 32px;
opacity: 0.7;
cursor: pointer;
h3 {
line-height: 1.3;
}
label.upgrade-x:hover {
opacity: 1;
p,
h4 {
padding-top: 1rem;
}
label.upgrade-x:before, label.upgrade-x:after {
position: absolute;
content: ' ';
height: 33px;
width: 3px;
background-color: #4c4c4c;
.info-block h2 {
margin-top: 4rem;
margin-bottom: 1rem;
margin-bottom: 0;
}
label.upgrade-x:before {
transform: rotate(45deg);
.info-block h2:first-child,
h3:first-child,
h3:first-of-type {
margin-top: 0;
}
label.upgrade-x:after {
transform: rotate(-45deg);
.container.description p,
.container.description h3 {
padding: 0 5rem;
text-align: center;
margin-bottom: 2.5rem;
}
@media only screen and (max-width: 75rem) {
@media only screen and (max-width: 62rem) {
.upgrade-content p {
width: 90%;
margin: 0 auto;
font-size: 1rem;
}
.upgrade-content a {
font-size: 1rem;
}
label.upgrade-x:before, label.upgrade-x:after {
position: absolute;
content: ' ';
height: 30px;
background-color: #4c4c4c;
}
h2,
.info-block h2 {
margin-bottom: 0;
}
p {
padding-top: 1rem;
}
}
@media only screen and (max-width: 62rem) {
@media only screen and (max-width: 48rem) {
.upgrade-content {
position: fixed;
top: auto;
bottom: 0;
margin-bottom: 0;
-moz-box-shadow: 0 0 6px rgba(50,50,93,.1);
-webkit-box-shadow: 0 0 6px rgba(50,50,93,.1);
box-shadow: 0 0 6px rgba(50,50,93,.1);
}
.upgrade-content p {
width: 80%;
}
label.upgrade-x {
top: 0.5rem;
right: 0.5rem;
}
.container.description p {
padding: 0 2rem;
}
}
@media only screen and (max-width: 30rem) {
.upgrade-content p {
width: 75%;
}
h2, .info-block h2 {
font-size: 1.4rem;
}
}
/**************************GRID**************************/
.disclaimer {
background-color: #ff7519;
position: fixed;
bottom: 0;
left: 0;
z-index: 4;
width: 100%;
text-align: center;
color: white;
padding-bottom: 1rem;
}
.untranslated-link {
color: white;
text-decoration: underline;
}
.disclaimer-link {
color: white;
text-decoration: underline;
}
@media only screen and (max-width: 75rem) {
body p, body blockquote, body ul {
font-size: 16px;
font-size: 1rem;
}
}
@media only screen and (max-width: 62rem) {
.page-wrapper {
padding-top: 4.5rem;
}
code {
word-break: break-all;
}
}
@media only screen and (max-width: 48rem) {
body {font-size: 1rem;}
.page-wrapper {
padding-top: 4rem;
}
.untranslated p {
font-size: 0.6rem;
}
}
/*******************HEADINGS*************************/
h1 {
font-family: 'Hind', 'Open Sans', sans-serif;
font-weight: 700;
font-size: 2.3rem;
line-height: 1;
margin: 2.5rem 0 2rem 0;
}
h2 {
font-family: 'Hind', 'Open Sans', sans-serif;
font-weight: 700;
font-size: 1.75rem;
line-height: 1.3;
text-align: center;
}
h3 {
font-family: 'Open Sans', sans-serif;
font-size: 1.5rem;
font-weight: 400;
/*margin: 2.7rem 0 1rem 0;*/
letter-spacing: 0.05rem;
line-height: 1.3;
padding-top: 1rem;
margin-top: 1rem;
margin-bottom: 0;
}
p, h4 {
padding-top: 1rem;
}
h1#main-h1 {
font-family: 'Hind', 'Open Sans', sans-serif;
font-weight: 700;
font-size: 3.4375rem;
text-transform: uppercase;
margin: 0;
line-height: 1;
padding: 0;
}
h2#main-h2 {
font-family: 'Open Sans', sans-serif;
font-size: 1.5625rem;
font-size: 1.75rem;
font-weight: 400;
margin: 1rem 0 0 0;
letter-spacing: 0.05rem;
line-height: 1;
text-align: left;
}
.about-main h3, .about-monero h3 {
padding-top: 0;
font-weight: 600;
line-height: 1.7;
font-size: 1.15rem;
letter-spacing: normal;
.info-block {
margin-bottom: 1rem;
flex: 1;
-webkit-flex: 1;
-ms-flex: 1;
padding: 4rem 2.5rem;
word-wrap: break-word;
}
.info-block h2 {
margin-top: 4rem;
margin-bottom: 1rem;
margin-bottom: 0;
.full > .info-block.text-adapt {
padding: 4rem 15rem;
}
.info-block h2:first-child, h3:first-child, h3:first-of-type {
margin-top: 0;
.guides .info-block {
word-break: keep-all;
}
.events h3 {
margin-top: 1rem;
.left.two-thirds,
.left.one-third,
.left.half,
.left.one-fourth,
.left.three-fourths {
display: flex;
display: -ms-flexbox;
display: -webkit-flex;
padding-right: 0.5rem;
}
.container.description p, .container.description h3 {
padding: 0 5rem;
text-align: center;
margin-bottom: 2.5rem;
.right.two-thirds,
.right.one-third,
.right.half,
.right.one-fourth,
.right.three-fourths {
display: flex;
display: -ms-flexbox;
display: -webkit-flex;
padding-left: 0.5rem;
}
.pre-roadmap p {
margin-bottom: 2.5rem;
.half {
display: flex;
display: -ms-flexbox;
display: -webkit-flex;
}
.hangouts ul {
margin-bottom: 2.5rem;
.center.one-third,
.center-1.one-fourth,
.center-2.one-fourth {
display: flex;
display: -ms-flexbox;
display: -webkit-flex;
padding-left: 0.5rem;
padding-right: 0.5rem;
}
@media only screen and (max-width: 75rem) {
h1#main-h1 {
font-size: 2.4rem;
margin: 0;
line-height: 1;
}
h2#main-h2 {
font-size: 1.25rem;
margin: 0.5rem 0 0 0;
}
h2, .info-block h2 {
font-size: 23px;
font-size: 1.5625rem;
margin-bottom: 0;
}
.info-block {
padding: 3rem 2rem;
}
h3 {
font-size: 19px;
font-size: 1.25rem;
padding-top: 1rem;
margin-top: 1rem;
margin-bottom: 0;
}
.full > .info-block.text-adapt {
padding: 4rem 10rem;
}
}
@media only screen and (max-width: 62rem) {
h1 {
margin: 0.5rem 0 1rem 0;
}
.pre-roadmap p, .container.description p {
margin-bottom: 1.5rem;
margin-top: -1rem;
}
.container.full {
margin-left: 1rem;
margin-right: 1rem;
}
h1#main-h1 {
font-size: 3rem;
text-transform: uppercase;
margin: 0;
}
.info-block {
padding: 2.5rem 1.8rem;
}
h2#main-h2 {
font-size: 1.25rem;
margin: 1rem 0 0 0;
}
.full > .info-block.text-adapt {
padding: 4rem;
}
h2, .info-block h2 {
font-size: 23px;
font-size: 1.5625rem;
margin-bottom: 0;
}
.center.one-fourth,
.right.three-fourths,
.left.three-fourths,
.left.one-fourth.no-pad-sm,
.right.one-fourth.no-pad-sm,
.right.half,
.left.half,
.right.one-third,
.left.two-thirds,
.left.one-third,
.right.two-thirds,
.center.one-third {
padding-left: 0;
padding-right: 0;
}
h3 {
font-size: 20px;
font-size: 1.25rem;
padding-top: 1rem;
margin-top: 1rem;
margin-bottom: 0;
}
.center-1.one-fourth {
padding-left: 0.5rem;
padding-right: 0;
}
p {
padding-top: 1rem;
}
.center-2.one-fourth {
padding-right: 0.5rem;
padding-left: 0;
}
}
@media only screen and (max-width: 48rem) {
h1#main-h1 {
font-size: 3rem;
}
h1 {
font-size: 1.8rem;
padding: 0.3rem;
margin: 0.5rem 0;
}
.about-main h3, .about-monero h3 {
padding-top: 1rem;
}
.container.description p {
padding: 0 2rem;
}
.pre-roadmap p, .container.description p {
margin-bottom: 1rem;
margin-top: -0.5rem;
}
}
@media only screen and (max-width: 47.9rem) {
.left.two-thirds,
.left.one-third,
.left.half,
.left.one-fourth,
.left.three-fourths,
.right.two-thirds,
.right.one-third,
.center.one-third,
.center-1.one-fourth,
.center-2.one-fourth,
.right.half,
.right.one-fourth,
.right.three-fourths {
padding-left: 0.5rem;
padding-right: 0.5rem;
}
.info-block {
margin-bottom: 1rem;
}
}
@media only screen and (max-width: 30rem) {
h1#main-h1 {
font-size: 2.5rem;
}
h2#main-h2 {
font-size: 1.5rem;
margin-top: 0.5rem;
}
.info-block {
padding: 2rem 1rem;
}
h2, .info-block h2 {
font-size: 1.4rem;
}
}
/*************************BUTTONS****************************/
/**************************GRID**************************/
.info-block {
margin-bottom: 1rem;
flex: 1;
-webkit-flex: 1;
-ms-flex: 1;
padding: 4rem 2.5rem;
word-wrap: break-word;
.btn-fixed,
.btn-auto {
background: none;
border: 1px solid #ff7519;
text-decoration: none;
text-align: center;
font-family: 'Hind', sans-serif;
font-weight: 700;
color: #ff7519;
text-transform: uppercase;
/*padding: 0.5rem 1rem 0.3rem 1rem;*/
padding: 0 1rem;
white-space: nowrap;
cursor: pointer;
-webkit-transition: background .15s ease, transform .15s ease, box-shadow .15s ease;
-moz-transition: background .15s ease, transform .15s ease, box-shadow .15s ease;
-o-transition: background .15s ease, transform .15s ease, box-shadow .15s ease;
transition: background .15s ease, transform .15s ease, box-shadow .15s ease;
display: inline-block;
height: 2.6rem;
line-height: 2.7rem;
-moz-box-shadow: 0 1px 5px 0 rgba(0, 0, 0, .07), 0 7px 17px 0 rgba(0, 0, 0, .1);
-webkit-box-shadow: 0 1px 5px 0 rgba(0, 0, 0, .07), 0 7px 17px 0 rgba(0, 0, 0, .1);
box-shadow: 0 1px 5px 0 rgba(0, 0, 0, .07), 0 7px 17px 0 rgba(0, 0, 0, .1);
}
.full>.info-block.text-adapt {
padding: 4rem 15rem;
a.btn-link:hover,
a.btn-link.active,
a.btn-link:focus {
text-decoration: none;
outline: 0;
}
.guides .info-block {
word-break:keep-all;
.btn-fixed {
width: 15rem;
display: block;
}
.left.two-thirds, .left.one-third, .left.half, .left.one-fourth, .left.three-fourths {
display: flex;
display: -ms-flexbox;
display: -webkit-flex;
padding-right: 0.5rem;
.btn-fixed:hover,
.btn-fixed:active,
.btn-fixed:focus,
.btn-auto:hover,
.btn-auto:active,
.btn-auto:focus {
background-color: #ff7519;
color: #fff !important;
text-decoration: none;
}
.right.two-thirds, .right.one-third, .right.half, .right.one-fourth, .right.three-fourths {
display: flex;
display: -ms-flexbox;
display: -webkit-flex;
padding-left: 0.5rem;
}
@media only screen and (max-width: 62rem) {
.half {
display: flex;
display: -ms-flexbox;
display: -webkit-flex;
}
.btn-fixed,
.btn-auto {
font-size: 0.875rem;
}
.center.one-third, .center-1.one-fourth, .center-2.one-fourth {
display: flex;
display: -ms-flexbox;
display: -webkit-flex;
padding-left: 0.5rem;
padding-right: 0.5rem;
}
@media only screen and (max-width: 75rem) {
.info-block {
padding: 3rem 2rem;
}
@media only screen and (max-width: 48rem) {
.full>.info-block.text-adapt {
padding: 4rem 10rem;
}
.btn-fixed,
.btn-auto {
font-size: 1rem;
}
}
@media only screen and (max-width: 62rem) {
/************************NAVIGATION*************************/
.info-block {
padding: 2.5rem 1.8rem;
}
/*DESKTOP NAVIGATION*/
.full>.info-block.text-adapt {
padding: 4rem;
.desktop-nav {
background-color: #fff;
-moz-box-shadow: 0 2px 2px rgba(0, 0, 0, .1);
-webkit-box-shadow: 0 2px 2px rgba(0, 0, 0, .1);
box-shadow: 0 2px 2px rgba(0, 0, 0, .1);
margin-bottom: 4rem;
}
.center.one-fourth, .right.three-fourths, .left.three-fourths, .left.one-fourth.no-pad-sm, .right.one-fourth.no-pad-sm, .right.half, .left.half, .right.one-third, .left.two-thirds, .left.one-third, .right.two-thirds, .center.one-third {
padding-left: 0; padding-right: 0;
img.monero-logo {
max-width: 100%;
height: auto;
width: 12rem;
padding: 0.5rem 0;
vertical-align: middle;
}
.center-1.one-fourth {padding-left: 0.5rem; padding-right: 0;}
.center-2.one-fourth {padding-right: 0.5rem; padding-left: 0;}
.desktop-nav .items a {
color: #4c4c4c;
text-decoration: none;
-webkit-transition: all ease-out .1s;
-moz-transition: all ease-out .1s;
-o-transition: all ease-out .1s;
transition: all ease-out .1s;
font-size: 0.9rem;
padding: 0.8rem 1rem;
}
@media only screen and (max-width: 48rem) {
.left.two-thirds, .left.one-third, .left.half, .left.one-fourth, .left.three-fourths, .right.two-thirds, .right.one-third, .center.one-third, .center-1.one-fourth, .center-2.one-fourth, .right.half, .right.one-fourth, .right.three-fourths, .full {
padding-left: 0.5rem;
padding-right: 0.5rem;
.desktop-nav .items a:last-of-type {
margin-right: -1rem;
}
.info-block {
margin-bottom: 0.5rem;
.desktop-nav .items a:hover,
.topnav .topnav-list a:focus,
.topnav .topnav-list a:active {
color: #a1aabb;
text-decoration: none;
}
.full>.info-block.text-adapt {
padding: 2.5rem 1.5rem;
.white-nav {
margin-bottom: 1rem;
line-height: 1;
}
.burger-check,
.burger-checkdropdown {
display: none;
}
@media only screen and (max-width: 30rem) {
.info-block, .full>.info-block.text-adapt {
padding: 2rem 1rem;
margin-bottom: 0.5rem;
.white-nav > .nav-items > .nav-item.mob {
display: none;
}
}
@media only screen and (max-width: 75rem) {
/*************************BUTTONS****************************/
.desktop-nav .items a {
font-size: 0.85rem;
padding: 0.8rem 0.5rem;
}
.btn-fixed, .btn-auto {
background: none;
border: 1px solid #ff7519;
text-decoration: none;
text-align: center;
font-family: 'Hind', sans-serif;
font-weight: 700;
color: #ff7519;
text-transform: uppercase;
/*padding: 0.5rem 1rem 0.3rem 1rem;*/
padding: 0 1rem;
white-space: nowrap;
cursor: pointer;
-webkit-transition: background .15s ease, transform .15s ease, box-shadow .15s ease;
-moz-transition: background .15s ease, transform .15s ease, box-shadow .15s ease;
-o-transition: background .15s ease, transform .15s ease, box-shadow .15s ease;
transition: background .15s ease, transform .15s ease, box-shadow .15s ease;
display: inline-block;
height: 2.6rem;
line-height: 2.7rem;
-moz-box-shadow: 0 1px 5px 0 rgba(0,0,0,.07), 0 7px 17px 0 rgba(0,0,0,.1);
-webkit-box-shadow: 0 1px 5px 0 rgba(0,0,0,.07), 0 7px 17px 0 rgba(0,0,0,.1);
box-shadow: 0 1px 5px 0 rgba(0,0,0,.07), 0 7px 17px 0 rgba(0,0,0,.1);
}
.desktop-nav .items a:last-of-type {
margin-right: -0.5rem;
}
.btn-fixed:hover, .btn-auto:hover {
-webkit-transform: translate(0, -1px);
-moz-transform: translate(0, -1px);
-ms-transform: translate(0, -1px);
-o-transform: translate(0, -1px);
transform: translate(0, -1px);
-moz-box-shadow: 0 7px 14px rgba(50, 50, 93, .1), 0 3px 6px rgba(0, 0, 0, .08);
-webkit-box-shadow: 0 7px 14px rgba(50, 50, 93, .1), 0 3px 6px rgba(0, 0, 0, .08);
box-shadow: 0 7px 14px rgba(50, 50, 93, .1), 0 3px 6px rgba(0, 0, 0, .08);
border: 1px solid #ff7519;
}
img.monero-logo {
width: 10rem;
}
.btn-fixed:active, .btn-auto:active {
transform: translate(0, 1px);
-moz-box-shadow: 0 4px 6px rgba(50, 50, 93, .11), 0 1px 3px rgba(0, 0, 0, .08);
-webkit-box-shadow: 0 4px 6px rgba(50, 50, 93, .11), 0 1px 3px rgba(0, 0, 0, .08);
box-shadow: 0 4px 6px rgba(50, 50, 93, .11), 0 1px 3px rgba(0, 0, 0, .08);
border: 1px solid #ff7519;
}
a.btn-link:hover, a.btn-link.active, a.btn-link:focus {
text-decoration: none;
outline: 0;
}
@media only screen and (max-width: 62rem) {
.btn-link span.icon-windows, .btn-link span.icon-linux, .btn-link span.icon-apple, .btn-link span.icon-blockchain {
height: 2rem;
width: 2rem;
display: inline-block;
margin-right: 0.5rem;
vertical-align: middle;
}
.desktop-nav {
display: none;
}
.btn-link span.icon-windows {
background-image: url(../img/monero-spritesheet.png);
background-position: 0 0;
}
a.btn-link:hover span.icon-windows, a.btn-link:focus span.icon-windows, a.btn-link.active span.icon-windows {
background-image: url(../img/monero-spritesheet.png);
background-position: -48px 0;
}
/*MOBILE NAVIGATION*/
.btn-link span.icon-linux, span.icon-linux {
background-image: url(../img/monero-spritesheet.png);
background-position: 0 -48px;
.mob-nav {
display: none;
}
a.btn-link:hover span.icon-linux, a.btn-link:focus span.icon-linux, a.btn-link.active span.icon-linux {
background-image: url(../img/monero-spritesheet.png);
background-position: -48px -48px;
.mob.bot-nav {
display: none;
}
.btn-link span.icon-apple {
background-image: url(../img/monero-spritesheet.png);
background-position: 0 -96px;
}
@media only screen and (max-width: 62rem) {
a.btn-link:hover span.icon-apple, a.btn-link:focus span.icon-apple, a.btn-link.active span.icon-apple {
background-image: url(../img/monero-spritesheet.png);
background-position: -48px -96px;
}
img.monero-logo {
position: inherit;
width: 10rem;
padding: 0.39rem 0 0.39rem 1rem;
}
.btn-link span.icon-blockchain {
background-image: url(../img/monero-spritesheet.png);
background-position: 0 -144px;
}
.white-nav {
line-height: 0.5;
display: -ms-flexbox;
display: -webkit-box;
display: flex;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
border-top: none;
border-right: none;
border-left: none;
}
a.btn-link:hover span.icon-blockchain, a.btn-link:focus span.icon-blockchain, a.btn-link.active span.icon-blockchain {
background-image: url(../img/monero-spritesheet.png);
background-position: -48px -144px;
}
.white-nav .nav-items {
line-height: 1;
}
.btn-fixed {
width: 15rem;
display: block;
}
.white-nav > .nav-items > .nav-item.mob {
display: initial;
}
.btn-fixed:hover, .btn-fixed:active, .btn-fixed:focus, .btn-auto:hover, .btn-auto:active, .btn-auto:focus {
background-color: #ff7519;
color: #fff!important;
text-decoration: none;
}
.nav-items {
display: none;
}
@media only screen and (max-width: 62rem) {
.burger {
display: block;
border: 0;
background: none;
outline: 0;
padding: 0;
cursor: pointer;
border-bottom: 2px solid #4c4c4c;
width: 1.5rem;
align-self: flex-end;
}
.btn-fixed, .btn-auto {
font-size: 0.875rem;
}
.burger::-moz-focus-inner {
border: 0;
padding: 0;
}
}
.burger:before {
content: "";
display: block;
border-bottom: 2px solid #4c4c4c;
width: 100%;
margin-bottom: 5px;
transition: -webkit-transform 0.5s ease-in-out;
transition: transform 0.5s ease-in-out;
transition: transform 0.5s ease-in-out, -webkit-transform 0.5s ease-in-out;
-webkit-transition: -webkit-transform 0.5s ease-in-out;
}
@media only screen and (max-width: 48rem) {
.burger:after {
content: "";
display: block;
border-bottom: 2px solid #4c4c4c;
width: 100%;
margin-bottom: 5px;
transition: -webkit-transform 0.5s ease-in-out;
transition: transform 0.5s ease-in-out;
transition: transform 0.5s ease-in-out, -webkit-transform 0.5s ease-in-out;
-webkit-transition: -webkit-transform 0.5s ease-in-out;
}
.btn-fixed, .btn-auto {
font-size: 1rem;
}
.burger-check:checked ~ .burger {
border-bottom: 4px solid transparent;
transition: border-bottom 0.5s ease-in-out;
-webkit-transition: border-bottom 0.5s ease-in-out;
}
}
.burger-check:checked ~ .burger:before {
transform: rotate(-405deg) translateY(6px) translateX(-5px);
-webkit-transform: rotate(-405deg) translateY(6px) translateX(-5px);
transition: -webkit-transform 0.5s ease-in-out;
transition: transform 0.5s ease-in-out;
transition: transform 0.5s ease-in-out, -webkit-transform 0.5s ease-in-out;
-webkit-transition: -webkit-transform 0.5s ease-in-out;
}
@media only screen and (max-width: 30rem) {
.btn-link span#icon-windows, .btn-link span#icon-linux, .btn-link span#icon-apple, .btn-link span#icon-blockchain {
display: none;
}
}
.burger-check:checked ~ .burger:after {
transform: rotate(405deg) translateY(0px) translateX(1.3px);
-webkit-transform: rotate(405deg) translateY(0px) translateX(1.3px);
transition: -webkit-transform 0.5s ease-in-out;
transition: transform 0.5s ease-in-out;
transition: transform 0.5s ease-in-out, -webkit-transform 0.5s ease-in-out;
-webkit-transition: -webkit-transform 0.5s ease-in-out;
}
/************************NAVIGATION*************************/
.burger-check:checked ~ .nav-items {
display: block;
}
/*DESKTOP NAVIGATION*/
.burger-check:checked + label {
position: fixed;
}
img.monero-logo {
max-width: 100%;
height: auto;
width: 13rem;
padding: 0.8rem 0.8rem 0.8rem 3.4rem;
}
.mob-nav {
display: -ms-flexbox;
display: -webkit-box;
display: flex;
}
.topnav .topnav-list a, .topnav .topnav-list label {
color: #7a7a7a;
text-decoration: none;
-webkit-transition: all ease-out .1s;
-moz-transition: all ease-out .1s;
-o-transition: all ease-out .1s;
transition: all ease-out .1s;
}
.white-nav {
-moz-box-shadow: 0 2px 2px rgba(0, 0, 0, .1);
-webkit-box-shadow: 0 2px 2px rgba(0, 0, 0, .1);
box-shadow: 0 2px 2px rgba(0, 0, 0, .1);
}
.topnav .topnav-list .language-change, .topnav .topnav-list .top-link {
font-size: 0.9rem;
}
.slide-in-nav {
position: absolute;
right: 0;
bottom: 0;
left: 0;
right: 200%;
left: -100%;
top: -100%;
bottom: 0;
width: 50vw;
background-color: #fff;
overflow: scroll;
z-index: 90;
display: -ms-flexbox;
display: -webkit-box;
display: flex;
}
.topnav .topnav-list .top-link {
padding: 0.8rem 1rem;
}
.slide-in-nav::-webkit-scrollbar {
display: none;
}
.topnav .topnav-list .top-link.language-change {
position: relative;
display: inline-block;
padding: 0;
margin-right: 3.5rem;
}
.mob.bot-nav {
display: block;
position: fixed;
width: 100%;
left: 0;
top: 0;
min-height: 3.5rem;
z-index: 100;
}
.topnav .topnav-list .language-change label {
height: 100%;
/*width: 100%;*/
padding: 0.8rem 1rem;
display: block;
}
label[for="mobile-burger"] {
position: fixed;
top: 1.3rem;
right: 1rem;
z-index: 110;
}
.topnav .topnav-list .language-change label:hover {
color: #ff7519;
cursor: pointer;
}
#mobile-burger:checked ~ .slide-in-nav {
position: fixed;
-moz-box-shadow: 0 0 900px 900px rgba(0, 0, 0, 0.5);
-webkit-box-shadow: 0 0 900px 900px rgba(0, 0, 0, 0.5);
box-shadow: 0 0 900px 900px rgba(0, 0, 0, 0.5);
right: 0;
left: 50%;
top: 0;
}
.topnav .topnav-list .language-change input:checked + label {
background-color: #fcfcfc;
-moz-box-shadow: 0 3px 5px rgba(50,50,93,.1);
-webkit-box-shadow: 0 3px 5px rgba(50,50,93,.1);
box-shadow: 0 3px 5px rgba(50,50,93,.1);
}
#mobile-burger:checked ~ body {
overflow: none;
}
.topnav .topnav-list .language-change input:checked ~ .dropdown-content {
display: block;
}
.slide-in {
padding-top: 3.5rem;
width: 100%;
}
.topnav .topnav-list .language-change label div.arrow-down {
display: inline-block;
margin-bottom: 0.25rem;
margin-left: 0.2rem;
border-top: 3px solid #7a7a7a;
}
.mob-nav .nav-item {
position: relative;
text-align: left;
font-family: 'Hind', sans-serif;
font-weight: 500;
font-size: 1.125rem;
cursor: pointer;
}
.topnav .topnav-list .language-change label:hover div.arrow-down {
border-top: 3px solid #ff7519;
}
.mob-nav .nav-item:checked,
.mob-nav .nav-item:focus,
.mob-nav .nav-item:active {
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-webkit-tap-highlight-color: transparent;
}
.topnav .topnav-list .language-change .dropdown-content {
display: none;
position: absolute;
left: 0;
top: 2.8rem;
text-align: left;
background: #fcfcfc;
width: 100%;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
z-index: 1;
-webkit-transition: all .3s ease;
-moz-transition: all .3s ease;
-ms-transition: all .3s ease;
-o-transition: all .3s ease;
transition: all .3s ease;
-moz-box-shadow: 0 3px 5px rgba(50,50,93,.1);
-webkit-box-shadow: 0 3px 5px rgba(50,50,93,.1);
box-shadow: 0 3px 5px rgba(50,50,93,.1);
}
.mob-nav .nav-item a {
padding: 1rem 0 1rem 2rem;
}
.topnav .topnav-list .language-change .dropdown-content a {
padding: 0.8rem 1rem;
}
.mob-nav .nav-item a {
-webkit-transition: all ease-out .2s;
-moz-transition: all ease-out .2s;
-o-transition: all ease-out .2s;
transition: all ease-out .2s;
display: block;
}
.topnav .topnav-list .language-change .dropdown-content a:hover, .topnav .topnav-list .language-change .dropdown-content a:focus {
text-decoration: none;
/*background-color: #f9f9fa;*/
}
.mob-nav .nav-item:last-of-type a {
border-top: 3px solid #edeef0;
color: #a1aabb;
}
.topnav .topnav-list .language-change .dropdown-content a.active {
color: #ff7519;
}
.topnav .topnav-list a:hover, .topnav .topnav-list a:focus, .topnav .topnav-list a:active {
color: #ff7519;
text-decoration: underline;
}
.white-nav {
margin-bottom: 1rem;
line-height: 1;
}
.white-nav>.nav-items>.nav-item {
width: 20%;
}
.white-nav>.nav-items>.nav-item.mob {display: none;}
.nav-items>.nav-item>label, .nav-items>.nav-item>a {
padding: 1.5rem 2rem 1.5rem 3.5rem;
display: block;
color: #4c4c4c;
text-decoration: none;
font-family: 'Hind', sans-serif;
font-size: 1.35rem;
font-weight: 500;
-webkit-transition: all ease-out .2s;
-moz-transition: all ease-out .2s;
-o-transition: all ease-out .2s;
transition: all ease-out .2s;
position: relative;
}
.nav-items>.nav-item .arrow-down {
-webkit-transition: all ease-out .2s;
-moz-transition: all ease-out .2s;
-o-transition: all ease-out .2s;
transition: all ease-out .2s;
}
.nav-items>.nav-item>a:last-child {
width: initial;
}
.desktop-nav .nav-item .arrow-down {
display: inline-block;
margin-left: 0.2rem;
margin-bottom: 0.2rem;
}
.nav-items>.nav-item>label:hover, .nav-items>.nav-item>a:hover, .nav-items>.nav-item>a:focus, .nav-items>.nav-item>a:active {
color: #ff7519;
text-decoration: none;
}
.nav-items>.nav-item>label:hover .arrow-down, .nav-items>.nav-item>a:hover .arrow-down, .nav-items>.nav-item>a:focus .arrow-down, .nav-items>.nav-item>a:active .arrow-down {
border-top: 3px solid #ff7519;
}
/*DROPDOWN MENU*/
.white-nav .dropdown {
position: relative;
}
.white-nav .nav-item .dropdown-content {
position: absolute;
left: 0;
top: 99.5%;
text-align: left;
background: #ffffff;
width: 100%;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
-moz-box-shadow: 0 2px 4px rgba(50,50,93,.1);
-webkit-box-shadow: 0 2px 4px rgba(50,50,93,.1);
box-shadow: 0 2px 4px rgba(50,50,93,.1);
opacity: 0;
visibility: hidden;
z-index: 5;
-webkit-transition: all .3s ease;
-moz-transition: all .3s ease;
-ms-transition: all .3s ease;
-o-transition: all .3s ease;
transition: all .3s ease;
}
.white-nav .nav-item:last-of-type .dropdown-content {
width: 100%;
}
.dropdown:hover>.dropdown-content {
opacity: 1;
visibility: visible;
}
.nav-item>.dropdown-content>a {
color: #4c4c4c;
text-decoration: none;
font-family: 'Hind', sans-serif;
font-weight: 500;
font-size: 0.99rem;
padding: 0.8rem 3rem 0.8rem 3.5rem;
-webkit-transition: all ease-out .2s;
-moz-transition: all ease-out .2s;
-o-transition: all ease-out .2s;
transition: all ease-out .2s;
line-height: 1.3;
}
.nav-item>.dropdown-content>a:hover {
color: #ff7519;
background-color: #fcfcfc;
}
.dropdown-content a {
display: block;
}
.burger-check, .burger-checkdropdown {
display: none;
}
@media only screen and (max-width: 75rem) {
.topnav .topnav-list .top-link.language-change {
margin-right: 3.1rem;
font-size: 0.85rem;
}
.topnav .topnav-list .top-link {
font-size: 0.85rem;
}
img.monero-logo {
padding-left: 3.1rem;
}
.topnav .topnav-list .top-link {
padding: 0.8rem 0.5rem;
}
.topnav .topnav-list .language-change .dropdown-content {
top: 1.9rem;
}
.nav-items>.nav-item>label, .nav-item>.dropdown-content>a {
padding-left: 2.7rem;
}
.nav-items>.nav-item>label, .nav-items>.nav-item>a {
font-size: 1.16rem;
}
.nav-item>.dropdown-content>a {
font-size: 0.9rem;
padding-right: 2.2rem;
}
.nav-items>.nav-item:first-of-type>label, .white-nav .nav-item:first-of-type .dropdown-content a {
padding-left: 3.1rem;
}
.nav-items>.nav-item:last-of-type>label {
padding-right: 0.8rem;
}
}
@media only screen and (max-width: 62rem) {
.desktop-nav {
display: none;
}
}
/*MOBILE NAVIGATION*/
.mob-nav {
display:none;
}
.mob.bot-nav {
display: none;
}
@media only screen and (max-width: 62rem) {
/*.mob.bot-nav.white-nav .col-xs-6 a {
display: inline-block;
}*/
img.monero-logo {
position: inherit;
width: 10rem;
padding: 0.39rem 0 0.39rem 0;
}
.white-nav {
line-height: 0.5;
display: -ms-flexbox;
display: -webkit-box;
display: flex;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
border-top: none;
border-right: none;
border-left: none;
}
.white-nav .nav-items {
line-height: 1;
}
.white-nav>.nav-items>.nav-item.mob {display: initial;}
.nav-items {
display: none;
}
.dropdown-content {
display: none;
}
.burger {
display: block;
border: 0;
background: none;
outline: 0;
padding: 0;
cursor: pointer;
border-bottom: 2px solid #4c4c4c;
width: 1.5rem;
align-self: flex-end;
}
.burger::-moz-focus-inner {
border: 0;
padding: 0;
}
.burger:before {
content: "";
display: block;
border-bottom: 2px solid #4c4c4c;
width: 100%;
margin-bottom: 5px;
transition: -webkit-transform 0.5s ease-in-out;
transition: transform 0.5s ease-in-out;
transition: transform 0.5s ease-in-out, -webkit-transform 0.5s ease-in-out;
-webkit-transition: -webkit-transform 0.5s ease-in-out;
}
.burger:after {
content: "";
display: block;
border-bottom: 2px solid #4c4c4c;
width: 100%;
margin-bottom: 5px;
transition: -webkit-transform 0.5s ease-in-out;
transition: transform 0.5s ease-in-out;
transition: transform 0.5s ease-in-out, -webkit-transform 0.5s ease-in-out;
-webkit-transition: -webkit-transform 0.5s ease-in-out;
}
.burger-check:checked ~ .burger {
border-bottom: 4px solid transparent;
transition: border-bottom 0.5s ease-in-out;
-webkit-transition: border-bottom 0.5s ease-in-out;
}
.burger-check:checked ~ .burger:before {
transform: rotate(-405deg) translateY(6px) translateX(-5px);
-webkit-transform: rotate(-405deg) translateY(6px) translateX(-5px);
transition: -webkit-transform 0.5s ease-in-out;
transition: transform 0.5s ease-in-out;
transition: transform 0.5s ease-in-out, -webkit-transform 0.5s ease-in-out;
-webkit-transition: -webkit-transform 0.5s ease-in-out;
}
.burger-check:checked ~ .burger:after {
transform: rotate(405deg) translateY(0px) translateX(1.3px);
-webkit-transform: rotate(405deg) translateY(0px) translateX(1.3px);
transition: -webkit-transform 0.5s ease-in-out;
transition: transform 0.5s ease-in-out;
transition: transform 0.5s ease-in-out, -webkit-transform 0.5s ease-in-out;
-webkit-transition: -webkit-transform 0.5s ease-in-out;
}
.burger-check:checked ~ .nav-items{
display: block;
}
#drop1:checked ~ .dropdown-content, #drop2:checked ~ .dropdown-content, #drop3:checked ~ .dropdown-content, #drop4:checked ~ .dropdown-content {
display: block;
position: inherit;
opacity: 1;
visibility: visible;
box-shadow: none;
}
.burger-check:checked + label {
position: fixed;
}
.nav-item > label {
display: -ms-flexbox;
display: -webkit-box;
display: flex;
}
/*.white-nav .mob-language-change label .arrow-down {
display: inline-block;
margin-left: 0.2rem;
margin-bottom: 0.2rem;
border-top: 3px solid #393939;
}*/
.mob-nav {
display: -ms-flexbox;
display: -webkit-box;
display: flex;
}
.white-nav {
-moz-box-shadow: 0 2px 2px rgba(0,0,0,.1);
-webkit-box-shadow: 0 2px 2px rgba(0,0,0,.1);
box-shadow: 0 2px 2px rgba(0,0,0,.1);
}
.slide-in-nav {
position: absolute;
top: 0; right: 0; bottom: 0; left: 0;
display: flex;
right: 200%;
left: -100%;
display: -ms-flexbox;
display: -webkit-box;
display: flex;
top: 0;
bottom: 0;
width: 70vw;
background-color: #fff;
-moz-transition: right 0.5s, left 0.5s;
-webkit-transition: right 0.5s, left 0.5s;
transition: right 0.5s, left 0.5s;
overflow: scroll;
z-index: 10;
}
.slide-in-nav::-webkit-scrollbar {
display: none;
}
.mob.bot-nav {
display: block;
position: fixed;
width: 100%;
left: 0;
top: 0;
min-height: 3.5rem;
z-index: 10;
}
label[for="mobile-burger"] {
position: fixed;
top: 1.3rem;
left: 1rem;
z-index: 11;
}
#mobile-burger:checked ~ .slide-in-nav {
position: fixed;
-moz-box-shadow: 0 0 900px 900px rgba(0,0,0,0.5);
-webkit-box-shadow: 0 0 900px 900px rgba(0,0,0,0.5);
box-shadow: 0 0 900px 900px rgba(0,0,0,0.5);
right: 0;
left: 0;
}
#mobile-burger:checked ~ body {
overflow: none;
}
.slide-in {
padding-top: 3.5rem;
width: 100%;
}
.slide-in .row label, .slide-in .row a {
border-bottom: 1px solid #d7d7d7;
}
.mob-nav .nav-item {
position: relative;
text-transform: uppercase;
text-align: left;
font-family: 'Hind', sans-serif;
font-weight: 500;
font-size: 1.125rem;
cursor: pointer;
}
.mob-nav .nav-item:checked, .mob-nav .nav-item:focus, .mob-nav .nav-item:active {
-webkit-tap-highlight-color: rgba(0,0,0,0);
-webkit-tap-highlight-color: transparent;
}
.mob-nav .nav-item .arrow-down {
margin-top: 0.8rem;
margin-left: 0.2rem;
}
.mob-nav .nav-item a, .mob-nav .nav-item label {
padding: 1rem 0 1rem 2rem;
}
.mob-nav .nav-item>a, .mob-nav .nav-item label, .mob-nav .nav-item .dropdown-content>a, .mob-nav .nav-item .arrow-down {
-webkit-transition: all ease-out .2s;
-moz-transition: all ease-out .2s;
-o-transition: all ease-out .2s;
transition: all ease-out .2s;
}
.mob-nav .nav-item a {
display: block;
}
.mob-nav .nav-item a:hover .arrow-down, .mob-nav .nav-item a.active .arrow-down, .mob-nav .nav-item a:focus .arrow-down, .mob-nav .nav-item label:hover .arrow-down, .mob-nav .nav-item label:focus .arrow-down, .mob-nav .nav-item label.active .arrow-down {
border-top: 3px solid #ff7519;
}
.mob-nav .nav-item label, .mob-nav .nav-item>a {
text-decoration: none;
color: #393939;
cursor: pointer;
height: 1.9rem;
line-height: 2.1rem;
}
.mob-nav .nav-item>a:hover, .mob-nav .nav-item>a:focus, .mob-nav .nav-item>a:active, .mob-nav .nav-item>a.active, .mob-nav .nav-item label:hover, .mob-nav .nav-item label:focus {
color: #ff7519;
}
.mob-nav .nav-item .dropdown-content>a {
text-align: left;
padding: 0.8rem 0rem 0.8rem 3rem;
text-transform: none;
line-height: 1.5rem;
height: 1.5rem;
text-decoration: none;
color: #393939;
cursor: pointer;
}
.mob-nav .nav-item>.dropdown-content>a:hover, .mob-nav .nav-item .dropdown-content>a:focus, .mob-nav .nav-item .dropdown-content>a.active {
color: #ff7519;
background-color: #f5f5f5;
}
#drop1:checked ~ .dropdown-content, #drop2:checked ~ .dropdown-content, #drop3:checked ~ .dropdown-content, #drop4:checked ~ .dropdown-content {
background-color: #fcfcfc;
}
.mob-language-change, .mob-language-change label {
cursor: pointer;
}
.mob-language-change img.icon-language{
width: 1.5rem;
}
#moblangdrop:checked ~ .dropdown-content {
display: block;
position: inherit;
opacity: 1;
visibility: visible;
box-shadow: none;
top: 2.92rem;
left: 0;
right: 0;
text-align: center;
width: inherit;
margin-top: 0.6rem;
background-color: #fff;
}
label[for="moblangdrop"] {
display: block;
margin-right: 0.5rem;
padding: 0.5rem;
}
label[for="moblangdrop"], label[for="moblangdrop"]:checked, #moblangdrop, #moblangdrop:checked {
-webkit-tap-highlight-color: rgba(0,0,0,0);
-webkit-tap-highlight-color: transparent;
}
#moblangdrop:checked ~ label {
background-color: transparent;
}
#moblangdrop ~ label .arrow-down {
display: inline-block;
margin-left: 0.2rem;
margin-bottom: 0.6rem;
border-top: 3px solid #393939;
}
#moblangdrop:checked ~ label .arrow-down {
border-bottom: 3px solid #393939;
border-top: 0;
}
.burger-check:checked + label {
position: fixed;
}
.nav-item > label {
display: flex;
}
.white-nav .mob-language-change {
position: fixed;
right: 0;
align-self: center;
font-family: 'Open Sans', sans-serif;
}
.white-nav .mob-language-change label {
color: #393939;
}
p.mob-lang-change {
padding: 0.8rem;
color: #d7d7d7;
border-bottom: 1px solid #d7d7d7;
border-top: 1px solid #d7d7d7;
cursor: default;
}
a.mob-lang-change {
padding: 0.8rem;
color: #393939;
border-bottom: 1px solid #e8ebef;
line-height: 1.7;
}
a.mob-lang-change:hover, a.mob-lang-change.active, a.mob-lang-change:focus {
color: #ff7519;
text-decoration: none;
}
}
@media only screen and (max-width: 48rem) {
.white-nav {
margin-bottom: 0;
}
.burger-check:checked ~ .nav-items{
display: block;
height: 100vh;
}
}
@media only screen and (max-width: 30rem) {
img.monero-logo {
width: 9rem;
padding-top: 0.527rem;
}
.slide-in-nav {
width: 100vw;
left: -110%;
}
}
/***************************HOME PAGE*****************************/
.info-block-main {
padding: 0;
}
.main-video {
order: 0;
}
.monero-video {
padding: 4rem 2.5rem;
}
.monero-video video {
max-width: 100%;
width: 100%;
margin-left: auto;
margin-right: auto;
display: block;
}
.main-info {
padding: 4rem 2.5rem 4rem 0;
}
.main-info p {
padding-top: 1.3rem;
}
.main-info p#main-text {
display: block;
}
.main-info p a.btn-auto, a.btn-primary {
background-color: #ff7519;
color: #ffffff;
border: none;
display: inline-block;
}
.about-main .info-block .col-lg-6.why-text, .about-monero .info-block .col-lg-7.why-text {
padding: 0 2rem;
}
.about-main .info-block-row, .about-monero .info-block-row {
margin-top: 2rem;
}
.about-main .info-block-row.private, .about-monero .info-block-row.private {
margin-top: 1.5rem;
}
.about-main img.main-icon.wide {
width: 100%;
}
.info-block-row img.main-icon {
width: 50%;
margin: 0 auto;
}
.about-monero .info-block-row img.main-icon {
width: 60%;
margin: 0 auto;
}
.about-main .info-block-row .col-lg-8 {
padding-right: 3rem;
}
p.main-resources {
height: 12rem;
}
p.main-downloads {
padding-left: 1.9rem;
}
@media only screen and (max-width: 75rem) {
.info-block-main {
padding: 0;
}
.main-info {
padding: 4rem 2rem 4rem 0;
}
.monero-video {
padding: 4rem 2rem;
}
.main-info p {
padding-top: 0.5rem;
}
.about-main .info-block-row, .about-monero .info-block-row {
margin-top: 1.5rem;
}
p.main-resources {
height: 12rem;
}
p.main-downloads {
padding-left: 0.5rem;
}
}
@media only screen and (max-width: 62rem) {
.main-video {
order: 1;
margin-left: auto;
margin-right: auto;
display: block;
}
.main-info, .main-info h2#main-h2 {
text-align: center;
padding: 0;
}
.monero-video {
padding: 2.6rem 0 0 0;
}
.info-block-main {
padding: 2.5rem 1.8rem;
}
.main-info p {
padding-top: 1rem;
}
.about-main .info-block-row, .about-monero .info-block-row {
margin-top: 3rem;
}
.about-main .info-block-row.private, .about-monero .info-block-row.private {
margin-top: 1rem;
}
.info-block-row img.main-icon {
width: 80%;
margin: 0 auto;
}
.about-main .info-block-row .col-lg-8 {
padding-right: 1rem;
padding-left: 1rem;
}
p.main-resources {
height: auto;
text-align: left;
}
p.main-downloads {
padding-left: 0;
}
}
@media only screen and (max-width: 48rem) {
.monero-video {
padding-top: 2rem;
}
.about-main .info-block-row, .about-monero .info-block-row {
margin-top: 1.5rem;
}
.about-main .info-block-row .col-lg-8 {
padding-right: 0;
padding-left: 0;
}
.about-main .info-block .col-lg-6.why-text, .about-monero .info-block .col-lg-7.why-text {
padding: 0;
}
}
@media only screen and (max-width: 47.9rem) {
.info-block-row img.main-icon {
width: 40%;
}
}
@media only screen and (max-width: 30rem) {
.main-info p#main-text {
display: none;
}
.monero-video {
padding-top: 1.5rem;;
}
.info-block-row img.main-icon {
width: 40%;
}
}
/****************************FOOTER***************************/
body {
height: 100%;
}
.page-wrapper {
position: relative;
/*min-height: 100vh;*/
}
/*.site-wrap {
padding-bottom: 435px;
padding-bottom: 27.1875rem;
}*/
footer {
/*position: absolute;*/
bottom: 0;
width: 100%;
background-color: #4c4c4c;
color: #efefef;
z-index: 1;
}
footer a.white {
color: #efefef;
text-decoration: none;
-webkit-transition: all ease-out .2s;
-moz-transition: all ease-out .2s;
-o-transition: all ease-out .2s;
transition: all ease-out .2s;
font-size: 0.9375rem;
}
footer a.white:hover, a.white:focus {
color: #ff7519;
text-decoration: underline;
}
.footer-wrapper {
padding: 4rem 1rem;
padding-bottom: 0.5rem;
}
.footer-wrapper ul {
line-height: 1.7;
}
.footer-links {
margin-bottom: 3rem;
}
.footer-link {
padding: 0 1rem;
}
@media only screen and (max-width: 75rem) {
}
@media only screen and (max-width: 62rem) {
.page-wrapper {
position: relative;
min-height: 100vh;
}
.site-wrap {
padding-bottom: 470px;
padding-bottom: 29.375rem;
}
footer {
position: absolute;
bottom: 0;
width: 100%;
height: 470px;
height: 29.375rem;
background-color: #4c4c4c;
color: #efefef;
z-index: 1;
}
}
@media only screen and (max-width: 48rem) {
.page-wrapper {
position: initial;
min-height: 100vh;
}
.site-wrap {
padding-bottom: 0;
}
footer {
position: initial;
width: 100%;
height: auto;
background-color: #4c4c4c;
color: #efefef;
z-index: 1;
}
.footer-wrapper {
padding: 2.5rem;
}
.footer-wrapper div.col-xs-6 {
margin-bottom: 1.5rem;
padding-right: 1rem;
}
}
@media only screen and (max-width: 30rem) {
.footer-wrapper {
padding: 2rem 2rem 0 2rem;
}
.footer-wrapper div.col-xs-6 {
-ms-flex-preferred-size: 100%;
max-width: 100%;
flex-basis: 100%;
padding-right: 0;
}
}
/******************MONEROPEDIA******************/
.moneropedia {
margin-bottom: 2rem;
}
.moneropedia:last-child {
margin-bottom: 3rem;
}
.moneropedia a {
line-height: 1.7;
}
/*******************************GUIDE STYLING****************************/
.guides a{
display: block;
}
/******************************DOWNLOADS STYLING***********************/
.download-nav.info-block {
display: -ms-flexbox;
display: -webkit-box;
display: flex;
}
.downloads .full>.info-block.download-nav {
padding: 0;
}
.downloads .download-nav a {
display: -ms-flexbox;
display: -webkit-box;
display: flex;
padding: 1rem 1.5rem;
font-weight: bold;
-webkit-transition: all ease-out .2s;
-moz-transition: all ease-out .2s;
-o-transition: all ease-out .2s;
transition: all ease-out .2s;
}
.download-nav a:hover {
background-color: #ff7519;
color: #fff;
text-decoration: none;
}
.downloads a img {
padding-top: 1rem;
}
.downloads .full>.info-block {
padding: 4rem 5rem;
}
#pick-platform {
display: none;
}
.downloads p.hash {
word-break: break-all;
}
.download-platforms .col-md-6 {
padding: 0 1rem;
}
.download-platforms h2 span {
height: 2rem;
width: 2rem;
display: inline-block;
margin-right: 0.5rem;
vertical-align: middle;
}
.download-platforms h2 span.icon-windows {
background-image: url(../img/monero-spritesheet.png);
background-position: -96px 0;
}
.download-platforms h2 span.icon-apple {
background-image: url(../img/monero-spritesheet.png);
background-position: -96px -96px;
}
.download-platforms h2 span.icon-linux{
background-image: url(../img/monero-spritesheet.png);
background-position: -96px -48px;
}
.download-platforms h2 span.icon-arm {
background-image: url(../img/monero-spritesheet.png);
background-position: 0 -176px;
}
.download-platforms h2 span.icon-freebsd {
background-image: url(../img/monero-spritesheet.png);
background-position: 0 -208px;
}
.download-platforms h2 span.icon-dragonflybsd {
background-image: url(../img/monero-spritesheet.png);
background-position: 0 -287px;
}
.mob-nav .nav-item label,
.mob-nav .nav-item > a {
text-decoration: none;
color: #393939;
cursor: pointer;
height: 1.9rem;
line-height: 2.1rem;
}
.download-platforms h2 span.icon-github {
background-image: url(../img/monero-spritesheet.png);
background-position: 0 -240px;
}
.mob-nav .nav-item > a:hover,
.mob-nav .nav-item > a:focus,
.mob-nav .nav-item > a:active {
color: #a1aabb;
}
.downloads a.arrow-up {
border: 1px solid #ff7519;
border-radius: 50%;
height: 3rem;
width: 3rem;
position: fixed;
bottom: 2rem;
right: 2rem;
background-color: #ffffff;
z-index: 5;
}
.burger-check:checked + label {
position: fixed;
}
.downloads a.arrow-up:hover, .downloads a.arrow-up:focus {
border: none;
background-color: #ff7519;
}
.nav-item > label {
display: flex;
}
.downloads a.arrow-up i {
border: solid #ff7519;
border-width: 0 3px 3px 0;
padding: 0.5rem;
position: absolute;
top: 1.02rem;
left: 0.88rem;
transform: rotate(-135deg);
-webkit-transform: rotate(-135deg);
-webkit-transition: all ease-out .2s;
-moz-transition: all ease-out .2s;
-o-transition: all ease-out .2s;
transition: all ease-out .2s;
}
.downloads a.arrow-up:hover i, .downloads a.arrow-up:focus i {
border-color: #ffffff;
}
@media only screen and (max-width: 48rem) {
.white-nav {
margin-bottom: 0;
}
@media only screen and (max-width: 75rem) {
.burger-check:checked ~ .nav-items {
display: block;
height: 100vh;
}
.downloads .download-nav a {
font-size: 0.92rem;
}
.downloads .full>.info-block {
padding: 3rem 2rem;
}
@media only screen and (max-width: 30rem) {
}
img.monero-logo {
width: 9rem;
padding-top: 0.527rem;
}
@media only screen and (max-width: 62rem) {
#mobile-burger:checked ~ .slide-in-nav {
width: 100vw;
left: 0;
}
.downloads .download-nav a {
padding: 1rem 0.6rem;
}
.downloads .downdropdown {
display: none;
}
/****************************FOOTER***************************/
.download-platforms .col-md-6 {
padding: 0;
}
#pick-platform {
display: block;
}
.info-block#pick-platform {
padding: 0;
body {
height: 100%;
}
.mob.dropdowndrop input {
display: none;
.page-wrapper {
position: relative;
/*min-height: 100vh;*/
}
.mob.dropdowndrop input:checked ~ ul#menu {
display: block;
transition:max-height 0.5s ease-in;
footer {
width: 100%;
background-color: #4c4c4c;
color: #efefef;
z-index: 1;
}
.mob.dropdowndrop label{
position: relative;
/*display: block;*/
padding: 0 1rem 0 1rem;
font-size: 1.125rem;
font-weight: 500;
line-height: 3rem;
cursor: pointer;
color: #4c4c4c;
footer a.white {
color: #efefef;
text-decoration: none;
-webkit-transition: all ease-out .2s;
-moz-transition: all ease-out .2s;
-o-transition: all ease-out .2s;
transition: all ease-out .2s;
font-size: 0.9375rem;
}
.mob.dropdowndrop label:after{
content: "";
position: absolute;
display: block;
top: 50%;
right: 0;
width: 0;
height: 0;
border-top: 4px solid #4c4c4c;
border-bottom: 0 solid #4c4c4c;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
transition: border-bottom .1s, border-top .1s .1s;
}
.mob.dropdowndrop input:checked ~ label {
footer a.white:hover,
a.white:focus {
color: #ff7519;
text-decoration: underline;
}
.mob.dropdowndrop input:hover ~ .mob.dropdowndrop label:after {
border-top: 4px solid #ff7519 !important;
border-bottom: 0 solid #ff7519 !important;
transition: border-top .1s, border-bottom .1s .1s;
}
.mob.dropdowndrop input:checked ~ label:after{
border-top: 0 solid #ff7519;
border-bottom: 4px solid #ff7519;
transition: border-top .1s, border-bottom .1s .1s;
.footer-wrapper {
padding: 4rem 1rem;
padding-bottom: 0.5rem;
}
.mob.dropdowndrop ul#menu {
display:none;
padding:0;
overflow:hidden;
list-style-type:none;
-moz-box-shadow: 0 2px 4px rgba(50,50,93,.1);
-webkit-box-shadow: 0 2px 4px rgba(50,50,93,.1);
box-shadow: 0 2px 4px rgba(50,50,93,.1);
transition:max-height 0.5s ease-out;
min-width:100%;
text-align: left;
background: #ffffff;
width: 100%;
margin: 0;
.footer-wrapper ul {
line-height: 1.7;
}
.mob.dropdowndrop ul#menu li a {
display: block;
color: #4c4c4c;
text-decoration: none;
font-family: 'Hind', sans-serif;
font-weight: 500;
font-size: 1.125rem;
padding: 0.8rem 1rem;
-webkit-transition: all ease-out .2s;
-moz-transition: all ease-out .2s;
-o-transition: all ease-out .2s;
transition: all ease-out .2s;
text-align: center;
.footer-links {
margin-bottom: 3rem;
}
.mob.dropdowndrop ul#menu li a:hover {
color: #ff7519;
background-color: #fcfcfc;
.footer-link {
padding: 0 1rem;
}
.downloads .full>.info-block {
padding: 2.5rem 1.8rem;
}
}
@media only screen and (max-width: 62rem) {
.page-wrapper {
position: relative;
min-height: 100vh;
}
/***************************MERCHANTS STYLING***********************************/
footer {
width: 100%;
background-color: #4c4c4c;
color: #efefef;
z-index: 1;
}
.merchants a {
color: #4c4c4c;
margin-top: 0.4rem;
margin-bottom: 0.4rem;
display: inline-block;
padding-right: 1rem;
}
.merchants a:hover, .merchants a.active, .merchants a:focus {
color: #ff7519;
}
@media only screen and (max-width: 48rem) {
.page-wrapper {
position: initial;
min-height: 100vh;
}
/***************************ROADMAP STYLING*********************************/
footer {
position: initial;
width: 100%;
height: auto;
background-color: #4c4c4c;
color: #efefef;
z-index: 1;
}
.roadmap .completed {
background: #4c4c4c;
border: 1px solid #4c4c4c;
border-radius: 50px;
}
.footer-wrapper {
padding: 2.5rem;
}
.roadmap .ongoing {
background: #ff7519;
border: 1px solid #ff7519;
border-radius: 50%;
}
.footer-wrapper div.col-xs-6 {
margin-bottom: 1.5rem;
padding-right: 1rem;
}
.roadmap .upcoming {
background: #fff;
border: 1px solid black;
border-radius: 50%;
}
.roadmap .tabPanel-content span, .roadmap .ms-completed, .roadmap .ms-upcoming {
width: 1.5rem;
height: 1.5rem;
text-align: center;
border-radius: 1rem;
display: block;
color: white;
margin-right: 1rem;
position: relative;
z-index: 5;
}
@media only screen and (max-width: 30rem) {
.roadmap span:first-child {
margin-top: 0;
}
.footer-wrapper {
padding: 2rem 2rem 0 2rem;
}
.roadmap .tabPanel-content .row {
margin-bottom: 1.5rem;
}
.footer-wrapper div.col-xs-6 {
-ms-flex-preferred-size: 100%;
max-width: 100%;
flex-basis: 100%;
padding-right: 0;
}
.pre-roadmap li {
width: 1.5rem;
height: 1.5rem;
text-align: center;
border-radius: 1rem;
margin: 0 1rem;
display: inline-block;
color: white;
position: relative;
}
.tabPanel-widget {
position: relative;
}
/*********************FORUM FUNDING SYSTEM*************************/
.tabPanel-widget > label {
position: absolute;
z-index: 1;
}
/* FFS GENERAL */
.tabPanel-widget > label:focus {
outline: 0;
.ffs {
padding-bottom: 3rem;
}
.tabPanel-widget > label,
.tabPanel-widget > h2 {
font-size: 1.1rem;
width: calc(100% / 6);
height: 2rem;
line-height: 2rem;
padding: 1rem 0;
.ffs .info-block {
padding: 2.5rem;
border-radius: 2px;
}
.tabPanel-widget > h2 {
position: relative;
margin: 0;
text-align: center;
background: #ffffff;
color: #ff7519;
-moz-box-shadow: 0 1px 0px rgba(50,50,93,.1);
-webkit-box-shadow: 0 1px 0px rgba(50,50,93,.1);
box-shadow: 0 1px 0px rgba(50,50,93,.1);
.ffs a,
.ffs-proposal a,
.ffs-main a {
color: #000;
border-bottom: 2px dotted #a1aabb;
}
.tabPanel-header5 > label,
.tabPanel-header5 > h2 {
width: 20% !important;
.ffs a:hover,
.ffs-proposal a:hover,
.ffs a:focus,
.ffs-proposal a:focus,
.ffs a:active,
.ffs-proposal a:active,
.ffs-main a:hover,
.ffs-main a:focus,
.ffs-main a:active {
border-bottom: 2px solid #a1aabb;
text-decoration: none;
}
.tabPanel-widget input,
.tabPanel-widget > label ~ label,
.tabPanel-widget > h2 ~ h2 {
position: absolute;
top: 0;
.ffs h3 {
padding-top: 0;
letter-spacing: 0;
font-family: 'Hind', sans-serif;
font-weight: 600;
font-size: 1.4rem;
text-decoration: underline;
text-decoration-color: #9099a8;
text-decoration-color: #a1aabb;
text-decoration-style: dotted;
margin-bottom: 0.5rem;
}
.tabPanel-widget label:nth-child(1),
.tabPanel-widget h2:nth-child(3) {
left: 0;
.ffs h3 a {
color: #4c4c4c;
text-decoration: underline;
}
.tabPanel-widget label:nth-child(5),
.tabPanel-widget h2:nth-child(7) {
left: calc(1 * (100% / 6));
}
/* FFS MAIN */
.tabPanel-widget label:nth-child(9),
.tabPanel-widget h2:nth-child(11) {
left: calc(2 * (100% / 6));
.ffs-main h1 {
font-size: 2rem;
text-align: center;
padding: 0;
}
.tabPanel-widget label:nth-child(13),
.tabPanel-widget h2:nth-child(15) {
left: calc(3 * (100% / 6));
.ffs-main .half:nth-child(even) {
padding-left: 0.5rem;
padding-right: 0;
}
.tabPanel-widget label:nth-child(17),
.tabPanel-widget h2:nth-child(19) {
left: calc(4 * (100% / 6));
.ffs-main .half:nth-child(odd) {
padding-right: 0.5rem;
padding-left: 0;
}
.tabPanel-widget label:nth-child(21),
.tabPanel-widget h2:nth-child(23) {
left: calc(5 * (100% / 6));
.ffs-main a.ffs-cat {
background-color: #ffffff;
padding: 2.5rem;
border: 3px dotted #dbdfe1;
border: none;
border-radius: 6px;
-moz-box-shadow: 0 0 20px rgba(50, 50, 93, .4);
-webkit-box-shadow: 0 0 20px rgba(50, 50, 93, .4);
box-shadow: 0 0 20px rgba(50, 50, 93, .4);
margin-bottom: 1rem;
flex: 1;
-webkit-flex: 1;
-ms-flex: 1;
word-wrap: break-word;
text-decoration: none;
color: #4c4c4c;
-webkit-transition: background .15s ease, box-shadow .15s ease;
-moz-transition: background .15s ease, box-shadow .15s ease;
-o-transition: background .15s ease, box-shadow .15s ease;
transition: background .15s ease, box-shadow .15s ease;
-ms-flex-align: center;
-webkit-box-align: center;
align-items: center;
}
.tabPanel-widget label:nth-child(1),
.tabPanel-widget h2:nth-child(3) {
left: 0;
.ffs-main a.ffs-cat:hover,
.ffs-main a.ffs-cat:active,
.ffs-main a.ffs-cat:focus {
-moz-box-shadow: 0 0 40px rgba(50, 50, 93, .4);
-webkit-box-shadow: 0 0 40px rgba(50, 50, 93, .4);
box-shadow: 0 0 40px rgba(50, 50, 93, .4);
}
.tabPanel-header5 label:nth-child(5),
.tabPanel-header5 h2:nth-child(7) {
left: 20%;
.ffs-main .half:nth-of-type(1) a {
border-top: 6px solid #e8c24f;
}
.tabPanel-header5 label:nth-child(9),
.tabPanel-header5 h2:nth-child(11) {
left: 40%;
.ffs-main .half:nth-of-type(2) a {
border-top: 6px solid #f28080;
}
.tabPanel-header5 label:nth-child(13),
.tabPanel-header5 h2:nth-child(15) {
left: 60%;
.ffs-main .half:nth-of-type(3) a {
border-top: 6px solid #498fd5;
}
.tabPanel-header5 label:nth-child(17),
.tabPanel-header5 h2:nth-child(19) {
left: 80%;
.ffs-main .half:nth-of-type(4) a {
border-top: 6px solid #70af71;
}
.tabPanel-widget input + h2 + div.tabPanel-content {
position: absolute;
clip: rect(1px, 1px, 1px, 1px);
border:0;
height: 1px;
width: 1px;
overflow: hidden;
padding: 4rem 4.5rem;
.ffs-main .col-sm-8 {
padding-left: 1rem;
}
.roadmap .tabPanel-widget > div.tabPanel-content, .ffs .tabPanel-widget > div.tabPanel-content {
background-color: #ffffff;
-moz-box-shadow: 0 2px 4px rgba(50,50,93,.1);
-webkit-box-shadow: 0 2px 4px rgba(50,50,93,.1);
box-shadow: 0 2px 4px rgba(50,50,93,.1);
margin: 1rem 0;
.ffs-main h2 {
text-align: left;
}
.tabPanel-widget input:checked + h2 + div.tabPanel-content {
position: static;
height: auto;
width: auto;
.ffs-main h2 a {
color: #4c4c4c;
}
.tabPanel-widget label:hover{
cursor: pointer;
.ffs-main a.ffs-cat p {
padding-top: 0;
}
.tabPanel-widget input[name="tabs"] {
opacity: 0;
position: absolute;
}
@media only screen and (max-width: 62rem) {
.tabPanel-widget input[name="tabs"]:checked + h2 {
background: #ff7519;
color: #ffffff;
}
.ffs-main h1 {
margin: 1.5rem 0 1.3rem 0;
}
.tabPanel-widget input[name="tabs"] +h2:after {
.ffs-main .container {
margin-left: 1rem;
margin-right: 1rem;
}
}
.ffs-main a.ffs-cat {
padding: 1.5rem;
}
.tabPanel-widget input[name="tabs"]:checked + h2:after {
content: '';
margin: auto;
position: absolute;
bottom: -9px;
left: 0;
right: 0;
width: 0;
height: 0;
border-left: 10px solid transparent;
border-right: 10px solid transparent;
border-top: 10px solid #ff7519;
}
.ffs-main a.ffs-cat h2 {
font-size: 1.3rem;
}
.roadmap .tabPanel-widget > div.tabPanel-content p {
padding: 0;
}
.ffs-main a.ffs-cat p {
font-size: 0.9rem;
}
@media only screen and (max-width: 75rem) {
.container.description p {
margin-bottom: 2rem;
}
.tabPanel-widget input + h2 + div.tabPanel-content {
padding: 4rem;
}
}
@media only screen and (max-width: 48rem) {
@media only screen and (max-width: 62rem) {
.ffs-main h1 {
margin-top: 1rem;
font-size: 1.8rem;
}
.tabPanel-widget input + h2 + div.tabPanel-content {
padding: 2.5rem;
}
.ffs-main .half:nth-child(even) {
padding-left: 0;
}
}
.ffs-main .half:nth-child(odd) {
padding-right: 0;
}
@media only screen and (max-width: 48rem) {
.roadmap .mobile-roadmap {
height: 2rem;
}
@media only screen and (max-width: 41rem) {
.tabPanel-widget {
margin-left: 0.5rem;
margin-right: 0.5rem;
}
.ffs-main h1 {
font-size: 1.6rem;
margin-bottom: 1rem;
}
.tabPanel-widget label,
.tabPanel-widget input[name="tabs"] {
display: none;
}
.container.description p {
padding: 0 1.5rem;
font-size: 0.9rem;
margin-bottom: 2rem;
text-align: left;
}
.tabPanel-widget > div.tabPanel-content {
margin-top: 0;
}
.tabPanel-widget > input + h2 + div.tabPanel-content {
display: block;
position: static;
height: auto;
width: auto;
padding: 2rem;
}
@media only screen and (max-width: 30rem) {
.roadmap .tabPanel-widget > div.tabPanel-content {
margin: 0.5rem 0;
}
h1 {
padding: 0 2.5rem;
font-size: 1.5rem;
line-height: 1.3;
}
.tabPanel-widget > div.tabPanel-content p {
padding-left: 1rem;
}
.container.description p {
padding: 0;
text-align: left;
font-size: 0.9rem;
margin-bottom: 2rem;
}
.tabPanel-widget h2 {
width: 100%;
position: static !important;
padding: 1.5rem 0;
font-size: 1.5625rem;
}
.ffs-main .ffs-cat .col-xs-4 {
display: none;
}
.tabPanel-widget input[name="tabs"]:checked + h2:after {
display: none;
}
.ffs-main .ffs-cat .col-xs-8 {
-ms-flex-preferred-size: 100%;
flex-basis: 100%;
max-width: 100%;
padding-left: 0;
}
.tabPanel-widget input[name="tabs"]:checked + h2, .tabPanel-widget > h2 {
background: #ffffff;
color: #4c4c4c;
}
.ffs-main a.ffs-cat {
border: none;
border-radius: 6px;
}
.roadmap .tabPanel-content .row:last-of-type {
margin-bottom: 0;
}
.ffs-main .half:nth-of-type(1) a.ffs-cat {
border-top: 6px solid #e8c24f;
}
.pre-roadmap p {
padding-top: 0;
}
.ffs-main .half:nth-of-type(2) a.ffs-cat {
border-top: 6px solid #f28080;
}
.roadmap .tabPanel-content span, .pre-roadmap li, .roadmap .ms-completed, .roadmap .ms-upcoming {
width: 1rem;
height: 1rem;
}
.ffs-main .half:nth-of-type(3) a.ffs-cat {
border-top: 6px solid #3a72aa;
}
.ffs-main .half:nth-of-type(4) a.ffs-cat {
border-top: 6px solid #70af71;
}
}
@media only screen and (max-width: 30rem) {
/* FFS IDEAS LIST */
.tabPanel-widget > div.tabPanel-content p {
padding-left: 1.5rem;
.ideas h1 {
display: none;
}
.tabPanel-widget h2 {
font-size: 1.4rem;
.ffs-breadcrumbs p.submit-idea {
float: right;
}
.roadmap .tabPanel-widget > input + h2 + div.tabPanel-content {
padding: 2rem 1.5rem;
.ffs-breadcrumbs p.submit-idea a {
background-color: #d26e2b;
color: #fff;
padding: 0.5rem 0.5rem;
text-transform: uppercase;
font-family: 'Open Sans', sans-serif;
font-weight: 700;
font-size: 0.8rem;
-moz-box-shadow: 0 1px 5px 0 rgba(0, 0, 0, .07), 0 7px 17px 0 rgba(0, 0, 0, .1);
-webkit-box-shadow: 0 1px 5px 0 rgba(0, 0, 0, .07), 0 7px 17px 0 rgba(0, 0, 0, .1);
box-shadow: 0 1px 5px 0 rgba(0, 0, 0, .07), 0 7px 17px 0 rgba(0, 0, 0, .1);
-webkit-transition: background .15s ease, box-shadow .15s ease;
-moz-transition: background .15s ease, box-shadow .15s ease;
-o-transition: background .15s ease, box-shadow .15s ease;
transition: background .15s ease, box-shadow .15s ease;
}
.tabPanel-widget h2 {
padding-top: 2rem;
.ffs-breadcrumbs p.submit-idea a:hover,
.ffs-breadcrumbs p.submit-idea a:focus,
.ffs-breadcrumbs p.submit-idea a:active {
background-color: #ce5e14;
}
.roadmap .tabPanel-widget div.tabPanel-content .col-xs-1 {
-ms-flex-preferred-size: 16.667%;
flex-basis: 16.667%;
max-width: 16.667%;
.ffs-breadcrumbs p.submit-idea a:after,
.ffs-breadcrumbs p.submit-idea a:before {
display: none;
}
.roadmap .tabPanel-widget div.tabPanel-content .col-xs-11 {
-ms-flex-preferred-size: 83.333%;
flex-basis: 83.333%;
max-width: 83.333%;
.ffs .ideas a.ffs-idea {
border-top: 6px solid #e8c24f;
}
.pre-roadmap p {
font-size: 0.9rem;
.ffs a.ffs-idea {
background-color: #ffffff;
padding: 2.5rem;
border-radius: 6px;
-moz-box-shadow: 0 0 20px rgba(50, 50, 93, .4);
-webkit-box-shadow: 0 0 20px rgba(50, 50, 93, .4);
box-shadow: 0 0 20px rgba(50, 50, 93, .4);
margin-bottom: 1rem;
flex: 1;
-webkit-flex: 1;
-ms-flex: 1;
word-wrap: break-word;
text-decoration: none;
color: #4c4c4c;
-webkit-transition: background .15s ease, box-shadow .15s ease;
-moz-transition: background .15s ease, box-shadow .15s ease;
-o-transition: background .15s ease, box-shadow .15s ease;
transition: background .15s ease, box-shadow .15s ease;
border-bottom: none;
}
.ffs a.ffs-idea:hover,
.ffs a.ffs-idea:focus,
.ffs a.ffs-idea:active {
-moz-box-shadow: 0 0 40px rgba(50, 50, 93, .4);
-webkit-box-shadow: 0 0 40px rgba(50, 50, 93, .4);
box-shadow: 0 0 40px rgba(50, 50, 93, .4);
border-bottom: none;
}
.ffs p.author-list span img,
.ffs p.date-list span img,
.ffs-proposal p.author-list span img,
.ffs-proposal p.date-list span img,
.ffs-proposal p.progress-number-goal span img {
height: 0.8rem;
width: 0.8rem;
margin-right: 0.3rem;
vertical-align: baseline;
}
.ffs p.author-list,
.ffs p.date-list,
.ffs-proposal p.author-list,
.ffs-proposal p.date-list {
padding-top: 0;
font-size: 1.1rem;
color: #9ca1ac;
line-height: 0;
display: inline;
vertical-align: middle;
}
p.author-list,
p.date-list,
p.progress-number-goal,
p.bar-work-status {
box-sizing: border-box;
-ms-flex: 0 0 auto;
-webkit-box-flex: 0;
flex: 0 0 auto;
}
/***********************************TEAM PAGE***********************************/
.team .tabPanel-widget input + h2 + div.tabPanel-content {
padding: 1rem 0 0 0;
.ideas p.author-list,
.ideas p.date-list,
.complete-proposal p.author-list,
.complete-proposal p.date-list {
-ms-flex-preferred-size: 30%;
flex-basis: 30%;
max-width: 30%;
}
.team .tabPanel-widget div.tabPanel-content .half:nth-child(even) {
padding-left: 0.5rem;
padding-right: 0;
.ffs p.list-button {
padding-top: 1.5rem;
}
.team .tabPanel-widget div.tabPanel-content .half:nth-child(odd) {
padding-right: 0.5rem;
padding-left: 0;
.ffs .ideas p.list-button,
.ffs .fund-required p.list-button,
.ffs .in-progress p.list-button,
.ffs .complete-proposal p.list-button {
padding-top: 0;
text-align: right;
}
.team .icons {
margin-top: 1rem;
.ideas h1,
.fund-required h1,
.in-progress h1,
.complete-proposal h1 {
display: none;
}
@media only screen and (max-width: 48rem) {
@media only screen and (max-width: 62rem) {
.ideas h1,
.fund-required h1,
.in-progress h1,
.complete-proposal h1 {
display: initial;
display: block;
text-align: left;
margin: 1.5rem 1rem 1.3rem 3.5rem;
font-size: 2rem;
padding: 0;
}
.team .tabPanel-widget input + h2 + div.tabPanel-content {
padding: 0.5rem 0 0 0;
}
.ffs a.ffs-idea {
margin-left: 1rem;
margin-right: 1rem;
}
.team .tabPanel-widget div.tabPanel-content .full {
padding: 0;
}
.ideas p.author-list,
.ideas p.date-list,
.complete-proposal p.author-list,
.complete-proposal p.date-list {
-ms-flex-preferred-size: 40%;
flex-basis: 40%;
max-width: 40%;
font-size: 1rem;
}
.team .tabPanel-widget div.tabPanel-content .half:nth-child(even) {
padding-left: 0.25rem;
padding-right: 0;
}
.team .tabPanel-widget div.tabPanel-content .half:nth-child(odd) {
padding-right: 0.25rem;
padding-left: 0;
}
@media only screen and (max-width: 48rem) {
.team .tabPanel-widget div.tabPanel-content .full {
padding-left: 0;
padding-right: 0;
}
.ideas h1,
.fund-required h1,
.in-progress h1,
.complete-proposal h1 {
font-size: 1.8rem;
margin-top: 1rem;
}
.team .tabPanel-widget > div.tabPanel-content p {
padding-left: 0;
}
.ffs .ffs-idea {
margin-left: 1rem;
margin-right: 1rem;
}
.ideas p.author-list,
.ideas p.date-list,
.complete-proposal p.author-list,
.complete-proposal p.date-list {
-ms-flex-preferred-size: 50%;
flex-basis: 50%;
max-width: 50%;
font-size: 0.9rem;
padding-top: 0.3rem;
}
}
@media only screen and (max-width: 41rem) {
.team .tabPanel-widget > div.tabPanel-content .half.col-xs-6 {
-ms-flex-preferred-size: 100%;
flex-basis: 100%;
max-width: 100%;
}
.ideas h1,
.fund-required h1,
.in-progress h1,
.complete-proposal h1 {
margin-left: 2.5rem;
margin-bottom: 0.5rem;
font-size: 1.6rem;
}
.team .tabPanel-widget div.tabPanel-content .half:nth-child(even), .team .tabPanel-widget div.tabPanel-content .half:nth-child(odd) {
padding-left: 0;
padding-right: 0;
}
@media only screen and (max-width: 30rem) {
.ideas h1,
.fund-required h1,
.in-progress h1,
.complete-proposal h1 {
margin-top: 0.5rem;
}
}
@media only screen and (max-width: 28rem) {
/***********************************POST STYLING********************************/
.ideas p.author-list,
.ideas p.date-list,
.complete-proposal p.author-list,
.complete-proposal p.date-list {
-ms-flex-preferred-size: 100%;
flex-basis: 100%;
max-width: 100%;
padding-top: 0.7rem;
}
.post .info-block {
word-break: break-word;
}
.post .info-block p, .post .info-block h2 {
text-align: left;
}
/* FFS FUNDING REQUIRED LIST */
.post h3, .post h3:first-of-type {
margin-top: 1rem;
/*margin-bottom: 0.5rem;*/
margin-bottom: 0;
.ffs .fund-required a.ffs-idea {
border-top: 6px solid #f28080;
}
.page-numbers {
margin-top: 2.7rem;
.ffs .fund-required p.list-button a {
display: block;
margin-left: auto;
}
@media only screen and (max-width: 75rem) {
.page-numbers {
margin-top: 2rem;
}
.ffs .fund-required p.list-button .btn-secondary {
margin-top: 1.5rem;
}
@media only screen and (max-width: 62rem) {
.page-numbers {
margin-top: 1.7rem;
.fund-required p.author-list,
.fund-required p.date-list,
.ffs-fr p.author-list,
.ffs-fr p.date-list,
.ffs-con p.author-list,
.ffs-con p.date-list {
-ms-flex-preferred-size: 25%;
flex-basis: 25%;
max-width: 25%;
}
.fund-required p.bar-fund-status,
.ffs-fr p.bar-fund-status,
.ffs-con p.bar-fund-status,
.ffs-con p.bar-fund-status,
.ffs-con p.bar-fund-status {
-ms-flex-preferred-size: 40%;
flex-basis: 40%;
max-width: 40%;
}
@media only screen and (max-width: 48rem) {
.fund-required p.author {
padding-top: 0.5rem;
}
.fund-required p.bar-fund-status,
.ffs-proposal p.bar-fund-status,
.in-progress p.bar-work-status,
.ffs-proposal p.bar-work-status,
.ffs-con p.bar-fund-status {
padding-top: 0;
font-weight: bold;
font-family: 'Open Sans', sans-serif;
text-align: right;
font-size: 1.1rem;
}
@media only screen and (max-width: 30rem) {
.fund-required .progress-bar {
margin-top: 0.5rem;
margin-bottom: 0.5rem;
}
.fund-required a.btn-link:nth-of-type(2) {
margin-left: 2rem;
}
@media only screen and (max-width: 62rem) {
.fund-required p.author-list,
.fund-required p.date-list,
.ffs-fr p.author-list,
.ffs-fr p.date-list,
.ffs-con p.author-list,
.ffs-con p.date-list {
-ms-flex-preferred-size: 29%;
flex-basis: 29%;
max-width: 29%;
font-size: 1rem;
}
/* Hangouts Styling */
.fund-required p.bar-fund-status,
.ffs-fr p.bar-fund-status,
.ffs-con p.bar-fund-status {
-ms-flex-preferred-size: 40%;
flex-basis: 40%;
max-width: 40%;
font-size: 1rem;
}
.hangouts ul {
list-style: none;
padding: 0;
}
.hangouts ul li {
@media only screen and (max-width: 48rem) {
}
.fund-required p.author-list,
.ffs-fr p.author-list,
.ffs-con p.author-list,
.ffs-con p.date-list {
-ms-flex-preferred-size: 40%;
flex-basis: 40%;
max-width: 40%;
font-size: 0.9rem;
padding-top: 0;
}
.hangouts .social-icon, .team .social-icon {
-moz-box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12), 0 1px 5px 0 rgba(0,0,0,0.2);
-webkit-box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12), 0 1px 5px 0 rgba(0,0,0,0.2);
box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12), 0 1px 5px 0 rgba(0,0,0,0.2);
height: 2.7rem;
width: 2.7rem;
margin: 0 1rem;
border-radius: 50%;
}
.fund-required p.date-list,
.ffs-fr p.date-list {
-ms-flex-preferred-size: 20%;
flex-basis: 20%;
max-width: 20%;
font-size: 0.9rem;
padding-top: 0;
}
.social-icon.twitter {
background-image: url(../img/monero-spritesheet.png);
background-position: -128px -48px;
}
.fund-required p.bar-fund-status,
.ffs-fr p.bar-fund-status,
.ffs-con p.bar-fund-status {
-ms-flex-preferred-size: 40%;
flex-basis: 40%;
max-width: 40%;
text-align: right;
font-size: 0.9rem;
padding-top: 0;
}
.social-icon.twitter:hover {
background-image: url(../img/monero-spritesheet.png);
background-position: -176px -48px;
}
.social-icon.reddit {
background-image: url(../img/monero-spritesheet.png);
background-position: -128px -96px;
}
@media only screen and (max-width: 41rem) {
.social-icon.reddit:hover {
background-image: url(../img/monero-spritesheet.png);
background-position: -176px -96px;
}
.fund-required .between-xs,
.ffs-fr .between-xs {
-ms-flex-pack: start;
-webkit-box-pack: start;
justify-content: flex-start;
text-align: start;
}
.social-icon.facebook {
background-image: url(../img/monero-spritesheet.png);
background-position: -128px 0;
}
.fund-required p.author-list,
.fund-required p.date-list,
.ffs-fr p.author-list,
.ffs-fr p.date-list,
.ffs-con p.author-list,
.ffs-con p.date-list {
padding-top: 0.3rem;
-ms-flex-preferred-size: 50%;
flex-basis: 50%;
max-width: 50%;
}
.social-icon.facebook:hover {
background-image: url(../img/monero-spritesheet.png);
background-position: -176px 0;
}
.fund-required p.bar-fund-status,
.ffs-fr p.bar-fund-status,
.ffs-con p.bar-fund-status {
-ms-flex-preferred-size: 100%;
flex-basis: 100%;
max-width: 100%;
text-align: left;
margin-top: 1rem;
}
.social-icon.github {
background-image: url(../img/monero-spritesheet.png);
background-position: -127px -144px;
}
.social-icon.github:hover {
background-image: url(../img/monero-spritesheet.png);
background-position: -175px -144px;
}
@media only screen and (max-width: 30rem) {
.hangouts .irc .col-md-4 {
padding: 1rem 0.5rem;
.fund-required p.author-list,
.fund-required p.date-list,
.ffs-fr p.author-list,
.ffs-fr p.date-list,
.ffs-con p.author-list,
.ffs-con p.date-list {
-ms-flex-preferred-size: 100%;
flex-basis: 100%;
max-width: 100%;
padding-top: 0.7rem;
}
}
.hangouts .sequestions a {
margin: 0 0 1rem 0;
line-height: 1.7;
}
/* FFS FUNDING REQUIRED SINGLE */
.hangouts .sequestions a:last-child {
margin-bottom: 1.5rem;
.ffs-proposal .info-block {
padding: 4rem;
}
.hangouts .relays .btn-fixed {
width: 8rem;
margin-left: auto;
margin-right: auto;
.ffs-proposal h2 {
text-align: left;
}
@media only screen and (max-width: 75rem) {
.ffs-proposal p.progress-number-goal {
padding-top: 0;
font-size: 1.1rem;
color: #a1aabb;
line-height: 0;
display: inline;
vertical-align: middle;
}
@media only screen and (max-width: 62rem) {
.hangouts .irc .col-md-4 {
padding: 0;
margin-bottom: 1rem;
.ffs-proposal .btn {
width: 8rem;
height: 3rem;
text-align: center;
line-height: 3rem;
text-decoration: none;
font-family: 'Hind', sans-serif;
font-weight: 700;
text-transform: uppercase;
white-space: nowrap;
padding: 0 1rem;
cursor: pointer;
-moz-box-shadow: 0 1px 5px 0 rgba(0, 0, 0, .07), 0 7px 17px 0 rgba(0, 0, 0, .1);
-webkit-box-shadow: 0 1px 5px 0 rgba(0, 0, 0, .07), 0 7px 17px 0 rgba(0, 0, 0, .1);
box-shadow: 0 1px 5px 0 rgba(0, 0, 0, .07), 0 7px 17px 0 rgba(0, 0, 0, .1);
border: none;
display: block;
-webkit-transition: background .15s ease, box-shadow .15s ease;
-moz-transition: background .15s ease, box-shadow .15s ease;
-o-transition: background .15s ease, box-shadow .15s ease;
transition: background .15s ease, box-shadow .15s ease;
margin: 0 auto;
}
.hangouts .irc .col-md-4:first-child {
margin-top: 1rem;
.ffs-proposal .btn-primary {
background-color: #d26e2b;
color: #ffffff;
}
.irc p {
padding-top: 0px;
.ffs-proposal .btn-primary:hover,
.ffs-proposal .btn-primary:active,
.ffs-proposal .btn-primary:focus {
background-color: #ce5e14;
color: #ffffff;
border: none !important;
-moz-box-shadow: 0 0 30px rgba(50, 50, 93, .2), 0 3px 30px rgba(0, 0, 0, .2);
-webkit-box-shadow: 0 0 30px rgba(50, 50, 93, .2), 0 3px 30px rgba(0, 0, 0, .2);
box-shadow: 0 0 30px rgba(50, 50, 93, .2), 0 3px 30px rgba(0, 0, 0, .2);
}
.tabs {
display: flex;
flex-wrap: wrap;
}
@media only screen and (max-width: 35rem) {
.hangouts .relays {
-webkit-flex-flow: column;
flex-flow: column;
align-items: center;
.input {
position: absolute;
opacity: 0;
}
.hangouts .relays .col-xs-4 {
max-width: 100%;
.label {
width: 33.333%;
padding: 1rem 0;
text-align: center;
background: #c6ccd6;
cursor: pointer;
font-weight: bold;
font-size: 18px;
color: #4c4c4c;
transition: background 0.1s, color 0.1s;
font-family: 'Hind', sans-serif;
-moz-box-shadow: 0 0 4px rgba(50, 50, 93, .1);
-webkit-box-shadow: 0 0 4px rgba(50, 50, 93, .1);
box-shadow: 0 0 4px rgba(50, 50, 93, .1);
}
.ffs-fr .label {
width: 50%;
}
/***************************SPONSORS*****************************/
.sponsors img {
width: 100%;
.label:hover {
background: #a1aabb;
}
.sponsors .info-block h2, .merchants .info-block h2, .info-block.research-paper h2 {
padding-bottom: 1rem;
.label:active {
background: #a1aabb;
}
/***************************CONTRIBUTE***************************/
.contribute ol {
padding-left: 1rem;
margin: 0;
.input:focus + .label {
z-index: 1;
}
/**************************MONERO PROJECT***********************/
.monero-project p {
height: 13rem;
.input:checked + .label {
background: #fff;
color: #4c4c4c;
}
@media only screen and (max-width: 75rem) {
@media (max-width: 600px) {
.label {
width: 100%;
margin-bottom: 1rem;
}
.monero-project p {
height: 12rem;
}
.input:checked + .label {
margin-bottom: 0;
}
.ffs-fr .label {
width: 100%;
}
}
@media only screen and (max-width: 62rem) {
.monero-project p {
height: auto;
.panel {
display: none;
order: 99;
z-index: 10;
}
.panel-segment {
padding: 4rem 4rem;
background-color: #ffffff;
-moz-box-shadow: 0 2px 4px rgba(50, 50, 93, .1);
-webkit-box-shadow: 0 2px 4px rgba(50, 50, 93, .1);
box-shadow: 0 2px 4px rgba(50, 50, 93, .1);
margin-top: 0;
}
/**************************PRESS KIT*************************/
.symbol-logo {
height: 159px;
width: 159px;
.panel-segment:last-child {
margin-bottom: 1rem;
}
.symbol-logo, .monero-symbol-logo {
margin-top: 0.5rem;
margin-bottom: 0.5rem;
.panel-segment h3 {
padding-top: 0;
font-size: 1.5rem;
margin-top: 2.5rem;
font-family: 'Hind', sans-serif;
font-weight: bold;
}
.press a {
display: block;
margin-top: 1rem;
.panel-segment h3:first-child {
margin-top: 0;
}
.press a.adi {
margin-top: 1.5rem;
.panel-segment p {
padding-top: 1rem;
font-size: 1.1rem;
line-height: 1.7;
}
/**************************WHAT IS MONERO*************************/
.monero-vid .col-md-6 {
padding: 1rem 1.5rem;
.panel-segment ul,
.panel-segment ol {
padding-top: 0;
padding-bottom: 0;
margin-top: 0;
margin-bottom: 0;
}
/*CAROUSEL*/
.panel-segment ul li,
.panel-segment ol li {
font-size: 1.1rem;
line-height: 1.7;
padding-top: 1rem;
}
.carousel {
height: 38rem;
overflow: hidden;
text-align: center;
.milestone.panel-segment {
position: relative;
padding: 0;
list-style: none;
margin: 0;
padding: 0 4rem 4rem 4rem;
}
.carousel-controls,
.carousel-activator {
display: none;
.milestone.panel-segment p {
padding-top: 0.5rem;
}
.carousel-slide {
opacity: 0;
z-index: -1;
height: 100%;
position: absolute;
padding: 0 3rem;
overflow: hidden;
-webkit-transition: opacity ease-out .3s;
-moz-transition: opacity ease-out .3s;
-o-transition: opacity ease-out .3s;
transition: opacity ease-out .3s;
.milestone.panel-segment:first-of-type {
padding-top: 4rem;
}
.carousel-activator:nth-of-type(1):checked ~ .carousel-controls:nth-of-type(1), .carousel-activator:nth-of-type(2):checked ~ .carousel-controls:nth-of-type(2), .carousel-activator:nth-of-type(3):checked ~ .carousel-controls:nth-of-type(3), .carousel-activator:nth-of-type(4):checked ~ .carousel-controls:nth-of-type(4) {
.milestone.panel-segment:after {
content: '';
width: 100%;
display: block;
border-bottom: 1.5px solid #d0d4dd;
padding-top: 4rem;
}
.milestone.panel-segment:last-of-type:after {
display: none;
}
.carousel-activator:nth-of-type(1):checked ~ .carousel-slide:nth-of-type(1), .carousel-activator:nth-of-type(2):checked ~ .carousel-slide:nth-of-type(2), .carousel-activator:nth-of-type(3):checked ~ .carousel-slide:nth-of-type(3), .carousel-activator:nth-of-type(4):checked ~ .carousel-slide:nth-of-type(4) {
z-index: 2;
opacity: 1;
.milestone.panel-segment h3 {
margin-top: 0;
}
.carousel-control {
height: 2rem;
width: 2rem;
margin-top: -1rem;
top: 50%;
position: absolute;
.input:checked + .label + .panel {
display: block;
cursor: pointer;
border-width: 5px 5px 0 0;
border-style: solid;
border-color: #4c4c4c;
opacity: 0.35;
outline: 0;
z-index: 3;
}
.carousel-control:hover {
opacity: 1;
}
.carousel-control-backward {
left: 0.8rem;
-webkit-transform: rotate(-135deg);
transform: rotate(-135deg);
}
.carousel-control-forward {
right: 0.8rem;
-webkit-transform: rotate(45deg);
transform: rotate(45deg);
}
@media only screen and (max-width: 75rem) {
.ffs-proposal .info-block {
padding: 3rem;
}
@-webkit-keyframes carousel-show-slide {
from {
opacity: 0;
.panel-segment {
padding: 3rem;
}
to {
opacity: 1;
.milestone.panel-segment {
padding: 0 3rem 3rem 3rem;
}
}
@keyframes carousel-show-slide {
from {
opacity: 0;
.milestone.panel-segment:first-of-type,
.milestone.panel-segment:after {
padding-top: 3rem;
}
to {
opacity: 1;
.panel-segment h3 {
font-size: 1.3rem;
margin-top: 2rem;
}
}
.carousel video {
margin-top: 1rem;
}
.panel-segment p,
.panel-segment ul li,
.panel-segment ol li {
padding-top: 0.5rem;
}
.carousel h3 {
text-align: left;
}
@supports (-ms-ime-align:auto) {
@media only screen and (max-width: 62rem) {}
.carousel-slide.ms {
width: 91%;
}
@media only screen and (max-width: 48rem) {
@media only screen and (max-width: 75rem) {
.ffs-proposal .info-block,
.panel-segment {
padding: 2rem;
}
.carousel-slide.ms {
width: auto;
}
.milestone.panel-segment {
padding: 0 2rem 2rem 2rem;
}
.milestone.panel-segment:first-of-type,
.milestone.panel-segment:after {
padding-top: 2rem;
}
.panel-segment p {
font-size: 1rem;
}
}
.panel-segment h3 {
font-size: 1.3rem;
margin-top: 1.5rem;
}
}
@media (max-width: 600px) {
.panel {
order: 0;
}
@media only screen and (max-width: 75rem) {
.panel-segment:first-of-type,
.milestone.panel-segment:first-of-type {}
.carousel {
height: 33rem;
}
.input:checked + .label {
padding-bottom: 0;
}
}
.input:checked + .label:after {
content: '';
width: 100%;
display: block;
border-bottom: 1.5px solid #edeef0;
padding-bottom: 1rem;
}
@media only screen and (max-width: 62rem) {
.panel-segment ol {
padding-left: 1rem;
}
.carousel {
height: 24rem;
.panel-segment ul {
padding-left: 0;
}
}
.about-monero .info-block-row img.main-icon {
width: 100%;
}
/* FFS CONTRIBUTE PAGE */
.ffs-con .con-how p {
word-wrap: break-word;
}
@media only screen and (max-width: 48rem) {
.monero-vid .col-md-6 {
padding: 1rem;
.ffs-con p.string {
background-color: #edeff2;
padding: 1.5rem;
margin-top: 1rem;
margin-bottom: 1rem;
font-weight: 700;
}
.carousel-control {
height: 1.5rem;
width: 1.5rem;
.ffs-con .qr,
.ffs-con .qr:hover,
.ffs-con .qr:focus,
.ffs-con .qr:active {
border: none;
border-radius: 10px;
display: inline-block;
-moz-box-shadow: 0 0 20px rgba(50, 50, 93, .4);
-webkit-box-shadow: 0 0 20px rgba(50, 50, 93, .4);
box-shadow: 0 0 20px rgba(50, 50, 93, .4);
margin-bottom: 1rem;
margin-top: 1rem;
}
.about-monero .info-block-row img.main-icon {
width: 40%;
.ffs-con .qr img {
border-radius: 10px;
vertical-align: middle;
max-width: 15rem;
}
}
@media (max-width: 600px) {
.ffs-con .panel {
display: initial;
}
@media only screen and (max-width: 42rem) {
.ffs-con .input:checked + .label,
.ffs-con .input + .label {
display: none;
}
.carousel { height: 22rem;}
.ffs-con .qr img {
max-width: 100%;
}
.carousel-control {
margin-top: 0;
}
/* FFS WORK IN PROGRESS LIST */
.ffs .in-progress a.ffs-idea {
border-top: 6px solid #3a72aa;
}
@media only screen and (max-width: 37rem) {
.in-progress .progress-bar {
margin-top: 0.5rem;
margin-bottom: 0.5rem;
}
.carousel { height: 18rem;}
.in-progress p.bar-work-status {
padding-top: 0;
font-weight: bold;
font-family: 'Open Sans', sans-serif;
}
.carousel-control {
height: 1rem;
width: 1rem;
.in-progress p.author-list,
.in-progress p.date-list {
-ms-flex-preferred-size: 25%;
flex-basis: 25%;
max-width: 25%;
}
.in-progress p.bar-work-status {
-ms-flex-preferred-size: 40%;
flex-basis: 40%;
max-width: 40%;
}
@media only screen and (max-width: 34rem) {
@media only screen and (max-width: 62rem) {
.carousel { height: 16rem; }
.in-progress p.author-list,
.in-progress p.date-list {
-ms-flex-preferred-size: 29%;
flex-basis: 29%;
max-width: 29%;
font-size: 1rem;
}
.carousel-slide {
padding: 0 2.5rem;
}
.in-progress p.bar-work-status {
-ms-flex-preferred-size: 40%;
flex-basis: 40%;
max-width: 40%;
font-size: 1rem;
}
}
@media only screen and (max-width: 30rem) {
.monero-vid .col-md-6 {
padding: 1rem 0;
}
@media only screen and (max-width: 48rem) {
}
.in-progress p.author-list {
-ms-flex-preferred-size: 35%;
flex-basis: 35%;
max-width: 35%;
font-size: 0.9rem;
padding-top: 0;
}
@media only screen and (max-width: 26rem) {
.in-progress p.date-list {
-ms-flex-preferred-size: 20%;
flex-basis: 20%;
max-width: 20%;
font-size: 0.9rem;
padding-top: 0;
}
.carousel {
height: auto;
position: static;
}
.in-progress p.bar-work-status,
.ffs-cp p.bar-work-status {
-ms-flex-preferred-size: 45%;
flex-basis: 45%;
max-width: 45%;
text-align: right;
font-size: 0.9rem;
padding-top: 0;
}
.carousel-activator:nth-of-type(1):checked ~ .carousel-controls:nth-of-type(1), .carousel-activator:nth-of-type(2):checked ~ .carousel-controls:nth-of-type(2), .carousel-activator:nth-of-type(3):checked ~ .carousel-controls:nth-of-type(3), .carousel-activator:nth-of-type(4):checked ~ .carousel-controls:nth-of-type(4) {
display: none;
}
.carousel-slide {
position: static;
opacity: 1;
padding: 0;
}
@media only screen and (max-width: 41rem) {
.carousel video {
margin-top: 0.5rem;
}
.in-progress .between-xs {
-ms-flex-pack: start;
-webkit-box-pack: start;
justify-content: flex-start;
text-align: start;
}
}
.in-progress p.author-list,
.in-progress p.date-list {
padding-top: 0.3rem;
-ms-flex-preferred-size: 50%;
flex-basis: 50%;
max-width: 50%;
}
/*********************FORUM FUNDING SYSTEM*************************/
.in-progress p.bar-work-status {
-ms-flex-preferred-size: 100%;
flex-basis: 100%;
max-width: 100%;
text-align: left;
margin-top: 1rem;
}
.ffs .mobile {
display: none;
}
.ffs .tabPanel-content a {
display: block;
}
@media only screen and (max-width: 30rem) {
.ideas .half:nth-child(even) {
padding-left: 0.5rem;
padding-right: 0;
.in-progress p.author-list,
.in-progress p.date-list {
-ms-flex-preferred-size: 100%;
flex-basis: 100%;
max-width: 100%;
padding-top: 0.7rem;
}
}
.ideas .half:nth-child(odd) {
padding-right: 0.5rem;
padding-left: 0;
}
/* FFS WORK IN PROGRESS SINGLE */
.ffs-breadcrumbs p {
padding-top: 0;
padding-bottom: 1rem;
font-size: 0.85rem;
.ffs-wip p.author-list,
.ffs-cp p.author-list,
.ffs-wip p.date-list,
.ffs-wip p.progress-number-goal,
.ffs-cp p.date-list,
.ffs-cp p.progress-number-goal,
.ffs-wip p.bar-work-status,
.ffs-cp p.bar-work-status {
display: inline;
}
.ffs-backlink p {
text-align: left;
padding-top: 0;
padding-bottom: 1rem;
font-size: 0.85rem;
margin-top: -2rem;
.ffs-wip p.date-list,
.ffs-wip p.progress-number-goal,
.ffs-cp p.date-list,
.ffs-cp p.progress-number-goal {
margin-left: 2rem;
}
.ffs-backlink p:before {
content: '\003c';
.ffs-wip p.bar-work-status,
.ffs-cp p.bar-work-status {
text-align: right;
float: right;
}
.ffs-status {
color: #2f6f9f;
padding: 0.7rem;
border-radius: 0.2rem;
margin-bottom: 1.5rem;
.ffs-wip p.bar-work-status:after,
.ffs-cp p.bar-work-status:after {
clear: both;
}
.ffs-status p {
white-space: pre-wrap;
padding: 0.2rem;
border-radius: 0.2rem;
font-size: 0.85rem;
}
.complete .ffs-status {
background-color: #d7e8d8;
}
@media only screen and (max-width: 62rem) {
.inprogress .ffs-status {
background-color: #fef2d5;
}
.ffs-wip p.author-list,
.ffs-cp p.author-list,
.ffs-wip p.date-list,
.ffs-wip p.progress-number-goal,
.ffs-cp p.date-list,
.ffs-cp p.progress-number-goal,
.ffs-wip p.bar-work-status,
.ffs-cp p.bar-work-status {
font-size: 1rem;
}
.progress-numbers p {
display: inline-block;
padding-top: 1.2rem;
}
.progress-bar {
height: 1rem;
position: relative;
background: #edebed;
box-shadow: inset 0 -1px 1px rgba(0,0,0,.07);
margin: 1rem 0 1.5rem 0;
}
@media only screen and (max-width: 48rem) {
.progress-bar span {
display: block;
height: 100%;
background-color: rgb(229,115,37);
background-image: linear-gradient(
center bottom,
rgb(229,115,37) 37%,
rgb(231,129,58) 69%
);
box-shadow:
inset 0 2px 9px rgba(255,255,255,0.3),
inset 0 -2px 6px rgba(0,0,0,.07);
position: relative;
overflow: hidden;
}
.ffs-wip p.bar-work-status,
.ffs-cp p.bar-work-status {
text-align: left;
float: none;
display: block;
margin-top: 1rem;
}
.inprogress .progress-bar span, .complete .progress-bar span {
background-color: rgb(97,168,99);
background-image: linear-gradient(
center bottom,
rgb(97,168,99) 37%,
rgb(128,185,130) 69%
);
}
.ffs-wip p.author-list,
.ffs-cp p.author-list,
.ffs-wip p.date-list,
.ffs-wip p.progress-number-goal,
.ffs-cp p.date-list,
.ffs-cp p.progress-number-goal,
.ffs-wip p.bar-work-status,
.ffs-cp p.bar-work-status {
font-size: 0.9rem;
}
.fr-contribute .tab, .fr-contribute .tab:last-of-type, .milestones .tab, .milestones .tab:last-of-type {
border: none;
}
.ffs-wip p.date-list,
.ffs-wip p.progress-number-goal,
.ffs-cp p.date-list,
.ffs-cp p.progress-number-goal {
margin-left: 1rem;
}
.fr-contribute .tab-content p, .milestones .tab-content p {
margin: 0;
text-align: left;
}
.fr-contribute label.accordion, .milestones label.accordion {
display: inline-block;
padding: 0 2rem 0 1rem;
border: 1px solid #ff7519;
margin: 0;
line-height: 2.7rem;
height: 2.7rem;
-webkit-transition: background .15s ease;
-moz-transition: background .15s ease;
-o-transition: background .15s ease;
transition: background .15s ease;
color: #ff7519;
text-transform: uppercase;
}
@media only screen and (max-width: 37rem) {
.fr-contribute label.accordion:hover, .fr-contribute label.accordion:focus, .fr-contribute input.accordion[type=checkbox]:checked + label, .milestones label.accordion:hover, .milestones label.accordion:focus, .milestones input.accordion[type=checkbox]:checked + label {
background-color: #ff7519;
color: #ffffff;
}
.ffs-wip p.author-list,
.ffs-cp p.author-list,
.ffs-wip p.date-list,
.ffs-wip p.progress-number-goal,
.ffs-cp p.date-list,
.ffs-cp p.progress-number-goal {
padding-top: 0.7rem;
}
.fr-contribute label.accordion::after, .milestones label.accordion:after {
right: 1rem;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
border-top: 4px solid #ff7519;
}
.ffs-wip .progress-bar,
.ffs-cp .progress-bar {
margin-top: 0.5rem;
}
.fr-contribute label.accordion:hover:after, .fr-contribute label.accordion:focus:after, .fr-contribute input.accordion[type=checkbox]:checked + label:after, .milestones label.accordion:hover:after, .milestones label.accordion:focus:after, .milestones input.accordion[type=checkbox]:checked + label:after {
border-top: 4px solid #ffffff;
}
.fr-contribute label.accordion:focus:after, .fr-contribute input.accordion[type=checkbox]:checked + label:after, .milestones label.accordion:focus:after, .milestones input.accordion[type=checkbox]:checked + label:after {
transform: rotateX(180deg);
}
@media only screen and (max-width: 30rem) {
.ms-completed, .ms-upcoming {
margin-top: 1rem !important;
}
.ffs-wip p.author-list,
.ffs-cp p.author-list,
.ffs-wip p.date-list,
.ffs-wip p.progress-number-goal,
.ffs-cp p.date-list,
.ffs-cp p.progress-number-goal {
display: block;
margin-left: 0;
}
.milestones .row.roadmap {
margin-top: 1.5rem;
}
@media only screen and (max-width: 75rem) {
/* FFS COMPLETED PROPOSAL LIST */
.ffs .complete-proposal a.ffs-idea {
border-top: 6px solid #70af71;
}
@media only screen and (max-width: 62rem) {
.ffs .desktop {
display: none;
}
.ffs .mobile {
display: block;
}
.ffs .mobile .ffs-btn-wrap {
padding: 0.5rem;
}
.ffs .mobile a.ffs-btn {
display: block;
padding: 2.5rem 0.5rem;
color: #fff;
box-shadow: 0 1px 5px 0 rgba(0,0,0,.07), 0 7px 17px 0 rgba(0,0,0,.1);
-moz-box-shadow: 0 0 2px rgba(0,0,0,0.12), 0 2px 2px rgba(0,0,0,0.24);
-webkit-box-shadow: 0 0 2px rgba(0,0,0,0.12), 0 2px 2px rgba(0,0,0,0.24);
box-shadow: 0 0 2px rgba(0,0,0,0.12), 0 2px 2px rgba(0,0,0,0.24);
text-align: center;
transition: all .15s ease;
font-size: 1.5625rem;
font-weight: 700;
font-family: 'Hind', sans-serif;
}
.ffs .mobile a.ffs-btn:hover {
text-decoration: none;
}
.ffs-btn:active{
transform: translateY(1px);
-moz-box-shadow: 0 4px 6px rgba(50, 50, 93, .11), 0 1px 3px rgba(0, 0, 0, .08);
-webkit-box-shadow: 0 4px 6px rgba(50, 50, 93, .11), 0 1px 3px rgba(0, 0, 0, .08);
box-shadow: 0 4px 6px rgba(50, 50, 93, .11), 0 1px 3px rgba(0, 0, 0, .08);
}
.ffs .mobile a#ffs-ideas {
background-color: #74a3bc;
}
.ffs .mobile a#ffs-opentasks {
background-color: #e98d4f;
}
.ffs .mobile a#ffs-fundingrequired {
background-color: #d95a5a;
}
.ffs .mobile a#ffs-workinprogress {
background-color: #f7d859;
}
.ffs .mobile a#ffs-completedproposals {
background-color: #61a863;
}
}
/* FFS COMPLETED PROPOSAL SINGLE */
@media only screen and (max-width: 48rem) {
.ffs .mobile .info-block a {
display: block;
padding: 2rem 1rem;
}
.container.ideas {
padding: 0 0.5rem;
.ffs .tabPanel-content a {
display: block;
}
.ideas .half:nth-child(even) {
padding-left: 0.25rem;
padding-right: 0;
.ffs-breadcrumbs p {
display: inline;
font-size: 0.85rem;
padding: 0;
}
.ideas .half:nth-child(odd) {
padding-right: 0.25rem;
padding-left: 0;
.ffs-breadcrumbs p a,
.ffs-breadcrumbs p.bread-active {
display: inline-block;
height: 16px;
text-align: center;
padding: 0.5rem 0.2rem 0.5rem 1.5rem;
position: relative;
font-size: 0.7rem;
text-decoration: none;
color: #4c4c4c;
margin-bottom: 1rem;
border: none;
line-height: 16px;
min-width: 10rem;
-moz-box-shadow: 0 0 4px rgba(50, 50, 93, .1);
-webkit-box-shadow: 0 0 4px rgba(50, 50, 93, .1);
box-shadow: 0 0 4px rgba(50, 50, 93, .1);
}
.ffs-breadcrumbs, .ffs-backlink {
display: none;
.ffs-breadcrumbs p a:hover,
.ffs-breadcrumbs p a:active,
.ffs-breadcrumbs p a:focus {
border: none;
background-color: #a1aabb;
}
.ms-completed, .ms-upcoming {
margin-top: 1.2rem !important;
.ffs-breadcrumbs p a:hover:after,
.ffs-breadcrumbs p a:active:after,
.ffs-breadcrumbs p a:focus:after {
border-left: 16px solid #a1aabb;
}
.ffs-breadcrumbs p a {
background-color: #c6ccd6;
}
@media only screen and (max-width: 41rem) {
.ideas .half.col-xs-6 {
-ms-flex-preferred-size: 100%;
flex-basis: 100%;
max-width: 100%;
.ffs-breadcrumbs p.bread-active {
background-color: #fff;
}
.ideas .half:nth-child(even), .ideas .half:nth-child(odd) {
padding: 0;
.ffs-breadcrumbs p a:before,
.ffs-breadcrumbs p.bread-active:before {
content: "";
border-top: 16px solid transparent;
border-bottom: 16px solid transparent;
border-left: 16px solid #edeef0;
position: absolute;
left: 0;
top: 0;
}
.ffs-breadcrumbs p:first-of-type a:before {
display: none;
}
@media only screen and (max-width: 30rem) {
.ffs .mobile a.ffs-btn {
font-size: 1.25rem;
.ffs-breadcrumbs p:first-of-type a {
padding-left: 0.8rem;
}
.milestones .roadmap .col-xs-1 {
-ms-flex-preferred-size: 16.667%;
flex-basis: 16.667%;
max-width: 16.667%;
.ffs-breadcrumbs p a:after,
.ffs-breadcrumbs p.bread-active:after {
content: "";
border-top: 16px solid transparent;
border-bottom: 16px solid transparent;
position: absolute;
right: -16px;
top: 0;
z-index: 1;
}
.milestones .roadmap .col-xs-11 {
-ms-flex-preferred-size: 83.333%;
flex-basis: 83.333%;
max-width: 83.333%;
}
.ffs-breadcrumbs p a:after {
border-left: 16px solid #c6ccd6;
}
@media only screen and (max-width: 25rem) {
.ffs .mobile .col-xs-6 {
-ms-flex-preferred-size: 100%;
max-width: 100%;
flex-basis: 100%;
}
.ffs .mobile .ffs-btn-wrap {
padding: 0.25rem 0.5rem;
}
.ffs .mobile a.ffs-btn {
padding: 1.5rem 0.5rem;
}
.ffs-breadcrumbs p.bread-active:after {
border-left: 16px solid #fff;
}
/*************************accordion********************************/
@media only screen and (max-width: 62rem) {
.tab {
position: relative;
width: 100%;
color: #4c4c4c;
overflow: hidden;
border-top: 1px solid #d7d7d7;
}
.ffs-breadcrumbs {
display: none;
}
.tab:last-of-type {
border-bottom: 1px solid #d7d7d7;
}
input.accordion {
position: absolute;
display: none;
z-index: -1;
}
label.accordion {
position: relative;
display: block;
padding: 1rem 2rem 1rem 0;
font-weight: bold;
line-height: 1.7;
cursor: pointer;
margin-right: 0.5rem;
}
.tab-content {
max-height: 0;
overflow: hidden;
border-radius: 3px;
-webkit-transition: max-height 0.3s;
-o-transition: max-height 0.3s;
transition: max-height 0.3s;
}
@media only screen and (max-width: 48rem) {}
.tab-content p {
margin: 0 1rem 1rem 1rem;
.ffs-backlink p {
text-align: left;
padding-top: 0;
padding-bottom: 1rem;
font-size: 0.85rem;
margin-top: -2rem;
}
input.accordion:checked ~ .tab-content {
max-height: 100rem;
overflow: visible;
.ffs-backlink p:before {
content: '\003c';
}
label.accordion::after {
margin-right: 0;
content: "";
position: absolute;
display: block;
top: 50%;
right: 0;
width: 0;
height: 0;
border-top: 4px solid #4c4c4c;
border-bottom: 0 solid #4c4c4c;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
-webkit-transition: border-bottom .1s, border-top .1s .1s;
-o-transition: border-bottom .1s, border-top .1s .1s;
transition: border-bottom .1s, border-top .1s .1s;
.ffs-status {
color: #2f6f9f;
padding: 0.7rem;
border-radius: 0.2rem;
margin-bottom: 1.5rem;
}
input.accordion[type=checkbox]:checked + label::after {
transform: rotateX(180deg);
}
input.accordion[type=radio]:checked + label::after {
transform: rotateX(180deg);
.ffs-status p {
white-space: pre-wrap;
padding: 0.2rem;
border-radius: 0.2rem;
font-size: 0.85rem;
}
/*********************TOOLTIPS********************/
[data-tooltip] {
position: relative;
z-index: 2;
cursor: pointer;
.progress-numbers p {
display: inline-block;
padding-top: 1.2rem;
}
[data-tooltip]:before,
[data-tooltip]:after {
visibility: hidden;
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
filter: progid: DXImageTransform.Microsoft.Alpha(Opacity=0);
opacity: 0;
pointer-events: none;
.progress-bar {
padding: 0.4rem;
position: relative;
margin: 1rem 0 0.5rem 0;
border-radius: 20px;
border: 1.5px solid #d0d4dd;
}
[data-tooltip]:before {
position: absolute;
bottom: 150%;
left: 50%;
margin-bottom: 5px;
margin-left: -80px;
padding: 7px;
width: 160px;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
background-color: #000;
background-color: hsla(0, 0%, 20%, 0.9);
color: #fff;
content: attr(data-tooltip);
text-align: center;
font-size: 14px;
line-height: 1.2;
.progress-bar span.fund-progress,
.progress-bar span.work-progress {
display: block;
height: 0.8rem;
border-radius: 20px;
box-shadow:
inset 0 2px 9px rgba(255, 255, 255, 0.3),
inset 0 -2px 6px rgba(0, 0, 0, .07);
position: relative;
overflow: hidden;
}
[data-tooltip]:after {
position: absolute;
bottom: 150%;
left: 50%;
margin-left: -5px;
width: 0;
border-top: 5px solid #000;
border-top: 5px solid hsla(0, 0%, 20%, 0.9);
border-right: 5px solid transparent;
border-left: 5px solid transparent;
content: " ";
font-size: 0;
line-height: 0;
.progress-bar span.fund-progress {
background-color: #D54949;
}
[data-tooltip]:hover:before,
[data-tooltip]:hover:after {
visibility: visible;
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
filter: progid: DXImageTransform.Microsoft.Alpha(Opacity=100);
opacity: 1;
.progress-bar span.work-progress {
background-color: #498fd5;
}
@media only screen and (max-width: 48rem) {
.tab-content p {
margin: 1rem 0;
}
.progress-bar {
margin-top: 0.2rem;
}
}
@media only screen and (max-width: 41rem) {
.ffs a.ffs-idea {
padding: 1.5rem;
}
.ffs-idea h3 {
margin-bottom: 0.1rem;
font-size: 1.2rem;
}
.in-progress .progress-bar,
.fund-required .progress-bar {
margin-top: 0.3rem;
}
.progress-bar {
padding: 0.2rem;
}
}
@media only screen and (max-width: 23rem) {
.ffs p.author-list,
.ffs p.date-list,
.ffs-proposal p.author-list,
.ffs-proposal p.date-list {
display: block;
}
.ffs p.date-list,
.ffs-proposal p.date-list {
margin-left: 0;
}
}
## About Monero FFS
# About Monero CCS
Monero FFS is a simple web system for capturing donations made to fund community projects
Monero CCS is a simple web system for capturing donations made to fund community projects
# CCS Deployment Quickstart
## Requirements
```
mysql >= 5.7.7
php >= 7.1
```
## Deployment
```
apt update
apt install -y cron git jekyll mysql-server nginx php php-curl php-fpm php-gd php-mbstring php-mysql php-xml unzip
```
Install `Composer` following the instructions at https://getcomposer.org/download/
Checkout and configure CCS backend, frontend and proposals repositories (replace `<REPOSITORY_CCS_BACKEND>`, `<REPOSITORY_CCS_FRONTEND>`, `<REPOSITORY_CCS_PROPOSALS>` with the actual URLs)
```
cd /var/www/html
git clone <REPOSITORY_CCS_BACKEND>
git clone <REPOSITORY_CCS_FRONTEND>
git clone <REPOSITORY_CCS_PROPOSALS> ccs-back/storage/app/proposals
rm -rf ccs-front/proposals
ln -s /var/www/html/ccs-back/storage/app/proposals ccs-front/proposals
ln -fs /var/www/html/ccs-back/storage/app/proposals.json ccs-front/_data/proposals.json
ln -fs /var/www/html/ccs-back/storage/app/complete.json ccs-front/_data/completed-proposals.json
cd ccs-back
composer update
cp .env.example .env
```
Spin up MYSQL server, create new database, user and grant user access to it
Open `.env` in editor of choice and edit the following lines:
> `COIN` - choose one of supported coins: `monero` or `zcoin`
> `REPOSITORY_URL` - CCS proposals Github URL or GitLab API endpoint (e.g. https://\<GITLAB_DOMAIN>/api/v4/projects/\<PROJECT_ID>)>
> `GITHUB_ACCESS_TOKEN` - leave empty if you are not using Github or visit https://github.com/settings/tokens to generate new `public_repo` token
```
APP_URL=http://<HOSTNAME>
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=<DB_NAME>
DB_USERNAME=<DB_USER_NAME>
DB_PASSWORD=<DB_USER_PASSWORD>
RPC_URL=http://127.0.0.1:28080/json_rpc
RPC_USER=
RPC_PASSWORD=
COIN=<COIN>
REPOSITORY_URL=<REPOSITORY_URL>
GITHUB_ACCESS_TOKEN=
```
Initialize the system
```
php artisan migrate:fresh
php artisan up
php artisan key:generate
php artisan proposal:process
php artisan proposal:update
```
Grant `www-data` user access to the files
```
cd ..
chown -R www-data ccs-back/
chown -R www-data ccs-front/
```
Remove Nginx example config
```
rm /etc/nginx/sites-enabled/default
```
Create new file `/etc/nginx/sites-enabled/ccs` in editor of choice and paste the following lines replacing `<HOSTNAME>` and `<PHP_VERSION>` with appropriate values
```
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html/ccs-front/_site/;
index index.php index.html;
server_name <HOSTNAME>;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# pass the PHP scripts to FastCGI server
#
location ~ \.php$ {
root /var/www/html/ccs-back/public/;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php<PHP_VERSION>-fpm.sock;
}
}
```
```
service nginx reload
```
Set up a cron job that will run periodic updates (every minute) and generate static HTML files
```
* * * * * git -C /var/www/html/ccs-back/storage/app/proposals/ pull; php /var/www/html/ccs-back/artisan schedule:run; jekyll build --source /var/www/html/ccs-front --destination /var/www/html/ccs-front/_site
```
## Optional
Instead of scheduling a cron job you can run the following commands in no particular order
1. Update CCS system proposals intenal state
```
php /var/www/html/ccs-back/artisan proposal:process
php /var/www/html/ccs-back/artisan generate:addresses
php /var/www/html/ccs-back/artisan wallet:notify
php /var/www/html/ccs-back/artisan proposal:update
```
2. Process incoming donations
*Run it either on new block/tx notification or schedule it to run every minute or so*
```
php /var/www/html/ccs-back/artisan monero:notify
```
1. Generate static HTML files
```
jekyll build --source /var/www/html/ccs-front --destination /var/www/html/ccs-front/_site
```
2. Get the full list of processed transactions in JSON format
```
php /var/www/html/ccs-back/artisan deposit:list
```
......@@ -6,7 +6,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>FFS</title>
<title>CCS - Donate {{$project->title}}</title>
<link rel="apple-touch-icon" sizes="180x180" href="/meta/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/meta/favicon-32x32.png">
......@@ -27,72 +27,84 @@
<div class="page-wrapper">
<div class="mob-nav">
<input class="burger-check" id="mobile-burger" type="checkbox"><label for="mobile-burger" class="burger"></label>
<input class="burger-check" id="mobile-burger" type="checkbox"><label for="mobile-burger" class="burger"></label>
<div class="slide-in-nav">
<div class="container slide-in">
<div class="row">
<div class="col-xs-12">
<div class="text-center nav-item mob">
<a href="/forum-funding-system/ideas/" class="top-link">Ideas</a>
</div>
<div class="text-center nav-item mob">
<a href="/forum-funding-system/funding-required/">Funding Required</a>
</div>
<div class="text-center nav-item mob">
<a href="/forum-funding-system/work-in-progress/">Work in Progress</a>
</div>
<div class="text-center nav-item mob">
<a href="/forum-funding-system/completed-proposals/">Completed Tasks</a>
</div>
<div class="text-center nav-item mob">
<a href="/forum-funding-system/completed-proposals/">Back to Getmonero.org</a>
</div>
</div>
</div>
</div>
<div class="container slide-in">
<div class="row">
<div class="col-xs-12">
<div class="text-center nav-item mob">
<a href="/ideas/" class="top-link">Ideas</a>
</div>
<div class="text-center nav-item mob">
<a href="/funding-required/">Funding Required</a>
</div>
<div class="text-center nav-item mob">
<a href="/work-in-progress/">Work in Progress</a>
</div>
<div class="text-center nav-item mob">
<a href="/completed-proposals/">Completed Tasks</a>
</div>
<div class="text-center nav-item mob">
<a href="/donate/index.html">Donate</a>
</div>
<div class="text-center nav-item mob">
<a href="/completed-proposals/">Back to Getmonero.org</a>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="desktop-nav">
<nav class="container">
</div>
<div class="desktop-nav">
<nav class="container">
<div class="row middle-xs">
<div class="col-lg-4 col-md-4 col-sm-4 col-xs-4">
<p class="site-name"><a href="/">Community Crowdfunding System</a></p>
</div>
<div class="col-lg-8 col-md-8 col-sm-8 items end-xs">
<div class="row end-xs middle-xs">
<div class="col-md-12">
<div class="dropdown">
<label for="desktopdrop">CCS Stages<div class="arrow-down"></div></label>
<input class="burger-checkdropdown" id="desktopdrop" type="checkbox">
<div class="dropdown-content">
<a href="/ideas/">Ideas</a>
<a href="/funding-required/">Funding Required</a>
<a href="/work-in-progress/">Work in Progress</a>
<a href="/completed-proposals/">Completed Tasks</a>
</div>
</div>
<a href="https://getmonero.org">Getmonero.org</a>
<a href="/donate/" class="donate-btn">Donate</a>
</div>
</div>
</div>
</div>
</nav>
</div>
<div class="mob bot-nav white-nav">
<div class="row middle-xs">
<div class="col-lg-4 col-md-4 col-sm-4 col-xs-4">
<a href="/forum-funding-system/"><img src="/img/monero-logo.png" alt="Monero Logo" class="monero-logo"></a>
</div>
<div class="col-lg-8 col-md-8 col-sm-8 items end-xs">
<div class="row end-xs middle-xs">
<div class="col-md-12">
<a href="/forum-funding-system/ideas/" class="top-link">Ideas</a>
<a href="/forum-funding-system/funding-required/">Funding Required</a>
<a href="/forum-funding-system/work-in-progress/">Work in Progress</a>
<a href="/forum-funding-system/completed-proposals/">Completed Tasks</a>
<a href="/forum-funding-system/completed-proposals/">Getmonero.org</a>
</div>
</div>
<div class="col-xs-12">
<p class="site-name"><a href="
/
">Community Crowdfunding System</a></p>
</div>
</div>
</nav>
</div>
<div class="mob bot-nav white-nav">
<div class="row middle-xs">
<div class="col-xs-6">
<a href="/
"><img src="/img/monero-logo.png" alt="Monero Logo" class="monero-logo"></a>
</div>
</div>
</div>
</div>
<div class="site-wrap ffs-proposal ffs-con">
<div class="container ffs-breadcrumbs">
<div class="row">
<div class="col-xs-12">
<p><a href="/forum-funding-system/">Forum Funding System</a></p>
<p><a href="/forum-funding-system/funding-required/">Funding Required</a></p>
<p><a href="/forum-funding-system/funding-required/">{{$project->title}}</a></p>
<p><a href="/">Community Crowdfunding System</a></p>
<p><a href="/funding-required/">Funding Required</a></p>
<p><a href="/proposals/{{pathinfo($project->filename, PATHINFO_FILENAME)}}.html">{{$project->title}}</a></p>
<p class="bread-active">Contribute</p>
</div>
</div>
......@@ -101,15 +113,14 @@
<section class="container full">
<div class="info-block">
<div class="row">
<div class="col-xs-12">
<div class="col-xs-12">
<h2>{{$project->title}}</h2>
<div class="row middle-xs between-xs">
<p class="author-list"><span><img src="/img/author-filled.png"></span>{{$project->author}}</p>
<p class="date-list"><span><img src="/img/calendar.png"></span>{{$project->github_created_at}}</p>
<p class="author-list">{{$project->author}}</p>
<p class="date-list">{{date('F j, Y', strtotime($project->created_at))}}</p>
<p class="date-list contributor">{{$project->contributions}}</p>
<p class="bar-fund-status">Raised <span class="progress-number-funded">{{$project->raised_amount}}</span> of <span class="progress-number-goal">{{$project->target_amount}}</span> XMR</p>
</div>
<div class="progress-bar">
<span class="fund-progress" style="width: [PERCENTAGE HERE]%"></span>
<span class="fund-progress" style="width: {{min(100, intval($project->raised_amount * 100 / $project->target_amount))}}%"></span>
</div>
<p>Your contribution should be visible within 5 minutes of you sending your contribution. If for some reason it is not there, please contact a member of the Core Team!</p>
</div>
......@@ -129,32 +140,21 @@
<p>1. Choose the amount of XMR you wish to contribute to this proposal</p>
<p>2. Scan this QR code or tap to open in your Monero wallet app:</p>
<p>
<a href="{{$project->address_uri}}" class="qr"><img src="{{ $project->qrCodeSrc}}"/></a>
<a href="{{$project->address_uri}}" class="qr"><img src="{{$project->qrCodeSrc}}"/></a>
</p>
<p>3. Send! Thank you! You are amazing!</p>
</div>
</div>
<input class="input" name="tabs" type="radio" id="tab-2"/>
<label class="label" for="tab-2">Integrated Address</label>
<label class="label" for="tab-2">Address</label>
<div class="panel col-xs-12">
<div class="panel-segment">
<h3>Contribute using an integrated address</h3>
<h3>Contribute using an address</h3>
<p>1. Choose the amount of XMR you wish to contribute to this proposal</p>
<p>2. Enter the following XMR address:</p> <p class="string">{{$project->address}}</p>
<p>3. Send! Thank you! You are amazing!</p>
</div>
</div>
<input class="input" name="tabs" type="radio" id="tab-3"/>
<label class="label" for="tab-3">Payment ID</label>
<div class="panel col-xs-12">
<div class="panel-segment">
<h3>Contribute using a payment ID</h3>
<p>1. Choose the amount of XMR you wish to contribute to this proposal</p>
<p>2. Enter the following XMR address:</p> <p class="string">{{ env('WALLET_ADDRESS') }}</p>
<p>3. Enter the following payment ID that is unique to this proposal:</p> <p class="string">{{$project->payment_id}}</p>
<p>4. Send! Thank you! You're amazing!</p>
</div>
</div>
</div>
</div>
</div>
......@@ -162,21 +162,26 @@
</div>
<footer class="container-fluid">
<div class="container">
<div class="row around-xs footer-wrapper">
<div class="row center-xs">
<div class="social-icons">
</div>
<div class="container">
<div class="row center-xs footer-wrapper">
<div class="col-md-8 col-sm-10 col-xs-12">
<h3>Donate to the Monero Project</h3>
<p>By donating to the following Monero address (General Fund), you are supporting the Monero Project. If you wish to donate to a specific proposal, please see <a href="/funding-required/index.html" class="white gf">Funding Required</a>.</p>
<p><a href="monero:44AFFq5kSiGBoZ4NMDwYtN18obc8AemS33DBLWs3H7otXft3XjrpDtQGv7SqSsaBYBb98uNbr2VBBEt7f2wfn3RVGQBEP3A" class="qr"><img src="/img/donate-monero.png" /></a></p>
<p class="gf-address">44AFFq5kSiGBoZ4NMDwYtN18obc8AemS33DBLWs3H7otXft3XjrpDtQGv7SqSsaBYBb98uNbr2VBBEt7f2wfn3RVGQBEP3A</p>
</div>
</div>
</div>
<div class="row center-xs">
<div class="footer-links">
<ul class="list-unstyled list-inline">
<li><a href="https://repo.getmonero.org/monero-project/ccs-front" class="white footer-link">CCS Front End Repo</a></li>
<li><a href="https://repo.getmonero.org/monero-project/ccs-back" class="white footer-link">CCS Backend Repo</a></li>
<li><a href="https://repo.getmonero.org/monero-project/ccs-proposals" class="white footer-link">CCS Proposals Repo</a></li>
</ul>
</div>
</div>
</div>
</div>
</footer>
</footer>
</div>
</body>
</html>
\ No newline at end of file
......@@ -10,11 +10,11 @@
<tbody>
@foreach ($projects as $project)
<tr>
<td><a href='{!! url('/projects/'.$project->payment_id); !!}'>{{ $project->payment_id }}</a></td>
<td><a href='{!! url('/projects/'.$project->subaddr_index); !!}'>{{ $project->subaddr_index }}</a></td>
<td>{{$project->status}}</td>
<td>{{$project->amount_received}} XMR</td>
<td>{{$project->raised_amount}} XMR</td>
<td>{{$project->target_amount}} XMR</td>
</tr>
@endforeach
</tbody>
</table>
\ No newline at end of file
</table>