diff --git a/Gruntfile.js b/Gruntfile.js
index e8e7f23..333bd3c 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -73,6 +73,7 @@
           '<%= meta.src.css_soc_dir %>/search_page.css': '<%= meta.src.less_soc_dir %>/search_page.less',
           '<%= meta.src.css_soc_dir %>/server-error-style.css': '<%= meta.src.less_soc_dir %>/server-error-style.less',
           '<%= meta.src.css_soc_dir %>/user-error-style.css': '<%= meta.src.less_soc_dir %>/user-error-style.less',
+          '<%= meta.src.css_soc_dir %>/main.css': '<%= meta.src.less_soc_dir %>/main.less',
           /* Development GSOC files */
           '<%= meta.src.css_gsoc_dir %>/buttons.css': '<%= meta.src.less_gsoc_dir %>/buttons.less',
           '<%= meta.src.css_gsoc_dir %>/dashboard.css': '<%= meta.src.less_gsoc_dir %>/dashboard.less',
@@ -107,6 +108,7 @@
           '<%= meta.build.css_soc_dir %>/search_page.css': '<%= meta.src.less_soc_dir %>/search_page.less',
           '<%= meta.build.css_soc_dir %>/server-error-style.css': '<%= meta.src.less_soc_dir %>/server-error-style.less',
           '<%= meta.build.css_soc_dir %>/user-error-style.css': '<%= meta.src.less_soc_dir %>/user-error-style.less',
+          '<%= meta.build.css_soc_dir %>/main.css': '<%= meta.src.less_soc_dir %>/main.less',
           /* Build GSOC files */
           '<%= meta.build.css_gsoc_dir %>/buttons.css': '<%= meta.src.less_gsoc_dir %>/buttons.less',
           '<%= meta.build.css_gsoc_dir %>/dashboard.css': '<%= meta.src.less_gsoc_dir %>/dashboard.less',
diff --git a/app/melange/content/html/melange/base.html b/app/melange/content/html/melange/base.html
new file mode 100644
index 0000000..f8ba285
--- /dev/null
+++ b/app/melange/content/html/melange/base.html
@@ -0,0 +1,39 @@
+{% extends "melange/root.html" %}
+{% comment %}
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+{% endcomment %}
+
+{% block stylesheets %}
+  <link rel="stylesheet" type="text/css" media="screen" href="/soc/content/{{ app_version }}/css/soc/main.css" />
+  <link href='http://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,400,300,600' rel='stylesheet' type='text/css'>
+{% endblock stylesheets %}
+
+{% block body %}
+  <header class="main-header" role="banner">
+    <h1><span>Welcome to </span><span class="visuallyhidden">melange</span><img src="/soc/content/{{ app_version }}/images/soc/logo/melange-logo.png" alt="melange"/></h1>
+    <p>{{ site_description }}</p>
+  </header>
+
+  <main class="main-content" role="main">
+    {% block page_content %}
+      {{ templ.render }} 
+    {% endblock page_content %}
+  </main>
+
+  <footer class="main-footer" role="contentinfo">
+    <p>
+      <span class="powered">Powered by: <img class="melange-logo" src="/soc/content/{{ app_version }}/images/soc/logo/melange-logo.png" alt="melange"/></span>
+      <span class="empowered">Empowered by: <a class="ir echoditto-logo" href="http://www.echoditto.com/">echoditto</a> <span class="plus-symbol">+</span> <a class="ir neal-maher-logo" href="http://nealmaher.com/">neal maher</a></span>
+    </p>
+  </footer>
+{% endblock body %}
diff --git a/app/melange/content/html/melange/landing_page/_contact_us_section.html b/app/melange/content/html/melange/landing_page/_contact_us_section.html
new file mode 100644
index 0000000..19e15f4
--- /dev/null
+++ b/app/melange/content/html/melange/landing_page/_contact_us_section.html
@@ -0,0 +1,7 @@
+<h3>Find us on ...</h3>
+<ul class="no-list">
+  {% if google_plus %}<li class="google-icon"><a class="ir" href="{{ google_plus }}">google+</a></li>{% endif %}
+  {% if blog %}<li class="blogger-icon"><a class="ir" href="{{ blog }}">blogger</a></li>{% endif %}
+  {% if irc_channel %}<li class="irc-icon"><a href="{{ irc_channel }}">irc</a></li>{% endif %}
+  {% if mailing_list %}<li class="email-icon"><a class="ir" href="{{ mailing_list }}">email</a></li>{% endif %}
+</ul>
diff --git a/app/melange/content/html/melange/landing_page/_program_section.html b/app/melange/content/html/melange/landing_page/_program_section.html
new file mode 100644
index 0000000..e4ae2c1
--- /dev/null
+++ b/app/melange/content/html/melange/landing_page/_program_section.html
@@ -0,0 +1,20 @@
+<div class="project {% if is_active %} active{% endif %}">
+  <a href="{{ homepage_url }}">
+    <div class="active-banner">
+      <div class="triangle-top"></div>
+      <div class="triangle-bottom"></div>
+      <p>Currently<br>Active!</p>
+    </div>
+    <div class="project-image">
+      <img src="/soc/content/{{ app_version }}/{{ image_path }}" alt="{{ program.name }}" />
+    </div>
+    <div class="project-info">
+      <div class="project-title>{{ program.name }}</div>
+      <div class="project-description">
+        <p>{{ program.description }}</p>
+        <p class="unactive-description">TODO(daniel): unactive description</p>
+        <p class="project-button">Visit</p>
+      </div>
+    </div>
+  </a>
+</div>
\ No newline at end of file
diff --git a/app/melange/content/html/melange/landing_page/landing_page.html b/app/melange/content/html/melange/landing_page/landing_page.html
new file mode 100644
index 0000000..01293dd
--- /dev/null
+++ b/app/melange/content/html/melange/landing_page/landing_page.html
@@ -0,0 +1,32 @@
+{% extends "melange/base.html" %}
+{% comment %}
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+{% endcomment %}
+
+{% block page_content %}
+<main class="main-content" role="main">
+  <section class="projects {% if active_programs_counter == 1 %}one-active{% else %}two-active{% endif %}">
+    {% for program_section in program_sections %}
+      {{ program_section.render }}
+    {% empty %}
+      <span>Sorry, there are no active programs at this time</span>
+    {% endfor %}
+  </section>
+
+  {% if contact_us_section.isAnyContactChannelSet %}
+    <section class="main-footer" role="contentinfo">
+      {{ contact_us_section.render }}
+    </section>
+  {% endif %}
+</main>
+{% endblock page_content %}
diff --git a/app/soc/templates/soc/base.html b/app/melange/content/html/melange/root.html
similarity index 100%
rename from app/soc/templates/soc/base.html
rename to app/melange/content/html/melange/root.html
diff --git a/app/settings.py b/app/settings.py
index 229a8ef..b72a2b7 100755
--- a/app/settings.py
+++ b/app/settings.py
@@ -91,6 +91,7 @@
     # TODO(proto): customize the template search directories
     os.path.join(ROOT_PATH, 'soc', 'templates'),
     os.path.join(ROOT_PATH, 'shell', 'templates'),
+    os.path.join(ROOT_PATH, 'melange', 'content', 'html'),
     os.path.join(ROOT_PATH, 'summerofcode', 'content', 'html'),
     os.path.join(ROOT_PATH, 'codein', 'content', 'html'),
 )
diff --git a/app/soc/content/images/gci/logo/landing-page-gci2013.png b/app/soc/content/images/gci/logo/landing-page-gci2013.png
new file mode 100644
index 0000000..f25270b
--- /dev/null
+++ b/app/soc/content/images/gci/logo/landing-page-gci2013.png
Binary files differ
diff --git a/app/soc/content/images/gsoc/logo/landing-page-gsoc2014.png b/app/soc/content/images/gsoc/logo/landing-page-gsoc2014.png
new file mode 100644
index 0000000..bb1db26
--- /dev/null
+++ b/app/soc/content/images/gsoc/logo/landing-page-gsoc2014.png
Binary files differ
diff --git a/app/soc/content/images/soc/active-bg-hover.png b/app/soc/content/images/soc/active-bg-hover.png
new file mode 100644
index 0000000..a144059
--- /dev/null
+++ b/app/soc/content/images/soc/active-bg-hover.png
Binary files differ
diff --git a/app/soc/content/images/soc/active-bg.jpg b/app/soc/content/images/soc/active-bg.jpg
new file mode 100644
index 0000000..f8a3c97
--- /dev/null
+++ b/app/soc/content/images/soc/active-bg.jpg
Binary files differ
diff --git a/app/soc/content/images/soc/arrow-bottom.png b/app/soc/content/images/soc/arrow-bottom.png
new file mode 100644
index 0000000..0f60abc
--- /dev/null
+++ b/app/soc/content/images/soc/arrow-bottom.png
Binary files differ
diff --git a/app/soc/content/images/soc/arrow-bottom.svg b/app/soc/content/images/soc/arrow-bottom.svg
new file mode 100644
index 0000000..9633af9
--- /dev/null
+++ b/app/soc/content/images/soc/arrow-bottom.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="100px" height="19px" viewBox="0 0 100 19" enable-background="new 0 0 100 19" xml:space="preserve">
+<polygon fill="#F19906" points="50,19 0,0 100,0 "/>
+</svg>
diff --git a/app/soc/content/images/soc/arrow-top.png b/app/soc/content/images/soc/arrow-top.png
new file mode 100644
index 0000000..23be340
--- /dev/null
+++ b/app/soc/content/images/soc/arrow-top.png
Binary files differ
diff --git a/app/soc/content/images/soc/arrow-top.svg b/app/soc/content/images/soc/arrow-top.svg
new file mode 100644
index 0000000..68a605f
--- /dev/null
+++ b/app/soc/content/images/soc/arrow-top.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="12px" height="10px" viewBox="0 0 12 10" enable-background="new 0 0 12 10" xml:space="preserve">
+<polygon fill="#D96500" points="12,10 0,10 12,0 "/>
+</svg>
diff --git a/app/soc/content/images/soc/blogger-icon-sprite.png b/app/soc/content/images/soc/blogger-icon-sprite.png
new file mode 100644
index 0000000..3836f7e
--- /dev/null
+++ b/app/soc/content/images/soc/blogger-icon-sprite.png
Binary files differ
diff --git a/app/soc/content/images/soc/blogger-icon-sprite.svg b/app/soc/content/images/soc/blogger-icon-sprite.svg
new file mode 100644
index 0000000..1a04d62
--- /dev/null
+++ b/app/soc/content/images/soc/blogger-icon-sprite.svg
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="56px" height="28px" viewBox="0 0 56 28" enable-background="new 0 0 56 28" xml:space="preserve">
+<g id="Layer_2" display="none">
+	<rect display="inline" fill="#F680FF" width="28" height="28"/>
+	<rect x="28" display="inline" fill="#F9C5FF" width="28" height="28"/>
+</g>
+<path fill="#1F93CF" d="M25.309,10.838h-1.147c-1.126,0-1.791-0.703-1.791-1.527V8.577c0-3.738-4.079-7.664-7.594-7.664H9.242
+	c-4.65,0-8.313,3.663-8.313,8.313v9.93c0,4.366,3.758,7.931,7.621,7.931h10.512c4.287,0,8.008-3.604,8.008-8.008v-6.285
+	C27.07,11.626,26.73,10.838,25.309,10.838z M9.242,7.793h4.751c0.837,0,1.522,0.685,1.522,1.522c0,0.834-0.69,1.522-1.522,1.522
+	H9.242c-0.839,0-1.524-0.685-1.524-1.522C7.719,8.482,8.407,7.793,9.242,7.793z M18.681,20.305H9.242
+	c-0.837,0-1.524-0.685-1.524-1.522c0.001-0.834,0.689-1.524,1.524-1.524h9.439c0.839,0,1.524,0.685,1.524,1.524
+	C20.205,19.616,19.514,20.305,18.681,20.305z"/>
+<path fill="#F29B07" d="M53.309,10.838h-1.147c-1.126,0-1.791-0.703-1.791-1.527V8.577c0-3.738-4.079-7.664-7.594-7.664h-5.535
+	c-4.65,0-8.313,3.663-8.313,8.313v9.93c0,4.366,3.758,7.931,7.621,7.931h10.512c4.287,0,8.008-3.604,8.008-8.008v-6.285
+	C55.07,11.626,54.73,10.838,53.309,10.838z M37.242,7.793h4.751c0.837,0,1.522,0.685,1.522,1.522c0,0.834-0.69,1.522-1.522,1.522
+	h-4.751c-0.839,0-1.524-0.685-1.524-1.522C35.719,8.482,36.407,7.793,37.242,7.793z M46.681,20.305h-9.439
+	c-0.837,0-1.524-0.685-1.524-1.522c0.001-0.834,0.689-1.524,1.524-1.524h9.439c0.839,0,1.524,0.685,1.524,1.524
+	C48.205,19.616,47.514,20.305,46.681,20.305z"/>
+<g id="Layer_3" display="none">
+	<path display="inline" fill="#1F93CF" d="M24.745,5.092H3.637c-1.186,0-2.931,0.977-2.931,2.394v13.138
+		c0,1.433,1.717,2.285,2.931,2.285h21.108c1.263,0,2.549-0.941,2.549-2.284V7.486C27.294,6.137,26.008,5.092,24.745,5.092z
+		 M24.712,6.736c-3.09,2.467-7.842,5.822-8.881,6.43c-1.049,0.616-2.359,0.663-3.417,0.118c-1.173-0.603-6.176-4.389-8.959-6.525
+		C3.517,6.75,3.578,6.736,3.637,6.736H24.712z M11.673,14.731c0.723,0.371,1.525,0.556,2.33,0.556c0.916,0,1.836-0.239,2.647-0.713
+		c0.147-0.086,0.372-0.276,0.629-0.449l5.555,7.139H5.29l5.524-7.099C11.171,14.399,11.469,14.626,11.673,14.731z M2.077,20.624
+		V7.91c1.645,1.188,4.965,3.721,7.297,5.376l-6.246,8.008C2.615,21.159,2.077,20.789,2.077,20.624z M24.801,21.336L18.5,13.239
+		c2.231-1.586,5.504-4.068,7.148-5.276v12.66C25.649,20.926,25.251,21.275,24.801,21.336z"/>
+	<path display="inline" fill="#F29B07" d="M52.745,5.092H31.637c-1.186,0-2.931,0.977-2.931,2.394v13.138
+		c0,1.433,1.717,2.285,2.931,2.285h21.108c1.263,0,2.549-0.941,2.549-2.284V7.486C55.294,6.137,54.008,5.092,52.745,5.092z
+		 M52.712,6.736c-3.09,2.467-7.842,5.822-8.881,6.43c-1.049,0.616-2.359,0.663-3.417,0.118c-1.173-0.603-6.176-4.389-8.959-6.525
+		c0.061-0.009,0.122-0.023,0.182-0.023C31.637,6.736,52.712,6.736,52.712,6.736z M39.673,14.731c0.723,0.371,1.525,0.556,2.33,0.556
+		c0.916,0,1.836-0.239,2.647-0.713c0.147-0.086,0.372-0.276,0.629-0.449l5.555,7.139H33.29l5.524-7.099
+		C39.171,14.399,39.469,14.626,39.673,14.731z M30.077,20.624V7.91c1.645,1.188,4.965,3.721,7.297,5.376l-6.246,8.008
+		C30.615,21.159,30.077,20.789,30.077,20.624z M52.801,21.336L46.5,13.239c2.231-1.586,5.504-4.068,7.148-5.276v12.66
+		C53.649,20.926,53.251,21.275,52.801,21.336z"/>
+</g>
+</svg>
diff --git a/app/soc/content/images/soc/echoditto-logo-sprite.png b/app/soc/content/images/soc/echoditto-logo-sprite.png
new file mode 100644
index 0000000..809cf31
--- /dev/null
+++ b/app/soc/content/images/soc/echoditto-logo-sprite.png
Binary files differ
diff --git a/app/soc/content/images/soc/email-icon-sprite.png b/app/soc/content/images/soc/email-icon-sprite.png
new file mode 100644
index 0000000..0a5bf50
--- /dev/null
+++ b/app/soc/content/images/soc/email-icon-sprite.png
Binary files differ
diff --git a/app/soc/content/images/soc/email-icon-sprite.svg b/app/soc/content/images/soc/email-icon-sprite.svg
new file mode 100644
index 0000000..fbf7a5d
--- /dev/null
+++ b/app/soc/content/images/soc/email-icon-sprite.svg
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="56px"
+	 height="28px" viewBox="0 0 56 28" enable-background="new 0 0 56 28" xml:space="preserve">
+<g id="Layer_2" display="none">
+	<rect display="inline" fill="#F680FF" width="28" height="28"/>
+	<rect x="28" display="inline" fill="#F9C5FF" width="28" height="28"/>
+</g>
+<g id="Layer_1" display="none">
+	<path display="inline" fill-rule="evenodd" clip-rule="evenodd" fill="#1F93CF" d="M9.242,0.913h5.535
+		c3.515,0,7.594,3.926,7.594,7.664v0.734c0,0.824,0.665,1.527,1.791,1.527h1.147c1.421,0,1.761,0.788,1.761,1.956v6.285
+		c0,4.404-3.721,8.008-8.008,8.008H8.55c-3.863,0-7.621-3.565-7.621-7.931V9.226C0.929,4.576,4.592,0.913,9.242,0.913L9.242,0.913z
+		 M9.242,7.793h4.751c0.837,0,1.522,0.685,1.522,1.522c0,0.834-0.69,1.522-1.522,1.522H9.242c-0.839,0-1.524-0.685-1.524-1.522
+		C7.719,8.482,8.407,7.793,9.242,7.793L9.242,7.793z M9.242,17.259h9.439c0.839,0,1.524,0.685,1.524,1.524
+		c0,0.833-0.691,1.522-1.524,1.522H9.242c-0.837,0-1.524-0.685-1.524-1.522C7.719,17.949,8.407,17.259,9.242,17.259L9.242,17.259z"
+		/>
+	<path display="inline" fill-rule="evenodd" clip-rule="evenodd" fill="#F29B07" d="M37.242,0.913h5.535
+		c3.515,0,7.594,3.926,7.594,7.664v0.734c0,0.824,0.665,1.527,1.791,1.527h1.147c1.421,0,1.761,0.788,1.761,1.956v6.285
+		c0,4.404-3.721,8.008-8.008,8.008H36.55c-3.863,0-7.621-3.565-7.621-7.931V9.226C28.929,4.576,32.592,0.913,37.242,0.913
+		L37.242,0.913z M37.242,7.793h4.751c0.837,0,1.522,0.685,1.522,1.522c0,0.834-0.69,1.522-1.522,1.522h-4.751
+		c-0.839,0-1.524-0.685-1.524-1.522C35.719,8.482,36.407,7.793,37.242,7.793L37.242,7.793z M37.242,17.259h9.439
+		c0.839,0,1.524,0.685,1.524,1.524c0,0.833-0.691,1.522-1.524,1.522h-9.439c-0.837,0-1.524-0.685-1.524-1.522
+		C35.719,17.949,36.407,17.259,37.242,17.259L37.242,17.259z"/>
+</g>
+<g id="Layer_4" display="none">
+	<g display="inline">
+		<polygon fill="#1F93CF" points="27,13 24,13 24,10 22,10 22,13 19,13 19,15 22,15 22,17 24,17 24,15 27,15 		"/>
+		<path fill="#1F93CF" d="M14.644,15.739l-1.209-0.923c-0.369-0.299-0.872-0.695-0.872-1.421c0-0.728,0.503-1.192,0.939-1.621
+			c1.409-1.089,2.818-2.111,2.818-4.556c0-2.513-1.529-3.218-2.3-4.218h1.988l2.172-1.465l-6.994-0.07
+			c-1.813,0-4.257,0.153-6.17,1.706C3.576,4.393,3.102,6.173,3.102,7.693c0,2.576,2.013,5.18,5.569,5.18
+			c0.336,0,0.703-0.037,1.074-0.07c-0.167,0.396-0.336,0.725-0.336,1.287c0,1.024,0.536,1.65,1.007,2.245
+			c-1.509,0.101-4.329,0.265-6.407,1.52c-1.982,1.158-2.584,2.842-2.584,4.033c0,2.447,2.252,4.751,7.117,4.751
+			c5.77,0,8.919-3.164,8.919-6.271C17.461,18.088,16.12,16.963,14.644,15.739z M10.249,12.022c-2.886,0-4.194-3.669-4.194-5.883
+			c0-0.86,0.167-1.834,0.737-2.529c0.538-0.662,1.477-1.008,2.35-1.008c2.784,0,4.226,3.702,4.226,6.082
+			c0,0.595-0.067,1.568-0.838,2.33C11.992,11.543,11.087,12.022,10.249,12.022z M10.278,25.229c-3.589,0-5.905-1.687-5.905-4.034
+			c0-2.347,2.147-3.14,2.885-3.404c1.409-0.463,3.222-0.53,3.524-0.53c0.334,0,0.502,0,0.769,0.034
+			c2.552,1.786,3.659,2.676,3.659,4.364C15.211,23.705,13.498,25.229,10.278,25.229z"/>
+	</g>
+	<g display="inline">
+		<polygon fill="#F29B07" points="55,13 52,13 52,10 50,10 50,13 47,13 47,15 50,15 50,17 52,17 52,15 55,15 		"/>
+		<path fill="#F29B07" d="M42.432,15.687l-1.209-0.923c-0.369-0.299-0.872-0.695-0.872-1.421c0-0.728,0.503-1.192,0.939-1.621
+			c1.409-1.089,2.818-2.085,2.818-4.53c0-2.513-1.529-3.192-2.3-4.192h1.988l2.172-1.491l-6.994-0.083
+			c-1.813,0-4.257,0.146-6.17,1.7c-1.441,1.222-1.914,2.998-1.914,4.518c0,2.576,2.013,5.178,5.569,5.178
+			c0.336,0,0.703-0.038,1.074-0.07c-0.167,0.396-0.336,0.725-0.336,1.287c0,1.024,0.536,1.65,1.007,2.245
+			c-1.509,0.101-4.329,0.265-6.407,1.52c-1.982,1.158-2.584,2.842-2.584,4.033c0,2.447,2.252,4.751,7.117,4.751
+			c5.77,0,8.919-3.164,8.919-6.271C45.249,18.036,43.907,16.911,42.432,15.687z M38.037,11.97c-2.886,0-4.194-3.669-4.194-5.883
+			c0-0.86,0.167-1.834,0.737-2.529c0.538-0.662,1.477-1.008,2.35-1.008c2.784,0,4.226,3.702,4.226,6.082
+			c0,0.595-0.067,1.568-0.838,2.33C39.779,11.491,38.875,11.97,38.037,11.97z M38.066,25.176c-3.589,0-5.905-1.687-5.905-4.034
+			c0-2.347,2.147-3.14,2.885-3.404c1.409-0.463,3.222-0.53,3.524-0.53c0.334,0,0.502,0,0.769,0.034
+			c2.552,1.786,3.659,2.676,3.659,4.364C42.998,23.653,41.285,25.176,38.066,25.176z"/>
+	</g>
+</g>
+<g id="Layer_3">
+	<path fill="#1F93CF" d="M25.133,4.77H3.263c-1.229,0-3.037,1.012-3.037,2.48v13.612c0,1.485,1.779,2.367,3.037,2.367h21.87
+		c1.309,0,2.641-0.975,2.641-2.367V7.25C27.774,5.853,26.442,4.77,25.133,4.77z M25.099,6.474c-3.202,2.556-8.125,6.032-9.201,6.662
+		c-1.087,0.638-2.445,0.687-3.54,0.123c-1.215-0.625-6.399-4.547-9.283-6.761c0.063-0.009,0.127-0.024,0.188-0.024H25.099z
+		 M11.589,14.758c0.749,0.385,1.58,0.576,2.414,0.576c0.949,0,1.902-0.248,2.742-0.739c0.153-0.089,0.385-0.286,0.652-0.465
+		l5.756,7.397H4.976l5.724-7.355C11.069,14.414,11.378,14.649,11.589,14.758z M1.646,20.863V7.69
+		c1.704,1.231,5.145,3.856,7.561,5.57l-6.472,8.298C2.203,21.418,1.646,21.035,1.646,20.863z M25.191,21.601l-6.528-8.389
+		c2.311-1.643,5.703-4.215,7.407-5.467v13.118C26.07,21.176,25.657,21.538,25.191,21.601z"/>
+	<path fill="#F29B07" d="M53.133,4.77h-21.87c-1.229,0-3.037,1.012-3.037,2.48v13.612c0,1.485,1.779,2.367,3.037,2.367h21.87
+		c1.309,0,2.641-0.975,2.641-2.367V7.25C55.774,5.853,54.442,4.77,53.133,4.77z M53.099,6.474c-3.202,2.556-8.125,6.032-9.201,6.662
+		c-1.087,0.638-2.445,0.687-3.54,0.123c-1.215-0.625-6.399-4.547-9.283-6.761c0.063-0.009,0.127-0.024,0.188-0.024H53.099z
+		 M39.589,14.758c0.749,0.385,1.58,0.576,2.414,0.576c0.949,0,1.902-0.248,2.742-0.739c0.153-0.089,0.385-0.286,0.652-0.465
+		l5.756,7.397H32.976l5.724-7.355C39.069,14.414,39.378,14.649,39.589,14.758z M29.646,20.863V7.69
+		c1.704,1.231,5.145,3.856,7.561,5.57l-6.472,8.298C30.203,21.418,29.646,21.035,29.646,20.863z M53.191,21.601l-6.528-8.389
+		c2.311-1.643,5.703-4.215,7.407-5.467v13.118C54.07,21.176,53.657,21.538,53.191,21.601z"/>
+</g>
+</svg>
diff --git a/app/soc/content/images/soc/google-icon-sprite.png b/app/soc/content/images/soc/google-icon-sprite.png
new file mode 100644
index 0000000..f32499c
--- /dev/null
+++ b/app/soc/content/images/soc/google-icon-sprite.png
Binary files differ
diff --git a/app/soc/content/images/soc/google-icon-sprite.svg b/app/soc/content/images/soc/google-icon-sprite.svg
new file mode 100644
index 0000000..8afa8df
--- /dev/null
+++ b/app/soc/content/images/soc/google-icon-sprite.svg
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="56px"
+	 height="28px" viewBox="0 0 56 28" enable-background="new 0 0 56 28" xml:space="preserve">
+<g id="Layer_2" display="none">
+	<rect display="inline" fill="#F680FF" width="28" height="28"/>
+	<rect x="28" display="inline" fill="#F9C5FF" width="28" height="28"/>
+</g>
+<g id="Layer_1" display="none">
+	<path display="inline" fill-rule="evenodd" clip-rule="evenodd" fill="#1F93CF" d="M9.242,0.913h5.535
+		c3.515,0,7.594,3.926,7.594,7.664v0.734c0,0.824,0.665,1.527,1.791,1.527h1.147c1.421,0,1.761,0.788,1.761,1.956v6.285
+		c0,4.404-3.721,8.008-8.008,8.008H8.55c-3.863,0-7.621-3.565-7.621-7.931V9.226C0.929,4.576,4.592,0.913,9.242,0.913L9.242,0.913z
+		 M9.242,7.793h4.751c0.837,0,1.522,0.685,1.522,1.522c0,0.834-0.69,1.522-1.522,1.522H9.242c-0.839,0-1.524-0.685-1.524-1.522
+		C7.719,8.482,8.407,7.793,9.242,7.793L9.242,7.793z M9.242,17.259h9.439c0.839,0,1.524,0.685,1.524,1.524
+		c0,0.833-0.691,1.522-1.524,1.522H9.242c-0.837,0-1.524-0.685-1.524-1.522C7.719,17.949,8.407,17.259,9.242,17.259L9.242,17.259z"
+		/>
+	<path display="inline" fill-rule="evenodd" clip-rule="evenodd" fill="#F29B07" d="M37.242,0.913h5.535
+		c3.515,0,7.594,3.926,7.594,7.664v0.734c0,0.824,0.665,1.527,1.791,1.527h1.147c1.421,0,1.761,0.788,1.761,1.956v6.285
+		c0,4.404-3.721,8.008-8.008,8.008H36.55c-3.863,0-7.621-3.565-7.621-7.931V9.226C28.929,4.576,32.592,0.913,37.242,0.913
+		L37.242,0.913z M37.242,7.793h4.751c0.837,0,1.522,0.685,1.522,1.522c0,0.834-0.69,1.522-1.522,1.522h-4.751
+		c-0.839,0-1.524-0.685-1.524-1.522C35.719,8.482,36.407,7.793,37.242,7.793L37.242,7.793z M37.242,17.259h9.439
+		c0.839,0,1.524,0.685,1.524,1.524c0,0.833-0.691,1.522-1.524,1.522h-9.439c-0.837,0-1.524-0.685-1.524-1.522
+		C35.719,17.949,36.407,17.259,37.242,17.259L37.242,17.259z"/>
+</g>
+<g id="Layer_4">
+	<g>
+		<polygon fill="#1F93CF" points="27,13 24,13 24,10 22,10 22,13 19,13 19,15 22,15 22,17 24,17 24,15 27,15 		"/>
+		<path fill="#1F93CF" d="M14.644,15.739l-1.209-0.923c-0.369-0.299-0.872-0.695-0.872-1.421c0-0.728,0.503-1.192,0.939-1.621
+			c1.409-1.089,2.818-2.111,2.818-4.556c0-2.513-1.529-3.218-2.3-4.218h1.988l2.172-1.465l-6.994-0.07
+			c-1.813,0-4.257,0.153-6.17,1.706C3.576,4.393,3.102,6.173,3.102,7.693c0,2.576,2.013,5.18,5.569,5.18
+			c0.336,0,0.703-0.037,1.074-0.07c-0.167,0.396-0.336,0.725-0.336,1.287c0,1.024,0.536,1.65,1.007,2.245
+			c-1.509,0.101-4.329,0.265-6.407,1.52c-1.982,1.158-2.584,2.842-2.584,4.033c0,2.447,2.252,4.751,7.117,4.751
+			c5.77,0,8.919-3.164,8.919-6.271C17.461,18.088,16.12,16.963,14.644,15.739z M10.249,12.022c-2.886,0-4.194-3.669-4.194-5.883
+			c0-0.86,0.167-1.834,0.737-2.529c0.538-0.662,1.477-1.008,2.35-1.008c2.784,0,4.226,3.702,4.226,6.082
+			c0,0.595-0.067,1.568-0.838,2.33C11.992,11.543,11.087,12.022,10.249,12.022z M10.278,25.229c-3.589,0-5.905-1.687-5.905-4.034
+			c0-2.347,2.147-3.14,2.885-3.404c1.409-0.463,3.222-0.53,3.524-0.53c0.334,0,0.502,0,0.769,0.034
+			c2.552,1.786,3.659,2.676,3.659,4.364C15.211,23.705,13.498,25.229,10.278,25.229z"/>
+	</g>
+	<g>
+		<polygon fill="#F29B07" points="55,13 52,13 52,10 50,10 50,13 47,13 47,15 50,15 50,17 52,17 52,15 55,15 		"/>
+		<path fill="#F29B07" d="M42.432,15.687l-1.209-0.923c-0.369-0.299-0.872-0.695-0.872-1.421c0-0.728,0.503-1.192,0.939-1.621
+			c1.409-1.089,2.818-2.085,2.818-4.53c0-2.513-1.529-3.192-2.3-4.192h1.988l2.172-1.491l-6.994-0.083
+			c-1.813,0-4.257,0.146-6.17,1.7c-1.441,1.222-1.914,2.998-1.914,4.518c0,2.576,2.013,5.178,5.569,5.178
+			c0.336,0,0.703-0.038,1.074-0.07c-0.167,0.396-0.336,0.725-0.336,1.287c0,1.024,0.536,1.65,1.007,2.245
+			c-1.509,0.101-4.329,0.265-6.407,1.52c-1.982,1.158-2.584,2.842-2.584,4.033c0,2.447,2.252,4.751,7.117,4.751
+			c5.77,0,8.919-3.164,8.919-6.271C45.249,18.036,43.907,16.911,42.432,15.687z M38.037,11.97c-2.886,0-4.194-3.669-4.194-5.883
+			c0-0.86,0.167-1.834,0.737-2.529c0.538-0.662,1.477-1.008,2.35-1.008c2.784,0,4.226,3.702,4.226,6.082
+			c0,0.595-0.067,1.568-0.838,2.33C39.779,11.491,38.875,11.97,38.037,11.97z M38.066,25.176c-3.589,0-5.905-1.687-5.905-4.034
+			c0-2.347,2.147-3.14,2.885-3.404c1.409-0.463,3.222-0.53,3.524-0.53c0.334,0,0.502,0,0.769,0.034
+			c2.552,1.786,3.659,2.676,3.659,4.364C42.998,23.653,41.285,25.176,38.066,25.176z"/>
+	</g>
+</g>
+<g id="Layer_3" display="none">
+	<path display="inline" fill="#1F93CF" d="M24.745,5.092H3.637c-1.186,0-2.931,0.977-2.931,2.394v13.138
+		c0,1.433,1.717,2.285,2.931,2.285h21.108c1.263,0,2.549-0.941,2.549-2.284V7.486C27.294,6.137,26.008,5.092,24.745,5.092z
+		 M24.712,6.736c-3.09,2.467-7.842,5.822-8.881,6.43c-1.049,0.616-2.359,0.663-3.417,0.118c-1.173-0.603-6.176-4.389-8.959-6.525
+		C3.517,6.75,3.578,6.736,3.637,6.736H24.712z M11.673,14.731c0.723,0.371,1.525,0.556,2.33,0.556c0.916,0,1.836-0.239,2.647-0.713
+		c0.147-0.086,0.372-0.276,0.629-0.449l5.555,7.139H5.29l5.524-7.099C11.171,14.399,11.469,14.626,11.673,14.731z M2.077,20.624
+		V7.91c1.645,1.188,4.965,3.721,7.297,5.376l-6.246,8.008C2.615,21.159,2.077,20.789,2.077,20.624z M24.801,21.336l-6.301-8.097
+		c2.231-1.586,5.504-4.068,7.148-5.276v12.66C25.649,20.926,25.251,21.275,24.801,21.336z"/>
+	<path display="inline" fill="#F29B07" d="M52.745,5.092H31.637c-1.186,0-2.931,0.977-2.931,2.394v13.138
+		c0,1.433,1.717,2.285,2.931,2.285h21.108c1.263,0,2.549-0.941,2.549-2.284V7.486C55.294,6.137,54.008,5.092,52.745,5.092z
+		 M52.712,6.736c-3.09,2.467-7.842,5.822-8.881,6.43c-1.049,0.616-2.359,0.663-3.417,0.118c-1.173-0.603-6.176-4.389-8.959-6.525
+		c0.061-0.009,0.122-0.023,0.182-0.023H52.712z M39.673,14.731c0.723,0.371,1.525,0.556,2.33,0.556c0.916,0,1.836-0.239,2.647-0.713
+		c0.147-0.086,0.372-0.276,0.629-0.449l5.555,7.139H33.29l5.524-7.099C39.171,14.399,39.469,14.626,39.673,14.731z M30.077,20.624
+		V7.91c1.645,1.188,4.965,3.721,7.297,5.376l-6.246,8.008C30.615,21.159,30.077,20.789,30.077,20.624z M52.801,21.336l-6.301-8.097
+		c2.231-1.586,5.504-4.068,7.148-5.276v12.66C53.649,20.926,53.251,21.275,52.801,21.336z"/>
+</g>
+</svg>
diff --git a/app/soc/content/images/soc/house-icon-small.png b/app/soc/content/images/soc/house-icon-small.png
new file mode 100644
index 0000000..e4a6964
--- /dev/null
+++ b/app/soc/content/images/soc/house-icon-small.png
Binary files differ
diff --git a/app/soc/content/images/soc/house-icon-small.svg b/app/soc/content/images/soc/house-icon-small.svg
new file mode 100644
index 0000000..537a64a
--- /dev/null
+++ b/app/soc/content/images/soc/house-icon-small.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="28px" height="14px" viewBox="0 0 28 14" enable-background="new 0 0 28 14" xml:space="preserve">
+<polygon fill="#F6A006" points="20.902,0.096 14.778,5.348 14.778,13.904 18.667,13.904 18.667,8.46 23.333,8.46 23.333,13.904 
+	27.222,13.904 27.222,5.413 "/>
+<polygon fill="#1F93CF" points="6.902,0.096 0.778,5.348 0.778,13.904 4.667,13.904 4.667,8.46 9.333,8.46 9.333,13.904 
+	13.222,13.904 13.222,5.413 "/>
+</svg>
diff --git a/app/soc/content/images/soc/house-icon.png b/app/soc/content/images/soc/house-icon.png
new file mode 100644
index 0000000..268e28f
--- /dev/null
+++ b/app/soc/content/images/soc/house-icon.png
Binary files differ
diff --git a/app/soc/content/images/soc/house-icon.svg b/app/soc/content/images/soc/house-icon.svg
new file mode 100644
index 0000000..3a29ec0
--- /dev/null
+++ b/app/soc/content/images/soc/house-icon.svg
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="36px" height="18px" viewBox="0 0 36 18" enable-background="new 0 0 36 18" xml:space="preserve">
+<g id="Layer_2" display="none">
+	<rect x="-9.163" y="0.318" display="inline" fill="#F78DFF" width="18" height="18"/>
+	<rect x="8.837" y="0.318" display="inline" fill="#F9C5FF" width="18" height="18"/>
+</g>
+<g id="Layer_1_1_">
+	<polygon fill="#F6A006" points="26.874,0.123 19,6.876 19,17.876 24,17.876 24,10.877 30,10.877 30,17.876 35,17.876 35,6.959 	"/>
+	<polygon fill="#1F93CF" points="8.874,0.123 1,6.876 1,17.876 6,17.876 6,10.877 12,10.877 12,17.876 17,17.876 17,6.959 	"/>
+</g>
+</svg>
diff --git a/app/soc/content/images/soc/logo/melange-logo.png b/app/soc/content/images/soc/logo/melange-logo.png
new file mode 100644
index 0000000..7643a84
--- /dev/null
+++ b/app/soc/content/images/soc/logo/melange-logo.png
Binary files differ
diff --git a/app/soc/content/images/soc/melange.png b/app/soc/content/images/soc/melange.png
new file mode 100644
index 0000000..c279a7b
--- /dev/null
+++ b/app/soc/content/images/soc/melange.png
Binary files differ
diff --git a/app/soc/content/images/soc/neal-maher-logo-sprite.png b/app/soc/content/images/soc/neal-maher-logo-sprite.png
new file mode 100644
index 0000000..a2c3f28
--- /dev/null
+++ b/app/soc/content/images/soc/neal-maher-logo-sprite.png
Binary files differ
diff --git a/app/soc/content/images/soc/non-bg-hover.png b/app/soc/content/images/soc/non-bg-hover.png
new file mode 100644
index 0000000..f49defd
--- /dev/null
+++ b/app/soc/content/images/soc/non-bg-hover.png
Binary files differ
diff --git a/app/soc/content/images/soc/non-bg.png b/app/soc/content/images/soc/non-bg.png
new file mode 100644
index 0000000..9043e06
--- /dev/null
+++ b/app/soc/content/images/soc/non-bg.png
Binary files differ
diff --git a/app/soc/content/less/soc/elements/footer.less b/app/soc/content/less/soc/elements/footer.less
new file mode 100644
index 0000000..a8b17e7
--- /dev/null
+++ b/app/soc/content/less/soc/elements/footer.less
@@ -0,0 +1,58 @@
+// ==========================================================================
+// Footer
+// ==========================================================================
+
+.main-footer {
+	max-width: 700px;
+	padding: 1em 5% 10em;
+	margin: 0 auto;
+	text-align: center;
+
+	p {
+		font-size: 0.8em;
+		color: #999999;
+	}
+
+	.melange-logo {
+		width: 70px;
+		margin: 0 2.5em 0 0.5em;
+	}
+
+	.echoditto-logo {
+		&:extend(.ir); //these styles are in _helper.scss
+		display: inline-block;
+		width: 70px;
+		height: 20px;
+		background: url('@{images_soc_location}/echoditto-logo-sprite.png');
+		margin: 0 5px -3px;
+		&:hover {
+			background-position: 100%;
+		}
+	}
+
+	.neal-maher-logo {
+		&:extend(.ir); //these styles are in _helper.scss
+		display: inline-block;
+		width: 59px;
+		height: 20px;
+		background: url('@{images_soc_location}/neal-maher-logo-sprite.png');
+		margin: 0 5px -3px;
+		&:hover {
+			background-position: 100%;
+		}
+	}
+
+	.powered, .empowered {
+		display: block;
+		margin-bottom: 1em;
+
+		@media @break-medium {
+			display: inline;
+			margin: 0;
+		}
+	}
+}
+
+
+
+
diff --git a/app/soc/content/less/soc/elements/general.less b/app/soc/content/less/soc/elements/general.less
new file mode 100644
index 0000000..7d24e92
--- /dev/null
+++ b/app/soc/content/less/soc/elements/general.less
@@ -0,0 +1,24 @@
+// ==========================================================================
+// General
+// ==========================================================================
+
+body {
+	font-family: @serif;
+	font-size: 100%;
+	line-height: 1.5;
+	color: @web-black;
+	background: #F1F1F1;
+	position: relative;
+	min-width: 300px;
+}
+
+.main-content {
+	max-width: 960px;
+	padding: 0 5%;
+	margin: 0 auto;
+
+	@media @break-medium {
+		padding: 0;
+		width: 960px;
+	}
+}
\ No newline at end of file
diff --git a/app/soc/content/less/soc/elements/grid.less b/app/soc/content/less/soc/elements/grid.less
new file mode 100644
index 0000000..d5ccadb
--- /dev/null
+++ b/app/soc/content/less/soc/elements/grid.less
@@ -0,0 +1,462 @@
+//  
+//  Variable Grid System.
+//  Learn more ~ http://www.spry-soft.com/grids/
+//  Based on 960 Grid System - http://960.gs/
+
+//  Licensed under GPL and MIT.
+//  
+
+//  
+//  Forces backgrounds to span full width,
+//  even if there is horizontal scrolling.
+//  Increase this if your layout is wider.
+
+//  Note: IE6 works fine without this fix.
+//  
+
+body {
+  min-width: 960px;
+}
+
+//  Containers
+// --------------------------------------------------------------------------------------------------*/
+.container_16 {
+	margin-left: auto;
+	margin-right: auto;
+	width: 960px;
+}
+
+//   Grid >> Global
+//  --------------------------------------------------------------------------------------------------*/
+
+
+.grid_1,
+.grid_2,
+.grid_3,
+.grid_4,
+.grid_5,
+.grid_6,
+.grid_7,
+.grid_8,
+.grid_9,
+.grid_10,
+.grid_11,
+.grid_12,
+.grid_13,
+.grid_14,
+.grid_15,
+.grid_16 {
+	display:inline;
+	float: left;
+	position: relative;
+	margin-left: 10px;
+	margin-right: 10px;
+}
+
+
+
+.push_1, .pull_1,
+.push_2, .pull_2,
+.push_3, .pull_3,
+.push_4, .pull_4,
+.push_5, .pull_5,
+.push_6, .pull_6,
+.push_7, .pull_7,
+.push_8, .pull_8,
+.push_9, .pull_9,
+.push_10, .pull_10,
+.push_11, .pull_11,
+.push_12, .pull_12,
+.push_13, .pull_13,
+.push_14, .pull_14,
+.push_15, .pull_15,
+.push_16, .pull_16 {
+	position:relative;
+}
+
+
+//  Grid >> Children (Alpha ~ First, Omega ~ Last)
+// --------------------------------------------------------------------------------------------------*/
+
+.alpha {
+	margin-left: 0;
+}
+
+.omega {
+	margin-right: 0;
+}
+
+//  Grid >> 16 Columns
+// --------------------------------------------------------------------------------------------------*/
+
+
+.container_16 .grid_1 {
+	width:40px;
+}
+
+.container_16 .grid_2 {
+	width:100px;
+}
+
+.container_16 .grid_3 {
+	width:160px;
+}
+
+.container_16 .grid_4 {
+	width:220px;
+}
+
+.container_16 .grid_5 {
+	width:280px;
+}
+
+.container_16 .grid_6 {
+	width:340px;
+}
+
+.container_16 .grid_7 {
+	width:400px;
+}
+
+.container_16 .grid_8 {
+	width:460px;
+}
+
+.container_16 .grid_9 {
+	width:520px;
+}
+
+.container_16 .grid_10 {
+	width:580px;
+}
+
+.container_16 .grid_11 {
+	width:640px;
+}
+
+.container_16 .grid_12 {
+	width:700px;
+}
+
+.container_16 .grid_13 {
+	width:760px;
+}
+
+.container_16 .grid_14 {
+	width:820px;
+}
+
+.container_16 .grid_15 {
+	width:880px;
+}
+
+.container_16 .grid_16 {
+	width:940px;
+}
+
+
+
+
+//  Prefix Extra Space >> 16 Columns
+// --------------------------------------------------------------------------------------------------*/
+
+
+.container_16 .prefix_1 {
+	padding-left:60px;
+}
+
+.container_16 .prefix_2 {
+	padding-left:120px;
+}
+
+.container_16 .prefix_3 {
+	padding-left:180px;
+}
+
+.container_16 .prefix_4 {
+	padding-left:240px;
+}
+
+.container_16 .prefix_5 {
+	padding-left:300px;
+}
+
+.container_16 .prefix_6 {
+	padding-left:360px;
+}
+
+.container_16 .prefix_7 {
+	padding-left:420px;
+}
+
+.container_16 .prefix_8 {
+	padding-left:480px;
+}
+
+.container_16 .prefix_9 {
+	padding-left:540px;
+}
+
+.container_16 .prefix_10 {
+	padding-left:600px;
+}
+
+.container_16 .prefix_11 {
+	padding-left:660px;
+}
+
+.container_16 .prefix_12 {
+	padding-left:720px;
+}
+
+.container_16 .prefix_13 {
+	padding-left:780px;
+}
+
+.container_16 .prefix_14 {
+	padding-left:840px;
+}
+
+.container_16 .prefix_15 {
+	padding-left:900px;
+}
+
+
+
+//  Suffix Extra Space >> 16 Columns
+// --------------------------------------------------------------------------------------------------*/
+
+
+.container_16 .suffix_1 {
+	padding-right:60px;
+}
+
+.container_16 .suffix_2 {
+	padding-right:120px;
+}
+
+.container_16 .suffix_3 {
+	padding-right:180px;
+}
+
+.container_16 .suffix_4 {
+	padding-right:240px;
+}
+
+.container_16 .suffix_5 {
+	padding-right:300px;
+}
+
+.container_16 .suffix_6 {
+	padding-right:360px;
+}
+
+.container_16 .suffix_7 {
+	padding-right:420px;
+}
+
+.container_16 .suffix_8 {
+	padding-right:480px;
+}
+
+.container_16 .suffix_9 {
+	padding-right:540px;
+}
+
+.container_16 .suffix_10 {
+	padding-right:600px;
+}
+
+.container_16 .suffix_11 {
+	padding-right:660px;
+}
+
+.container_16 .suffix_12 {
+	padding-right:720px;
+}
+
+.container_16 .suffix_13 {
+	padding-right:780px;
+}
+
+.container_16 .suffix_14 {
+	padding-right:840px;
+}
+
+.container_16 .suffix_15 {
+	padding-right:900px;
+}
+
+
+
+//  Push Space >> 16 Columns
+// --------------------------------------------------------------------------------------------------*/
+
+
+.container_16 .push_1 {
+	left:60px;
+}
+
+.container_16 .push_2 {
+	left:120px;
+}
+
+.container_16 .push_3 {
+	left:180px;
+}
+
+.container_16 .push_4 {
+	left:240px;
+}
+
+.container_16 .push_5 {
+	left:300px;
+}
+
+.container_16 .push_6 {
+	left:360px;
+}
+
+.container_16 .push_7 {
+	left:420px;
+}
+
+.container_16 .push_8 {
+	left:480px;
+}
+
+.container_16 .push_9 {
+	left:540px;
+}
+
+.container_16 .push_10 {
+	left:600px;
+}
+
+.container_16 .push_11 {
+	left:660px;
+}
+
+.container_16 .push_12 {
+	left:720px;
+}
+
+.container_16 .push_13 {
+	left:780px;
+}
+
+.container_16 .push_14 {
+	left:840px;
+}
+
+.container_16 .push_15 {
+	left:900px;
+}
+
+
+
+// Pull Space >> 16 Columns
+//--------------------------------------------------------------------------------------------------*/
+
+
+.container_16 .pull_1 {
+	left:-60px;
+}
+
+.container_16 .pull_2 {
+	left:-120px;
+}
+
+.container_16 .pull_3 {
+	left:-180px;
+}
+
+.container_16 .pull_4 {
+	left:-240px;
+}
+
+.container_16 .pull_5 {
+	left:-300px;
+}
+
+.container_16 .pull_6 {
+	left:-360px;
+}
+
+.container_16 .pull_7 {
+	left:-420px;
+}
+
+.container_16 .pull_8 {
+	left:-480px;
+}
+
+.container_16 .pull_9 {
+	left:-540px;
+}
+
+.container_16 .pull_10 {
+	left:-600px;
+}
+
+.container_16 .pull_11 {
+	left:-660px;
+}
+
+.container_16 .pull_12 {
+	left:-720px;
+}
+
+.container_16 .pull_13 {
+	left:-780px;
+}
+
+.container_16 .pull_14 {
+	left:-840px;
+}
+
+.container_16 .pull_15 {
+	left:-900px;
+}
+
+
+
+
+// `Clear Floated Elements
+//--------------------------------------------------------------------------------------------------*/
+
+/* http://sonspring.com/journal/clearing-floats */
+
+.clear {
+  clear: both;
+  display: block;
+  overflow: hidden;
+  visibility: hidden;
+  width: 0;
+  height: 0;
+}
+
+// http://www.yuiblog.com/blog/2010/09/27/clearfix-reloaded-overflowhidden-demystified */
+
+.clearfix:before,
+.clearfix:after {
+  content: '\0020';
+  display: block;
+  overflow: hidden;
+  visibility: hidden;
+  width: 0;
+  height: 0;
+}
+
+.clearfix:after {
+  clear: both;
+}
+
+// 
+// The following zoom:1 rule is specifically for IE6 + IE7.
+// Move to separate stylesheet if invalid CSS is a problem.
+// 
+
+.clearfix {
+  zoom: 1;
+}
\ No newline at end of file
diff --git a/app/soc/content/less/soc/elements/header.less b/app/soc/content/less/soc/elements/header.less
new file mode 100644
index 0000000..24507b3
--- /dev/null
+++ b/app/soc/content/less/soc/elements/header.less
@@ -0,0 +1,14 @@
+// ==========================================================================
+// header
+// ==========================================================================
+
+.main-header {
+	max-width: 700px;
+	padding: 3.5em 5% 3em;
+	margin: 0 auto;
+	text-align: center;
+
+	p {
+		margin: 0;
+	}
+}
diff --git a/app/soc/content/less/soc/elements/headers-styles.less b/app/soc/content/less/soc/elements/headers-styles.less
new file mode 100644
index 0000000..2506cbd
--- /dev/null
+++ b/app/soc/content/less/soc/elements/headers-styles.less
@@ -0,0 +1,45 @@
+// ==========================================================================
+// h1, h2, h3, etc.
+// ==========================================================================
+
+h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5 {
+	text-rendering: optimizelegibility;
+}
+
+h1, .h1 {
+	font-size: 2.5em;
+	line-height: 1em;
+	font-weight: 300;
+	margin: 0 0 .2em 0;
+	color: #333333;
+}
+
+h2, .h2 {
+	font-size: 1.5em;
+	line-height: 1.1em;
+	font-weight: 300;
+	margin: 0 0 .2em 0;
+	color: #333333;
+
+}
+
+h3, .h3 {
+	font-size: 1.5em;
+	line-height: 1.2em;
+	font-weight: 300;
+	margin: 0 0 .2em 0;
+	color: #333333;
+
+}
+
+h4, .h4 {
+	font-size: 1em;
+	font-weight: 600;
+}
+
+h5, .h5 {
+	font-size: 0.846em;
+	line-height: 2.09em;
+	text-transform: uppercase;
+	font-weight: 600;
+}
\ No newline at end of file
diff --git a/app/soc/content/less/soc/elements/helper.less b/app/soc/content/less/soc/elements/helper.less
new file mode 100644
index 0000000..a80ff87
--- /dev/null
+++ b/app/soc/content/less/soc/elements/helper.less
@@ -0,0 +1,93 @@
+
+// uncomment this if you're feeling daring
+// * { 
+//   @include box-sizing(border-box);
+// }
+
+img {
+  // for fluid images
+  max-width: 100%;
+  // Remove the gap between images and the bottom of their containers: h5bp.com/i/440
+  vertical-align: middle;
+}
+
+// fluid video
+.fluidvideowrapper {
+  position: relative;
+  padding-bottom: 56.25%;
+  padding-top: 25px;
+  height: 0;
+
+  object, embed, iframe {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+  }
+}
+
+// Dont break or wrap text
+.nobr, .together {
+  white-space: nowrap;
+}
+
+// Image replacement
+.ir {
+  background-color: transparent;
+  border: 0;
+  overflow: hidden;
+  /* IE 6/7 fallback */
+  *text-indent: -9999px;
+}
+
+.ir:before {
+  content: "";
+  display: block;
+  width: 0;
+  height: 100%;
+}
+
+// Hide from both screenreaders and browsers: h5bp.com/u
+.hidden {
+  display: none !important;
+  visibility: hidden;
+}
+
+// Hide only visually, but have it available for screenreaders: h5bp.com/v
+.visuallyhidden {
+  border: 0;
+  clip: rect(0 0 0 0);
+  height: 1px;
+  margin: -1px;
+  overflow: hidden;
+  padding: 0;
+  position: absolute;
+  width: 1px;
+}
+
+// Extends the .visuallyhidden class to allow the element to be focusable
+// when navigated to via the keyboard: h5bp.com/p
+.visuallyhidden.focusable:active,
+.visuallyhidden.focusable:focus {
+  clip: auto;
+  height: auto;
+  margin: 0;
+  overflow: visible;
+  position: static;
+  width: auto;
+}
+
+// Hide visually and from screenreaders, but maintain layout
+.invisible {
+  visibility: hidden;
+}
+
+// text alignment
+.text-left   { text-align: left; }
+.text-center { text-align: center; }
+.text-right  { text-align: right; }
+
+.clearfix {
+  .clearfix;
+}
\ No newline at end of file
diff --git a/app/soc/content/less/soc/elements/latest.less b/app/soc/content/less/soc/elements/latest.less
new file mode 100644
index 0000000..95c67c5
--- /dev/null
+++ b/app/soc/content/less/soc/elements/latest.less
@@ -0,0 +1,31 @@
+.latest {
+	max-width: 700px;
+	padding: 1em 5% 3em;
+	margin: 0 auto;
+	text-align: center;
+
+	h3 {
+		margin: 0 0 1em 0;
+	}
+}
+
+.post {
+
+	.date {
+		font-size: .55em;
+		line-height: 1.4em;
+		text-transform: uppercase;
+		letter-spacing: 2.5px;
+		font-weight: 600;
+		color: #999999;
+		margin: 0 0 1em;
+		padding: 0;
+	}
+}
+
+.post-description {
+
+	p {
+		margin-top: 0;
+	}
+}
\ No newline at end of file
diff --git a/app/soc/content/less/soc/elements/link-styles.less b/app/soc/content/less/soc/elements/link-styles.less
new file mode 100644
index 0000000..43556e0
--- /dev/null
+++ b/app/soc/content/less/soc/elements/link-styles.less
@@ -0,0 +1,9 @@
+a, a:link, a:visited, a:active {
+  text-decoration: none;
+  color: @link-color;
+}
+
+a:hover {
+  text-decoration: none;
+  color: @link-color-hover;
+}
\ No newline at end of file
diff --git a/app/soc/content/less/soc/elements/projects.less b/app/soc/content/less/soc/elements/projects.less
new file mode 100644
index 0000000..5b3ba3b
--- /dev/null
+++ b/app/soc/content/less/soc/elements/projects.less
@@ -0,0 +1,350 @@
+// ==========================================================================
+// projects
+// ==========================================================================
+@import "common.less";
+
+.projects {
+	max-width: 460px;
+	margin: 0 auto 2em;
+	position: relative;
+
+	@media @break-medium {
+		width: 960px;
+		max-width: 100%;
+		.clearfix;
+	}
+}
+
+.project {
+	background: white;
+	.box-shadow(rgba(0,0,0,.3) 0 0 6px);
+	position: relative;
+	margin: 0 0 3em 0;
+	text-align: center;
+
+	.no-boxshadow & {
+		border: 1px solid #ccc;
+	}
+
+	&:hover {
+		.box-shadow(rgba(0,0,0,.6) 0 0 6px);
+	}
+
+	.no-boxshadow &:hover {
+		border-color: #aaa;
+	}
+
+	h2 {
+		color: @link-color;
+	}
+
+	a:hover h2 {
+		color: @link-color-hover;
+	}
+
+	@media @break-medium {
+		float: left;
+		width: 460px;
+		margin: 10px;
+	}
+
+	a {
+		display: block;
+		width: 100%;
+		height: 100%;
+	}
+}
+
+.project-button {
+	font-size: 1.125em;
+	line-height: 1.25em;
+	margin: 0 auto .5em;
+	width: 65px;
+
+	&:before {
+		content:"";
+   		float:left;
+		background: url('@{images_soc_location}/house-icon.svg');
+		width: 18px;
+		height: 18px;
+		padding: 0;
+		margin-right: 8px;
+	}
+
+	.no-svg &:before {
+		background-image: url('@{images_soc_location}/house-icon.png');		
+	}
+
+	.active & {
+		color: @google-orange;
+
+		&:before {
+			background-position: 100%;
+		}
+	}
+
+	a:hover & {
+		&:before {
+			background: url('@{images_soc_location}/house-icon.svg');
+			background-position: 100%;
+		}
+
+	}
+
+	.no-svg a:hover &:before {
+		background-image: url('@{images_soc_location}/house-icon.png');		
+	}
+
+	.active a:hover & {
+		color: @google-blue;
+		&:before {
+			background: url('@{images_soc_location}/house-icon.svg');
+		}		
+	}
+
+	.no-svg .active a:hover &:before {
+		background-image: url('@{images_soc_location}/house-icon.png');		
+	}
+
+}
+
+.project-info {
+	padding: 20px;
+}
+
+.project-description {
+	color: @web-black;
+	margin: 0 20px 2em;
+	font-size: .8em;
+}
+
+.project-image {
+	background: url('@{images_soc_location}/non-bg.png');
+	.background-size(cover);
+	padding: 20px;
+	height: 275px;
+	.box-sizing(border-box);
+
+	img {
+		max-height: 100%;
+	}
+
+	.active & {
+		background: url('@{images_soc_location}/active-bg.jpg');
+		.background-size(cover);
+	}
+
+	a:hover & {
+		background: url('@{images_soc_location}/non-bg-hover.png');
+		.background-size(cover);
+
+		.active & {
+			background: url('@{images_soc_location}/active-bg-hover.png');
+			.background-size(cover);
+		}
+	}
+}
+
+
+.active-banner {
+	display: none;
+	position: absolute;
+	top: 0;
+	right: 20px;
+	width: 100px;
+	background: #F19906;
+	.background-image(linear-gradient(top, #FFBD1F, #F19906));
+	color: white;
+	text-align: center;
+	margin: -10px 0 0 0;
+
+	p {
+		font-size: .55em;
+		line-height: 1.4em;
+		text-transform: uppercase;
+		letter-spacing: 2.5px;
+		font-weight: 600;
+		margin: 10px 0 0 0;
+	}
+
+	.triangle-top {
+		background: url('@{images_soc_location}/arrow-top.svg');
+		position: absolute;
+		left: 0;
+		top: 0;
+		margin: 0 0 0 -12px;
+		width: 12px;
+		height: 10px;
+	}
+
+	.no-svg & .triangle-top {
+		background-image: url('@{images_soc_location}/arrow-top.png');
+	}
+
+	.triangle-bottom {
+		background: url('@{images_soc_location}/arrow-bottom.svg');
+		position: absolute;
+		left: 0;
+		bottom: 0;
+		margin: 0 0 -19px 0;
+		width: 100px;
+		height: 19px;	
+	}
+
+	.no-svg & .triangle-bottom {
+		background-image: url('@{images_soc_location}/arrow-bottom.png');
+	}
+
+	.active & {
+		display: block;
+	}
+}
+
+.unactive-description {
+	display: none;
+	margin: 5px 0 0 0;
+}
+
+// special only one of them is active styles
+.one-active {
+
+	@media @break-medium {
+
+		// this makes all projects the size of the small one
+		/////////////////////////////////////////////////////
+		.project {
+			width: 300px; 
+			float: right;
+			margin-top: 70px;
+			min-height: 360px;
+		}
+
+		.project-image {
+			height: 190px;
+		}
+
+		.project-title {
+			padding: 0 10px;
+		}
+		.project-info {
+			padding: 20px 35px 0;
+		}
+		.project-description {
+			margin: 0 0 1.5em 0;
+
+			p {
+				display: none;
+				&.unactive-description {
+					display: block;
+				}
+			}
+		}
+
+		.project-button {
+			font-size: .9em;
+			width: 50px;
+
+			&:before {
+				background: url('@{images_soc_location}/house-icon-small.svg');
+				width: 14px;
+				height: 14px;
+			}
+		}
+
+		.no-svg & .project-button:before {
+			background-image: url('@{images_soc_location}/house-icon-small.png');
+		}
+
+		a:hover .project-button:before {
+			background: url('@{images_soc_location}/img/house-icon-small.svg');
+			width: 14px;
+			height: 14px;
+			background-position: 100%;
+		}
+
+		.no-svg & a:hover .project-button:before {
+			background-image: url('@{images_soc_location}/house-icon-small.png');
+		}
+
+		// this makes the active project look big
+		/////////////////////////////////////////////////////
+		.active {
+
+			&.project {
+				width: 660px;
+				z-index: 100;
+				height: 400px;
+				position: absolute;
+				left: 0;
+				top: 0;
+				margin-top: 10px;
+
+				a {
+					.clearfix;
+				}
+			}
+
+			.project-image {
+				float: left;
+				width: 400px;
+				height: 100%;
+				padding: 50px 40px;
+			}
+
+			.project-info {
+				text-align: left;
+				padding: 50px 20px 20px 420px;
+			}
+
+			.project-title {
+				padding: 0;
+				font-size: 1.95em;
+			}
+
+			.project-description {
+				margin: 0 0 1.5em 0;
+	
+				p {
+					display: block;
+					&.unactive-description {
+						display: none;
+					}
+				}
+			}
+
+			.active-banner {
+				right: 140px;
+			}
+
+			.project-button {
+				position: absolute;
+				bottom: 20px;
+				font-size: 1em;
+				width: 60px;
+
+				&:before {
+					background: url('@{images_soc_location}/house-icon.svg');
+					width: 18px;
+					height: 18px;
+					background-position: 100%;
+				}
+			}
+
+			.no-svg & .project-button:before {
+				background-image: url('@{images_soc_location}/house-icon.png');
+			}
+
+			a:hover .project-button:before {
+				background: url('@{images_soc_location}/house-icon.svg');
+				width: 18px;
+				height: 18px;
+				background-position: 0;
+			}
+
+			.no-svg & a:hover .project-button:before {
+				background-image: url('@{images_soc_location}/house-icon.png');
+			}
+
+		}
+	}
+}
diff --git a/app/soc/content/less/soc/elements/social-media.less b/app/soc/content/less/soc/elements/social-media.less
new file mode 100644
index 0000000..70428d3
--- /dev/null
+++ b/app/soc/content/less/soc/elements/social-media.less
@@ -0,0 +1,61 @@
+.social-media {
+	max-width: 700px;
+	padding: 1em 5% 1.4em;
+	margin: 0 auto;
+	text-align: center;	
+
+	li {
+		&:extend(h3);
+		font-weight: 400;
+		display: inline-block;
+		margin: 4px .5em 0;
+	}
+}
+
+
+.blogger-icon, .google-icon, .email-icon {
+	a {
+		&:extend(.ir); //these styles are in _helper.scss
+		display: block;
+		width: 28px;
+		height: 28px;
+		margin-bottom: -5px;
+	}
+}
+
+.google-icon {
+	a {
+		background: url('@{images_soc_location}/google-icon-sprite.svg');
+		&:hover {
+			background-position: 100%;
+		}
+	}
+
+	.no-svg & a {
+		background-image: url('@{images_soc_location}/google-icon-sprite.png');
+	}
+}
+
+.blogger-icon {
+	a {
+		background: url('@{images_soc_location}/blogger-icon-sprite.svg');
+		&:hover {
+			background-position: 100%;
+		}
+	}
+	.no-svg & a {
+		background-image: url('@{images_soc_location}/blogger-icon-sprite.png');
+	}
+}
+
+.email-icon {
+	a {
+		background: url('@{images_soc_location}/email-icon-sprite.svg');
+		&:hover {
+			background-position: 100%;
+		}
+	}
+	.no-svg & a {
+		background-image: url('@{images_soc_location}/email-icon-sprite.png');
+	}
+}
\ No newline at end of file
diff --git a/app/soc/content/less/soc/ie8-and-down.less b/app/soc/content/less/soc/ie8-and-down.less
new file mode 100644
index 0000000..4f27232
--- /dev/null
+++ b/app/soc/content/less/soc/ie8-and-down.less
@@ -0,0 +1,177 @@
+// ie 8 and down styles!
+
+/* import mixins again */
+@import "mixins";
+
+//all those breakpoint styles
+
+
+// ==========================================================================
+// projects
+// ==========================================================================
+
+
+.projects {
+	width: 960px;
+	max-width: 100%;
+	.clearfix;
+}
+
+.project {
+	float: left;
+	width: 455px;
+	margin: 10px;
+}
+
+.project-image {
+	filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='@{images_soc_location}/non-bg.png', sizingMethod='scale');
+	-ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='@{images_soc_location}/non-bg.png', sizingMethod='scale')";
+
+	.active & {
+		filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='@{images_soc_location}/active-bg.jpg', sizingMethod='scale');
+		-ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='@{images_soc_location}/active-bg.jpg', sizingMethod='scale')";
+	}
+
+	a:hover & {
+		filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='@{images_soc_location}/non-bg-hover.png', sizingMethod='scale');
+		-ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='@{images_soc_location}/non-bg-hover.png', sizingMethod='scale')";
+
+		.active & {
+			filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='@{images_soc_location}/active-bg-hover.png', sizingMethod='scale');
+			-ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../img/active-bg-hover.png', sizingMethod='scale')";
+		}
+	}
+}
+.one-active {
+
+		// this makes all projects the size of the small one
+		/////////////////////////////////////////////////////
+		.project {
+			width: 300px; 
+			float: right;
+			margin-top: 70px;
+			min-height: 360px;
+		}
+
+		.project-image {
+			height: 190px;
+		}
+
+		.project-title {
+			padding: 0 10px;
+		}
+		.project-info {
+			padding: 20px 35px 0;
+		}
+		.project-description {
+			margin: 0 0 1.5em 0;
+
+			p {
+				display: none;
+				&.unactive-description {
+					display: block;
+				}
+			}
+		}
+
+		.project-button {
+			font-size: .9em;
+			width: 50px;
+
+			&:before {
+				background: url('@{images_soc_location}/house-icon-small.png');
+				width: 14px;
+				height: 14px;
+			}
+		}
+
+		a:hover .project-button:before {
+			background: url('@{images_soc_location}/house-icon-small.png');
+			width: 14px;
+			height: 14px;
+			background-position: 100%;
+		}
+
+
+		// this makes the active project look big
+		/////////////////////////////////////////////////////
+		.active {
+
+			&.project {
+				width: 660px;
+				z-index: 100;
+				height: 400px;
+				position: absolute;
+				left: 0;
+				top: 0;
+				margin-top: 10px;
+
+				a {
+					.clearfix;
+				}
+			}
+
+			.project-image {
+				float: left;
+				width: 400px;
+				height: 100%;
+				padding: 50px 40px;
+			}
+
+			.project-info {
+				text-align: left;
+				padding: 50px 20px 20px 420px;
+			}
+
+			.project-title {
+				padding: 0;
+				font-size: 1.95em;
+			}
+
+			.project-description {
+				margin: 0 0 1.5em 0;
+	
+				p {
+					display: block;
+					&.unactive-description {
+						display: none;
+					}
+				}
+			}
+
+			.active-banner {
+				right: 140px;
+			}
+
+			.project-button {
+				position: absolute;
+				bottom: 20px;
+				font-size: 1em;
+				width: 60px;
+
+				&:before {
+					background: url('@{images_soc_location}/house-icon.png');
+					width: 18px;
+					height: 18px;
+					background-position: 100%;
+				}
+			}
+
+			a:hover .project-button:before {
+				background: url('@{images_soc_location}/house-icon.png');
+				width: 18px;
+				height: 18px;
+				background-position: 0;
+			}
+
+		}
+}
+
+
+.main-footer {
+
+	.powered, .empowered {
+		display: inline;
+		margin: 0;
+	}
+}
diff --git a/app/soc/content/less/soc/lesshat.less b/app/soc/content/less/soc/lesshat.less
new file mode 100755
index 0000000..a822a82
--- /dev/null
+++ b/app/soc/content/less/soc/lesshat.less
@@ -0,0 +1,2198 @@
+//  LESS Hat 1.1.2
+//  LESSHat.com
+//  From creators of CSSHat.com
+//  2012
+//  Petr Brzek & Jan Kuca
+
+
+//  @GlobalConfig
+
+//    .animation
+    //    .animation-delay
+    //    .animation-direction
+    //    .animation-duration
+    //    .animation-fill-mode
+    //    .animation-timing-function
+    //    .animation-iteration-count
+    //    .animation-name
+    //    .animation-play-state
+    //    .keyframes - in future
+//    .appearance
+//    .backface-visibility
+//    .background-clip
+//    .background-image
+//    .background-origin
+//    .background-size
+//    .border-radius
+    //    .border-top-left-radius
+    //    .border-top-right-radius
+    //    .border-bottom-left-radius
+    //    .border-bottom-right-radius
+//    .border-image
+//    .box-shadow
+//    .box-sizing
+//    .columns
+    //    .column-count
+    //    .column-gap
+    //    .column-rule
+    //    .column-width
+//    .font-face
+//    .gradient
+//    .opacity
+//    .perspective
+    //    .perspective-origin
+//    .size
+//    .transform
+    //    .transform-origin
+    //    .transform-style
+    //    .translate
+    //    .translate3d
+    //    .translateX
+    //    .translateY
+    //    .translateZ
+    //    .scale
+    //    .scale3d
+    //    .scaleX
+    //    .scaleY
+    //    .scaleZ
+    //    .rotate
+    //    .rotate3d
+    //    .rotateX
+    //    .rotateY
+    //    .rotateZ
+    //    .skew
+    //    .skewX
+    //    .skewY
+//    .transition
+    //    .transition-property
+    //    .transition-duration
+    //    .transition-timing-function
+    //    .transition-delay
+//    .user-select
+//    DEPRECATED mixins
+
+
+//  @GlobalConfig
+
+  // Config supported browsers for your project
+
+    @w3c: true; // Unprefixed W3C syntax
+    @webkit: true; // Chrome 7+, Safari 5+, iOS5, Android
+    @moz: true; //  Firefox 4+
+    @opera: true; // Opera 10.5+
+    @ms: true;  // IE 10+
+
+  // Signals
+
+    @webkitSignal: 1;
+    @mozSignal: 2;
+    @operaSignal: 3;
+    @msSignal: 4;
+    @w3cSignal: 5;
+
+// .animation
+
+  .animation(...){
+
+    //  Local config for disabling properties
+
+    @w3cLocal: true; // Unprefixed W3C syntax
+    @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+    @mozLocal: true; //  Firefox 4+
+    @operaLocal: true; // Opera 10.5+
+    @msLocal: true;  // IE 10+
+
+    @processing: ~`(function(){ var arg = "@{arguments}".replace("[","").replace("]","") || "none"; if( !/^\w*([ X])/.test(arg) ) { arg = arg.replace(/,/g,"") } return arg; })()`;
+
+    .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+      .inception (@signal, @arguments) when (@signal = 1) { -webkit-animation: @processing;}
+      .inception (@signal, @arguments) when (@signal = 2) { -moz-animation: @processing;}
+      .inception (@signal, @arguments) when (@signal = 3) { -o-animation: @processing;}
+      .inception (@signal, @arguments) when (@signal = 4) { -ms-animation: @processing;}
+      .inception (@signal, @arguments) when (@signal = 5) { animation: @processing;}
+      .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+      .inception(@signal, @arguments);
+    }
+    .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+   //  element{ .animation(nameAnimation 2s linear alternate anim 3s linear alternate ); }
+
+
+  //  .animation-delay
+
+  .animation-delay(...){
+
+    //  Local config for disabling properties
+
+    @w3cLocal: true; // Unprefixed W3C syntax
+    @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+    @mozLocal: true; //  Firefox 4+
+    @operaLocal: true; // Opera 10.5+
+    @msLocal: true;  // IE 10+
+
+    @processing: ~`(function(){ var arg = "@{arguments}" || "0"; arg = arg.replace("[","").replace("]",""); return arg; }())`;
+
+    .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+      .inception (@signal, @arguments) when (@signal = 1) { -webkit-animation-delay: @processing;}
+      .inception (@signal, @arguments) when (@signal = 2) { -moz-animation-delay: @processing;}
+      .inception (@signal, @arguments) when (@signal = 3) { -o-animation-delay: @processing;}
+      .inception (@signal, @arguments) when (@signal = 4) { -ms-animation-delay: @processing;}
+      .inception (@signal, @arguments) when (@signal = 5) { animation-delay: @processing;}
+      .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+      .inception(@signal, @arguments);
+    }
+    .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .animation-delay(1s); }
+    //  element{ .animation-delay(750ms, 2s, 3s); } // For multiple animation-direction
+
+
+  //  .animation-direction
+
+    .animation-direction(...){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      @processing: ~`(function(){ var arg = "@{arguments}" || "normal"; arg = arg.replace("[","").replace("]",""); return arg; }())`;
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-animation-direction: @processing;}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-animation-direction: @processing;}
+        .inception (@signal, @arguments) when (@signal = 3) { -o-animation-direction: @processing;}
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-animation-direction: @processing;}
+        .inception (@signal, @arguments) when (@signal = 5) { animation-direction: @processing;}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .animation-direction(); }
+    //  element{ .animation-direction(normal, alternate); }
+
+
+  //  .animation-duration
+
+    .animation-duration(...){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      @processing: ~`(function(){ var arg = "@{arguments}" || "0"; arg = arg.replace("[","").replace("]",""); return arg; }())`;
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-animation-duration: @processing;}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-animation-duration: @processing;}
+        .inception (@signal, @arguments) when (@signal = 3) { -o-animation-duration: @processing;}
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-animation-duration: @processing;}
+        .inception (@signal, @arguments) when (@signal = 5) { animation-duration: @processing;}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .animation-duration(2s); }
+
+
+  //  .animation-fill-mode
+
+    .animation-fill-mode(...){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      @processing: ~`(function(){ var arg = "@{arguments}" || "none"; arg = arg.replace("[","").replace("]",""); return arg; }())`;
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-animation-fill-mode: @processing;}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-animation-fill-mode: @processing;}
+        .inception (@signal, @arguments) when (@signal = 3) { -o-animation-fill-mode: @processing;}
+        .inception (@signal, @arguments) when (@signal = 5) { animation-fill-mode: @processing;}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .animation-fill-mode(forwards); }
+
+
+  //  .animation-timing-function
+
+    .animation-timing-function(...){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      @processing: ~`(function(){ var arg = "@{arguments}" || "ease"; arg = arg.replace("[","").replace("]",""); return arg; }())`;
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-animation-timing-function: @processing;}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-animation-timing-function: @processing;}
+        .inception (@signal, @arguments) when (@signal = 3) { -o-animation-timing-function: @processing;}
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-animation-timing-function: @processing;}
+        .inception (@signal, @arguments) when (@signal = 5) { animation-timing-function: @processing;}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+    }
+
+    //  element{ .animation-timing-function(ease-in-out); }
+
+
+  //  .animation-iteration-count
+
+    .animation-iteration-count(...){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      @processing: ~`(function(){ var arg = "@{arguments}" || "0"; arg = arg.replace("[","").replace("]",""); return arg; }())`;
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-animation-iteration-count: @processing;}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-animation-iteration-count: @processing;}
+        .inception (@signal, @arguments) when (@signal = 3) { -o-animation-iteration-count: @processing;}
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-animation-iteration-count: @processing;}
+        .inception (@signal, @arguments) when (@signal = 5) { animation-iteration-count: @processing;}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+    }
+
+      //  element{ .animation-iteration-count(3); }
+
+
+  //  .animation-name
+
+    .animation-name(...){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      @processing: ~`(function(){ var arg = "@{arguments}" || "none"; arg = arg.replace("[","").replace("]",""); return arg; }())`;
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-animation-name: @processing;}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-animation-name: @processing;}
+        .inception (@signal, @arguments) when (@signal = 3) { -o-animation-name: @processing;}
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-animation-name: @processing;}
+        .inception (@signal, @arguments) when (@signal = 5) { animation-name: @processing;}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+    }
+
+      //  element{ .animation-name(myReallyCoolAnimationName); }
+
+
+  //  .animation-play-state
+
+    .animation-play-state(...){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      @processing: ~`(function(){ var arg = "@{arguments}" || "running"; arg = arg.replace("[","").replace("]",""); return arg; }())`;
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-animation-play-state: @processing;}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-animation-play-state: @processing;}
+        .inception (@signal, @arguments) when (@signal = 3) { -o-animation-play-state: @processing;}
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-animation-play-state: @processing;}
+        .inception (@signal, @arguments) when (@signal = 5) { animation-play-state: @processing;}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+    }
+
+      //  element{ .animation-play-state(paused); }
+
+
+//  .appearance
+
+  .appearance(@argument:none){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @argument) when (@signal = 1) { -webkit-appearance: @argument;}
+        .inception (@signal, @argument) when (@signal = 2) { -moz-appearance: @argument;}
+        .inception (@signal, @argument) when (@signal = 5) { appearance: @argument;}
+        .inception (@signal, @argument) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @argument);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .appearance(button); }
+
+
+//  .backface-visibility
+
+  .backface-visibility(@argument:visible){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @argument) when (@signal = 1) { -webkit-backface-visibility: @argument;}
+        .inception (@signal, @argument) when (@signal = 2) { -moz-backface-visibility: @argument;}
+        .inception (@signal, @argument) when (@signal = 5) { backface-visibility: @argument;}
+        .inception (@signal, @argument) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @argument);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .backface-visibility(hidden); }
+
+
+//  .background-clip
+
+  .background-clip(@arguments:border-box){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-background-clip: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-background-clip: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 5) { background-clip: @arguments;}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .background-clip(padding-box); }
+
+
+//  .background-image
+
+  .background-image(...){
+
+      //  Local config for disabling properties
+
+      @svg: true; //  SVG gradient for IE9
+      @mozLocal: true; //  Firefox 4+
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5+, Android
+      @operaLocal: true; // Opera 10.5+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      
+      @backgroundSVG: ~`(function(){function K(a){var b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",c,d,e,f,g,h,i,j,k=0,l=0,m="",n=[];if(!a)return a;do c=a.charCodeAt(k++),d=a.charCodeAt(k++),e=a.charCodeAt(k++),j=c<<16|d<<8|e,f=j>>18&63,g=j>>12&63,h=j>>6&63,i=j&63,n[l++]=b.charAt(f)+b.charAt(g)+b.charAt(h)+b.charAt(i);while(k<a.length);m=n.join("");var o=a.length%3;return(o?m.slice(0,o-3):m)+"===".slice(o||3)}String.prototype.trim===undefined&&(String.prototype.trim=function(){return this.replace(/^\s+/,"").replace(/\s+$/,"")});var a="@{arguments}",b=null,c=!0,d=a.split(/,(?=\s*(?:linear|radial))/g),e=d.length,f=/top/,g=/right/,h=/bottom/,i=/left/,j=/to\s*top/,k=/to\s*right/,l=/to\s*bottom/,m=/to\s*left/,n=/45deg/,o=/-45deg/,p=/\d*deg/;for(var q=0;q<e;q++){if(/linear/.test(d[q])){d[q]=d[q].replace(/linear-gradient\s*\(/,'<?xml version="1.0" ?><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 1 1" preserveAspectRatio="none">');if(f.test(d[q])&&!j.test(d[q])||l.test(d[q])||/180deg/.test(d[q])){var r=null;l.test(d[q])?r=l:/180deg/.test(d[q])?r=/180deg/:r=f,d[q]=d[q].replace(r,'<linearGradient id="grad-ucgg-generated" gradientUnits="userSpaceOnUse" x1="0%" y1="0%" x2="0%" y2="100%">')}else if(g.test(d[q])&&!k.test(d[q])||m.test(d[q])||/270deg/.test(d[q])){var r=null;m.test(d[q])?r=m:/270deg/.test(d[q])?r=/270deg/:r=g,d[q]=d[q].replace(r,'<linearGradient id="grad-ucgg-generated" gradientUnits="userSpaceOnUse" x1="100%" y1="0%" x2="0%" y2="0%">')}else if(h.test(d[q])&&!l.test(d[q])||j.test(d[q])||/[^\d]0deg/.test(d[q])){var r=null;j.test(d[q])?r=j:/0deg/.test(d[q])?r=/0deg/:r=h,d[q]=d[q].replace(r,'<linearGradient id="grad-ucgg-generated" gradientUnits="userSpaceOnUse" x1="0%" y1="100%" x2="0%" y2="0%">')}else if(i.test(d[q])&&!m.test(d[q])||k.test(d[q])||/90deg/.test(d[q])){var r=null;k.test(d[q])?r=k:/90deg/.test(d[q])?r=/90deg/:r=i,d[q]=d[q].replace(r,'<linearGradient id="grad-ucgg-generated" gradientUnits="userSpaceOnUse" x1="0%" y1="0%" x2="100%" y2="0%">')}else n.test(d[q])&&!o.test(d[q])?d[q]=d[q].replace(n,'<linearGradient id="grad-ucgg-generated" gradientUnits="userSpaceOnUse" x1="0%" y1="100%" x2="100%" y2="0%">'):o.test(d[q])?d[q]=d[q].replace(o,'<linearGradient id="grad-ucgg-generated" gradientUnits="userSpaceOnUse" x1="0%" y1="0%" x2="100%" y2="100%">'):c=!1}try{"".trim(),b=!0}catch(s){b=!1}b&&(d[q]=d[q].trim());if(/linear/.test(d[q])||/radial/.test(d[q])){d[q]=d[q].slice(0,-1),d[q]="url(data:image/svg+xml;base64--"+d[q]+'</linearGradient><rect x="0" y="0" width="1" height="1" fill="url(***)" /></svg>)';var t=d.join("@@@"),u=t.match(/rgba?\(\d+,\s*\d+,\s*\d+,\s*(?:0|1|\.\d+|0\.\d+)\)\s*\d*%*/g)||0,v=t.match(/hsla?\(\d+,\s*\d+%,\s*\d+%,\s*(?:0|1|\.\d+|0\.\d+)\)\s*\d*%*/g)||0,w=[],x=[];for(var y=0;y<u.length;y++)w[y]=u[y].replace(/,/g,"--");for(var z=0;z<v.length;z++)x[z]=v[z].replace(/,/g,"--");for(var A=0;A<u.length;A++)t=t.replace(u[A],w[A]);for(var B=0;B<v.length;B++)t=t.replace(v[B],x[B]);var C=t.split(","),D=0;for(var E=0;E<C.length;E++){C[E]=C[E].replace(/(#\w{3,6})\s*(\d*.?\d*%)?/g,'<stop offset="$2" stop-color="$1" stop-opacity="1"/>').replace(/(rgba?\(\d+--\s*\d+--\s*\d+--\s*(0|1|\.\d+|0\.\d+)\))\s*(\d*.?\d*%)*/g,'<stop offset="$3" stop-color="$1" stop-opacity="$2"/>').replace(/rgba/g,"rgb").replace(/(hsla?\(\d+--\s*\d+%--\s*\d+%--\s*(0|1|\.\d+|0\.\d+)\))\s*(\d*.?\d*%)*/g,'<stop offset="$3" stop-color="$1" stop-opacity="$2"/>').replace(/hsla/g,"hsl").replace(/((?:aqua|black|blue|fuchsia|gray|grey|green|lime|maroon|navy|olive|purple|red|silver|teal|white|yellow))\s*(\d*%)*/g,'<stop offset="$2" stop-color="$1" stop-opacity="1"/>').replace(/\*\*\*/,"#grad-ucgg-generated");try{"".trim(),b=!0}catch(s){b=!1}b&&(C[E]=C[E].trim());if(/offset=""/g.test(C[E])){var F=C.length-2,G=Math.round(100/F)*D;var H='offset="'+G+'%"';C[E]=C[E].replace(/offset=""/,H),D++}}C=C.toString().replace(/,/g,"").replace(/--/g,",").replace(/(rgb?\(\d+,\s*\d+,\s*\d+),\s*(?:0|1|\.\d+|0\.\d+)\)/g,"$1)").replace(/(hsl?\(\d+,\s*\d+%,\s*\d+%),\s*(?:0|1|\.\d+|0\.\d+)\)/g,"$1)")}}/radial/.test(C)&&(/((ellipse).*(center)|(circle).*(center))/g.test(C)?C=C.replace(/<\/linearGradient>/g,"</radialGradient>").replace(/radial-gradient[^<]+/g,'<?xml version="1.0" ?><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 1 1" preserveAspectRatio="none"><radialGradient id="grad-ucgg-generated" gradientUnits="userSpaceOnUse" cx="50%" cy="50%" r="75%">').replace(/<rect x=\S+\d\S+ y=\S+\d\S+ width=\S+\d\S+ height=\S+\d\S+ fill=\S+\w\S+ \/>/g,'<rect x="-50" y="-50" width="101" height="101" fill="url(#grad-ucgg-generated)" />'):C=!1);var I=null;try{C=C.split("@@@");var J=0;for(J;J<C.length;J++)I=C[J].match(/<\?xml.*<\/svg>/),I=K(I.join("")),C[J]=C[J].replace(/(<\?xml.*<\/svg>)/,I)}catch(s){}return c?C:C=!1,C?C.toString():C})()`;
+      @backgroundMoz: ~`(function(){var a,b,c,d,e,f,g,h,i,j,k;a="@{arguments}",c=null,d=a.split(/,(?=\s*(?:linear|radial))/g),e=d.length,k=/to\s*top/,j=/to\s*right/,h=/to\s*bottom/,i=/to\s*left/,b=/\d*deg/,f=0;while(f<e){/linear/.test(d[f])?(d[f]=d[f].replace(/linear-gradient/,"-moz-linear-gradient"),k.test(d[f])?d[f]=d[f].replace(k,"bottom"):j.test(d[f])?d[f]=d[f].replace(j,"left"):h.test(d[f])?d[f]=d[f].replace(h,"top"):i.test(d[f])?d[f]=d[f].replace(i,"right"):b.test(d[f])&&(g=d[f].match(/\d*deg/),g=(parseInt(g)-90)*-1+"deg",d[f]=d[f].replace(b,g))):d[f]=d[f].replace(/radial-gradient/,"-moz-radial-gradient").replace(/,\s* \d*(px|%) \d*(px|%)/,", circle").replace(/\(+\s*(.*) at\s*([^,]+)/g,"($2, $1");try{"".trim(),c=!0}catch(l){c=!1}c&&(d[f]=d[f].trim()),f++}return d.toString().replace(/\[/g,"").replace(/\]/g,"")}())`;
+      @backgroundWebkit: ~`(function(){var a,b,c,d,e,f,g,h,i,j,k;a="@{arguments}",c=null,d=a.split(/,(?=\s*(?:linear|radial))/g),e=d.length,k=/to\s*top/,j=/to\s*right/,h=/to\s*bottom/,i=/to\s*left/,b=/\d*deg/,f=0;while(f<e){/linear/.test(d[f])?(d[f]=d[f].replace(/linear-gradient/,"-webkit-linear-gradient"),k.test(d[f])?d[f]=d[f].replace(k,"bottom"):j.test(d[f])?d[f]=d[f].replace(j,"left"):h.test(d[f])?d[f]=d[f].replace(h,"top"):i.test(d[f])?d[f]=d[f].replace(i,"right"):b.test(d[f])&&(g=d[f].match(/\d*deg/),g=(parseInt(g)-90)*-1+"deg",d[f]=d[f].replace(b,g))):d[f]=d[f].replace(/radial-gradient/,"-webkit-radial-gradient").replace(/\(+\s*(.*) at\s*([^,]+)/g,"($2, $1");try{"".trim(),c=!0}catch(l){c=!1}c&&(d[f]=d[f].trim()),f++}return d.toString().replace(/\[/g,"").replace(/\]/g,"");}())`;
+      @backgroundOpera: ~`(function(){var a,b,c,d,e,f,g,h,i,j,k;a="@{arguments}",c=null,d=a.split(/,(?=\s*(?:linear|radial))/g),e=d.length,k=/to\s*top/,j=/to\s*right/,h=/to\s*bottom/,i=/to\s*left/,b=/\d*deg/,f=0;while(f<e){/linear/.test(d[f])?(d[f]=d[f].replace(/linear-gradient/,"-o-linear-gradient"),k.test(d[f])?d[f]=d[f].replace(k,"bottom"):j.test(d[f])?d[f]=d[f].replace(j,"left"):h.test(d[f])?d[f]=d[f].replace(h,"top"):i.test(d[f])?d[f]=d[f].replace(i,"right"):b.test(d[f])&&(g=d[f].match(/\d*deg/),g=(parseInt(g)-90)*-1+"deg",d[f]=d[f].replace(b,g))):d[f]=d[f].replace(/radial-gradient/,"-o-radial-gradient").replace(/\(+\s*(.*) at\s*([^,]+)/g,"($2, $1");try{"".trim(),c=!0}catch(l){c=!1}c&&(d[f]=d[f].trim()),f++}return d.toString().replace(/\[/g,"").replace(/\]/g,"");})()`;
+      @backgroundW3C: ~`(function(){var a,b,c,d,e;a="@{arguments}",b=null,c=a.split(/,(?=\s*(?:linear|radial))/g),d=c.length,e=0;while(e<d){try{"".trim(),b=!0}catch(f){b=!1}b&&(c[e]=c[e].trim()),e++}return c.toString().replace(/\[/g,"").replace(/\]/g,"");}())`;
+
+      .result(@arguments, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { background-image: @arguments; }
+      .result(@arguments, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+      .result(@arguments, @boolean, @localBoolean, @property) when (@boolean = true) and (@localBoolean = true) and (isstring(@property)) { background-image: @arguments; }
+      .result(@arguments, @boolean, @localBoolean, @property) when not (@boolean = true), not (@localBoolean = true), not (isstring(@property)) { }
+
+      .result(@backgroundSVG, @svg, @svg, @backgroundSVG);
+      // --  this comment must be here because of LESS bug
+      .result(@backgroundMoz, @moz, @mozLocal);
+      // --
+      .result(@backgroundWebkit, @webkit, @webkitLocal);
+      // --
+      .result(@backgroundOpera, @opera, @operaLocal);
+      // --
+      .result(@backgroundW3C, @w3c, @w3cLocal);
+  }
+
+   //  element{ .background-image(linear-gradient(to bottom, #ffffff, #929292)); }
+
+
+//  .background-origin
+
+  .background-origin(@arguments:padding-box){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-background-origin: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-background-origin: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 5) { background-origin: @arguments;}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .background-origin(content-box); }
+
+
+//  .background-size
+
+  .background-size(...){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+
+      @processing: ~`(function(){ var arg = "@{arguments}".replace("[","").replace("]","") || "none"; if( !/^\w*%?([ X])/.test(arg) ) { arg = arg.replace(/,/g,"") } return arg; })()`;
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-background-size: @processing;}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-background-size: @processing;}
+        .inception (@signal, @arguments) when (@signal = 5) { background-size: @processing;}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+   //   element{ .background-size(50% auto); }
+
+
+// .border-radius
+
+  .border-radius(@arguments:0) {
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-border-radius: @arguments; -webkit-background-clip: padding-box;}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-border-radius: @arguments; -moz-background-clip: padding;}
+        .inception (@signal, @arguments) when (@signal = 5) { border-radius: @arguments; background-clip: padding-box; }
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .border-radius(10px); } //  all corner rounded
+    //  element{ .border-radius(~"10px / 20px"); } //  NEED TO BE ESCAPED OR LESS DEVIDE IT! Horizontal and vertical rounded differently
+    //  element{ .border-radius(0 10px 0 0); } // only top right corner rounded
+
+
+// .border-top-left-radius
+
+  .border-top-left-radius(@arguments:0) {
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-border-top-left-radius: @arguments; -webkit-background-clip: padding-box;}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-border-radius-topleft: @arguments; -moz-background-clip: padding;}
+        .inception (@signal, @arguments) when (@signal = 5) { border-top-left-radius: @arguments; background-clip: padding-box; }
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .border-top-left-radius(10px); }
+
+
+// .border-top-right-radius
+
+  .border-top-right-radius(@arguments:0) {
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-border-top-right-radius: @arguments; -webkit-background-clip: padding-box;}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-border-radius-topright: @arguments; -moz-background-clip: padding;}
+        .inception (@signal, @arguments) when (@signal = 5) { border-top-right-radius: @arguments; background-clip: padding-box; }
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .border-top-right-radius(10px); }
+
+
+// .border-bottom-left-radius
+
+  .border-bottom-left-radius(@arguments:0) {
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-border-bottom-left-radius: @arguments; -webkit-background-clip: padding-box;}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-border-radius-bottomleft: @arguments; -moz-background-clip: padding;}
+        .inception (@signal, @arguments) when (@signal = 5) { border-bottom-left-radius: @arguments; background-clip: padding-box; }
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .border-bottom-left-radius(10px); }
+
+
+// .border-bottom-right-radius
+
+  .border-bottom-right-radius(@arguments:0) {
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-border-bottom-right-radius: @arguments; -webkit-background-clip: padding-box;}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-border-radius-bottomright: @arguments; -moz-background-clip: padding;}
+        .inception (@signal, @arguments) when (@signal = 5) { border-bottom-right-radius: @arguments; background-clip: padding-box; }
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .border-bottom-right-radius(10px); }
+
+
+// .border-image
+
+  .border-image(@arguments:none){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-border-image: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-border-image: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 3) { -o-border-image: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 5) { border-image: @arguments; }
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .border-image(url(border.png) 30 30 round); }
+
+
+//  .box-shadow
+
+  .box-shadow(...){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+
+      @processing: ~`(function(){ var arg = "@{arguments}".replace("[","").replace("]","") || "none"; if( !/^#?\w*%?([ X])/.test(arg) ) { arg = arg.replace(/,(?=[^()]*\))/g,'--').replace(/,/g,"").replace(/--/g,','); } return arg; })()`;
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-box-shadow: @processing;}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-box-shadow: @processing;}
+        .inception (@signal, @arguments) when (@signal = 5) { box-shadow: @processing;}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+   //   element{ .box-shadow(0 1px 10px rgba(20,20,20,0.5), 0 1px 10px rgba(20,20,20,0.5)); }
+
+
+//  .box-sizing
+
+  .box-sizing(@arguments:content-box){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-box-sizing: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-box-sizing: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 5) { box-sizing: @arguments;}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .box-sizing(border-box); }
+
+
+//  .columns
+
+  .columns(@arguments:auto auto){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-columns: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-columns: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 5) { columns: @arguments;}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .columns(100px 3); }
+
+
+//  .column-count
+
+  .column-count(@arguments:auto){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-column-count: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-column-count: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 5) { column-count: @arguments;}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .column-count(3); }
+
+
+//  .column-gap
+
+  .column-gap(@arguments:normal){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-column-gap: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-column-gap: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 5) { column-gap: @arguments;}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .column-gap(40px); }
+
+
+//  .column-rule
+
+  .column-rule(@arguments:medium none black){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-column-rule: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-column-rule: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 5) { column-rule: @arguments;}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .column-rule(3px outset #ff00ff); }
+
+
+//  .column-width
+
+  .column-width(@arguments:auto){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-column-width: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-column-width: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 5) { column-width: @arguments;}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .column-width(100px); }
+
+
+//  .font-face
+
+  .font-face(@fontname, @fontfile) {
+
+    font-family: "@{fontname}";
+    src: url("@{fontfile}-webfont.eot");
+    src: url("@{fontfile}-webfont.eot?#iefix") format("embedded-opentype"),
+         url("@{fontfile}-webfont.woff") format("woff"),
+         url("@{fontfile}-webfont.ttf") format("truetype"),
+         url("@{fontfile}-webfont.svg#@{fontname}") format("svg");
+    font-weight: normal;
+    font-style: normal;
+  }
+
+    //  element{  .font-face(ZendaRegular, zenda-webfont); }
+
+
+//  .opacity
+
+  .opacity(@arguments:1){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-opacity: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-opacity: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 5) { opacity: @arguments;}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .opacity(.5); }
+
+
+//  .perspective
+
+  .perspective(@arguments:none){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-perspective: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-perspective: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 5) { perspective: @arguments;}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .perspective(350px); }
+
+
+//  .perspective-origin
+
+  .perspective-origin(@arguments:50% 50%){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-perspective-origin: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-perspective-origin: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 5) { perspective-origin: @arguments;}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .perspective-origin(top left); }
+
+
+//  .size
+
+  .size(@square){
+    width: @square;
+    height: @square;
+  }
+
+  .size(@width, @height){
+    width: @width;
+    height: @height;
+  }
+
+    //  element{ .size(10px); } // render width:10px; height:10px;
+    //  element{ .size(10px, 20px); } // render width:10px; height: 20px;
+
+
+//  .transform
+
+  .transform(@arguments:none, ...){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 3) { -o-transform: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 5) { transform: @arguments;}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .transform(scale(.5) translate(10px, 20px)); }
+
+
+//  .transform-origin
+
+  .transform-origin(@arguments:50% 50% 0){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform-origin: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-transform-origin: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 3) { -o-transform-origin: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-transform-origin: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 5) { transform-origin: @arguments;}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .transform-origin(20% 40%); }
+
+
+//  .transform-style
+
+  .transform-style(@arguments:flat){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @msLocal: true;  // IE 10+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform-style: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-transform-style: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-transform-style: @arguments;}
+        .inception (@signal, @arguments) when (@signal = 5) { transform-style: @arguments;}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .transform-style(preserve-3d); }
+
+
+//  .translate
+
+  .translate(@x:0, @y:0){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: translate(@x, @y);}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: translate(@x, @y);}
+        .inception (@signal, @arguments) when (@signal = 3) { -o-transform: translate(@x, @y);}
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: translate(@x, @y);}
+        .inception (@signal, @arguments) when (@signal = 5) { transform: translate(@x, @y);}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{  .translate(100px);  }
+    //  element{  .translate(100px, 50px);  }
+
+
+//  .translate3d
+
+  .translate3d(@x:0, @y:0, @z:0){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: translate3d(@x, @y, @z);}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: translate3d(@x, @y, @z);}
+        .inception (@signal, @arguments) when (@signal = 3) { -o-transform: translate3d(@x, @y, @z);}
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: translate3d(@x, @y, @z);}
+        .inception (@signal, @arguments) when (@signal = 5) { transform: translate3d(@x, @y, @z);}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .translate3d(10px, 20px, 30px); }
+
+
+//  .translateX
+
+  .translateX(@x:0){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: translateX(@x);}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: translateX(@x);}
+        .inception (@signal, @arguments) when (@signal = 3) { -o-transform: translateX(@x);}
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: translateX(@x);}
+        .inception (@signal, @arguments) when (@signal = 5) { transform: translateX(@x);}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .translateX(10px); }
+
+
+//  .translateY
+
+  .translateY(@y:0){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: translateY(@y);}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: translateY(@y);}
+        .inception (@signal, @arguments) when (@signal = 3) { -o-transform: translateY(@y);}
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: translateY(@y);}
+        .inception (@signal, @arguments) when (@signal = 5) { transform: translateY(@y);}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .translateY(15px); }
+
+
+//  .translateZ
+
+  .translateZ(@z:0){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: translateZ(@z);}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: translateZ(@z);}
+        .inception (@signal, @arguments) when (@signal = 3) { -o-transform: translateZ(@z);}
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: translateZ(@z);}
+        .inception (@signal, @arguments) when (@signal = 5) { transform: translateZ(@z);}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .translateZ(32px); }
+
+
+//  .scale
+
+    .scale(@x:1){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: scale(@x);}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: scale(@x);}
+        .inception (@signal, @arguments) when (@signal = 3) { -o-transform: scale(@x);}
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: scale(@x);}
+        .inception (@signal, @arguments) when (@signal = 5) { transform: scale(@x);}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+  .scale(@x, @y){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: scale(@x, @y);}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: scale(@x, @y);}
+        .inception (@signal, @arguments) when (@signal = 3) { -o-transform: scale(@x, @y);}
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: scale(@x, @y);}
+        .inception (@signal, @arguments) when (@signal = 5) { transform: scale(@x, @y);}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+      //  element{ .scale(2); }
+      //  element{ .scale(2, 1); }
+
+
+//  .scale3d
+
+    .scale3d(@x:1, @y:1, @z:1){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: scale3d(@x, @y, @z);}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: scale3d(@x, @y, @z);}
+        .inception (@signal, @arguments) when (@signal = 3) { -o-transform: scale3d(@x, @y, @z);}
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: scale3d(@x, @y, @z);}
+        .inception (@signal, @arguments) when (@signal = 5) { transform: scale3d(@x, @y, @z);}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+      //  element{ .scale3d(1, 2, 1); }
+
+
+//  .scaleX
+
+    .scaleX(@x:1){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: scaleX(@x);}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: scaleX(@x);}
+        .inception (@signal, @arguments) when (@signal = 3) { -o-transform: scaleX(@x);}
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: scaleX(@x);}
+        .inception (@signal, @arguments) when (@signal = 5) { transform: scaleX(@x);}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+      //  element{ .scaleX(1.5); }
+
+
+//  .scaleY
+
+    .scaleY(@y:1){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: scaleY(@y);}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: scaleY(@y);}
+        .inception (@signal, @arguments) when (@signal = 3) { -o-transform: scaleY(@y);}
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: scaleY(@y);}
+        .inception (@signal, @arguments) when (@signal = 5) { transform: scaleY(@y);}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+      //  element{ .scaleX(1.5); }
+
+
+//  .scaleZ
+
+    .scaleZ(@z:1){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: scaleZ(@z);}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: scaleZ(@z);}
+        .inception (@signal, @arguments) when (@signal = 3) { -o-transform: scaleZ(@z);}
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: scaleZ(@z);}
+        .inception (@signal, @arguments) when (@signal = 5) { transform: scaleZ(@z);}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+      //  element{ .scaleZ(2.7); }
+
+
+//  .rotate
+
+  .rotate(@angle:0){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: rotate(@angle);}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: rotate(@angle);}
+        .inception (@signal, @arguments) when (@signal = 3) { -o-transform: rotate(@angle);}
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: rotate(@angle);}
+        .inception (@signal, @arguments) when (@signal = 5) { transform: rotate(@angle);}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .rotate(45deg); }
+
+
+//  .rotate3d
+
+  .rotate3d(@x:0, @y:0, @z: 0, @angle:0){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: rotate3d(@x, @y, @z, @angle);}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: rotate3d(@x, @y, @z, @angle);}
+        .inception (@signal, @arguments) when (@signal = 3) { -o-transform: rotate3d(@x, @y, @z, @angle);}
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: rotate3d(@x, @y, @z, @angle);}
+        .inception (@signal, @arguments) when (@signal = 5) { transform: rotate3d(@x, @y, @z, @angle);}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .rotate3d(1, 2.0, 3.0, 10deg); }
+
+
+//  .rotateX
+
+  .rotateX(@angle:0){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: rotateX(@angle);}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: rotateX(@angle);}
+        .inception (@signal, @arguments) when (@signal = 3) { -o-transform: rotateX(@angle);}
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: rotateX(@angle);}
+        .inception (@signal, @arguments) when (@signal = 5) { transform: rotateX(@angle);}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .rotateX(63deg); }
+
+
+//  .rotateY
+
+  .rotateY(@angle:0){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: rotateY(@angle);}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: rotateY(@angle);}
+        .inception (@signal, @arguments) when (@signal = 3) { -o-transform: rotateY(@angle);}
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: rotateY(@angle);}
+        .inception (@signal, @arguments) when (@signal = 5) { transform: rotateY(@angle);}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .rotateY(24deg); }
+
+
+//  .rotateZ
+
+  .rotateZ(@angle:0){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: rotateZ(@angle);}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: rotateZ(@angle);}
+        .inception (@signal, @arguments) when (@signal = 3) { -o-transform: rotateZ(@angle);}
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: rotateZ(@angle);}
+        .inception (@signal, @arguments) when (@signal = 5) { transform: rotateZ(@angle);}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .rotateZ(280deg); }
+
+
+//  .skew
+
+  .skew(@angle:0){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: skew(@angle);}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: skew(@angle);}
+        .inception (@signal, @arguments) when (@signal = 3) { -o-transform: skew(@angle);}
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: skew(@angle);}
+        .inception (@signal, @arguments) when (@signal = 5) { transform: skew(@angle);}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .skew(20deg); }
+
+
+//  .skewX
+
+  .skewX(@angle:0){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: skewX(@angle);}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: skewX(@angle);}
+        .inception (@signal, @arguments) when (@signal = 3) { -o-transform: skewX(@angle);}
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: skewX(@angle);}
+        .inception (@signal, @arguments) when (@signal = 5) { transform: skewX(@angle);}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .skewX(24deg); }
+
+
+//  .skewY
+
+  .skewY(@angle:0){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-transform: skewY(@angle);}
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-transform: skewY(@angle);}
+        .inception (@signal, @arguments) when (@signal = 3) { -o-transform: skewY(@angle);}
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-transform: skewY(@angle);}
+        .inception (@signal, @arguments) when (@signal = 5) { transform: skewY(@angle);}
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .skewY(36deg); }
+
+
+//  .transition
+
+  .transition(...){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      @transitionWebkit: ~`(function(){var a,b,c,d,e,f,g;a="@{arguments}".split(","),c=["background-size","border-","box-shadow","column","transform"],d=c.length,e=a,f=!1,b=a.length;for(var h=0;h<d;h++)for(var i=0;i<b;i++){g=new RegExp(c[h],"g");try{"".trim(),f=!0}catch(j){f=!1}a[i]=f?a[i].trim():a[i],g.test(a[i])&&(e[i]=a[i].replace(g,"-webkit-"+c[h]))}return e.join(", ").replace("[","").replace("]","");}())`;
+      @transitionMoz: ~`(function(){var a,b,c,d,e,f,g;a="@{arguments}".split(","),c=["background-size","border-","box-shadow","column","transform"],d=c.length,e=a,f=!1,b=a.length;for(var h=0;h<d;h++)for(var i=0;i<b;i++){g=new RegExp(c[h],"g");try{"".trim(),f=!0}catch(j){f=!1}a[i]=f?a[i].trim():a[i],g.test(a[i])&&(e[i]=a[i].replace(g,"-moz-"+c[h]))}return e.join(", ").replace("[","").replace("]","");}())`;
+      @transitionOpera: ~`(function(){var a,b,c,d,e,f,g;a="@{arguments}".split(","),c=["transform"],d=c.length,e=a,f=!1,b=a.length;for(var h=0;h<d;h++)for(var i=0;i<b;i++){g=new RegExp(c[h],"g");try{"".trim(),f=!0}catch(j){f=!1}a[i]=f?a[i].trim():a[i],g.test(a[i])&&(e[i]=a[i].replace(g,"-o-"+c[h]))}return e.join(", ").replace("[","").replace("]","");}())`;
+      @transitionMs: ~`(function(){var a,b,c,d,e,f,g;a="@{arguments}".split(","),c=["transform"],d=c.length,e=a,f=!1,b=a.length;for(var h=0;h<d;h++)for(var i=0;i<b;i++){g=new RegExp(c[h],"g");try{"".trim(),f=!0}catch(j){f=!1}a[i]=f?a[i].trim():a[i],g.test(a[i])&&(e[i]=a[i].replace(g,"-ms-"+c[h]))}return e.join(", ").replace("[","").replace("]","");}())`;
+      @transitionW3C: ~`(function(){var a,b,c;a="@{arguments}".split(","),c=!1,b=a.length;for(var d=0;d<b;d++){try{"".trim(),c=!0}catch(e){c=!1}a[d]=c?a[d].trim():a[d]}return a.join(", ").replace("[","").replace("]","");}())`;
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-transition: ~`(function(){ var arg = "@{transitionWebkit}" || "all 0 ease 0"; if( !/^\w*([ X])/.test(arg) ) { arg = arg.replace(/,/g,"") } return arg; })()`; }
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-transition: ~`(function(){ var arg = "@{transitionMoz}" || "all 0 ease 0"; if( !/^\w*([ X])/.test(arg) ) { arg = arg.replace(/,/g,"") } return arg; })()`; }
+        .inception (@signal, @arguments) when (@signal = 3) { -o-transition:~`(function(){ var arg = "@{transitionOpera}" || "all 0 ease 0"; if( !/^\w*([ X])/.test(arg) ) { arg = arg.replace(/,/g,"") } return arg; })()`; }
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-transition: ~`(function(){ var arg = "@{transitionMs}" || "all 0 ease 0"; if( !/^\w*([ X])/.test(arg) ) { arg = arg.replace(/,/g,"") } return arg; })()`; }
+        .inception (@signal, @arguments) when (@signal = 5) { transition: ~`(function(){ var arg = "@{transitionW3C}" || "all 0 ease 0"; if( !/^\w*([ X])/.test(arg) ) { arg = arg.replace(/,/g,"") } return arg; })()`; }
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+  //   element{ .transition(transform 3s linear); }
+
+
+//  .transition-property
+
+  .transition-property(...){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      @transitionWebkit: ~`(function(){var a,b,c,d,e,f,g;a="@{arguments}".split(","),c=["background-size","border-","box-shadow","column","transform"],d=c.length,e=a,f=!1,b=a.length;for(var h=0;h<d;h++)for(var i=0;i<b;i++){g=new RegExp(c[h],"g");try{"".trim(),f=!0}catch(j){f=!1}a[i]=f?a[i].trim():a[i],g.test(a[i])&&(e[i]=a[i].replace(g,"-webkit-"+c[h]))}return e.join(", ").replace("[","").replace("]","");}())`;
+      @transitionMoz: ~`(function(){var a,b,c,d,e,f,g;a="@{arguments}".split(","),c=["background-size","border-","box-shadow","column","transform"],d=c.length,e=a,f=!1,b=a.length;for(var h=0;h<d;h++)for(var i=0;i<b;i++){g=new RegExp(c[h],"g");try{"".trim(),f=!0}catch(j){f=!1}a[i]=f?a[i].trim():a[i],g.test(a[i])&&(e[i]=a[i].replace(g,"-moz-"+c[h]))}return e.join(", ").replace("[","").replace("]","");}())`;
+      @transitionOpera: ~`(function(){var a,b,c,d,e,f,g;a="@{arguments}".split(","),c=["transform"],d=c.length,e=a,f=!1,b=a.length;for(var h=0;h<d;h++)for(var i=0;i<b;i++){g=new RegExp(c[h],"g");try{"".trim(),f=!0}catch(j){f=!1}a[i]=f?a[i].trim():a[i],g.test(a[i])&&(e[i]=a[i].replace(g,"-o-"+c[h]))}return e.join(", ").replace("[","").replace("]","");}())`;
+      @transitionMs: ~`(function(){var a,b,c,d,e,f,g;a="@{arguments}".split(","),c=["transform"],d=c.length,e=a,f=!1,b=a.length;for(var h=0;h<d;h++)for(var i=0;i<b;i++){g=new RegExp(c[h],"g");try{"".trim(),f=!0}catch(j){f=!1}a[i]=f?a[i].trim():a[i],g.test(a[i])&&(e[i]=a[i].replace(g,"-ms-"+c[h]))}return e.join(", ").replace("[","").replace("]","");}())`;
+      @transitionW3C: ~`(function(){var a,b,c;a="@{arguments}".split(","),c=!1,b=a.length;for(var d=0;d<b;d++){try{"".trim(),c=!0}catch(e){c=!1}a[d]=c?a[d].trim():a[d]}return a.join(", ").replace("[","").replace("]","");}())`;
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-transition-property: ~`(function(){ var arg = "@{transitionWebkit}" || "0"; var decision = false; try{ var hasComma = arg.match(/([^ ,][a-z0-9-]*)/g); if (hasComma.length < 2) { decision = true; } } catch (e) {} if (decision === true) arg = hasComma.join(" ").replace(/,/g,""); return arg; }())`; }
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-transition-property: ~`(function(){ var arg = "@{transitionMoz}" || "0"; var decision = false; try{ var hasComma = arg.match(/([^ ,][a-z0-9-]*)/g); if (hasComma.length < 2) { decision = true; } } catch (e) {} if (decision === true) arg = hasComma.join(" ").replace(/,/g,""); return arg; }())`; }
+        .inception (@signal, @arguments) when (@signal = 3) { -o-transition-property: ~`(function(){ var arg = "@{transitionOpera}" || "0"; var decision = false; try{ var hasComma = arg.match(/([^ ,][a-z0-9-]*)/g); if (hasComma.length < 2) { decision = true; } } catch (e) {} if (decision === true) arg = hasComma.join(" ").replace(/,/g,""); return arg; }())`; }
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-transition-property: ~`(function(){ var arg = "@{transitionMs}" || "0"; var decision = false; try{ var hasComma = arg.match(/([^ ,][a-z0-9-]*)/g); if (hasComma.length < 2) { decision = true; } } catch (e) {} if (decision === true) arg = hasComma.join(" ").replace(/,/g,""); return arg; }())`; }
+        .inception (@signal, @arguments) when (@signal = 5) { transition-property: ~`(function(){ var arg = "@{transitionW3C}" || "0"; var decision = false; try{ var hasComma = arg.match(/([^ ,][a-z0-9-]*)/g); if (hasComma.length < 2) { decision = true; } } catch (e) {} if (decision === true) arg = hasComma.join(" ").replace(/,/g,""); return arg; }())`; }
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+  //    element{ .transition-property(width, height); }
+
+
+//  .transition-duration
+
+  .transition-duration(...){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      @processing: ~`(function(){ var arg = "@{arguments}" || "0"; try{ var hasComma = arg.match(/,/g).length > 1 ? true : false; } catch (e) {} if (hasComma === true) arg = arg.replace(/,/g,""); arg = arg.replace("[","").replace("]",""); return arg; }())`;
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-transition-duration: @processing; }
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-transition-duration: @processing; }
+        .inception (@signal, @arguments) when (@signal = 3) { -o-transition-duration: @processing; }
+        .inception (@signal, @arguments) when (@signal = 5) { transition-duration: @processing; }
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+   //   element{ .transition-duration(250ms); }
+
+
+//  .transition-timing-function
+
+  .transition-timing-function(...){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+      @processing: ~`(function(){ var arg = "@{arguments}" || "ease"; arg = arg.replace("[","").replace("]",""); return arg; }())`;
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-transition-timing-function: @processing; }
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-transition-timing-function: @processing; }
+        .inception (@signal, @arguments) when (@signal = 3) { -o-transition-timing-function: @processing; }
+        .inception (@signal, @arguments) when (@signal = 5) { transition-timing-function: @processing; }
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+   //   element{ .transition-timing-function(cubic-bezier(0,0,1,1)); }
+
+
+//  .transition-delay
+
+  .transition-delay(...){
+
+      //  Local config for disabling properties
+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @operaLocal: true; // Opera 10.5+
+      @msLocal: true;  // IE 10+
+
+       @processing: ~`(function(){ var arg = "@{arguments}" || "0"; arg = arg.replace("[","").replace("]",""); return arg; }())`;
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-transition-delay: @processing; }
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-transition-delay: @processing; }
+        .inception (@signal, @arguments) when (@signal = 3) { -o-transition-delay: @processing; }
+        .inception (@signal, @arguments) when (@signal = 5) { transition-delay: @processing; }
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @operaSignal, @opera, @operaLocal);
+      // --
+      .result(@arguments, @w3cSignal, @w3c, @w3cLocal);
+  }
+
+    //  element{ .transition-delay(2s); }
+
+
+//  .user-select
+
+  .user-select(@arguments:auto){
+
+      //  Local config for disabling properties
+
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @mozLocal: true; //  Firefox 4+
+      @msLocal: true;  // IE 10+
+
+      .result (@arguments, @signal, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) {
+        .inception (@signal, @arguments) when (@signal = 1) { -webkit-user-select: @arguments; }
+        .inception (@signal, @arguments) when (@signal = 2) { -moz-user-select: @arguments; }
+        .inception (@signal, @arguments) when (@signal = 4) { -ms-user-select: @arguments; }
+        .inception (@signal, @arguments) when (@signal > 5),(@signal < 1) { error: "Signal is out of range"; }
+        .inception(@signal, @arguments);
+      }
+      .result (@arguments, @signal, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+
+      .result(@arguments, @webkitSignal, @webkit, @webkitLocal);
+      // --  this comment must be here because of LESS bug
+      .result(@arguments, @mozSignal, @moz, @mozLocal);
+      // --
+      .result(@arguments, @msSignal, @ms, @msLocal);
+  }
+
+   //   element{ .user-select(text); }
+
+
+//  DEPRECATED mixins (must be supported because of old version of CSS Hat)
+
+  //  .gradient (renamed background-image)
+
+  .gradient(...){
+
+      //  Local config for disabling properties
+
+      @svg: true; //  SVG gradient for IE9
+      @mozLocal: true; //  Firefox 4+
+      @webkitLocal: true; // Chrome 7+, Safari 5+, iOS5, Android
+      @operaLocal: true; // Opera 10.5+
+      @w3cLocal: true; // Unprefixed W3C syntax
+      
+      @backgroundSVG: ~`(function(){function G(a){var b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",c,d,e,f,g,h,i,j,k=0,l=0,m="",n=[];if(!a)return a;do c=a.charCodeAt(k++),d=a.charCodeAt(k++),e=a.charCodeAt(k++),j=c<<16|d<<8|e,f=j>>18&63,g=j>>12&63,h=j>>6&63,i=j&63,n[l++]=b.charAt(f)+b.charAt(g)+b.charAt(h)+b.charAt(i);while(k<a.length);m=n.join("");var o=a.length%3;return(o?m.slice(0,o-3):m)+"===".slice(o||3)}var a="@{arguments}",b=null,c=!0,d=a.split(/,(?=\s*(?:linear|radial))/g),e=d.length,f=/top/,g=/right/,h=/bottom/,i=/left/,j=/to\s*top/,k=/to\s*right/,l=/to\s*bottom/,m=/to\s*left/,n=/45deg/,o=/-45deg/,p=/\d*deg/;for(var q=0;q<e;q++){if(/linear/.test(d[q])){d[q]=d[q].replace(/linear-gradient\s*\(/,'<?xml version="1.0" ?><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 1 1" preserveAspectRatio="none">');if(f.test(d[q])&&!j.test(d[q])||l.test(d[q])||/180deg/.test(d[q])){var r=null;l.test(d[q])?r=l:/180deg/.test(d[q])?r=/180deg/:r=f,d[q]=d[q].replace(r,'<linearGradient id="grad-ucgg-generated" gradientUnits="userSpaceOnUse" x1="0%" y1="0%" x2="0%" y2="100%">')}else if(g.test(d[q])&&!k.test(d[q])||m.test(d[q])||/270deg/.test(d[q])){var r=null;m.test(d[q])?r=m:/270deg/.test(d[q])?r=/270deg/:r=g,d[q]=d[q].replace(r,'<linearGradient id="grad-ucgg-generated" gradientUnits="userSpaceOnUse" x1="100%" y1="0%" x2="0%" y2="0%">')}else if(h.test(d[q])&&!l.test(d[q])||j.test(d[q])||/[^\d]0deg/.test(d[q])){var r=null;j.test(d[q])?r=j:/0deg/.test(d[q])?r=/0deg/:r=h,d[q]=d[q].replace(r,'<linearGradient id="grad-ucgg-generated" gradientUnits="userSpaceOnUse" x1="0%" y1="100%" x2="0%" y2="0%">')}else if(i.test(d[q])&&!m.test(d[q])||k.test(d[q])||/90deg/.test(d[q])){var r=null;k.test(d[q])?r=k:/90deg/.test(d[q])?r=/90deg/:r=i,d[q]=d[q].replace(r,'<linearGradient id="grad-ucgg-generated" gradientUnits="userSpaceOnUse" x1="0%" y1="0%" x2="100%" y2="0%">')}else n.test(d[q])&&!o.test(d[q])?d[q]=d[q].replace(n,'<linearGradient id="grad-ucgg-generated" gradientUnits="userSpaceOnUse" x1="0%" y1="100%" x2="100%" y2="0%">'):o.test(d[q])?d[q]=d[q].replace(o,'<linearGradient id="grad-ucgg-generated" gradientUnits="userSpaceOnUse" x1="0%" y1="0%" x2="100%" y2="100%">'):c=!1}try{"".trim(),b=!0}catch(s){b=!1}b&&(d[q]=d[q].trim());if(/linear/.test(d[q])||/radial/.test(d[q])){d[q]=d[q].slice(0,-1),d[q]="url(data:image/svg+xml;base64--"+d[q]+'</linearGradient><rect x="0" y="0" width="1" height="1" fill="url(***)" /></svg>)';var t=d.join("@@@"),u=t.match(/rgba?\(\d+,\s*\d+,\s*\d+,\s*(?:0|1|\.\d+|0\.\d+)\)\s*\d*%*/g)||0,v=t.match(/hsla?\(\d+,\s*\d+%,\s*\d+%,\s*(?:0|1|\.\d+|0\.\d+)\)\s*\d*%*/g)||0,w=[],x=[];for(var y=0;y<u.length;y++)w[y]=u[y].replace(/,/g,"--");for(var z=0;z<v.length;z++)x[z]=v[z].replace(/,/g,"--");for(var A=0;A<u.length;A++)t=t.replace(u[A],w[A]);for(var B=0;B<v.length;B++)t=t.replace(v[B],x[B]);var C=t.split(",");for(var D=0;D<C.length;D++){C[D]=C[D].replace(/(#\w{3,6})\s*(\d*%*)/g,'<stop offset="$2" stop-color="$1" stop-opacity="1"/>').replace(/(rgba?\(\d+--\s*\d+--\s*\d+--\s*(0|1|\.\d+|0\.\d+)\))\s*(\d*%)*/g,'<stop offset="$3" stop-color="$1" stop-opacity="$2"/>').replace(/rgba/g,"rgb").replace(/(hsla?\(\d+--\s*\d+%--\s*\d+%--\s*(0|1|\.\d+|0\.\d+)\))\s*(\d*%)*/g,'<stop offset="$3" stop-color="$1" stop-opacity="$2"/>').replace(/hsla/g,"hsl").replace(/((?:aqua|black|blue|fuchsia|gray|grey|green|lime|maroon|navy|olive|purple|red|silver|teal|white|yellow))\s*(\d*%)*/g,'<stop offset="$2" stop-color="$1" stop-opacity="1"/>').replace(/\*\*\*/,"#grad-ucgg-generated");try{"".trim(),b=!0}catch(s){b=!1}b&&(C[D]=C[D].trim())}C=C.toString().replace(/,/g,"").replace(/--/g,",").replace(/(rgb?\(\d+,\s*\d+,\s*\d+),\s*(?:0|1|\.\d+|0\.\d+)\)/g,"$1)").replace(/(hsl?\(\d+,\s*\d+%,\s*\d+%),\s*(?:0|1|\.\d+|0\.\d+)\)/g,"$1)")}}/radial/.test(C)&&(/((ellipse).*(center)|(circle).*(center))/g.test(C)?C=C.replace(/<\/linearGradient>/g,"</radialGradient>").replace(/radial-gradient[^<]+/g,'<?xml version="1.0" ?><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 1 1" preserveAspectRatio="none"><radialGradient id="grad-ucgg-generated" gradientUnits="userSpaceOnUse" cx="50%" cy="50%" r="75%">').replace(/<rect x=\S+\d\S+ y=\S+\d\S+ width=\S+\d\S+ height=\S+\d\S+ fill=\S+\w\S+ \/>/g,'<rect x="-50" y="-50" width="101" height="101" fill="url(#grad-ucgg-generated)" />'):C=!1);var E=null;try{C=C.split("@@@");var F=0;for(F;F<C.length;F++)E=C[F].match(/<\?xml.*<\/svg>/),E=G(E.join("")),C[F]=C[F].replace(/(<\?xml.*<\/svg>)/,E)}catch(s){}return c?C:C=!1,C?C.toString().replace(/\[/g,"").replace(/\]/g,""):C}())`;
+      @backgroundMoz: ~`(function(){var a,b,c,d,e,f,g,h,i,j,k;a="@{arguments}",c=null,d=a.split(/,(?=\s*(?:linear|radial))/g),e=d.length,k=/to\s*top/,j=/to\s*right/,h=/to\s*bottom/,i=/to\s*left/,b=/\d*deg/,f=0;while(f<e){/linear/.test(d[f])?(d[f]=d[f].replace(/linear-gradient/,"-moz-linear-gradient"),k.test(d[f])?d[f]=d[f].replace(k,"bottom"):j.test(d[f])?d[f]=d[f].replace(j,"left"):h.test(d[f])?d[f]=d[f].replace(h,"top"):i.test(d[f])?d[f]=d[f].replace(i,"right"):b.test(d[f])&&(g=d[f].match(/\d*deg/),g=(parseInt(g)-90)*-1+"deg",d[f]=d[f].replace(b,g))):d[f]=d[f].replace(/radial-gradient/,"-moz-radial-gradient").replace(/,\s* \d*(px|%) \d*(px|%)/,", circle").replace(/\(+\s*(.*) at\s*([^,]+)/g,"($2, $1");try{"".trim(),c=!0}catch(l){c=!1}c&&(d[f]=d[f].trim()),f++}return d.toString().replace(/\[/g,"").replace(/\]/g,"");}())`;
+      @backgroundWebkit: ~`(function(){var a,b,c,d,e,f,g,h,i,j,k;a="@{arguments}",c=null,d=a.split(/,(?=\s*(?:linear|radial))/g),e=d.length,k=/to\s*top/,j=/to\s*right/,h=/to\s*bottom/,i=/to\s*left/,b=/\d*deg/,f=0;while(f<e){/linear/.test(d[f])?(d[f]=d[f].replace(/linear-gradient/,"-webkit-linear-gradient"),k.test(d[f])?d[f]=d[f].replace(k,"bottom"):j.test(d[f])?d[f]=d[f].replace(j,"left"):h.test(d[f])?d[f]=d[f].replace(h,"top"):i.test(d[f])?d[f]=d[f].replace(i,"right"):b.test(d[f])&&(g=d[f].match(/\d*deg/),g=(parseInt(g)-90)*-1+"deg",d[f]=d[f].replace(b,g))):d[f]=d[f].replace(/radial-gradient/,"-webkit-radial-gradient").replace(/\(+\s*(.*) at\s*([^,]+)/g,"($2, $1");try{"".trim(),c=!0}catch(l){c=!1}c&&(d[f]=d[f].trim()),f++}return d.toString().replace(/\[/g,"").replace(/\]/g,"");}())`;
+      @backgroundOpera: ~`(function(){var a,b,c,d,e,f,g,h,i,j,k;a="@{arguments}",c=null,d=a.split(/,(?=\s*(?:linear|radial))/g),e=d.length,k=/to\s*top/,j=/to\s*right/,h=/to\s*bottom/,i=/to\s*left/,b=/\d*deg/,f=0;while(f<e){/linear/.test(d[f])?(d[f]=d[f].replace(/linear-gradient/,"-o-linear-gradient"),k.test(d[f])?d[f]=d[f].replace(k,"bottom"):j.test(d[f])?d[f]=d[f].replace(j,"left"):h.test(d[f])?d[f]=d[f].replace(h,"top"):i.test(d[f])?d[f]=d[f].replace(i,"right"):b.test(d[f])&&(g=d[f].match(/\d*deg/),g=(parseInt(g)-90)*-1+"deg",d[f]=d[f].replace(b,g))):d[f]=d[f].replace(/radial-gradient/,"-o-radial-gradient").replace(/\(+\s*(.*) at\s*([^,]+)/g,"($2, $1");try{"".trim(),c=!0}catch(l){c=!1}c&&(d[f]=d[f].trim()),f++}return d.toString().replace(/\[/g,"").replace(/\]/g,"");})()`;
+      @backgroundW3C: ~`(function(){var a,b,c,d,e;a="@{arguments}",b=null,c=a.split(/,(?=\s*(?:linear|radial))/g),d=c.length,e=0;while(e<d){try{"".trim(),b=!0}catch(f){b=!1}b&&(c[e]=c[e].trim()),e++}return c.toString().replace(/\[/g,"").replace(/\]/g,"");}())`;
+
+      .result(@arguments, @boolean, @localBoolean) when (@boolean = true) and (@localBoolean = true) { background-image: @arguments; }
+      .result(@arguments, @boolean, @localBoolean) when not (@boolean = true), not (@localBoolean = true) { }
+      .result(@arguments, @boolean, @localBoolean, @property) when (@boolean = true) and (@localBoolean = true) and (isstring(@property)) { background-image: @arguments; }
+      .result(@arguments, @boolean, @localBoolean, @property) when not (@boolean = true), not (@localBoolean = true), not (isstring(@property)) { }
+
+      .result(@backgroundSVG, @svg, @svg, @backgroundSVG);
+      // --  this comment must be here because of LESS bug
+      .result(@backgroundMoz, @moz, @mozLocal);
+      // --
+      .result(@backgroundWebkit, @webkit, @webkitLocal);
+      // --
+      .result(@backgroundOpera, @opera, @operaLocal);
+      // --
+      .result(@backgroundW3C, @w3c, @w3cLocal);
+  }
+
+    //  element{ .gradient(~"linear-gradient(to right, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%)"); }
diff --git a/app/soc/content/less/soc/main.less b/app/soc/content/less/soc/main.less
new file mode 100755
index 0000000..0673b2e
--- /dev/null
+++ b/app/soc/content/less/soc/main.less
@@ -0,0 +1,30 @@
+// Welcome to my Sass setup!
+// I like to break out my sass into individual files,
+// so this page mainly just imports those partials
+
+
+// import normalize (a version of css reset)
+@import "normalize";
+
+// import mixins and variables (special Sass stuff)
+@import "mixins";
+
+// import site partials
+@import "elements/helper";
+@import "elements/grid";
+@import "elements/link-styles";
+@import "elements/headers-styles";
+
+// partials specific to a page
+@import "elements/general";
+@import "elements/header";
+@import "elements/footer";
+@import "elements/projects";
+@import "elements/latest";
+@import "elements/social-media";
+
+
+// print stylesheet
+@media print {
+	@import "print";
+}
diff --git a/app/soc/content/less/soc/mixins.less b/app/soc/content/less/soc/mixins.less
new file mode 100755
index 0000000..4e2426d
--- /dev/null
+++ b/app/soc/content/less/soc/mixins.less
@@ -0,0 +1,55 @@
+
+
+@import "lesshat";
+
+// ==========================================================================
+// Breakpoints
+
+@small: 45em;
+@medium: 62em;
+
+@break-small: ~"only screen and (min-width: 45em)";
+@break-medium: ~"only screen and (min-width: 62em)";
+
+// ==========================================================================
+// Colors
+
+
+@alert-yellow:      #ebe16f;
+@alert-red:         #fbe3e4;
+@alert-green:       #e6efc2;
+@alert-blue:        #d5edf8;
+
+@black:             #000;
+@white:             #fff;
+@web-black:			#666666;
+
+@google-blue: 			#1F93CF;
+@google-orange: 		#F29B07;
+
+@link-color:        @google-blue;
+@link-color-hover:   @google-orange;
+
+
+// ==========================================================================
+// Typography
+
+@serif:        'Open Sans', "Helvetica Neue", Helvetica, Arial, sans-serif;
+@sans-serif:   @serif;
+
+
+// ==========================================================================
+// clearfix
+
+.clearfix {
+  zoom: 1; // For IE 6/7 (trigger hasLayout)
+
+  &:before, &:after {
+    content: "";
+    display: table;
+  }
+
+  &:after {
+    clear:both;
+  }
+}
\ No newline at end of file
diff --git a/app/soc/content/less/soc/normalize.less b/app/soc/content/less/soc/normalize.less
new file mode 100755
index 0000000..9528d00
--- /dev/null
+++ b/app/soc/content/less/soc/normalize.less
@@ -0,0 +1,536 @@
+/*! normalize.css 2012-07-07T09:50 UTC - http://github.com/necolas/normalize.css */
+
+/* ==========================================================================
+   HTML5 display definitions
+   ========================================================================== */
+
+/*
+ * Corrects `block` display not defined in IE6/7/8/9 & FF3.
+ */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+nav,
+section,
+summary {
+    display: block;
+}
+
+/*
+ * Corrects `inline-block` display not defined in IE6/7/8/9 & FF3.
+ */
+
+audio,
+canvas,
+video {
+    display: inline-block;
+    *display: inline;
+    *zoom: 1;
+}
+
+/*
+ * Prevents modern browsers from displaying `audio` without controls.
+ * Remove excess height in iOS5 devices.
+ */
+
+audio:not([controls]) {
+    display: none;
+    height: 0;
+}
+
+/*
+ * Addresses styling for `hidden` attribute not present in IE7/8/9, FF3, S4.
+ * Known issue: no IE6 support.
+ */
+
+[hidden] {
+    display: none;
+}
+
+/* ==========================================================================
+   Base
+   ========================================================================== */
+
+/*
+ * 1. Corrects text resizing oddly in IE6/7 when body `font-size` is set using
+ *    `em` units.
+ * 2. Prevents iOS text size adjust after orientation change, without disabling
+ *    user zoom.
+ */
+
+html {
+    font-size: 100%; /* 1 */
+    -webkit-text-size-adjust: 100%; /* 2 */
+    -ms-text-size-adjust: 100%; /* 2 */
+}
+
+/*
+ * Addresses `font-family` inconsistency between `textarea` and other form
+ * elements.
+ */
+
+html,
+button,
+input,
+select,
+textarea {
+    font-family: sans-serif;
+}
+
+/*
+ * Addresses margins handled incorrectly in IE6/7.
+ */
+
+body {
+    margin: 0;
+}
+
+/* ==========================================================================
+   Links
+   ========================================================================== */
+
+/*
+ * Addresses `outline` inconsistency between Chrome and other browsers.
+ */
+
+a:focus {
+    outline: thin dotted;
+}
+
+/*
+ * Improves readability when focused and also mouse hovered in all browsers.
+ * people.opera.com/patrickl/experiments/keyboard/test
+ */
+
+a:active,
+a:hover {
+    outline: 0;
+}
+
+/* ==========================================================================
+   Typography
+   ========================================================================== */
+
+/*
+ * Addresses font sizes and margins set differently in IE6/7.
+ * Addresses font sizes within `section` and `article` in FF4+, Chrome, S5.
+ */
+
+h1 {
+    font-size: 2em;
+    margin: 0.67em 0;
+}
+
+h2 {
+    font-size: 1.5em;
+    margin: 0.83em 0;
+}
+
+h3 {
+    font-size: 1.17em;
+    margin: 1em 0;
+}
+
+h4 {
+    font-size: 1em;
+    margin: 1.33em 0;
+}
+
+h5 {
+    font-size: 0.83em;
+    margin: 1.67em 0;
+}
+
+h6 {
+    font-size: 0.75em;
+    margin: 2.33em 0;
+}
+
+/*
+ * Addresses styling not present in IE7/8/9, S5, Chrome.
+ */
+
+abbr[title] {
+    border-bottom: 1px dotted;
+}
+
+/*
+ * Addresses style set to `bolder` in FF3+, S4/5, Chrome.
+ */
+
+b,
+strong {
+    font-weight: bold;
+}
+
+blockquote {
+    margin: 1em 40px;
+}
+
+/*
+ * Addresses styling not present in S5, Chrome.
+ */
+
+dfn {
+    font-style: italic;
+}
+
+/*
+ * Addresses styling not present in IE6/7/8/9.
+ */
+
+mark {
+    background: #ff0;
+    color: #000;
+}
+
+/*
+ * Addresses margins set differently in IE6/7.
+ */
+
+p,
+pre {
+    margin: 1em 0;
+}
+
+/*
+ * Corrects font family set oddly in IE6, S4/5, Chrome.
+ * en.wikipedia.org/wiki/User:Davidgothberg/Test59
+ */
+
+code,
+kbd,
+pre,
+samp {
+    font-family: monospace, serif;
+    _font-family: 'courier new', monospace;
+    font-size: 1em;
+}
+
+/*
+ * Improves readability of pre-formatted text in all browsers.
+ */
+
+pre {
+    white-space: pre;
+    white-space: pre-wrap;
+    word-wrap: break-word;
+}
+
+/*
+ * Addresses CSS quotes not supported in IE6/7.
+ */
+
+q {
+    quotes: none;
+}
+
+/*
+ * Addresses `quotes` property not supported in S4.
+ */
+
+q:before,
+q:after {
+    content: '';
+    content: none;
+}
+
+small {
+    font-size: 75%;
+}
+
+/*
+ * Prevents `sub` and `sup` affecting `line-height` in all browsers.
+ * gist.github.com/413930
+ */
+
+sub,
+sup {
+    font-size: 75%;
+    line-height: 0;
+    position: relative;
+    vertical-align: baseline;
+}
+
+sup {
+    top: -0.5em;
+}
+
+sub {
+    bottom: -0.25em;
+}
+
+/* ==========================================================================
+   Lists
+   ========================================================================== */
+
+/*
+ * Addresses margins set differently in IE6/7.
+ */
+
+dl,
+menu,
+ol,
+ul {
+    margin: 1em 0;
+}
+
+dd {
+    margin: 0 0 0 40px;
+}
+
+/*
+ * Addresses paddings set differently in IE6/7.
+ */
+
+menu,
+ol,
+ul {
+    padding: 0 0 0 40px;
+}
+
+/*
+ * Corrects list images handled incorrectly in IE7.
+ */
+
+nav ul,
+nav ol {
+    list-style: none;
+    list-style-image: none;
+}
+
+/* ==========================================================================
+   Embedded content
+   ========================================================================== */
+
+/*
+ * 1. Removes border when inside `a` element in IE6/7/8/9, FF3.
+ * 2. Improves image quality when scaled in IE7.
+ *    code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/
+ */
+
+img {
+    border: 0; /* 1 */
+    -ms-interpolation-mode: bicubic; /* 2 */
+}
+
+/*
+ * Corrects overflow displayed oddly in IE9.
+ */
+
+svg:not(:root) {
+    overflow: hidden;
+}
+
+/* ==========================================================================
+   Figures
+   ========================================================================== */
+
+/*
+ * Addresses margin not present in IE6/7/8/9, S5, O11.
+ */
+
+figure {
+    margin: 0;
+}
+
+/* ==========================================================================
+   Forms
+   ========================================================================== */
+
+/*
+ * Corrects margin displayed oddly in IE6/7.
+ */
+
+form {
+    margin: 0;
+}
+
+/*
+ * Define consistent border, margin, and padding.
+ */
+
+fieldset {
+    border: 1px solid #c0c0c0;
+    margin: 0 2px;
+    padding: 0.35em 0.625em 0.75em;
+}
+
+/*
+ * 1. Corrects color not being inherited in IE6/7/8/9.
+ * 2. Corrects text not wrapping in FF3.
+ * 3. Corrects alignment displayed oddly in IE6/7.
+ */
+
+legend {
+    border: 0; /* 1 */
+    padding: 0;
+    white-space: normal; /* 2 */
+    *margin-left: -7px; /* 3 */
+}
+
+/*
+ * 1. Corrects font size not being inherited in all browsers.
+ * 2. Addresses margins set differently in IE6/7, FF3+, S5, Chrome.
+ * 3. Improves appearance and consistency in all browsers.
+ */
+
+button,
+input,
+select,
+textarea {
+    font-size: 100%; /* 1 */
+    margin: 0; /* 2 */
+    vertical-align: baseline; /* 3 */
+    *vertical-align: middle; /* 3 */
+}
+
+/*
+ * Addresses FF3/4 setting `line-height` on `input` using `!important` in the
+ * UA stylesheet.
+ */
+
+button,
+input {
+    line-height: normal;
+}
+
+/*
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+ *    and `video` controls.
+ * 2. Corrects inability to style clickable `input` types in iOS.
+ * 3. Improves usability and consistency of cursor style between image-type
+ *    `input` and others.
+ * 4. Removes inner spacing in IE7 without affecting normal text inputs.
+ *    Known issue: inner spacing remains in IE6.
+ */
+
+button,
+html input[type="button"], /* 1 */
+input[type="reset"],
+input[type="submit"] {
+    -webkit-appearance: button; /* 2 */
+    cursor: pointer; /* 3 */
+    *overflow: visible;  /* 4 */
+}
+
+/*
+ * Re-set default cursor for disabled elements.
+ */
+
+button[disabled],
+input[disabled] {
+    cursor: default;
+}
+
+/*
+ * 1. Addresses box sizing set to content-box in IE8/9.
+ * 2. Removes excess padding in IE8/9.
+ * 3. Removes excess padding in IE7.
+ *    Known issue: excess padding remains in IE6.
+ */
+
+input[type="checkbox"],
+input[type="radio"] {
+    box-sizing: border-box; /* 1 */
+    padding: 0; /* 2 */
+    *height: 13px; /* 3 */
+    *width: 13px; /* 3 */
+}
+
+/*
+ * 1. Addresses `appearance` set to `searchfield` in S5, Chrome.
+ * 2. Addresses `box-sizing` set to `border-box` in S5, Chrome (include `-moz`
+ *    to future-proof).
+ */
+
+input[type="search"] {
+    -webkit-appearance: textfield; /* 1 */
+    -moz-box-sizing: content-box;
+    -webkit-box-sizing: content-box; /* 2 */
+    box-sizing: content-box;
+}
+
+/*
+ * Removes inner padding and search cancel button in S5, Chrome on OS X.
+ */
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+    -webkit-appearance: none;
+}
+
+/*
+ * Removes inner padding and border in FF3+.
+ */
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+    border: 0;
+    padding: 0;
+}
+
+/*
+ * 1. Removes default vertical scrollbar in IE6/7/8/9.
+ * 2. Improves readability and alignment in all browsers.
+ */
+
+textarea {
+    overflow: auto; /* 1 */
+    vertical-align: top; /* 2 */
+}
+
+/* ==========================================================================
+   Tables
+   ========================================================================== */
+
+/*
+ * Remove most spacing between table cells.
+ */
+
+table {
+    border-collapse: collapse;
+    border-spacing: 0;
+}
+
+/******************************************************************
+CUSTOMIZED RESET VALUES
+I added these extra styles as a more personalized reset. Feel free
+to remove them if you like or add your own. If you want to update
+the normalize styles, make sure to edit from this point up.
+******************************************************************/
+
+// proper formatting (http://blog.fontdeck.com/post/9037028497/hyphens) 
+p {
+	-webkit-hyphens: auto;
+	-epub-hyphens:   auto;
+	-moz-hyphens:    auto;
+  hyphens:         auto;
+}
+
+b, strong, .strong { font-weight: bold; }
+
+dfn, em, .em { font-style: italic; }
+
+small, .small { font-size: 75%; }
+
+ul, ol {
+	padding: 0;
+	list-style-type: none;
+}
+
+dd {
+	margin: 0;
+}
+
+.sidebar ul,
+.sidebar ol,
+.commentlist {
+	list-style: none;
+}
diff --git a/app/soc/content/less/soc/print.less b/app/soc/content/less/soc/print.less
new file mode 100755
index 0000000..72ef681
--- /dev/null
+++ b/app/soc/content/less/soc/print.less
@@ -0,0 +1,78 @@
+//******************************************************************
+//  Print stylesheet
+//  
+//******************************************************************
+
+
+
+
+
+// some generic print styles
+
+  * {
+    background: transparent !important;
+    color: black !important;
+    text-shadow: none !important;
+    filter:none !important;
+    -ms-filter: none !important;
+  }
+
+  a, a:visited {
+    color: #444 !important;
+    text-decoration: underline;
+
+    // show links on printed pages
+    &:after {
+      content: " (" attr(href) ")";
+    }
+
+    // show title too
+    abbr[title]:after {
+      content: " (" attr(title) ")";
+    }
+  }
+
+  .ir a:after,
+  a[href^="javascript:"]:after,
+  a[href^="#"]:after {
+    content: "";
+  }
+
+  pre, blockquote {
+    border: 1px solid #999;
+    page-break-inside: avoid;
+  }
+
+  thead {
+    display: table-header-group;
+  }
+
+  tr, img {
+    page-break-inside: avoid;
+  }
+
+  img {
+    max-width: 100% !important;
+  }
+
+    @page {
+      margin: 0.5cm;
+    }
+
+    p, h2, h3 {
+      orphans: 3;
+      widows: 3;
+    }
+
+    h2,
+    h3 {
+      page-break-after: avoid;
+    }
+
+    // hide content people who print don't need to see
+    .page-navigation,
+    .wp-prev-next,
+    .respond-form,
+    nav {
+      display: none;
+    }
diff --git a/app/soc/models/seed_db.py b/app/soc/models/seed_db.py
index c9d27c3..3cb7156 100644
--- a/app/soc/models/seed_db.py
+++ b/app/soc/models/seed_db.py
@@ -61,7 +61,7 @@
 
   site_properties = {
       'key_name': 'site',
-      'latest_gsoc': 'google/gsoc2009',
+      'latest_gsoc': 'google/gsoc2014',
       'latest_gci': 'google/gci2009',
       }
 
@@ -134,8 +134,8 @@
   after = now + datetime.timedelta(365)
 
   timeline_properties = {
-      'key_name': 'google/gsoc2009',
-      'link_id': 'gsoc2009',
+      'key_name': 'google/gsoc2014',
+      'link_id': 'gsoc2014',
       'scope': google,
       'program_start': before,
       'program_end': after,
@@ -144,28 +144,28 @@
       'student_signup_end': after,
   }
 
-  gsoc2009_timeline = GSoCTimeline(**timeline_properties)
-  gsoc2009_timeline.put()
+  gsoc2014_timeline = GSoCTimeline(**timeline_properties)
+  gsoc2014_timeline.put()
 
 
   program_properties = {
-      'key_name': 'google/gsoc2009',
-      'link_id': 'gsoc2009',
-      'program_id': 'gsoc2009',
+      'key_name': 'google/gsoc2014',
+      'link_id': 'gsoc2014',
+      'program_id': 'gsoc2014',
       'sponsor': google,
       'scope': google,
-      'name': 'Google Summer of Code 2009',
+      'name': 'Google Summer of Code 2014',
       'short_name': 'GSoC 2009',
       'group_label': 'GSOC',
-      'description': 'This is the program for GSoC 2009.',
+      'description': 'This is the program for GSoC 2014.',
       'apps_tasks_limit': 42,
       'slots': 42,
-      'timeline': gsoc2009_timeline,
+      'timeline': gsoc2014_timeline,
       'status': program_model.STATUS_VISIBLE,
       }
 
-  gsoc2009 = GSoCProgram(**program_properties)
-  gsoc2009.put()
+  gsoc2014 = GSoCProgram(**program_properties)
+  gsoc2014.put()
 
 
   timeline_properties.update({
@@ -243,17 +243,17 @@
   melange.put()
 
   group_properties.update({
-    'scope': gsoc2009,
-    'program': gsoc2009,
+    'scope': gsoc2014,
+    'program': gsoc2014,
     })
 
   role_properties = {
-      'key_name': 'google/gsoc2009/test',
+      'key_name': 'google/gsoc2014/test',
       'parent': current_user,
       'link_id': 'test',
       'public_name': 'test',
-      'scope': gsoc2009,
-      'program': gsoc2009,
+      'scope': gsoc2014,
+      'program': gsoc2014,
       'user': current_user,
       'given_name': 'Test',
       'surname': 'Example',
@@ -277,7 +277,7 @@
   orgs = []
   for i in range(15):
     group_properties.update({
-        'key_name': 'google/gsoc2009/org_%d' % i,
+        'key_name': 'google/gsoc2014/org_%d' % i,
         'link_id': 'org_%d' % i,
         'name': 'Organization %d' % i,
         'short_name': 'Org %d' % i,
@@ -347,11 +347,11 @@
 
   student_id = 'student'
   student_properties = {
-      'key_name': gsoc2009.key().name() + "/" + student_id,
+      'key_name': gsoc2014.key().name() + "/" + student_id,
       'link_id': student_id,
       'parent': student_user,
-      'scope': gsoc2009,
-      'program': gsoc2009,
+      'scope': gsoc2014,
+      'program': gsoc2014,
       'user': student_user,
       'is_student': True,
       'public_name': 'Student',
@@ -383,8 +383,8 @@
   student_info_properties = {
       'key_name': melange_student.key().name(),
       'parent': melange_student,
-      'expected_graduation': 2009,
-      'program': gsoc2009,
+      'expected_graduation': 2016,
+      'program': gsoc2014,
       'school_country': 'United States',
       'school_name': 'Test School',
       'school_home_page': 'http://www.example.com',
@@ -406,7 +406,7 @@
   student_user2.put()
   student_id = 'student2'
   student_properties.update({
-      'key_name': gsoc2009.key().name() + "/" + student_id,
+      'key_name': gsoc2014.key().name() + "/" + student_id,
       'link_id': student_id,
       'user': student_user2,
       'parent': student_user2,
@@ -424,7 +424,7 @@
       'parent': melange_student,
       'has_mentor': True,
       'org': orgs[1],
-      'program': gsoc2009,
+      'program': gsoc2014,
       }
   melange_proposal = GSoCProposal(**proposal_properties)
   melange_proposal.put()
@@ -435,7 +435,7 @@
       'status': 'accepted',
       'parent': melange_student,
       'mentors': [profile.key()],
-      'program':  gsoc2009,
+      'program':  gsoc2014,
       'org': orgs[1].key(),
        }
 
@@ -461,7 +461,7 @@
       })
 
   student_info_properties.update({
-      'key_name': gsoc2009.key().name() + "/" + student_id,
+      'key_name': gsoc2014.key().name() + "/" + student_id,
       'link_id': student_id,
       'parent': melange_student2,
   })
diff --git a/app/soc/models/site.py b/app/soc/models/site.py
index 7ecc993..0124dc6 100644
--- a/app/soc/models/site.py
+++ b/app/soc/models/site.py
@@ -166,3 +166,30 @@
       verbose_name=ugettext('Latest GCI'))
   latest_gci.help_text = ugettext(
       'The key of the latest GCI program')
+ 
+  #: Optional public mailing list.
+  mailing_list = db.StringProperty(required=False,
+      verbose_name=ugettext('Mailing List'))
+  mailing_list.help_text = ugettext(
+      'Mailing list email address, URL to sign-up page, etc.')
+
+  #: Optional public IRC channel.
+  irc_channel = db.StringProperty(required=False,
+      verbose_name=ugettext('Public IRC Channel'))
+  irc_channel.help_text = ugettext(
+     'Address of a public IRC channel.')
+
+  #: Blog page about the site.
+  blog = db.StringProperty(required=False,
+      verbose_name=ugettext('Blog'))
+  blog.help_text = ugettext('Blog page about the site.')
+
+  #: Google Plus page of the site.
+  google_plus = db.StringProperty(required=False,
+      verbose_name=ugettext('Google+ page'))
+  google_plus.help_text = ugettext('Google+ page of the site.')
+
+  #: Field storing description of the site.
+  description = db.TextProperty(verbose_name=ugettext('Description'))
+  description.help_text = ugettext(
+      'Description of the site to be placed on the site header.')
diff --git a/app/soc/modules/soc_core/callback.py b/app/soc/modules/soc_core/callback.py
index cf92431..0411114 100644
--- a/app/soc/modules/soc_core/callback.py
+++ b/app/soc/modules/soc_core/callback.py
@@ -43,6 +43,7 @@
     self.views.append(oauth.PopupOAuthVerified())
     self.views.append(site.EditSitePage())
     self.views.append(site.SiteHomepage())
+    self.views.append(site.LandingPage())
     self.views.append(user.CreateUserPage())
     self.views.append(user.EditUserPage())
     self.views.append(warmup.WarmupPage())
diff --git a/app/soc/templates/modules/gci/base.html b/app/soc/templates/modules/gci/base.html
index 0b224c0..ca7ea71 100644
--- a/app/soc/templates/modules/gci/base.html
+++ b/app/soc/templates/modules/gci/base.html
@@ -1,4 +1,4 @@
-{% extends "soc/base.html" %}
+{% extends "melange/root.html" %}
 {% comment %}
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
diff --git a/app/soc/templates/modules/gsoc/base.html b/app/soc/templates/modules/gsoc/base.html
index 3416ed4..424122b 100644
--- a/app/soc/templates/modules/gsoc/base.html
+++ b/app/soc/templates/modules/gsoc/base.html
@@ -1,4 +1,4 @@
-{% extends "soc/base.html" %}
+{% extends "melange/root.html" %}
 {% comment %}
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
diff --git a/app/soc/views/helper/context.py b/app/soc/views/helper/context.py
index c77ffe9..a226c92 100644
--- a/app/soc/views/helper/context.py
+++ b/app/soc/views/helper/context.py
@@ -61,4 +61,5 @@
       'ds_write_disabled': data.ds_write_disabled,
       'css_path': css_path,
       'gdata_is_logged_in': str(bool(gdata_is_logged_in)).lower(),
+      'site_description': data.site.description,
   }
diff --git a/app/soc/views/site.py b/app/soc/views/site.py
index 9c54519..9240fcb 100644
--- a/app/soc/views/site.py
+++ b/app/soc/views/site.py
@@ -27,15 +27,24 @@
 from melange.request import access
 from melange.request import exception
 from soc.logic import cleaning
+from soc.logic import links
 from soc.logic import site as site_logic
 from soc.models import document
 from soc.models import site
 from soc.views import base
 from soc.views import forms as views_forms
+from soc.views import template
+from soc.views.helper import request_data
+
 
 DEF_NO_DEVELOPER = ugettext(
     'This page is only accessible to developers.')
 
+CI_PROGRAM_IMAGE_PATH = '/images/gci/logo/landing-page-%s.png'
+SOC_PROGRAM_IMAGE_PATH = '/images/gsoc/logo/landing-page-%s.png'
+
+LANDING_PAGE_NAME = ugettext('Welcome to Melange')
+
 
 def getProgramMap():
   # TODO(nathaniel): Magic string? This isn't a program.
@@ -170,3 +179,130 @@
       return self.error_handler.handleUserError(user_error, data)
     except exception.ServerError as server_error:
       return self.error_handler.handleServerError(server_error, data)
+
+
+class ProgramSection(template.Template):
+  """Template that displays a program on the landing page."""
+
+  def __init__(self, data, program, image_path):
+    """Initializes new instance of this class for the specified program.
+
+    Args:
+      data: request_data.RequestData for the current request.
+      program: program entity.
+      image_path: path to the static file with a logo image to be put
+        on the landing page.
+    """
+    super(ProgramSection, self).__init__(data)
+    self._program = program
+    self._image_path = image_path
+
+  def templatePath(self):
+    """See template.Template.templatePath for specification."""
+    return 'melange/landing_page/_program_section.html'
+
+  def isActive(self):
+    """Tells whether the program in this section is currently active or not.
+
+    Returns:
+      bool indication whether the program is currently active or not.
+    """
+    return  request_data.TimelineHelper(
+        self._program.timeline, None).programActive()
+
+  def context(self):
+    """See template.Template.context for specification."""
+    homepage_url = links.LINKER.program(
+        self._program, self._program.homepage_url_name)
+
+    return {
+        'program': self._program,
+        'homepage_url': homepage_url,
+        'is_active': self.isActive(),
+        'image_path': self._image_path,
+        }
+
+
+class ContactUsSection(template.Template):
+  """Template that displays contact information on the landing page."""
+
+  def templatePath(self):
+    """See template.Template.templatePath for specification."""
+    return 'melange/landing_page/_contact_us_section.html'
+
+  def isAnyContactChannelSet(self):
+    """Tells whether there is at least one contact channel set for the site.
+
+    Returns:
+      True if at least one contact channel is defined; False otherwise.
+    """
+    return (self.data.site.blog or self.data.site.google_plus or
+        self.data.site.irc_channel or self.data.site.mailing_list)
+
+  def context(self):
+    """See template.Template.context for specification."""
+    return {
+        'blog': self.data.site.blog,
+        'google_plus': self.data.site.google_plus,
+        'irc_channel': self.data.site.irc_channel,
+        'mailing_list': self.data.site.mailing_list,
+        }
+
+
+class LandingPage(base.RequestHandler):
+  """View with the landing page that is displayed when user visits
+  the main URL for the application.
+  """
+  # TODO(daniel): it should be changed to All Allowed Checker
+  access_checker = access.DEVELOPER_ACCESS_CHECKER
+
+  def djangoURLPatterns(self):
+    """See base.RequestHandler.getDjangoURLPatterns for specification."""
+    # TODO(daniel): this should be changed to '/' when the page is public
+    return [django_url(r'^landing_page$', self, name='landing_page')]
+
+  def templatePath(self):
+    """See base.RequestHandler.templatePath for specification."""
+    return 'melange/landing_page/landing_page.html'
+
+  def context(self, data, check, mutator):
+    """See base.RequestHandler.context for specification."""
+    # TODO(daniel): these models should not be imported directly here
+    from soc.modules.gsoc.models import program as soc_program_model
+    from soc.modules.gci.models import program as ci_program_model
+
+    program_sections = []
+
+    if data.site.latest_gsoc:
+      latest_soc = soc_program_model.GSoCProgram.get_by_key_name(
+          data.site.latest_gsoc)
+      if latest_soc:
+        program_sections.append(
+            ProgramSection(data, latest_soc,
+                SOC_PROGRAM_IMAGE_PATH % latest_soc.program_id))
+
+    if data.site.latest_gci:
+      latest_ci = ci_program_model.GCIProgram.get_by_key_name(
+          data.site.latest_gci)
+      if latest_ci:
+        program_sections.append(
+            ProgramSection(
+                data, latest_ci, CI_PROGRAM_IMAGE_PATH % latest_ci.program_id))
+
+    if len(program_sections) == 1:
+      # do not bother to show landing page if there is only one active program
+      # just redirect to the corresponding home page instead
+      raise exception.Redirect(program_sections[0].context()['homepage_url'])
+    else:
+      active_programs_counter = len([
+          program_section for program_section in program_sections
+              if program_section.isActive()])
+
+      contact_us_section = ContactUsSection(data)
+
+      return {
+          'active_programs_counter': active_programs_counter,
+          'contact_us_section': contact_us_section,
+          'program_sections': program_sections,
+          'page_name': LANDING_PAGE_NAME,
+          }
diff --git a/tests/app/soc/views/test_site.py b/tests/app/soc/views/test_site.py
new file mode 100644
index 0000000..67cc4ba
--- /dev/null
+++ b/tests/app/soc/views/test_site.py
@@ -0,0 +1,82 @@
+# Copyright 2013 the Melange authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Tests for site related views."""
+
+from soc.models import site as site_model
+from soc.modules.gci.models import program as gci_program_model
+from soc.modules.gsoc.models import program as gsoc_program_model
+from soc.modules.seeder.logic.seeder import logic as seeder_logic
+
+from tests import profile_utils
+from tests import test_utils
+
+
+class LandingPageTest(test_utils.DjangoTestCase):
+  """Unit tests for LandingPage class."""
+
+  def setUp(self):
+    """See unittest.TestCase.setUp for specification."""
+    # TODO(daniel): eliminate it when page is publicly accessible
+    user = profile_utils.seedUser(is_developer=True)
+    profile_utils.login(user)
+
+    site_properties = {'key_name': 'site'}
+    self.site = seeder_logic.seed(site_model.Site, properties=site_properties)
+
+    self.gsoc_program = seeder_logic.seed(gsoc_program_model.GSoCProgram)
+    self.gci_program = seeder_logic.seed(gci_program_model.GCIProgram)
+
+  def _assertPageTemplatesUsed(self, response):
+    """Asserts that all templates for the tested page are used."""
+    self.assertTemplateUsed(
+        response, 'melange/landing_page/_program_section.html')
+    self.assertTemplateUsed(
+        response, 'melange/landing_page/_contact_us_section.html')
+
+  def testPageLoads(self):
+    """Tests that page loads correctly."""
+    self.site.latest_gsoc = self.gsoc_program.key().name()
+    self.site.latest_gci = self.gci_program.key().name()
+    self.site.mailing_list = 'dev@test.com'
+    self.site.put()
+
+    response = self.get('/landing_page')
+    self.assertResponseOK(response)    
+    self._assertPageTemplatesUsed(response)
+
+  def testOneLatestProgram(self):
+    """Tests that redirect response is returned for one defined program."""
+    self.site.latest_gsoc = self.gsoc_program.key().name()
+    self.site.latest_gci = None
+    self.site.put()
+
+    response = self.get('/landing_page')
+    self.assertResponseRedirect(response)
+
+    self.site.latest_gsoc = None
+    self.site.latest_gci = self.gci_program.key().name()
+    self.site.put()
+
+    response = self.get('/landing_page')
+    self.assertResponseRedirect(response)
+
+  def testTwoLatestPrograms(self):
+    """Tests that redirect response is returned for one defined program."""
+    self.site.latest_gsoc = self.gsoc_program.key().name()
+    self.site.latest_gci = self.gci_program.key().name()
+    self.site.put()
+
+    response = self.get('/landing_page')
+    self.assertResponseOK(response)
