Skip to content
Browse files

BOOM

  • Loading branch information...
1 parent 0ba19a9 commit 83afb8e2fe1a8d2b922dbfc27a76374de8e46a5b @aaronblohowiak committed Sep 16, 2011
View
2 .gitignore
@@ -0,0 +1,2 @@
+node_modules
+.DS_Store
View
5 Makefile
@@ -0,0 +1,5 @@
+lessc:
+ restartr -c ./node_modules/.bin/lessc -a less/bootstrap.less -a public/app.css less/*
+
+server:
+ restartr -c node -a server.js templates/* public/app.css controllers/* live_renders/*
View
6 README
@@ -1,6 +0,0 @@
-A simple template project for you to start a new Transitive project with Bootstrap & lesscss.
-
-More details coming soon ^.^ for now, check out the Makefile.
-
-
-
View
13 README.md
@@ -0,0 +1,13 @@
+# Transitive-Bootstrap
+
+A simple template project for you to start a new Transitive project with Bootstrap, Less and redis.
+
+## To get started
+
+* install node 0.4.11 and npm
+* fork this repo (or download an archive)
+* cd to the root of the project, `npm install`
+* `make less` and `make server`.
+* open http://localhost:3454
+
+Victory!!
View
10 controllers/home.js
@@ -0,0 +1,10 @@
+module.exports = function(routes, Transitive){
+ routes.get("/", function(req, res){
+ res.writeHead(200, {
+ 'Content-Type': 'text/html',
+ 'Cache-Control': 'no-cache, no-store'
+ });
+
+ res.end(Transitive.Views.renderPage("home", {}));
+ });
+};
View
97 generated/public/templates.js
@@ -0,0 +1,97 @@
+_browserifyRequire.modules["./templates.js"] = function () {
+ var module = { exports : {} };
+ var exports = module.exports;
+ var __dirname = ".";
+ var __filename = "./templates.js";
+
+ var require = function (path) {
+ return _browserifyRequire.fromFile("./templates.js", path);
+ };
+
+ (function () {
+ module.exports={ "home": function anonymous(locals) {
+with(locals || {}) {
+ try {
+ var _$output="";
+this.crumbs = ["Some", "Crumbs", "Rock"]
+; _$output = _$output +
+"<div class=\"row\"><div class=\"span4\"><h2>Left Navigation</h2><div id=\"target\"></div></div><div class=\"span12\"><div class=\"page-header\"> <h1> Transitive-Bootstrap <small> A skeleton <a href=\"http://transitive.io\"> Transitive </a> project. </small> </h1> </div><h1>This is the home.</h1>" +
+this.render("onThe", {place: "server"}) +
+"</div></div>\n<script type=\"text/javascript\">\n//<![CDATA[\n$(function(){\n $(\"#target\").html(Transitive.Views.render(\"onThe\", {place: \"browser\"}));\n})\n//]]>\n</script>\n";
+ return _$output; } catch (e) {
+ return "\n<pre class='error'>" + this.escape(e.stack) + "</pre>\n";
+ }
+}
+}
+, "layout": function anonymous(locals) {
+with(locals || {}) {
+ try {
+ var _$output="<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head></head><link rel=\"stylesheet\" href=\"/app.css?" +
+this.escape(q) +
+"\" media=\"all\" /><script src=\"/transitive.js?" +
+this.escape(q) +
+"\"></script><script src=\"/templates.js?" +
+this.escape(q) +
+"\"></script>\n<script type=\"text/javascript\">\n//<![CDATA[\nTransitive = require(\"./transitive\");\nTransitive.Views.templates = require(\"./templates.js\");\nif(window.console){}else{\n console = {};\n console.log = function(){}\n}\n//]]>\n</script>\n<title>Change the title in layout.haml</title><body><div class=\"topbar\"><div class=\"fill\"><div class=\"container\"><h3><a href=\"#\" style=\"letter-spacing:3px;\">X</a></h3><ul><li><a href=\"/\">Home</a></li>" +
+(function () { if (this.crumbs) { return (
+(function () { var __result__ = [], __key__, idx; for (__key__ in this.crumbs) { if (this.crumbs.hasOwnProperty(__key__)) { idx = this.crumbs[__key__]; __result__.push(
+"<li><a class=\"skinny\">></a></li><li><a href=\"#masthead\">" +
+this.escape(idx) +
+"</a></li>"
+); } } return __result__.join(""); }).call(this)
+);} else { return ""; } }).call(this) +
+"</ul><ul class=\"secondary-nav\"><li><form><input class=\"search\" /></form></li><li style=\"margin-left:10px\" class=\"dropdown\"><a href=\"#toggle\" class=\"dropdown-toggle\">Account</a><ul class=\"dropdown-menu\"><li><a href=\"#\">secondary-link</a></li></ul></li></ul></div></div></div><div style=\"margin-top:40px\"></div><div class=\"container\">" +
+content +
+"</div>\n<script type=\"text/javascript\">\n//<![CDATA[\n" +
+etc +
+"\nTransitive.boot();\n//]]>\n</script>\n</body></html>";
+ return _$output; } catch (e) {
+ return "\n<pre class='error'>" + this.escape(e.stack) + "</pre>\n";
+ }
+}
+}
+, "onThe": function anonymous(locals) {
+with(locals || {}) {
+ try {
+ var _$output="<div class=\"on-the\">I was rendered on the " +
+this.escape(place) +
+"</div>";
+ return _$output; } catch (e) {
+ return "\n<pre class='error'>" + this.escape(e.stack) + "</pre>\n";
+ }
+}
+}
+, "render": "function(k, v){ return this[k](v); }"
+, "liveRenders": { "prepend": { "name": "prepend"
+, "prepare": function (templateName, data){
+ var itemsHtml = [];
+
+ for(var i = data.length - 1; i >= 0; i--){
+ itemsHtml.push(this.render(templateName, data[i]));
+ }
+
+ return itemsHtml.join();
+ }
+, "update": function (event){
+ this.element.prepend(Transitive.Views.render(this.templateName, event));
+ }
+}
+, "replace": { "name": "replace"
+, "prepare": function (templateName, data){
+ return this.render(templateName, data);
+ }
+, "update": function (ev){
+ this.element.html(Transitive.Views.render(this.templateName, ev));
+ }
+}
+}
+};
+ }).call(module.exports);
+
+ _browserifyRequire.modules["./templates.js"]._cached = module.exports;
+ return module.exports;
+};
+
+[].forEach(function (a) {
+ _browserifyRequire.modules[a] = _browserifyRequire.modules["./templates.js"];
+});
View
3,610 generated/public/transitive.js
3,610 additions, 0 deletions not shown because the diff is too large. Please use a local Git client to view these changes.
View
77 generated/templates.js
@@ -0,0 +1,77 @@
+module.exports={ "home": function anonymous(locals) {
+with(locals || {}) {
+ try {
+ var _$output="";
+this.crumbs = ["Some", "Crumbs", "Rock"]
+; _$output = _$output +
+"<div class=\"row\"><div class=\"span4\"><h2>Left Navigation</h2><div id=\"target\"></div></div><div class=\"span12\"><div class=\"page-header\"> <h1> Transitive-Bootstrap <small> A skeleton <a href=\"http://transitive.io\"> Transitive </a> project. </small> </h1> </div><h1>This is the home.</h1>" +
+this.render("onThe", {place: "server"}) +
+"</div></div>\n<script type=\"text/javascript\">\n//<![CDATA[\n$(function(){\n $(\"#target\").html(Transitive.Views.render(\"onThe\", {place: \"browser\"}));\n})\n//]]>\n</script>\n";
+ return _$output; } catch (e) {
+ return "\n<pre class='error'>" + this.escape(e.stack) + "</pre>\n";
+ }
+}
+}
+, "layout": function anonymous(locals) {
+with(locals || {}) {
+ try {
+ var _$output="<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head></head><link rel=\"stylesheet\" href=\"/app.css?" +
+this.escape(q) +
+"\" media=\"all\" /><script src=\"/transitive.js?" +
+this.escape(q) +
+"\"></script><script src=\"/templates.js?" +
+this.escape(q) +
+"\"></script>\n<script type=\"text/javascript\">\n//<![CDATA[\nTransitive = require(\"./transitive\");\nTransitive.Views.templates = require(\"./templates.js\");\nif(window.console){}else{\n console = {};\n console.log = function(){}\n}\n//]]>\n</script>\n<title>Change the title in layout.haml</title><body><div class=\"topbar\"><div class=\"fill\"><div class=\"container\"><h3><a href=\"#\" style=\"letter-spacing:3px;\">X</a></h3><ul><li><a href=\"/\">Home</a></li>" +
+(function () { if (this.crumbs) { return (
+(function () { var __result__ = [], __key__, idx; for (__key__ in this.crumbs) { if (this.crumbs.hasOwnProperty(__key__)) { idx = this.crumbs[__key__]; __result__.push(
+"<li><a class=\"skinny\">></a></li><li><a href=\"#masthead\">" +
+this.escape(idx) +
+"</a></li>"
+); } } return __result__.join(""); }).call(this)
+);} else { return ""; } }).call(this) +
+"</ul><ul class=\"secondary-nav\"><li><form><input class=\"search\" /></form></li><li style=\"margin-left:10px\" class=\"dropdown\"><a href=\"#toggle\" class=\"dropdown-toggle\">Account</a><ul class=\"dropdown-menu\"><li><a href=\"#\">secondary-link</a></li></ul></li></ul></div></div></div><div style=\"margin-top:40px\"></div><div class=\"container\">" +
+content +
+"</div>\n<script type=\"text/javascript\">\n//<![CDATA[\n" +
+etc +
+"\nTransitive.boot();\n//]]>\n</script>\n</body></html>";
+ return _$output; } catch (e) {
+ return "\n<pre class='error'>" + this.escape(e.stack) + "</pre>\n";
+ }
+}
+}
+, "onThe": function anonymous(locals) {
+with(locals || {}) {
+ try {
+ var _$output="<div class=\"on-the\">I was rendered on the " +
+this.escape(place) +
+"</div>";
+ return _$output; } catch (e) {
+ return "\n<pre class='error'>" + this.escape(e.stack) + "</pre>\n";
+ }
+}
+}
+, "render": "function(k, v){ return this[k](v); }"
+, "liveRenders": { "prepend": { "name": "prepend"
+, "prepare": function (templateName, data){
+ var itemsHtml = [];
+
+ for(var i = data.length - 1; i >= 0; i--){
+ itemsHtml.push(this.render(templateName, data[i]));
+ }
+
+ return itemsHtml.join();
+ }
+, "update": function (event){
+ this.element.prepend(Transitive.Views.render(this.templateName, event));
+ }
+}
+, "replace": { "name": "replace"
+, "prepare": function (templateName, data){
+ return this.render(templateName, data);
+ }
+, "update": function (ev){
+ this.element.html(Transitive.Views.render(this.templateName, ev));
+ }
+}
+}
+}
View
23 less/bootstrap.less
@@ -0,0 +1,23 @@
+/*!
+ * Bootstrap v1.1.1
+ *
+ * Copyright 2011 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ * Date: @DATE
+ */
+
+// CSS Reset
+@import "reset.less";
+
+// Core
+@import "preboot.less";
+@import "scaffolding.less";
+
+// Styled patterns and elements
+@import "type.less";
+@import "forms.less";
+@import "tables.less";
+@import "patterns.less";
View
369 less/forms.less
@@ -0,0 +1,369 @@
+/* Forms.less
+ * Base styles for various input types, form layouts, and states
+ * ------------------------------------------------------------- */
+
+
+// FORM STYLES
+// -----------
+
+form {
+ margin-bottom: @baseline;
+}
+
+// Groups of fields with labels on top (legends)
+fieldset {
+ margin-bottom: @baseline;
+ padding-top: @baseline;
+ legend {
+ display: block;
+ margin-left: 150px;
+ font-size: 20px;
+ line-height: 1;
+ *margin: 0 0 5px 145px; /* IE6-7 */
+ *line-height: 1.5; /* IE6-7 */
+ color: @grayDark;
+ }
+}
+
+// Parent element that clears floats and wraps labels and fields together
+.clearfix {
+ margin-bottom: @baseline;
+}
+
+// Set font for forms
+label,
+input,
+select,
+textarea {
+ #font > .sans-serif(normal,13px,normal);
+}
+
+// Float labels left
+label {
+ padding-top: 6px;
+ font-size: 13px;
+ line-height: 18px;
+ float: left;
+ width: 130px;
+ text-align: right;
+ color: @grayDark;
+}
+
+// Shift over the inside div to align all label's relevant content
+div.input {
+ margin-left: 150px;
+}
+
+// Checkboxs and radio buttons
+input[type=checkbox],
+input[type=radio] {
+ cursor: pointer;
+}
+
+// Inputs, Textareas, Selects
+input[type=text],
+input[type=password],
+textarea,
+select,
+.uneditable-input {
+ display: inline-block;
+ width: 210px;
+ padding: 4px;
+ font-size: 13px;
+ line-height: @baseline;
+ height: @baseline;
+ color: @gray;
+ border: 1px solid #ccc;
+ .border-radius(3px);
+}
+select,
+input[type=file] {
+ height: @baseline * 1.5;
+ line-height: @baseline * 1.5;
+}
+textarea {
+ height: auto;
+}
+.uneditable-input {
+ background-color: #eee;
+ display: block;
+ border-color: #ccc;
+ .box-shadow(inset 0 1px 2px rgba(0,0,0,.075));
+}
+
+// Placeholder text gets special styles; can't be bundled together though for some reason
+:-moz-placeholder {
+ color: @grayLight;
+}
+::-webkit-input-placeholder {
+ color: @grayLight;
+}
+
+// Focus states
+input[type=text],
+input[type=password],
+select, textarea {
+ @transition: border linear .2s, box-shadow linear .2s;
+ .transition(@transition);
+ .box-shadow(inset 0 1px 3px rgba(0,0,0,.1));
+}
+input[type=text]:focus,
+input[type=password]:focus,
+textarea:focus {
+ outline: none;
+ border-color: rgba(82,168,236,.8);
+ @shadow: inset 0 1px 3px rgba(0,0,0,.1), 0 0 8px rgba(82,168,236,.6);
+ .box-shadow(@shadow);
+}
+
+// Error styles
+form div.error {
+ background: lighten(@red, 57%);
+ padding: 10px 0;
+ margin: -10px 0 10px;
+ .border-radius(4px);
+ @error-text: desaturate(lighten(@red, 25%), 25%);
+ > label,
+ span.help-inline,
+ span.help-block {
+ color: @red;
+ }
+ input[type=text],
+ input[type=password],
+ textarea {
+ border-color: @error-text;
+ .box-shadow(0 0 3px rgba(171,41,32,.25));
+ &:focus {
+ border-color: darken(@error-text, 10%);
+ .box-shadow(0 0 6px rgba(171,41,32,.5));
+ }
+ }
+ .input-prepend,
+ .input-append {
+ span.add-on {
+ background: lighten(@red, 50%);
+ border-color: @error-text;
+ color: darken(@error-text, 10%);
+ }
+ }
+}
+
+// Form element sizes
+.input-mini, input.mini, textarea.mini, select.mini {
+ width: 60px;
+}
+.input-small, input.small, textarea.small, select.small {
+ width: 90px;
+}
+.input-medium, input.medium, textarea.medium, select.medium {
+ width: 150px;
+}
+.input-large, input.large, textarea.large, select.large {
+ width: 210px;
+}
+.input-xlarge, input.xlarge, textarea.xlarge, select.xlarge {
+ width: 270px;
+}
+.input-xxlarge, input.xxlarge, textarea.xxlarge, select.xxlarge {
+ width: 530px;
+}
+textarea.xxlarge {
+ overflow-y: scroll;
+}
+
+// Turn off focus for disabled (read-only) form elements
+input[readonly]:focus,
+textarea[readonly]:focus,
+input.disabled {
+ background: #f5f5f5;
+ border-color: #ddd;
+ .box-shadow(none);
+}
+
+// Actions (the buttons)
+.actions {
+ background: #f5f5f5;
+ margin-top: @baseline;
+ margin-bottom: @baseline;
+ padding: (@baseline - 1) 20px @baseline 150px;
+ border-top: 1px solid #ddd;
+ .border-radius(0 0 3px 3px);
+ .secondary-action {
+ float: right;
+ a {
+ line-height: 30px;
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+ }
+}
+
+// Help Text
+.help-inline,
+.help-block {
+ font-size: 12px;
+ line-height: @baseline;
+ color: @grayLight;
+}
+.help-inline {
+ padding-left: 5px;
+ *position: relative; /* IE6-7 */
+ *top: -5px; /* IE6-7 */
+}
+
+// Big blocks of help text
+.help-block {
+ display: block;
+ max-width: 600px;
+}
+
+// Inline Fields (input fields that appear as inline objects
+.inline-inputs {
+ color: @gray;
+ span, input[type=text] {
+ display: inline-block;
+ }
+ input.mini {
+ width: 60px;
+ }
+ input.small {
+ width: 90px;
+ }
+ span {
+ padding: 0 2px 0 1px;
+ }
+}
+
+// Allow us to put symbols and text within the input field for a cleaner look
+.input-prepend,
+.input-append {
+ input[type=text],
+ input[type=password] {
+ .border-radius(0 3px 3px 0);
+ }
+ .add-on {
+ background: #f5f5f5;
+ float: left;
+ display: block;
+ width: auto;
+ min-width: 16px;
+ padding: 4px 4px 4px 5px;
+ color: @grayLight;
+ font-weight: normal;
+ line-height: 18px;
+ height: 18px;
+ text-align: center;
+ text-shadow: 0 1px 0 #fff;
+ border: 1px solid #ccc;
+ border-right-width: 0;
+ .border-radius(3px 0 0 3px);
+ }
+ .active {
+ background: lighten(@green, 30);
+ border-color: @green;
+ }
+}
+.input-prepend {
+ .add-on {
+ *margin-top: 1px; /* IE6-7 */
+ }
+}
+.input-append {
+ input[type=text],
+ input[type=password] {
+ float: left;
+ .border-radius(3px 0 0 3px);
+ }
+ .add-on {
+ .border-radius(0 3px 3px 0);
+ border-right-width: 1px;
+ border-left-width: 0;
+ }
+}
+
+// Stacked options for forms (radio buttons or checkboxes)
+.inputs-list {
+ margin: 0 0 5px;
+ width: 100%;
+ li {
+ display: block;
+ padding: 0;
+ width: 100%;
+ label {
+ display: block;
+ float: none;
+ width: auto;
+ padding: 0;
+ line-height: @baseline;
+ text-align: left;
+ white-space: normal;
+ strong {
+ color: @gray;
+ }
+ small {
+ font-size: 12px;
+ font-weight: normal;
+ }
+ }
+ ul.inputs-list {
+ margin-left: 25px;
+ margin-bottom: 10px;
+ padding-top: 0;
+ }
+ &:first-child {
+ padding-top: 5px;
+ }
+ }
+ input[type=radio],
+ input[type=checkbox] {
+ margin-bottom: 0;
+ }
+}
+
+// Stacked forms
+.form-stacked {
+ padding-left: 20px;
+ fieldset {
+ padding-top: @baseline / 2;
+ }
+ legend {
+ margin-left: 0;
+ }
+ label {
+ display: block;
+ float: none;
+ width: auto;
+ font-weight: bold;
+ text-align: left;
+ line-height: 20px;
+ padding-top: 0;
+ }
+ .clearfix {
+ margin-bottom: @baseline / 2;
+ div.input {
+ margin-left: 0;
+ }
+ }
+ .inputs-list {
+ margin-bottom: 0;
+ li {
+ padding-top: 0;
+ label {
+ font-weight: normal;
+ padding-top: 0;
+ }
+ }
+ }
+ div.error {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ padding-left: 10px;
+ margin-top: 0;
+ margin-left: -10px;
+ }
+ .actions {
+ margin-left: -20px;
+ padding-left: 20px;
+ }
+}
View
751 less/patterns.less
@@ -0,0 +1,751 @@
+/* Patterns.less
+ * Repeatable UI elements outside the base styles provided from the scaffolding
+ * ---------------------------------------------------------------------------- */
+
+
+// TOPBAR
+// ------
+
+// Topbar for Branding and Nav
+.topbar {
+ height: 40px;
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ z-index: 10000;
+ overflow: visible;
+
+ // gradient is applied to it's own element because overflow visible is not honored by ie when filter is present
+ .fill {
+ background:#222;
+ #gradient > .vertical(#333, #222);
+ @shadow: 0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1);
+ .box-shadow(@shadow);
+ }
+
+ // Links get text shadow
+ a {
+ color: @grayLight;
+ text-shadow: 0 -1px 0 rgba(0,0,0,.25);
+ }
+
+ // Hover and active states
+ a:hover,
+ ul li.active a {
+ background-color: #333;
+ background-color: rgba(255,255,255,.05);
+ color: @white;
+ text-decoration: none;
+ }
+
+ // Website name
+ h3 {
+ position:relative;
+ a {
+ float: left;
+ display: block;
+ padding: 8px 20px 12px;
+ margin-left: -20px; // negative indent to left-align the text down the page
+ color: @white;
+ font-size: 20px;
+ font-weight: 200;
+ line-height: 1;
+ }
+ }
+
+ // Search Form
+ form {
+ float: left;
+ margin: 5px 0 0 0;
+ position: relative;
+ .opacity(100);
+ input {
+ background-color: #444;
+ background-color: rgba(255,255,255,.3);
+ #font > .sans-serif(13px, normal, 1);
+ width: 220px;
+ padding: 4px 9px;
+ color: #fff;
+ color: rgba(255,255,255,.75);
+ border: 1px solid #111;
+ .border-radius(4px);
+ @shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0px rgba(255,255,255,.25);
+ .box-shadow(@shadow);
+ .transition(none);
+
+ // Placeholder text gets special styles; can't be bundled together though for some reason
+ &:-moz-placeholder {
+ color: @grayLighter;
+ }
+ &::-webkit-input-placeholder {
+ color: @grayLighter;
+ }
+ // Hover states
+ &:hover {
+ background-color: @grayLight;
+ background-color: rgba(255,255,255,.5);
+ color: #fff;
+ }
+ // Focus states (we use .focused since IE8 and down doesn't support :focus)
+ &:focus,
+ &.focused {
+ outline: none;
+ background-color: #fff;
+ color: @grayDark;
+ text-shadow: 0 1px 0 #fff;
+ border: 0;
+ padding: 5px 10px;
+ .box-shadow(0 0 3px rgba(0,0,0,.15));
+ }
+ }
+ }
+
+ // Navigation
+ ul {
+ display: block;
+ float: left;
+ margin: 0 10px 0 0;
+ position: relative;
+ &.secondary-nav {
+ float: right;
+ margin-left: 10px;
+ margin-right: 0;
+ }
+ li {
+ display: block;
+ float: left;
+ font-size: 13px;
+ a {
+ display: block;
+ float: none;
+ padding: 10px 10px 11px;
+ line-height: 19px;
+ text-decoration: none;
+ &:hover {
+ color: #fff;
+ text-decoration: none;
+ }
+ }
+ &.active a {
+ background-color: #222;
+ background-color: rgba(0,0,0,.5);
+ }
+ }
+
+ // Dropdowns
+ &.primary-nav li ul {
+ left: 0;
+ }
+ &.secondary-nav li ul {
+ right: 0;
+ }
+ li.menu {
+ position: relative;
+ a.menu {
+ &:after {
+ width: 0px;
+ height: 0px;
+ display: inline-block;
+ content: "&darr;";
+ text-indent: -99999px;
+ vertical-align: top;
+ margin-top: 8px;
+ margin-left: 4px;
+ border-left: 4px solid transparent;
+ border-right: 4px solid transparent;
+ border-top: 4px solid #fff;
+ .opacity(50);
+ }
+ }
+ &.open {
+ a.menu,
+ a:hover {
+ background-color: #444;
+ background-color: rgba(255,255,255,.1);
+ *background-color: #444; /* IE6-7 */
+ color: #fff;
+ }
+ ul {
+ display: block;
+ li {
+ a {
+ background-color: transparent;
+ font-weight: normal;
+ &:hover {
+ background-color: rgba(255,255,255,.1);
+ *background-color: #444; /* IE6-7 */
+ color: #fff;
+ }
+ }
+ &.active a {
+ background-color: rgba(255,255,255,.1);
+ font-weight: bold;
+ }
+ }
+ }
+ }
+ }
+ li ul {
+ background-color: #333;
+ float: left;
+ display: none;
+ position: absolute;
+ top: 40px;
+ min-width: 160px;
+ max-width: 220px;
+ _width: 160px;
+ margin-left: 0;
+ margin-right: 0;
+ padding: 0;
+ text-align: left;
+ border: 0;
+ zoom: 1;
+ .border-radius(0 0 5px 5px);
+ .box-shadow(0 1px 2px rgba(0,0,0,0.6));
+ li {
+ float: none;
+ clear: both;
+ display: block;
+ background: none;
+ font-size: 12px;
+ a {
+ display: block;
+ padding: 6px 15px;
+ clear: both;
+ font-weight: normal;
+ line-height: 19px;
+ color: #bbb;
+ &:hover {
+ background-color: #333;
+ background-color: rgba(255,255,255,.25);
+ color: #fff;
+ }
+ }
+
+ // Dividers (basically an hr)
+ &.divider {
+ height: 1px;
+ overflow: hidden;
+ background: #222;
+ background: rgba(0,0,0,.2);
+ border-bottom: 1px solid rgba(255,255,255,.1);
+ margin: 5px 0;
+ }
+
+ // Section separaters
+ span {
+ clear: both;
+ display: block;
+ background: rgba(0,0,0,.2);
+ padding: 6px 15px;
+ cursor: default;
+ color: @gray;
+ border-top: 1px solid rgba(0,0,0,.2);
+ }
+ }
+ }
+ }
+}
+
+
+// PAGE HEADERS
+// ------------
+
+.hero-unit {
+ background-color: #f5f5f5;
+ margin-top: 60px;
+ margin-bottom: 30px;
+ padding: 60px;
+ .border-radius(6px);
+ h1 {
+ margin-bottom: 0;
+ font-size: 60px;
+ line-height: 1;
+ letter-spacing: -1px;
+ }
+ p {
+ font-size: 18px;
+ font-weight: 200;
+ line-height: @baseline * 1.5;
+ }
+}
+footer {
+ margin-top: @baseline - 1;
+ padding-top: @baseline - 1;
+ border-top: 1px solid #eee;
+}
+
+// PAGE HEADERS
+// ------------
+
+.page-header {
+ margin-bottom: @baseline - 1;
+ border-bottom: 1px solid #ddd;
+ .box-shadow(0 1px 0 rgba(255,255,255,.5));
+ h1 {
+ margin-bottom: (@baseline / 2) - 1px;
+ }
+}
+
+// BUTTON STYLES
+// -------------
+
+
+// Base .btn styles
+.btn {
+ // Button Base
+ cursor: pointer;
+ display: inline-block;
+ #gradient > .vertical-three-colors(#fff, #fff, 0.25, darken(#fff, 10%));
+ padding: 5px 14px 6px;
+ text-shadow: 0 1px 1px rgba(255,255,255,.75);
+ color: #333;
+ font-size: 13px;
+ line-height: normal;
+ border: 1px solid #ccc;
+ border-bottom-color: #bbb;
+ .border-radius(4px);
+ @shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
+ .box-shadow(@shadow);
+
+ &:hover {
+ background-position: 0 -15px;
+ color: #333;
+ text-decoration: none;
+ }
+
+ // Primary Button Type
+ &.primary {
+ color:#fff;
+ .gradientBar(@blue, @blueDark)
+ }
+
+ // Transitions
+ .transition(.1s linear all);
+
+ // Active and Disabled states
+ &.disabled {
+ cursor: default;
+ background-image: none;
+ .opacity(65);
+ }
+
+ &:disabled {
+ // disabled pseudo can't be included with .disabled
+ // def because IE8 and below will drop it ;_;
+ cursor: default;
+ background-image: none;
+ .opacity(65);
+ }
+
+ &:active {
+ @shadow: inset 0 3px 7px rgba(0,0,0,.1), 0 1px 2px rgba(0,0,0,.05);
+ .box-shadow(@shadow);
+ }
+
+ // Button Sizes
+ &.large {
+ font-size: 16px;
+ line-height: normal;
+ padding: 9px 14px 9px;
+ .border-radius(6px);
+ }
+
+ &.small {
+ padding: 7px 9px 7px;
+ font-size: 11px;
+ }
+
+}
+
+// Help Firefox not be a jerk about adding extra padding to buttons
+button.btn,
+input[type=submit].btn {
+ &::-moz-focus-inner {
+ padding: 0;
+ border: 0;
+ }
+}
+
+
+
+// ERROR STYLES
+// ------------
+
+// Base alert styles
+.alert-message {
+ .gradientBar(#fceec1, #eedc94); // warning by default
+ margin-bottom: @baseline;
+ padding: 7px 14px;
+ color: @grayDark;
+ text-shadow: 0 1px 0 rgba(255,255,255,.5);
+ border-width: 1px;
+ border-style: solid;
+ .border-radius(4px);
+ .box-shadow(inset 0 1px 0 rgba(255,255,255,.25));
+
+ // Remove extra margin from content
+ h5 {
+ line-height: @baseline;
+ }
+ p {
+ margin-bottom: 0;
+ }
+ div {
+ margin-top: 5px;
+ margin-bottom: 2px;
+ line-height: 28px;
+ }
+ .btn {
+ // Provide actions with buttons
+ .box-shadow(0 1px 0 rgba(255,255,255,.25));
+ }
+ .close {
+ float: right;
+ margin-top: -2px;
+ color: @black;
+ font-size: 20px;
+ font-weight: bold;
+ text-shadow: 0 1px 0 rgba(255,255,255,1);
+ .opacity(20);
+ &:hover {
+ color: @black;
+ text-decoration: none;
+ .opacity(40);
+ }
+ }
+
+ &.block-message {
+ background-image: none;
+ background-color: lighten(#fceec1, 5%);
+ padding: 14px;
+ border-color: #fceec1;
+ .box-shadow(none);
+
+ p {
+ margin-right: 30px;
+ }
+ .alert-actions {
+ margin-top: 5px;
+ }
+ &.error,
+ &.success,
+ &.info {
+ color: @grayDark;
+ text-shadow: 0 1px 0 rgba(255,255,255,.5);
+ }
+ &.error {
+ background-color: lighten(#f56a66, 25%);
+ border-color: lighten(#f56a66, 20%);
+ }
+ &.success {
+ background-color: lighten(#62c462, 30%);
+ border-color: lighten(#62c462, 25%);
+ }
+ &.info {
+ background-color: lighten(#6bd0ee, 25%);
+ border-color: lighten(#6bd0ee, 20%);
+ }
+ }
+}
+
+// NAVIGATION
+// ----------
+
+// Common tab and pill styles
+.tabs,
+.pills {
+ margin: 0 0 20px;
+ padding: 0;
+ .clearfix();
+ li {
+ display: inline;
+ a {
+ float: left;
+ width: auto;
+ }
+ }
+}
+
+// Basic Tabs
+.tabs {
+ width: 100%;
+ border-bottom: 1px solid @grayLight;
+ li {
+ a {
+ margin-bottom: -1px;
+ margin-right: 2px;
+ padding: 0 15px;
+ line-height: (@baseline * 2) - 1;
+ .border-radius(3px 3px 0 0);
+ &:hover {
+ background-color: @grayLighter;
+ border-bottom: 1px solid @grayLight;
+ }
+ }
+ &.active a {
+ background-color: #fff;
+ padding: 0 14px;
+ border: 1px solid #ccc;
+ border-bottom: 0;
+ color: @gray;
+ }
+ }
+}
+
+// Basic pill nav
+.pills {
+ li {
+ a {
+ margin: 5px 3px 5px 0;
+ padding: 0 15px;
+ text-shadow: 0 1px 1px #fff;
+ line-height: 30px;
+ .border-radius(15px);
+ &:hover {
+ background: @linkColorHover;
+ color: #fff;
+ text-decoration: none;
+ text-shadow: 0 1px 1px rgba(0,0,0,.25);
+ }
+ }
+ &.active a {
+ background: @linkColor;
+ color: #fff;
+ text-shadow: 0 1px 1px rgba(0,0,0,.25);
+ }
+ }
+}
+
+
+// PAGINATION
+// ----------
+
+.pagination {
+ height: @baseline * 2;
+ margin: @baseline 0;
+ ul {
+ float: left;
+ margin: 0;
+ border: 1px solid #ddd;
+ border: 1px solid rgba(0,0,0,.15);
+ .border-radius(3px);
+ .box-shadow(0 1px 2px rgba(0,0,0,.05));
+ li {
+ display: inline;
+ a {
+ float: left;
+ padding: 0 14px;
+ line-height: (@baseline * 2) - 2;
+ border-right: 1px solid;
+ border-right-color: #ddd;
+ border-right-color: rgba(0,0,0,.15);
+ *border-right-color: #ddd; /* IE6-7 */
+ text-decoration: none;
+ }
+ a:hover,
+ &.active a {
+ background-color: lighten(@blue, 45%);
+ }
+ &.disabled a,
+ &.disabled a:hover {
+ background-color: transparent;
+ color: @grayLight;
+ }
+ &.next a {
+ border: 0;
+ }
+ }
+ }
+}
+
+
+// WELLS
+// -----
+
+.well {
+ background-color: #f5f5f5;
+ margin-bottom: 20px;
+ padding: 19px;
+ min-height: 20px;
+ border: 1px solid #eee;
+ border: 1px solid rgba(0,0,0,.05);
+ .border-radius(4px);
+ .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));
+}
+
+
+// MODALS
+// ------
+
+.modal-backdrop {
+ background-color: rgba(0,0,0,.5);
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ z-index: 1000;
+}
+.modal {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ z-index: 2000;
+ width: 560px;
+ margin: -280px 0 0 -250px;
+ background-color: @white;
+ border: 1px solid #999;
+ border: 1px solid rgba(0,0,0,.3);
+ *border: 1px solid #999; /* IE6-7 */
+ .border-radius(6px);
+ .box-shadow(0 3px 7px rgba(0,0,0,0.3));
+ .background-clip(padding-box);
+ .modal-header {
+ border-bottom: 1px solid #eee;
+ padding: 5px 20px;
+ .close {
+ position: absolute;
+ right: 10px;
+ top: 10px;
+ color: #999;
+ line-height:10px;
+ font-size: 18px;
+ }
+ }
+ .modal-body {
+ padding: 20px;
+ }
+ .modal-footer {
+ background-color: #f5f5f5;
+ padding: 14px 20px 15px;
+ border-top: 1px solid #ddd;
+ .border-radius(0 0 6px 6px);
+ .box-shadow(inset 0 1px 0 #fff);
+ .clearfix();
+ margin-bottom: 0;
+ .btn {
+ float: right;
+ margin-left: 10px;
+ }
+ }
+}
+
+
+// POPOVER ARROWS
+// --------------
+
+#popoverArrow {
+ .above(@arrowWidth: 5px) {
+ bottom: 0;
+ left: 50%;
+ margin-left: -@arrowWidth;
+ border-left: @arrowWidth solid transparent;
+ border-right: @arrowWidth solid transparent;
+ border-top: @arrowWidth solid #000;
+ }
+ .left(@arrowWidth: 5px) {
+ top: 50%;
+ right: 0;
+ margin-top: -@arrowWidth;
+ border-top: @arrowWidth solid transparent;
+ border-bottom: @arrowWidth solid transparent;
+ border-left: @arrowWidth solid #000;
+ }
+ .below(@arrowWidth: 5px) {
+ top: 0;
+ left: 50%;
+ margin-left: -@arrowWidth;
+ border-left: @arrowWidth solid transparent;
+ border-right: @arrowWidth solid transparent;
+ border-bottom: @arrowWidth solid #000;
+ }
+ .right(@arrowWidth: 5px) {
+ top: 50%;
+ left: 0;
+ margin-top: -@arrowWidth;
+ border-top: @arrowWidth solid transparent;
+ border-bottom: @arrowWidth solid transparent;
+ border-right: @arrowWidth solid #000;
+ }
+}
+
+// TWIPSY
+// ------
+
+.twipsy {
+ display: block;
+ position: absolute;
+ visibility: visible;
+ padding: 5px;
+ font-size: 11px;
+ z-index: 1000;
+ .opacity(80);
+ &.above .twipsy-arrow { #popoverArrow > .above(); }
+ &.left .twipsy-arrow { #popoverArrow > .left(); }
+ &.below .twipsy-arrow { #popoverArrow > .below(); }
+ &.right .twipsy-arrow { #popoverArrow > .right(); }
+ .twipsy-inner {
+ padding: 3px 8px;
+ background-color: #000;
+ color: white;
+ text-align: center;
+ max-width: 200px;
+ text-decoration: none;
+ .border-radius(4px);
+ }
+ .twipsy-arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+ }
+}
+
+
+// POPOVERS
+// --------
+
+.popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1000;
+ padding: 5px;
+ display: none;
+ &.above .arrow { #popoverArrow > .above(); }
+ &.right .arrow { #popoverArrow > .right(); }
+ &.below .arrow { #popoverArrow > .below(); }
+ &.left .arrow { #popoverArrow > .left(); }
+ .arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+ }
+ .inner {
+ background-color: #333;
+ background-color: rgba(0,0,0,.8);
+ *background-color: #333; /* IE 6-7 */
+ padding: 3px;
+ overflow: hidden;
+ width: 280px;
+ .border-radius(6px);
+ .box-shadow(0 3px 7px rgba(0,0,0,0.3));
+ }
+ .title {
+ background-color: #f5f5f5;
+ padding: 9px 15px;
+ line-height: 1;
+ .border-radius(3px 3px 0 0);
+ border-bottom:1px solid #eee;
+ }
+ .content {
+ background-color: @white;
+ padding: 14px;
+ .border-radius(0 0 3px 3px);
+ .background-clip(padding-box);
+ p, ul, ol {
+ margin-bottom: 0;
+ }
+ }
+}
View
271 less/preboot.less
@@ -0,0 +1,271 @@
+/* Preboot.less
+ * Variables and mixins to pre-ignite any new web development project
+ * ------------------------------------------------------------------ */
+
+
+// VARIABLES
+// ---------
+
+// Links
+@linkColor: #0069d6;
+@linkColorHover: darken(@linkColor, 10);
+
+// Grays
+@black: #000;
+@grayDark: lighten(@black, 25%);
+@gray: lighten(@black, 50%);
+@grayLight: lighten(@black, 75%);
+@grayLighter: lighten(@black, 90%);
+@white: #fff;
+
+// Accent Colors
+@blue: #049CDB;
+@blueDark: #0064CD;
+@green: #46a546;
+@red: #9d261d;
+@yellow: #ffc40d;
+@orange: #f89406;
+@pink: #c3325f;
+@purple: #7a43b6;
+
+// Baseline grid
+@basefont: 13px;
+@baseline: 18px;
+
+// Griditude
+@gridColumns: 16;
+@gridColumnWidth: 40px;
+@gridGutterWidth: 20px;
+@extraSpace: 40px;
+@siteWidth: (@gridColumns * @gridColumnWidth) + (@gridGutterWidth * (@gridColumns - 1));
+
+// Color Scheme
+@baseColor: @blue; // Set a base color
+@complement: spin(@baseColor, 180); // Determine a complementary color
+@split1: spin(@baseColor, 158); // Split complements
+@split2: spin(@baseColor, -158);
+@triad1: spin(@baseColor, 135); // Triads colors
+@triad2: spin(@baseColor, -135);
+@tetra1: spin(@baseColor, 90); // Tetra colors
+@tetra2: spin(@baseColor, -90);
+@analog1: spin(@baseColor, 22); // Analogs colors
+@analog2: spin(@baseColor, -22);
+
+
+// MIXINS
+// ------
+
+// Clearfix for clearing floats like a boss h5bp.com/q
+.clearfix {
+ zoom: 1;
+ &:before, &:after {
+ display: table;
+ content: "";
+ }
+ &:after {
+ clear: both;
+ }
+}
+
+// Center-align a block level element
+.center-block {
+ display: block;
+ margin: 0 auto;
+}
+
+// Sizing shortcuts
+.size(@height: 5px, @width: 5px) {
+ height: @height;
+ width: @width;
+}
+.square(@size: 5px) {
+ .size(@size, @size);
+}
+
+// Input placeholder text
+.placeholder(@color: @grayLight) {
+ :-moz-placeholder {
+ color: @color;
+ }
+ ::-webkit-input-placeholder {
+ color: @color;
+ }
+}
+
+// Font Stacks
+#font {
+ .shorthand(@weight: normal, @size: 14px, @lineHeight: 20px) {
+ font-size: @size;
+ font-weight: @weight;
+ line-height: @lineHeight;
+ }
+ .sans-serif(@weight: normal, @size: 14px, @lineHeight: 20px) {
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: @size;
+ font-weight: @weight;
+ line-height: @lineHeight;
+ }
+ .serif(@weight: normal, @size: 14px, @lineHeight: 20px) {
+ font-family: "Georgia", Times New Roman, Times, serif;
+ font-size: @size;
+ font-weight: @weight;
+ line-height: @lineHeight;
+ }
+ .monospace(@weight: normal, @size: 12px, @lineHeight: 20px) {
+ font-family: "Monaco", Courier New, monospace;
+ font-size: @size;
+ font-weight: @weight;
+ line-height: @lineHeight;
+ }
+}
+
+// Grid System
+.container {
+ width: @siteWidth;
+ margin: 0 auto;
+ .clearfix();
+}
+.columns(@columnSpan: 1) {
+ width: (@gridColumnWidth * @columnSpan) + (@gridGutterWidth * (@columnSpan - 1));
+}
+.offset(@columnOffset: 1) {
+ margin-left: (@gridColumnWidth * @columnOffset) + (@gridGutterWidth * (@columnOffset - 1)) + @extraSpace;
+}
+
+// Border Radius
+.border-radius(@radius: 5px) {
+ -webkit-border-radius: @radius;
+ -moz-border-radius: @radius;
+ border-radius: @radius;
+}
+
+// Drop shadows
+.box-shadow(@shadow: 0 1px 3px rgba(0,0,0,.25)) {
+ -webkit-box-shadow: @shadow;
+ -moz-box-shadow: @shadow;
+ box-shadow: @shadow;
+}
+
+// Transitions
+.transition(@transition) {
+ -webkit-transition: @transition;
+ -moz-transition: @transition;
+ transition: @transition;
+}
+
+// Background clipping
+.background-clip(@clip) {
+ -webkit-background-clip: @clip;
+ -moz-background-clip: @clip;
+ background-clip: @clip;
+}
+
+// CSS3 Content Columns
+.content-columns(@columnCount, @columnGap: 20px) {
+ -webkit-column-count: @columnCount;
+ -moz-column-count: @columnCount;
+ column-count: @columnCount;
+ -webkit-column-gap: @columnGap;
+ -moz-column-gap: @columnGap;
+ column-gap: @columnGap;
+}
+
+// Add an alphatransparency value to any background or border color (via Elyse Holladay)
+#translucent {
+ .background(@color: @white, @alpha: 1) {
+ background-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha);
+ }
+ .border(@color: @white, @alpha: 1) {
+ border-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha);
+ background-clip: padding-box;
+ }
+}
+
+// Gradient Bar Colors for buttons and allerts
+.gradientBar(@primaryColor, @secondaryColor) {
+ #gradient > .vertical(@primaryColor, @secondaryColor);
+ text-shadow: 0 -1px 0 rgba(0,0,0,.25);
+ border-color: @secondaryColor @secondaryColor darken(@secondaryColor, 15%);
+ border-color: rgba(0,0,0,.1) rgba(0,0,0,.1) fadein(rgba(0,0,0,.1), 15%);
+}
+// Shared colors for buttons and alerts
+.btn,
+.alert-message {
+ // Set text color
+ &.danger,
+ &.danger:hover,
+ &.error,
+ &.error:hover,
+ &.success,
+ &.success:hover,
+ &.info,
+ &.info:hover {
+ color: @white
+ }
+ // Danger and error appear as red
+ &.danger,
+ &.error {
+ .gradientBar(#ee5f5b, #c43c35);
+ }
+ // Success appears as green
+ &.success {
+ .gradientBar(#62c462, #57a957);
+ }
+ // Info appears as a neutral blue
+ &.info {
+ .gradientBar(#5bc0de, #339bb9);
+ }
+}
+
+// Gradients
+#gradient {
+ .horizontal (@startColor: #555, @endColor: #333) {
+ background-color: @endColor;
+ background-repeat: repeat-x;
+ background-image: -khtml-gradient(linear, left top, right top, from(@startColor), to(@endColor)); // Konqueror
+ background-image: -moz-linear-gradient(left, @startColor, @endColor); // FF 3.6+
+ background-image: -ms-linear-gradient(left, @startColor, @endColor); // IE10
+ background-image: -webkit-gradient(linear, left top, right top, color-stop(0%, @startColor), color-stop(100%, @endColor)); // Safari 4+, Chrome 2+
+ background-image: -webkit-linear-gradient(left, @startColor, @endColor); // Safari 5.1+, Chrome 10+
+ background-image: -o-linear-gradient(left, @startColor, @endColor); // Opera 11.10
+ background-image: linear-gradient(left, @startColor, @endColor); // Le standard
+ }
+ .vertical (@startColor: #555, @endColor: #333) {
+ background-color: @endColor;
+ background-repeat: repeat-x;
+ background-image: -khtml-gradient(linear, left top, left bottom, from(@startColor), to(@endColor)); // Konqueror
+ background-image: -moz-linear-gradient(top, @startColor, @endColor); // FF 3.6+
+ background-image: -ms-linear-gradient(top, @startColor, @endColor); // IE10
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, @startColor), color-stop(100%, @endColor)); // Safari 4+, Chrome 2+
+ background-image: -webkit-linear-gradient(top, @startColor, @endColor); // Safari 5.1+, Chrome 10+
+ background-image: -o-linear-gradient(top, @startColor, @endColor); // Opera 11.10
+ background-image: linear-gradient(top, @startColor, @endColor); // The standard
+ }
+ .directional (@startColor: #555, @endColor: #333, @deg: 45deg) {
+ background-color: @endColor;
+ background-repeat: repeat-x;
+ background-image: -moz-linear-gradient(@deg, @startColor, @endColor); // FF 3.6+
+ background-image: -ms-linear-gradient(@deg, @startColor, @endColor); // IE10
+ background-image: -webkit-linear-gradient(@deg, @startColor, @endColor); // Safari 5.1+, Chrome 10+
+ background-image: -o-linear-gradient(@deg, @startColor, @endColor); // Opera 11.10
+ background-image: linear-gradient(@deg, @startColor, @endColor); // The standard
+ }
+ .vertical-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) {
+ background-color: @endColor;
+ background-repeat: no-repeat;
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor));
+ background-image: -webkit-linear-gradient(@startColor, @midColor @colorStop, @endColor);
+ background-image: -moz-linear-gradient(@startColor, @midColor @colorStop, @endColor);
+ background-image: -ms-linear-gradient(@startColor, @midColor @colorStop, @endColor);
+ background-image: -o-linear-gradient(@startColor, @midColor @colorStop, @endColor);
+ background-image: linear-gradient(@startColor, @midColor @colorStop, @endColor);
+ }
+}
+
+// Opacity
+.opacity(@opacity: 100) {
+ filter: e(%("alpha(opacity=%d)", @opacity));
+ -khtml-opacity: @opacity / 100;
+ -moz-opacity: @opacity / 100;
+ opacity: @opacity / 100;
+}
View
146 less/reset.less
@@ -0,0 +1,146 @@
+/* Reset.less
+ * Props to Eric Meyer (meyerweb.com) for his CSS reset file. We're using an adapted version here that cuts out some of the reset HTML elements we will never need here (i.e., dfn, samp, etc).
+ * ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */
+
+
+// ERIC MEYER RESET
+// --------------------------------------------------
+
+html, body { margin: 0; padding: 0; }
+h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, cite, code, del, dfn, em, img, q, s, samp, small, strike, strong, sub, sup, tt, var, dd, dl, dt, li, ol, ul, fieldset, form, label, legend, button, table, caption, tbody, tfoot, thead, tr, th, td { margin: 0; padding: 0; border: 0; font-weight: normal; font-style: normal; font-size: 100%; line-height: 1; font-family: inherit; }
+table { border-collapse: collapse; border-spacing: 0; }
+ol, ul { list-style: none; }
+q:before, q:after, blockquote:before, blockquote:after { content: ""; }
+
+
+// Normalize.css
+// Pulling in select resets form the normalize.css project
+// --------------------------------------------------
+
+// Display in IE6-9 and FF3
+// -------------------------
+// Source: http://github.com/necolas/normalize.css
+html {
+ overflow-y: scroll;
+ font-size: 100%;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+// Focus states
+a:focus {
+ outline: thin dotted;
+}
+
+// Display in IE6-9 and FF3
+// -------------------------
+// Source: http://github.com/necolas/normalize.css
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+nav,
+section {
+ display: block;
+}
+
+// Display block in IE6-9 and FF3
+// -------------------------
+// Source: http://github.com/necolas/normalize.css
+audio,
+canvas,
+video {
+ display: inline-block;
+ *display: inline;
+ *zoom: 1;
+}
+
+// Prevents modern browsers from displaying 'audio' without controls
+// -------------------------
+// Source: http://github.com/necolas/normalize.css
+audio:not([controls]) {
+ display: none;
+}
+
+// Prevents sub and sup affecting line-height in all browsers
+// -------------------------
+// Source: http://github.com/necolas/normalize.css
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+sup {
+ top: -0.5em;
+}
+sub {
+ bottom: -0.25em;
+}
+
+// Img border in a's and image quality
+// -------------------------
+// Source: http://github.com/necolas/normalize.css
+img {
+ border: 0;
+ -ms-interpolation-mode: bicubic;
+}
+
+// Forms
+// -------------------------
+// Source: http://github.com/necolas/normalize.css
+
+// Font size in all browsers, margin changes, misc consistency
+button,
+input,
+select,
+textarea {
+ font-size: 100%;
+ margin: 0;
+ vertical-align: baseline;
+ *vertical-align: middle;
+}
+button,
+input {
+ line-height: normal; // FF3/4 have !important on line-height in UA stylesheet
+ *overflow: visible; // Inner spacing ie IE6/7
+}
+button::-moz-focus-inner,
+input::-moz-focus-inner { // Inner padding and border oddities in FF3/4
+ border: 0;
+ padding: 0;
+}
+button,
+input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+ cursor: pointer; // Cursors on all buttons applied consistently
+ -webkit-appearance: button; // Style clicable inputs in iOS
+}
+input[type="search"] { // Appearance in Safari/Chrome
+ -webkit-appearance: textfield;
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none; // Inner-padding issues in Chrome OSX, Safari 5
+}
+textarea {
+ overflow: auto; // Remove vertical scrollbar in IE6-9
+ vertical-align: top; // Readability and alignment cross-browser
+}
+
+// Tables
+// -------------------------
+// Source: http://github.com/necolas/normalize.css
+
+// Remove spacing between table cells
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
View
204 less/scaffolding.less
@@ -0,0 +1,204 @@
+/*
+ * Scaffolding
+ * Basic and global styles for generating a grid system, structural layout, and page templates
+ * ------------------------------------------------------------------------------------------- */
+
+
+// GRID SYSTEM
+// -----------
+
+.row {
+ .clearfix();
+ margin-left: -20px;
+
+ // Default columns
+ .span1,
+ .span2,
+ .span3,
+ .span4,
+ .span5,
+ .span6,
+ .span7,
+ .span8,
+ .span9,
+ .span10,
+ .span11,
+ .span12,
+ .span13,
+ .span14,
+ .span15,
+ .span16 {
+ display: inline;
+ float: left;
+ margin-left: 20px;
+ }
+
+ // Default columns
+ .span1 { .columns(1); }
+ .span2 { .columns(2); }
+ .span3 { .columns(3); }
+ .span4 { .columns(4); }
+ .span5 { .columns(5); }
+ .span6 { .columns(6); }
+ .span7 { .columns(7); }
+ .span8 { .columns(8); }
+ .span9 { .columns(9); }
+ .span10 { .columns(10); }
+ .span11 { .columns(11); }
+ .span12 { .columns(12); }
+ .span13 { .columns(13); }
+ .span14 { .columns(14); }
+ .span15 { .columns(15); }
+ .span16 { .columns(16); }
+
+ // Offset column options
+ .offset1 { .offset(1); }
+ .offset2 { .offset(2); }
+ .offset3 { .offset(3); }
+ .offset4 { .offset(4); }
+ .offset5 { .offset(5); }
+ .offset6 { .offset(6); }
+ .offset7 { .offset(7); }
+ .offset8 { .offset(8); }
+ .offset9 { .offset(9); }
+ .offset10 { .offset(10); }
+ .offset11 { .offset(11); }
+ .offset12 { .offset(12); }
+}
+
+
+// STRUCTURAL LAYOUT
+// -----------------
+
+html, body {
+ background-color: #fff;
+}
+body {
+ margin: 0;
+ #font > .sans-serif(normal,@basefont,@baseline);
+ color: @gray;
+ text-rendering: optimizeLegibility;
+}
+
+// Container (centered, fixed-width layouts)
+.container {
+ width: 940px;
+ margin: 0 auto;
+}
+
+// Fluid layouts (left aligned, with sidebar, min- & max-width content)
+.container-fluid {
+ padding: 0 20px;
+ .clearfix();
+ .sidebar {
+ float: left;
+ width: 220px;
+ }
+ .content {
+ min-width: 700px;
+ max-width: 1180px;
+ margin-left: 240px;
+ }
+}
+
+
+// BASE STYLES
+// -----------
+
+// Links
+a {
+ color: @linkColor;
+ text-decoration: none;
+ line-height: inherit;
+ font-weight: inherit;
+ &:hover {
+ color: @linkColorHover;
+ text-decoration: underline;
+ }
+}
+
+// Buttons
+.btn {
+ display: inline-block;
+ #gradient > .vertical-three-colors(#fff, #fff, 0.25, darken(#fff, 10%));
+ padding: 4px 14px;
+ text-shadow: 0 1px 1px rgba(255,255,255,.75);
+ color: #333;
+ font-size: 13px;
+ line-height: @baseline;
+ border: 1px solid #ccc;
+ border-bottom-color: #bbb;
+ .border-radius(4px);
+ @shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
+ .box-shadow(@shadow);
+ &:hover {
+ background-position: 0 -15px;
+ color: #333;
+ text-decoration: none;
+ }
+}
+.primary {
+ #gradient > .vertical(#049CDB, #0064CD);
+ color: #fff;
+ text-shadow: 0 -1px 0 rgba(0,0,0,.25);
+ border: 1px solid darken(#0064CD, 10%);
+ border-bottom-color: darken(#0064CD, 15%);
+ &:hover {
+ color: #fff;
+ }
+}
+
+.btn {
+ //.button(#1174C6);
+ .transition(.1s linear all);
+ &.primary {
+ //#gradient > .vertical(@blue, @blueDark);
+ color: #fff;
+ text-shadow: 0 -1px 0 rgba(0,0,0,.25);
+ border-color: @blueDark @blueDark darken(@blueDark, 15%);
+ border-color: rgba(0,0,0,.1) rgba(0,0,0,.1) fadein(rgba(0,0,0,.1), 15%);
+ &:hover {
+ color: #fff;
+ }
+ }
+ &.large {
+ font-size: 16px;
+ line-height: 28px;
+ .border-radius(6px);
+ }
+ &.small {
+ padding-right: 9px;
+ padding-left: 9px;
+ font-size: 11px;
+ }
+ &.disabled {
+ background-image: none;
+ .opacity(65);
+ cursor: default;
+ .box-shadow(none);
+ }
+
+ // this can't be included with the .disabled def because IE8 and below will drop it ;_;
+ &:disabled {
+ background-image: none;
+ .opacity(65);
+ cursor: default;
+ .box-shadow(none);
+ &.primary {
+ color: #fff;
+ }
+ }
+ &:active {
+ @shadow: inset 0 3px 7px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
+ .box-shadow(@shadow);
+ }
+}
+
+// Help Firefox not be a jerk about adding extra padding to buttons
+button.btn,
+input[type=submit].btn {
+ &::-moz-focus-inner {
+ padding: 0;
+ border: 0;
+ }
+}
View
148 less/tables.less
@@ -0,0 +1,148 @@
+/*
+ * Tables.less
+ * Tables for, you guessed it, tabular data
+ * ---------------------------------------- */
+
+
+// BASELINE STYLES
+// ---------------
+
+table {
+ width: 100%;
+ margin-bottom: @baseline;
+ padding: 0;
+ border-collapse: separate;
+ font-size: 13px;
+ th, td {
+ padding: 10px 10px 9px;
+ line-height: @baseline * .75;
+ text-align: left;
+ vertical-align: middle;
+ border-bottom: 1px solid #ddd;
+ }
+ th {
+ padding-top: 9px;
+ font-weight: bold;
+ border-bottom-width: 2px;
+ }
+}
+
+
+// ZEBRA-STRIPING
+// --------------
+
+// Default zebra-stripe styles (alternating gray and transparent backgrounds)
+.zebra-striped {
+ tbody {
+ tr:nth-child(odd) td {
+ background-color: #f9f9f9;
+ }
+ tr:hover td {
+ background-color: #f5f5f5;
+ }
+ }
+
+ // Tablesorting styles w/ jQuery plugin
+ .header {
+ cursor: pointer;
+ &:after {
+ content: "";
+ float: right;
+ margin-top: 7px;
+ border-width: 0 4px 4px;
+ border-style: solid;
+ border-color: #000 transparent;
+ visibility: hidden;
+ }
+ }
+ // Style the sorted column headers (THs)
+ .headerSortUp,
+ .headerSortDown {
+ background-color: rgba(141,192,219,.25);
+ text-shadow: 0 1px 1px rgba(255,255,255,.75);
+ .border-radius(3px 3px 0 0);
+ }
+ // Style the ascending (reverse alphabetical) column header
+ .header:hover {
+ &:after {
+ visibility:visible;
+ }
+ }
+ // Style the descending (alphabetical) column header
+ .headerSortDown,
+ .headerSortDown:hover {
+ &:after {
+ visibility:visible;
+ .opacity(60);
+ }
+ }
+ // Style the ascending (reverse alphabetical) column header
+ .headerSortUp {
+ &:after {
+ border-bottom: none;
+ border-left: 4px solid transparent;
+ border-right: 4px solid transparent;
+ border-top: 4px solid #000;
+ visibility:visible;
+ .box-shadow(none); //can't add boxshadow to downward facing arrow :(
+ .opacity(60);
+ }
+ }
+}
+
+table {
+ // Blue Table Headings
+ .blue {
+ color: @blue;
+ border-bottom-color: @blue;
+ }
+ .headerSortUp.blue,
+ .headerSortDown.blue {
+ background-color: lighten(@blue, 40%);
+ }
+ // Green Table Headings
+ .green {
+ color: @green;
+ border-bottom-color: @green;
+ }
+ .headerSortUp.green,
+ .headerSortDown.green {
+ background-color: lighten(@green, 40%);
+ }
+ // Red Table Headings
+ .red {
+ color: @red;
+ border-bottom-color: @red;
+ }
+ .headerSortUp.red,
+ .headerSortDown.red {
+ background-color: lighten(@red, 50%);
+ }
+ // Yellow Table Headings
+ .yellow {
+ color: @yellow;
+ border-bottom-color: @yellow;
+ }
+ .headerSortUp.yellow,
+ .headerSortDown.yellow {
+ background-color: lighten(@yellow, 40%);
+ }
+ // Orange Table Headings
+ .orange {
+ color: @orange;
+ border-bottom-color: @orange;
+ }
+ .headerSortUp.orange,
+ .headerSortDown.orange {
+ background-color: lighten(@orange, 40%);
+ }
+ // Purple Table Headings
+ .purple {
+ color: @purple;
+ border-bottom-color: @purple;
+ }
+ .headerSortUp.purple,
+ .headerSortDown.purple {
+ background-color: lighten(@purple, 40%);
+ }
+}
View
188 less/type.less
@@ -0,0 +1,188 @@
+/* Typography.less
+ * Headings, body text, lists, code, and more for a versatile and durable typography system
+ * ---------------------------------------------------------------------------------------- */
+
+
+// BODY TEXT
+// ---------
+
+p {
+ #font > .shorthand(normal,@basefont,@baseline);
+ margin-bottom: @baseline / 2;
+ small {
+ font-size: @basefont - 2;
+ color: @grayLight;
+ }
+}
+
+
+// HEADINGS
+// --------
+
+h1, h2, h3, h4, h5, h6 {
+ font-weight: bold;
+ color: @grayDark;
+ small {
+ color: @grayLight;
+ }
+}
+h1 {
+ margin-bottom: @baseline;
+ font-size: 30px;
+ line-height: @baseline * 2;
+ small {
+ font-size: 18px;
+ }
+}
+h2 {
+ font-size: 24px;
+ line-height: @baseline * 2;
+ small {
+ font-size: 14px;
+ }
+}
+h3, h4, h5, h6 {
+ line-height: @baseline * 2;
+}
+h3 {
+ font-size: 18px;
+ small {
+ font-size: 14px;
+ }
+}
+h4 {
+ font-size: 16px;
+ small {
+ font-size: 12px;
+ }
+}
+h5 {
+ font-size: 14px;
+}
+h6 {
+ font-size: 13px;
+ color: @grayLight;
+ text-transform: uppercase;
+}
+
+
+// COLORS
+// ------
+
+// Unordered and Ordered lists
+ul, ol {
+ margin: 0 0 @baseline 25px;
+}
+ul ul,
+ul ol,
+ol ol,
+ol ul {
+ margin-bottom: 0;
+}
+ul {
+ list-style: disc;
+}
+ol {
+ list-style: decimal;
+}
+li {
+ line-height: @baseline;
+ color: @gray;
+}
+ul.unstyled {
+ list-style: none;
+ margin-left: 0;
+}
+
+// Description Lists
+dl {
+ margin-bottom: @baseline;
+ dt, dd {
+ line-height: @baseline;
+ }
+ dt {
+ font-weight: bold;
+ }
+ dd {
+ margin-left: @baseline / 2;
+ }
+}
+
+// MISC
+// ----
+
+// Horizontal rules
+hr {
+ margin: 0 0 19px;
+ border: 0;
+ border-bottom: 1px solid #eee;
+}
+
+// Emphasis
+strong {
+ font-style: inherit;
+ font-weight: bold;
+ line-height: inherit;
+}
+em {
+ font-style: italic;
+ font-weight: inherit;
+ line-height: inherit;
+}
+.muted {
+ color: @grayLight;
+}
+
+// Blockquotes
+blockquote {
+ margin-bottom: @baseline;
+ border-left: 5px solid #eee;
+ padding-left: 15px;
+ p {
+ #font > .shorthand(300,14px,@baseline);
+ margin-bottom: 0;
+ }
+ small {
+ display: block;
+ #font > .shorthand(300,12px,@baseline);
+ color: @grayLight;
+ &:before {
+ content: '\2014 \00A0';
+ }
+ }
+}
+
+// Addresses
+address {
+ display: block;
+ line-height: @baseline;
+ margin-bottom: @baseline;
+}
+
+// Inline and block code styles
+code, pre {
+ padding: 0 3px 2px;
+ font-family: Monaco, Andale Mono, Courier New, monospace;
+ font-size: 12px;
+ .border-radius(3px);
+}
+code {
+ background-color: lighten(@orange, 40%);
+ color: rgba(0,0,0,.75);
+ padding: 1px 3px;
+}
+pre {
+ background-color: #f5f5f5;
+ display: block;
+ padding: @baseline - 1;
+ margin: 0 0 @baseline;
+ line-height: @baseline;
+ font-size: 12px;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0,0,0,.15);
+ .border-radius(3px);
+ white-space: pre;
+ white-space: pre-wrap;
+ word-wrap: break-word;
+
+}
View
11 live_renders/replace.js
@@ -0,0 +1,11 @@
+module.exports = {
+ name: "replace",
+
+ prepare: function(templateName, data){
+ return this.render(templateName, data);
+ },
+
+ update: function(ev){
+ this.element.html(Transitive.Views.render(this.templateName, ev));
+ }
+};