homepage
|
@ -23,3 +23,7 @@ _testmain.go
|
||||||
*.test
|
*.test
|
||||||
bin/
|
bin/
|
||||||
.vagrant/
|
.vagrant/
|
||||||
|
|
||||||
|
|
||||||
|
website/npm-debug.log
|
||||||
|
|
||||||
|
|
|
@ -3,17 +3,24 @@ module.exports = function(grunt) {
|
||||||
// Configuration goes here
|
// Configuration goes here
|
||||||
grunt.initConfig({
|
grunt.initConfig({
|
||||||
|
|
||||||
|
less: {
|
||||||
|
development:{
|
||||||
|
files: {
|
||||||
|
"stylesheets/main.css": "stylesheets/main.less"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
concat: {
|
concat: {
|
||||||
options: {
|
options: {
|
||||||
separator: ';'
|
separator: ';'
|
||||||
},
|
},
|
||||||
|
|
||||||
site: {
|
site: {
|
||||||
src: [
|
src: [
|
||||||
'javascripts/app/app.js',
|
'javascripts/app/app.js',
|
||||||
'javascripts/app/util.js',
|
'javascripts/app/util.js',
|
||||||
'javascripts/app/home.js',
|
'javascripts/app/homepage.js'
|
||||||
'javascripts/app/nodes.js'
|
|
||||||
],
|
],
|
||||||
|
|
||||||
dest: 'javascripts/app/deploy/site.js'
|
dest: 'javascripts/app/deploy/site.js'
|
||||||
|
@ -23,12 +30,16 @@ module.exports = function(grunt) {
|
||||||
uglify: {
|
uglify: {
|
||||||
app: {
|
app: {
|
||||||
files: {
|
files: {
|
||||||
'javascripts/app/deploy/site.min.js': ['javascripts/app/deploy/site.js']
|
'javascripts/app/deploy/site.min.js': ['javascripts/app/deploy/site.js']
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
watch: {
|
watch: {
|
||||||
|
less: {
|
||||||
|
files: 'stylesheets/*.less',
|
||||||
|
tasks: ['less']
|
||||||
|
},
|
||||||
js: {
|
js: {
|
||||||
files: 'javascripts/app/*.js',
|
files: 'javascripts/app/*.js',
|
||||||
tasks: ['concat', 'uglify']
|
tasks: ['concat', 'uglify']
|
||||||
|
@ -37,8 +48,8 @@ module.exports = function(grunt) {
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
// Load plugins here
|
// Load plugins here
|
||||||
|
grunt.loadNpmTasks('grunt-contrib-less');
|
||||||
grunt.loadNpmTasks('grunt-contrib-clean');
|
grunt.loadNpmTasks('grunt-contrib-clean');
|
||||||
grunt.loadNpmTasks('grunt-contrib-concat');
|
grunt.loadNpmTasks('grunt-contrib-concat');
|
||||||
grunt.loadNpmTasks('grunt-contrib-connect');
|
grunt.loadNpmTasks('grunt-contrib-connect');
|
||||||
|
@ -51,6 +62,8 @@ module.exports = function(grunt) {
|
||||||
grunt.registerTask('dist-js', ['concat', 'uglify']);
|
grunt.registerTask('dist-js', ['concat', 'uglify']);
|
||||||
|
|
||||||
// Full distribution task.
|
// Full distribution task.
|
||||||
grunt.registerTask('dist', ['dist-js']);
|
grunt.registerTask('dist', ['dist-js']);
|
||||||
|
|
||||||
};
|
grunt.registerTask('default', ['watch']);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 62 KiB |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 7.1 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 45 KiB |
Before Width: | Height: | Size: 7.2 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 4.7 KiB |
After Width: | Height: | Size: 8.8 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 35 KiB |
After Width: | Height: | Size: 8.2 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 32 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 6.5 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 396 B |
After Width: | Height: | Size: 81 KiB |
After Width: | Height: | Size: 239 KiB |
After Width: | Height: | Size: 136 KiB |
After Width: | Height: | Size: 407 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 375 B |
After Width: | Height: | Size: 876 B |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 490 B |
After Width: | Height: | Size: 1023 B |
Before Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 81 KiB |
Before Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 248 B |
After Width: | Height: | Size: 465 B |
Before Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 13 KiB |
|
@ -1,43 +1,71 @@
|
||||||
<!-- Main jumbotron for a primary marketing message or call to action -->
|
<!-- Main jumbotron for a primary marketing message or call to action -->
|
||||||
<div id="jumbotron">
|
<div id="jumbotron-mask">
|
||||||
<div class="container">
|
<div id="jumbotron">
|
||||||
<div class="jumbo-logo hidden-xs hidden-sm"></div>
|
<div class="container">
|
||||||
<div class="col-lg-5 col-md-5">
|
<div class="col-lg-6 col-md-6">
|
||||||
<h2 class="rls-l">Consul is a decentralized solution for service discovery and orchestration that is lightweight, highly available, and fault tolerant.</h2>
|
<h2 class="rls-l">Create and configure lightweight, reproducible, and portable development environments.</h2>
|
||||||
</div>
|
</div>
|
||||||
<!-- <p><a class="btn btn-primary btn-lg">Learn more »</a></p> -->
|
<div class="jumbo-logo-wrap col-lg-offset-1 col-lg-5 col-md-6 hidden-xs hidden-sm">
|
||||||
|
<div class="jumbo-logo"></div>
|
||||||
|
</div>
|
||||||
|
<!-- <p><a class="btn btn-primary btn-lg">Learn more »</a></p> -->
|
||||||
|
</div>
|
||||||
|
<div class="jumbotron-dots"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="features">
|
<div id="features">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<!-- Example row of columns -->
|
|
||||||
<div class="row">
|
<div class="row double-row">
|
||||||
<div class="col-lg-5 col-md-5">
|
<div class="col-lg-6 col-md-6">
|
||||||
<span class="icn icn1"></span>
|
<div class="row">
|
||||||
|
<div class="col-lg-5 col-md-5">
|
||||||
|
<span class="icn discovery"></span>
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-7 col-md-7">
|
||||||
|
<h2>Service Discovery</h2>
|
||||||
|
<p>Consul makes it simple for services to register themselves, and to discover other service</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-7 col-md-7">
|
<div class="col-lg-6 col-md-6">
|
||||||
<h2>Gossip-based Membership</h2>
|
<div class="row">
|
||||||
<p>Consul relies on an efficient and lightweight gossip protocol to communicate with nodes. The Serf agents periodically exchange messages with each other in much the same way that a zombie apocalypse would occur: it starts with one zombie but soon infects everyone. In practice, the gossip is <a href="/docs/internals/simulator.html">very fast and extremely efficient.</a></p>
|
<div class="col-lg-5 col-md-5">
|
||||||
|
<span class="icn health"></span>
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-7 col-md-7">
|
||||||
|
<h2>Failure Detection</h2>
|
||||||
|
<p>Pairing service discovery with health checking prevents routing requests to unhealthy hosts, and enables services to easily provide circuit breakers.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
|
||||||
<div class="col-lg-7 col-md-7">
|
<div class="row double-row">
|
||||||
<h2>Failure Detection</h2>
|
<div class="col-lg-6 col-md-6">
|
||||||
<p>Consul is able to quickly detect failed members and notify the rest of the cluster. This failure detection is built into the heart of the gossip protocol used by Serf. Like humans in a zombie apocalypse, everybody checks their peers for infection and quickly alerts the other living humans. Serf relies on a random probing technique which is proven to efficiently scale to clusters of any size.</p>
|
<div class="row">
|
||||||
|
<div class="col-lg-5 col-md-5">
|
||||||
|
<span class="icn multi"></span>
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-7 col-md-7">
|
||||||
|
<h2>Multi Datacenter</h2>
|
||||||
|
<p>Consul scales to multiple datacenters out of the box, with no complicated configuration.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-5 col-md-5">
|
<div class="col-lg-6 col-md-6">
|
||||||
<span class="icn icn2"></span>
|
<div class="row">
|
||||||
</div>
|
<div class="col-lg-5 col-md-5">
|
||||||
</div>
|
<span class="icn config"></span>
|
||||||
<div class="row">
|
</div>
|
||||||
<div class="col-lg-5 col-md-5">
|
<div class="col-lg-7 col-md-7">
|
||||||
<span class="icn icn3"></span>
|
<h2>Shared Configuration</h2>
|
||||||
</div>
|
<p>Store hierarchical key/value configuration data for services.</p>
|
||||||
<div class="col-lg-7 col-md-5">
|
</div>
|
||||||
<h2>Custom Events</h2>
|
</div>
|
||||||
<p>In addition to managing membership, Consul can broadcast custom events. These can be used to trigger deploys, restart processes, spread tales of human heroism, and anything else you may want. The event system is flexible and lightweight, making it easy for application developers and sysadmins alike to leverage.</p>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div> <!-- /container -->
|
</div> <!-- /container -->
|
||||||
</div> <!-- /features -->
|
</div> <!-- /features -->
|
||||||
|
|
|
@ -1,25 +1,20 @@
|
||||||
//
|
//
|
||||||
// home.js
|
// app.js
|
||||||
//
|
//
|
||||||
|
|
||||||
var Serf = (function() {
|
var APP = (function() {
|
||||||
|
|
||||||
function initialize (){
|
function initialize (){
|
||||||
Serf.Util.runIfClassNamePresent('page-home', initHome);
|
APP.Utils.runIfClassNamePresent('page-home', initHome);
|
||||||
}
|
}
|
||||||
|
|
||||||
function initHome() {
|
function initHome() {
|
||||||
if(!Serf.Util.isMobile){
|
APP.Homepage.init();
|
||||||
Serf.Nodes.init();
|
|
||||||
}else{
|
|
||||||
Serf.Home.mobileHero();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//api
|
//api
|
||||||
return {
|
return {
|
||||||
initialize: initialize
|
initialize: initialize
|
||||||
}
|
}
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
|
|
@ -1,239 +1,97 @@
|
||||||
//
|
//
|
||||||
// home.js
|
// app.js
|
||||||
//
|
//
|
||||||
|
|
||||||
var Serf = (function() {
|
var APP = (function() {
|
||||||
|
|
||||||
function initialize (){
|
function initialize (){
|
||||||
Serf.Util.runIfClassNamePresent('page-home', initHome);
|
APP.Utils.runIfClassNamePresent('page-home', initHome);
|
||||||
}
|
}
|
||||||
|
|
||||||
function initHome() {
|
function initHome() {
|
||||||
if(!Serf.Util.isMobile){
|
APP.Homepage.init();
|
||||||
Serf.Nodes.init();
|
|
||||||
}else{
|
|
||||||
Serf.Home.mobileHero();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//api
|
//api
|
||||||
return {
|
return {
|
||||||
initialize: initialize
|
initialize: initialize
|
||||||
}
|
}
|
||||||
|
|
||||||
})();//
|
})();
|
||||||
|
;//
|
||||||
// util.js
|
// util.js
|
||||||
//
|
//
|
||||||
var Serf = Serf || {};
|
var APP = APP || {};
|
||||||
|
|
||||||
(function () {
|
|
||||||
|
|
||||||
|
APP.Utils = (function () {
|
||||||
|
return {
|
||||||
//check for mobile user agents
|
//check for mobile user agents
|
||||||
var isMobile = (function(){
|
isMobile : (function(){
|
||||||
if( navigator.userAgent.match(/Android/i)
|
if( navigator.userAgent.match(/Android/i)
|
||||||
|| navigator.userAgent.match(/webOS/i)
|
|| navigator.userAgent.match(/webOS/i)
|
||||||
|| navigator.userAgent.match(/iPhone/i)
|
|| navigator.userAgent.match(/iPhone/i)
|
||||||
//|| navigator.userAgent.match(/iPad/i)
|
//|| navigator.userAgent.match(/iPad/i)
|
||||||
|| navigator.userAgent.match(/iPod/i)
|
|| navigator.userAgent.match(/iPod/i)
|
||||||
|| navigator.userAgent.match(/BlackBerry/i)
|
|| navigator.userAgent.match(/BlackBerry/i)
|
||||||
|| navigator.userAgent.match(/Windows Phone/i)
|
|| navigator.userAgent.match(/Windows Phone/i)
|
||||||
){
|
){
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
})()
|
})(),
|
||||||
|
|
||||||
// calls the given function if the given classname is found
|
runIfClassNamePresent: function(selector, initFunction) {
|
||||||
function runIfClassNamePresent(selector, initFunction) {
|
var elms = document.getElementsByClassName(selector);
|
||||||
var elms = document.getElementsByClassName(selector);
|
if (elms.length > 0) {
|
||||||
if (elms.length > 0) {
|
initFunction();
|
||||||
initFunction();
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
Serf.Util = {};
|
|
||||||
Serf.Util.isMobile = isMobile;
|
|
||||||
Serf.Util.runIfClassNamePresent = runIfClassNamePresent;
|
|
||||||
|
|
||||||
})();//
|
|
||||||
// home.js
|
|
||||||
//
|
|
||||||
var Serf = Serf || {};
|
|
||||||
|
|
||||||
(function () {
|
|
||||||
|
|
||||||
// calls the given function if the given classname is found
|
|
||||||
function mobileHero() {
|
|
||||||
var jumbo = document.getElementById('jumbotron');
|
|
||||||
jumbo.className = jumbo.className + ' mobile-hero';
|
|
||||||
}
|
|
||||||
|
|
||||||
Serf.Home = {};
|
|
||||||
Serf.Home.mobileHero = mobileHero;
|
|
||||||
|
|
||||||
})();//
|
|
||||||
// node.js
|
|
||||||
// animation on the home page
|
|
||||||
//
|
|
||||||
|
|
||||||
var Serf = Serf || {};
|
|
||||||
|
|
||||||
(function () {
|
|
||||||
|
|
||||||
var width = 1400,
|
|
||||||
height = 490,
|
|
||||||
border = 50,
|
|
||||||
numberNodes = 128,
|
|
||||||
linkGroup = 0;
|
|
||||||
//nodeLinks = [];
|
|
||||||
|
|
||||||
var nodes = [];
|
|
||||||
for (i=0; i<numberNodes; i++) {
|
|
||||||
nodes.push({
|
|
||||||
x: Math.random() * (width - border) + (border / 2),
|
|
||||||
y: Math.random() * (height - border) + (border / 2),
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var fill = d3.scale.category20();
|
}());;//homepage.js
|
||||||
|
|
||||||
var force = d3.layout.force()
|
var APP = APP || {};
|
||||||
.size([width, height])
|
|
||||||
.nodes(nodes)
|
|
||||||
.linkDistance(60)
|
|
||||||
.charge(-1)
|
|
||||||
.gravity(0.0004)
|
|
||||||
.on("tick", tick);
|
|
||||||
|
|
||||||
var svg = d3.select("#jumbotron").append("svg")
|
(function () {
|
||||||
.attr('id', 'node-canvas')
|
APP.Homepage = (function () {
|
||||||
.attr("width", width)
|
return {
|
||||||
.attr("height", height)
|
|
||||||
|
|
||||||
//set left value after adding to dom
|
ui : null,
|
||||||
resize();
|
|
||||||
|
|
||||||
svg.append("rect")
|
init: function () {
|
||||||
.attr("width", width)
|
var _this = this;
|
||||||
.attr("height", height);
|
|
||||||
|
|
||||||
var nodes = force.nodes(),
|
//cache elements
|
||||||
links = force.links(),
|
this.ui = {
|
||||||
node = svg.selectAll(".node"),
|
$doc: $(window),
|
||||||
link = svg.selectAll(".link");
|
$hero: $('#jumbotron'),
|
||||||
|
$pagination: null
|
||||||
|
}
|
||||||
|
|
||||||
|
this.addEventListeners();
|
||||||
|
|
||||||
var cursor = svg.append("circle")
|
},
|
||||||
.attr("r", 30)
|
|
||||||
.attr("transform", "translate(-100,-100)")
|
|
||||||
.attr("class", "cursor");
|
|
||||||
|
|
||||||
|
addEventListeners: function(){
|
||||||
|
var _this = this;
|
||||||
|
|
||||||
function createLink(index) {
|
if(APP.Utils.isMobile)
|
||||||
var node = nodes[index];
|
return;
|
||||||
var nodeSelected = svg.select("#id_" + node.index).classed("active linkgroup_"+ linkGroup, true);
|
|
||||||
|
_this.ui.$doc.scroll(function() {
|
||||||
|
var top = _this.ui.$doc.scrollTop(),
|
||||||
|
speedAdj = (top*0.8),
|
||||||
|
speedAdjOffset = speedAdj - top;
|
||||||
|
|
||||||
var distMap = {};
|
_this.ui.$hero.css('webkitTransform', 'translate(0, '+ speedAdj +'px)');
|
||||||
var distances = [];
|
_this.ui.$hero.find('.container').css('webkitTransform', 'translate(0, '+ speedAdjOffset +'px)');
|
||||||
|
//_this.ui.$pagination.css('webkitTransform', 'translate(0, '+ speedAdjOffset +'px)');
|
||||||
for (var i=0; i<nodes.length; i++) {
|
})
|
||||||
if (i == index) {
|
}
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
var target = nodes[i];
|
|
||||||
var selected = svg.select("#id_" + i);
|
|
||||||
var dx = selected.attr('cx') - nodeSelected.attr('cx');
|
|
||||||
var dy = selected.attr('cy') - nodeSelected.attr('cy');
|
|
||||||
var dist = Math.sqrt(dx * dx + dy * dy)
|
|
||||||
|
|
||||||
if (dist in distMap) {
|
|
||||||
distMap[dist].push(target)
|
|
||||||
} else {
|
|
||||||
distMap[dist] = [target]
|
|
||||||
}
|
|
||||||
distances.push(dist)
|
|
||||||
}
|
|
||||||
|
|
||||||
distances.sort(d3.ascending);
|
|
||||||
for (i = 0; i < 3; i++) {
|
|
||||||
var dist = distances[i]
|
|
||||||
var target = distMap[dist].pop()
|
|
||||||
var link = {
|
|
||||||
source: node,
|
|
||||||
target: target
|
|
||||||
}
|
|
||||||
links.push(link);
|
|
||||||
}
|
|
||||||
|
|
||||||
restart();
|
|
||||||
}
|
}
|
||||||
|
}());
|
||||||
|
|
||||||
|
}(jQuery, this));
|
||||||
|
|
||||||
function tick() {
|
|
||||||
link.attr("x1", function(d) { return d.source.x; })
|
|
||||||
.attr("y1", function(d) { return d.source.y; })
|
|
||||||
.attr("x2", function(d) { return d.target.x; })
|
|
||||||
.attr("y2", function(d) { return d.target.y; });
|
|
||||||
|
|
||||||
node.attr("cx", function(d) { return d.x; })
|
|
||||||
.attr("cy", function(d) { return d.y; });
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function restart() {
|
|
||||||
|
|
||||||
node = node.data(nodes);
|
|
||||||
|
|
||||||
node.enter().insert("circle", ".cursor")
|
|
||||||
.attr("class", "node")
|
|
||||||
.attr("r", 12)
|
|
||||||
.attr("id", function (d, i) {
|
|
||||||
return ("id_" + i)
|
|
||||||
})
|
|
||||||
.call(force.drag);
|
|
||||||
|
|
||||||
link = link.data(links);
|
|
||||||
|
|
||||||
link.enter().insert("line", ".node")
|
|
||||||
.attr("class", "link active linkgroup_"+ linkGroup);
|
|
||||||
|
|
||||||
force.start();
|
|
||||||
|
|
||||||
resetLink(linkGroup);
|
|
||||||
linkGroup++;
|
|
||||||
}
|
|
||||||
|
|
||||||
function resetLink(num){
|
|
||||||
setTimeout(resetColors, 700, num)
|
|
||||||
}
|
|
||||||
|
|
||||||
function resetColors(num){
|
|
||||||
svg.selectAll(".linkgroup_"+ num).classed('active', false)
|
|
||||||
}
|
|
||||||
|
|
||||||
window.onresize = function(){
|
|
||||||
resize();
|
|
||||||
}
|
|
||||||
|
|
||||||
function resize() {
|
|
||||||
var nodeC = document.getElementById('node-canvas');
|
|
||||||
wW = window.innerWidth;
|
|
||||||
|
|
||||||
nodeC.style.left = ((wW - width) / 2 ) + 'px';
|
|
||||||
}
|
|
||||||
|
|
||||||
//kick things off
|
|
||||||
function init() {
|
|
||||||
restart();
|
|
||||||
for (i=0;i<numberNodes;i++) {
|
|
||||||
setTimeout(createLink, 700*i+1000, i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Serf.Nodes = {};
|
|
||||||
Serf.Nodes.init = init;
|
|
||||||
|
|
||||||
})();
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
var APP=function(){function a(){APP.Utils.runIfClassNamePresent("page-home",b)}function b(){APP.Homepage.init()}return{initialize:a}}(),APP=APP||{};APP.Utils=function(){return{isMobile:function(){return navigator.userAgent.match(/Android/i)||navigator.userAgent.match(/webOS/i)||navigator.userAgent.match(/iPhone/i)||navigator.userAgent.match(/iPod/i)||navigator.userAgent.match(/BlackBerry/i)||navigator.userAgent.match(/Windows Phone/i)?!0:!1}(),runIfClassNamePresent:function(a,b){var c=document.getElementsByClassName(a);c.length>0&&b()}}}();var APP=APP||{};!function(){APP.Homepage=function(){return{ui:null,init:function(){this.ui={$doc:$(window),$hero:$("#jumbotron"),$pagination:null},this.addEventListeners()},addEventListeners:function(){var a=this;APP.Utils.isMobile||a.ui.$doc.scroll(function(){var b=a.ui.$doc.scrollTop(),c=.8*b,d=c-b;a.ui.$hero.css("webkitTransform","translate(0, "+c+"px)"),a.ui.$hero.find(".container").css("webkitTransform","translate(0, "+d+"px)")})}}}()}(jQuery,this);
|
|
@ -1,17 +0,0 @@
|
||||||
//
|
|
||||||
// home.js
|
|
||||||
//
|
|
||||||
var Serf = Serf || {};
|
|
||||||
|
|
||||||
(function () {
|
|
||||||
|
|
||||||
// calls the given function if the given classname is found
|
|
||||||
function mobileHero() {
|
|
||||||
var jumbo = document.getElementById('jumbotron');
|
|
||||||
jumbo.className = jumbo.className + ' mobile-hero';
|
|
||||||
}
|
|
||||||
|
|
||||||
Serf.Home = {};
|
|
||||||
Serf.Home.mobileHero = mobileHero;
|
|
||||||
|
|
||||||
})();
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
//homepage.js
|
||||||
|
|
||||||
|
var APP = APP || {};
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
APP.Homepage = (function () {
|
||||||
|
return {
|
||||||
|
|
||||||
|
ui : null,
|
||||||
|
|
||||||
|
init: function () {
|
||||||
|
var _this = this;
|
||||||
|
|
||||||
|
//cache elements
|
||||||
|
this.ui = {
|
||||||
|
$doc: $(window),
|
||||||
|
$hero: $('#jumbotron'),
|
||||||
|
$pagination: null
|
||||||
|
}
|
||||||
|
|
||||||
|
this.addEventListeners();
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
addEventListeners: function(){
|
||||||
|
var _this = this;
|
||||||
|
|
||||||
|
if(APP.Utils.isMobile)
|
||||||
|
return;
|
||||||
|
|
||||||
|
_this.ui.$doc.scroll(function() {
|
||||||
|
var top = _this.ui.$doc.scrollTop(),
|
||||||
|
speedAdj = (top*0.8),
|
||||||
|
speedAdjOffset = speedAdj - top;
|
||||||
|
|
||||||
|
_this.ui.$hero.css('webkitTransform', 'translate(0, '+ speedAdj +'px)');
|
||||||
|
_this.ui.$hero.find('.container').css('webkitTransform', 'translate(0, '+ speedAdjOffset +'px)');
|
||||||
|
//_this.ui.$pagination.css('webkitTransform', 'translate(0, '+ speedAdjOffset +'px)');
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}());
|
||||||
|
|
||||||
|
}(jQuery, this));
|
||||||
|
|
|
@ -1,163 +0,0 @@
|
||||||
//
|
|
||||||
// node.js
|
|
||||||
// animation on the home page
|
|
||||||
//
|
|
||||||
|
|
||||||
var Serf = Serf || {};
|
|
||||||
|
|
||||||
(function () {
|
|
||||||
|
|
||||||
var width = 1400,
|
|
||||||
height = 490,
|
|
||||||
border = 50,
|
|
||||||
numberNodes = 128,
|
|
||||||
linkGroup = 0;
|
|
||||||
//nodeLinks = [];
|
|
||||||
|
|
||||||
var nodes = [];
|
|
||||||
for (i=0; i<numberNodes; i++) {
|
|
||||||
nodes.push({
|
|
||||||
x: Math.random() * (width - border) + (border / 2),
|
|
||||||
y: Math.random() * (height - border) + (border / 2),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
var fill = d3.scale.category20();
|
|
||||||
|
|
||||||
var force = d3.layout.force()
|
|
||||||
.size([width, height])
|
|
||||||
.nodes(nodes)
|
|
||||||
.linkDistance(60)
|
|
||||||
.charge(-1)
|
|
||||||
.gravity(0.0004)
|
|
||||||
.on("tick", tick);
|
|
||||||
|
|
||||||
var svg = d3.select("#jumbotron").append("svg")
|
|
||||||
.attr('id', 'node-canvas')
|
|
||||||
.attr("width", width)
|
|
||||||
.attr("height", height)
|
|
||||||
|
|
||||||
//set left value after adding to dom
|
|
||||||
resize();
|
|
||||||
|
|
||||||
svg.append("rect")
|
|
||||||
.attr("width", width)
|
|
||||||
.attr("height", height);
|
|
||||||
|
|
||||||
var nodes = force.nodes(),
|
|
||||||
links = force.links(),
|
|
||||||
node = svg.selectAll(".node"),
|
|
||||||
link = svg.selectAll(".link");
|
|
||||||
|
|
||||||
var cursor = svg.append("circle")
|
|
||||||
.attr("r", 30)
|
|
||||||
.attr("transform", "translate(-100,-100)")
|
|
||||||
.attr("class", "cursor");
|
|
||||||
|
|
||||||
|
|
||||||
function createLink(index) {
|
|
||||||
var node = nodes[index];
|
|
||||||
var nodeSelected = svg.select("#id_" + node.index).classed("active linkgroup_"+ linkGroup, true);
|
|
||||||
|
|
||||||
var distMap = {};
|
|
||||||
var distances = [];
|
|
||||||
|
|
||||||
for (var i=0; i<nodes.length; i++) {
|
|
||||||
if (i == index) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
var target = nodes[i];
|
|
||||||
var selected = svg.select("#id_" + i);
|
|
||||||
var dx = selected.attr('cx') - nodeSelected.attr('cx');
|
|
||||||
var dy = selected.attr('cy') - nodeSelected.attr('cy');
|
|
||||||
var dist = Math.sqrt(dx * dx + dy * dy)
|
|
||||||
|
|
||||||
if (dist in distMap) {
|
|
||||||
distMap[dist].push(target)
|
|
||||||
} else {
|
|
||||||
distMap[dist] = [target]
|
|
||||||
}
|
|
||||||
distances.push(dist)
|
|
||||||
}
|
|
||||||
|
|
||||||
distances.sort(d3.ascending);
|
|
||||||
for (i = 0; i < 3; i++) {
|
|
||||||
var dist = distances[i]
|
|
||||||
var target = distMap[dist].pop()
|
|
||||||
var link = {
|
|
||||||
source: node,
|
|
||||||
target: target
|
|
||||||
}
|
|
||||||
links.push(link);
|
|
||||||
}
|
|
||||||
|
|
||||||
restart();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function tick() {
|
|
||||||
link.attr("x1", function(d) { return d.source.x; })
|
|
||||||
.attr("y1", function(d) { return d.source.y; })
|
|
||||||
.attr("x2", function(d) { return d.target.x; })
|
|
||||||
.attr("y2", function(d) { return d.target.y; });
|
|
||||||
|
|
||||||
node.attr("cx", function(d) { return d.x; })
|
|
||||||
.attr("cy", function(d) { return d.y; });
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function restart() {
|
|
||||||
|
|
||||||
node = node.data(nodes);
|
|
||||||
|
|
||||||
node.enter().insert("circle", ".cursor")
|
|
||||||
.attr("class", "node")
|
|
||||||
.attr("r", 12)
|
|
||||||
.attr("id", function (d, i) {
|
|
||||||
return ("id_" + i)
|
|
||||||
})
|
|
||||||
.call(force.drag);
|
|
||||||
|
|
||||||
link = link.data(links);
|
|
||||||
|
|
||||||
link.enter().insert("line", ".node")
|
|
||||||
.attr("class", "link active linkgroup_"+ linkGroup);
|
|
||||||
|
|
||||||
force.start();
|
|
||||||
|
|
||||||
resetLink(linkGroup);
|
|
||||||
linkGroup++;
|
|
||||||
}
|
|
||||||
|
|
||||||
function resetLink(num){
|
|
||||||
setTimeout(resetColors, 700, num)
|
|
||||||
}
|
|
||||||
|
|
||||||
function resetColors(num){
|
|
||||||
svg.selectAll(".linkgroup_"+ num).classed('active', false)
|
|
||||||
}
|
|
||||||
|
|
||||||
window.onresize = function(){
|
|
||||||
resize();
|
|
||||||
}
|
|
||||||
|
|
||||||
function resize() {
|
|
||||||
var nodeC = document.getElementById('node-canvas');
|
|
||||||
wW = window.innerWidth;
|
|
||||||
|
|
||||||
nodeC.style.left = ((wW - width) / 2 ) + 'px';
|
|
||||||
}
|
|
||||||
|
|
||||||
//kick things off
|
|
||||||
function init() {
|
|
||||||
restart();
|
|
||||||
for (i=0;i<numberNodes;i++) {
|
|
||||||
setTimeout(createLink, 700*i+1000, i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Serf.Nodes = {};
|
|
||||||
Serf.Nodes.init = init;
|
|
||||||
|
|
||||||
})();
|
|
|
@ -1,37 +1,33 @@
|
||||||
//
|
//
|
||||||
// util.js
|
// util.js
|
||||||
//
|
//
|
||||||
var Serf = Serf || {};
|
var APP = APP || {};
|
||||||
|
|
||||||
(function () {
|
|
||||||
|
|
||||||
|
APP.Utils = (function () {
|
||||||
|
return {
|
||||||
//check for mobile user agents
|
//check for mobile user agents
|
||||||
var isMobile = (function(){
|
isMobile : (function(){
|
||||||
if( navigator.userAgent.match(/Android/i)
|
if( navigator.userAgent.match(/Android/i)
|
||||||
|| navigator.userAgent.match(/webOS/i)
|
|| navigator.userAgent.match(/webOS/i)
|
||||||
|| navigator.userAgent.match(/iPhone/i)
|
|| navigator.userAgent.match(/iPhone/i)
|
||||||
//|| navigator.userAgent.match(/iPad/i)
|
//|| navigator.userAgent.match(/iPad/i)
|
||||||
|| navigator.userAgent.match(/iPod/i)
|
|| navigator.userAgent.match(/iPod/i)
|
||||||
|| navigator.userAgent.match(/BlackBerry/i)
|
|| navigator.userAgent.match(/BlackBerry/i)
|
||||||
|| navigator.userAgent.match(/Windows Phone/i)
|
|| navigator.userAgent.match(/Windows Phone/i)
|
||||||
){
|
){
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
})()
|
})(),
|
||||||
|
|
||||||
// calls the given function if the given classname is found
|
runIfClassNamePresent: function(selector, initFunction) {
|
||||||
function runIfClassNamePresent(selector, initFunction) {
|
var elms = document.getElementsByClassName(selector);
|
||||||
var elms = document.getElementsByClassName(selector);
|
if (elms.length > 0) {
|
||||||
if (elms.length > 0) {
|
initFunction();
|
||||||
initFunction();
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Serf.Util = {};
|
}());
|
||||||
Serf.Util.isMobile = isMobile;
|
|
||||||
Serf.Util.runIfClassNamePresent = runIfClassNamePresent;
|
|
||||||
|
|
||||||
})();
|
|
|
@ -1,197 +0,0 @@
|
||||||
function graph_settings() {
|
|
||||||
return {
|
|
||||||
chart: {
|
|
||||||
type: 'spline'
|
|
||||||
},
|
|
||||||
title: {
|
|
||||||
text: null
|
|
||||||
},
|
|
||||||
xAxis: {
|
|
||||||
title: {
|
|
||||||
text: "Time (sec)",
|
|
||||||
}
|
|
||||||
},
|
|
||||||
yAxis: {
|
|
||||||
title: {
|
|
||||||
text: 'Convergence %'
|
|
||||||
},
|
|
||||||
min: 0.0,
|
|
||||||
max: 100.0
|
|
||||||
},
|
|
||||||
tooltip: {
|
|
||||||
formatter: function() {
|
|
||||||
return '<b>'+ (Math.round(this.y*1000.0)/1000.0) +'%</b><br/>'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
legend: {
|
|
||||||
enabled: false
|
|
||||||
},
|
|
||||||
series: [{
|
|
||||||
name: 'Convergence Rate',
|
|
||||||
data: []
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function create_graph() {
|
|
||||||
$('#graph').highcharts(graph_settings())
|
|
||||||
return $('#graph').highcharts()
|
|
||||||
}
|
|
||||||
|
|
||||||
var Simulator = Class.$extend({
|
|
||||||
__init__ : function(graph, bytes, maxConverge) {
|
|
||||||
this.graph = graph
|
|
||||||
this.bytes = bytes
|
|
||||||
this.maxConverge = maxConverge
|
|
||||||
this.interval = 0.2
|
|
||||||
this.fanout = 3
|
|
||||||
this.nodes = 30
|
|
||||||
this.packetLoss = 0
|
|
||||||
this.nodeFail = 0
|
|
||||||
},
|
|
||||||
|
|
||||||
convergenceAtRound: function(x) {
|
|
||||||
var contact = (this.fanout / this.nodes) * (1 - this.packetLoss) * (1 - this.nodeFail) * 0.5
|
|
||||||
var numInf = this.nodes / (1 + (this.nodes+1) * Math.pow(Math.E, -1*contact*this.nodes*x))
|
|
||||||
return numInf / this.nodes
|
|
||||||
},
|
|
||||||
|
|
||||||
roundLength: function() {
|
|
||||||
return this.interval
|
|
||||||
},
|
|
||||||
|
|
||||||
seriesData: function() {
|
|
||||||
var data = []
|
|
||||||
var lastVal = 0
|
|
||||||
var round = 0
|
|
||||||
var roundLength = this.roundLength()
|
|
||||||
while (lastVal < this.maxConverge && round < 100) {
|
|
||||||
lastVal = this.convergenceAtRound(round)
|
|
||||||
data.push([round * roundLength, lastVal*100.0])
|
|
||||||
round++
|
|
||||||
}
|
|
||||||
return data
|
|
||||||
},
|
|
||||||
|
|
||||||
bytesUsed: function() {
|
|
||||||
var roundLength = this.roundLength()
|
|
||||||
var roundsPerSec = 1 / roundLength
|
|
||||||
var packetSize = 1400
|
|
||||||
var send = packetSize * this.fanout * roundsPerSec
|
|
||||||
return send * 2
|
|
||||||
},
|
|
||||||
|
|
||||||
draw: function() {
|
|
||||||
var data = this.seriesData()
|
|
||||||
this.graph.series[0].setData(data, false)
|
|
||||||
this.graph.redraw()
|
|
||||||
|
|
||||||
var kilobits = this.bytesUsed() * 8
|
|
||||||
var used = Math.round((kilobits / 1024) * 10) / 10
|
|
||||||
this.bytes.html(""+used)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
function update_interval(elem, simulator) {
|
|
||||||
var val = elem.value
|
|
||||||
var interval = Number(val)
|
|
||||||
if (isNaN(interval)) {
|
|
||||||
alert("Gossip interval must be a number!")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (interval <= 0) {
|
|
||||||
alert("Gossip interval must be a positive value!")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
simulator.interval = interval
|
|
||||||
simulator.draw()
|
|
||||||
console.log("Redraw with interval set to: " + interval)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function update_fanout(elem, simulator) {
|
|
||||||
var val = elem.value
|
|
||||||
var fanout = Number(val)
|
|
||||||
if (isNaN(fanout)) {
|
|
||||||
alert("Gossip fanout must be a number!")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (fanout <= 0) {
|
|
||||||
alert("Gossip fanout must be a positive value!")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
simulator.fanout = fanout
|
|
||||||
simulator.draw()
|
|
||||||
console.log("Redraw with fanout set to: " + fanout)
|
|
||||||
}
|
|
||||||
|
|
||||||
function update_nodes(elem, simulator) {
|
|
||||||
var val = elem.value
|
|
||||||
var nodes = Number(val)
|
|
||||||
if (isNaN(nodes)) {
|
|
||||||
alert("Node count must be a number!")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (nodes <= 1) {
|
|
||||||
alert("Must have at least one node")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
simulator.nodes = nodes
|
|
||||||
simulator.draw()
|
|
||||||
console.log("Redraw with nodes set to: " + nodes)
|
|
||||||
}
|
|
||||||
|
|
||||||
function update_packetloss(elem, simulator) {
|
|
||||||
var val = elem.value
|
|
||||||
var pkt = Number(val)
|
|
||||||
if (isNaN(pkt)) {
|
|
||||||
alert("Packet loss must be a number!")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (pkt < 0 || pkt >= 100) {
|
|
||||||
alert("Packet loss must be greater or equal to 0 and less than 100")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
simulator.packetLoss = (pkt / 100.0)
|
|
||||||
simulator.draw()
|
|
||||||
console.log("Redraw with packet loss set to: " + pkt)
|
|
||||||
}
|
|
||||||
|
|
||||||
function update_failed(elem, simulator) {
|
|
||||||
var val = elem.value
|
|
||||||
var failed = Number(val)
|
|
||||||
if (isNaN(failed)) {
|
|
||||||
alert("Failure rate must be a number!")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (failed < 0 || failed >= 100) {
|
|
||||||
alert("Failure rate must be greater or equal to 0 and less than 100")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
simulator.nodeFail = (failed / 100.0)
|
|
||||||
simulator.draw()
|
|
||||||
console.log("Redraw with failure rate set to: " + failed)
|
|
||||||
}
|
|
||||||
|
|
||||||
// wait for dom ready
|
|
||||||
$(function(){
|
|
||||||
var bytes = $("#bytes")
|
|
||||||
var graph = create_graph()
|
|
||||||
var simulator = new Simulator(graph, bytes, 0.9999)
|
|
||||||
simulator.draw()
|
|
||||||
|
|
||||||
var interval = $("#interval")
|
|
||||||
interval.change(function() { update_interval(interval[0], simulator) })
|
|
||||||
|
|
||||||
var fanout = $("#fanout")
|
|
||||||
fanout.change(function() { update_fanout(fanout[0], simulator) })
|
|
||||||
|
|
||||||
var nodes = $("#nodes")
|
|
||||||
nodes.change(function() { update_nodes(nodes[0], simulator) })
|
|
||||||
|
|
||||||
var loss = $("#packetloss")
|
|
||||||
loss.change(function() { update_packetloss(loss[0], simulator) })
|
|
||||||
|
|
||||||
var failed = $("#failed")
|
|
||||||
failed.change(function() { update_failed(failed[0], simulator) })
|
|
||||||
})
|
|
|
@ -8,8 +8,8 @@
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<ul class="buttons nav navbar-nav rls-sb">
|
<ul class="buttons nav navbar-nav rls-sb">
|
||||||
<li class="first"><a href="/downloads.html">Download</a></li>
|
<li class="first download outline-btn purple"><a href="/downloads.html">Download</a></li>
|
||||||
<li><a href="https://github.com/hashicorp/serf">Github</a></li>
|
<li class="github outline-btn purple"><a href="https://github.com/hashicorp/serf">Github</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="footer-logo">
|
<div class="footer-logo">
|
||||||
|
@ -17,16 +17,17 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="footer-hashi os">
|
<div class="footer-hashi os">
|
||||||
<span>© 2013. A <a href="http://www.hashicorp.com">HashiCorp</a> Project.</span>
|
<span>© 2013. A <a href="http://www.hashicorp.com">HashiCorp</a> Project.</span>
|
||||||
<a href="http://www.hashicorp.com"><img src="/images/hashi-logo-s.png"></a>
|
<a href="http://www.hashicorp.com"><img src="/images/footer-hashicorp-logo.png"></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="javascripts/lib/d3.v3.min.js"></script>
|
<script src="javascripts/lib/jquery-2.0.3.min.js"></script>
|
||||||
|
<script src="javascripts/lib/bootstrap.min.js"></script>
|
||||||
<script src="javascripts/app/deploy/site.js"></script>
|
<script src="javascripts/app/deploy/site.js"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
Serf.initialize();
|
APP.initialize();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
|
@ -7,15 +7,20 @@
|
||||||
<meta name="author" content="">
|
<meta name="author" content="">
|
||||||
<!-- <link rel="shortcut icon" href="../../assets/ico/favicon.png"> -->
|
<!-- <link rel="shortcut icon" href="../../assets/ico/favicon.png"> -->
|
||||||
|
|
||||||
<title><%= current_page.data.page_title ? "#{current_page.data.page_title} - " : "" %>Serf</title>
|
<title><%= current_page.data.page_title ? "#{current_page.data.page_title} - " : "" %>Consul</title>
|
||||||
|
|
||||||
<!-- Bootstrap core CSS -->
|
<!-- Bootstrap core CSS -->
|
||||||
<%= stylesheet_link_tag "bootstrap.min" %>
|
<%= stylesheet_link_tag "bootstrap.min" %>
|
||||||
<%= stylesheet_link_tag "main" %>
|
<%= stylesheet_link_tag "main" %>
|
||||||
|
|
||||||
<!-- google fonts -->
|
<!-- google fonts -->
|
||||||
<!-- <link href='http://fonts.googleapis.com/css?family=Raleway:200,400,600,800|Source+Sans+Pro:400,700' rel='stylesheet' type='text/css'>
|
<!-- <link href='http://fonts.googleapis.com/css?family=Source+Sans+Pro:400,700' rel='stylesheet' type='text/css'>
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
<!-- typekit -->
|
||||||
|
<script type="text/javascript" src="//use.typekit.net/kgv0shi.js"></script>
|
||||||
|
<script type="text/javascript">try{Typekit.load();}catch(e){}</script>
|
||||||
|
|
||||||
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||||
<!--[if lt IE 9]>
|
<!--[if lt IE 9]>
|
||||||
<%= javascript_include_tag "html5shiv", "respond.min" %>
|
<%= javascript_include_tag "html5shiv", "respond.min" %>
|
||||||
|
@ -35,23 +40,32 @@
|
||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body class="page-<%= current_page.data.page_title ? "#{current_page.data.page_title}" : "home" %>">
|
<body class="page-<%= current_page.data.page_title ? "#{current_page.data.page_title}" : "home" %>">
|
||||||
<div id="header">
|
<div id="header" class="<%= current_page.data.page_title == "home" ? "" : "navbar-static-top" %>">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<a class="navbar-brand logo" href="/">
|
<div class="navbar-header">
|
||||||
<span></span>
|
<button class="navbar-toggle" type="button" data-toggle="collapse" data-target=".bs-navbar-collapse">
|
||||||
</a>
|
<span class="sr-only">Toggle navigation</span>
|
||||||
<a class="navbar-brand text rls-l" href="/">SERF</a>
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
</button>
|
||||||
|
<a class="navbar-brand logo" href="/">
|
||||||
|
<span></span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
<ul class="buttons nav navbar-nav navbar-right rls-sb">
|
<nav class="collapse navbar-collapse bs-navbar-collapse" role="navigation">
|
||||||
<li class="first"><a href="/downloads.html">Download</a></li>
|
<ul class="buttons nav navbar-nav navbar-right rls-sb">
|
||||||
<li><a href="https://github.com/hashicorp/serf">Github</a></li>
|
<li class="first download outline-btn"><a href="/downloads.html">Download</a></li>
|
||||||
</ul>
|
<li class="github outline-btn"><a href="https://github.com/hashicorp/consul">Github</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
<ul class="main-links nav navbar-nav navbar-right rls-sb">
|
<ul class="main-links nav navbar-nav navbar-right rls-sb">
|
||||||
<li><a href="/intro/index.html">Intro</a></li>
|
<li class="first"><a href="/intro/index.html">Intro</a></li>
|
||||||
<li><a href="/docs/index.html">Docs</a></li>
|
<li><a href="/docs/index.html">Docs</a></li>
|
||||||
<li><a href="/community.html">Community</a></li>
|
<li><a href="/community.html">Community</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
{
|
{
|
||||||
"name": "serf"
|
"name": "consul"
|
||||||
, "description": ""
|
, "description": ""
|
||||||
, "version": "1.0.0"
|
, "version": "1.0.0"
|
||||||
, "devDependencies": {
|
, "devDependencies": {
|
||||||
"grunt": "~0.4.1"
|
"grunt": "~0.4.1"
|
||||||
|
, "grunt-contrib-less": "~0.11.0"
|
||||||
, "grunt-contrib-clean": "~0.5.0"
|
, "grunt-contrib-clean": "~0.5.0"
|
||||||
, "grunt-contrib-connect": "~0.3.0"
|
, "grunt-contrib-connect": "~0.3.0"
|
||||||
, "grunt-contrib-concat": "~0.3.0"
|
, "grunt-contrib-concat": "~0.3.0"
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
//
|
||||||
|
// Button Styles
|
||||||
|
// --------------------------------------------------
|
||||||
|
|
||||||
|
.outline-btn{
|
||||||
|
background-color: transparent;
|
||||||
|
color: @white;
|
||||||
|
border: 2px solid @white;
|
||||||
|
border-radius: @btn-border-radius;
|
||||||
|
text-decoration: none !important;
|
||||||
|
.transition(background-color .3s ease-in-out);
|
||||||
|
|
||||||
|
&.purple{
|
||||||
|
color: @purple;
|
||||||
|
border: 2px solid @purple;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover{
|
||||||
|
color: @white;
|
||||||
|
background-color: rgba(255, 255, 255, .2);
|
||||||
|
.transition(background-color .3s ease-in-out);
|
||||||
|
|
||||||
|
&.purple{
|
||||||
|
background-color: rgba(255, 255, 255, .5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -55,7 +55,7 @@
|
||||||
left: -10px;
|
left: -10px;
|
||||||
}
|
}
|
||||||
> a{
|
> a{
|
||||||
font-weight: @font-weight-rales-xb;
|
font-weight: @font-weight-museo-xb;
|
||||||
-webkit-font-smoothing: antialiased;
|
-webkit-font-smoothing: antialiased;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,8 +75,8 @@
|
||||||
|
|
||||||
> a {
|
> a {
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
font-family: @font-family-rales;
|
font-family: @font-family-museo;
|
||||||
font-weight: @font-weight-rales-sb;
|
font-weight: @font-weight-museo-sb;
|
||||||
-webkit-font-smoothing: antialiased;
|
-webkit-font-smoothing: antialiased;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,20 +4,20 @@
|
||||||
|
|
||||||
//light
|
//light
|
||||||
.rls-l{
|
.rls-l{
|
||||||
font-family: @font-family-rales;
|
font-family: @font-family-museo;
|
||||||
font-weight: @font-weight-rales-xl;
|
font-weight: @font-weight-museo-xl;
|
||||||
}
|
}
|
||||||
|
|
||||||
//semibold
|
//semibold
|
||||||
.rls-sb{
|
.rls-sb{
|
||||||
font-family: @font-family-rales;
|
font-family: @font-family-museo;
|
||||||
font-weight: @font-weight-rales-sb;
|
font-weight: @font-weight-museo-sb;
|
||||||
}
|
}
|
||||||
|
|
||||||
//extrabold
|
//extrabold
|
||||||
.rls-xb{
|
.rls-xb{
|
||||||
font-family: @font-family-rales;
|
font-family: @font-family-museo;
|
||||||
font-weight: @font-weight-rales-xb;
|
font-weight: @font-weight-museo-xb;
|
||||||
}
|
}
|
||||||
|
|
||||||
.os{
|
.os{
|
||||||
|
|
|
@ -14,16 +14,16 @@ body {
|
||||||
h1{
|
h1{
|
||||||
font-size: 42px;
|
font-size: 42px;
|
||||||
line-height: 42px;
|
line-height: 42px;
|
||||||
font-family: @font-family-rales;
|
font-family: @font-family-museo;
|
||||||
font-weight: @font-weight-rales-sb;
|
font-weight: @font-weight-museo-sb;
|
||||||
margin-bottom: 24px;
|
margin-bottom: 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
h3{
|
h3{
|
||||||
font-size: 28px;
|
font-size: 28px;
|
||||||
line-height: 28px;
|
line-height: 28px;
|
||||||
font-family: @font-family-rales;
|
font-family: @font-family-museo;
|
||||||
font-weight: @font-weight-rales-sb;
|
font-weight: @font-weight-museo-sb;
|
||||||
}
|
}
|
||||||
|
|
||||||
//an alternative color for buttons in the doc body
|
//an alternative color for buttons in the doc body
|
||||||
|
|
|
@ -4,92 +4,275 @@
|
||||||
|
|
||||||
#footer,
|
#footer,
|
||||||
#header {
|
#header {
|
||||||
color: @white;
|
.anti-alias();
|
||||||
background-color: @black;
|
position: relative;
|
||||||
text-rendering: optimizeLegibility;
|
|
||||||
|
|
||||||
a{
|
|
||||||
color: @white;
|
color: @white;
|
||||||
}
|
text-rendering: optimizeLegibility;
|
||||||
|
margin-bottom: 0;
|
||||||
|
|
||||||
.navbar-brand {
|
.navbar-collapse{
|
||||||
&.logo{
|
box-shadow: none;
|
||||||
padding: 13px 15px;
|
|
||||||
line-height: 0;
|
|
||||||
|
|
||||||
span{
|
|
||||||
display: inline-block;
|
|
||||||
width: 52px;
|
|
||||||
height: 62px;
|
|
||||||
background: url(../images/logo-type-medium.png) 0 0 no-repeat;
|
|
||||||
.img-retina("../images/logo-type-medium.png", "../images/logo-type-medium@2x.png", 52px, 64px);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
&.text{
|
&.navbar-static-top{
|
||||||
font-size: 36px;
|
z-index: 1000;
|
||||||
line-height: 62px;
|
|
||||||
letter-spacing: 14px;
|
|
||||||
text-shadow: @text-shadow;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.navbar-nav{
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
li > a {
|
|
||||||
font-size: 14px;
|
|
||||||
text-transform: uppercase;
|
|
||||||
letter-spacing: 3px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav > li > a:hover, .nav > li > a:focus {
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
.main-links.navbar-nav{
|
|
||||||
li + li a::before {
|
|
||||||
content: " | ";
|
|
||||||
padding-right: 15px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
li > a {
|
a{
|
||||||
line-height: 62px;
|
color: @white;
|
||||||
text-shadow: @text-shadow;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
.navbar-toggle{
|
||||||
|
margin-top: 14px;
|
||||||
|
border: 2px solid @white;
|
||||||
|
.icon-bar{
|
||||||
|
border: 1px solid @white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.buttons.navbar-nav{
|
.navbar-brand {
|
||||||
margin-top: 30px;
|
&.logo{
|
||||||
margin-left: 30px;
|
padding: 13px 15px;
|
||||||
background-color: @red-dark;
|
line-height: 0;
|
||||||
border-radius: @btn-border-radius;
|
|
||||||
.box-shadow( @shadow );
|
|
||||||
|
|
||||||
li.first{
|
span{
|
||||||
border-right: 2px solid @red-darker;
|
display: inline-block;
|
||||||
|
width: 179px;
|
||||||
|
height: 59px;
|
||||||
|
background: url(../images/consul-header-logo.png) 0 0 no-repeat;
|
||||||
|
.img-retina("../images/consul-header-logo.png", "../images/consul-header-logo@2x.png", 179px, 59px);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
li > a {
|
.navbar-nav{
|
||||||
padding-top: 6px;
|
-webkit-font-smoothing: antialiased;
|
||||||
padding-bottom: 6px;
|
li{
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
> a {
|
||||||
|
font-size: 12px;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 3px;
|
||||||
|
padding-left: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.first{
|
||||||
|
>a{
|
||||||
|
padding-left: 15px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav > li > a:hover, .nav > li > a:focus {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-links.navbar-nav{
|
||||||
|
li + li a::before {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
top: 35px;
|
||||||
|
width: 4px;
|
||||||
|
height: 23px;
|
||||||
|
background: url(../images/nav-dotpipes.png) 0 0 no-repeat;
|
||||||
|
.img-retina("../images/nav-dotpipes.png", "../images/nav-dotpipes@2x.png", 4px, 23px);
|
||||||
|
padding-right: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
li > a {
|
||||||
|
line-height: 62px;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.buttons.navbar-nav{
|
||||||
|
margin-top: 26px;
|
||||||
|
margin-left: 30px;
|
||||||
|
|
||||||
|
li{
|
||||||
|
&.first{
|
||||||
|
margin-right: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.download{
|
||||||
|
a{
|
||||||
|
background: url(../images/icon-download.png) 8px 6px no-repeat;
|
||||||
|
.img-retina("../images/icon-download.png", "../images/icon-download@2x.png", 20px, 20px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.github{
|
||||||
|
a{
|
||||||
|
background: url(../images/icon-github.png) 8px 6px no-repeat;
|
||||||
|
.img-retina("../images/icon-github.png", "../images/icon-github@2x.png", 20px, 20px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
li > a {
|
||||||
|
padding-top: 6px;
|
||||||
|
padding-bottom: 6px;
|
||||||
|
padding-left: 40px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#footer{
|
#footer{
|
||||||
text-align: center;
|
height: 700px;
|
||||||
.main-links.navbar-nav{
|
text-align: center;
|
||||||
float: none;
|
color: @purple;
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
.main-links.navbar-nav{
|
||||||
|
float: none;
|
||||||
|
display: inline-block;
|
||||||
|
padding-top: 155px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer-hashi{
|
||||||
|
padding-top: 110px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a{
|
||||||
|
color: @purple;
|
||||||
|
}
|
||||||
|
|
||||||
|
.buttons.navbar-nav{
|
||||||
|
float: none;
|
||||||
|
display: inline-block;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
margin-top: 0px;
|
||||||
|
|
||||||
|
li{
|
||||||
|
&.first{
|
||||||
|
margin-right: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.download{
|
||||||
|
a{
|
||||||
|
background: url(../images/icon-download-purple.png) 8px 6px no-repeat;
|
||||||
|
.img-retina("../images/icon-download-purple.png", "../images/icon-download-purple@2x.png", 20px, 20px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.github{
|
||||||
|
a{
|
||||||
|
background: url(../images/icon-github-purple.png) 8px 6px no-repeat;
|
||||||
|
.img-retina("../images/icon-github-purple.png", "../images/icon-github-purple@2x.png", 20px, 20px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
li > a {
|
||||||
|
padding-top: 6px;
|
||||||
|
padding-bottom: 6px;
|
||||||
|
padding-left: 40px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@media (max-width: 992px) {
|
||||||
|
#header {
|
||||||
|
.navbar-brand {
|
||||||
|
&.logo{
|
||||||
|
span{
|
||||||
|
width: 120px;
|
||||||
|
height: 39px;
|
||||||
|
margin-top: 12px;
|
||||||
|
background-size: 120px 39px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.buttons.navbar-nav{
|
||||||
|
li{
|
||||||
|
a{
|
||||||
|
background: none !important;
|
||||||
|
padding-left: 15px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
#header{
|
||||||
|
background: #694a9c; /* Old browsers */
|
||||||
|
background: -moz-linear-gradient(left, #694a9c 0%, #cd2028 100%); /* FF3.6+ */
|
||||||
|
background: -webkit-gradient(linear, left top, right top, color-stop(0%,#694a9c), color-stop(100%,#cd2028)); /* Chrome,Safari4+ */
|
||||||
|
background: -webkit-linear-gradient(left, #694a9c 0%,#cd2028 100%); /* Chrome10+,Safari5.1+ */
|
||||||
|
background: -o-linear-gradient(left, #694a9c 0%,#cd2028 100%); /* Opera 11.10+ */
|
||||||
|
background: -ms-linear-gradient(left, #694a9c 0%,#cd2028 100%); /* IE10+ */
|
||||||
|
background: linear-gradient(to right, #694a9c 0%,#cd2028 100%); /* W3C */
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#694a9c', endColorstr='#cd2028',GradientType=1 ); /* IE6-9 */
|
||||||
|
|
||||||
|
.navbar-right{
|
||||||
|
float: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-links.navbar-nav{
|
||||||
|
padding-bottom: 15px;
|
||||||
|
li{
|
||||||
|
margin-top: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
li + li a::before {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
li > a {
|
||||||
|
padding: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
line-height: 22px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-brand {
|
||||||
|
&.logo{
|
||||||
|
span{
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-nav > li{
|
||||||
|
float: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.buttons.navbar-nav{
|
||||||
|
margin-top: 15px;
|
||||||
|
margin-left: 0px;
|
||||||
|
|
||||||
|
li{
|
||||||
|
a{
|
||||||
|
padding-left: 40px;
|
||||||
|
}
|
||||||
|
&.first{
|
||||||
|
margin-right: 0;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.download{
|
||||||
|
a{
|
||||||
|
background: url(../images/icon-download.png) 8px 6px no-repeat !important;;
|
||||||
|
.img-retina("../images/icon-download.png", "../images/icon-download@2x.png", 20px, 20px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.github{
|
||||||
|
a{
|
||||||
|
background: url(../images/icon-github.png) 8px 6px no-repeat !important;;
|
||||||
|
.img-retina("../images/icon-github.png", "../images/icon-github@2x.png", 20px, 20px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 480px) {
|
||||||
|
|
||||||
.buttons.navbar-nav{
|
|
||||||
float: none;
|
|
||||||
display: inline-block;
|
|
||||||
margin-bottom: 30px;
|
|
||||||
margin-top: 0px;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,48 +4,55 @@
|
||||||
|
|
||||||
#features{
|
#features{
|
||||||
.anti-alias();
|
.anti-alias();
|
||||||
padding: 90px 0 0 0;
|
padding: 130px 0 0 0;
|
||||||
|
background: #f8f8f8 url(../images/hero-dots-below@2x.png) center top no-repeat;
|
||||||
|
background-size: 1280px 49px;
|
||||||
|
|
||||||
.row{
|
.double-row{
|
||||||
padding: 0 0 90px 0;
|
padding: 0 0 60px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
h2{
|
h2{
|
||||||
font-size: 32px;
|
font-size: 24px;
|
||||||
letter-spacing: 2px;
|
letter-spacing: 2px;
|
||||||
color: @gray;
|
color: @purple;
|
||||||
text-transform: uppercase;
|
font-family: @font-family-museo;
|
||||||
font-family: @font-family-rales;
|
font-weight: @font-weight-museo-xb;
|
||||||
font-weight: @font-weight-rales-sb;
|
|
||||||
}
|
}
|
||||||
p{
|
p{
|
||||||
font-size: 18px;
|
font-size: 16px;
|
||||||
letter-spacing: 1px;
|
letter-spacing: 1px;
|
||||||
line-height: 1.5em;
|
line-height: 1.5em;
|
||||||
color: @gray-darker;
|
color: @consul-gray;
|
||||||
font-family: @font-family-open-sans;
|
font-family: @font-family-museo;
|
||||||
font-weight: @font-weight-open;
|
font-weight: @font-weight-museo-sb;
|
||||||
}
|
}
|
||||||
|
|
||||||
.icn{
|
.icn{
|
||||||
display: block;
|
display: block;
|
||||||
width: 286px;
|
width: 186px;
|
||||||
height: 286px;
|
height: 272px;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
background-size: 286px 286px;
|
background-position: center 0;
|
||||||
background-position: 0 0;
|
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
}
|
}
|
||||||
|
|
||||||
.icn1{
|
.discovery{
|
||||||
background-image: url( ../images/gossip-proto-icon@2x.png);
|
background-image: url( ../images/feature-discovery@2x.png);
|
||||||
|
background-size: 181px 181px;
|
||||||
}
|
}
|
||||||
.icn2{
|
.health{
|
||||||
background-image: url( ../images/failure-detect-icon@2x.png);
|
background-image: url( ../images/feature-health@2x.png);
|
||||||
|
background-size: 125px 179px;
|
||||||
}
|
}
|
||||||
.icn3{
|
.multi{
|
||||||
background-image: url( ../images/custom-event-icon@2x.png);
|
background-image: url( ../images/feature-multi@2x.png);
|
||||||
|
background-size: 182px 184px;
|
||||||
}
|
}
|
||||||
|
.config{
|
||||||
|
background-image: url( ../images/feature-config@2x.png);
|
||||||
|
background-size: 157px 179px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#trusted{
|
#trusted{
|
||||||
|
@ -119,37 +126,49 @@
|
||||||
|
|
||||||
#footer{
|
#footer{
|
||||||
padding: 50px 0;
|
padding: 50px 0;
|
||||||
background: @black url(../images/footer-pattern.jpg);
|
background-color: @consul-footer-gray;
|
||||||
|
background: @consul-footer-gray url(../images/consul-footer-logo.png) center center no-repeat;
|
||||||
|
.img-retina("../images/consul-footer-logo.png", "../images/consul-footer-logo@2x.png", 446px, 443px);
|
||||||
|
|
||||||
.footer-links{
|
.footer-links{
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.footer-logo{
|
|
||||||
span{
|
|
||||||
display: inline-block;
|
|
||||||
width: 206px;
|
|
||||||
height: 206px;
|
|
||||||
margin-bottom: 30px;
|
|
||||||
border-radius: 103px;
|
|
||||||
background: @black url(../images/logo-type-medium.png) center center no-repeat;
|
|
||||||
.img-retina("../images/logo-type-medium.png", "../images/logo-type-medium@2x.png", 72px, 94px);
|
|
||||||
.box-shadow( 0px 0px 5px rgba(0, 0, 0, 0.04) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.footer-hashi{
|
.footer-hashi{
|
||||||
letter-spacing: 2px;
|
letter-spacing: 2px;
|
||||||
margin-bottom: 30px;
|
margin-bottom: 30px;
|
||||||
span{
|
|
||||||
margin-right: 20px;
|
a{
|
||||||
}
|
font-weight: @font-weight-museo-xb;
|
||||||
|
}
|
||||||
|
|
||||||
|
span{
|
||||||
|
margin-right: 20px;
|
||||||
|
}
|
||||||
img{
|
img{
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 37px;
|
width: 37px;
|
||||||
height: 40px;
|
height: 40px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@media (max-width: 992px) {
|
||||||
|
#features{
|
||||||
|
.double-row{
|
||||||
|
padding: 0 0 0 0;
|
||||||
|
.row{
|
||||||
|
padding-bottom: 90px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.icn{
|
||||||
|
height: 200px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -2,15 +2,27 @@
|
||||||
// Jumbotron
|
// Jumbotron
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
|
|
||||||
|
#jumbotron-mask{
|
||||||
|
overflow: hidden;
|
||||||
|
height: @jumbotron-total-height;
|
||||||
|
margin-top: -92px;
|
||||||
|
}
|
||||||
|
|
||||||
#jumbotron {
|
#jumbotron {
|
||||||
position: relative;
|
position: relative;
|
||||||
height: @jumbotron-height;
|
height: @jumbotron-total-height;
|
||||||
color: @jumbotron-color;
|
|
||||||
background-color: @gray-light;
|
|
||||||
padding-top: 0;
|
padding-top: 0;
|
||||||
padding-bottom: 0;
|
padding-bottom: 0;
|
||||||
overflow: hidden;
|
margin-top: -92px;
|
||||||
|
color: @jumbotron-color;
|
||||||
|
background: #694a9c; /* Old browsers */
|
||||||
|
background: -moz-linear-gradient(left, #694a9c 0%, #cd2028 100%); /* FF3.6+ */
|
||||||
|
background: -webkit-gradient(linear, left top, right top, color-stop(0%,#694a9c), color-stop(100%,#cd2028)); /* Chrome,Safari4+ */
|
||||||
|
background: -webkit-linear-gradient(left, #694a9c 0%,#cd2028 100%); /* Chrome10+,Safari5.1+ */
|
||||||
|
background: -o-linear-gradient(left, #694a9c 0%,#cd2028 100%); /* Opera 11.10+ */
|
||||||
|
background: -ms-linear-gradient(left, #694a9c 0%,#cd2028 100%); /* IE10+ */
|
||||||
|
background: linear-gradient(to right, #694a9c 0%,#cd2028 100%); /* W3C */
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#694a9c', endColorstr='#cd2028',GradientType=1 ); /* IE6-9 */
|
||||||
|
|
||||||
&.mobile-hero{
|
&.mobile-hero{
|
||||||
background: transparent url( ../images/node-hero-pattern.jpg ) center center;
|
background: transparent url( ../images/node-hero-pattern.jpg ) center center;
|
||||||
|
@ -18,32 +30,41 @@
|
||||||
background: -webkit-image-set( url('../images/node-hero-pattern.jpg') 1x, url('../images/node-hero-pattern@2x.jpg') 2x );
|
background: -webkit-image-set( url('../images/node-hero-pattern.jpg') 1x, url('../images/node-hero-pattern@2x.jpg') 2x );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.jumbotron-dots{
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
height: 632px;
|
||||||
|
width: 100%;
|
||||||
|
margin-top: -92px;
|
||||||
|
background: transparent url('../images/hero-dots.png') center @header-height no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
.container{
|
.container{
|
||||||
position: relative;
|
position: relative;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
margin-top: @header-height;
|
||||||
|
|
||||||
.jumbo-logo{
|
.jumbo-logo-wrap{
|
||||||
position: absolute;
|
margin-top: 135px;
|
||||||
bottom: 0;
|
|
||||||
right: -150px;
|
|
||||||
width: 726px;
|
|
||||||
height: 454px;
|
|
||||||
background: transparent url( ../images/logo-circle-logo@2x.png ) 0 0 no-repeat;
|
|
||||||
background-size: 726px 454px;
|
|
||||||
z-index: 20;
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.col-lg-5{
|
.jumbo-logo{
|
||||||
z-index: 20;
|
width: 318px;
|
||||||
pointer-events: none;
|
height: 316px;
|
||||||
|
background: transparent url( ../images/consul-hero-logo@2x.png ) 0 0 no-repeat;
|
||||||
|
background-size: 318px 316px;
|
||||||
|
z-index: 20;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
h2{
|
h2{
|
||||||
margin-top: 140px;
|
margin-top: 190px;
|
||||||
font-size: 28px;
|
font-size: 40px;
|
||||||
line-height: 38px;
|
line-height: 48px;
|
||||||
letter-spacing: 2px;
|
letter-spacing: 1px;
|
||||||
|
margin-left: 40px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,53 +0,0 @@
|
||||||
//
|
|
||||||
// Node animation
|
|
||||||
// --------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
#node-canvas{
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
width: 1400px;
|
|
||||||
background-color: transparent;
|
|
||||||
|
|
||||||
rect {
|
|
||||||
fill: none;
|
|
||||||
pointer-events: all;
|
|
||||||
}
|
|
||||||
|
|
||||||
.node {
|
|
||||||
/*fill: #a7a7a7;*/
|
|
||||||
fill: #939393;
|
|
||||||
stroke: #bbb;
|
|
||||||
z-index: 100;
|
|
||||||
transition-property: stroke fill;
|
|
||||||
transition-duration: 1s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.node.active {
|
|
||||||
/*fill: #bbb; */
|
|
||||||
stroke: #dd4e58;
|
|
||||||
transition-property: stroke fill;
|
|
||||||
transition-duration: 1s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cursor {
|
|
||||||
fill: none;
|
|
||||||
stroke: brown;
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.link {
|
|
||||||
stroke: #bbb;
|
|
||||||
stroke-width: 1.5;
|
|
||||||
z-index: 0;
|
|
||||||
transition-property: stroke fill;
|
|
||||||
transition-duration: 1s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.link.active{
|
|
||||||
stroke: #dd4e58;
|
|
||||||
transition-property: stroke;
|
|
||||||
transition-duration: 1s;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -6,7 +6,9 @@
|
||||||
// Global values
|
// Global values
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
|
|
||||||
@jumbotron-height: 490px;
|
@jumbotron-height: 540px;
|
||||||
|
@header-height: 92px;
|
||||||
|
@jumbotron-total-height: 542px; //jumbo+header
|
||||||
@jumbotron-color: #fff;
|
@jumbotron-color: #fff;
|
||||||
@btn-border-radius: 4px;
|
@btn-border-radius: 4px;
|
||||||
@el-border-radius: 6px;
|
@el-border-radius: 6px;
|
||||||
|
@ -23,6 +25,9 @@
|
||||||
@red-dark: #c5454e;
|
@red-dark: #c5454e;
|
||||||
@red-darker: #b03c44;
|
@red-darker: #b03c44;
|
||||||
@tan: #f0f0e5;
|
@tan: #f0f0e5;
|
||||||
|
@consul-gray: #909090;
|
||||||
|
@consul-footer-gray: #d7d4d7;
|
||||||
|
@purple: #69499a;
|
||||||
|
|
||||||
@btn-color: #4592C5;
|
@btn-color: #4592C5;
|
||||||
|
|
||||||
|
@ -39,16 +44,14 @@
|
||||||
|
|
||||||
// Typography
|
// Typography
|
||||||
// -------------------------
|
// -------------------------
|
||||||
@font-family-rales: 'Raleway', "Helvetica Neue", Helvetica, Arial, sans-serif;
|
@font-family-museo: 'museo-sans', "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||||
@font-family-open-sans: 'Source Sans Pro', "Helvetica Neue", Helvetica, Arial, sans-serif;
|
@font-family-open-sans: 'Source Sans Pro', "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||||
@font-weight-rales-xl: 200;
|
@font-weight-museo-xl: 100;
|
||||||
@font-weight-rales-reg: 400;
|
@font-weight-museo-reg: 500;
|
||||||
@font-weight-rales-sb: 600;
|
@font-weight-museo-sb: 500;
|
||||||
@font-weight-rales-xb: 800;
|
@font-weight-museo-xb: 700;
|
||||||
@font-weight-open: @font-weight-rales-reg;
|
@font-weight-open: @font-weight-museo-reg;
|
||||||
|
|
||||||
|
|
||||||
@text-shadow: 1px 1px 1px #000;
|
@text-shadow: 1px 1px 1px #000;
|
||||||
@shadow: @text-shadow;
|
@shadow: @text-shadow;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,782 @@
|
||||||
|
.rls-l {
|
||||||
|
font-family: 'museo-sans', "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||||
|
font-weight: 100;
|
||||||
|
}
|
||||||
|
.rls-sb {
|
||||||
|
font-family: 'museo-sans', "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
.rls-xb {
|
||||||
|
font-family: 'museo-sans', "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
.os {
|
||||||
|
font-family: 'Source Sans Pro', "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
/*html{
|
||||||
|
text-rendering: optimizeLegibility;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
}*/
|
||||||
|
body {
|
||||||
|
font-size: 15px;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
font-size: 42px;
|
||||||
|
line-height: 42px;
|
||||||
|
font-family: 'museo-sans', "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||||
|
font-weight: 500;
|
||||||
|
margin-bottom: 24px;
|
||||||
|
}
|
||||||
|
h3 {
|
||||||
|
font-size: 28px;
|
||||||
|
line-height: 28px;
|
||||||
|
font-family: 'museo-sans', "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
.btn-serf {
|
||||||
|
color: #ffffff !important;
|
||||||
|
background-color: #4592c5;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
.highlight {
|
||||||
|
margin-bottom: 18px;
|
||||||
|
}
|
||||||
|
pre {
|
||||||
|
background-color: #242424;
|
||||||
|
color: #ffffff;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: normal;
|
||||||
|
font-family: "Courier New", Monaco, Menlo, Consolas, monospace;
|
||||||
|
border: none;
|
||||||
|
padding: 20px;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
@media (max-width: 992px) {
|
||||||
|
.container {
|
||||||
|
max-width: 970px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.navbar-nav {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
.navbar-right {
|
||||||
|
float: right !important;
|
||||||
|
}
|
||||||
|
.navbar-nav > li {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
.navbar-nav > li > a {
|
||||||
|
padding-top: 15px;
|
||||||
|
padding-bottom: 15px;
|
||||||
|
}
|
||||||
|
#footer,
|
||||||
|
#header {
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
position: relative;
|
||||||
|
color: #ffffff;
|
||||||
|
text-rendering: optimizeLegibility;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
#footer .navbar-collapse,
|
||||||
|
#header .navbar-collapse {
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
#footer.navbar-static-top,
|
||||||
|
#header.navbar-static-top {
|
||||||
|
z-index: 1000;
|
||||||
|
}
|
||||||
|
#footer a,
|
||||||
|
#header a {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
#footer .navbar-toggle,
|
||||||
|
#header .navbar-toggle {
|
||||||
|
margin-top: 14px;
|
||||||
|
border: 2px solid #ffffff;
|
||||||
|
}
|
||||||
|
#footer .navbar-toggle .icon-bar,
|
||||||
|
#header .navbar-toggle .icon-bar {
|
||||||
|
border: 1px solid #ffffff;
|
||||||
|
}
|
||||||
|
#footer .navbar-brand.logo,
|
||||||
|
#header .navbar-brand.logo {
|
||||||
|
padding: 13px 15px;
|
||||||
|
line-height: 0;
|
||||||
|
}
|
||||||
|
#footer .navbar-brand.logo span,
|
||||||
|
#header .navbar-brand.logo span {
|
||||||
|
display: inline-block;
|
||||||
|
width: 179px;
|
||||||
|
height: 59px;
|
||||||
|
background: url(../images/consul-header-logo.png) 0 0 no-repeat;
|
||||||
|
background-image: url("../images/consul-header-logo.png");
|
||||||
|
background-size: 179px 59px;
|
||||||
|
}
|
||||||
|
@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) {
|
||||||
|
#footer .navbar-brand.logo span,
|
||||||
|
#header .navbar-brand.logo span {
|
||||||
|
background-image: url("../images/consul-header-logo@2x.png");
|
||||||
|
background-size: 179px 59px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#footer .navbar-nav,
|
||||||
|
#header .navbar-nav {
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
}
|
||||||
|
#footer .navbar-nav li,
|
||||||
|
#header .navbar-nav li {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
#footer .navbar-nav li > a,
|
||||||
|
#header .navbar-nav li > a {
|
||||||
|
font-size: 12px;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 3px;
|
||||||
|
padding-left: 22px;
|
||||||
|
}
|
||||||
|
#footer .navbar-nav li.first > a,
|
||||||
|
#header .navbar-nav li.first > a {
|
||||||
|
padding-left: 15px;
|
||||||
|
}
|
||||||
|
#footer .nav > li > a:hover,
|
||||||
|
#header .nav > li > a:hover,
|
||||||
|
#footer .nav > li > a:focus,
|
||||||
|
#header .nav > li > a:focus {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
#footer .main-links.navbar-nav li + li a::before,
|
||||||
|
#header .main-links.navbar-nav li + li a::before {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
top: 35px;
|
||||||
|
width: 4px;
|
||||||
|
height: 23px;
|
||||||
|
background: url(../images/nav-dotpipes.png) 0 0 no-repeat;
|
||||||
|
background-image: url("../images/nav-dotpipes.png");
|
||||||
|
background-size: 4px 23px;
|
||||||
|
padding-right: 15px;
|
||||||
|
}
|
||||||
|
@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) {
|
||||||
|
#footer .main-links.navbar-nav li + li a::before,
|
||||||
|
#header .main-links.navbar-nav li + li a::before {
|
||||||
|
background-image: url("../images/nav-dotpipes@2x.png");
|
||||||
|
background-size: 4px 23px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#footer .main-links.navbar-nav li > a,
|
||||||
|
#header .main-links.navbar-nav li > a {
|
||||||
|
line-height: 62px;
|
||||||
|
}
|
||||||
|
#footer .buttons.navbar-nav,
|
||||||
|
#header .buttons.navbar-nav {
|
||||||
|
margin-top: 26px;
|
||||||
|
margin-left: 30px;
|
||||||
|
}
|
||||||
|
#footer .buttons.navbar-nav li.first,
|
||||||
|
#header .buttons.navbar-nav li.first {
|
||||||
|
margin-right: 12px;
|
||||||
|
}
|
||||||
|
#footer .buttons.navbar-nav li.download a,
|
||||||
|
#header .buttons.navbar-nav li.download a {
|
||||||
|
background: url(../images/icon-download.png) 8px 6px no-repeat;
|
||||||
|
background-image: url("../images/icon-download.png");
|
||||||
|
background-size: 20px 20px;
|
||||||
|
}
|
||||||
|
@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) {
|
||||||
|
#footer .buttons.navbar-nav li.download a,
|
||||||
|
#header .buttons.navbar-nav li.download a {
|
||||||
|
background-image: url("../images/icon-download@2x.png");
|
||||||
|
background-size: 20px 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#footer .buttons.navbar-nav li.github a,
|
||||||
|
#header .buttons.navbar-nav li.github a {
|
||||||
|
background: url(../images/icon-github.png) 8px 6px no-repeat;
|
||||||
|
background-image: url("../images/icon-github.png");
|
||||||
|
background-size: 20px 20px;
|
||||||
|
}
|
||||||
|
@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) {
|
||||||
|
#footer .buttons.navbar-nav li.github a,
|
||||||
|
#header .buttons.navbar-nav li.github a {
|
||||||
|
background-image: url("../images/icon-github@2x.png");
|
||||||
|
background-size: 20px 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#footer .buttons.navbar-nav li > a,
|
||||||
|
#header .buttons.navbar-nav li > a {
|
||||||
|
padding-top: 6px;
|
||||||
|
padding-bottom: 6px;
|
||||||
|
padding-left: 40px;
|
||||||
|
}
|
||||||
|
#footer {
|
||||||
|
height: 700px;
|
||||||
|
text-align: center;
|
||||||
|
color: #69499a;
|
||||||
|
}
|
||||||
|
#footer .main-links.navbar-nav {
|
||||||
|
float: none;
|
||||||
|
display: inline-block;
|
||||||
|
padding-top: 155px;
|
||||||
|
}
|
||||||
|
#footer .footer-hashi {
|
||||||
|
padding-top: 110px;
|
||||||
|
}
|
||||||
|
#footer a {
|
||||||
|
color: #69499a;
|
||||||
|
}
|
||||||
|
#footer .buttons.navbar-nav {
|
||||||
|
float: none;
|
||||||
|
display: inline-block;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
margin-top: 0px;
|
||||||
|
}
|
||||||
|
#footer .buttons.navbar-nav li.first {
|
||||||
|
margin-right: 12px;
|
||||||
|
}
|
||||||
|
#footer .buttons.navbar-nav li.download a {
|
||||||
|
background: url(../images/icon-download-purple.png) 8px 6px no-repeat;
|
||||||
|
background-image: url("../images/icon-download-purple.png");
|
||||||
|
background-size: 20px 20px;
|
||||||
|
}
|
||||||
|
@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) {
|
||||||
|
#footer .buttons.navbar-nav li.download a {
|
||||||
|
background-image: url("../images/icon-download-purple@2x.png");
|
||||||
|
background-size: 20px 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#footer .buttons.navbar-nav li.github a {
|
||||||
|
background: url(../images/icon-github-purple.png) 8px 6px no-repeat;
|
||||||
|
background-image: url("../images/icon-github-purple.png");
|
||||||
|
background-size: 20px 20px;
|
||||||
|
}
|
||||||
|
@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) {
|
||||||
|
#footer .buttons.navbar-nav li.github a {
|
||||||
|
background-image: url("../images/icon-github-purple@2x.png");
|
||||||
|
background-size: 20px 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#footer .buttons.navbar-nav li > a {
|
||||||
|
padding-top: 6px;
|
||||||
|
padding-bottom: 6px;
|
||||||
|
padding-left: 40px;
|
||||||
|
}
|
||||||
|
@media (max-width: 992px) {
|
||||||
|
#header .navbar-brand.logo span {
|
||||||
|
width: 120px;
|
||||||
|
height: 39px;
|
||||||
|
margin-top: 12px;
|
||||||
|
background-size: 120px 39px;
|
||||||
|
}
|
||||||
|
#header .buttons.navbar-nav li a {
|
||||||
|
background: none !important;
|
||||||
|
padding-left: 15px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
#header {
|
||||||
|
background: #694a9c;
|
||||||
|
/* Old browsers */
|
||||||
|
background: -moz-linear-gradient(left, #694a9c 0%, #cd2028 100%);
|
||||||
|
/* FF3.6+ */
|
||||||
|
background: -webkit-gradient(linear, left top, right top, color-stop(0%, #694a9c), color-stop(100%, #cd2028));
|
||||||
|
/* Chrome,Safari4+ */
|
||||||
|
background: -webkit-linear-gradient(left, #694a9c 0%, #cd2028 100%);
|
||||||
|
/* Chrome10+,Safari5.1+ */
|
||||||
|
background: -o-linear-gradient(left, #694a9c 0%, #cd2028 100%);
|
||||||
|
/* Opera 11.10+ */
|
||||||
|
background: -ms-linear-gradient(left, #694a9c 0%, #cd2028 100%);
|
||||||
|
/* IE10+ */
|
||||||
|
background: linear-gradient(to right, #694a9c 0%, #cd2028 100%);
|
||||||
|
/* W3C */
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#694a9c', endColorstr='#cd2028', GradientType=1);
|
||||||
|
/* IE6-9 */
|
||||||
|
}
|
||||||
|
#header .navbar-right {
|
||||||
|
float: none !important;
|
||||||
|
}
|
||||||
|
#header .main-links.navbar-nav {
|
||||||
|
padding-bottom: 15px;
|
||||||
|
}
|
||||||
|
#header .main-links.navbar-nav li {
|
||||||
|
margin-top: 15px;
|
||||||
|
}
|
||||||
|
#header .main-links.navbar-nav li + li a::before {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
#header .main-links.navbar-nav li > a {
|
||||||
|
padding: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
line-height: 22px;
|
||||||
|
}
|
||||||
|
#header .navbar-brand.logo span {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
#header .navbar-nav > li {
|
||||||
|
float: none;
|
||||||
|
}
|
||||||
|
#header .buttons.navbar-nav {
|
||||||
|
margin-top: 15px;
|
||||||
|
margin-left: 0px;
|
||||||
|
}
|
||||||
|
#header .buttons.navbar-nav li a {
|
||||||
|
padding-left: 40px;
|
||||||
|
}
|
||||||
|
#header .buttons.navbar-nav li.first {
|
||||||
|
margin-right: 0;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
#header .buttons.navbar-nav li.download a {
|
||||||
|
background: url(../images/icon-download.png) 8px 6px no-repeat !important;
|
||||||
|
background-image: url("../images/icon-download.png");
|
||||||
|
background-size: 20px 20px;
|
||||||
|
}
|
||||||
|
#header .buttons.navbar-nav li.github a {
|
||||||
|
background: url(../images/icon-github.png) 8px 6px no-repeat !important;
|
||||||
|
background-image: url("../images/icon-github.png");
|
||||||
|
background-size: 20px 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media (max-width: 768px) and only screen and (-webkit-min-device-pixel-ratio: 2), (max-width: 768px) and only screen and (min--moz-device-pixel-ratio: 2), (max-width: 768px) and only screen and (-o-min-device-pixel-ratio: 2/1), (max-width: 768px) and only screen and (min-device-pixel-ratio: 2), (max-width: 768px) and only screen and (min-resolution: 192dpi), (max-width: 768px) and only screen and (min-resolution: 2dppx) {
|
||||||
|
#header .buttons.navbar-nav li.download a {
|
||||||
|
background-image: url("../images/icon-download@2x.png");
|
||||||
|
background-size: 20px 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media (max-width: 768px) and only screen and (-webkit-min-device-pixel-ratio: 2), (max-width: 768px) and only screen and (min--moz-device-pixel-ratio: 2), (max-width: 768px) and only screen and (-o-min-device-pixel-ratio: 2/1), (max-width: 768px) and only screen and (min-device-pixel-ratio: 2), (max-width: 768px) and only screen and (min-resolution: 192dpi), (max-width: 768px) and only screen and (min-resolution: 2dppx) {
|
||||||
|
#header .buttons.navbar-nav li.github a {
|
||||||
|
background-image: url("../images/icon-github@2x.png");
|
||||||
|
background-size: 20px 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#jumbotron-mask {
|
||||||
|
overflow: hidden;
|
||||||
|
height: 542px;
|
||||||
|
margin-top: -92px;
|
||||||
|
}
|
||||||
|
#jumbotron {
|
||||||
|
position: relative;
|
||||||
|
height: 542px;
|
||||||
|
padding-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
margin-top: -92px;
|
||||||
|
color: #ffffff;
|
||||||
|
background: #694a9c;
|
||||||
|
/* Old browsers */
|
||||||
|
background: -moz-linear-gradient(left, #694a9c 0%, #cd2028 100%);
|
||||||
|
/* FF3.6+ */
|
||||||
|
background: -webkit-gradient(linear, left top, right top, color-stop(0%, #694a9c), color-stop(100%, #cd2028));
|
||||||
|
/* Chrome,Safari4+ */
|
||||||
|
background: -webkit-linear-gradient(left, #694a9c 0%, #cd2028 100%);
|
||||||
|
/* Chrome10+,Safari5.1+ */
|
||||||
|
background: -o-linear-gradient(left, #694a9c 0%, #cd2028 100%);
|
||||||
|
/* Opera 11.10+ */
|
||||||
|
background: -ms-linear-gradient(left, #694a9c 0%, #cd2028 100%);
|
||||||
|
/* IE10+ */
|
||||||
|
background: linear-gradient(to right, #694a9c 0%, #cd2028 100%);
|
||||||
|
/* W3C */
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#694a9c', endColorstr='#cd2028', GradientType=1);
|
||||||
|
/* IE6-9 */
|
||||||
|
}
|
||||||
|
#jumbotron.mobile-hero {
|
||||||
|
background: transparent url(../images/node-hero-pattern.jpg ) center center;
|
||||||
|
background-size: 320px 320px;
|
||||||
|
background: -webkit-image-set(url('../images/node-hero-pattern.jpg') 1x, url('../images/node-hero-pattern@2x.jpg') 2x);
|
||||||
|
}
|
||||||
|
#jumbotron .jumbotron-dots {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
height: 632px;
|
||||||
|
width: 100%;
|
||||||
|
margin-top: -92px;
|
||||||
|
background: transparent url('../images/hero-dots.png') center 92px no-repeat;
|
||||||
|
}
|
||||||
|
#jumbotron .container {
|
||||||
|
position: relative;
|
||||||
|
height: 100%;
|
||||||
|
margin-top: 92px;
|
||||||
|
}
|
||||||
|
#jumbotron .container .jumbo-logo-wrap {
|
||||||
|
margin-top: 135px;
|
||||||
|
}
|
||||||
|
#jumbotron .container .jumbo-logo-wrap .jumbo-logo {
|
||||||
|
width: 318px;
|
||||||
|
height: 316px;
|
||||||
|
background: transparent url(../images/consul-hero-logo@2x.png ) 0 0 no-repeat;
|
||||||
|
background-size: 318px 316px;
|
||||||
|
z-index: 20;
|
||||||
|
}
|
||||||
|
#jumbotron .container h2 {
|
||||||
|
margin-top: 190px;
|
||||||
|
font-size: 40px;
|
||||||
|
line-height: 48px;
|
||||||
|
letter-spacing: 1px;
|
||||||
|
margin-left: 40px;
|
||||||
|
}
|
||||||
|
@media (min-width: 992px) {
|
||||||
|
.jumbotron .container .jumbo-logo {
|
||||||
|
right: -150px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media (min-width: 1200px) {
|
||||||
|
.jumbotron .container .jumbo-logo {
|
||||||
|
right: -120px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.outline-btn {
|
||||||
|
background-color: transparent;
|
||||||
|
color: #ffffff;
|
||||||
|
border: 2px solid #ffffff;
|
||||||
|
border-radius: 4px;
|
||||||
|
text-decoration: none !important;
|
||||||
|
-webkit-transition: background-color 0.3s ease-in-out;
|
||||||
|
transition: background-color 0.3s ease-in-out;
|
||||||
|
}
|
||||||
|
.outline-btn.purple {
|
||||||
|
color: #69499a;
|
||||||
|
border: 2px solid #69499a;
|
||||||
|
}
|
||||||
|
.outline-btn:hover {
|
||||||
|
color: #ffffff;
|
||||||
|
background-color: rgba(255, 255, 255, 0.2);
|
||||||
|
-webkit-transition: background-color 0.3s ease-in-out;
|
||||||
|
transition: background-color 0.3s ease-in-out;
|
||||||
|
}
|
||||||
|
.outline-btn:hover.purple {
|
||||||
|
background-color: rgba(255, 255, 255, 0.5);
|
||||||
|
}
|
||||||
|
#features {
|
||||||
|
text-rendering: optimizeLegibility;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
padding: 130px 0 0 0;
|
||||||
|
background: #f8f8f8 url(../images/hero-dots-below@2x.png) center top no-repeat;
|
||||||
|
background-size: 1280px 49px;
|
||||||
|
}
|
||||||
|
#features .double-row {
|
||||||
|
padding: 0 0 60px 0;
|
||||||
|
}
|
||||||
|
#features h2 {
|
||||||
|
font-size: 24px;
|
||||||
|
letter-spacing: 2px;
|
||||||
|
color: #69499a;
|
||||||
|
font-family: 'museo-sans', "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
#features p {
|
||||||
|
font-size: 16px;
|
||||||
|
letter-spacing: 1px;
|
||||||
|
line-height: 1.5em;
|
||||||
|
color: #909090;
|
||||||
|
font-family: 'museo-sans', "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
#features .icn {
|
||||||
|
display: block;
|
||||||
|
width: 186px;
|
||||||
|
height: 272px;
|
||||||
|
margin: 0 auto;
|
||||||
|
background-position: center 0;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
#features .discovery {
|
||||||
|
background-image: url(../images/feature-discovery@2x.png);
|
||||||
|
background-size: 181px 181px;
|
||||||
|
}
|
||||||
|
#features .health {
|
||||||
|
background-image: url(../images/feature-health@2x.png);
|
||||||
|
background-size: 125px 179px;
|
||||||
|
}
|
||||||
|
#features .multi {
|
||||||
|
background-image: url(../images/feature-multi@2x.png);
|
||||||
|
background-size: 182px 184px;
|
||||||
|
}
|
||||||
|
#features .config {
|
||||||
|
background-image: url(../images/feature-config@2x.png);
|
||||||
|
background-size: 157px 179px;
|
||||||
|
}
|
||||||
|
#trusted {
|
||||||
|
background-color: #242424;
|
||||||
|
padding: 140px 0;
|
||||||
|
}
|
||||||
|
#trusted h3 {
|
||||||
|
margin-bottom: 60px;
|
||||||
|
color: #ffffff;
|
||||||
|
text-transform: uppercase;
|
||||||
|
font-size: 18px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
#trusted .trusted-items {
|
||||||
|
width: 800px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
#trusted .trusted-items ul {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
#trusted .trusted-items ul > li {
|
||||||
|
display: inline-block;
|
||||||
|
float: left;
|
||||||
|
width: 25%;
|
||||||
|
height: 80px;
|
||||||
|
margin: 12px 0;
|
||||||
|
background: url(../images/trusted-sprite.png ) 0 0 no-repeat;
|
||||||
|
}
|
||||||
|
#trusted .trusted-items ul > li#i0 {
|
||||||
|
background-position: 0 0;
|
||||||
|
}
|
||||||
|
#trusted .trusted-items ul > li#i1 {
|
||||||
|
background-position: 0 -80px;
|
||||||
|
}
|
||||||
|
#trusted .trusted-items ul > li#i2 {
|
||||||
|
background-position: 0 -160px;
|
||||||
|
}
|
||||||
|
#trusted .trusted-items ul > li#i3 {
|
||||||
|
background-position: 0 -240px;
|
||||||
|
}
|
||||||
|
#trusted .trusted-items ul > li#i4 {
|
||||||
|
background-position: 0 -320px;
|
||||||
|
}
|
||||||
|
#trusted .trusted-items ul > li#i5 {
|
||||||
|
background-position: 0 -400px;
|
||||||
|
}
|
||||||
|
#trusted .trusted-items ul > li#i6 {
|
||||||
|
background-position: 0 -480px;
|
||||||
|
}
|
||||||
|
#trusted .trusted-items ul > li#i7 {
|
||||||
|
background-position: 0 -560px;
|
||||||
|
}
|
||||||
|
#trusted .trusted-items ul > li#i8 {
|
||||||
|
background-position: 0 -640px;
|
||||||
|
}
|
||||||
|
#trusted .trusted-items ul > li#i9 {
|
||||||
|
background-position: 0 -720px;
|
||||||
|
}
|
||||||
|
#trusted .trusted-items ul > li#i10 {
|
||||||
|
background-position: 0 -800px;
|
||||||
|
}
|
||||||
|
#trusted .trusted-items ul > li#i11 {
|
||||||
|
background-position: 0 -880px;
|
||||||
|
}
|
||||||
|
#footer {
|
||||||
|
padding: 50px 0;
|
||||||
|
background-color: #d7d4d7;
|
||||||
|
background: #d7d4d7 url(../images/consul-footer-logo.png) center center no-repeat;
|
||||||
|
background-image: url("../images/consul-footer-logo.png");
|
||||||
|
background-size: 446px 443px;
|
||||||
|
}
|
||||||
|
@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) {
|
||||||
|
#footer {
|
||||||
|
background-image: url("../images/consul-footer-logo@2x.png");
|
||||||
|
background-size: 446px 443px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#footer .footer-links {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
#footer .footer-hashi {
|
||||||
|
letter-spacing: 2px;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
}
|
||||||
|
#footer .footer-hashi a {
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
#footer .footer-hashi span {
|
||||||
|
margin-right: 20px;
|
||||||
|
}
|
||||||
|
#footer .footer-hashi img {
|
||||||
|
display: inline-block;
|
||||||
|
width: 37px;
|
||||||
|
height: 40px;
|
||||||
|
}
|
||||||
|
@media (max-width: 992px) {
|
||||||
|
#features .double-row {
|
||||||
|
padding: 0 0 0 0;
|
||||||
|
}
|
||||||
|
#features .double-row .row {
|
||||||
|
padding-bottom: 90px;
|
||||||
|
}
|
||||||
|
#features .icn {
|
||||||
|
height: 200px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.people {
|
||||||
|
margin-top: 30px;
|
||||||
|
}
|
||||||
|
.people .person {
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
.people .person h3 {
|
||||||
|
text-transform: none;
|
||||||
|
}
|
||||||
|
.people .person .bio {
|
||||||
|
padding-left: 150px;
|
||||||
|
}
|
||||||
|
.docs-sidebar {
|
||||||
|
margin-bottom: 30px;
|
||||||
|
margin-top: 50px;
|
||||||
|
margin-right: 4%;
|
||||||
|
background-color: #f0f0e5;
|
||||||
|
border-radius: 6px;
|
||||||
|
}
|
||||||
|
.docs-sidebar a {
|
||||||
|
color: #242424;
|
||||||
|
}
|
||||||
|
.docs-sidebar .docs-sidenav {
|
||||||
|
padding-top: 15px;
|
||||||
|
padding-bottom: 15px;
|
||||||
|
}
|
||||||
|
.docs-sidebar .docs-sidenav :last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
.docs-sidebar .docs-sidenav li {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.docs-sidebar .docs-sidenav li > a {
|
||||||
|
-webkit-transition: color 0.5s ease;
|
||||||
|
transition: color 0.5s ease;
|
||||||
|
}
|
||||||
|
.docs-sidebar .docs-sidenav li > a:hover,
|
||||||
|
.docs-sidebar .docs-sidenav li > a:focus {
|
||||||
|
background-color: transparent !important;
|
||||||
|
color: #c5454e;
|
||||||
|
-webkit-transition: color 0.5s ease;
|
||||||
|
transition: color 0.5s ease;
|
||||||
|
}
|
||||||
|
.docs-sidebar .docs-sidenav > li {
|
||||||
|
padding: 10px 0;
|
||||||
|
margin: 0 30px;
|
||||||
|
border-bottom: 1px solid #fff;
|
||||||
|
}
|
||||||
|
.docs-sidebar .docs-sidenav > li.active:before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
width: 8px;
|
||||||
|
height: 8px;
|
||||||
|
background-color: #dd4e58;
|
||||||
|
border-radius: 4px;
|
||||||
|
top: 26px;
|
||||||
|
left: -10px;
|
||||||
|
}
|
||||||
|
.docs-sidebar .docs-sidenav > li.active > a {
|
||||||
|
font-weight: 700;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
}
|
||||||
|
.docs-sidebar .docs-sidenav > li.active > a:hover,
|
||||||
|
.docs-sidebar .docs-sidenav > li.active > a:focus {
|
||||||
|
color: #242424;
|
||||||
|
}
|
||||||
|
.docs-sidebar .docs-sidenav > li.active .nav {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.docs-sidebar .docs-sidenav > li.active .nav li.active a {
|
||||||
|
color: #dd4e58;
|
||||||
|
}
|
||||||
|
.docs-sidebar .docs-sidenav > li > a {
|
||||||
|
text-transform: uppercase;
|
||||||
|
font-family: 'museo-sans', "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||||
|
font-weight: 500;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
}
|
||||||
|
.docs-sidebar .docs-sidenav .nav {
|
||||||
|
display: none;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
|
.docs-sidebar .docs-sidenav .nav > li {
|
||||||
|
margin-left: 20px;
|
||||||
|
}
|
||||||
|
.docs-sidebar .docs-sidenav .nav > li > a {
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
font-family: 'Source Sans Pro', "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||||
|
padding: 6px 15px;
|
||||||
|
}
|
||||||
|
.bs-docs-section {
|
||||||
|
padding-top: 10px;
|
||||||
|
padding-left: 3%;
|
||||||
|
padding-bottom: 80px;
|
||||||
|
}
|
||||||
|
.bs-docs-section .lead {
|
||||||
|
margin-bottom: 48px;
|
||||||
|
}
|
||||||
|
.bs-docs-section .doc-sectional {
|
||||||
|
margin-bottom: 48px;
|
||||||
|
}
|
||||||
|
.bs-docs-section p,
|
||||||
|
.bs-docs-section li,
|
||||||
|
.bs-docs-section .alert {
|
||||||
|
font-size: 20px;
|
||||||
|
font-family: 'Source Sans Pro', "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||||
|
font-weight: 500;
|
||||||
|
line-height: 1.5em;
|
||||||
|
margin: 0 0 18px;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
}
|
||||||
|
.bs-docs-section pre {
|
||||||
|
margin: 0 0 18px;
|
||||||
|
}
|
||||||
|
.bs-docs-section a {
|
||||||
|
color: #b03c44;
|
||||||
|
}
|
||||||
|
.bs-docs-section a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
.bs-docs-section h1 {
|
||||||
|
padding-bottom: 24px;
|
||||||
|
margin-top: 40px;
|
||||||
|
margin-bottom: 24px;
|
||||||
|
border-bottom: 1px solid #eeeeee;
|
||||||
|
}
|
||||||
|
.bs-docs-section h2,
|
||||||
|
.bs-docs-section h3,
|
||||||
|
.bs-docs-section h4 {
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
.bs-docs-section #graph {
|
||||||
|
margin-top: 30px;
|
||||||
|
}
|
||||||
|
.downloads {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
.downloads .description {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
.downloads .download {
|
||||||
|
border-bottom: 1px solid #b2b2b2;
|
||||||
|
padding-bottom: 15px;
|
||||||
|
margin-top: 10px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
.downloads .download .details {
|
||||||
|
padding-left: 95px;
|
||||||
|
}
|
||||||
|
.downloads .download .details h2 {
|
||||||
|
margin-top: 0px;
|
||||||
|
}
|
||||||
|
.downloads .download .details ul {
|
||||||
|
padding-left: 0px;
|
||||||
|
}
|
||||||
|
.downloads .download .details li {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
.downloads .download .details li:after {
|
||||||
|
content: " | ";
|
||||||
|
}
|
||||||
|
.downloads .download .details li:last-child:after {
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
.downloads .download .icon img {
|
||||||
|
width: 75px;
|
||||||
|
}
|
||||||
|
.downloads .download .os-name {
|
||||||
|
font-size: 40px;
|
||||||
|
margin-bottom: -3px;
|
||||||
|
}
|
||||||
|
.downloads .poweredby {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
.downloads .poweredby img {
|
||||||
|
display: block;
|
||||||
|
margin: 0 auto;
|
||||||
|
width: 122px;
|
||||||
|
}
|
||||||
|
/*@import "modals.less";*/
|
|
@ -14,7 +14,7 @@
|
||||||
// Components
|
// Components
|
||||||
@import "_header";
|
@import "_header";
|
||||||
@import "_jumbotron";
|
@import "_jumbotron";
|
||||||
@import "_nodes";
|
@import "_buttons";
|
||||||
|
|
||||||
// Pages
|
// Pages
|
||||||
@import "_home";
|
@import "_home";
|
||||||
|
@ -24,5 +24,3 @@
|
||||||
|
|
||||||
// Components w/ JavaScript
|
// Components w/ JavaScript
|
||||||
/*@import "modals.less";*/
|
/*@import "modals.less";*/
|
||||||
|
|
||||||
|
|