Note: Compass provides utilities and niceties to make your life easier. We use it, and we recommend that you give it a try.
+
+
Inbox
+
+
The inbox allows developers, and those not actively working on the CSS, to quickly add styles that are easily seen by the maintainer of the file. This section of the Application has worked wonders for us.
+
+
+
+
+
+
diff --git a/assets/images/logo.svg b/assets/images/logo.svg
new file mode 100644
index 0000000..dbe1c6a
--- /dev/null
+++ b/assets/images/logo.svg
@@ -0,0 +1,31 @@
+
+
+
+
diff --git a/assets/stylesheets/application.css b/assets/stylesheets/application.css
new file mode 100644
index 0000000..5851f94
--- /dev/null
+++ b/assets/stylesheets/application.css
@@ -0,0 +1 @@
+article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}.c-logo:after{clear:both;content:"";display:table}html{font-size:16px}body{background:#ecf0f1;color:#444444;font-family:"Roboto Slab",serif;font-size:100%;line-height:1.6}@media screen and (min-width:768px){body{padding-left:18.75rem}}p{font-size:1rem;margin:0 0 1.25rem}pre,code,blockquote{font-size:90%}pre{margin:0 0 1.25rem;padding:.625rem}pre code{border:0;box-shadow:none;font-size:1rem}blockquote{font-size:100%;font-style:italic;color:#848484;margin:0 0 1.25rem;padding:.625rem .9375rem}blockquote p{margin:0}ul,ol{margin:0 0 1.25rem}ul ul,ul ol,ol ul,ol ol{margin-bottom:0}ul li,ol li{padding-bottom:.625rem}ul li:last-child,ol li:last-child{padding-bottom:0}ul li{list-style-type:square}a{-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;border-bottom:2px solid #9a9aa8;color:#4e4e5b;text-decoration:none}a:hover,a:focus{background:#dddddd;border-color:#4e4e5b}code{padding:.125rem .3125rem}img{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border-radius:3px;height:auto;max-width:100%}h1,h2,h3,h4,h5,h6{font-weight:700;line-height:1.3;margin:2.5rem 0 .625rem}h1,.c-h1{font-size:2.5rem;margin:0 0 1.25rem}h2,.c-h2{font-size:1.875rem}h3,.c-h3{font-size:1.5625rem}h4,.c-h4{font-size:1.25rem}h5,.c-h5{font-size:1.125rem}.c-center{text-align:center}.c-condensed{font-size:85%}.c-lead{font-size:125%}.c-shout{text-transform:uppercase}.c-logo{font-size:1.875rem;padding:0 .625rem 1.25rem}@media screen and (min-height:875px){.c-logo{margin-bottom:1.25rem;padding-bottom:0}}.c-logo img{float:left}.c-logo b{float:left;font-size:2.5rem;line-height:1.875rem;margin-left:1.25rem;margin-top:2.5rem}.c-logo b span{color:#b5b5c0;display:block;font-size:40%;font-weight:300}.c-tagline{display:none;font-weight:300}@media screen and (min-height:875px){.c-tagline{display:block}}.l-cell{margin:1.25rem auto 2.5rem;max-width:46.875rem;padding:0 1.25rem}@media screen and (min-width:920px){.l-cell{margin:3.75rem auto;padding:0 3.75rem}}pre,code,blockquote,.l-card{background:white;box-shadow:0 2px 0 rgba(0,0,0,0.1);border-radius:3px}.l-block{display:block}.l-pullLeft{float:left}.l-pullRight{float:right}.l-controls{padding:1.25rem}.l-controls p{font-size:85%;margin:.9375rem 0 0;text-align:center}.l-controls p a{color:#666676}@media screen and (min-width:920px){.l-controls{position:absolute;right:0;top:0}}.l-sidebar{display:none;background:#4e4e5b}.is-sidebar-toggled .l-sidebar{display:block}@media screen and (min-width:768px){.l-sidebar{position:absolute;top:0;bottom:0;left:0;right:auto;box-shadow:0 0 0 4px #e0e7e8;display:block;position:fixed;width:18.75rem}}.l-sidebar-toggle{background:#cfd9db;border:0;display:block;margin-top:.625rem;padding:.625rem;text-align:center}@media screen and (min-width:768px){.l-sidebar-toggle{display:none}}.l-header{background:#363640;color:#ecf0f1;display:none;padding-top:1.25rem;text-align:center}.l-header p{background:#2f2f37;margin-bottom:0;padding:.625rem 0}@media screen and (min-width:768px){.l-header{display:block}}.l-nav ul,.l-nav li{list-style-type:none;padding:0}.l-nav a{-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;border:0;color:white;display:block;font-size:90%;padding:.625rem 1.25rem}.l-nav a:hover,.l-nav a:focus{background:#363640}.l-nav a.is-active{background:#ecf0f1;box-shadow:-2px 2px 1px rgba(31,31,36,0.35);color:#444444;margin-right:-0.25rem}@media screen and (min-height:875px){.l-nav a{font-size:110%;padding:.625rem 1.25rem}}.l-nav ul li ul a{background:#42424d;font-size:90%;padding:.625rem;padding-left:2.5rem}.l-nav ul li ul{display:none}.l-nav ul li ul.is-section-active{display:block}.l-about{position:absolute;top:auto;bottom:0;left:0;right:0;background:#42424d;color:#b5b5c0;display:none;margin:0;padding:1.25rem 0;text-align:center}@media screen and (min-width:768px){.l-about{display:block}}@media screen and (min-height:875px){.l-about{padding:2.5rem 0}}.l-about b{font-weight:300;display:block}.l-about a{color:#d1d1d7}.l-about a:hover{background:none;color:white}.hll{background-color:#ffffcc}.c{color:#999988;font-style:italic}.err{color:#a61717;background-color:#e3d2d2}.k{color:#000000;font-weight:700}.o{color:#000000;font-weight:700}.cm{color:#999988;font-style:italic}.cp{color:#999999;font-weight:700;font-style:italic}.c1{color:#999988;font-style:italic}.cs{color:#999999;font-weight:700;font-style:italic}.gd{color:#000000;background-color:#ffdddd}.ge{color:#000000;font-style:italic}.gr{color:#aa0000}.gh{color:#999999}.gi{color:#000000;background-color:#ddffdd}.go{color:#888888}.gp{color:#555555}.gs{font-weight:700}.gu{color:#aaaaaa}.gt{color:#aa0000}.kc{color:#000000;font-weight:700}.kd{color:#000000;font-weight:700}.kn{color:#000000;font-weight:700}.kp{color:#000000;font-weight:700}.kr{color:#000000;font-weight:700}.kt{color:#445588;font-weight:700}.m{color:#009999}.s{color:#d01040}.na{color:teal}.nb{color:#0086b3}.nc{color:#445588;font-weight:700}.no{color:teal}.nd{color:#3c5d5d;font-weight:700}.ni{color:purple}.ne{color:#990000;font-weight:700}.nf{color:#990000;font-weight:700}.nl{color:#990000;font-weight:700}.nn{color:#555555}.nt{color:navy}.nv{color:teal}.ow{color:#000000;font-weight:700}.w{color:#bbbbbb}.mf{color:#009999}.mh{color:#009999}.mi{color:#009999}.mo{color:#009999}.sb{color:#d01040}.sc{color:#d01040}.sd{color:#d01040}.s2{color:#d01040}.se{color:#d01040}.sh{color:#d01040}.si{color:#d01040}.sx{color:#d01040}.sr{color:#009926}.s1{color:#d01040}.ss{color:#990073}.bp{color:#999999}.vc{color:teal}.vg{color:teal}.vi{color:teal}.il{color:#009999}.btn--a,.btn--b,.btn{-webkit-transition:background .2s ease-in-out,box-shadow .2s ease-in-out;-moz-transition:background .2s ease-in-out,box-shadow .2s ease-in-out;-o-transition:background .2s ease-in-out,box-shadow .2s ease-in-out;transition:background .2s ease-in-out,box-shadow .2s ease-in-out;border-radius:3px;border:0;color:white;display:block;padding:.3125rem .625rem;text-align:center}.btn--a:active,.btn--b:active,.btn:active{-webkit-transform:translateY(2px);-moz-transform:translateY(2px);-ms-transform:translateY(2px);-o-transform:translateY(2px);transform:translateY(2px)}@media screen and (min-width:920px){.btn--a,.btn--b,.btn{width:12.5rem}}.btn--a{background:#4e4e5b;box-shadow:0 6px 0 #363640}.btn--a:hover,.btn--a:focus{background:#42424d;box-shadow:0 6px 0 #2b2b32}.btn--b{background:#77939a;box-shadow:0 6px 0 #5e7980;margin-top:2.5rem}.btn--b:hover,.btn--b:focus{background:#69878e;box-shadow:0 6px 0 #536b71}
\ No newline at end of file
diff --git a/assets/stylesheets/vendor/github.css b/assets/stylesheets/vendor/github.css
new file mode 100644
index 0000000..dacb8dd
--- /dev/null
+++ b/assets/stylesheets/vendor/github.css
@@ -0,0 +1 @@
+.hll{background-color:#ffffcc}.c{color:#999988;font-style:italic}.err{color:#a61717;background-color:#e3d2d2}.k{color:#000000;font-weight:700}.o{color:#000000;font-weight:700}.cm{color:#999988;font-style:italic}.cp{color:#999999;font-weight:700;font-style:italic}.c1{color:#999988;font-style:italic}.cs{color:#999999;font-weight:700;font-style:italic}.gd{color:#000000;background-color:#ffdddd}.ge{color:#000000;font-style:italic}.gr{color:#aa0000}.gh{color:#999999}.gi{color:#000000;background-color:#ddffdd}.go{color:#888888}.gp{color:#555555}.gs{font-weight:700}.gu{color:#aaaaaa}.gt{color:#aa0000}.kc{color:#000000;font-weight:700}.kd{color:#000000;font-weight:700}.kn{color:#000000;font-weight:700}.kp{color:#000000;font-weight:700}.kr{color:#000000;font-weight:700}.kt{color:#445588;font-weight:700}.m{color:#009999}.s{color:#d01040}.na{color:teal}.nb{color:#0086b3}.nc{color:#445588;font-weight:700}.no{color:teal}.nd{color:#3c5d5d;font-weight:700}.ni{color:purple}.ne{color:#990000;font-weight:700}.nf{color:#990000;font-weight:700}.nl{color:#990000;font-weight:700}.nn{color:#555555}.nt{color:navy}.nv{color:teal}.ow{color:#000000;font-weight:700}.w{color:#bbbbbb}.mf{color:#009999}.mh{color:#009999}.mi{color:#009999}.mo{color:#009999}.sb{color:#d01040}.sc{color:#d01040}.sd{color:#d01040}.s2{color:#d01040}.se{color:#d01040}.sh{color:#d01040}.si{color:#d01040}.sx{color:#d01040}.sr{color:#009926}.s1{color:#d01040}.ss{color:#990073}.bp{color:#999999}.vc{color:teal}.vg{color:teal}.vi{color:teal}.il{color:#009999}
\ No newline at end of file
diff --git a/changelog/index.html b/changelog/index.html
new file mode 100644
index 0000000..8bb28f4
--- /dev/null
+++ b/changelog/index.html
@@ -0,0 +1,154 @@
+
+
+
+
+
+
+ MVCSS
+
+
+
+
+
+
+
Core - Base sets any base-level styles for tags, such as p or blockquote, beyond what's included in the reset or normalize. Text styles set here reflect the most common appearance of that tag in the design.
Core - Content and Core - Layout are the bridge between base-level tags and modules. They give you the ability to set up abstractions that make contextual tweaks easier.
+
+
The difference between Core - Content and Core - Layout is that Core - Content applies mainly to typography (fonts, colors), while Core - Layout applies to just that, layout (margin, padding, sizing, positioning).
+
+
Note: The c- prefix is an implicit module. There is no c base module; it's only used as a prefix for the content modules.
+
+
Headings
+
+
We set the headings in the Core - Content rather than Core - Base, because we want the ability to share heading styles.
+
h1,.c-h1,%c-h1font-size:40pxmargin-bottom:20px
+
Borrowed from OOCSS, sometimes we want an h2 on a page to look like an h3. This gives us the ability to do that:
By default, MVCSS sizes all elements (font-size, margin, padding) with rems. We do this through the rem() function, that simply divides the target pixel value by the $base-fontSize. Here's an example:
Just like Core - Content, the Core - Layout gives you a higher level of abstraction for your modules.
+
+
Note: The l- prefix is an implicit module. There is no l base module; it's only used as a prefix for the layout modules. This is borrowed from SMACSS, which uses the l- convention in its layout section.
+
+
A good example of a Core - Layout submodule is what we call the cell module (l-cell), which gives your site a max-width, centers it, and applies horizontal padding. Let's take a look:
Just like Core - Content, there are default utilities provided to you, and you can create your own custom submodules as well. Be sure to read through the MVCSS project files to get familiarized.
As long as the project size warrants it, we always get things started with a style reset. Normalize.css is what we use, but alternatives like the infamous Eric Meyer Reset CSS are easily interchangeable.
+
+
With Normalize.css, we recommend that you alter it on a per-project basis, and make the proper overrides in Core - Base.
MVCSS is a Sass-based CSS architecture for creating predictable and maintainable application style.
+
+
As front-end devs at Envy Labs, we work primarily in medium-to-large-sized Rails applications. Each of these projects has a sizable amount of CSS undergoing normal maintenance and iteration. Depending on complexity and setup, changes to existing style can be difficult or done poorly if the right way is too convoluted.
+
+
What? Another Way to Write CSS?
+
+
We're big fans (and often employ tenets of) well-documented methods like OOCSS, BEM, and SMACSS. This bit of architecture and accompanying Styleguide/Library meshes all of our preferred practices into one place.
+
+
All This for CSS?
+
+
CSS in and of itself is simple to pick up, but difficult to apply maintainably to large applications - hence the popularity of the methods listed above. MVCSS is one such manner to organize styles, and the one that we've had the most success in employing.
+
+
Do I Have to Use Sass?
+
+
Sass is not required to employ this paradigm, but all the project files are written in it, so it's definitely recommended.
The Library is a collection of Sass modules/helpers and JavaScript (CoffeeScript) components we commonly use. If you're seeking a framework moreso than a methodology, this is your jumping off point for items like grids, tabs, buttons, and forms. You can just plug the modules/components into your base MVCSS project.
Modules in this context refer to any unit of style that can be found across multiple pages. Most of your styles should be found here. This draws from the OOCSS idea of separating everything into reusable chunks, making it second-nature if you're familiar with that method.
+
+
Examples of Modules
+
+
Here are some commonly occurring examples of modules:
+
+
+
Modals
+
Buttons
+
Tooltips
+
Navigation
+
Re-appearing chunks of content, like a user info card or sidebar
Everyone has a favorite way to write CSS and determine how to name modules. Realizing that everyone includes us, here are our compiled standards for stylesheet authoring and module naming.
Note: Module files should be named in the singular, unless your module's name is plural. For example:
+
+
+
modules/_button.sass
+
modules/_grid.sass
+
modules/_form.sass
+
+
+
Modules are broken down into the base module, submodules, modifiers, and states. If your module or submodule name is two words, use camelCase. For example, .moduleName.
+
+
Submodules
+
+
Submodules use the hyphen - separator to denote that it is a submodule to another module. For example, module-submodule.
+
+
Note: If you have a plural module (e.g. .tabs), you can name your submodule .tab as an exception to this rule. The assumption is made that .tab is a submodule of .tabs.
+
+
Modifiers
+
+
Use -- for a modifier on a module or submodule. For example:
+
+
+
.module--modifier
+
.module-submodule--modifier.
+
+
+
Note: Module and submodule modifier variables contain the same convention. For example:
+
$module--modifier-background:#000
+
States
+
+
Use the is-state, is-module-state, is-module-submodule-state pattern for your states. For example:
+
+
+
.is-active
+
.is-sidebar-toggled
+
.is-nav-item-active
+
+
+
Context
+
+
Use has- for adding a context with specific styles on a module or submodule. For example:
Note: This is different than a Modifier, which sets custom, alternate styles on the base module.
+
+
Sass Variables
+
+
Variables, as documented in Core - Settings, should follow the same naming conventions as your modules, referenced above. The most global variables (used in multiple places, multiple contexts) are prefixed with $base-. Let's look at some examples: