]> BookStack Code Mirror - website/commitdiff
Initial commit
authorDan Brown <redacted>
Sun, 11 Oct 2015 15:31:20 +0000 (16:31 +0100)
committerDan Brown <redacted>
Sun, 11 Oct 2015 15:31:20 +0000 (16:31 +0100)
22 files changed:
.gitignore [new file with mode: 0644]
gulpfile.js [new file with mode: 0644]
package.json [new file with mode: 0644]
public/bookstack-screenshot.png [new file with mode: 0644]
public/favicon.ico [new file with mode: 0644]
public/index.html [new file with mode: 0644]
public/libs/wow.min.js [new file with mode: 0644]
public/logo.png [new file with mode: 0644]
public/logo.svg [new file with mode: 0644]
sass/_animations.scss [new file with mode: 0644]
sass/_blocks.scss [new file with mode: 0644]
sass/_buttons.scss [new file with mode: 0644]
sass/_grid.scss [new file with mode: 0644]
sass/_header.scss [new file with mode: 0644]
sass/_html.scss [new file with mode: 0644]
sass/_lists.scss [new file with mode: 0644]
sass/_mixins.scss [new file with mode: 0644]
sass/_reset.scss [new file with mode: 0644]
sass/_text.scss [new file with mode: 0644]
sass/_variables.scss [new file with mode: 0644]
sass/styles.scss [new file with mode: 0644]
scripts/script.js [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..1e7dc09
--- /dev/null
@@ -0,0 +1,2 @@
+node_modules
+public/dist
\ No newline at end of file
diff --git a/gulpfile.js b/gulpfile.js
new file mode 100644 (file)
index 0000000..07d3cc8
--- /dev/null
@@ -0,0 +1,65 @@
+var gulp = require('gulp'),
+    plumber = require('gulp-plumber'),
+    rename = require('gulp-rename');
+var autoprefixer = require('gulp-autoprefixer');
+var babel = require('gulp-babel');
+var concat = require('gulp-concat');
+var uglify = require('gulp-uglify');
+var minifycss = require('gulp-minify-css');
+var sass = require('gulp-sass');
+var browserSync = require('browser-sync').create();
+
+gulp.task('browser-sync', function() {
+  browserSync.init({
+    server: {
+       baseDir: "./public/"
+    }
+  });
+});
+
+gulp.task('bs-reload', function () {
+  browserSync.reload();
+});
+
+
+gulp.task('styles', function(){
+  gulp.src(['sass/**/*.scss'])
+    .pipe(plumber({
+      errorHandler: function (error) {
+        console.log(error.message);
+        this.emit('end');
+    }}))
+    .pipe(sass())
+    .pipe(autoprefixer('last 2 versions'))
+    .pipe(gulp.dest('public/dist/'))
+    .pipe(browserSync.stream())
+    .pipe(rename({suffix: '.min'}))
+    .pipe(minifycss())
+    .pipe(gulp.dest('public/dist/'))
+    .pipe(browserSync.stream())
+});
+
+gulp.task('scripts', function(){
+  return gulp.src('scripts/**/*.js')
+    .pipe(plumber({
+      errorHandler: function (error) {
+        console.log(error.message);
+        this.emit('end');
+    }}))
+    .pipe(concat('main.js'))
+    .pipe(babel())
+    .pipe(gulp.dest('public/dist/'))
+    .pipe(browserSync.stream())
+    .pipe(rename({suffix: '.min'}))
+    .pipe(uglify())
+    .pipe(gulp.dest('public/dist/'))
+    .pipe(browserSync.stream())
+});
+
+gulp.task('default', ['styles', 'scripts']);
+
+gulp.task('watch', ['browser-sync'], function(){
+  gulp.watch("public/*.html", ['bs-reload']);
+  gulp.watch('sass/*.scss', ['styles']);
+  gulp.watch('scripts/*.js', ['scripts']);
+});
\ No newline at end of file
diff --git a/package.json b/package.json
new file mode 100644 (file)
index 0000000..9077115
--- /dev/null
@@ -0,0 +1,25 @@
+{
+  "name": "BookStack-Site",
+  "version": "1.0.0",
+  "description": "The front-end site for bookstack",
+  "main": "gulpfile.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "author": "Dan Brown",
+  "license": "MIT",
+  "devDependencies": {
+    "browser-sync": "2.9.11",
+    "gulp": "3.9.0",
+    "gulp-autoprefixer": "3.0.2",
+    "gulp-babel": "5.2.1",
+    "gulp-concat": "2.6.0",
+    "gulp-minify-css": "1.2.1",
+    "gulp-plumber": "1.0.1",
+    "gulp-rename": "1.2.2",
+    "gulp-sass": "2.0.4",
+    "gulp-uglify": "1.4.1",
+  },
+  "dependencies": {
+  }
+}
diff --git a/public/bookstack-screenshot.png b/public/bookstack-screenshot.png
new file mode 100644 (file)
index 0000000..3cf35b8
Binary files /dev/null and b/public/bookstack-screenshot.png differ
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644 (file)
index 0000000..41655cc
Binary files /dev/null and b/public/favicon.ico differ
diff --git a/public/index.html b/public/index.html
new file mode 100644 (file)
index 0000000..c970a7b
--- /dev/null
@@ -0,0 +1,119 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+       <meta charset="UTF-8">
+       <title>BookStack</title>
+       <link href='https://fonts.googleapis.com/css?family=Roboto:400,400italic,300,300italic,500,500italic,700,700italic' rel='stylesheet' type='text/css'>
+       <link href="https://fonts.googleapis.com/icon?family=Material+Icons"
+             rel="stylesheet">
+       <link rel="stylesheet" href="/dist/styles.css">
+</head>
+<body>
+<header id="header">
+       <div class="container">
+               <div class="row">
+                       <div class="col-sm-12">
+                               <div class="logo">
+                                       <img src="/logo.svg" alt="BookStack">
+                                       <h1>BookStack</h1>
+                               </div>
+                       </div>
+               </div>
+               <div class="row">
+                       <div class="col-md-4 spaced">
+                               <h2 class="wow fadeIn long">Simple &amp; Free Documentation</h2>
+                               <p class="wow fadeIn long" data-wow-delay="120ms">BookStack is a simple, self-hosted, easy-to-use platform for organising and storing information.</p>
+                               <a href="https://github.com/ssddanbrown/BookStack" class="button pos wow fadeIn long" data-wow-delay="240ms">View on GitHub</a>
+                       </div>
+                       <div class="col-md-8 screenshot-container">
+                               <img class="wow screenshot" src="/bookstack-screenshot.png" alt="BookStack ScreenShot">
+                       </div>
+               </div>
+
+       </div>
+</header>
+       <div class="container md-margin-top">
+               <div class="row">
+                       <div class="col-md-12">
+                               <h2>Features</h2>
+                       </div>
+               </div>
+               <div class="row">
+
+                       <div class="col-sm-4 wow fadeIn">
+                               <h3><i class="material-icons">code</i>Free &amp; Open Source</h3>
+                               <p>BookStack is fully free and open, MIT licensed. The source is available on GitHub. There is no cost to downloading and installing your own instance of bookstack.
+                               </p>
+                               <p>
+                                       <a href="https://github.com/ssddanbrown/BookStack">View the source here &raquo;</a>
+                               </p>
+                       </div>
+
+                       <div class="col-sm-4 wow fadeIn" data-wow-delay="240ms">
+                               <h3><i class="material-icons">laptop_chromebook</i>Easy, Simple Interface</h3>
+                               <p>
+                                       Simplicity has been the top priority when building BookStack. The page editor has a simple WYSIWYG interface and all content is broken into three simple real world groups:
+                               </p>
+                               <p>
+                                       <i class="material-icons text-book">book</i> Books &nbsp;&nbsp;<i class="material-icons text-chapter">collections_bookmark</i> Chapters&nbsp;&nbsp; <i class="material-icons text-page">description</i> Pages
+                               </p>
+                       </div>
+
+                       <div class="col-sm-4 wow fadeIn" data-wow-delay="480ms">
+                               <h3><i class="material-icons">search</i>Searchable and Connected</h3>
+                               <p>
+                                       The content in BookStack is fully searchable. You are able to search at book level or across all books, chapters &amp; pages. The ability to link directly to any paragraph allows you to keeps your documentation connected.
+                               </p>
+                       </div>
+
+               </div>
+
+               <p>
+                       <br>
+               </p>
+
+               <div class="row">
+
+                       <div class="col-sm-4 wow fadeIn">
+                               <h3><i class="material-icons">build</i>Configurable</h3>
+                               <p>
+                                       Configuration options allow you to set-up BookStack to suit your use case. You can change the name, Logo and registration options. You can also change whether the whole system is publicly viewable or not.
+                               </p>
+                       </div>
+
+                       <div class="col-sm-4 wow fadeIn" data-wow-delay="240ms">
+                               <h3><i class="material-icons">storage</i>Simple Requirements</h3>
+                               <p>
+                                       BookStack is built using PHP, on top of the Laravel framework and it uses MySQL to store data. Performance has been kept in mind and BookStack can run happily on a $5 Digital Ocean VPS.
+                               </p>
+                       </div>
+
+                       <div class="col-sm-4 wow fadeIn" data-wow-delay="480ms">
+                               <h3><i class="material-icons">directions_boat</i>Powerful Features</h3>
+                               <p>
+                                       On top of the powerful search and linking there is also cross-book sorting, Page revisions, Image managment. Some more mega-features are planned such as static-site generation and quick exporting.
+                               </p>
+                       </div>
+
+               </div>
+
+               <div class="row">
+                       <div class="col-md-12">
+                               <h3 class="text-center text-muted">
+                                       Demo Page Coming Soon
+                               </h3>
+                       </div>
+               </div>
+       </div>
+       <footer>
+               <hr>
+               <div class="container">
+                       <p class="text-muted">
+                               BookStack - Created By <a href="http://danb.me" title="danb.me">Dan Brown</a>
+                       </p>
+               </div>
+       </footer>
+       <script src="libs/wow.min.js"></script>
+       <script src="dist/main.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/public/libs/wow.min.js b/public/libs/wow.min.js
new file mode 100644 (file)
index 0000000..a692251
--- /dev/null
@@ -0,0 +1,2 @@
+/*! WOW - v1.1.2 - 2015-04-07
+* Copyright (c) 2015 Matthieu Aussaguel; Licensed MIT */(function(){var a,b,c,d,e,f=function(a,b){return function(){return a.apply(b,arguments)}},g=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};b=function(){function a(){}return a.prototype.extend=function(a,b){var c,d;for(c in b)d=b[c],null==a[c]&&(a[c]=d);return a},a.prototype.isMobile=function(a){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(a)},a.prototype.createEvent=function(a,b,c,d){var e;return null==b&&(b=!1),null==c&&(c=!1),null==d&&(d=null),null!=document.createEvent?(e=document.createEvent("CustomEvent"),e.initCustomEvent(a,b,c,d)):null!=document.createEventObject?(e=document.createEventObject(),e.eventType=a):e.eventName=a,e},a.prototype.emitEvent=function(a,b){return null!=a.dispatchEvent?a.dispatchEvent(b):b in(null!=a)?a[b]():"on"+b in(null!=a)?a["on"+b]():void 0},a.prototype.addEvent=function(a,b,c){return null!=a.addEventListener?a.addEventListener(b,c,!1):null!=a.attachEvent?a.attachEvent("on"+b,c):a[b]=c},a.prototype.removeEvent=function(a,b,c){return null!=a.removeEventListener?a.removeEventListener(b,c,!1):null!=a.detachEvent?a.detachEvent("on"+b,c):delete a[b]},a.prototype.innerHeight=function(){return"innerHeight"in window?window.innerHeight:document.documentElement.clientHeight},a}(),c=this.WeakMap||this.MozWeakMap||(c=function(){function a(){this.keys=[],this.values=[]}return a.prototype.get=function(a){var b,c,d,e,f;for(f=this.keys,b=d=0,e=f.length;e>d;b=++d)if(c=f[b],c===a)return this.values[b]},a.prototype.set=function(a,b){var c,d,e,f,g;for(g=this.keys,c=e=0,f=g.length;f>e;c=++e)if(d=g[c],d===a)return void(this.values[c]=b);return this.keys.push(a),this.values.push(b)},a}()),a=this.MutationObserver||this.WebkitMutationObserver||this.MozMutationObserver||(a=function(){function a(){"undefined"!=typeof console&&null!==console&&console.warn("MutationObserver is not supported by your browser."),"undefined"!=typeof console&&null!==console&&console.warn("WOW.js cannot detect dom mutations, please call .sync() after loading new content.")}return a.notSupported=!0,a.prototype.observe=function(){},a}()),d=this.getComputedStyle||function(a){return this.getPropertyValue=function(b){var c;return"float"===b&&(b="styleFloat"),e.test(b)&&b.replace(e,function(a,b){return b.toUpperCase()}),(null!=(c=a.currentStyle)?c[b]:void 0)||null},this},e=/(\-([a-z]){1})/g,this.WOW=function(){function e(a){null==a&&(a={}),this.scrollCallback=f(this.scrollCallback,this),this.scrollHandler=f(this.scrollHandler,this),this.resetAnimation=f(this.resetAnimation,this),this.start=f(this.start,this),this.scrolled=!0,this.config=this.util().extend(a,this.defaults),this.animationNameCache=new c,this.wowEvent=this.util().createEvent(this.config.boxClass)}return e.prototype.defaults={boxClass:"wow",animateClass:"animated",offset:0,mobile:!0,live:!0,callback:null},e.prototype.init=function(){var a;return this.element=window.document.documentElement,"interactive"===(a=document.readyState)||"complete"===a?this.start():this.util().addEvent(document,"DOMContentLoaded",this.start),this.finished=[]},e.prototype.start=function(){var b,c,d,e;if(this.stopped=!1,this.boxes=function(){var a,c,d,e;for(d=this.element.querySelectorAll("."+this.config.boxClass),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(b);return e}.call(this),this.all=function(){var a,c,d,e;for(d=this.boxes,e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(b);return e}.call(this),this.boxes.length)if(this.disabled())this.resetStyle();else for(e=this.boxes,c=0,d=e.length;d>c;c++)b=e[c],this.applyStyle(b,!0);return this.disabled()||(this.util().addEvent(window,"scroll",this.scrollHandler),this.util().addEvent(window,"resize",this.scrollHandler),this.interval=setInterval(this.scrollCallback,50)),this.config.live?new a(function(a){return function(b){var c,d,e,f,g;for(g=[],c=0,d=b.length;d>c;c++)f=b[c],g.push(function(){var a,b,c,d;for(c=f.addedNodes||[],d=[],a=0,b=c.length;b>a;a++)e=c[a],d.push(this.doSync(e));return d}.call(a));return g}}(this)).observe(document.body,{childList:!0,subtree:!0}):void 0},e.prototype.stop=function(){return this.stopped=!0,this.util().removeEvent(window,"scroll",this.scrollHandler),this.util().removeEvent(window,"resize",this.scrollHandler),null!=this.interval?clearInterval(this.interval):void 0},e.prototype.sync=function(){return a.notSupported?this.doSync(this.element):void 0},e.prototype.doSync=function(a){var b,c,d,e,f;if(null==a&&(a=this.element),1===a.nodeType){for(a=a.parentNode||a,e=a.querySelectorAll("."+this.config.boxClass),f=[],c=0,d=e.length;d>c;c++)b=e[c],g.call(this.all,b)<0?(this.boxes.push(b),this.all.push(b),this.stopped||this.disabled()?this.resetStyle():this.applyStyle(b,!0),f.push(this.scrolled=!0)):f.push(void 0);return f}},e.prototype.show=function(a){return this.applyStyle(a),a.className=a.className+" "+this.config.animateClass,null!=this.config.callback&&this.config.callback(a),this.util().emitEvent(a,this.wowEvent),this.util().addEvent(a,"animationend",this.resetAnimation),this.util().addEvent(a,"oanimationend",this.resetAnimation),this.util().addEvent(a,"webkitAnimationEnd",this.resetAnimation),this.util().addEvent(a,"MSAnimationEnd",this.resetAnimation),a},e.prototype.applyStyle=function(a,b){var c,d,e;return d=a.getAttribute("data-wow-duration"),c=a.getAttribute("data-wow-delay"),e=a.getAttribute("data-wow-iteration"),this.animate(function(f){return function(){return f.customStyle(a,b,d,c,e)}}(this))},e.prototype.animate=function(){return"requestAnimationFrame"in window?function(a){return window.requestAnimationFrame(a)}:function(a){return a()}}(),e.prototype.resetStyle=function(){var a,b,c,d,e;for(d=this.boxes,e=[],b=0,c=d.length;c>b;b++)a=d[b],e.push(a.style.visibility="visible");return e},e.prototype.resetAnimation=function(a){var b;return a.type.toLowerCase().indexOf("animationend")>=0?(b=a.target||a.srcElement,b.className=b.className.replace(this.config.animateClass,"").trim()):void 0},e.prototype.customStyle=function(a,b,c,d,e){return b&&this.cacheAnimationName(a),a.style.visibility=b?"hidden":"visible",c&&this.vendorSet(a.style,{animationDuration:c}),d&&this.vendorSet(a.style,{animationDelay:d}),e&&this.vendorSet(a.style,{animationIterationCount:e}),this.vendorSet(a.style,{animationName:b?"none":this.cachedAnimationName(a)}),a},e.prototype.vendors=["moz","webkit"],e.prototype.vendorSet=function(a,b){var c,d,e,f;d=[];for(c in b)e=b[c],a[""+c]=e,d.push(function(){var b,d,g,h;for(g=this.vendors,h=[],b=0,d=g.length;d>b;b++)f=g[b],h.push(a[""+f+c.charAt(0).toUpperCase()+c.substr(1)]=e);return h}.call(this));return d},e.prototype.vendorCSS=function(a,b){var c,e,f,g,h,i;for(h=d(a),g=h.getPropertyCSSValue(b),f=this.vendors,c=0,e=f.length;e>c;c++)i=f[c],g=g||h.getPropertyCSSValue("-"+i+"-"+b);return g},e.prototype.animationName=function(a){var b;try{b=this.vendorCSS(a,"animation-name").cssText}catch(c){b=d(a).getPropertyValue("animation-name")}return"none"===b?"":b},e.prototype.cacheAnimationName=function(a){return this.animationNameCache.set(a,this.animationName(a))},e.prototype.cachedAnimationName=function(a){return this.animationNameCache.get(a)},e.prototype.scrollHandler=function(){return this.scrolled=!0},e.prototype.scrollCallback=function(){var a;return!this.scrolled||(this.scrolled=!1,this.boxes=function(){var b,c,d,e;for(d=this.boxes,e=[],b=0,c=d.length;c>b;b++)a=d[b],a&&(this.isVisible(a)?this.show(a):e.push(a));return e}.call(this),this.boxes.length||this.config.live)?void 0:this.stop()},e.prototype.offsetTop=function(a){for(var b;void 0===a.offsetTop;)a=a.parentNode;for(b=a.offsetTop;a=a.offsetParent;)b+=a.offsetTop;return b},e.prototype.isVisible=function(a){var b,c,d,e,f;return c=a.getAttribute("data-wow-offset")||this.config.offset,f=window.pageYOffset,e=f+Math.min(this.element.clientHeight,this.util().innerHeight())-c,d=this.offsetTop(a),b=d+a.clientHeight,e>=d&&b>=f},e.prototype.util=function(){return null!=this._util?this._util:this._util=new b},e.prototype.disabled=function(){return!this.config.mobile&&this.util().isMobile(navigator.userAgent)},e}()}).call(this);
\ No newline at end of file
diff --git a/public/logo.png b/public/logo.png
new file mode 100644 (file)
index 0000000..6e14c8c
Binary files /dev/null and b/public/logo.png differ
diff --git a/public/logo.svg b/public/logo.svg
new file mode 100644 (file)
index 0000000..a27fdd4
--- /dev/null
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg id="svg4200" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="61.699mm" width="65.023mm" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 230.39711 218.6199">
+ <g id="layer1" stroke-linejoin="round" fill-rule="evenodd" transform="translate(-245.27 -58.434)" stroke="#0288d1" stroke-width="6" fill="#fff">
+  <g stroke-linecap="round">
+   <path id="path5686" d="m343.79 238.6 128.88-74.409-92.058-53.15-128.88 74.409z"/>
+   <path id="path5688" d="m251.73 185.45v21.26l92.058 53.15 128.88-74.409v-21.26"/>
+   <path id="path5694" d="m343.79 274.03-92.058-53.15s-7.5-16.918 0-28.346l92.058 53.15 128.88-74.409v28.346l-128.88 74.409"/>
+   <path id="path5686-5" d="m343.79 188.99 128.88-74.41-92.06-53.146-128.88 74.406z"/>
+   <path id="path5692-7" d="m343.79 188.99 128.88-74.409 0.00001 28.346-128.88 74.409-92.058-53.15s-6.0714-17.632 0-28.346z"/>
+   <path id="path5694-5" d="m343.79 245.69-92.058-53.15s-7.5-16.918 0-28.346l92.058 53.15 128.88-74.409-0.00001 28.346-128.88 74.409"/>
+  </g>
+  <path id="path5831" d="m402.09 73.836-55.234 31.89 21.48 1.7716 3.0686 12.402 55.235-31.89z"/>
+ </g>
+</svg>
diff --git a/sass/_animations.scss b/sass/_animations.scss
new file mode 100644 (file)
index 0000000..c4866fc
--- /dev/null
@@ -0,0 +1,89 @@
+
+.anim.fadeIn {
+  opacity: 0;
+  animation-name: fadeIn;
+  animation-duration: 480ms;
+  animation-timing-function: cubic-bezier(.62, .28, .23, .99);
+  animation-fill-mode: forwards;
+  &.long {
+    animation-duration: 880ms;
+    animation-name: fadeInLeft;
+  }
+}
+
+@keyframes fadeIn {
+  0% {
+    opacity: 0;
+  }
+  100% {
+    opacity: 1;
+  }
+}
+.anim.scaleIn {
+  opacity: 0;
+  animation-name: scaleIn;
+  animation-duration: 880ms;
+  animation-timing-function: cubic-bezier(.62, .28, .23, .99);
+  transform-origin: 0% 0%;
+}
+
+@keyframes scaleIn {
+  0% {
+    opacity: 0;
+    transform: scale3d(0, 0, 0);
+  }
+  50% {
+    opacity: 1;
+    transform: scale3d(0, 0, 0);
+  }
+  100% {
+    opacity: 1;
+    transform: scale3d(1, 1, 1);
+  }
+}
+
+@keyframes fadeInLeft {
+  0% {
+    opacity: 0;
+    transform: translate3d(-400px, 0, 0);
+  }
+  100% {
+    opacity: 1;
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+@keyframes loadingBob {
+  0% {
+    transform: translate3d(0, 0, 0);
+  }
+  30% {
+    transform: translate3d(0, 0, 0);
+  }
+  50% {
+    transform: translate3d(0, -10px, 0);
+  }
+  70% {
+    transform: translate3d(0, 0, 0);
+  }
+  100% {
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+@keyframes screenshot {
+  0% {
+      transform: translate3d(400px, 20px, 0) scale3d(0, 0, 0);
+  }
+  100% {
+      transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
+  }
+}
+
+.anim.screenshot {
+  transform-origin: 50% 50%;
+  animation-name: screenshot;
+  animation-duration: 880ms;
+  animation-delay: 0s;
+  animation-timing-function: cubic-bezier(.62, .28, .23, .99);
+}
\ No newline at end of file
diff --git a/sass/_blocks.scss b/sass/_blocks.scss
new file mode 100644 (file)
index 0000000..bf23eb5
--- /dev/null
@@ -0,0 +1,127 @@
+
+/*
+* This file container all block styling including background shading,
+* margins, paddings & borders.
+*/
+
+
+/*
+* Background Shading
+*/
+.shaded {
+  background-color: #f1f1f1;
+  &.pos {
+    background-color: lighten($positive, 40%);
+  }
+  &.neg {
+    background-color: lighten($negative, 20%);
+  }
+  &.primary {
+    background-color: lighten($primary, 40%);
+  }
+  &.secondary {
+    background-color: lighten($secondary, 30%);
+  }
+}
+
+/*
+* Bordering
+*/
+.bordered {
+  border: 1px solid #BBB;
+  &.pos {
+    border-color: $positive;
+  }
+  &.neg {
+    border-color: $negative;
+  }
+  &.primary {
+    border-color: $primary;
+  }
+  &.secondary {
+    border-color: $secondary;
+  }
+  &.thick {
+    border-width: 2px;
+  }
+}
+.rounded {
+  border-radius: 3px;
+}
+
+/*
+* Padding
+*/
+.nopadding {
+  padding: 0;
+}
+.padded {
+  padding: $-l;
+  &.large {
+    padding: $-xl;
+  }
+  >h1, >h2, >h3, >h4 {
+    &:first-child {
+      margin-top: 0.1em;
+    }
+  }
+}
+.padded-vertical, .padded-top {
+  padding-top: $-m;
+  &.large {
+    padding-top: $-xl;
+  }
+}
+
+.padded-vertical, .padded-bottom {
+  padding-bottom: $-m;
+  &.large {
+    padding-bottom: $-xl;
+  }
+}
+.padded-horizontal, .padded-left {
+  padding-left: $-m;
+  &.large {
+    padding-left: $-xl;
+  }
+}
+.padded-horizontal, .padded-right {
+  padding-right: $-m;
+  &.large {
+    padding-right: $-xl;
+  }
+}
+
+/*
+* Margins
+*/
+.margins {
+  margin: $-l;
+  &.large {
+    margin: $-xl;
+  }
+}
+.margins-vertical, .margin-top {
+  margin-top: $-m;
+  &.large {
+    margin-top: $-xl;
+  }
+}
+.margins-vertical, .margin-bottom {
+  margin-bottom: $-m;
+  &.large {
+    margin-bottom: $-xl;
+  }
+}
+.margins-horizontal, .margin-left {
+  margin-left: $-m;
+  &.large {
+    margin-left: $-xl;
+  }
+}
+.margins-horizontal, .margin-right {
+  margin-right: $-m;
+  &.large {
+    margin-right: $-xl;
+  }
+}
diff --git a/sass/_buttons.scss b/sass/_buttons.scss
new file mode 100644 (file)
index 0000000..72fa33c
--- /dev/null
@@ -0,0 +1,93 @@
+
+@mixin generate-button-colors($textColor, $backgroundColor) {
+  background-color: $backgroundColor;
+  color: $textColor;
+  &:hover {
+    background-color: lighten($backgroundColor, 8%);
+    box-shadow: $bs-med;
+    text-decoration: none;
+    color: $textColor;
+  }
+  &:active {
+    background-color: darken($backgroundColor, 8%);
+  }
+}
+
+// Button Specific Variables
+$button-border-radius: 2px;
+
+.button-base {
+  text-decoration: none;
+  font-size: $fs-m;
+  line-height: 1.4em;
+  padding: $-xs $-m;
+  margin: $-xs $-xs $-xs 0;
+  display: inline-block;
+  border: none;
+  font-weight: 500;
+  font-family: $text;
+  outline: 0;
+  border-radius: $button-border-radius;
+  cursor: pointer;
+  transition: all ease-in-out 120ms;
+  box-shadow: 0 0.5px 1.5px 0 rgba(0, 0, 0, 0.21);
+  @include generate-button-colors(#EEE, $primary);
+}
+
+.button, input[type="button"], input[type="submit"]  {
+  @extend .button-base;
+  &.pos {
+    @include generate-button-colors(#EEE, $positive);
+  }
+  &.neg {
+    @include generate-button-colors(#EEE, $negative);
+  }
+  &.secondary {
+    @include generate-button-colors(#EEE, $secondary);
+  }
+  &.muted {
+    @include generate-button-colors(#EEE, #888);
+  }
+}
+
+.text-button {
+  @extend .link;
+  background-color: transparent;
+  padding: 0;
+  margin: 0;
+  border: none;
+  &:focus, &:active {
+    outline: 0;
+  }
+  &.neg {
+    color: $negative;
+  }
+}
+
+.button-group {
+  @include clearfix;
+  .button, button[type="button"] {
+    margin: $-xs 0 $-xs 0;
+    float: left;
+    border-radius: 0;
+    &:first-child {
+      border-radius: $button-border-radius 0 0 $button-border-radius;
+    }
+    &:last-child {
+      border-radius: 0 $button-border-radius $button-border-radius 0;
+    }
+  }
+}
+
+.button.block {
+  width: 100%;
+  text-align: center;
+  display: block;
+}
+
+.button.icon {
+  i {
+    padding-right: 0;
+  }
+}
+
diff --git a/sass/_grid.scss b/sass/_grid.scss
new file mode 100644 (file)
index 0000000..4532cca
--- /dev/null
@@ -0,0 +1,740 @@
+
+/** Flexbox styling rules **/
+body.flexbox {
+  display: flex;
+  flex-direction: column;
+  align-items: stretch;
+  height: 100%;
+  min-height: 100%;
+  max-height: 100%;
+  overflow: hidden;
+  #content {
+    flex: 1;
+    display: flex;
+  }
+}
+
+.flex-fill {
+  display: flex;
+  align-items: stretch;
+  .flex, &.flex {
+    flex: 1;
+  }
+}
+
+/** Rules for all columns */
+div[class^="col-"] img {
+  max-width: 100%;
+}
+
+.container {
+  max-width: $max-width;
+  margin-left: auto;
+  margin-right: auto;
+  padding-left: $-m;
+  padding-right: $-m;
+  &.fluid {
+    max-width: 100%;
+  }
+  &.small {
+    max-width: 840px;
+  }
+}
+
+.center-box {
+  margin: $-xl auto 0 auto;
+  padding: $-m $-xxl $-xl*2 $-xxl;
+  max-width: 346px;
+  display: inline-block;
+  text-align: left;
+  vertical-align: top;
+  &.login {
+    background-color: #EEE;
+    box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.1);
+    border: 1px solid #DDD;
+  }
+}
+
+.row {
+  margin-left: -$-m;
+  margin-right: -$-m;
+}
+
+.float {
+  float: left;
+  &.right {
+    float: right;
+  }
+}
+
+.block {
+  display: block;
+  position: relative;
+}
+
+.inline {
+  display: inline;
+}
+
+.block.inline {
+  display: inline-block;
+}
+
+.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
+  position: relative;
+  min-height: 1px;
+  padding-left: $-m;
+  padding-right: $-m;
+}
+.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
+  float: left;
+}
+.col-xs-12 {
+  width: 100%;
+}
+.col-xs-11 {
+  width: 91.66666667%;
+}
+.col-xs-10 {
+  width: 83.33333333%;
+}
+.col-xs-9 {
+  width: 75%;
+}
+.col-xs-8 {
+  width: 66.66666667%;
+}
+.col-xs-7 {
+  width: 58.33333333%;
+}
+.col-xs-6 {
+  width: 50%;
+}
+.col-xs-5 {
+  width: 41.66666667%;
+}
+.col-xs-4 {
+  width: 33.33333333%;
+}
+.col-xs-3 {
+  width: 25%;
+}
+.col-xs-2 {
+  width: 16.66666667%;
+}
+.col-xs-1 {
+  width: 8.33333333%;
+}
+.col-xs-pull-12 {
+  right: 100%;
+}
+.col-xs-pull-11 {
+  right: 91.66666667%;
+}
+.col-xs-pull-10 {
+  right: 83.33333333%;
+}
+.col-xs-pull-9 {
+  right: 75%;
+}
+.col-xs-pull-8 {
+  right: 66.66666667%;
+}
+.col-xs-pull-7 {
+  right: 58.33333333%;
+}
+.col-xs-pull-6 {
+  right: 50%;
+}
+.col-xs-pull-5 {
+  right: 41.66666667%;
+}
+.col-xs-pull-4 {
+  right: 33.33333333%;
+}
+.col-xs-pull-3 {
+  right: 25%;
+}
+.col-xs-pull-2 {
+  right: 16.66666667%;
+}
+.col-xs-pull-1 {
+  right: 8.33333333%;
+}
+.col-xs-pull-0 {
+  right: auto;
+}
+.col-xs-push-12 {
+  left: 100%;
+}
+.col-xs-push-11 {
+  left: 91.66666667%;
+}
+.col-xs-push-10 {
+  left: 83.33333333%;
+}
+.col-xs-push-9 {
+  left: 75%;
+}
+.col-xs-push-8 {
+  left: 66.66666667%;
+}
+.col-xs-push-7 {
+  left: 58.33333333%;
+}
+.col-xs-push-6 {
+  left: 50%;
+}
+.col-xs-push-5 {
+  left: 41.66666667%;
+}
+.col-xs-push-4 {
+  left: 33.33333333%;
+}
+.col-xs-push-3 {
+  left: 25%;
+}
+.col-xs-push-2 {
+  left: 16.66666667%;
+}
+.col-xs-push-1 {
+  left: 8.33333333%;
+}
+.col-xs-push-0 {
+  left: auto;
+}
+.col-xs-offset-12 {
+  margin-left: 100%;
+}
+.col-xs-offset-11 {
+  margin-left: 91.66666667%;
+}
+.col-xs-offset-10 {
+  margin-left: 83.33333333%;
+}
+.col-xs-offset-9 {
+  margin-left: 75%;
+}
+.col-xs-offset-8 {
+  margin-left: 66.66666667%;
+}
+.col-xs-offset-7 {
+  margin-left: 58.33333333%;
+}
+.col-xs-offset-6 {
+  margin-left: 50%;
+}
+.col-xs-offset-5 {
+  margin-left: 41.66666667%;
+}
+.col-xs-offset-4 {
+  margin-left: 33.33333333%;
+}
+.col-xs-offset-3 {
+  margin-left: 25%;
+}
+.col-xs-offset-2 {
+  margin-left: 16.66666667%;
+}
+.col-xs-offset-1 {
+  margin-left: 8.33333333%;
+}
+.col-xs-offset-0 {
+  margin-left: 0%;
+}
+@media (min-width: 768px) {
+  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
+    float: left;
+  }
+  .col-sm-12 {
+    width: 100%;
+  }
+  .col-sm-11 {
+    width: 91.66666667%;
+  }
+  .col-sm-10 {
+    width: 83.33333333%;
+  }
+  .col-sm-9 {
+    width: 75%;
+  }
+  .col-sm-8 {
+    width: 66.66666667%;
+  }
+  .col-sm-7 {
+    width: 58.33333333%;
+  }
+  .col-sm-6 {
+    width: 50%;
+  }
+  .col-sm-5 {
+    width: 41.66666667%;
+  }
+  .col-sm-4 {
+    width: 33.33333333%;
+  }
+  .col-sm-3 {
+    width: 25%;
+  }
+  .col-sm-2 {
+    width: 16.66666667%;
+  }
+  .col-sm-1 {
+    width: 8.33333333%;
+  }
+  .col-sm-pull-12 {
+    right: 100%;
+  }
+  .col-sm-pull-11 {
+    right: 91.66666667%;
+  }
+  .col-sm-pull-10 {
+    right: 83.33333333%;
+  }
+  .col-sm-pull-9 {
+    right: 75%;
+  }
+  .col-sm-pull-8 {
+    right: 66.66666667%;
+  }
+  .col-sm-pull-7 {
+    right: 58.33333333%;
+  }
+  .col-sm-pull-6 {
+    right: 50%;
+  }
+  .col-sm-pull-5 {
+    right: 41.66666667%;
+  }
+  .col-sm-pull-4 {
+    right: 33.33333333%;
+  }
+  .col-sm-pull-3 {
+    right: 25%;
+  }
+  .col-sm-pull-2 {
+    right: 16.66666667%;
+  }
+  .col-sm-pull-1 {
+    right: 8.33333333%;
+  }
+  .col-sm-pull-0 {
+    right: auto;
+  }
+  .col-sm-push-12 {
+    left: 100%;
+  }
+  .col-sm-push-11 {
+    left: 91.66666667%;
+  }
+  .col-sm-push-10 {
+    left: 83.33333333%;
+  }
+  .col-sm-push-9 {
+    left: 75%;
+  }
+  .col-sm-push-8 {
+    left: 66.66666667%;
+  }
+  .col-sm-push-7 {
+    left: 58.33333333%;
+  }
+  .col-sm-push-6 {
+    left: 50%;
+  }
+  .col-sm-push-5 {
+    left: 41.66666667%;
+  }
+  .col-sm-push-4 {
+    left: 33.33333333%;
+  }
+  .col-sm-push-3 {
+    left: 25%;
+  }
+  .col-sm-push-2 {
+    left: 16.66666667%;
+  }
+  .col-sm-push-1 {
+    left: 8.33333333%;
+  }
+  .col-sm-push-0 {
+    left: auto;
+  }
+  .col-sm-offset-12 {
+    margin-left: 100%;
+  }
+  .col-sm-offset-11 {
+    margin-left: 91.66666667%;
+  }
+  .col-sm-offset-10 {
+    margin-left: 83.33333333%;
+  }
+  .col-sm-offset-9 {
+    margin-left: 75%;
+  }
+  .col-sm-offset-8 {
+    margin-left: 66.66666667%;
+  }
+  .col-sm-offset-7 {
+    margin-left: 58.33333333%;
+  }
+  .col-sm-offset-6 {
+    margin-left: 50%;
+  }
+  .col-sm-offset-5 {
+    margin-left: 41.66666667%;
+  }
+  .col-sm-offset-4 {
+    margin-left: 33.33333333%;
+  }
+  .col-sm-offset-3 {
+    margin-left: 25%;
+  }
+  .col-sm-offset-2 {
+    margin-left: 16.66666667%;
+  }
+  .col-sm-offset-1 {
+    margin-left: 8.33333333%;
+  }
+  .col-sm-offset-0 {
+    margin-left: 0%;
+  }
+}
+@media (min-width: 992px) {
+  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
+    float: left;
+  }
+  .col-md-12 {
+    width: 100%;
+  }
+  .col-md-11 {
+    width: 91.66666667%;
+  }
+  .col-md-10 {
+    width: 83.33333333%;
+  }
+  .col-md-9 {
+    width: 75%;
+  }
+  .col-md-8 {
+    width: 66.66666667%;
+  }
+  .col-md-7 {
+    width: 58.33333333%;
+  }
+  .col-md-6 {
+    width: 50%;
+  }
+  .col-md-5 {
+    width: 41.66666667%;
+  }
+  .col-md-4 {
+    width: 33.33333333%;
+  }
+  .col-md-3 {
+    width: 25%;
+  }
+  .col-md-2 {
+    width: 16.66666667%;
+  }
+  .col-md-1 {
+    width: 8.33333333%;
+  }
+  .col-md-pull-12 {
+    right: 100%;
+  }
+  .col-md-pull-11 {
+    right: 91.66666667%;
+  }
+  .col-md-pull-10 {
+    right: 83.33333333%;
+  }
+  .col-md-pull-9 {
+    right: 75%;
+  }
+  .col-md-pull-8 {
+    right: 66.66666667%;
+  }
+  .col-md-pull-7 {
+    right: 58.33333333%;
+  }
+  .col-md-pull-6 {
+    right: 50%;
+  }
+  .col-md-pull-5 {
+    right: 41.66666667%;
+  }
+  .col-md-pull-4 {
+    right: 33.33333333%;
+  }
+  .col-md-pull-3 {
+    right: 25%;
+  }
+  .col-md-pull-2 {
+    right: 16.66666667%;
+  }
+  .col-md-pull-1 {
+    right: 8.33333333%;
+  }
+  .col-md-pull-0 {
+    right: auto;
+  }
+  .col-md-push-12 {
+    left: 100%;
+  }
+  .col-md-push-11 {
+    left: 91.66666667%;
+  }
+  .col-md-push-10 {
+    left: 83.33333333%;
+  }
+  .col-md-push-9 {
+    left: 75%;
+  }
+  .col-md-push-8 {
+    left: 66.66666667%;
+  }
+  .col-md-push-7 {
+    left: 58.33333333%;
+  }
+  .col-md-push-6 {
+    left: 50%;
+  }
+  .col-md-push-5 {
+    left: 41.66666667%;
+  }
+  .col-md-push-4 {
+    left: 33.33333333%;
+  }
+  .col-md-push-3 {
+    left: 25%;
+  }
+  .col-md-push-2 {
+    left: 16.66666667%;
+  }
+  .col-md-push-1 {
+    left: 8.33333333%;
+  }
+  .col-md-push-0 {
+    left: auto;
+  }
+  .col-md-offset-12 {
+    margin-left: 100%;
+  }
+  .col-md-offset-11 {
+    margin-left: 91.66666667%;
+  }
+  .col-md-offset-10 {
+    margin-left: 83.33333333%;
+  }
+  .col-md-offset-9 {
+    margin-left: 75%;
+  }
+  .col-md-offset-8 {
+    margin-left: 66.66666667%;
+  }
+  .col-md-offset-7 {
+    margin-left: 58.33333333%;
+  }
+  .col-md-offset-6 {
+    margin-left: 50%;
+  }
+  .col-md-offset-5 {
+    margin-left: 41.66666667%;
+  }
+  .col-md-offset-4 {
+    margin-left: 33.33333333%;
+  }
+  .col-md-offset-3 {
+    margin-left: 25%;
+  }
+  .col-md-offset-2 {
+    margin-left: 16.66666667%;
+  }
+  .col-md-offset-1 {
+    margin-left: 8.33333333%;
+  }
+  .col-md-offset-0 {
+    margin-left: 0%;
+  }
+}
+@media (min-width: 1200px) {
+  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
+    float: left;
+  }
+  .col-lg-12 {
+    width: 100%;
+  }
+  .col-lg-11 {
+    width: 91.66666667%;
+  }
+  .col-lg-10 {
+    width: 83.33333333%;
+  }
+  .col-lg-9 {
+    width: 75%;
+  }
+  .col-lg-8 {
+    width: 66.66666667%;
+  }
+  .col-lg-7 {
+    width: 58.33333333%;
+  }
+  .col-lg-6 {
+    width: 50%;
+  }
+  .col-lg-5 {
+    width: 41.66666667%;
+  }
+  .col-lg-4 {
+    width: 33.33333333%;
+  }
+  .col-lg-3 {
+    width: 25%;
+  }
+  .col-lg-2 {
+    width: 16.66666667%;
+  }
+  .col-lg-1 {
+    width: 8.33333333%;
+  }
+  .col-lg-pull-12 {
+    right: 100%;
+  }
+  .col-lg-pull-11 {
+    right: 91.66666667%;
+  }
+  .col-lg-pull-10 {
+    right: 83.33333333%;
+  }
+  .col-lg-pull-9 {
+    right: 75%;
+  }
+  .col-lg-pull-8 {
+    right: 66.66666667%;
+  }
+  .col-lg-pull-7 {
+    right: 58.33333333%;
+  }
+  .col-lg-pull-6 {
+    right: 50%;
+  }
+  .col-lg-pull-5 {
+    right: 41.66666667%;
+  }
+  .col-lg-pull-4 {
+    right: 33.33333333%;
+  }
+  .col-lg-pull-3 {
+    right: 25%;
+  }
+  .col-lg-pull-2 {
+    right: 16.66666667%;
+  }
+  .col-lg-pull-1 {
+    right: 8.33333333%;
+  }
+  .col-lg-pull-0 {
+    right: auto;
+  }
+  .col-lg-push-12 {
+    left: 100%;
+  }
+  .col-lg-push-11 {
+    left: 91.66666667%;
+  }
+  .col-lg-push-10 {
+    left: 83.33333333%;
+  }
+  .col-lg-push-9 {
+    left: 75%;
+  }
+  .col-lg-push-8 {
+    left: 66.66666667%;
+  }
+  .col-lg-push-7 {
+    left: 58.33333333%;
+  }
+  .col-lg-push-6 {
+    left: 50%;
+  }
+  .col-lg-push-5 {
+    left: 41.66666667%;
+  }
+  .col-lg-push-4 {
+    left: 33.33333333%;
+  }
+  .col-lg-push-3 {
+    left: 25%;
+  }
+  .col-lg-push-2 {
+    left: 16.66666667%;
+  }
+  .col-lg-push-1 {
+    left: 8.33333333%;
+  }
+  .col-lg-push-0 {
+    left: auto;
+  }
+  .col-lg-offset-12 {
+    margin-left: 100%;
+  }
+  .col-lg-offset-11 {
+    margin-left: 91.66666667%;
+  }
+  .col-lg-offset-10 {
+    margin-left: 83.33333333%;
+  }
+  .col-lg-offset-9 {
+    margin-left: 75%;
+  }
+  .col-lg-offset-8 {
+    margin-left: 66.66666667%;
+  }
+  .col-lg-offset-7 {
+    margin-left: 58.33333333%;
+  }
+  .col-lg-offset-6 {
+    margin-left: 50%;
+  }
+  .col-lg-offset-5 {
+    margin-left: 41.66666667%;
+  }
+  .col-lg-offset-4 {
+    margin-left: 33.33333333%;
+  }
+  .col-lg-offset-3 {
+    margin-left: 25%;
+  }
+  .col-lg-offset-2 {
+    margin-left: 16.66666667%;
+  }
+  .col-lg-offset-1 {
+    margin-left: 8.33333333%;
+  }
+  .col-lg-offset-0 {
+    margin-left: 0%;
+  }
+}
+.clearfix:before,
+.clearfix:after,
+.container:before,
+.container:after,
+.container-fluid:before,
+.container-fluid:after,
+.row:before,
+.row:after {
+  content: " ";
+  display: table;
+}
+.clearfix:after,
+.container:after,
+.container-fluid:after,
+.row:after {
+  clear: both;
+}
+.center-block {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
diff --git a/sass/_header.scss b/sass/_header.scss
new file mode 100644 (file)
index 0000000..389cbcf
--- /dev/null
@@ -0,0 +1,108 @@
+/**
+ * Includes the main navigation header and the faded toolbar.
+ */
+
+header {
+  display: block;
+  z-index: 2;
+  top: 0;
+  background-color: $primary-dark;
+  color: #fff;
+  h2 {
+    color: #FFF;
+    font-size: 3.333em;
+    font-weight: 300;
+  }
+  .spaced {
+    margin-top: $-xxl;
+    margin-bottom: $-xxl*2;
+    h2, p {
+      max-width: 420px;
+    }
+    @include smaller-than($screen-lg) {
+      position: relative;
+      margin-top: $-m;
+      margin-bottom: $-m*2;
+    }
+  }
+  p {
+    font-size: 1.2em;
+    font-weight: 300;
+  }
+}
+
+.logo {
+  text-align: left;
+  margin: $-m 0;
+  h1, img {
+    vertical-align: top;
+    display: inline-block;
+    margin: 0;
+  }
+  h1 {
+    color: #FFF;
+    font-size: 2.666em;
+    font-weight: 400;
+  }
+  img {
+    margin-right: $-l;
+    height: 48px;
+    //padding-top: $-m;
+  }
+}
+
+
+.breadcrumbs span.sep {
+  color: #aaa;
+  padding: 0 $-xs;
+}
+
+.faded {
+  a, button, span {
+    color: #666;
+  }
+  .text-button {
+    opacity: 0.5;
+    transition: all ease-in-out 120ms;
+    &:hover {
+      opacity: 1;
+      text-decoration: none;
+    }
+  }
+}
+
+.faded-small {
+  color: #000;
+  font-size: 0.9em;
+  background-color: rgba(21, 101, 192, 0.15);
+}
+
+.breadcrumbs .text-button, .action-buttons .text-button {
+  display: inline-block;
+  padding: $-s;
+  &:last-child {
+    padding-right: 0;
+  }
+}
+.action-buttons {
+  text-align: right;
+  &.text-left {
+    text-align: left;
+    .text-button {
+      padding-right: $-m;
+      padding-left: 0;
+    }
+  }
+}
+
+.setting-nav {
+  text-align: center;
+  a {
+    padding: $-m;
+    display: inline-block;
+    color: #666;
+    &.selected {
+      border-bottom: 2px solid $primary;
+    }
+  }
+}
\ No newline at end of file
diff --git a/sass/_html.scss b/sass/_html.scss
new file mode 100644 (file)
index 0000000..0eb945e
--- /dev/null
@@ -0,0 +1,23 @@
+* {
+  box-sizing: border-box;
+}
+html {
+  background-color: #FFFFFF;
+  height: 100%;
+}
+body {
+  font-family: $text;
+  font-size: $fs-m;
+  line-height: 1.6;
+  color: #616161;
+  -webkit-font-smoothing: antialiased;
+}
+
+table {
+  min-width: 100px;
+  td {
+       min-width: 10px;
+       padding: 4px 6px;
+       border: 1px solid #DDD;
+  }
+}
\ No newline at end of file
diff --git a/sass/_lists.scss b/sass/_lists.scss
new file mode 100644 (file)
index 0000000..f06e647
--- /dev/null
@@ -0,0 +1,210 @@
+.page-list {
+  h3 {
+    margin: $-l 0 $-m 0;
+  }
+  a.chapter {
+    color: $color-chapter;
+  }
+  .inset-list {
+    display: block;
+    overflow: hidden;
+    // padding-left: $-m;
+    margin-bottom: $-l;
+  }
+  h4 {
+    display: block;
+    margin: $-s 0 0 0;
+    border-left: 5px solid $color-page;
+    padding: $-xs 0 $-xs $-m;
+  }
+  hr {
+    margin-top: 0;
+  }
+  .page, .chapter, .book {
+    padding-left: $-l;
+  }
+  .page {
+    border-left: 5px solid $color-page;
+  }
+  .chapter {
+    border-left: 5px solid $color-chapter;
+  }
+  .book {
+    border-left: 5px solid $color-book;
+  }
+}
+.chapter-toggle {
+  cursor: pointer;
+  margin: 0 0 $-l 0;
+  transition: all ease-in-out 180ms;
+  user-select: none;
+  i {
+    transition: all ease-in-out 180ms;
+    transform: rotate(0deg);
+    transform-origin: 25% 50%;
+  }
+  &.open {
+    margin-bottom: 0;
+  }
+  &.open i {
+    transform: rotate(90deg);
+  }
+}
+
+.page-nav-list {
+  $nav-indent: $-s;
+  margin-left: 2px;
+  list-style: none;
+  li {
+    //border-left: 1px solid rgba(0, 0, 0, 0.1);
+    padding-left: $-xs;
+    border-left: 2px solid #888;
+    margin-bottom: 4px;
+  }
+  li a {
+    color: #555;
+  }
+  .nav-H2 {
+    margin-left: $nav-indent;
+    font-size: 0.95em;
+  }
+  .nav-H3 {
+    margin-left: $nav-indent*2;
+    font-size: 0.90em
+  }
+  .nav-H4 {
+    margin-left: $nav-indent*3;
+    font-size: 0.85em
+  }
+  .nav-H5 {
+    margin-left: $nav-indent*4;
+    font-size: 0.80em
+  }
+  .nav-H6 {
+    margin-left: $nav-indent*5;
+    font-size: 0.75em
+  }
+}
+
+// Sidebar list
+.book-tree {
+  margin-top: $-xl;
+}
+.book-tree h4 {
+  padding: $-m $-s 0 $-s;
+  i {
+    padding-right: $-s;
+  }
+}
+.book-tree .sidebar-page-list {
+  list-style: none;
+  margin: 0;
+  margin-top: $-xs;
+  border-left: 5px solid $color-book;
+  li a {
+    display: block;
+    border-bottom: none;
+    padding-left: $-s;
+    padding: $-xs 0 $-xs $-s;
+    &:hover {
+      background-color: rgba(255, 255, 255, 0.2);
+      text-decoration: none;
+    }
+  }
+  li, a {
+    display: block;
+  }
+  a.bold {
+    color: #EEE !important;
+  }
+  ul {
+    list-style: none;
+    margin: 0;
+  }
+  .book {
+    color: $color-book !important;
+    &.selected {
+      background-color: rgba($color-book, 0.29);
+    }
+  }
+  .chapter {
+    color: $color-chapter !important;
+    &.selected {
+      background-color: rgba($color-chapter, 0.12);
+    }
+  }
+  .list-item-chapter {
+    border-left: 5px solid $color-chapter;
+    margin: 10px 10px;
+    display: block;
+  }
+  .list-item-page {
+    border-bottom: none;
+  }
+  .page {
+    color: $color-page !important;
+    border-left: 5px solid $color-page;
+    margin: 10px 10px;
+    border-bottom: none;
+    &.selected {
+      background-color: rgba($color-page, 0.1);
+    }
+  }
+}
+
+// Sortable Lists
+.sortable-page-list, .sortable-page-list ul {
+  list-style: none;
+  background-color: #FFF;
+}
+.sort-box {
+  margin-bottom: $-m;
+  padding: 0 $-l 0 $-l;
+  border-left: 4px solid $color-book;
+}
+.sortable-page-list {
+  margin-left: 0;
+  > ul {
+    margin-left: 0;
+  }
+  ul {
+    margin-bottom: 0;
+    margin-top: 0;
+    box-shadow: 0 0 1px 0 rgba(0, 0, 0, 0.1);
+  }
+  li {
+    border: 1px solid #DDD;
+    padding: $-xs $-s;
+    margin-top: -1px;
+    min-height: 38px;
+    &.text-chapter {
+      border-left: 2px solid $color-chapter;
+    }
+    &.text-page {
+      border-left: 2px solid $color-page;
+    }
+  }
+  li:first-child {
+    margin-top: $-xs;
+  }
+}
+.sortable-page-list li.placeholder {
+  position: relative;
+}
+.sortable-page-list li.placeholder:before {
+  position: absolute;
+}
+
+
+.activity-list-item {
+  padding: $-s 0;
+  color: #888;
+  border-bottom: 1px solid #EEE;
+  font-size: 0.9em;
+  .left {
+    float: left;
+  }
+  .left + .right {
+    margin-left: 30px + $-s;
+  }
+}
\ No newline at end of file
diff --git a/sass/_mixins.scss b/sass/_mixins.scss
new file mode 100644 (file)
index 0000000..3d3101c
--- /dev/null
@@ -0,0 +1,16 @@
+// Responsive breakpoint control
+@mixin smaller-than($size) {
+    @media screen and (max-width: $size) { @content; }
+}
+@mixin larger-than($size) {
+    @media screen and (min-width: $size) { @content; }
+}
+@mixin clearfix() {
+  &:after {
+    display: block;
+    content: '';
+    font-size: 0;
+    clear: both;
+    position: relative;
+  }
+}
diff --git a/sass/_reset.scss b/sass/_reset.scss
new file mode 100644 (file)
index 0000000..2982152
--- /dev/null
@@ -0,0 +1,40 @@
+/* http://meyerweb.com/eric/tools/css/reset/
+   v2.0 | 20110126
+   License: none (public domain)
+*/
+
+html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-size: 100%;
+  font: inherit;
+  vertical-align: baseline; }
+
+/* HTML5 display-role reset for older browsers */
+
+article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {
+  display: block; }
+
+body {
+  line-height: 1; }
+
+ol, ul {
+  list-style: none; }
+
+blockquote, q {
+  quotes: none; }
+
+blockquote {
+  &:before, &:after {
+    content: '';
+    content: none; } }
+
+q {
+  &:before, &:after {
+    content: '';
+    content: none; } }
+
+table {
+  border-collapse: collapse;
+  border-spacing: 0; }
diff --git a/sass/_text.scss b/sass/_text.scss
new file mode 100644 (file)
index 0000000..d456ef3
--- /dev/null
@@ -0,0 +1,274 @@
+/*
+ * Header Styles
+ */
+
+h1 {
+  font-size: 3.625em;
+  line-height: 1.22222222em;
+  margin-top: 0.48888889em;
+  margin-bottom: 0.48888889em;
+}
+h2 {
+  font-size: 2.8275em;
+  line-height: 1.294117647em;
+  margin-top: 0.8627451em;
+  margin-bottom: 0.43137255em;
+}
+h3 {
+  font-size: 1.75em;
+  line-height: 1.571428572em;
+  margin-top: 0.78571429em;
+  margin-bottom: 0.43137255em;
+}
+h4 {
+  font-size: 1em;
+  line-height: 1.375em;
+  margin-top: 0.78571429em;
+  margin-bottom: 0.43137255em;
+}
+
+h1, h2, h3, h4 {
+  font-weight: 400;
+  position: relative;
+  display: block;
+  color: #555;
+  .subheader {
+    display: block;
+    font-size: 0.5em;
+    line-height: 1em;
+    color: lighten($text-dark, 16%);
+  }
+}
+
+/*
+ * Link styling
+ */
+a, .link {
+  color: $primary;
+  cursor: pointer;
+  text-decoration: none;
+  transition: color ease-in-out 80ms;
+  font-family: $text;
+  line-height: 1.6;
+  &:hover {
+    text-decoration: underline;
+    color: darken($primary, 20%);
+  }
+  i {
+    padding-right: $-s;
+  }
+  i.zmdi-hc-flip-horizontal {
+    padding-right: 0;
+    padding-left: $-s;
+  }
+}
+
+/*
+ * Other HTML Text Elements
+ */
+p, ul, ol, pre, table, blockquote {
+  margin-top: 0.3em;
+  margin-bottom: 1em;
+}
+
+hr {
+  border: 0;
+  height: 1px;
+  border: 0;
+  background: #EAEAEA;
+  margin-bottom: $-l;
+  &.faded {
+    background-image: linear-gradient(to right, #FFF, #e3e0e0 20%, #e3e0e0 80%, #FFF);
+  }
+  &.margin-top, &.even {
+    margin-top: $-l;
+  }
+}
+
+strong, b, .bold, .strong {
+  font-weight: bold;
+  > strong, > b, > .bold, > .strong {
+    font-weight: bolder;
+  }
+}
+
+em, i, .italic {
+  font-style: italic;
+}
+
+small, p.small, span.small, .text-small {
+  font-size: 0.8em;
+  color: lighten($text-dark, 20%);
+}
+
+sup, .superscript {
+  vertical-align: super;
+  font-size: 0.8em;
+}
+
+pre {
+  font-family: monospace;
+  white-space:pre;
+  font-size: 0.8em;
+  overflow: hidden;
+  border-radius: 4px;
+  box-shadow: 0 1px 2px 0px rgba(10, 10, 10, 0.06);
+  border: 1px solid rgba(221, 221, 221, 0.66);
+  background-color: #fdf6e3;
+  padding: 0.5em;
+}
+
+blockquote {
+  display: block;
+  position: relative;
+  border-left: 4px solid $primary;
+  background-color: #F8F8F8;
+  padding: $-s $-m $-s $-xl;
+  &:before {
+    content: "\201C";
+    font-size: 2em;
+    font-weight: bold;
+    position: absolute;
+    top: $-s;
+    left: $-s;
+    color: lighten($text-dark, 20%);
+  }
+}
+
+.code-base {
+    background-color: #F8F8F8;
+    font-family: monospace;
+    font-size: 0.80em;
+    border: 1px solid #DDD;
+    border-radius: 3px;
+}
+
+code {
+  @extend .code-base;
+  display: inline;
+  padding: 1px 3px;
+  white-space:pre;
+  line-height: 1.2em;
+  margin-bottom: 1.2em;
+}
+
+span.code {
+  @extend .code-base;
+  padding: 1px $-xs;
+}
+/*
+ * Text colors
+ */
+p.pos, p .pos, span.pos, .text-pos {
+  color: $positive;
+  &:hover {
+    color: $positive;
+  }
+}
+
+p.neg, p .neg, span.neg, .text-neg {
+  color: $negative;
+  &:hover {
+    color: $negative;
+  }
+}
+
+p.muted, p .muted, span.muted, .text-muted {
+       color: lighten($text-dark, 26%);
+    &.small, .small {
+      color: lighten($text-dark, 42%);
+    }
+}
+
+p.primary, p .primary, span.primary, .text-primary {
+       color: $primary;
+  &:hover {
+    color: $primary;
+  }
+}
+
+p.secondary, p .secondary, span.secondary, .text-secondary {
+       color: $secondary;
+  &:hover {
+    color: $secondary;
+  }
+}
+
+.text-book {
+  color: $color-book;
+  &:hover {
+    color: $color-book;
+  }
+}
+.text-page {
+  color: $color-page;
+  &:hover {
+    color: $color-page;
+  }
+}
+.text-chapter {
+  color: $color-chapter;
+  &:hover {
+    color: $color-chapter;
+  }
+}
+
+span.highlight {
+  //background-color: rgba($primary, 0.2);
+  font-weight: bold;
+  //padding: 2px 4px;
+}
+
+/*
+ * Lists
+ */
+ul {
+  list-style: disc;
+  margin-left: $-m*1.5;
+}
+
+/*
+ * Generic text styling classes
+ */
+.underlined {
+  text-decoration: underline;
+}
+
+.text-center {
+  text-align: center;
+}
+
+.text-left {
+  text-align: left;
+}
+
+.text-right {
+  text-align: right;
+}
+
+/**
+ * Grouping
+ */
+.header-group {
+  margin: $-m 0;
+  h1, h2, h3, h4, h5, h6 {
+    margin: 0;
+  }
+}
+
+span.sep {
+  color: #BBB;
+  padding: 0 $-xs;
+}
+
+.list > * {
+  display: block;
+}
+
+/**
+  * Icons
+  */
+i {
+  padding-right: $-xs;
+}
+
diff --git a/sass/_variables.scss b/sass/_variables.scss
new file mode 100644 (file)
index 0000000..095a0e0
--- /dev/null
@@ -0,0 +1,54 @@
+// Variables
+///////////////
+
+// Sizes
+$max-width: 1400px;
+
+// Screen breakpoints
+$xl: 1100px;
+$ipad-width: 1028px; // Is actually 1024 but we go over to ensure functionality.
+$l: 1000px;
+$m: 800px;
+$s: 600px;
+$xs: 400px;
+$xxs: 360px;
+$screen-md: 992px;
+$screen-lg: 1200px;
+$screen-sm: 768px;
+
+// Spacing (Margins+Padding)
+$-xxxl: 64px;
+$-xxl: 48px;
+$-xl: 32px;
+$-l: 24px;
+$-m: 16px;
+$-s: 12px;
+$-xs: 6px;
+$-xxs: 3px;
+
+// Fonts
+$heading:  'Roboto', Helvetica, Arial, sans-serif;
+$text: 'Roboto', Helvetica, Arial, sans-serif;
+$fs-m: 15px;
+$fs-s: 14px;
+
+// Colours
+$primary: #0288D1;
+$primary-dark: #0288D1;
+$secondary: #e27b41;
+$positive: #52A256;
+$negative: #E84F4F;
+
+// Item Colors
+$color-book: #009688;
+$color-chapter: #ef7c3c;
+$color-page: $primary;
+
+// Text colours
+$text-dark: #444;
+$text-light: #EEE;
+
+// Shadows
+$bs-light: 0 0 4px 1px #CCC;
+$bs-med: 0 1px 3px 1px rgba(76, 76, 76, 0.26);
+$bs-hover: 0 2px 2px 1px rgba(0,0,0,.13);
diff --git a/sass/styles.scss b/sass/styles.scss
new file mode 100644 (file)
index 0000000..caebd86
--- /dev/null
@@ -0,0 +1,59 @@
+@import "reset";
+@import "variables";
+@import "mixins";
+@import "html";
+@import "text";
+@import "grid";
+@import "blocks";
+@import "buttons";
+@import "animations";
+@import "header";
+@import "lists";
+
+.md-margin-top {
+  margin-top: $-xxl*1.6;
+  @include smaller-than($screen-lg) {
+    margin-top: $-m;
+  }
+}
+
+.screenshot-container {
+  perspective: 1000px;
+  perspective-origin: 50% 50%;
+}
+.screenshot {
+  border-radius: 4px;
+  display: inline-block;
+  overflow: hidden;
+  box-shadow: 0 0 4px 1px rgba(0, 0, 0, 0.2);
+  border: 1px solid #DDD;
+  position: absolute;
+  max-width: 100%;
+  transform: rotateY(0);
+  transition: all ease-in-out 200ms;
+  &:hover {
+    transform: rotateY(-20deg);
+  }
+  @include smaller-than($screen-lg) {
+    position: relative;
+    width: 80%;
+    display: block;
+    margin-bottom: $-l;
+  }
+}
+
+footer {
+  padding-bottom: $-s;
+}
+
+
+h3 > i {
+  color: $primary;
+  vertical-align: top;
+  padding-top: 8px;
+  padding-right: $-s;
+}
+
+p > i {
+  vertical-align: top;
+}
\ No newline at end of file
diff --git a/scripts/script.js b/scripts/script.js
new file mode 100644 (file)
index 0000000..29271ce
--- /dev/null
@@ -0,0 +1,12 @@
+
+var wow = new WOW(
+  {
+    boxClass:     'wow',      // animated element css class (default is wow)
+    animateClass: 'anim', // animation css class (default is animated)
+    offset:       80,          // distance to the element when triggering the animation (default is 0)
+    mobile:       true,       // trigger animations on mobile devices (default is true)
+    live:         true,       // act on asynchronously loaded content (default is true)
+    scrollContainer: null // optional scroll container selector, otherwise use window
+  }
+);
+wow.init();
\ No newline at end of file