Merge branch 'daniel/list-of-accepted-students'
diff --git a/Gruntfile.js b/Gruntfile.js
index a5bb235..f43196a 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -17,7 +17,8 @@
         js_files: '<%= meta.src.js_dir %>/**/*.js',
         js_thirdparty_files: '<%= meta.src.js_dir %>/thirdparty/**/*.*',
         test_specs: '<%= meta.src.tests_dir %>/**/*_spec.js',
-        test_all: '<%= meta.src.tests_dir %>/**/*.js'
+        test_all: '<%= meta.src.tests_dir %>/**/*.js',
+        html_files: 'app/**/*.html',
       },
       reports: {
         reports_dir: 'reports/js_reports',
@@ -35,6 +36,14 @@
         css_gci_dir: '<%= meta.build.css_dir %>/gci'
       }
     },
+    clean: {
+      development: [
+        '<%= meta.src.css_soc_dir %>',
+      ],
+      production: [
+        '<%= meta.build.css_soc_dir %>',
+      ]
+    },
     jasmine: {
       coverage: {
         src: [
@@ -70,7 +79,6 @@
         },
         files: {
           /* Development common SOC files */
-          '<%= 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',
@@ -82,6 +90,7 @@
           '<%= meta.src.css_gsoc_dir %>/menu.css': '<%= meta.src.less_gsoc_dir %>/menu.less',
           '<%= meta.src.css_gsoc_dir %>/others.css': '<%= meta.src.less_gsoc_dir %>/others.less',
           '<%= meta.src.css_gsoc_dir %>/readonly.css': '<%= meta.src.less_gsoc_dir %>/readonly.less',
+          '<%= meta.src.css_gsoc_dir %>/search-page.css': '<%= meta.src.less_gsoc_dir %>/search-page.less',
           '<%= meta.src.css_gsoc_dir %>/structure.css': '<%= meta.src.less_gsoc_dir %>/structure.less',
           '<%= meta.src.css_gsoc_dir %>/surveys.css': '<%= meta.src.less_gsoc_dir %>/surveys.less',
           '<%= meta.src.css_gsoc_dir %>/tables.css': '<%= meta.src.less_gsoc_dir %>/tables.less',
@@ -101,11 +110,11 @@
       },
       production: {
         options: {
-          paths: ['<%= meta.src.less_dir %>']
+          paths: ['<%= meta.src.less_dir %>'],
+          compress: true,
         },
         files: {
           /* Build common SOC files */
-          '<%= 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',
@@ -117,6 +126,7 @@
           '<%= meta.build.css_gsoc_dir %>/menu.css': '<%= meta.src.less_gsoc_dir %>/menu.less',
           '<%= meta.build.css_gsoc_dir %>/others.css': '<%= meta.src.less_gsoc_dir %>/others.less',
           '<%= meta.build.css_gsoc_dir %>/readonly.css': '<%= meta.src.less_gsoc_dir %>/readonly.less',
+          '<%= meta.build.css_gsoc_dir %>/search-page.css': '<%= meta.src.less_gsoc_dir %>/search-page.less',
           '<%= meta.build.css_gsoc_dir %>/structure.css': '<%= meta.src.less_gsoc_dir %>/structure.less',
           '<%= meta.build.css_gsoc_dir %>/surveys.css': '<%= meta.src.less_gsoc_dir %>/surveys.less',
           '<%= meta.build.css_gsoc_dir %>/tables.css': '<%= meta.src.less_gsoc_dir %>/tables.less',
@@ -241,13 +251,27 @@
           'unique-headings': false
         }
       }
-    }
+    },
+    watch: {
+      options: {
+        livereload: true,
+      },
+      less: {
+        files: ['<%= meta.src.less_files %>'],
+        tasks: ['less:development'],
+      },
+      html: {
+        files: ['<%= meta.src.html_files %>']
+      }
+    },
   });
 
+  grunt.loadNpmTasks('grunt-contrib-clean');
   grunt.loadNpmTasks('grunt-contrib-jasmine');
   grunt.loadNpmTasks('grunt-contrib-jshint');
   grunt.loadNpmTasks('grunt-contrib-yuidoc');
   grunt.loadNpmTasks('grunt-contrib-less');
+  grunt.loadNpmTasks('grunt-contrib-watch');
   grunt.loadNpmTasks('grunt-lesslint');
   grunt.loadNpmTasks('grunt-plato');
 
@@ -255,5 +279,6 @@
   grunt.registerTask('documentation', ['yuidoc']);
   grunt.registerTask('plato_source', ['plato:source_files']);
   grunt.registerTask('plato_tests', ['plato:test_files']);
-  grunt.registerTask('build', ['less:production', 'plato_source', 'plato_tests', 'yuidoc']);
+  grunt.registerTask('build', ['clean:production', 'less:production', 'plato_source', 'plato_tests', 'yuidoc']);
+  grunt.registerTask('build_dev', ['clean:development', 'less:development']);
 };
diff --git a/app/app.yaml.template b/app/app.yaml.template
index c83e5ae..502e553 100644
--- a/app/app.yaml.template
+++ b/app/app.yaml.template
@@ -15,7 +15,7 @@
 # TODO(proto): uncomment and supply a Google App Engine application instance
 # application: FIXME
 # TODO(release): see the instructions in README about the "version:" field
-version: 2-1-20140723
+version: 2-1-20140730
 runtime: python27
 api_version: 1
 threadsafe: false
diff --git a/app/melange/content/html/melange/landing_page/landing_page.html b/app/melange/content/html/melange/landing_page/landing_page.html
index 01293dd..58b5bdd 100644
--- a/app/melange/content/html/melange/landing_page/landing_page.html
+++ b/app/melange/content/html/melange/landing_page/landing_page.html
@@ -14,7 +14,6 @@
 {% 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 }}
@@ -28,5 +27,4 @@
       {{ contact_us_section.render }}
     </section>
   {% endif %}
-</main>
 {% endblock page_content %}
diff --git a/app/melange/content/html/melange/root.html b/app/melange/content/html/melange/root.html
index 6999d40..85c206c 100644
--- a/app/melange/content/html/melange/root.html
+++ b/app/melange/content/html/melange/root.html
@@ -16,6 +16,7 @@
 <head>
   {% block meta %}
   <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1">
   {% endblock meta %}
 
   <title>{{ page_name|default:"No Page Name Present, please open an issue at http://code.google.com/p/soc/ " }}</title>
diff --git a/app/soc/content/js/melange.analytics.js b/app/soc/content/js/melange.analytics.js
index f313f4d..3d3a2fc 100644
--- a/app/soc/content/js/melange.analytics.js
+++ b/app/soc/content/js/melange.analytics.js
@@ -28,23 +28,20 @@
   melange.analytics = {};
 
   melange.analytics.initAnalytics = function(ga_tracking_num) {
-    var _gaq = _gaq || [];
-    _gaq.push(['_setAccount', ga_tracking_num]);
-    _gaq.push(['_setDomainName', 'none']);
-    _gaq.push(['_setAllowLinker', true]);
-    _gaq.push(['_trackPageview']);
+    // standard Google Analtyics javascript snippet:
+    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;
+      i[r]=i[r]|| function(){(i[r].q=i[r].q||[]).push(arguments)},
+      i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];
+      a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+      })(window,document,'script','//www.google-analytics.com/analytics.js',
+      'ga');
 
-    // Add pixel ratio if applicable.
-    if (window.devicePixelRatio) {
-      _gaq.push(['_setCustomVar', 1, 'Pixel Ratio', window.devicePixelRatio, 2 ]);
+    ga('create', ga_tracking_num, {
+      'allowLinker' : true
+    });
+    if (window.devicePixelRatio) {  // Add pixel ratio if applicable.
+      ga('set', 'dimension1', window.devicePixelRatio)
     }
-
-    var ga = document.createElement('script');
-
-    ga.type = 'text/javascript';
-    ga.async = true;
-    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
-    var s = document.getElementsByTagName('script')[0];
-    s.parentNode.insertBefore(ga, s);
+    ga('send', 'pageview');
   };
 }(window.melange));
diff --git a/app/soc/content/js/templates/modules/gsoc/program/messages.js b/app/soc/content/js/templates/modules/gsoc/program/messages.js
index fecfe7c..9962afd 100644
--- a/app/soc/content/js/templates/modules/gsoc/program/messages.js
+++ b/app/soc/content/js/templates/modules/gsoc/program/messages.js
@@ -20,7 +20,8 @@
      "melange-description-textarea", "mentor_welcome_msg",
      "melange-description-textarea", "accepted_students_msg",
      "melange-description-textarea", "accepted_students_welcome_msg",
-     "melange-description-textarea", "rejected_students_msg"
+     "melange-description-textarea", "rejected_students_msg",
+     "melange-description-textarea", "accepted_proposal_admin_msg"
     ]));
   }
 );
diff --git a/app/soc/content/less/soc/search_page.less b/app/soc/content/less/gsoc/search-page.less
similarity index 100%
rename from app/soc/content/less/soc/search_page.less
rename to app/soc/content/less/gsoc/search-page.less
diff --git a/app/soc/content/less/soc/elements/footer.less b/app/soc/content/less/soc/elements/footer.less
index a8b17e7..f0e524a 100644
--- a/app/soc/content/less/soc/elements/footer.less
+++ b/app/soc/content/less/soc/elements/footer.less
@@ -3,56 +3,52 @@
 // ==========================================================================
 
 .main-footer {
-	max-width: 700px;
-	padding: 1em 5% 10em;
-	margin: 0 auto;
-	text-align: center;
+  max-width: 700px;
+  margin: 0 auto;
+  padding: 25px;
+  text-align: center;
 
-	p {
-		font-size: 0.8em;
-		color: #999999;
-	}
+  p {
+    font-size: 0.8em;
+    color: #999999;
+  }
 
-	.melange-logo {
-		width: 70px;
-		margin: 0 2.5em 0 0.5em;
-	}
+  .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%;
-		}
-	}
+  .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%;
-		}
-	}
+  .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;
+  .powered, .empowered {
+    display: block;
+    margin-bottom: 1em;
 
-		@media @break-medium {
-			display: inline;
-			margin: 0;
-		}
-	}
+    @media(min-width: @screen-desktop) {
+      display: inline;
+      margin: 0;
+    }
+  }
 }
-
-
-
-
diff --git a/app/soc/content/less/soc/elements/general.less b/app/soc/content/less/soc/elements/general.less
index 7d24e92..1fa28f4 100644
--- a/app/soc/content/less/soc/elements/general.less
+++ b/app/soc/content/less/soc/elements/general.less
@@ -3,22 +3,13 @@
 // ==========================================================================
 
 body {
-	font-family: @serif;
-	font-size: 100%;
-	line-height: 1.5;
-	color: @web-black;
-	background: #F1F1F1;
-	position: relative;
-	min-width: 300px;
+  font-family: @font-family-sans-serif;
+  font-size: @font-size-base;
+  line-height: @line-height-base;
+  .container;
 }
 
 .main-content {
-	max-width: 960px;
-	padding: 0 5%;
-	margin: 0 auto;
-
-	@media @break-medium {
-		padding: 0;
-		width: 960px;
-	}
-}
\ No newline at end of file
+  .make-row;
+  .center-block;
+}
diff --git a/app/soc/content/less/soc/elements/grid.less b/app/soc/content/less/soc/elements/grid.less
deleted file mode 100644
index d5ccadb..0000000
--- a/app/soc/content/less/soc/elements/grid.less
+++ /dev/null
@@ -1,462 +0,0 @@
-//  
-//  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
index 24507b3..28bd887 100644
--- a/app/soc/content/less/soc/elements/header.less
+++ b/app/soc/content/less/soc/elements/header.less
@@ -3,12 +3,15 @@
 // ==========================================================================
 
 .main-header {
-	max-width: 700px;
-	padding: 3.5em 5% 3em;
-	margin: 0 auto;
-	text-align: center;
+  .center-block;
+  padding: 15px;
+  text-align: center;
 
-	p {
-		margin: 0;
-	}
+  @media(min-width: @screen-desktop) {
+    padding: 50px 15px;
+  }
+
+  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
index 2506cbd..3832363 100644
--- a/app/soc/content/less/soc/elements/headers-styles.less
+++ b/app/soc/content/less/soc/elements/headers-styles.less
@@ -3,43 +3,43 @@
 // ==========================================================================
 
 h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5 {
-	text-rendering: optimizelegibility;
+  text-rendering: optimizelegibility;
 }
 
 h1, .h1 {
-	font-size: 2.5em;
-	line-height: 1em;
-	font-weight: 300;
-	margin: 0 0 .2em 0;
-	color: #333333;
+  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;
+  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;
+  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;
+  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
+  font-size: 0.846em;
+  line-height: 2.09em;
+  text-transform: uppercase;
+  font-weight: 600;
+}
diff --git a/app/soc/content/less/soc/elements/helper.less b/app/soc/content/less/soc/elements/helper.less
index a80ff87..c8eae10 100644
--- a/app/soc/content/less/soc/elements/helper.less
+++ b/app/soc/content/less/soc/elements/helper.less
@@ -1,6 +1,6 @@
 
 // uncomment this if you're feeling daring
-// * { 
+// * {
 //   @include box-sizing(border-box);
 // }
 
@@ -90,4 +90,4 @@
 
 .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
index 95c67c5..ea26c56 100644
--- a/app/soc/content/less/soc/elements/latest.less
+++ b/app/soc/content/less/soc/elements/latest.less
@@ -1,31 +1,31 @@
 .latest {
-	max-width: 700px;
-	padding: 1em 5% 3em;
-	margin: 0 auto;
-	text-align: center;
+  max-width: 700px;
+  padding: 1em 5% 3em;
+  margin: 0 auto;
+  text-align: center;
 
-	h3 {
-		margin: 0 0 1em 0;
-	}
+  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;
-	}
+  .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
+  p {
+    margin-top: 0;
+  }
+}
diff --git a/app/soc/content/less/soc/elements/link-styles.less b/app/soc/content/less/soc/elements/link-styles.less
index 43556e0..b40e339 100644
--- a/app/soc/content/less/soc/elements/link-styles.less
+++ b/app/soc/content/less/soc/elements/link-styles.less
@@ -1,9 +1,3 @@
-a, a:link, a:visited, a:active {
+a, a:hover, 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
index a1d0f29..61b5709 100644
--- a/app/soc/content/less/soc/elements/projects.less
+++ b/app/soc/content/less/soc/elements/projects.less
@@ -4,347 +4,334 @@
 @import "common.less";
 
 .projects {
-	max-width: 460px;
-	margin: 0 auto 2em;
-	position: relative;
+  margin: 0 auto 2em;
+  position: relative;
 
-	@media @break-medium {
-		width: 960px;
-		max-width: 100%;
-		.clearfix;
-	}
+  @media(min-width: @screen-desktop) {
+    width: 960px;
+  }
 }
 
 .project {
-	background: white;
-	.box-shadow(rgba(0,0,0,.3) 0 0 6px);
-	position: relative;
-	margin: 0 0 3em 0;
-	text-align: center;
+  background: white;
+  .lh-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;
-	}
+  .no-boxshadow & {
+    border: 1px solid #ccc;
+  }
 
-	&:hover {
-		.box-shadow(rgba(0,0,0,.6) 0 0 6px);
-	}
+  &:hover {
+    .lh-box-shadow(rgba(0,0,0,.6) 0 0 6px);
+  }
 
-	.no-boxshadow &:hover {
-		border-color: #aaa;
-	}
+  .no-boxshadow &:hover {
+    border-color: #aaa;
+  }
 
-	h2 {
-		color: @link-color;
-	}
+  h2 {
+    color: @link-color;
+  }
 
-	a:hover h2 {
-		color: @link-color-hover;
-	}
+  a:hover h2 {
+    color: @link-hover-color;
+  }
 
-	@media @break-medium {
-		float: left;
-		width: 460px;
-		margin: 10px;
-	}
+  @media(min-width: @screen-desktop) {
+    float: left;
+    width: 460px;
+    margin: 10px;
+  }
 
-	a {
-		display: block;
-		width: 100%;
-		height: 100%;
-	}
+  a {
+    display: block;
+    width: 100%;
+    height: 100%;
+  }
 }
 
 .project-button {
-	font-size: 1.125em;
-	line-height: 1.25em;
-	margin: 0 auto .5em;
-	width: 65px;
+  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;
-	}
+  &: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');		
-	}
+  .no-svg &:before {
+    background-image: url('@{images_soc_location}/house-icon.png');
+  }
 
-	.active & {
-		color: @google-orange;
+  a:hover &:before {
+    background: url('@{images_soc_location}/house-icon.svg');
+    background-position: 100%;
+  }
 
-		&:before {
-			background-position: 100%;
-		}
-	}
+  .no-svg a:hover &:before {
+    background-image: url('@{images_soc_location}/house-icon.png');
+    background-position: 100%;
+  }
 
-	a:hover & {
-		&:before {
-			background: url('@{images_soc_location}/house-icon.svg');
-			background-position: 100%;
-		}
+  .active 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');		
-	}
+  .no-svg .active a:hover &:before {
+    background-image: url('@{images_soc_location}/house-icon.png');
+    background-position: 100%;
+  }
 
 }
 
 .project-info {
-	padding: 20px;
+  padding: 20px;
 }
 
 .project-description {
-	color: @web-black;
-	margin: 0 20px 2em;
-	font-size: .8em;
+  color: @text-color;
+  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);
+  background: url('@{images_soc_location}/non-bg.png');
+  .lh-background-size(cover);
+  padding: 20px;
+  height: 275px;
+  .lh-box-sizing(border-box);
 
-	img {
-		max-height: 100%;
-	}
+  img {
+    max-height: 100%;
+  }
 
-	.active & {
-		background: url('@{images_soc_location}/active-bg.jpg');
-		.background-size(cover);
-	}
+  .active & {
+    background: url('@{images_soc_location}/active-bg.jpg');
+    .lh-background-size(cover);
+  }
 
-	a:hover & {
-		background: url('@{images_soc_location}/non-bg-hover.png');
-		.background-size(cover);
+  a:hover & {
+    background: url('@{images_soc_location}/non-bg-hover.png');
+    .lh-background-size(cover);
 
-		.active & {
-			background: url('@{images_soc_location}/active-bg-hover.png');
-			.background-size(cover);
-		}
-	}
+    .active & {
+      background: url('@{images_soc_location}/active-bg-hover.png');
+      .lh-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;
+  display: none;
+  position: absolute;
+  top: 0;
+  right: 20px;
+  width: 100px;
+  background: #F19906;
+  .lh-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;
-	}
+  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;
-	}
+  .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');
-	}
+  .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;	
-	}
+  .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');
-	}
+  .no-svg & .triangle-bottom {
+    background-image: url('@{images_soc_location}/arrow-bottom.png');
+  }
 
-	.active & {
-		display: block;
-	}
+  .active & {
+    display: block;
+  }
 }
 
 .unactive-description {
-	display: none;
-	margin: 5px 0 0 0;
+  display: none;
+  margin: 5px 0 0 0;
 }
 
 // special only one of them is active styles
 .one-active {
 
-	@media @break-medium {
+  @media(min-width: @screen-desktop) {
 
-		// this makes all projects the size of the small one
-		/////////////////////////////////////////////////////
-		.project {
-			width: 300px; 
-			float: right;
-			margin-top: 70px;
-			min-height: 360px;
-		}
+    // 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-image {
+      height: 190px;
+    }
 
-		.project-title {
-			padding: 0 10px;
-		}
-		.project-info {
-			padding: 20px 35px 0;
-		}
-		.project-description {
-			margin: 0 0 1.5em 0;
+    .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;
-				}
-			}
-		}
+      p {
+        display: none;
+        &.unactive-description {
+          display: block;
+        }
+      }
+    }
 
-		.project-button {
-			font-size: .9em;
-			width: 50px;
+    .project-button {
+      font-size: .9em;
+      width: 50px;
 
-			&:before {
-				background: url('@{images_soc_location}/house-icon-small.svg');
-				width: 14px;
-				height: 14px;
-			}
-		}
+      &: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');
-		}
+    .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}/house-icon-small.svg');
-			width: 14px;
-			height: 14px;
-			background-position: 100%;
-		}
+    a:hover .project-button:before {
+      background: url('@{images_soc_location}/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');
-		}
+    .no-svg & a:hover .project-button:before {
+      background-image: url('@{images_soc_location}/house-icon-small.png');
+      background-position: 100%;
+    }
 
-		// this makes the active project look big
-		/////////////////////////////////////////////////////
-		.active {
+    // 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;
+      &.project {
+        width: 660px;
+        z-index: 100;
+        height: 400px;
+        position: absolute;
+        left: 0;
+        top: 0;
+        margin-top: 10px;
 
-				a {
-					.clearfix;
-				}
-			}
+        a {
+          .clearfix;
+        }
+      }
 
-			.project-image {
-				float: left;
-				width: 400px;
-				height: 100%;
-				padding: 50px 40px;
-			}
+      .project-image {
+        float: left;
+        width: 400px;
+        height: 100%;
+        padding: 50px 40px;
+      }
 
-			.project-info {
-				text-align: left;
-				padding: 50px 20px 20px 420px;
-			}
+      .project-info {
+        text-align: left;
+        padding: 50px 20px 20px 420px;
+      }
 
-			.project-title {
-				padding: 0;
-				font-size: 1.95em;
-			}
+      .project-title {
+        padding: 0;
+        font-size: 1.95em;
+      }
 
-			.project-description {
-				margin: 0 0 1.5em 0;
-	
-				p {
-					display: block;
-					&.unactive-description {
-						display: none;
-					}
-				}
-			}
+      .project-description {
+        margin: 0 0 1.5em 0;
 
-			.active-banner {
-				right: 140px;
-			}
+        p {
+          display: block;
+          &.unactive-description {
+            display: none;
+          }
+        }
+      }
 
-			.project-button {
-				position: absolute;
-				bottom: 20px;
-				font-size: 1em;
-				width: 60px;
+      .active-banner {
+        right: 140px;
+      }
 
-				&:before {
-					background: url('@{images_soc_location}/house-icon.svg');
-					width: 18px;
-					height: 18px;
-					background-position: 100%;
-				}
-			}
+      .project-button {
+        position: absolute;
+        bottom: 20px;
+        font-size: 1em;
+        width: 60px;
 
-			.no-svg & .project-button:before {
-				background-image: url('@{images_soc_location}/house-icon.png');
-			}
+        &:before {
+          background: url('@{images_soc_location}/house-icon.svg');
+          width: 18px;
+          height: 18px;
+        }
+      }
 
-			a:hover .project-button:before {
-				background: url('@{images_soc_location}/house-icon.svg');
-				width: 18px;
-				height: 18px;
-				background-position: 0;
-			}
+      .no-svg & .project-button:before {
+        background-image: url('@{images_soc_location}/house-icon.png');
+      }
 
-			.no-svg & a:hover .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: 100%;
+      }
 
-		}
-	}
+      .no-svg & a:hover .project-button:before {
+        background-image: url('@{images_soc_location}/house-icon.png');
+        background-position: 100%;
+      }
+
+    }
+  }
 }
diff --git a/app/soc/content/less/soc/elements/social-media.less b/app/soc/content/less/soc/elements/social-media.less
index 70428d3..0d3d56c 100644
--- a/app/soc/content/less/soc/elements/social-media.less
+++ b/app/soc/content/less/soc/elements/social-media.less
@@ -1,61 +1,61 @@
 .social-media {
-	max-width: 700px;
-	padding: 1em 5% 1.4em;
-	margin: 0 auto;
-	text-align: center;	
+  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;
-	}
+  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;
-	}
+  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%;
-		}
-	}
+  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');
-	}
+  .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');
-	}
+  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
+  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');
+  }
+}
diff --git a/app/soc/content/less/soc/ie8-and-down.less b/app/soc/content/less/soc/ie8-and-down.less
deleted file mode 100644
index ef71b85..0000000
--- a/app/soc/content/less/soc/ie8-and-down.less
+++ /dev/null
@@ -1,177 +0,0 @@
-// ie 8 and down styles!
-
-/* import mixins again */
-@import "mixins.less";
-
-//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
deleted file mode 100755
index a822a82..0000000
--- a/app/soc/content/less/soc/lesshat.less
+++ /dev/null
@@ -1,2198 +0,0 @@
-//  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
index 9793028..365a899 100755
--- a/app/soc/content/less/soc/main.less
+++ b/app/soc/content/less/soc/main.less
@@ -1,17 +1,22 @@
-// 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.less";
+@import "thirdparty/bootstrap/normalize.less";
 
-// import mixins and variables (special Sass stuff)
+// required for bootstrap grid
+@import "thirdparty/bootstrap/variables.less";
+@import "thirdparty/bootstrap/mixins.less";
+
+// import bootstrap grid
+@import "thirdparty/bootstrap/grid.less";
+
+// import scaffolding from bootstrap
+@import "thirdparty/bootstrap/scaffolding.less";
+
+// import mixins and variables
+@import "variables.less";
 @import "mixins.less";
 
 // import site partials
 @import "elements/helper.less";
-@import "elements/grid.less";
 @import "elements/link-styles.less";
 @import "elements/headers-styles.less";
 
@@ -25,6 +30,4 @@
 
 
 // print stylesheet
-@media print {
-	@import "print.less";
-}
+@import "thirdparty/bootstrap/print.less";
diff --git a/app/soc/content/less/soc/mixins.less b/app/soc/content/less/soc/mixins.less
index 8237a91..62dde3a 100755
--- a/app/soc/content/less/soc/mixins.less
+++ b/app/soc/content/less/soc/mixins.less
@@ -1,55 +1,2 @@
-
-
-@import "lesshat.less";
-
-// ==========================================================================
-// 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
+@import "thirdparty/lesshat/lesshat-prefixed.less";
+@import "thirdparty/bootstrap/mixins/clearfix.less";
diff --git a/app/soc/content/less/soc/normalize.less b/app/soc/content/less/soc/normalize.less
deleted file mode 100755
index 9528d00..0000000
--- a/app/soc/content/less/soc/normalize.less
+++ /dev/null
@@ -1,536 +0,0 @@
-/*! 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
deleted file mode 100755
index 72ef681..0000000
--- a/app/soc/content/less/soc/print.less
+++ /dev/null
@@ -1,78 +0,0 @@
-//******************************************************************
-//  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/content/less/soc/variables.less b/app/soc/content/less/soc/variables.less
new file mode 100644
index 0000000..15cbfda
--- /dev/null
+++ b/app/soc/content/less/soc/variables.less
@@ -0,0 +1,25 @@
+// ==========================================================================
+// Colors
+
+@alert-yellow: #ebe16f;
+@alert-red: #fbe3e4;
+@alert-green: #e6efc2;
+@alert-blue: #d5edf8;
+
+@black: #000;
+@white: #fff;
+
+@melange-blue: #1f93cf;
+@melange-orange: #f29b07;
+
+// Override bootstrap scaffolding variables
+@body-bg: #f1f1f1;
+@text-color: #666666;
+@link-color: @melange-blue;
+@link-hover-color: @melange-orange;
+
+// Define bootstrap's named variables for main property.
+@font-size-base: 16px;
+@line-height-base: 1.5;
+@font-family-sans-serif: 'Open Sans', "Helvetica Neue", Helvetica, Arial, sans-serif;
+@font-family-serif: @font-family-sans-serif;
diff --git a/app/soc/content/less/thirdparty/bootstrap/alerts.less b/app/soc/content/less/thirdparty/bootstrap/alerts.less
new file mode 100755
index 0000000..df070b8
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/alerts.less
@@ -0,0 +1,68 @@
+//
+// Alerts
+// --------------------------------------------------
+
+
+// Base styles
+// -------------------------
+
+.alert {
+  padding: @alert-padding;
+  margin-bottom: @line-height-computed;
+  border: 1px solid transparent;
+  border-radius: @alert-border-radius;
+
+  // Headings for larger alerts
+  h4 {
+    margin-top: 0;
+    // Specified for the h4 to prevent conflicts of changing @headings-color
+    color: inherit;
+  }
+  // Provide class for links that match alerts
+  .alert-link {
+    font-weight: @alert-link-font-weight;
+  }
+
+  // Improve alignment and spacing of inner content
+  > p,
+  > ul {
+    margin-bottom: 0;
+  }
+  > p + p {
+    margin-top: 5px;
+  }
+}
+
+// Dismissible alerts
+//
+// Expand the right padding and account for the close button's positioning.
+
+.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.
+.alert-dismissible {
+  padding-right: (@alert-padding + 20);
+
+  // Adjust close link position
+  .close {
+    position: relative;
+    top: -2px;
+    right: -21px;
+    color: inherit;
+  }
+}
+
+// Alternate styles
+//
+// Generate contextual modifier classes for colorizing the alert.
+
+.alert-success {
+  .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);
+}
+.alert-info {
+  .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);
+}
+.alert-warning {
+  .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);
+}
+.alert-danger {
+  .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/badges.less b/app/soc/content/less/thirdparty/bootstrap/badges.less
new file mode 100755
index 0000000..20624f3
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/badges.less
@@ -0,0 +1,55 @@
+//
+// Badges
+// --------------------------------------------------
+
+
+// Base class
+.badge {
+  display: inline-block;
+  min-width: 10px;
+  padding: 3px 7px;
+  font-size: @font-size-small;
+  font-weight: @badge-font-weight;
+  color: @badge-color;
+  line-height: @badge-line-height;
+  vertical-align: baseline;
+  white-space: nowrap;
+  text-align: center;
+  background-color: @badge-bg;
+  border-radius: @badge-border-radius;
+
+  // Empty badges collapse automatically (not available in IE8)
+  &:empty {
+    display: none;
+  }
+
+  // Quick fix for badges in buttons
+  .btn & {
+    position: relative;
+    top: -1px;
+  }
+  .btn-xs & {
+    top: 0;
+    padding: 1px 5px;
+  }
+
+  // Hover state, but only for links
+  a& {
+    &:hover,
+    &:focus {
+      color: @badge-link-hover-color;
+      text-decoration: none;
+      cursor: pointer;
+    }
+  }
+
+  // Account for badges in navs
+  a.list-group-item.active > &,
+  .nav-pills > .active > a > & {
+    color: @badge-active-color;
+    background-color: @badge-active-bg;
+  }
+  .nav-pills > li > a > & {
+    margin-left: 3px;
+  }
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/bootstrap.less b/app/soc/content/less/thirdparty/bootstrap/bootstrap.less
new file mode 100755
index 0000000..61b7747
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/bootstrap.less
@@ -0,0 +1,50 @@
+// Core variables and mixins
+@import "variables.less";
+@import "mixins.less";
+
+// Reset and dependencies
+@import "normalize.less";
+@import "print.less";
+@import "glyphicons.less";
+
+// Core CSS
+@import "scaffolding.less";
+@import "type.less";
+@import "code.less";
+@import "grid.less";
+@import "tables.less";
+@import "forms.less";
+@import "buttons.less";
+
+// Components
+@import "component-animations.less";
+@import "dropdowns.less";
+@import "button-groups.less";
+@import "input-groups.less";
+@import "navs.less";
+@import "navbar.less";
+@import "breadcrumbs.less";
+@import "pagination.less";
+@import "pager.less";
+@import "labels.less";
+@import "badges.less";
+@import "jumbotron.less";
+@import "thumbnails.less";
+@import "alerts.less";
+@import "progress-bars.less";
+@import "media.less";
+@import "list-group.less";
+@import "panels.less";
+@import "responsive-embed.less";
+@import "wells.less";
+@import "close.less";
+
+// Components w/ JavaScript
+@import "modals.less";
+@import "tooltip.less";
+@import "popovers.less";
+@import "carousel.less";
+
+// Utility classes
+@import "utilities.less";
+@import "responsive-utilities.less";
diff --git a/app/soc/content/less/thirdparty/bootstrap/breadcrumbs.less b/app/soc/content/less/thirdparty/bootstrap/breadcrumbs.less
new file mode 100755
index 0000000..cb01d50
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/breadcrumbs.less
@@ -0,0 +1,26 @@
+//
+// Breadcrumbs
+// --------------------------------------------------
+
+
+.breadcrumb {
+  padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;
+  margin-bottom: @line-height-computed;
+  list-style: none;
+  background-color: @breadcrumb-bg;
+  border-radius: @border-radius-base;
+
+  > li {
+    display: inline-block;
+
+    + li:before {
+      content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space
+      padding: 0 5px;
+      color: @breadcrumb-color;
+    }
+  }
+
+  > .active {
+    color: @breadcrumb-active-color;
+  }
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/button-groups.less b/app/soc/content/less/thirdparty/bootstrap/button-groups.less
new file mode 100755
index 0000000..7021ecd
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/button-groups.less
@@ -0,0 +1,240 @@
+//
+// Button groups
+// --------------------------------------------------
+
+// Make the div behave like a button
+.btn-group,
+.btn-group-vertical {
+  position: relative;
+  display: inline-block;
+  vertical-align: middle; // match .btn alignment given font-size hack above
+  > .btn {
+    position: relative;
+    float: left;
+    // Bring the "active" button to the front
+    &:hover,
+    &:focus,
+    &:active,
+    &.active {
+      z-index: 2;
+    }
+    &:focus {
+      // Remove focus outline when dropdown JS adds it after closing the menu
+      outline: 0;
+    }
+  }
+}
+
+// Prevent double borders when buttons are next to each other
+.btn-group {
+  .btn + .btn,
+  .btn + .btn-group,
+  .btn-group + .btn,
+  .btn-group + .btn-group {
+    margin-left: -1px;
+  }
+}
+
+// Optional: Group multiple button groups together for a toolbar
+.btn-toolbar {
+  margin-left: -5px; // Offset the first child's margin
+  &:extend(.clearfix all);
+
+  .btn-group,
+  .input-group {
+    float: left;
+  }
+  > .btn,
+  > .btn-group,
+  > .input-group {
+    margin-left: 5px;
+  }
+}
+
+.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
+  border-radius: 0;
+}
+
+// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match
+.btn-group > .btn:first-child {
+  margin-left: 0;
+  &:not(:last-child):not(.dropdown-toggle) {
+    .border-right-radius(0);
+  }
+}
+// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it
+.btn-group > .btn:last-child:not(:first-child),
+.btn-group > .dropdown-toggle:not(:first-child) {
+  .border-left-radius(0);
+}
+
+// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)
+.btn-group > .btn-group {
+  float: left;
+}
+.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
+  border-radius: 0;
+}
+.btn-group > .btn-group:first-child {
+  > .btn:last-child,
+  > .dropdown-toggle {
+    .border-right-radius(0);
+  }
+}
+.btn-group > .btn-group:last-child > .btn:first-child {
+  .border-left-radius(0);
+}
+
+// On active and open, don't show outline
+.btn-group .dropdown-toggle:active,
+.btn-group.open .dropdown-toggle {
+  outline: 0;
+}
+
+
+// Sizing
+//
+// Remix the default button sizing classes into new ones for easier manipulation.
+
+.btn-group-xs > .btn { &:extend(.btn-xs); }
+.btn-group-sm > .btn { &:extend(.btn-sm); }
+.btn-group-lg > .btn { &:extend(.btn-lg); }
+
+
+// Split button dropdowns
+// ----------------------
+
+// Give the line between buttons some depth
+.btn-group > .btn + .dropdown-toggle {
+  padding-left: 8px;
+  padding-right: 8px;
+}
+.btn-group > .btn-lg + .dropdown-toggle {
+  padding-left: 12px;
+  padding-right: 12px;
+}
+
+// The clickable button for toggling the menu
+// Remove the gradient and set the same inset shadow as the :active state
+.btn-group.open .dropdown-toggle {
+  .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
+
+  // Show no shadow for `.btn-link` since it has no other button styles.
+  &.btn-link {
+    .box-shadow(none);
+  }
+}
+
+
+// Reposition the caret
+.btn .caret {
+  margin-left: 0;
+}
+// Carets in other button sizes
+.btn-lg .caret {
+  border-width: @caret-width-large @caret-width-large 0;
+  border-bottom-width: 0;
+}
+// Upside down carets for .dropup
+.dropup .btn-lg .caret {
+  border-width: 0 @caret-width-large @caret-width-large;
+}
+
+
+// Vertical button groups
+// ----------------------
+
+.btn-group-vertical {
+  > .btn,
+  > .btn-group,
+  > .btn-group > .btn {
+    display: block;
+    float: none;
+    width: 100%;
+    max-width: 100%;
+  }
+
+  // Clear floats so dropdown menus can be properly placed
+  > .btn-group {
+    &:extend(.clearfix all);
+    > .btn {
+      float: none;
+    }
+  }
+
+  > .btn + .btn,
+  > .btn + .btn-group,
+  > .btn-group + .btn,
+  > .btn-group + .btn-group {
+    margin-top: -1px;
+    margin-left: 0;
+  }
+}
+
+.btn-group-vertical > .btn {
+  &:not(:first-child):not(:last-child) {
+    border-radius: 0;
+  }
+  &:first-child:not(:last-child) {
+    border-top-right-radius: @border-radius-base;
+    .border-bottom-radius(0);
+  }
+  &:last-child:not(:first-child) {
+    border-bottom-left-radius: @border-radius-base;
+    .border-top-radius(0);
+  }
+}
+.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
+  border-radius: 0;
+}
+.btn-group-vertical > .btn-group:first-child:not(:last-child) {
+  > .btn:last-child,
+  > .dropdown-toggle {
+    .border-bottom-radius(0);
+  }
+}
+.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
+  .border-top-radius(0);
+}
+
+
+
+// Justified button groups
+// ----------------------
+
+.btn-group-justified {
+  display: table;
+  width: 100%;
+  table-layout: fixed;
+  border-collapse: separate;
+  > .btn,
+  > .btn-group {
+    float: none;
+    display: table-cell;
+    width: 1%;
+  }
+  > .btn-group .btn {
+    width: 100%;
+  }
+
+  > .btn-group .dropdown-menu {
+    left: auto;
+  }
+}
+
+
+// Checkbox and radio options
+//
+// In order to support the browser's form validation feedback, powered by the
+// `required` attribute, we have to "hide" the inputs via `opacity`. We cannot
+// use `display: none;` or `visibility: hidden;` as that also hides the popover.
+// This way, we ensure a DOM element is visible to position the popover from.
+//
+// See https://github.com/twbs/bootstrap/pull/12794 for more.
+
+[data-toggle="buttons"] > .btn > input[type="radio"],
+[data-toggle="buttons"] > .btn > input[type="checkbox"] {
+  position: absolute;
+  z-index: -1;
+  .opacity(0);
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/buttons.less b/app/soc/content/less/thirdparty/bootstrap/buttons.less
new file mode 100755
index 0000000..492bdc6
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/buttons.less
@@ -0,0 +1,157 @@
+//
+// Buttons
+// --------------------------------------------------
+
+
+// Base styles
+// --------------------------------------------------
+
+.btn {
+  display: inline-block;
+  margin-bottom: 0; // For input.btn
+  font-weight: @btn-font-weight;
+  text-align: center;
+  vertical-align: middle;
+  cursor: pointer;
+  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
+  border: 1px solid transparent;
+  white-space: nowrap;
+  .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base);
+  .user-select(none);
+
+  &,
+  &:active,
+  &.active {
+    &:focus {
+      .tab-focus();
+    }
+  }
+
+  &:hover,
+  &:focus {
+    color: @btn-default-color;
+    text-decoration: none;
+  }
+
+  &:active,
+  &.active {
+    outline: 0;
+    background-image: none;
+    .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
+  }
+
+  &.disabled,
+  &[disabled],
+  fieldset[disabled] & {
+    cursor: not-allowed;
+    pointer-events: none; // Future-proof disabling of clicks
+    .opacity(.65);
+    .box-shadow(none);
+  }
+}
+
+
+// Alternate buttons
+// --------------------------------------------------
+
+.btn-default {
+  .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);
+}
+.btn-primary {
+  .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);
+}
+// Success appears as green
+.btn-success {
+  .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);
+}
+// Info appears as blue-green
+.btn-info {
+  .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);
+}
+// Warning appears as orange
+.btn-warning {
+  .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);
+}
+// Danger and error appear as red
+.btn-danger {
+  .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);
+}
+
+
+// Link buttons
+// -------------------------
+
+// Make a button look and behave like a link
+.btn-link {
+  color: @link-color;
+  font-weight: normal;
+  cursor: pointer;
+  border-radius: 0;
+
+  &,
+  &:active,
+  &[disabled],
+  fieldset[disabled] & {
+    background-color: transparent;
+    .box-shadow(none);
+  }
+  &,
+  &:hover,
+  &:focus,
+  &:active {
+    border-color: transparent;
+  }
+  &:hover,
+  &:focus {
+    color: @link-hover-color;
+    text-decoration: underline;
+    background-color: transparent;
+  }
+  &[disabled],
+  fieldset[disabled] & {
+    &:hover,
+    &:focus {
+      color: @btn-link-disabled-color;
+      text-decoration: none;
+    }
+  }
+}
+
+
+// Button Sizes
+// --------------------------------------------------
+
+.btn-lg {
+  // line-height: ensure even-numbered height of button next to large input
+  .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);
+}
+.btn-sm {
+  // line-height: ensure proper height of button next to small input
+  .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);
+}
+.btn-xs {
+  .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small);
+}
+
+
+// Block button
+// --------------------------------------------------
+
+.btn-block {
+  display: block;
+  width: 100%;
+}
+
+// Vertically space out multiple block buttons
+.btn-block + .btn-block {
+  margin-top: 5px;
+}
+
+// Specificity overrides
+input[type="submit"],
+input[type="reset"],
+input[type="button"] {
+  &.btn-block {
+    width: 100%;
+  }
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/carousel.less b/app/soc/content/less/thirdparty/bootstrap/carousel.less
new file mode 100755
index 0000000..1644ddf
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/carousel.less
@@ -0,0 +1,243 @@
+//
+// Carousel
+// --------------------------------------------------
+
+
+// Wrapper for the slide container and indicators
+.carousel {
+  position: relative;
+}
+
+.carousel-inner {
+  position: relative;
+  overflow: hidden;
+  width: 100%;
+
+  > .item {
+    display: none;
+    position: relative;
+    .transition(.6s ease-in-out left);
+
+    // Account for jankitude on images
+    > img,
+    > a > img {
+      &:extend(.img-responsive);
+      line-height: 1;
+    }
+  }
+
+  > .active,
+  > .next,
+  > .prev {
+    display: block;
+  }
+
+  > .active {
+    left: 0;
+  }
+
+  > .next,
+  > .prev {
+    position: absolute;
+    top: 0;
+    width: 100%;
+  }
+
+  > .next {
+    left: 100%;
+  }
+  > .prev {
+    left: -100%;
+  }
+  > .next.left,
+  > .prev.right {
+    left: 0;
+  }
+
+  > .active.left {
+    left: -100%;
+  }
+  > .active.right {
+    left: 100%;
+  }
+
+}
+
+// Left/right controls for nav
+// ---------------------------
+
+.carousel-control {
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  width: @carousel-control-width;
+  .opacity(@carousel-control-opacity);
+  font-size: @carousel-control-font-size;
+  color: @carousel-control-color;
+  text-align: center;
+  text-shadow: @carousel-text-shadow;
+  // We can't have this transition here because WebKit cancels the carousel
+  // animation if you trip this while in the middle of another animation.
+
+  // Set gradients for backgrounds
+  &.left {
+    #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));
+  }
+  &.right {
+    left: auto;
+    right: 0;
+    #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));
+  }
+
+  // Hover/focus state
+  &:hover,
+  &:focus {
+    outline: 0;
+    color: @carousel-control-color;
+    text-decoration: none;
+    .opacity(.9);
+  }
+
+  // Toggles
+  .icon-prev,
+  .icon-next,
+  .glyphicon-chevron-left,
+  .glyphicon-chevron-right {
+    position: absolute;
+    top: 50%;
+    z-index: 5;
+    display: inline-block;
+  }
+  .icon-prev,
+  .glyphicon-chevron-left {
+    left: 50%;
+    margin-left: -10px;
+  }
+  .icon-next,
+  .glyphicon-chevron-right {
+    right: 50%;
+    margin-right: -10px;
+  }
+  .icon-prev,
+  .icon-next {
+    width:  20px;
+    height: 20px;
+    margin-top: -10px;
+    font-family: serif;
+  }
+
+
+  .icon-prev {
+    &:before {
+      content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)
+    }
+  }
+  .icon-next {
+    &:before {
+      content: '\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)
+    }
+  }
+}
+
+// Optional indicator pips
+//
+// Add an unordered list with the following class and add a list item for each
+// slide your carousel holds.
+
+.carousel-indicators {
+  position: absolute;
+  bottom: 10px;
+  left: 50%;
+  z-index: 15;
+  width: 60%;
+  margin-left: -30%;
+  padding-left: 0;
+  list-style: none;
+  text-align: center;
+
+  li {
+    display: inline-block;
+    width:  10px;
+    height: 10px;
+    margin: 1px;
+    text-indent: -999px;
+    border: 1px solid @carousel-indicator-border-color;
+    border-radius: 10px;
+    cursor: pointer;
+
+    // IE8-9 hack for event handling
+    //
+    // Internet Explorer 8-9 does not support clicks on elements without a set
+    // `background-color`. We cannot use `filter` since that's not viewed as a
+    // background color by the browser. Thus, a hack is needed.
+    //
+    // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we
+    // set alpha transparency for the best results possible.
+    background-color: #000 \9; // IE8
+    background-color: rgba(0,0,0,0); // IE9
+  }
+  .active {
+    margin: 0;
+    width:  12px;
+    height: 12px;
+    background-color: @carousel-indicator-active-bg;
+  }
+}
+
+// Optional captions
+// -----------------------------
+// Hidden by default for smaller viewports
+.carousel-caption {
+  position: absolute;
+  left: 15%;
+  right: 15%;
+  bottom: 20px;
+  z-index: 10;
+  padding-top: 20px;
+  padding-bottom: 20px;
+  color: @carousel-caption-color;
+  text-align: center;
+  text-shadow: @carousel-text-shadow;
+  & .btn {
+    text-shadow: none; // No shadow for button elements in carousel-caption
+  }
+}
+
+
+// Scale up controls for tablets and up
+@media screen and (min-width: @screen-sm-min) {
+
+  // Scale up the controls a smidge
+  .carousel-control {
+    .glyphicon-chevron-left,
+    .glyphicon-chevron-right,
+    .icon-prev,
+    .icon-next {
+      width: 30px;
+      height: 30px;
+      margin-top: -15px;
+      font-size: 30px;
+    }
+    .glyphicon-chevron-left,
+    .icon-prev {
+      margin-left: -15px;
+    }
+    .glyphicon-chevron-right,
+    .icon-next {
+      margin-right: -15px;
+    }
+  }
+
+  // Show and left align the captions
+  .carousel-caption {
+    left: 20%;
+    right: 20%;
+    padding-bottom: 30px;
+  }
+
+  // Move up the indicators
+  .carousel-indicators {
+    bottom: 20px;
+  }
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/close.less b/app/soc/content/less/thirdparty/bootstrap/close.less
new file mode 100755
index 0000000..9b4e74f
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/close.less
@@ -0,0 +1,33 @@
+//
+// Close icons
+// --------------------------------------------------
+
+
+.close {
+  float: right;
+  font-size: (@font-size-base * 1.5);
+  font-weight: @close-font-weight;
+  line-height: 1;
+  color: @close-color;
+  text-shadow: @close-text-shadow;
+  .opacity(.2);
+
+  &:hover,
+  &:focus {
+    color: @close-color;
+    text-decoration: none;
+    cursor: pointer;
+    .opacity(.5);
+  }
+
+  // Additional properties for button version
+  // iOS requires the button element instead of an anchor tag.
+  // If you want the anchor version, it requires `href="#"`.
+  button& {
+    padding: 0;
+    cursor: pointer;
+    background: transparent;
+    border: 0;
+    -webkit-appearance: none;
+  }
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/code.less b/app/soc/content/less/thirdparty/bootstrap/code.less
new file mode 100755
index 0000000..baa13df
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/code.less
@@ -0,0 +1,68 @@
+//
+// Code (inline and block)
+// --------------------------------------------------
+
+
+// Inline and block code styles
+code,
+kbd,
+pre,
+samp {
+  font-family: @font-family-monospace;
+}
+
+// Inline code
+code {
+  padding: 2px 4px;
+  font-size: 90%;
+  color: @code-color;
+  background-color: @code-bg;
+  border-radius: @border-radius-base;
+}
+
+// User input typically entered via keyboard
+kbd {
+  padding: 2px 4px;
+  font-size: 90%;
+  color: @kbd-color;
+  background-color: @kbd-bg;
+  border-radius: @border-radius-small;
+  box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);
+
+  kbd {
+    padding: 0;
+    font-size: 100%;
+    box-shadow: none;
+  }
+}
+
+// Blocks of code
+pre {
+  display: block;
+  padding: ((@line-height-computed - 1) / 2);
+  margin: 0 0 (@line-height-computed / 2);
+  font-size: (@font-size-base - 1); // 14px to 13px
+  line-height: @line-height-base;
+  word-break: break-all;
+  word-wrap: break-word;
+  color: @pre-color;
+  background-color: @pre-bg;
+  border: 1px solid @pre-border-color;
+  border-radius: @border-radius-base;
+
+  // Account for some code outputs that place code tags in pre tags
+  code {
+    padding: 0;
+    font-size: inherit;
+    color: inherit;
+    white-space: pre-wrap;
+    background-color: transparent;
+    border-radius: 0;
+  }
+}
+
+// Enable scrollable blocks of code
+.pre-scrollable {
+  max-height: @pre-scrollable-max-height;
+  overflow-y: scroll;
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/component-animations.less b/app/soc/content/less/thirdparty/bootstrap/component-animations.less
new file mode 100755
index 0000000..9400a0d
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/component-animations.less
@@ -0,0 +1,31 @@
+//
+// Component animations
+// --------------------------------------------------
+
+// Heads up!
+//
+// We don't use the `.opacity()` mixin here since it causes a bug with text
+// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.
+
+.fade {
+  opacity: 0;
+  .transition(opacity .15s linear);
+  &.in {
+    opacity: 1;
+  }
+}
+
+.collapse {
+  display: none;
+
+  &.in      { display: block; }
+  tr&.in    { display: table-row; }
+  tbody&.in { display: table-row-group; }
+}
+
+.collapsing {
+  position: relative;
+  height: 0;
+  overflow: hidden;
+  .transition(height .35s ease);
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/dropdowns.less b/app/soc/content/less/thirdparty/bootstrap/dropdowns.less
new file mode 100755
index 0000000..3eb7fc0
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/dropdowns.less
@@ -0,0 +1,215 @@
+//
+// Dropdown menus
+// --------------------------------------------------
+
+
+// Dropdown arrow/caret
+.caret {
+  display: inline-block;
+  width: 0;
+  height: 0;
+  margin-left: 2px;
+  vertical-align: middle;
+  border-top:   @caret-width-base solid;
+  border-right: @caret-width-base solid transparent;
+  border-left:  @caret-width-base solid transparent;
+}
+
+// The dropdown wrapper (div)
+.dropdown {
+  position: relative;
+}
+
+// Prevent the focus on the dropdown toggle when closing dropdowns
+.dropdown-toggle:focus {
+  outline: 0;
+}
+
+// The dropdown menu (ul)
+.dropdown-menu {
+  position: absolute;
+  top: 100%;
+  left: 0;
+  z-index: @zindex-dropdown;
+  display: none; // none by default, but block on "open" of the menu
+  float: left;
+  min-width: 160px;
+  padding: 5px 0;
+  margin: 2px 0 0; // override default ul
+  list-style: none;
+  font-size: @font-size-base;
+  text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)
+  background-color: @dropdown-bg;
+  border: 1px solid @dropdown-fallback-border; // IE8 fallback
+  border: 1px solid @dropdown-border;
+  border-radius: @border-radius-base;
+  .box-shadow(0 6px 12px rgba(0,0,0,.175));
+  background-clip: padding-box;
+
+  // Aligns the dropdown menu to right
+  //
+  // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`
+  &.pull-right {
+    right: 0;
+    left: auto;
+  }
+
+  // Dividers (basically an hr) within the dropdown
+  .divider {
+    .nav-divider(@dropdown-divider-bg);
+  }
+
+  // Links within the dropdown menu
+  > li > a {
+    display: block;
+    padding: 3px 20px;
+    clear: both;
+    font-weight: normal;
+    line-height: @line-height-base;
+    color: @dropdown-link-color;
+    white-space: nowrap; // prevent links from randomly breaking onto new lines
+  }
+}
+
+// Hover/Focus state
+.dropdown-menu > li > a {
+  &:hover,
+  &:focus {
+    text-decoration: none;
+    color: @dropdown-link-hover-color;
+    background-color: @dropdown-link-hover-bg;
+  }
+}
+
+// Active state
+.dropdown-menu > .active > a {
+  &,
+  &:hover,
+  &:focus {
+    color: @dropdown-link-active-color;
+    text-decoration: none;
+    outline: 0;
+    background-color: @dropdown-link-active-bg;
+  }
+}
+
+// Disabled state
+//
+// Gray out text and ensure the hover/focus state remains gray
+
+.dropdown-menu > .disabled > a {
+  &,
+  &:hover,
+  &:focus {
+    color: @dropdown-link-disabled-color;
+  }
+}
+// Nuke hover/focus effects
+.dropdown-menu > .disabled > a {
+  &:hover,
+  &:focus {
+    text-decoration: none;
+    background-color: transparent;
+    background-image: none; // Remove CSS gradient
+    .reset-filter();
+    cursor: not-allowed;
+  }
+}
+
+// Open state for the dropdown
+.open {
+  // Show the menu
+  > .dropdown-menu {
+    display: block;
+  }
+
+  // Remove the outline when :focus is triggered
+  > a {
+    outline: 0;
+  }
+}
+
+// Menu positioning
+//
+// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown
+// menu with the parent.
+.dropdown-menu-right {
+  left: auto; // Reset the default from `.dropdown-menu`
+  right: 0;
+}
+// With v3, we enabled auto-flipping if you have a dropdown within a right
+// aligned nav component. To enable the undoing of that, we provide an override
+// to restore the default dropdown menu alignment.
+//
+// This is only for left-aligning a dropdown menu within a `.navbar-right` or
+// `.pull-right` nav component.
+.dropdown-menu-left {
+  left: 0;
+  right: auto;
+}
+
+// Dropdown section headers
+.dropdown-header {
+  display: block;
+  padding: 3px 20px;
+  font-size: @font-size-small;
+  line-height: @line-height-base;
+  color: @dropdown-header-color;
+  white-space: nowrap; // as with > li > a
+}
+
+// Backdrop to catch body clicks on mobile, etc.
+.dropdown-backdrop {
+  position: fixed;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  top: 0;
+  z-index: (@zindex-dropdown - 10);
+}
+
+// Right aligned dropdowns
+.pull-right > .dropdown-menu {
+  right: 0;
+  left: auto;
+}
+
+// Allow for dropdowns to go bottom up (aka, dropup-menu)
+//
+// Just add .dropup after the standard .dropdown class and you're set, bro.
+// TODO: abstract this so that the navbar fixed styles are not placed here?
+
+.dropup,
+.navbar-fixed-bottom .dropdown {
+  // Reverse the caret
+  .caret {
+    border-top: 0;
+    border-bottom: @caret-width-base solid;
+    content: "";
+  }
+  // Different positioning for bottom up menu
+  .dropdown-menu {
+    top: auto;
+    bottom: 100%;
+    margin-bottom: 1px;
+  }
+}
+
+
+// Component alignment
+//
+// Reiterate per navbar.less and the modified component alignment there.
+
+@media (min-width: @grid-float-breakpoint) {
+  .navbar-right {
+    .dropdown-menu {
+      .dropdown-menu-right();
+    }
+    // Necessary for overrides of the default right aligned menu.
+    // Will remove come v4 in all likelihood.
+    .dropdown-menu-left {
+      .dropdown-menu-left();
+    }
+  }
+}
+
diff --git a/app/soc/content/less/thirdparty/bootstrap/forms.less b/app/soc/content/less/thirdparty/bootstrap/forms.less
new file mode 100755
index 0000000..2c5e9bf
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/forms.less
@@ -0,0 +1,540 @@
+//
+// Forms
+// --------------------------------------------------
+
+
+// Normalize non-controls
+//
+// Restyle and baseline non-control form elements.
+
+fieldset {
+  padding: 0;
+  margin: 0;
+  border: 0;
+  // Chrome and Firefox set a `min-width: min-content;` on fieldsets,
+  // so we reset that to ensure it behaves more like a standard block element.
+  // See https://github.com/twbs/bootstrap/issues/12359.
+  min-width: 0;
+}
+
+legend {
+  display: block;
+  width: 100%;
+  padding: 0;
+  margin-bottom: @line-height-computed;
+  font-size: (@font-size-base * 1.5);
+  line-height: inherit;
+  color: @legend-color;
+  border: 0;
+  border-bottom: 1px solid @legend-border-color;
+}
+
+label {
+  display: inline-block;
+  max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)
+  margin-bottom: 5px;
+  font-weight: bold;
+}
+
+
+// Normalize form controls
+//
+// While most of our form styles require extra classes, some basic normalization
+// is required to ensure optimum display with or without those classes to better
+// address browser inconsistencies.
+
+// Override content-box in Normalize (* isn't specific enough)
+input[type="search"] {
+  .box-sizing(border-box);
+}
+
+// Position radios and checkboxes better
+input[type="radio"],
+input[type="checkbox"] {
+  margin: 4px 0 0;
+  margin-top: 1px \9; // IE8-9
+  line-height: normal;
+}
+
+// Set the height of file controls to match text inputs
+input[type="file"] {
+  display: block;
+}
+
+// Make range inputs behave like textual form controls
+input[type="range"] {
+  display: block;
+  width: 100%;
+}
+
+// Make multiple select elements height not fixed
+select[multiple],
+select[size] {
+  height: auto;
+}
+
+// Focus for file, radio, and checkbox
+input[type="file"]:focus,
+input[type="radio"]:focus,
+input[type="checkbox"]:focus {
+  .tab-focus();
+}
+
+// Adjust output element
+output {
+  display: block;
+  padding-top: (@padding-base-vertical + 1);
+  font-size: @font-size-base;
+  line-height: @line-height-base;
+  color: @input-color;
+}
+
+
+// Common form controls
+//
+// Shared size and type resets for form controls. Apply `.form-control` to any
+// of the following form controls:
+//
+// select
+// textarea
+// input[type="text"]
+// input[type="password"]
+// input[type="datetime"]
+// input[type="datetime-local"]
+// input[type="date"]
+// input[type="month"]
+// input[type="time"]
+// input[type="week"]
+// input[type="number"]
+// input[type="email"]
+// input[type="url"]
+// input[type="search"]
+// input[type="tel"]
+// input[type="color"]
+
+.form-control {
+  display: block;
+  width: 100%;
+  height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)
+  padding: @padding-base-vertical @padding-base-horizontal;
+  font-size: @font-size-base;
+  line-height: @line-height-base;
+  color: @input-color;
+  background-color: @input-bg;
+  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
+  border: 1px solid @input-border;
+  border-radius: @input-border-radius;
+  .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));
+  .transition(~"border-color ease-in-out .15s, box-shadow ease-in-out .15s");
+
+  // Customize the `:focus` state to imitate native WebKit styles.
+  .form-control-focus();
+
+  // Placeholder
+  .placeholder();
+
+  // Disabled and read-only inputs
+  //
+  // HTML5 says that controls under a fieldset > legend:first-child won't be
+  // disabled if the fieldset is disabled. Due to implementation difficulty, we
+  // don't honor that edge case; we style them as disabled anyway.
+  &[disabled],
+  &[readonly],
+  fieldset[disabled] & {
+    cursor: not-allowed;
+    background-color: @input-bg-disabled;
+    opacity: 1; // iOS fix for unreadable disabled content
+  }
+
+  // Reset height for `textarea`s
+  textarea& {
+    height: auto;
+  }
+}
+
+
+// Search inputs in iOS
+//
+// This overrides the extra rounded corners on search inputs in iOS so that our
+// `.form-control` class can properly style them. Note that this cannot simply
+// be added to `.form-control` as it's not specific enough. For details, see
+// https://github.com/twbs/bootstrap/issues/11586.
+
+input[type="search"] {
+  -webkit-appearance: none;
+}
+
+
+// Special styles for iOS temporal inputs
+//
+// In Mobile Safari, setting `display: block` on temporal inputs causes the
+// text within the input to become vertically misaligned.
+// As a workaround, we set a pixel line-height that matches the
+// given height of the input. Since this fucks up everything else, we have to
+// appropriately reset it for Internet Explorer and the size variations.
+
+input[type="date"],
+input[type="time"],
+input[type="datetime-local"],
+input[type="month"] {
+  line-height: @input-height-base;
+  // IE8+ misaligns the text within date inputs, so we reset
+  line-height: @line-height-base ~"\0";
+
+  &.input-sm {
+    line-height: @input-height-small;
+  }
+  &.input-lg {
+    line-height: @input-height-large;
+  }
+}
+
+
+// Form groups
+//
+// Designed to help with the organization and spacing of vertical forms. For
+// horizontal forms, use the predefined grid classes.
+
+.form-group {
+  margin-bottom: 15px;
+}
+
+
+// Checkboxes and radios
+//
+// Indent the labels to position radios/checkboxes as hanging controls.
+
+.radio,
+.checkbox {
+  position: relative;
+  display: block;
+  min-height: @line-height-computed; // clear the floating input if there is no label text
+  margin-top: 10px;
+  margin-bottom: 10px;
+
+  label {
+    padding-left: 20px;
+    margin-bottom: 0;
+    font-weight: normal;
+    cursor: pointer;
+  }
+}
+.radio input[type="radio"],
+.radio-inline input[type="radio"],
+.checkbox input[type="checkbox"],
+.checkbox-inline input[type="checkbox"] {
+  position: absolute;
+  margin-left: -20px;
+  margin-top: 4px \9;
+}
+
+.radio + .radio,
+.checkbox + .checkbox {
+  margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing
+}
+
+// Radios and checkboxes on same line
+.radio-inline,
+.checkbox-inline {
+  display: inline-block;
+  padding-left: 20px;
+  margin-bottom: 0;
+  vertical-align: middle;
+  font-weight: normal;
+  cursor: pointer;
+}
+.radio-inline + .radio-inline,
+.checkbox-inline + .checkbox-inline {
+  margin-top: 0;
+  margin-left: 10px; // space out consecutive inline controls
+}
+
+// Apply same disabled cursor tweak as for inputs
+// Some special care is needed because <label>s don't inherit their parent's `cursor`.
+//
+// Note: Neither radios nor checkboxes can be readonly.
+input[type="radio"],
+input[type="checkbox"] {
+  &[disabled],
+  &.disabled,
+  fieldset[disabled] & {
+    cursor: not-allowed;
+  }
+}
+// These classes are used directly on <label>s
+.radio-inline,
+.checkbox-inline {
+  &.disabled,
+  fieldset[disabled] & {
+    cursor: not-allowed;
+  }
+}
+// These classes are used on elements with <label> descendants
+.radio,
+.checkbox {
+  &.disabled,
+  fieldset[disabled] & {
+    label {
+      cursor: not-allowed;
+    }
+  }
+}
+
+
+// Static form control text
+//
+// Apply class to a `p` element to make any string of text align with labels in
+// a horizontal form layout.
+
+.form-control-static {
+  // Size it appropriately next to real form controls
+  padding-top: (@padding-base-vertical + 1);
+  padding-bottom: (@padding-base-vertical + 1);
+  // Remove default margin from `p`
+  margin-bottom: 0;
+
+  &.input-lg,
+  &.input-sm {
+    padding-left: 0;
+    padding-right: 0;
+  }
+}
+
+
+// Form control sizing
+//
+// Build on `.form-control` with modifier classes to decrease or increase the
+// height and font-size of form controls.
+
+.input-sm {
+  .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);
+}
+
+.input-lg {
+  .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);
+}
+
+
+// Form control feedback states
+//
+// Apply contextual and semantic states to individual form controls.
+
+.has-feedback {
+  // Enable absolute positioning
+  position: relative;
+
+  // Ensure icons don't overlap text
+  .form-control {
+    padding-right: (@input-height-base * 1.25);
+  }
+}
+// Feedback icon (requires .glyphicon classes)
+.form-control-feedback {
+  position: absolute;
+  top: (@line-height-computed + 5); // Height of the `label` and its margin
+  right: 0;
+  z-index: 2; // Ensure icon is above input groups
+  display: block;
+  width: @input-height-base;
+  height: @input-height-base;
+  line-height: @input-height-base;
+  text-align: center;
+}
+.input-lg + .form-control-feedback {
+  width: @input-height-large;
+  height: @input-height-large;
+  line-height: @input-height-large;
+}
+.input-sm + .form-control-feedback {
+  width: @input-height-small;
+  height: @input-height-small;
+  line-height: @input-height-small;
+}
+
+// Feedback states
+.has-success {
+  .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);
+}
+.has-warning {
+  .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);
+}
+.has-error {
+  .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);
+}
+
+
+// Reposition feedback icon if label is hidden with "screenreader only" state
+.has-feedback label.sr-only ~ .form-control-feedback {
+  top: 0;
+}
+
+
+// Help text
+//
+// Apply to any element you wish to create light text for placement immediately
+// below a form control. Use for general help, formatting, or instructional text.
+
+.help-block {
+  display: block; // account for any element using help-block
+  margin-top: 5px;
+  margin-bottom: 10px;
+  color: lighten(@text-color, 25%); // lighten the text some for contrast
+}
+
+
+
+// Inline forms
+//
+// Make forms appear inline(-block) by adding the `.form-inline` class. Inline
+// forms begin stacked on extra small (mobile) devices and then go inline when
+// viewports reach <768px.
+//
+// Requires wrapping inputs and labels with `.form-group` for proper display of
+// default HTML form controls and our custom form controls (e.g., input groups).
+//
+// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.
+
+.form-inline {
+
+  // Kick in the inline
+  @media (min-width: @screen-sm-min) {
+    // Inline-block all the things for "inline"
+    .form-group {
+      display: inline-block;
+      margin-bottom: 0;
+      vertical-align: middle;
+    }
+
+    // In navbar-form, allow folks to *not* use `.form-group`
+    .form-control {
+      display: inline-block;
+      width: auto; // Prevent labels from stacking above inputs in `.form-group`
+      vertical-align: middle;
+    }
+
+    .input-group {
+      display: inline-table;
+      vertical-align: middle;
+
+      .input-group-addon,
+      .input-group-btn,
+      .form-control {
+        width: auto;
+      }
+    }
+
+    // Input groups need that 100% width though
+    .input-group > .form-control {
+      width: 100%;
+    }
+
+    .control-label {
+      margin-bottom: 0;
+      vertical-align: middle;
+    }
+
+    // Remove default margin on radios/checkboxes that were used for stacking, and
+    // then undo the floating of radios and checkboxes to match (which also avoids
+    // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).
+    .radio,
+    .checkbox {
+      display: inline-block;
+      margin-top: 0;
+      margin-bottom: 0;
+      vertical-align: middle;
+
+      label {
+        padding-left: 0;
+      }
+    }
+    .radio input[type="radio"],
+    .checkbox input[type="checkbox"] {
+      position: relative;
+      margin-left: 0;
+    }
+
+    // Validation states
+    //
+    // Reposition the icon because it's now within a grid column and columns have
+    // `position: relative;` on them. Also accounts for the grid gutter padding.
+    .has-feedback .form-control-feedback {
+      top: 0;
+    }
+  }
+}
+
+
+// Horizontal forms
+//
+// Horizontal forms are built on grid classes and allow you to create forms with
+// labels on the left and inputs on the right.
+
+.form-horizontal {
+
+  // Consistent vertical alignment of radios and checkboxes
+  //
+  // Labels also get some reset styles, but that is scoped to a media query below.
+  .radio,
+  .checkbox,
+  .radio-inline,
+  .checkbox-inline {
+    margin-top: 0;
+    margin-bottom: 0;
+    padding-top: (@padding-base-vertical + 1); // Default padding plus a border
+  }
+  // Account for padding we're adding to ensure the alignment and of help text
+  // and other content below items
+  .radio,
+  .checkbox {
+    min-height: (@line-height-computed + (@padding-base-vertical + 1));
+  }
+
+  // Make form groups behave like rows
+  .form-group {
+    .make-row();
+  }
+
+  // Reset spacing and right align labels, but scope to media queries so that
+  // labels on narrow viewports stack the same as a default form example.
+  @media (min-width: @screen-sm-min) {
+    .control-label {
+      text-align: right;
+      margin-bottom: 0;
+      padding-top: (@padding-base-vertical + 1); // Default padding plus a border
+    }
+  }
+
+  // Validation states
+  //
+  // Reposition the icon because it's now within a grid column and columns have
+  // `position: relative;` on them. Also accounts for the grid gutter padding.
+  .has-feedback .form-control-feedback {
+    top: 0;
+    right: (@grid-gutter-width / 2);
+  }
+
+  // Form group sizes
+  //
+  // Quick utility class for applying `.input-lg` and `.input-sm` styles to the
+  // inputs and labels within a `.form-group`.
+  .form-group-lg {
+    @media (min-width: @screen-sm-min) {
+      .control-label {
+        padding-top: ((@padding-large-vertical * @line-height-large) + 1);
+      }
+    }
+    .form-control {
+      &:extend(.input-lg);
+    }
+  }
+  .form-group-sm {
+    @media (min-width: @screen-sm-min) {
+      .control-label {
+        padding-top: (@padding-small-vertical + 1);
+      }
+    }
+    .form-control {
+      &:extend(.input-sm);
+    }
+  }
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/glyphicons.less b/app/soc/content/less/thirdparty/bootstrap/glyphicons.less
new file mode 100755
index 0000000..d3485dc
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/glyphicons.less
@@ -0,0 +1,233 @@
+//
+// Glyphicons for Bootstrap
+//
+// Since icons are fonts, they can be placed anywhere text is placed and are
+// thus automatically sized to match the surrounding child. To use, create an
+// inline element with the appropriate classes, like so:
+//
+// <a href="#"><span class="glyphicon glyphicon-star"></span> Star</a>
+
+// Import the fonts
+@font-face {
+  font-family: 'Glyphicons Halflings';
+  src: url('@{icon-font-path}@{icon-font-name}.eot');
+  src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),
+       url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),
+       url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),
+       url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');
+}
+
+// Catchall baseclass
+.glyphicon {
+  position: relative;
+  top: 1px;
+  display: inline-block;
+  font-family: 'Glyphicons Halflings';
+  font-style: normal;
+  font-weight: normal;
+  line-height: 1;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+// Individual icons
+.glyphicon-asterisk               { &:before { content: "\2a"; } }
+.glyphicon-plus                   { &:before { content: "\2b"; } }
+.glyphicon-euro                   { &:before { content: "\20ac"; } }
+.glyphicon-minus                  { &:before { content: "\2212"; } }
+.glyphicon-cloud                  { &:before { content: "\2601"; } }
+.glyphicon-envelope               { &:before { content: "\2709"; } }
+.glyphicon-pencil                 { &:before { content: "\270f"; } }
+.glyphicon-glass                  { &:before { content: "\e001"; } }
+.glyphicon-music                  { &:before { content: "\e002"; } }
+.glyphicon-search                 { &:before { content: "\e003"; } }
+.glyphicon-heart                  { &:before { content: "\e005"; } }
+.glyphicon-star                   { &:before { content: "\e006"; } }
+.glyphicon-star-empty             { &:before { content: "\e007"; } }
+.glyphicon-user                   { &:before { content: "\e008"; } }
+.glyphicon-film                   { &:before { content: "\e009"; } }
+.glyphicon-th-large               { &:before { content: "\e010"; } }
+.glyphicon-th                     { &:before { content: "\e011"; } }
+.glyphicon-th-list                { &:before { content: "\e012"; } }
+.glyphicon-ok                     { &:before { content: "\e013"; } }
+.glyphicon-remove                 { &:before { content: "\e014"; } }
+.glyphicon-zoom-in                { &:before { content: "\e015"; } }
+.glyphicon-zoom-out               { &:before { content: "\e016"; } }
+.glyphicon-off                    { &:before { content: "\e017"; } }
+.glyphicon-signal                 { &:before { content: "\e018"; } }
+.glyphicon-cog                    { &:before { content: "\e019"; } }
+.glyphicon-trash                  { &:before { content: "\e020"; } }
+.glyphicon-home                   { &:before { content: "\e021"; } }
+.glyphicon-file                   { &:before { content: "\e022"; } }
+.glyphicon-time                   { &:before { content: "\e023"; } }
+.glyphicon-road                   { &:before { content: "\e024"; } }
+.glyphicon-download-alt           { &:before { content: "\e025"; } }
+.glyphicon-download               { &:before { content: "\e026"; } }
+.glyphicon-upload                 { &:before { content: "\e027"; } }
+.glyphicon-inbox                  { &:before { content: "\e028"; } }
+.glyphicon-play-circle            { &:before { content: "\e029"; } }
+.glyphicon-repeat                 { &:before { content: "\e030"; } }
+.glyphicon-refresh                { &:before { content: "\e031"; } }
+.glyphicon-list-alt               { &:before { content: "\e032"; } }
+.glyphicon-lock                   { &:before { content: "\e033"; } }
+.glyphicon-flag                   { &:before { content: "\e034"; } }
+.glyphicon-headphones             { &:before { content: "\e035"; } }
+.glyphicon-volume-off             { &:before { content: "\e036"; } }
+.glyphicon-volume-down            { &:before { content: "\e037"; } }
+.glyphicon-volume-up              { &:before { content: "\e038"; } }
+.glyphicon-qrcode                 { &:before { content: "\e039"; } }
+.glyphicon-barcode                { &:before { content: "\e040"; } }
+.glyphicon-tag                    { &:before { content: "\e041"; } }
+.glyphicon-tags                   { &:before { content: "\e042"; } }
+.glyphicon-book                   { &:before { content: "\e043"; } }
+.glyphicon-bookmark               { &:before { content: "\e044"; } }
+.glyphicon-print                  { &:before { content: "\e045"; } }
+.glyphicon-camera                 { &:before { content: "\e046"; } }
+.glyphicon-font                   { &:before { content: "\e047"; } }
+.glyphicon-bold                   { &:before { content: "\e048"; } }
+.glyphicon-italic                 { &:before { content: "\e049"; } }
+.glyphicon-text-height            { &:before { content: "\e050"; } }
+.glyphicon-text-width             { &:before { content: "\e051"; } }
+.glyphicon-align-left             { &:before { content: "\e052"; } }
+.glyphicon-align-center           { &:before { content: "\e053"; } }
+.glyphicon-align-right            { &:before { content: "\e054"; } }
+.glyphicon-align-justify          { &:before { content: "\e055"; } }
+.glyphicon-list                   { &:before { content: "\e056"; } }
+.glyphicon-indent-left            { &:before { content: "\e057"; } }
+.glyphicon-indent-right           { &:before { content: "\e058"; } }
+.glyphicon-facetime-video         { &:before { content: "\e059"; } }
+.glyphicon-picture                { &:before { content: "\e060"; } }
+.glyphicon-map-marker             { &:before { content: "\e062"; } }
+.glyphicon-adjust                 { &:before { content: "\e063"; } }
+.glyphicon-tint                   { &:before { content: "\e064"; } }
+.glyphicon-edit                   { &:before { content: "\e065"; } }
+.glyphicon-share                  { &:before { content: "\e066"; } }
+.glyphicon-check                  { &:before { content: "\e067"; } }
+.glyphicon-move                   { &:before { content: "\e068"; } }
+.glyphicon-step-backward          { &:before { content: "\e069"; } }
+.glyphicon-fast-backward          { &:before { content: "\e070"; } }
+.glyphicon-backward               { &:before { content: "\e071"; } }
+.glyphicon-play                   { &:before { content: "\e072"; } }
+.glyphicon-pause                  { &:before { content: "\e073"; } }
+.glyphicon-stop                   { &:before { content: "\e074"; } }
+.glyphicon-forward                { &:before { content: "\e075"; } }
+.glyphicon-fast-forward           { &:before { content: "\e076"; } }
+.glyphicon-step-forward           { &:before { content: "\e077"; } }
+.glyphicon-eject                  { &:before { content: "\e078"; } }
+.glyphicon-chevron-left           { &:before { content: "\e079"; } }
+.glyphicon-chevron-right          { &:before { content: "\e080"; } }
+.glyphicon-plus-sign              { &:before { content: "\e081"; } }
+.glyphicon-minus-sign             { &:before { content: "\e082"; } }
+.glyphicon-remove-sign            { &:before { content: "\e083"; } }
+.glyphicon-ok-sign                { &:before { content: "\e084"; } }
+.glyphicon-question-sign          { &:before { content: "\e085"; } }
+.glyphicon-info-sign              { &:before { content: "\e086"; } }
+.glyphicon-screenshot             { &:before { content: "\e087"; } }
+.glyphicon-remove-circle          { &:before { content: "\e088"; } }
+.glyphicon-ok-circle              { &:before { content: "\e089"; } }
+.glyphicon-ban-circle             { &:before { content: "\e090"; } }
+.glyphicon-arrow-left             { &:before { content: "\e091"; } }
+.glyphicon-arrow-right            { &:before { content: "\e092"; } }
+.glyphicon-arrow-up               { &:before { content: "\e093"; } }
+.glyphicon-arrow-down             { &:before { content: "\e094"; } }
+.glyphicon-share-alt              { &:before { content: "\e095"; } }
+.glyphicon-resize-full            { &:before { content: "\e096"; } }
+.glyphicon-resize-small           { &:before { content: "\e097"; } }
+.glyphicon-exclamation-sign       { &:before { content: "\e101"; } }
+.glyphicon-gift                   { &:before { content: "\e102"; } }
+.glyphicon-leaf                   { &:before { content: "\e103"; } }
+.glyphicon-fire                   { &:before { content: "\e104"; } }
+.glyphicon-eye-open               { &:before { content: "\e105"; } }
+.glyphicon-eye-close              { &:before { content: "\e106"; } }
+.glyphicon-warning-sign           { &:before { content: "\e107"; } }
+.glyphicon-plane                  { &:before { content: "\e108"; } }
+.glyphicon-calendar               { &:before { content: "\e109"; } }
+.glyphicon-random                 { &:before { content: "\e110"; } }
+.glyphicon-comment                { &:before { content: "\e111"; } }
+.glyphicon-magnet                 { &:before { content: "\e112"; } }
+.glyphicon-chevron-up             { &:before { content: "\e113"; } }
+.glyphicon-chevron-down           { &:before { content: "\e114"; } }
+.glyphicon-retweet                { &:before { content: "\e115"; } }
+.glyphicon-shopping-cart          { &:before { content: "\e116"; } }
+.glyphicon-folder-close           { &:before { content: "\e117"; } }
+.glyphicon-folder-open            { &:before { content: "\e118"; } }
+.glyphicon-resize-vertical        { &:before { content: "\e119"; } }
+.glyphicon-resize-horizontal      { &:before { content: "\e120"; } }
+.glyphicon-hdd                    { &:before { content: "\e121"; } }
+.glyphicon-bullhorn               { &:before { content: "\e122"; } }
+.glyphicon-bell                   { &:before { content: "\e123"; } }
+.glyphicon-certificate            { &:before { content: "\e124"; } }
+.glyphicon-thumbs-up              { &:before { content: "\e125"; } }
+.glyphicon-thumbs-down            { &:before { content: "\e126"; } }
+.glyphicon-hand-right             { &:before { content: "\e127"; } }
+.glyphicon-hand-left              { &:before { content: "\e128"; } }
+.glyphicon-hand-up                { &:before { content: "\e129"; } }
+.glyphicon-hand-down              { &:before { content: "\e130"; } }
+.glyphicon-circle-arrow-right     { &:before { content: "\e131"; } }
+.glyphicon-circle-arrow-left      { &:before { content: "\e132"; } }
+.glyphicon-circle-arrow-up        { &:before { content: "\e133"; } }
+.glyphicon-circle-arrow-down      { &:before { content: "\e134"; } }
+.glyphicon-globe                  { &:before { content: "\e135"; } }
+.glyphicon-wrench                 { &:before { content: "\e136"; } }
+.glyphicon-tasks                  { &:before { content: "\e137"; } }
+.glyphicon-filter                 { &:before { content: "\e138"; } }
+.glyphicon-briefcase              { &:before { content: "\e139"; } }
+.glyphicon-fullscreen             { &:before { content: "\e140"; } }
+.glyphicon-dashboard              { &:before { content: "\e141"; } }
+.glyphicon-paperclip              { &:before { content: "\e142"; } }
+.glyphicon-heart-empty            { &:before { content: "\e143"; } }
+.glyphicon-link                   { &:before { content: "\e144"; } }
+.glyphicon-phone                  { &:before { content: "\e145"; } }
+.glyphicon-pushpin                { &:before { content: "\e146"; } }
+.glyphicon-usd                    { &:before { content: "\e148"; } }
+.glyphicon-gbp                    { &:before { content: "\e149"; } }
+.glyphicon-sort                   { &:before { content: "\e150"; } }
+.glyphicon-sort-by-alphabet       { &:before { content: "\e151"; } }
+.glyphicon-sort-by-alphabet-alt   { &:before { content: "\e152"; } }
+.glyphicon-sort-by-order          { &:before { content: "\e153"; } }
+.glyphicon-sort-by-order-alt      { &:before { content: "\e154"; } }
+.glyphicon-sort-by-attributes     { &:before { content: "\e155"; } }
+.glyphicon-sort-by-attributes-alt { &:before { content: "\e156"; } }
+.glyphicon-unchecked              { &:before { content: "\e157"; } }
+.glyphicon-expand                 { &:before { content: "\e158"; } }
+.glyphicon-collapse-down          { &:before { content: "\e159"; } }
+.glyphicon-collapse-up            { &:before { content: "\e160"; } }
+.glyphicon-log-in                 { &:before { content: "\e161"; } }
+.glyphicon-flash                  { &:before { content: "\e162"; } }
+.glyphicon-log-out                { &:before { content: "\e163"; } }
+.glyphicon-new-window             { &:before { content: "\e164"; } }
+.glyphicon-record                 { &:before { content: "\e165"; } }
+.glyphicon-save                   { &:before { content: "\e166"; } }
+.glyphicon-open                   { &:before { content: "\e167"; } }
+.glyphicon-saved                  { &:before { content: "\e168"; } }
+.glyphicon-import                 { &:before { content: "\e169"; } }
+.glyphicon-export                 { &:before { content: "\e170"; } }
+.glyphicon-send                   { &:before { content: "\e171"; } }
+.glyphicon-floppy-disk            { &:before { content: "\e172"; } }
+.glyphicon-floppy-saved           { &:before { content: "\e173"; } }
+.glyphicon-floppy-remove          { &:before { content: "\e174"; } }
+.glyphicon-floppy-save            { &:before { content: "\e175"; } }
+.glyphicon-floppy-open            { &:before { content: "\e176"; } }
+.glyphicon-credit-card            { &:before { content: "\e177"; } }
+.glyphicon-transfer               { &:before { content: "\e178"; } }
+.glyphicon-cutlery                { &:before { content: "\e179"; } }
+.glyphicon-header                 { &:before { content: "\e180"; } }
+.glyphicon-compressed             { &:before { content: "\e181"; } }
+.glyphicon-earphone               { &:before { content: "\e182"; } }
+.glyphicon-phone-alt              { &:before { content: "\e183"; } }
+.glyphicon-tower                  { &:before { content: "\e184"; } }
+.glyphicon-stats                  { &:before { content: "\e185"; } }
+.glyphicon-sd-video               { &:before { content: "\e186"; } }
+.glyphicon-hd-video               { &:before { content: "\e187"; } }
+.glyphicon-subtitles              { &:before { content: "\e188"; } }
+.glyphicon-sound-stereo           { &:before { content: "\e189"; } }
+.glyphicon-sound-dolby            { &:before { content: "\e190"; } }
+.glyphicon-sound-5-1              { &:before { content: "\e191"; } }
+.glyphicon-sound-6-1              { &:before { content: "\e192"; } }
+.glyphicon-sound-7-1              { &:before { content: "\e193"; } }
+.glyphicon-copyright-mark         { &:before { content: "\e194"; } }
+.glyphicon-registration-mark      { &:before { content: "\e195"; } }
+.glyphicon-cloud-download         { &:before { content: "\e197"; } }
+.glyphicon-cloud-upload           { &:before { content: "\e198"; } }
+.glyphicon-tree-conifer           { &:before { content: "\e199"; } }
+.glyphicon-tree-deciduous         { &:before { content: "\e200"; } }
diff --git a/app/soc/content/less/thirdparty/bootstrap/grid.less b/app/soc/content/less/thirdparty/bootstrap/grid.less
new file mode 100755
index 0000000..e100655
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/grid.less
@@ -0,0 +1,84 @@
+//
+// Grid system
+// --------------------------------------------------
+
+
+// Container widths
+//
+// Set the container width, and override it for fixed navbars in media queries.
+
+.container {
+  .container-fixed();
+
+  @media (min-width: @screen-sm-min) {
+    width: @container-sm;
+  }
+  @media (min-width: @screen-md-min) {
+    width: @container-md;
+  }
+  @media (min-width: @screen-lg-min) {
+    width: @container-lg;
+  }
+}
+
+
+// Fluid container
+//
+// Utilizes the mixin meant for fixed width containers, but without any defined
+// width for fluid, full width layouts.
+
+.container-fluid {
+  .container-fixed();
+}
+
+
+// Row
+//
+// Rows contain and clear the floats of your columns.
+
+.row {
+  .make-row();
+}
+
+
+// Columns
+//
+// Common styles for small and large grid columns
+
+.make-grid-columns();
+
+
+// Extra small grid
+//
+// Columns, offsets, pushes, and pulls for extra small devices like
+// smartphones.
+
+.make-grid(xs);
+
+
+// Small grid
+//
+// Columns, offsets, pushes, and pulls for the small device range, from phones
+// to tablets.
+
+@media (min-width: @screen-sm-min) {
+  .make-grid(sm);
+}
+
+
+// Medium grid
+//
+// Columns, offsets, pushes, and pulls for the desktop device range.
+
+@media (min-width: @screen-md-min) {
+  .make-grid(md);
+}
+
+
+// Large grid
+//
+// Columns, offsets, pushes, and pulls for the large desktop device range.
+
+@media (min-width: @screen-lg-min) {
+  .make-grid(lg);
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/input-groups.less b/app/soc/content/less/thirdparty/bootstrap/input-groups.less
new file mode 100755
index 0000000..a8712f2
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/input-groups.less
@@ -0,0 +1,166 @@
+//
+// Input groups
+// --------------------------------------------------
+
+// Base styles
+// -------------------------
+.input-group {
+  position: relative; // For dropdowns
+  display: table;
+  border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table
+
+  // Undo padding and float of grid classes
+  &[class*="col-"] {
+    float: none;
+    padding-left: 0;
+    padding-right: 0;
+  }
+
+  .form-control {
+    // Ensure that the input is always above the *appended* addon button for
+    // proper border colors.
+    position: relative;
+    z-index: 2;
+
+    // IE9 fubars the placeholder attribute in text inputs and the arrows on
+    // select elements in input groups. To fix it, we float the input. Details:
+    // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855
+    float: left;
+
+    width: 100%;
+    margin-bottom: 0;
+  }
+}
+
+// Sizing options
+//
+// Remix the default form control sizing classes into new ones for easier
+// manipulation.
+
+.input-group-lg > .form-control,
+.input-group-lg > .input-group-addon,
+.input-group-lg > .input-group-btn > .btn {
+  .input-lg();
+}
+.input-group-sm > .form-control,
+.input-group-sm > .input-group-addon,
+.input-group-sm > .input-group-btn > .btn {
+  .input-sm();
+}
+
+
+// Display as table-cell
+// -------------------------
+.input-group-addon,
+.input-group-btn,
+.input-group .form-control {
+  display: table-cell;
+
+  &:not(:first-child):not(:last-child) {
+    border-radius: 0;
+  }
+}
+// Addon and addon wrapper for buttons
+.input-group-addon,
+.input-group-btn {
+  width: 1%;
+  white-space: nowrap;
+  vertical-align: middle; // Match the inputs
+}
+
+// Text input groups
+// -------------------------
+.input-group-addon {
+  padding: @padding-base-vertical @padding-base-horizontal;
+  font-size: @font-size-base;
+  font-weight: normal;
+  line-height: 1;
+  color: @input-color;
+  text-align: center;
+  background-color: @input-group-addon-bg;
+  border: 1px solid @input-group-addon-border-color;
+  border-radius: @border-radius-base;
+
+  // Sizing
+  &.input-sm {
+    padding: @padding-small-vertical @padding-small-horizontal;
+    font-size: @font-size-small;
+    border-radius: @border-radius-small;
+  }
+  &.input-lg {
+    padding: @padding-large-vertical @padding-large-horizontal;
+    font-size: @font-size-large;
+    border-radius: @border-radius-large;
+  }
+
+  // Nuke default margins from checkboxes and radios to vertically center within.
+  input[type="radio"],
+  input[type="checkbox"] {
+    margin-top: 0;
+  }
+}
+
+// Reset rounded corners
+.input-group .form-control:first-child,
+.input-group-addon:first-child,
+.input-group-btn:first-child > .btn,
+.input-group-btn:first-child > .btn-group > .btn,
+.input-group-btn:first-child > .dropdown-toggle,
+.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
+.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
+  .border-right-radius(0);
+}
+.input-group-addon:first-child {
+  border-right: 0;
+}
+.input-group .form-control:last-child,
+.input-group-addon:last-child,
+.input-group-btn:last-child > .btn,
+.input-group-btn:last-child > .btn-group > .btn,
+.input-group-btn:last-child > .dropdown-toggle,
+.input-group-btn:first-child > .btn:not(:first-child),
+.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
+  .border-left-radius(0);
+}
+.input-group-addon:last-child {
+  border-left: 0;
+}
+
+// Button input groups
+// -------------------------
+.input-group-btn {
+  position: relative;
+  // Jankily prevent input button groups from wrapping with `white-space` and
+  // `font-size` in combination with `inline-block` on buttons.
+  font-size: 0;
+  white-space: nowrap;
+
+  // Negative margin for spacing, position for bringing hovered/focused/actived
+  // element above the siblings.
+  > .btn {
+    position: relative;
+    + .btn {
+      margin-left: -1px;
+    }
+    // Bring the "active" button to the front
+    &:hover,
+    &:focus,
+    &:active {
+      z-index: 2;
+    }
+  }
+
+  // Negative margin to only have a 1px border between the two
+  &:first-child {
+    > .btn,
+    > .btn-group {
+      margin-right: -1px;
+    }
+  }
+  &:last-child {
+    > .btn,
+    > .btn-group {
+      margin-left: -1px;
+    }
+  }
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/jumbotron.less b/app/soc/content/less/thirdparty/bootstrap/jumbotron.less
new file mode 100755
index 0000000..27cd8b8
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/jumbotron.less
@@ -0,0 +1,48 @@
+//
+// Jumbotron
+// --------------------------------------------------
+
+
+.jumbotron {
+  padding: @jumbotron-padding;
+  margin-bottom: @jumbotron-padding;
+  color: @jumbotron-color;
+  background-color: @jumbotron-bg;
+
+  h1,
+  .h1 {
+    color: @jumbotron-heading-color;
+  }
+  p {
+    margin-bottom: (@jumbotron-padding / 2);
+    font-size: @jumbotron-font-size;
+    font-weight: 200;
+  }
+
+  > hr {
+    border-top-color: darken(@jumbotron-bg, 10%);
+  }
+
+  .container & {
+    border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container
+  }
+
+  .container {
+    max-width: 100%;
+  }
+
+  @media screen and (min-width: @screen-sm-min) {
+    padding-top:    (@jumbotron-padding * 1.6);
+    padding-bottom: (@jumbotron-padding * 1.6);
+
+    .container & {
+      padding-left:  (@jumbotron-padding * 2);
+      padding-right: (@jumbotron-padding * 2);
+    }
+
+    h1,
+    .h1 {
+      font-size: (@font-size-base * 4.5);
+    }
+  }
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/labels.less b/app/soc/content/less/thirdparty/bootstrap/labels.less
new file mode 100755
index 0000000..9a5a270
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/labels.less
@@ -0,0 +1,64 @@
+//
+// Labels
+// --------------------------------------------------
+
+.label {
+  display: inline;
+  padding: .2em .6em .3em;
+  font-size: 75%;
+  font-weight: bold;
+  line-height: 1;
+  color: @label-color;
+  text-align: center;
+  white-space: nowrap;
+  vertical-align: baseline;
+  border-radius: .25em;
+
+  // Add hover effects, but only for links
+  a& {
+    &:hover,
+    &:focus {
+      color: @label-link-hover-color;
+      text-decoration: none;
+      cursor: pointer;
+    }
+  }
+
+  // Empty labels collapse automatically (not available in IE8)
+  &:empty {
+    display: none;
+  }
+
+  // Quick fix for labels in buttons
+  .btn & {
+    position: relative;
+    top: -1px;
+  }
+}
+
+// Colors
+// Contextual variations (linked labels get darker on :hover)
+
+.label-default {
+  .label-variant(@label-default-bg);
+}
+
+.label-primary {
+  .label-variant(@label-primary-bg);
+}
+
+.label-success {
+  .label-variant(@label-success-bg);
+}
+
+.label-info {
+  .label-variant(@label-info-bg);
+}
+
+.label-warning {
+  .label-variant(@label-warning-bg);
+}
+
+.label-danger {
+  .label-variant(@label-danger-bg);
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/list-group.less b/app/soc/content/less/thirdparty/bootstrap/list-group.less
new file mode 100755
index 0000000..1946bf5
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/list-group.less
@@ -0,0 +1,131 @@
+//
+// List groups
+// --------------------------------------------------
+
+
+// Base class
+//
+// Easily usable on <ul>, <ol>, or <div>.
+
+.list-group {
+  // No need to set list-style: none; since .list-group-item is block level
+  margin-bottom: 20px;
+  padding-left: 0; // reset padding because ul and ol
+}
+
+
+// Individual list items
+//
+// Use on `li`s or `div`s within the `.list-group` parent.
+
+.list-group-item {
+  position: relative;
+  display: block;
+  padding: 10px 15px;
+  // Place the border on the list items and negative margin up for better styling
+  margin-bottom: -1px;
+  background-color: @list-group-bg;
+  border: 1px solid @list-group-border;
+
+  // Round the first and last items
+  &:first-child {
+    .border-top-radius(@list-group-border-radius);
+  }
+  &:last-child {
+    margin-bottom: 0;
+    .border-bottom-radius(@list-group-border-radius);
+  }
+
+  // Align badges within list items
+  > .badge {
+    float: right;
+  }
+  > .badge + .badge {
+    margin-right: 5px;
+  }
+}
+
+
+// Linked list items
+//
+// Use anchor elements instead of `li`s or `div`s to create linked list items.
+// Includes an extra `.active` modifier class for showing selected items.
+
+a.list-group-item {
+  color: @list-group-link-color;
+
+  .list-group-item-heading {
+    color: @list-group-link-heading-color;
+  }
+
+  // Hover state
+  &:hover,
+  &:focus {
+    text-decoration: none;
+    color: @list-group-link-hover-color;
+    background-color: @list-group-hover-bg;
+  }
+}
+
+.list-group-item {
+  // Disabled state
+  &.disabled,
+  &.disabled:hover,
+  &.disabled:focus {
+    background-color: @list-group-disabled-bg;
+    color: @list-group-disabled-color;
+
+    // Force color to inherit for custom content
+    .list-group-item-heading {
+      color: inherit;
+    }
+    .list-group-item-text {
+      color: @list-group-disabled-text-color;
+    }
+  }
+
+  // Active class on item itself, not parent
+  &.active,
+  &.active:hover,
+  &.active:focus {
+    z-index: 2; // Place active items above their siblings for proper border styling
+    color: @list-group-active-color;
+    background-color: @list-group-active-bg;
+    border-color: @list-group-active-border;
+
+    // Force color to inherit for custom content
+    .list-group-item-heading,
+    .list-group-item-heading > small,
+    .list-group-item-heading > .small {
+      color: inherit;
+    }
+    .list-group-item-text {
+      color: @list-group-active-text-color;
+    }
+  }
+}
+
+
+// Contextual variants
+//
+// Add modifier classes to change text and background color on individual items.
+// Organizationally, this must come after the `:hover` states.
+
+.list-group-item-variant(success; @state-success-bg; @state-success-text);
+.list-group-item-variant(info; @state-info-bg; @state-info-text);
+.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);
+.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);
+
+
+// Custom content options
+//
+// Extra classes for creating well-formatted content within `.list-group-item`s.
+
+.list-group-item-heading {
+  margin-top: 0;
+  margin-bottom: 5px;
+}
+.list-group-item-text {
+  margin-bottom: 0;
+  line-height: 1.3;
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/media.less b/app/soc/content/less/thirdparty/bootstrap/media.less
new file mode 100755
index 0000000..5ad22cd
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/media.less
@@ -0,0 +1,56 @@
+// Media objects
+// Source: http://stubbornella.org/content/?p=497
+// --------------------------------------------------
+
+
+// Common styles
+// -------------------------
+
+// Clear the floats
+.media,
+.media-body {
+  overflow: hidden;
+  zoom: 1;
+}
+
+// Proper spacing between instances of .media
+.media,
+.media .media {
+  margin-top: 15px;
+}
+.media:first-child {
+  margin-top: 0;
+}
+
+// For images and videos, set to block
+.media-object {
+  display: block;
+}
+
+// Reset margins on headings for tighter default spacing
+.media-heading {
+  margin: 0 0 5px;
+}
+
+
+// Media image alignment
+// -------------------------
+
+.media {
+  > .pull-left {
+    margin-right: 10px;
+  }
+  > .pull-right {
+    margin-left: 10px;
+  }
+}
+
+
+// Media list variation
+// -------------------------
+
+// Undo default ul/ol styles
+.media-list {
+  padding-left: 0;
+  list-style: none;
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/mixins.less b/app/soc/content/less/thirdparty/bootstrap/mixins.less
new file mode 100755
index 0000000..af4408f
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/mixins.less
@@ -0,0 +1,39 @@
+// Mixins
+// --------------------------------------------------
+
+// Utilities
+@import "mixins/hide-text.less";
+@import "mixins/opacity.less";
+@import "mixins/image.less";
+@import "mixins/labels.less";
+@import "mixins/reset-filter.less";
+@import "mixins/resize.less";
+@import "mixins/responsive-visibility.less";
+@import "mixins/size.less";
+@import "mixins/tab-focus.less";
+@import "mixins/text-emphasis.less";
+@import "mixins/text-overflow.less";
+@import "mixins/vendor-prefixes.less";
+
+// Components
+@import "mixins/alerts.less";
+@import "mixins/buttons.less";
+@import "mixins/panels.less";
+@import "mixins/pagination.less";
+@import "mixins/list-group.less";
+@import "mixins/nav-divider.less";
+@import "mixins/forms.less";
+@import "mixins/progress-bar.less";
+@import "mixins/table-row.less";
+
+// Skins
+@import "mixins/background-variant.less";
+@import "mixins/border-radius.less";
+@import "mixins/gradients.less";
+
+// Layout
+@import "mixins/clearfix.less";
+@import "mixins/center-block.less";
+@import "mixins/nav-vertical-align.less";
+@import "mixins/grid-framework.less";
+@import "mixins/grid.less";
diff --git a/app/soc/content/less/thirdparty/bootstrap/mixins/alerts.less b/app/soc/content/less/thirdparty/bootstrap/mixins/alerts.less
new file mode 100755
index 0000000..396196f
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/mixins/alerts.less
@@ -0,0 +1,14 @@
+// Alerts
+
+.alert-variant(@background; @border; @text-color) {
+  background-color: @background;
+  border-color: @border;
+  color: @text-color;
+
+  hr {
+    border-top-color: darken(@border, 5%);
+  }
+  .alert-link {
+    color: darken(@text-color, 10%);
+  }
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/mixins/background-variant.less b/app/soc/content/less/thirdparty/bootstrap/mixins/background-variant.less
new file mode 100755
index 0000000..556e490
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/mixins/background-variant.less
@@ -0,0 +1,8 @@
+// Contextual backgrounds
+
+.bg-variant(@color) {
+  background-color: @color;
+  a&:hover {
+    background-color: darken(@color, 10%);
+  }
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/mixins/border-radius.less b/app/soc/content/less/thirdparty/bootstrap/mixins/border-radius.less
new file mode 100755
index 0000000..ca05dbf
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/mixins/border-radius.less
@@ -0,0 +1,18 @@
+// Single side border-radius
+
+.border-top-radius(@radius) {
+  border-top-right-radius: @radius;
+   border-top-left-radius: @radius;
+}
+.border-right-radius(@radius) {
+  border-bottom-right-radius: @radius;
+     border-top-right-radius: @radius;
+}
+.border-bottom-radius(@radius) {
+  border-bottom-right-radius: @radius;
+   border-bottom-left-radius: @radius;
+}
+.border-left-radius(@radius) {
+  border-bottom-left-radius: @radius;
+     border-top-left-radius: @radius;
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/mixins/buttons.less b/app/soc/content/less/thirdparty/bootstrap/mixins/buttons.less
new file mode 100755
index 0000000..409f8f2
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/mixins/buttons.less
@@ -0,0 +1,50 @@
+// Button variants
+//
+// Easily pump out default styles, as well as :hover, :focus, :active,
+// and disabled options for all buttons
+
+.button-variant(@color; @background; @border) {
+  color: @color;
+  background-color: @background;
+  border-color: @border;
+
+  &:hover,
+  &:focus,
+  &:active,
+  &.active,
+  .open > .dropdown-toggle& {
+    color: @color;
+    background-color: darken(@background, 10%);
+        border-color: darken(@border, 12%);
+  }
+  &:active,
+  &.active,
+  .open > .dropdown-toggle& {
+    background-image: none;
+  }
+  &.disabled,
+  &[disabled],
+  fieldset[disabled] & {
+    &,
+    &:hover,
+    &:focus,
+    &:active,
+    &.active {
+      background-color: @background;
+          border-color: @border;
+    }
+  }
+
+  .badge {
+    color: @background;
+    background-color: @color;
+  }
+}
+
+// Button sizes
+.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {
+  padding: @padding-vertical @padding-horizontal;
+  font-size: @font-size;
+  line-height: @line-height;
+  border-radius: @border-radius;
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/mixins/center-block.less b/app/soc/content/less/thirdparty/bootstrap/mixins/center-block.less
new file mode 100755
index 0000000..d18d6de
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/mixins/center-block.less
@@ -0,0 +1,7 @@
+// Center-align a block level element
+
+.center-block() {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/mixins/clearfix.less b/app/soc/content/less/thirdparty/bootstrap/mixins/clearfix.less
new file mode 100755
index 0000000..3f7a382
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/mixins/clearfix.less
@@ -0,0 +1,22 @@
+// Clearfix
+//
+// For modern browsers
+// 1. The space content is one way to avoid an Opera bug when the
+//    contenteditable attribute is included anywhere else in the document.
+//    Otherwise it causes space to appear at the top and bottom of elements
+//    that are clearfixed.
+// 2. The use of `table` rather than `block` is only necessary if using
+//    `:before` to contain the top-margins of child elements.
+//
+// Source: http://nicolasgallagher.com/micro-clearfix-hack/
+
+.clearfix() {
+  &:before,
+  &:after {
+    content: " "; // 1
+    display: table; // 2
+  }
+  &:after {
+    clear: both;
+  }
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/mixins/forms.less b/app/soc/content/less/thirdparty/bootstrap/mixins/forms.less
new file mode 100755
index 0000000..e36c4a8
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/mixins/forms.less
@@ -0,0 +1,81 @@
+// Form validation states
+//
+// Used in forms.less to generate the form validation CSS for warnings, errors,
+// and successes.
+
+.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {
+  // Color the label and help text
+  .help-block,
+  .control-label,
+  .radio,
+  .checkbox,
+  .radio-inline,
+  .checkbox-inline  {
+    color: @text-color;
+  }
+  // Set the border and box shadow on specific inputs to match
+  .form-control {
+    border-color: @border-color;
+    .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work
+    &:focus {
+      border-color: darken(@border-color, 10%);
+      @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);
+      .box-shadow(@shadow);
+    }
+  }
+  // Set validation states also for addons
+  .input-group-addon {
+    color: @text-color;
+    border-color: @border-color;
+    background-color: @background-color;
+  }
+  // Optional feedback icon
+  .form-control-feedback {
+    color: @text-color;
+  }
+}
+
+
+// Form control focus state
+//
+// Generate a customized focus state and for any input with the specified color,
+// which defaults to the `@input-border-focus` variable.
+//
+// We highly encourage you to not customize the default value, but instead use
+// this to tweak colors on an as-needed basis. This aesthetic change is based on
+// WebKit's default styles, but applicable to a wider range of browsers. Its
+// usability and accessibility should be taken into account with any change.
+//
+// Example usage: change the default blue border and shadow to white for better
+// contrast against a dark gray background.
+.form-control-focus(@color: @input-border-focus) {
+  @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);
+  &:focus {
+    border-color: @color;
+    outline: 0;
+    .box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}");
+  }
+}
+
+// Form control sizing
+//
+// Relative text size, padding, and border-radii changes for form controls. For
+// horizontal sizing, wrap controls in the predefined grid classes. `<select>`
+// element gets special love because it's special, and that's a fact!
+.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {
+  height: @input-height;
+  padding: @padding-vertical @padding-horizontal;
+  font-size: @font-size;
+  line-height: @line-height;
+  border-radius: @border-radius;
+
+  select& {
+    height: @input-height;
+    line-height: @input-height;
+  }
+
+  textarea&,
+  select[multiple]& {
+    height: auto;
+  }
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/mixins/gradients.less b/app/soc/content/less/thirdparty/bootstrap/mixins/gradients.less
new file mode 100755
index 0000000..0b88a89
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/mixins/gradients.less
@@ -0,0 +1,59 @@
+// Gradients
+
+#gradient {
+
+  // Horizontal gradient, from left to right
+  //
+  // Creates two color stops, start and end, by specifying a color and position for each color stop.
+  // Color stops are not available in IE9 and below.
+  .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {
+    background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+
+    background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12
+    background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
+    background-repeat: repeat-x;
+    filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@start-color),argb(@end-color))); // IE9 and down
+  }
+
+  // Vertical gradient, from top to bottom
+  //
+  // Creates two color stops, start and end, by specifying a color and position for each color stop.
+  // Color stops are not available in IE9 and below.
+  .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {
+    background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent);  // Safari 5.1-6, Chrome 10+
+    background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent);  // Opera 12
+    background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
+    background-repeat: repeat-x;
+    filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start-color),argb(@end-color))); // IE9 and down
+  }
+
+  .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {
+    background-repeat: repeat-x;
+    background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+
+    background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12
+    background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+
+  }
+  .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {
+    background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);
+    background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);
+    background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);
+    background-repeat: no-repeat;
+    filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback
+  }
+  .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {
+    background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);
+    background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);
+    background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);
+    background-repeat: no-repeat;
+    filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback
+  }
+  .radial(@inner-color: #555; @outer-color: #333) {
+    background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);
+    background-image: radial-gradient(circle, @inner-color, @outer-color);
+    background-repeat: no-repeat;
+  }
+  .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {
+    background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);
+    background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);
+    background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);
+  }
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/mixins/grid-framework.less b/app/soc/content/less/thirdparty/bootstrap/mixins/grid-framework.less
new file mode 100755
index 0000000..6317854
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/mixins/grid-framework.less
@@ -0,0 +1,91 @@
+// Framework grid generation
+//
+// Used only by Bootstrap to generate the correct number of grid classes given
+// any value of `@grid-columns`.
+
+.make-grid-columns() {
+  // Common styles for all sizes of grid columns, widths 1-12
+  .col(@index) when (@index = 1) { // initial
+    @item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}";
+    .col((@index + 1), @item);
+  }
+  .col(@index, @list) when (@index =< @grid-columns) { // general; "=<" isn't a typo
+    @item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}";
+    .col((@index + 1), ~"@{list}, @{item}");
+  }
+  .col(@index, @list) when (@index > @grid-columns) { // terminal
+    @{list} {
+      position: relative;
+      // Prevent columns from collapsing when empty
+      min-height: 1px;
+      // Inner gutter via padding
+      padding-left:  (@grid-gutter-width / 2);
+      padding-right: (@grid-gutter-width / 2);
+    }
+  }
+  .col(1); // kickstart it
+}
+
+.float-grid-columns(@class) {
+  .col(@index) when (@index = 1) { // initial
+    @item: ~".col-@{class}-@{index}";
+    .col((@index + 1), @item);
+  }
+  .col(@index, @list) when (@index =< @grid-columns) { // general
+    @item: ~".col-@{class}-@{index}";
+    .col((@index + 1), ~"@{list}, @{item}");
+  }
+  .col(@index, @list) when (@index > @grid-columns) { // terminal
+    @{list} {
+      float: left;
+    }
+  }
+  .col(1); // kickstart it
+}
+
+.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {
+  .col-@{class}-@{index} {
+    width: percentage((@index / @grid-columns));
+  }
+}
+.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {
+  .col-@{class}-push-@{index} {
+    left: percentage((@index / @grid-columns));
+  }
+}
+.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {
+  .col-@{class}-push-0 {
+    left: auto;
+  }
+}
+.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {
+  .col-@{class}-pull-@{index} {
+    right: percentage((@index / @grid-columns));
+  }
+}
+.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {
+  .col-@{class}-pull-0 {
+    right: auto;
+  }
+}
+.calc-grid-column(@index, @class, @type) when (@type = offset) {
+  .col-@{class}-offset-@{index} {
+    margin-left: percentage((@index / @grid-columns));
+  }
+}
+
+// Basic looping in LESS
+.loop-grid-columns(@index, @class, @type) when (@index >= 0) {
+  .calc-grid-column(@index, @class, @type);
+  // next iteration
+  .loop-grid-columns((@index - 1), @class, @type);
+}
+
+// Create grid for specific class
+.make-grid(@class) {
+  .float-grid-columns(@class);
+  .loop-grid-columns(@grid-columns, @class, width);
+  .loop-grid-columns(@grid-columns, @class, pull);
+  .loop-grid-columns(@grid-columns, @class, push);
+  .loop-grid-columns(@grid-columns, @class, offset);
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/mixins/grid.less b/app/soc/content/less/thirdparty/bootstrap/mixins/grid.less
new file mode 100755
index 0000000..cae5eaf
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/mixins/grid.less
@@ -0,0 +1,122 @@
+// Grid system
+//
+// Generate semantic grid columns with these mixins.
+
+// Centered container element
+.container-fixed(@gutter: @grid-gutter-width) {
+  margin-right: auto;
+  margin-left: auto;
+  padding-left:  (@gutter / 2);
+  padding-right: (@gutter / 2);
+  &:extend(.clearfix all);
+}
+
+// Creates a wrapper for a series of columns
+.make-row(@gutter: @grid-gutter-width) {
+  margin-left:  (@gutter / -2);
+  margin-right: (@gutter / -2);
+  &:extend(.clearfix all);
+}
+
+// Generate the extra small columns
+.make-xs-column(@columns; @gutter: @grid-gutter-width) {
+  position: relative;
+  float: left;
+  width: percentage((@columns / @grid-columns));
+  min-height: 1px;
+  padding-left:  (@gutter / 2);
+  padding-right: (@gutter / 2);
+}
+.make-xs-column-offset(@columns) {
+  margin-left: percentage((@columns / @grid-columns));
+}
+.make-xs-column-push(@columns) {
+  left: percentage((@columns / @grid-columns));
+}
+.make-xs-column-pull(@columns) {
+  right: percentage((@columns / @grid-columns));
+}
+
+// Generate the small columns
+.make-sm-column(@columns; @gutter: @grid-gutter-width) {
+  position: relative;
+  min-height: 1px;
+  padding-left:  (@gutter / 2);
+  padding-right: (@gutter / 2);
+
+  @media (min-width: @screen-sm-min) {
+    float: left;
+    width: percentage((@columns / @grid-columns));
+  }
+}
+.make-sm-column-offset(@columns) {
+  @media (min-width: @screen-sm-min) {
+    margin-left: percentage((@columns / @grid-columns));
+  }
+}
+.make-sm-column-push(@columns) {
+  @media (min-width: @screen-sm-min) {
+    left: percentage((@columns / @grid-columns));
+  }
+}
+.make-sm-column-pull(@columns) {
+  @media (min-width: @screen-sm-min) {
+    right: percentage((@columns / @grid-columns));
+  }
+}
+
+// Generate the medium columns
+.make-md-column(@columns; @gutter: @grid-gutter-width) {
+  position: relative;
+  min-height: 1px;
+  padding-left:  (@gutter / 2);
+  padding-right: (@gutter / 2);
+
+  @media (min-width: @screen-md-min) {
+    float: left;
+    width: percentage((@columns / @grid-columns));
+  }
+}
+.make-md-column-offset(@columns) {
+  @media (min-width: @screen-md-min) {
+    margin-left: percentage((@columns / @grid-columns));
+  }
+}
+.make-md-column-push(@columns) {
+  @media (min-width: @screen-md-min) {
+    left: percentage((@columns / @grid-columns));
+  }
+}
+.make-md-column-pull(@columns) {
+  @media (min-width: @screen-md-min) {
+    right: percentage((@columns / @grid-columns));
+  }
+}
+
+// Generate the large columns
+.make-lg-column(@columns; @gutter: @grid-gutter-width) {
+  position: relative;
+  min-height: 1px;
+  padding-left:  (@gutter / 2);
+  padding-right: (@gutter / 2);
+
+  @media (min-width: @screen-lg-min) {
+    float: left;
+    width: percentage((@columns / @grid-columns));
+  }
+}
+.make-lg-column-offset(@columns) {
+  @media (min-width: @screen-lg-min) {
+    margin-left: percentage((@columns / @grid-columns));
+  }
+}
+.make-lg-column-push(@columns) {
+  @media (min-width: @screen-lg-min) {
+    left: percentage((@columns / @grid-columns));
+  }
+}
+.make-lg-column-pull(@columns) {
+  @media (min-width: @screen-lg-min) {
+    right: percentage((@columns / @grid-columns));
+  }
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/mixins/hide-text.less b/app/soc/content/less/thirdparty/bootstrap/mixins/hide-text.less
new file mode 100755
index 0000000..c2315e5
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/mixins/hide-text.less
@@ -0,0 +1,21 @@
+// CSS image replacement
+//
+// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for
+// mixins being reused as classes with the same name, this doesn't hold up. As
+// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`.
+//
+// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757
+
+// Deprecated as of v3.0.1 (will be removed in v4)
+.hide-text() {
+  font: ~"0/0" a;
+  color: transparent;
+  text-shadow: none;
+  background-color: transparent;
+  border: 0;
+}
+
+// New mixin to use as of v3.0.1
+.text-hide() {
+  .hide-text();
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/mixins/image.less b/app/soc/content/less/thirdparty/bootstrap/mixins/image.less
new file mode 100755
index 0000000..5d2cccb
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/mixins/image.less
@@ -0,0 +1,34 @@
+// Image Mixins
+// - Responsive image
+// - Retina image
+
+
+// Responsive image
+//
+// Keep images from scaling beyond the width of their parents.
+.img-responsive(@display: block) {
+  display: @display;
+  width: 100% \9; // Force IE10 and below to size SVG images correctly
+  max-width: 100%; // Part 1: Set a maximum relative to the parent
+  height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching
+}
+
+
+// Retina image
+//
+// Short retina mixin for setting background-image and -size. Note that the
+// spelling of `min--moz-device-pixel-ratio` is intentional.
+.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {
+  background-image: url("@{file-1x}");
+
+  @media
+  only screen and (-webkit-min-device-pixel-ratio: 2),
+  only screen and (   min--moz-device-pixel-ratio: 2),
+  only screen and (     -o-min-device-pixel-ratio: 2/1),
+  only screen and (        min-device-pixel-ratio: 2),
+  only screen and (                min-resolution: 192dpi),
+  only screen and (                min-resolution: 2dppx) {
+    background-image: url("@{file-2x}");
+    background-size: @width-1x @height-1x;
+  }
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/mixins/labels.less b/app/soc/content/less/thirdparty/bootstrap/mixins/labels.less
new file mode 100755
index 0000000..6f9e490
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/mixins/labels.less
@@ -0,0 +1,12 @@
+// Labels
+
+.label-variant(@color) {
+  background-color: @color;
+  
+  &[href] {
+    &:hover,
+    &:focus {
+      background-color: darken(@color, 10%);
+    }
+  }
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/mixins/list-group.less b/app/soc/content/less/thirdparty/bootstrap/mixins/list-group.less
new file mode 100755
index 0000000..8b5b065
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/mixins/list-group.less
@@ -0,0 +1,29 @@
+// List Groups
+
+.list-group-item-variant(@state; @background; @color) {
+  .list-group-item-@{state} {
+    color: @color;
+    background-color: @background;
+
+    a& {
+      color: @color;
+
+      .list-group-item-heading {
+        color: inherit;
+      }
+
+      &:hover,
+      &:focus {
+        color: @color;
+        background-color: darken(@background, 5%);
+      }
+      &.active,
+      &.active:hover,
+      &.active:focus {
+        color: #fff;
+        background-color: @color;
+        border-color: @color;
+      }
+    }
+  }
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/mixins/nav-divider.less b/app/soc/content/less/thirdparty/bootstrap/mixins/nav-divider.less
new file mode 100755
index 0000000..feb1e9e
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/mixins/nav-divider.less
@@ -0,0 +1,10 @@
+// Horizontal dividers
+//
+// Dividers (basically an hr) within dropdowns and nav lists
+
+.nav-divider(@color: #e5e5e5) {
+  height: 1px;
+  margin: ((@line-height-computed / 2) - 1) 0;
+  overflow: hidden;
+  background-color: @color;
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/mixins/nav-vertical-align.less b/app/soc/content/less/thirdparty/bootstrap/mixins/nav-vertical-align.less
new file mode 100755
index 0000000..d458c78
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/mixins/nav-vertical-align.less
@@ -0,0 +1,9 @@
+// Navbar vertical align
+//
+// Vertically center elements in the navbar.
+// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.
+
+.navbar-vertical-align(@element-height) {
+  margin-top: ((@navbar-height - @element-height) / 2);
+  margin-bottom: ((@navbar-height - @element-height) / 2);
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/mixins/opacity.less b/app/soc/content/less/thirdparty/bootstrap/mixins/opacity.less
new file mode 100755
index 0000000..33ed25c
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/mixins/opacity.less
@@ -0,0 +1,8 @@
+// Opacity
+
+.opacity(@opacity) {
+  opacity: @opacity;
+  // IE8 filter
+  @opacity-ie: (@opacity * 100);
+  filter: ~"alpha(opacity=@{opacity-ie})";
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/mixins/pagination.less b/app/soc/content/less/thirdparty/bootstrap/mixins/pagination.less
new file mode 100755
index 0000000..7deb505
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/mixins/pagination.less
@@ -0,0 +1,23 @@
+// Pagination
+
+.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {
+  > li {
+    > a,
+    > span {
+      padding: @padding-vertical @padding-horizontal;
+      font-size: @font-size;
+    }
+    &:first-child {
+      > a,
+      > span {
+        .border-left-radius(@border-radius);
+      }
+    }
+    &:last-child {
+      > a,
+      > span {
+        .border-right-radius(@border-radius);
+      }
+    }
+  }
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/mixins/panels.less b/app/soc/content/less/thirdparty/bootstrap/mixins/panels.less
new file mode 100755
index 0000000..49ee10d
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/mixins/panels.less
@@ -0,0 +1,24 @@
+// Panels
+
+.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {
+  border-color: @border;
+
+  & > .panel-heading {
+    color: @heading-text-color;
+    background-color: @heading-bg-color;
+    border-color: @heading-border;
+
+    + .panel-collapse > .panel-body {
+      border-top-color: @border;
+    }
+    .badge {
+      color: @heading-bg-color;
+      background-color: @heading-text-color;
+    }
+  }
+  & > .panel-footer {
+    + .panel-collapse > .panel-body {
+      border-bottom-color: @border;
+    }
+  }
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/mixins/progress-bar.less b/app/soc/content/less/thirdparty/bootstrap/mixins/progress-bar.less
new file mode 100755
index 0000000..f07996a
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/mixins/progress-bar.less
@@ -0,0 +1,10 @@
+// Progress bars
+
+.progress-bar-variant(@color) {
+  background-color: @color;
+
+  // Deprecated parent class requirement as of v3.2.0
+  .progress-striped & {
+    #gradient > .striped();
+  }
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/mixins/reset-filter.less b/app/soc/content/less/thirdparty/bootstrap/mixins/reset-filter.less
new file mode 100755
index 0000000..68cdb5e
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/mixins/reset-filter.less
@@ -0,0 +1,8 @@
+// Reset filters for IE
+//
+// When you need to remove a gradient background, do not forget to use this to reset
+// the IE filter for IE9 and below.
+
+.reset-filter() {
+  filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)"));
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/mixins/resize.less b/app/soc/content/less/thirdparty/bootstrap/mixins/resize.less
new file mode 100755
index 0000000..3acd3af
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/mixins/resize.less
@@ -0,0 +1,6 @@
+// Resize anything
+
+.resizable(@direction) {
+  resize: @direction; // Options: horizontal, vertical, both
+  overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible`
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/mixins/responsive-visibility.less b/app/soc/content/less/thirdparty/bootstrap/mixins/responsive-visibility.less
new file mode 100755
index 0000000..f7951c3
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/mixins/responsive-visibility.less
@@ -0,0 +1,15 @@
+// Responsive utilities
+
+//
+// More easily include all the states for responsive-utilities.less.
+.responsive-visibility() {
+  display: block !important;
+  table&  { display: table; }
+  tr&     { display: table-row !important; }
+  th&,
+  td&     { display: table-cell !important; }
+}
+
+.responsive-invisibility() {
+  display: none !important;
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/mixins/size.less b/app/soc/content/less/thirdparty/bootstrap/mixins/size.less
new file mode 100755
index 0000000..a8be650
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/mixins/size.less
@@ -0,0 +1,10 @@
+// Sizing shortcuts
+
+.size(@width; @height) {
+  width: @width;
+  height: @height;
+}
+
+.square(@size) {
+  .size(@size; @size);
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/mixins/tab-focus.less b/app/soc/content/less/thirdparty/bootstrap/mixins/tab-focus.less
new file mode 100755
index 0000000..1f1f05a
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/mixins/tab-focus.less
@@ -0,0 +1,9 @@
+// WebKit-style focus
+
+.tab-focus() {
+  // Default
+  outline: thin dotted;
+  // WebKit
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/mixins/table-row.less b/app/soc/content/less/thirdparty/bootstrap/mixins/table-row.less
new file mode 100755
index 0000000..0f287f1
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/mixins/table-row.less
@@ -0,0 +1,28 @@
+// Tables
+
+.table-row-variant(@state; @background) {
+  // Exact selectors below required to override `.table-striped` and prevent
+  // inheritance to nested tables.
+  .table > thead > tr,
+  .table > tbody > tr,
+  .table > tfoot > tr {
+    > td.@{state},
+    > th.@{state},
+    &.@{state} > td,
+    &.@{state} > th {
+      background-color: @background;
+    }
+  }
+
+  // Hover states for `.table-hover`
+  // Note: this is not available for cells or rows within `thead` or `tfoot`.
+  .table-hover > tbody > tr {
+    > td.@{state}:hover,
+    > th.@{state}:hover,
+    &.@{state}:hover > td,
+    &:hover > .@{state},
+    &.@{state}:hover > th {
+      background-color: darken(@background, 5%);
+    }
+  }
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/mixins/text-emphasis.less b/app/soc/content/less/thirdparty/bootstrap/mixins/text-emphasis.less
new file mode 100755
index 0000000..0868ef9
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/mixins/text-emphasis.less
@@ -0,0 +1,8 @@
+// Typography
+
+.text-emphasis-variant(@color) {
+  color: @color;
+  a&:hover {
+    color: darken(@color, 10%);
+  }
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/mixins/text-overflow.less b/app/soc/content/less/thirdparty/bootstrap/mixins/text-overflow.less
new file mode 100755
index 0000000..c11ad2f
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/mixins/text-overflow.less
@@ -0,0 +1,8 @@
+// Text overflow
+// Requires inline-block or block for proper styling
+
+.text-overflow() {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/mixins/vendor-prefixes.less b/app/soc/content/less/thirdparty/bootstrap/mixins/vendor-prefixes.less
new file mode 100755
index 0000000..e2008c8
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/mixins/vendor-prefixes.less
@@ -0,0 +1,224 @@
+// Vendor Prefixes
+//
+// All vendor mixins are deprecated as of v3.2.0 due to the introduction of
+// Autoprefixer in our Gruntfile. They will be removed in v4.
+
+// - Animations
+// - Backface visibility
+// - Box shadow
+// - Box sizing
+// - Content columns
+// - Hyphens
+// - Placeholder text
+// - Transformations
+// - Transitions
+// - User Select
+
+
+// Animations
+.animation(@animation) {
+  -webkit-animation: @animation;
+       -o-animation: @animation;
+          animation: @animation;
+}
+.animation-name(@name) {
+  -webkit-animation-name: @name;
+          animation-name: @name;
+}
+.animation-duration(@duration) {
+  -webkit-animation-duration: @duration;
+          animation-duration: @duration;
+}
+.animation-timing-function(@timing-function) {
+  -webkit-animation-timing-function: @timing-function;
+          animation-timing-function: @timing-function;
+}
+.animation-delay(@delay) {
+  -webkit-animation-delay: @delay;
+          animation-delay: @delay;
+}
+.animation-iteration-count(@iteration-count) {
+  -webkit-animation-iteration-count: @iteration-count;
+          animation-iteration-count: @iteration-count;
+}
+.animation-direction(@direction) {
+  -webkit-animation-direction: @direction;
+          animation-direction: @direction;
+}
+.animation-fill-mode(@fill-mode) {
+  -webkit-animation-fill-mode: @fill-mode;
+          animation-fill-mode: @fill-mode;
+}
+
+// Backface visibility
+// Prevent browsers from flickering when using CSS 3D transforms.
+// Default value is `visible`, but can be changed to `hidden`
+
+.backface-visibility(@visibility){
+  -webkit-backface-visibility: @visibility;
+     -moz-backface-visibility: @visibility;
+          backface-visibility: @visibility;
+}
+
+// Drop shadows
+//
+// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's
+// supported browsers that have box shadow capabilities now support it.
+
+.box-shadow(@shadow) {
+  -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1
+          box-shadow: @shadow;
+}
+
+// Box sizing
+.box-sizing(@boxmodel) {
+  -webkit-box-sizing: @boxmodel;
+     -moz-box-sizing: @boxmodel;
+          box-sizing: @boxmodel;
+}
+
+// CSS3 Content Columns
+.content-columns(@column-count; @column-gap: @grid-gutter-width) {
+  -webkit-column-count: @column-count;
+     -moz-column-count: @column-count;
+          column-count: @column-count;
+  -webkit-column-gap: @column-gap;
+     -moz-column-gap: @column-gap;
+          column-gap: @column-gap;
+}
+
+// Optional hyphenation
+.hyphens(@mode: auto) {
+  word-wrap: break-word;
+  -webkit-hyphens: @mode;
+     -moz-hyphens: @mode;
+      -ms-hyphens: @mode; // IE10+
+       -o-hyphens: @mode;
+          hyphens: @mode;
+}
+
+// Placeholder text
+.placeholder(@color: @input-color-placeholder) {
+  &::-moz-placeholder           { color: @color;   // Firefox
+                                  opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526
+  &:-ms-input-placeholder       { color: @color; } // Internet Explorer 10+
+  &::-webkit-input-placeholder  { color: @color; } // Safari and Chrome
+}
+
+// Transformations
+.scale(@ratio) {
+  -webkit-transform: scale(@ratio);
+      -ms-transform: scale(@ratio); // IE9 only
+       -o-transform: scale(@ratio);
+          transform: scale(@ratio);
+}
+.scale(@ratioX; @ratioY) {
+  -webkit-transform: scale(@ratioX, @ratioY);
+      -ms-transform: scale(@ratioX, @ratioY); // IE9 only
+       -o-transform: scale(@ratioX, @ratioY);
+          transform: scale(@ratioX, @ratioY);
+}
+.scaleX(@ratio) {
+  -webkit-transform: scaleX(@ratio);
+      -ms-transform: scaleX(@ratio); // IE9 only
+       -o-transform: scaleX(@ratio);
+          transform: scaleX(@ratio);
+}
+.scaleY(@ratio) {
+  -webkit-transform: scaleY(@ratio);
+      -ms-transform: scaleY(@ratio); // IE9 only
+       -o-transform: scaleY(@ratio);
+          transform: scaleY(@ratio);
+}
+.skew(@x; @y) {
+  -webkit-transform: skewX(@x) skewY(@y);
+      -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+
+       -o-transform: skewX(@x) skewY(@y);
+          transform: skewX(@x) skewY(@y);
+}
+.translate(@x; @y) {
+  -webkit-transform: translate(@x, @y);
+      -ms-transform: translate(@x, @y); // IE9 only
+       -o-transform: translate(@x, @y);
+          transform: translate(@x, @y);
+}
+.translate3d(@x; @y; @z) {
+  -webkit-transform: translate3d(@x, @y, @z);
+          transform: translate3d(@x, @y, @z);
+}
+.rotate(@degrees) {
+  -webkit-transform: rotate(@degrees);
+      -ms-transform: rotate(@degrees); // IE9 only
+       -o-transform: rotate(@degrees);
+          transform: rotate(@degrees);
+}
+.rotateX(@degrees) {
+  -webkit-transform: rotateX(@degrees);
+      -ms-transform: rotateX(@degrees); // IE9 only
+       -o-transform: rotateX(@degrees);
+          transform: rotateX(@degrees);
+}
+.rotateY(@degrees) {
+  -webkit-transform: rotateY(@degrees);
+      -ms-transform: rotateY(@degrees); // IE9 only
+       -o-transform: rotateY(@degrees);
+          transform: rotateY(@degrees);
+}
+.perspective(@perspective) {
+  -webkit-perspective: @perspective;
+     -moz-perspective: @perspective;
+          perspective: @perspective;
+}
+.perspective-origin(@perspective) {
+  -webkit-perspective-origin: @perspective;
+     -moz-perspective-origin: @perspective;
+          perspective-origin: @perspective;
+}
+.transform-origin(@origin) {
+  -webkit-transform-origin: @origin;
+     -moz-transform-origin: @origin;
+      -ms-transform-origin: @origin; // IE9 only
+          transform-origin: @origin;
+}
+
+
+// Transitions
+
+.transition(@transition) {
+  -webkit-transition: @transition;
+       -o-transition: @transition;
+          transition: @transition;
+}
+.transition-property(@transition-property) {
+  -webkit-transition-property: @transition-property;
+          transition-property: @transition-property;
+}
+.transition-delay(@transition-delay) {
+  -webkit-transition-delay: @transition-delay;
+          transition-delay: @transition-delay;
+}
+.transition-duration(@transition-duration) {
+  -webkit-transition-duration: @transition-duration;
+          transition-duration: @transition-duration;
+}
+.transition-timing-function(@timing-function) {
+  -webkit-transition-timing-function: @timing-function;
+          transition-timing-function: @timing-function;
+}
+.transition-transform(@transition) {
+  -webkit-transition: -webkit-transform @transition;
+     -moz-transition: -moz-transform @transition;
+       -o-transition: -o-transform @transition;
+          transition: transform @transition;
+}
+
+
+// User select
+// For selecting text on the page
+
+.user-select(@select) {
+  -webkit-user-select: @select;
+     -moz-user-select: @select;
+      -ms-user-select: @select; // IE10+
+          user-select: @select;
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/modals.less b/app/soc/content/less/thirdparty/bootstrap/modals.less
new file mode 100755
index 0000000..6da50ba
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/modals.less
@@ -0,0 +1,150 @@
+//
+// Modals
+// --------------------------------------------------
+
+// .modal-open      - body class for killing the scroll
+// .modal           - container to scroll within
+// .modal-dialog    - positioning shell for the actual modal
+// .modal-content   - actual modal w/ bg and corners and shit
+
+// Kill the scroll on the body
+.modal-open {
+  overflow: hidden;
+}
+
+// Container that the modal scrolls within
+.modal {
+  display: none;
+  overflow: hidden;
+  position: fixed;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: @zindex-modal;
+  -webkit-overflow-scrolling: touch;
+
+  // Prevent Chrome on Windows from adding a focus outline. For details, see
+  // https://github.com/twbs/bootstrap/pull/10951.
+  outline: 0;
+
+  // When fading in the modal, animate it to slide down
+  &.fade .modal-dialog {
+    .translate3d(0, -25%, 0);
+    .transition-transform(~"0.3s ease-out");
+  }
+  &.in .modal-dialog { .translate3d(0, 0, 0) }
+}
+.modal-open .modal {
+  overflow-x: hidden;
+  overflow-y: auto;
+}
+
+// Shell div to position the modal with bottom padding
+.modal-dialog {
+  position: relative;
+  width: auto;
+  margin: 10px;
+}
+
+// Actual modal
+.modal-content {
+  position: relative;
+  background-color: @modal-content-bg;
+  border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)
+  border: 1px solid @modal-content-border-color;
+  border-radius: @border-radius-large;
+  .box-shadow(0 3px 9px rgba(0,0,0,.5));
+  background-clip: padding-box;
+  // Remove focus outline from opened modal
+  outline: 0;
+}
+
+// Modal background
+.modal-backdrop {
+  position: fixed;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: @zindex-modal-background;
+  background-color: @modal-backdrop-bg;
+  // Fade for backdrop
+  &.fade { .opacity(0); }
+  &.in { .opacity(@modal-backdrop-opacity); }
+}
+
+// Modal header
+// Top section of the modal w/ title and dismiss
+.modal-header {
+  padding: @modal-title-padding;
+  border-bottom: 1px solid @modal-header-border-color;
+  min-height: (@modal-title-padding + @modal-title-line-height);
+}
+// Close icon
+.modal-header .close {
+  margin-top: -2px;
+}
+
+// Title text within header
+.modal-title {
+  margin: 0;
+  line-height: @modal-title-line-height;
+}
+
+// Modal body
+// Where all modal content resides (sibling of .modal-header and .modal-footer)
+.modal-body {
+  position: relative;
+  padding: @modal-inner-padding;
+}
+
+// Footer (for actions)
+.modal-footer {
+  padding: @modal-inner-padding;
+  text-align: right; // right align buttons
+  border-top: 1px solid @modal-footer-border-color;
+  &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons
+
+  // Properly space out buttons
+  .btn + .btn {
+    margin-left: 5px;
+    margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs
+  }
+  // but override that for button groups
+  .btn-group .btn + .btn {
+    margin-left: -1px;
+  }
+  // and override it for block buttons as well
+  .btn-block + .btn-block {
+    margin-left: 0;
+  }
+}
+
+// Measure scrollbar width for padding body during modal show/hide
+.modal-scrollbar-measure {
+  position: absolute;
+  top: -9999px;
+  width: 50px;
+  height: 50px;
+  overflow: scroll;
+}
+
+// Scale up the modal
+@media (min-width: @screen-sm-min) {
+  // Automatically set modal's width for larger viewports
+  .modal-dialog {
+    width: @modal-md;
+    margin: 30px auto;
+  }
+  .modal-content {
+    .box-shadow(0 5px 15px rgba(0,0,0,.5));
+  }
+
+  // Modal sizes
+  .modal-sm { width: @modal-sm; }
+}
+
+@media (min-width: @screen-md-min) {
+  .modal-lg { width: @modal-lg; }
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/navbar.less b/app/soc/content/less/thirdparty/bootstrap/navbar.less
new file mode 100755
index 0000000..55bfd29
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/navbar.less
@@ -0,0 +1,655 @@
+//
+// Navbars
+// --------------------------------------------------
+
+
+// Wrapper and base class
+//
+// Provide a static navbar from which we expand to create full-width, fixed, and
+// other navbar variations.
+
+.navbar {
+  position: relative;
+  min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)
+  margin-bottom: @navbar-margin-bottom;
+  border: 1px solid transparent;
+
+  // Prevent floats from breaking the navbar
+  &:extend(.clearfix all);
+
+  @media (min-width: @grid-float-breakpoint) {
+    border-radius: @navbar-border-radius;
+  }
+}
+
+
+// Navbar heading
+//
+// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy
+// styling of responsive aspects.
+
+.navbar-header {
+  &:extend(.clearfix all);
+
+  @media (min-width: @grid-float-breakpoint) {
+    float: left;
+  }
+}
+
+
+// Navbar collapse (body)
+//
+// Group your navbar content into this for easy collapsing and expanding across
+// various device sizes. By default, this content is collapsed when <768px, but
+// will expand past that for a horizontal display.
+//
+// To start (on mobile devices) the navbar links, forms, and buttons are stacked
+// vertically and include a `max-height` to overflow in case you have too much
+// content for the user's viewport.
+
+.navbar-collapse {
+  overflow-x: visible;
+  padding-right: @navbar-padding-horizontal;
+  padding-left:  @navbar-padding-horizontal;
+  border-top: 1px solid transparent;
+  box-shadow: inset 0 1px 0 rgba(255,255,255,.1);
+  &:extend(.clearfix all);
+  -webkit-overflow-scrolling: touch;
+
+  &.in {
+    overflow-y: auto;
+  }
+
+  @media (min-width: @grid-float-breakpoint) {
+    width: auto;
+    border-top: 0;
+    box-shadow: none;
+
+    &.collapse {
+      display: block !important;
+      height: auto !important;
+      padding-bottom: 0; // Override default setting
+      overflow: visible !important;
+    }
+
+    &.in {
+      overflow-y: visible;
+    }
+
+    // Undo the collapse side padding for navbars with containers to ensure
+    // alignment of right-aligned contents.
+    .navbar-fixed-top &,
+    .navbar-static-top &,
+    .navbar-fixed-bottom & {
+      padding-left: 0;
+      padding-right: 0;
+    }
+  }
+}
+
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+  .navbar-collapse {
+    max-height: @navbar-collapse-max-height;
+
+    @media (max-width: @screen-xs-min) and (orientation: landscape) {
+      max-height: 200px;
+    }
+  }
+}
+
+
+// Both navbar header and collapse
+//
+// When a container is present, change the behavior of the header and collapse.
+
+.container,
+.container-fluid {
+  > .navbar-header,
+  > .navbar-collapse {
+    margin-right: -@navbar-padding-horizontal;
+    margin-left:  -@navbar-padding-horizontal;
+
+    @media (min-width: @grid-float-breakpoint) {
+      margin-right: 0;
+      margin-left:  0;
+    }
+  }
+}
+
+
+//
+// Navbar alignment options
+//
+// Display the navbar across the entirety of the page or fixed it to the top or
+// bottom of the page.
+
+// Static top (unfixed, but 100% wide) navbar
+.navbar-static-top {
+  z-index: @zindex-navbar;
+  border-width: 0 0 1px;
+
+  @media (min-width: @grid-float-breakpoint) {
+    border-radius: 0;
+  }
+}
+
+// Fix the top/bottom navbars when screen real estate supports it
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+  position: fixed;
+  right: 0;
+  left: 0;
+  z-index: @zindex-navbar-fixed;
+  .translate3d(0, 0, 0);
+
+  // Undo the rounded corners
+  @media (min-width: @grid-float-breakpoint) {
+    border-radius: 0;
+  }
+}
+.navbar-fixed-top {
+  top: 0;
+  border-width: 0 0 1px;
+}
+.navbar-fixed-bottom {
+  bottom: 0;
+  margin-bottom: 0; // override .navbar defaults
+  border-width: 1px 0 0;
+}
+
+
+// Brand/project name
+
+.navbar-brand {
+  float: left;
+  padding: @navbar-padding-vertical @navbar-padding-horizontal;
+  font-size: @font-size-large;
+  line-height: @line-height-computed;
+  height: @navbar-height;
+
+  &:hover,
+  &:focus {
+    text-decoration: none;
+  }
+
+  @media (min-width: @grid-float-breakpoint) {
+    .navbar > .container &,
+    .navbar > .container-fluid & {
+      margin-left: -@navbar-padding-horizontal;
+    }
+  }
+}
+
+
+// Navbar toggle
+//
+// Custom button for toggling the `.navbar-collapse`, powered by the collapse
+// JavaScript plugin.
+
+.navbar-toggle {
+  position: relative;
+  float: right;
+  margin-right: @navbar-padding-horizontal;
+  padding: 9px 10px;
+  .navbar-vertical-align(34px);
+  background-color: transparent;
+  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
+  border: 1px solid transparent;
+  border-radius: @border-radius-base;
+
+  // We remove the `outline` here, but later compensate by attaching `:hover`
+  // styles to `:focus`.
+  &:focus {
+    outline: 0;
+  }
+
+  // Bars
+  .icon-bar {
+    display: block;
+    width: 22px;
+    height: 2px;
+    border-radius: 1px;
+  }
+  .icon-bar + .icon-bar {
+    margin-top: 4px;
+  }
+
+  @media (min-width: @grid-float-breakpoint) {
+    display: none;
+  }
+}
+
+
+// Navbar nav links
+//
+// Builds on top of the `.nav` components with its own modifier class to make
+// the nav the full height of the horizontal nav (above 768px).
+
+.navbar-nav {
+  margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;
+
+  > li > a {
+    padding-top:    10px;
+    padding-bottom: 10px;
+    line-height: @line-height-computed;
+  }
+
+  @media (max-width: @grid-float-breakpoint-max) {
+    // Dropdowns get custom display when collapsed
+    .open .dropdown-menu {
+      position: static;
+      float: none;
+      width: auto;
+      margin-top: 0;
+      background-color: transparent;
+      border: 0;
+      box-shadow: none;
+      > li > a,
+      .dropdown-header {
+        padding: 5px 15px 5px 25px;
+      }
+      > li > a {
+        line-height: @line-height-computed;
+        &:hover,
+        &:focus {
+          background-image: none;
+        }
+      }
+    }
+  }
+
+  // Uncollapse the nav
+  @media (min-width: @grid-float-breakpoint) {
+    float: left;
+    margin: 0;
+
+    > li {
+      float: left;
+      > a {
+        padding-top:    @navbar-padding-vertical;
+        padding-bottom: @navbar-padding-vertical;
+      }
+    }
+
+    &.navbar-right:last-child {
+      margin-right: -@navbar-padding-horizontal;
+    }
+  }
+}
+
+
+// Component alignment
+//
+// Repurpose the pull utilities as their own navbar utilities to avoid specificity
+// issues with parents and chaining. Only do this when the navbar is uncollapsed
+// though so that navbar contents properly stack and align in mobile.
+
+@media (min-width: @grid-float-breakpoint) {
+  .navbar-left  { .pull-left(); }
+  .navbar-right { .pull-right(); }
+}
+
+
+// Navbar form
+//
+// Extension of the `.form-inline` with some extra flavor for optimum display in
+// our navbars.
+
+.navbar-form {
+  margin-left: -@navbar-padding-horizontal;
+  margin-right: -@navbar-padding-horizontal;
+  padding: 10px @navbar-padding-horizontal;
+  border-top: 1px solid transparent;
+  border-bottom: 1px solid transparent;
+  @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);
+  .box-shadow(@shadow);
+
+  // Mixin behavior for optimum display
+  .form-inline();
+
+  .form-group {
+    @media (max-width: @grid-float-breakpoint-max) {
+      margin-bottom: 5px;
+    }
+  }
+
+  // Vertically center in expanded, horizontal navbar
+  .navbar-vertical-align(@input-height-base);
+
+  // Undo 100% width for pull classes
+  @media (min-width: @grid-float-breakpoint) {
+    width: auto;
+    border: 0;
+    margin-left: 0;
+    margin-right: 0;
+    padding-top: 0;
+    padding-bottom: 0;
+    .box-shadow(none);
+
+    // Outdent the form if last child to line up with content down the page
+    &.navbar-right:last-child {
+      margin-right: -@navbar-padding-horizontal;
+    }
+  }
+}
+
+
+// Dropdown menus
+
+// Menu position and menu carets
+.navbar-nav > li > .dropdown-menu {
+  margin-top: 0;
+  .border-top-radius(0);
+}
+// Menu position and menu caret support for dropups via extra dropup class
+.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
+  .border-bottom-radius(0);
+}
+
+
+// Buttons in navbars
+//
+// Vertically center a button within a navbar (when *not* in a form).
+
+.navbar-btn {
+  .navbar-vertical-align(@input-height-base);
+
+  &.btn-sm {
+    .navbar-vertical-align(@input-height-small);
+  }
+  &.btn-xs {
+    .navbar-vertical-align(22);
+  }
+}
+
+
+// Text in navbars
+//
+// Add a class to make any element properly align itself vertically within the navbars.
+
+.navbar-text {
+  .navbar-vertical-align(@line-height-computed);
+
+  @media (min-width: @grid-float-breakpoint) {
+    float: left;
+    margin-left: @navbar-padding-horizontal;
+    margin-right: @navbar-padding-horizontal;
+
+    // Outdent the form if last child to line up with content down the page
+    &.navbar-right:last-child {
+      margin-right: 0;
+    }
+  }
+}
+
+// Alternate navbars
+// --------------------------------------------------
+
+// Default navbar
+.navbar-default {
+  background-color: @navbar-default-bg;
+  border-color: @navbar-default-border;
+
+  .navbar-brand {
+    color: @navbar-default-brand-color;
+    &:hover,
+    &:focus {
+      color: @navbar-default-brand-hover-color;
+      background-color: @navbar-default-brand-hover-bg;
+    }
+  }
+
+  .navbar-text {
+    color: @navbar-default-color;
+  }
+
+  .navbar-nav {
+    > li > a {
+      color: @navbar-default-link-color;
+
+      &:hover,
+      &:focus {
+        color: @navbar-default-link-hover-color;
+        background-color: @navbar-default-link-hover-bg;
+      }
+    }
+    > .active > a {
+      &,
+      &:hover,
+      &:focus {
+        color: @navbar-default-link-active-color;
+        background-color: @navbar-default-link-active-bg;
+      }
+    }
+    > .disabled > a {
+      &,
+      &:hover,
+      &:focus {
+        color: @navbar-default-link-disabled-color;
+        background-color: @navbar-default-link-disabled-bg;
+      }
+    }
+  }
+
+  .navbar-toggle {
+    border-color: @navbar-default-toggle-border-color;
+    &:hover,
+    &:focus {
+      background-color: @navbar-default-toggle-hover-bg;
+    }
+    .icon-bar {
+      background-color: @navbar-default-toggle-icon-bar-bg;
+    }
+  }
+
+  .navbar-collapse,
+  .navbar-form {
+    border-color: @navbar-default-border;
+  }
+
+  // Dropdown menu items
+  .navbar-nav {
+    // Remove background color from open dropdown
+    > .open > a {
+      &,
+      &:hover,
+      &:focus {
+        background-color: @navbar-default-link-active-bg;
+        color: @navbar-default-link-active-color;
+      }
+    }
+
+    @media (max-width: @grid-float-breakpoint-max) {
+      // Dropdowns get custom display when collapsed
+      .open .dropdown-menu {
+        > li > a {
+          color: @navbar-default-link-color;
+          &:hover,
+          &:focus {
+            color: @navbar-default-link-hover-color;
+            background-color: @navbar-default-link-hover-bg;
+          }
+        }
+        > .active > a {
+          &,
+          &:hover,
+          &:focus {
+            color: @navbar-default-link-active-color;
+            background-color: @navbar-default-link-active-bg;
+          }
+        }
+        > .disabled > a {
+          &,
+          &:hover,
+          &:focus {
+            color: @navbar-default-link-disabled-color;
+            background-color: @navbar-default-link-disabled-bg;
+          }
+        }
+      }
+    }
+  }
+
+
+  // Links in navbars
+  //
+  // Add a class to ensure links outside the navbar nav are colored correctly.
+
+  .navbar-link {
+    color: @navbar-default-link-color;
+    &:hover {
+      color: @navbar-default-link-hover-color;
+    }
+  }
+
+  .btn-link {
+    color: @navbar-default-link-color;
+    &:hover,
+    &:focus {
+      color: @navbar-default-link-hover-color;
+    }
+    &[disabled],
+    fieldset[disabled] & {
+      &:hover,
+      &:focus {
+        color: @navbar-default-link-disabled-color;
+      }
+    }
+  }
+}
+
+// Inverse navbar
+
+.navbar-inverse {
+  background-color: @navbar-inverse-bg;
+  border-color: @navbar-inverse-border;
+
+  .navbar-brand {
+    color: @navbar-inverse-brand-color;
+    &:hover,
+    &:focus {
+      color: @navbar-inverse-brand-hover-color;
+      background-color: @navbar-inverse-brand-hover-bg;
+    }
+  }
+
+  .navbar-text {
+    color: @navbar-inverse-color;
+  }
+
+  .navbar-nav {
+    > li > a {
+      color: @navbar-inverse-link-color;
+
+      &:hover,
+      &:focus {
+        color: @navbar-inverse-link-hover-color;
+        background-color: @navbar-inverse-link-hover-bg;
+      }
+    }
+    > .active > a {
+      &,
+      &:hover,
+      &:focus {
+        color: @navbar-inverse-link-active-color;
+        background-color: @navbar-inverse-link-active-bg;
+      }
+    }
+    > .disabled > a {
+      &,
+      &:hover,
+      &:focus {
+        color: @navbar-inverse-link-disabled-color;
+        background-color: @navbar-inverse-link-disabled-bg;
+      }
+    }
+  }
+
+  // Darken the responsive nav toggle
+  .navbar-toggle {
+    border-color: @navbar-inverse-toggle-border-color;
+    &:hover,
+    &:focus {
+      background-color: @navbar-inverse-toggle-hover-bg;
+    }
+    .icon-bar {
+      background-color: @navbar-inverse-toggle-icon-bar-bg;
+    }
+  }
+
+  .navbar-collapse,
+  .navbar-form {
+    border-color: darken(@navbar-inverse-bg, 7%);
+  }
+
+  // Dropdowns
+  .navbar-nav {
+    > .open > a {
+      &,
+      &:hover,
+      &:focus {
+        background-color: @navbar-inverse-link-active-bg;
+        color: @navbar-inverse-link-active-color;
+      }
+    }
+
+    @media (max-width: @grid-float-breakpoint-max) {
+      // Dropdowns get custom display
+      .open .dropdown-menu {
+        > .dropdown-header {
+          border-color: @navbar-inverse-border;
+        }
+        .divider {
+          background-color: @navbar-inverse-border;
+        }
+        > li > a {
+          color: @navbar-inverse-link-color;
+          &:hover,
+          &:focus {
+            color: @navbar-inverse-link-hover-color;
+            background-color: @navbar-inverse-link-hover-bg;
+          }
+        }
+        > .active > a {
+          &,
+          &:hover,
+          &:focus {
+            color: @navbar-inverse-link-active-color;
+            background-color: @navbar-inverse-link-active-bg;
+          }
+        }
+        > .disabled > a {
+          &,
+          &:hover,
+          &:focus {
+            color: @navbar-inverse-link-disabled-color;
+            background-color: @navbar-inverse-link-disabled-bg;
+          }
+        }
+      }
+    }
+  }
+
+  .navbar-link {
+    color: @navbar-inverse-link-color;
+    &:hover {
+      color: @navbar-inverse-link-hover-color;
+    }
+  }
+
+  .btn-link {
+    color: @navbar-inverse-link-color;
+    &:hover,
+    &:focus {
+      color: @navbar-inverse-link-hover-color;
+    }
+    &[disabled],
+    fieldset[disabled] & {
+      &:hover,
+      &:focus {
+        color: @navbar-inverse-link-disabled-color;
+      }
+    }
+  }
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/navs.less b/app/soc/content/less/thirdparty/bootstrap/navs.less
new file mode 100755
index 0000000..98a6430
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/navs.less
@@ -0,0 +1,242 @@
+//
+// Navs
+// --------------------------------------------------
+
+
+// Base class
+// --------------------------------------------------
+
+.nav {
+  margin-bottom: 0;
+  padding-left: 0; // Override default ul/ol
+  list-style: none;
+  &:extend(.clearfix all);
+
+  > li {
+    position: relative;
+    display: block;
+
+    > a {
+      position: relative;
+      display: block;
+      padding: @nav-link-padding;
+      &:hover,
+      &:focus {
+        text-decoration: none;
+        background-color: @nav-link-hover-bg;
+      }
+    }
+
+    // Disabled state sets text to gray and nukes hover/tab effects
+    &.disabled > a {
+      color: @nav-disabled-link-color;
+
+      &:hover,
+      &:focus {
+        color: @nav-disabled-link-hover-color;
+        text-decoration: none;
+        background-color: transparent;
+        cursor: not-allowed;
+      }
+    }
+  }
+
+  // Open dropdowns
+  .open > a {
+    &,
+    &:hover,
+    &:focus {
+      background-color: @nav-link-hover-bg;
+      border-color: @link-color;
+    }
+  }
+
+  // Nav dividers (deprecated with v3.0.1)
+  //
+  // This should have been removed in v3 with the dropping of `.nav-list`, but
+  // we missed it. We don't currently support this anywhere, but in the interest
+  // of maintaining backward compatibility in case you use it, it's deprecated.
+  .nav-divider {
+    .nav-divider();
+  }
+
+  // Prevent IE8 from misplacing imgs
+  //
+  // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989
+  > li > a > img {
+    max-width: none;
+  }
+}
+
+
+// Tabs
+// -------------------------
+
+// Give the tabs something to sit on
+.nav-tabs {
+  border-bottom: 1px solid @nav-tabs-border-color;
+  > li {
+    float: left;
+    // Make the list-items overlay the bottom border
+    margin-bottom: -1px;
+
+    // Actual tabs (as links)
+    > a {
+      margin-right: 2px;
+      line-height: @line-height-base;
+      border: 1px solid transparent;
+      border-radius: @border-radius-base @border-radius-base 0 0;
+      &:hover {
+        border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;
+      }
+    }
+
+    // Active state, and its :hover to override normal :hover
+    &.active > a {
+      &,
+      &:hover,
+      &:focus {
+        color: @nav-tabs-active-link-hover-color;
+        background-color: @nav-tabs-active-link-hover-bg;
+        border: 1px solid @nav-tabs-active-link-hover-border-color;
+        border-bottom-color: transparent;
+        cursor: default;
+      }
+    }
+  }
+  // pulling this in mainly for less shorthand
+  &.nav-justified {
+    .nav-justified();
+    .nav-tabs-justified();
+  }
+}
+
+
+// Pills
+// -------------------------
+.nav-pills {
+  > li {
+    float: left;
+
+    // Links rendered as pills
+    > a {
+      border-radius: @nav-pills-border-radius;
+    }
+    + li {
+      margin-left: 2px;
+    }
+
+    // Active state
+    &.active > a {
+      &,
+      &:hover,
+      &:focus {
+        color: @nav-pills-active-link-hover-color;
+        background-color: @nav-pills-active-link-hover-bg;
+      }
+    }
+  }
+}
+
+
+// Stacked pills
+.nav-stacked {
+  > li {
+    float: none;
+    + li {
+      margin-top: 2px;
+      margin-left: 0; // no need for this gap between nav items
+    }
+  }
+}
+
+
+// Nav variations
+// --------------------------------------------------
+
+// Justified nav links
+// -------------------------
+
+.nav-justified {
+  width: 100%;
+
+  > li {
+    float: none;
+    > a {
+      text-align: center;
+      margin-bottom: 5px;
+    }
+  }
+
+  > .dropdown .dropdown-menu {
+    top: auto;
+    left: auto;
+  }
+
+  @media (min-width: @screen-sm-min) {
+    > li {
+      display: table-cell;
+      width: 1%;
+      > a {
+        margin-bottom: 0;
+      }
+    }
+  }
+}
+
+// Move borders to anchors instead of bottom of list
+//
+// Mixin for adding on top the shared `.nav-justified` styles for our tabs
+.nav-tabs-justified {
+  border-bottom: 0;
+
+  > li > a {
+    // Override margin from .nav-tabs
+    margin-right: 0;
+    border-radius: @border-radius-base;
+  }
+
+  > .active > a,
+  > .active > a:hover,
+  > .active > a:focus {
+    border: 1px solid @nav-tabs-justified-link-border-color;
+  }
+
+  @media (min-width: @screen-sm-min) {
+    > li > a {
+      border-bottom: 1px solid @nav-tabs-justified-link-border-color;
+      border-radius: @border-radius-base @border-radius-base 0 0;
+    }
+    > .active > a,
+    > .active > a:hover,
+    > .active > a:focus {
+      border-bottom-color: @nav-tabs-justified-active-link-border-color;
+    }
+  }
+}
+
+
+// Tabbable tabs
+// -------------------------
+
+// Hide tabbable panes to start, show them when `.active`
+.tab-content {
+  > .tab-pane {
+    display: none;
+  }
+  > .active {
+    display: block;
+  }
+}
+
+
+// Dropdowns
+// -------------------------
+
+// Specific dropdowns
+.nav-tabs .dropdown-menu {
+  // make dropdown border overlap tab border
+  margin-top: -1px;
+  // Remove the top rounded corners here since there is a hard edge above the menu
+  .border-top-radius(0);
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/normalize.less b/app/soc/content/less/thirdparty/bootstrap/normalize.less
new file mode 100755
index 0000000..ce04b6a
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/normalize.less
@@ -0,0 +1,425 @@
+/*! normalize.css v3.0.1 | MIT License | git.io/normalize */
+
+//
+// 1. Set default font family to sans-serif.
+// 2. Prevent iOS text size adjust after orientation change, without disabling
+//    user zoom.
+//
+
+html {
+  font-family: sans-serif; // 1
+  -ms-text-size-adjust: 100%; // 2
+  -webkit-text-size-adjust: 100%; // 2
+}
+
+//
+// Remove default margin.
+//
+
+body {
+  margin: 0;
+}
+
+// HTML5 display definitions
+// ==========================================================================
+
+//
+// Correct `block` display not defined for any HTML5 element in IE 8/9.
+// Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox.
+// Correct `block` display not defined for `main` in IE 11.
+//
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+nav,
+section,
+summary {
+  display: block;
+}
+
+//
+// 1. Correct `inline-block` display not defined in IE 8/9.
+// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
+//
+
+audio,
+canvas,
+progress,
+video {
+  display: inline-block; // 1
+  vertical-align: baseline; // 2
+}
+
+//
+// Prevent modern browsers from displaying `audio` without controls.
+// Remove excess height in iOS 5 devices.
+//
+
+audio:not([controls]) {
+  display: none;
+  height: 0;
+}
+
+//
+// Address `[hidden]` styling not present in IE 8/9/10.
+// Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
+//
+
+[hidden],
+template {
+  display: none;
+}
+
+// Links
+// ==========================================================================
+
+//
+// Remove the gray background color from active links in IE 10.
+//
+
+a {
+  background: transparent;
+}
+
+//
+// Improve readability when focused and also mouse hovered in all browsers.
+//
+
+a:active,
+a:hover {
+  outline: 0;
+}
+
+// Text-level semantics
+// ==========================================================================
+
+//
+// Address styling not present in IE 8/9/10/11, Safari, and Chrome.
+//
+
+abbr[title] {
+  border-bottom: 1px dotted;
+}
+
+//
+// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
+//
+
+b,
+strong {
+  font-weight: bold;
+}
+
+//
+// Address styling not present in Safari and Chrome.
+//
+
+dfn {
+  font-style: italic;
+}
+
+//
+// Address variable `h1` font-size and margin within `section` and `article`
+// contexts in Firefox 4+, Safari, and Chrome.
+//
+
+h1 {
+  font-size: 2em;
+  margin: 0.67em 0;
+}
+
+//
+// Address styling not present in IE 8/9.
+//
+
+mark {
+  background: #ff0;
+  color: #000;
+}
+
+//
+// Address inconsistent and variable font size in all browsers.
+//
+
+small {
+  font-size: 80%;
+}
+
+//
+// Prevent `sub` and `sup` affecting `line-height` in all browsers.
+//
+
+sub,
+sup {
+  font-size: 75%;
+  line-height: 0;
+  position: relative;
+  vertical-align: baseline;
+}
+
+sup {
+  top: -0.5em;
+}
+
+sub {
+  bottom: -0.25em;
+}
+
+// Embedded content
+// ==========================================================================
+
+//
+// Remove border when inside `a` element in IE 8/9/10.
+//
+
+img {
+  border: 0;
+}
+
+//
+// Correct overflow not hidden in IE 9/10/11.
+//
+
+svg:not(:root) {
+  overflow: hidden;
+}
+
+// Grouping content
+// ==========================================================================
+
+//
+// Address margin not present in IE 8/9 and Safari.
+//
+
+figure {
+  margin: 1em 40px;
+}
+
+//
+// Address differences between Firefox and other browsers.
+//
+
+hr {
+  -moz-box-sizing: content-box;
+  box-sizing: content-box;
+  height: 0;
+}
+
+//
+// Contain overflow in all browsers.
+//
+
+pre {
+  overflow: auto;
+}
+
+//
+// Address odd `em`-unit font size rendering in all browsers.
+//
+
+code,
+kbd,
+pre,
+samp {
+  font-family: monospace, monospace;
+  font-size: 1em;
+}
+
+// Forms
+// ==========================================================================
+
+//
+// Known limitation: by default, Chrome and Safari on OS X allow very limited
+// styling of `select`, unless a `border` property is set.
+//
+
+//
+// 1. Correct color not being inherited.
+//    Known issue: affects color of disabled elements.
+// 2. Correct font properties not being inherited.
+// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
+//
+
+button,
+input,
+optgroup,
+select,
+textarea {
+  color: inherit; // 1
+  font: inherit; // 2
+  margin: 0; // 3
+}
+
+//
+// Address `overflow` set to `hidden` in IE 8/9/10/11.
+//
+
+button {
+  overflow: visible;
+}
+
+//
+// Address inconsistent `text-transform` inheritance for `button` and `select`.
+// All other form control elements do not inherit `text-transform` values.
+// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
+// Correct `select` style inheritance in Firefox.
+//
+
+button,
+select {
+  text-transform: none;
+}
+
+//
+// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+//    and `video` controls.
+// 2. Correct inability to style clickable `input` types in iOS.
+// 3. Improve usability and consistency of cursor style between image-type
+//    `input` and others.
+//
+
+button,
+html input[type="button"], // 1
+input[type="reset"],
+input[type="submit"] {
+  -webkit-appearance: button; // 2
+  cursor: pointer; // 3
+}
+
+//
+// Re-set default cursor for disabled elements.
+//
+
+button[disabled],
+html input[disabled] {
+  cursor: default;
+}
+
+//
+// Remove inner padding and border in Firefox 4+.
+//
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+  border: 0;
+  padding: 0;
+}
+
+//
+// Address Firefox 4+ setting `line-height` on `input` using `!important` in
+// the UA stylesheet.
+//
+
+input {
+  line-height: normal;
+}
+
+//
+// It's recommended that you don't attempt to style these elements.
+// Firefox's implementation doesn't respect box-sizing, padding, or width.
+//
+// 1. Address box sizing set to `content-box` in IE 8/9/10.
+// 2. Remove excess padding in IE 8/9/10.
+//
+
+input[type="checkbox"],
+input[type="radio"] {
+  box-sizing: border-box; // 1
+  padding: 0; // 2
+}
+
+//
+// Fix the cursor style for Chrome's increment/decrement buttons. For certain
+// `font-size` values of the `input`, it causes the cursor style of the
+// decrement button to change from `default` to `text`.
+//
+
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+  height: auto;
+}
+
+//
+// 1. Address `appearance` set to `searchfield` in Safari and Chrome.
+// 2. Address `box-sizing` set to `border-box` in Safari and 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;
+}
+
+//
+// Remove inner padding and search cancel button in Safari and Chrome on OS X.
+// Safari (but not Chrome) clips the cancel button when the search input has
+// padding (and `textfield` appearance).
+//
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+
+//
+// Define consistent border, margin, and padding.
+//
+
+fieldset {
+  border: 1px solid #c0c0c0;
+  margin: 0 2px;
+  padding: 0.35em 0.625em 0.75em;
+}
+
+//
+// 1. Correct `color` not being inherited in IE 8/9/10/11.
+// 2. Remove padding so people aren't caught out if they zero out fieldsets.
+//
+
+legend {
+  border: 0; // 1
+  padding: 0; // 2
+}
+
+//
+// Remove default vertical scrollbar in IE 8/9/10/11.
+//
+
+textarea {
+  overflow: auto;
+}
+
+//
+// Don't inherit the `font-weight` (applied by a rule above).
+// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
+//
+
+optgroup {
+  font-weight: bold;
+}
+
+// Tables
+// ==========================================================================
+
+//
+// Remove most spacing between table cells.
+//
+
+table {
+  border-collapse: collapse;
+  border-spacing: 0;
+}
+
+td,
+th {
+  padding: 0;
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/pager.less b/app/soc/content/less/thirdparty/bootstrap/pager.less
new file mode 100755
index 0000000..59103f4
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/pager.less
@@ -0,0 +1,55 @@
+//
+// Pager pagination
+// --------------------------------------------------
+
+
+.pager {
+  padding-left: 0;
+  margin: @line-height-computed 0;
+  list-style: none;
+  text-align: center;
+  &:extend(.clearfix all);
+  li {
+    display: inline;
+    > a,
+    > span {
+      display: inline-block;
+      padding: 5px 14px;
+      background-color: @pager-bg;
+      border: 1px solid @pager-border;
+      border-radius: @pager-border-radius;
+    }
+
+    > a:hover,
+    > a:focus {
+      text-decoration: none;
+      background-color: @pager-hover-bg;
+    }
+  }
+
+  .next {
+    > a,
+    > span {
+      float: right;
+    }
+  }
+
+  .previous {
+    > a,
+    > span {
+      float: left;
+    }
+  }
+
+  .disabled {
+    > a,
+    > a:hover,
+    > a:focus,
+    > span {
+      color: @pager-disabled-color;
+      background-color: @pager-bg;
+      cursor: not-allowed;
+    }
+  }
+
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/pagination.less b/app/soc/content/less/thirdparty/bootstrap/pagination.less
new file mode 100755
index 0000000..b2856ae
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/pagination.less
@@ -0,0 +1,88 @@
+//
+// Pagination (multiple pages)
+// --------------------------------------------------
+.pagination {
+  display: inline-block;
+  padding-left: 0;
+  margin: @line-height-computed 0;
+  border-radius: @border-radius-base;
+
+  > li {
+    display: inline; // Remove list-style and block-level defaults
+    > a,
+    > span {
+      position: relative;
+      float: left; // Collapse white-space
+      padding: @padding-base-vertical @padding-base-horizontal;
+      line-height: @line-height-base;
+      text-decoration: none;
+      color: @pagination-color;
+      background-color: @pagination-bg;
+      border: 1px solid @pagination-border;
+      margin-left: -1px;
+    }
+    &:first-child {
+      > a,
+      > span {
+        margin-left: 0;
+        .border-left-radius(@border-radius-base);
+      }
+    }
+    &:last-child {
+      > a,
+      > span {
+        .border-right-radius(@border-radius-base);
+      }
+    }
+  }
+
+  > li > a,
+  > li > span {
+    &:hover,
+    &:focus {
+      color: @pagination-hover-color;
+      background-color: @pagination-hover-bg;
+      border-color: @pagination-hover-border;
+    }
+  }
+
+  > .active > a,
+  > .active > span {
+    &,
+    &:hover,
+    &:focus {
+      z-index: 2;
+      color: @pagination-active-color;
+      background-color: @pagination-active-bg;
+      border-color: @pagination-active-border;
+      cursor: default;
+    }
+  }
+
+  > .disabled {
+    > span,
+    > span:hover,
+    > span:focus,
+    > a,
+    > a:hover,
+    > a:focus {
+      color: @pagination-disabled-color;
+      background-color: @pagination-disabled-bg;
+      border-color: @pagination-disabled-border;
+      cursor: not-allowed;
+    }
+  }
+}
+
+// Sizing
+// --------------------------------------------------
+
+// Large
+.pagination-lg {
+  .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large);
+}
+
+// Small
+.pagination-sm {
+  .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small);
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/panels.less b/app/soc/content/less/thirdparty/bootstrap/panels.less
new file mode 100755
index 0000000..2dc2131
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/panels.less
@@ -0,0 +1,243 @@
+//
+// Panels
+// --------------------------------------------------
+
+
+// Base class
+.panel {
+  margin-bottom: @line-height-computed;
+  background-color: @panel-bg;
+  border: 1px solid transparent;
+  border-radius: @panel-border-radius;
+  .box-shadow(0 1px 1px rgba(0,0,0,.05));
+}
+
+// Panel contents
+.panel-body {
+  padding: @panel-body-padding;
+  &:extend(.clearfix all);
+}
+
+// Optional heading
+.panel-heading {
+  padding: @panel-heading-padding;
+  border-bottom: 1px solid transparent;
+  .border-top-radius((@panel-border-radius - 1));
+
+  > .dropdown .dropdown-toggle {
+    color: inherit;
+  }
+}
+
+// Within heading, strip any `h*` tag of its default margins for spacing.
+.panel-title {
+  margin-top: 0;
+  margin-bottom: 0;
+  font-size: ceil((@font-size-base * 1.125));
+  color: inherit;
+
+  > a {
+    color: inherit;
+  }
+}
+
+// Optional footer (stays gray in every modifier class)
+.panel-footer {
+  padding: @panel-footer-padding;
+  background-color: @panel-footer-bg;
+  border-top: 1px solid @panel-inner-border;
+  .border-bottom-radius((@panel-border-radius - 1));
+}
+
+
+// List groups in panels
+//
+// By default, space out list group content from panel headings to account for
+// any kind of custom content between the two.
+
+.panel {
+  > .list-group {
+    margin-bottom: 0;
+
+    .list-group-item {
+      border-width: 1px 0;
+      border-radius: 0;
+    }
+
+    // Add border top radius for first one
+    &:first-child {
+      .list-group-item:first-child {
+        border-top: 0;
+        .border-top-radius((@panel-border-radius - 1));
+      }
+    }
+    // Add border bottom radius for last one
+    &:last-child {
+      .list-group-item:last-child {
+        border-bottom: 0;
+        .border-bottom-radius((@panel-border-radius - 1));
+      }
+    }
+  }
+}
+// Collapse space between when there's no additional content.
+.panel-heading + .list-group {
+  .list-group-item:first-child {
+    border-top-width: 0;
+  }
+}
+.list-group + .panel-footer {
+  border-top-width: 0;
+}
+
+// Tables in panels
+//
+// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and
+// watch it go full width.
+
+.panel {
+  > .table,
+  > .table-responsive > .table,
+  > .panel-collapse > .table {
+    margin-bottom: 0;
+  }
+  // Add border top radius for first one
+  > .table:first-child,
+  > .table-responsive:first-child > .table:first-child {
+    .border-top-radius((@panel-border-radius - 1));
+
+    > thead:first-child,
+    > tbody:first-child {
+      > tr:first-child {
+        td:first-child,
+        th:first-child {
+          border-top-left-radius: (@panel-border-radius - 1);
+        }
+        td:last-child,
+        th:last-child {
+          border-top-right-radius: (@panel-border-radius - 1);
+        }
+      }
+    }
+  }
+  // Add border bottom radius for last one
+  > .table:last-child,
+  > .table-responsive:last-child > .table:last-child {
+    .border-bottom-radius((@panel-border-radius - 1));
+
+    > tbody:last-child,
+    > tfoot:last-child {
+      > tr:last-child {
+        td:first-child,
+        th:first-child {
+          border-bottom-left-radius: (@panel-border-radius - 1);
+        }
+        td:last-child,
+        th:last-child {
+          border-bottom-right-radius: (@panel-border-radius - 1);
+        }
+      }
+    }
+  }
+  > .panel-body + .table,
+  > .panel-body + .table-responsive {
+    border-top: 1px solid @table-border-color;
+  }
+  > .table > tbody:first-child > tr:first-child th,
+  > .table > tbody:first-child > tr:first-child td {
+    border-top: 0;
+  }
+  > .table-bordered,
+  > .table-responsive > .table-bordered {
+    border: 0;
+    > thead,
+    > tbody,
+    > tfoot {
+      > tr {
+        > th:first-child,
+        > td:first-child {
+          border-left: 0;
+        }
+        > th:last-child,
+        > td:last-child {
+          border-right: 0;
+        }
+      }
+    }
+    > thead,
+    > tbody {
+      > tr:first-child {
+        > td,
+        > th {
+          border-bottom: 0;
+        }
+      }
+    }
+    > tbody,
+    > tfoot {
+      > tr:last-child {
+        > td,
+        > th {
+          border-bottom: 0;
+        }
+      }
+    }
+  }
+  > .table-responsive {
+    border: 0;
+    margin-bottom: 0;
+  }
+}
+
+
+// Collapsable panels (aka, accordion)
+//
+// Wrap a series of panels in `.panel-group` to turn them into an accordion with
+// the help of our collapse JavaScript plugin.
+
+.panel-group {
+  margin-bottom: @line-height-computed;
+
+  // Tighten up margin so it's only between panels
+  .panel {
+    margin-bottom: 0;
+    border-radius: @panel-border-radius;
+    + .panel {
+      margin-top: 5px;
+    }
+  }
+
+  .panel-heading {
+    border-bottom: 0;
+    + .panel-collapse > .panel-body {
+      border-top: 1px solid @panel-inner-border;
+    }
+  }
+  .panel-footer {
+    border-top: 0;
+    + .panel-collapse .panel-body {
+      border-bottom: 1px solid @panel-inner-border;
+    }
+  }
+}
+
+
+// Contextual variations
+.panel-default {
+  .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);
+}
+.panel-primary {
+  .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);
+}
+.panel-success {
+  .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);
+}
+.panel-info {
+  .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);
+}
+.panel-warning {
+  .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);
+}
+.panel-danger {
+  .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/popovers.less b/app/soc/content/less/thirdparty/bootstrap/popovers.less
new file mode 100755
index 0000000..bf6af40
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/popovers.less
@@ -0,0 +1,133 @@
+//
+// Popovers
+// --------------------------------------------------
+
+
+.popover {
+  position: absolute;
+  top: 0;
+  left: 0;
+  z-index: @zindex-popover;
+  display: none;
+  max-width: @popover-max-width;
+  padding: 1px;
+  text-align: left; // Reset given new insertion method
+  background-color: @popover-bg;
+  background-clip: padding-box;
+  border: 1px solid @popover-fallback-border-color;
+  border: 1px solid @popover-border-color;
+  border-radius: @border-radius-large;
+  .box-shadow(0 5px 10px rgba(0,0,0,.2));
+
+  // Overrides for proper insertion
+  white-space: normal;
+
+  // Offset the popover to account for the popover arrow
+  &.top     { margin-top: -@popover-arrow-width; }
+  &.right   { margin-left: @popover-arrow-width; }
+  &.bottom  { margin-top: @popover-arrow-width; }
+  &.left    { margin-left: -@popover-arrow-width; }
+}
+
+.popover-title {
+  margin: 0; // reset heading margin
+  padding: 8px 14px;
+  font-size: @font-size-base;
+  font-weight: normal;
+  line-height: 18px;
+  background-color: @popover-title-bg;
+  border-bottom: 1px solid darken(@popover-title-bg, 5%);
+  border-radius: (@border-radius-large - 1) (@border-radius-large - 1) 0 0;
+}
+
+.popover-content {
+  padding: 9px 14px;
+}
+
+// Arrows
+//
+// .arrow is outer, .arrow:after is inner
+
+.popover > .arrow {
+  &,
+  &:after {
+    position: absolute;
+    display: block;
+    width: 0;
+    height: 0;
+    border-color: transparent;
+    border-style: solid;
+  }
+}
+.popover > .arrow {
+  border-width: @popover-arrow-outer-width;
+}
+.popover > .arrow:after {
+  border-width: @popover-arrow-width;
+  content: "";
+}
+
+.popover {
+  &.top > .arrow {
+    left: 50%;
+    margin-left: -@popover-arrow-outer-width;
+    border-bottom-width: 0;
+    border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback
+    border-top-color: @popover-arrow-outer-color;
+    bottom: -@popover-arrow-outer-width;
+    &:after {
+      content: " ";
+      bottom: 1px;
+      margin-left: -@popover-arrow-width;
+      border-bottom-width: 0;
+      border-top-color: @popover-arrow-color;
+    }
+  }
+  &.right > .arrow {
+    top: 50%;
+    left: -@popover-arrow-outer-width;
+    margin-top: -@popover-arrow-outer-width;
+    border-left-width: 0;
+    border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback
+    border-right-color: @popover-arrow-outer-color;
+    &:after {
+      content: " ";
+      left: 1px;
+      bottom: -@popover-arrow-width;
+      border-left-width: 0;
+      border-right-color: @popover-arrow-color;
+    }
+  }
+  &.bottom > .arrow {
+    left: 50%;
+    margin-left: -@popover-arrow-outer-width;
+    border-top-width: 0;
+    border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback
+    border-bottom-color: @popover-arrow-outer-color;
+    top: -@popover-arrow-outer-width;
+    &:after {
+      content: " ";
+      top: 1px;
+      margin-left: -@popover-arrow-width;
+      border-top-width: 0;
+      border-bottom-color: @popover-arrow-color;
+    }
+  }
+
+  &.left > .arrow {
+    top: 50%;
+    right: -@popover-arrow-outer-width;
+    margin-top: -@popover-arrow-outer-width;
+    border-right-width: 0;
+    border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback
+    border-left-color: @popover-arrow-outer-color;
+    &:after {
+      content: " ";
+      right: 1px;
+      border-right-width: 0;
+      border-left-color: @popover-arrow-color;
+      bottom: -@popover-arrow-width;
+    }
+  }
+
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/print.less b/app/soc/content/less/thirdparty/bootstrap/print.less
new file mode 100755
index 0000000..3655d03
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/print.less
@@ -0,0 +1,101 @@
+//
+// Basic print styles
+// --------------------------------------------------
+// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css
+
+@media print {
+
+  * {
+    text-shadow: none !important;
+    color: #000 !important; // Black prints faster: h5bp.com/s
+    background: transparent !important;
+    box-shadow: none !important;
+  }
+
+  a,
+  a:visited {
+    text-decoration: underline;
+  }
+
+  a[href]:after {
+    content: " (" attr(href) ")";
+  }
+
+  abbr[title]:after {
+    content: " (" attr(title) ")";
+  }
+
+  // Don't show links for images, or javascript/internal links
+  a[href^="javascript:"]:after,
+  a[href^="#"]:after {
+    content: "";
+  }
+
+  pre,
+  blockquote {
+    border: 1px solid #999;
+    page-break-inside: avoid;
+  }
+
+  thead {
+    display: table-header-group; // h5bp.com/t
+  }
+
+  tr,
+  img {
+    page-break-inside: avoid;
+  }
+
+  img {
+    max-width: 100% !important;
+  }
+
+  p,
+  h2,
+  h3 {
+    orphans: 3;
+    widows: 3;
+  }
+
+  h2,
+  h3 {
+    page-break-after: avoid;
+  }
+
+  // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245
+  // Once fixed, we can just straight up remove this.
+  select {
+    background: #fff !important;
+  }
+
+  // Bootstrap components
+  .navbar {
+    display: none;
+  }
+  .table {
+    td,
+    th {
+      background-color: #fff !important;
+    }
+  }
+  .btn,
+  .dropup > .btn {
+    > .caret {
+      border-top-color: #000 !important;
+    }
+  }
+  .label {
+    border: 1px solid #000;
+  }
+
+  .table {
+    border-collapse: collapse !important;
+  }
+  .table-bordered {
+    th,
+    td {
+      border: 1px solid #ddd !important;
+    }
+  }
+
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/progress-bars.less b/app/soc/content/less/thirdparty/bootstrap/progress-bars.less
new file mode 100755
index 0000000..3ac52a2
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/progress-bars.less
@@ -0,0 +1,105 @@
+//
+// Progress bars
+// --------------------------------------------------
+
+
+// Bar animations
+// -------------------------
+
+// WebKit
+@-webkit-keyframes progress-bar-stripes {
+  from  { background-position: 40px 0; }
+  to    { background-position: 0 0; }
+}
+
+// Spec and IE10+
+@keyframes progress-bar-stripes {
+  from  { background-position: 40px 0; }
+  to    { background-position: 0 0; }
+}
+
+
+
+// Bar itself
+// -------------------------
+
+// Outer container
+.progress {
+  overflow: hidden;
+  height: @line-height-computed;
+  margin-bottom: @line-height-computed;
+  background-color: @progress-bg;
+  border-radius: @border-radius-base;
+  .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));
+}
+
+// Bar of progress
+.progress-bar {
+  float: left;
+  width: 0%;
+  height: 100%;
+  font-size: @font-size-small;
+  line-height: @line-height-computed;
+  color: @progress-bar-color;
+  text-align: center;
+  background-color: @progress-bar-bg;
+  .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));
+  .transition(width .6s ease);
+}
+
+// Striped bars
+//
+// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the
+// `.progress-bar-striped` class, which you just add to an existing
+// `.progress-bar`.
+.progress-striped .progress-bar,
+.progress-bar-striped {
+  #gradient > .striped();
+  background-size: 40px 40px;
+}
+
+// Call animation for the active one
+//
+// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the
+// `.progress-bar.active` approach.
+.progress.active .progress-bar,
+.progress-bar.active {
+  .animation(progress-bar-stripes 2s linear infinite);
+}
+
+// Account for lower percentages
+.progress-bar {
+  &[aria-valuenow="1"],
+  &[aria-valuenow="2"] {
+    min-width: 30px;
+  }
+
+  &[aria-valuenow="0"] {
+    color: @gray-light;
+    min-width: 30px;
+    background-color: transparent;
+    background-image: none;
+    box-shadow: none;
+  }
+}
+
+
+
+// Variations
+// -------------------------
+
+.progress-bar-success {
+  .progress-bar-variant(@progress-bar-success-bg);
+}
+
+.progress-bar-info {
+  .progress-bar-variant(@progress-bar-info-bg);
+}
+
+.progress-bar-warning {
+  .progress-bar-variant(@progress-bar-warning-bg);
+}
+
+.progress-bar-danger {
+  .progress-bar-variant(@progress-bar-danger-bg);
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/responsive-embed.less b/app/soc/content/less/thirdparty/bootstrap/responsive-embed.less
new file mode 100755
index 0000000..a884d49
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/responsive-embed.less
@@ -0,0 +1,34 @@
+// Embeds responsive
+//
+// Credit: Nicolas Gallagher and SUIT CSS.
+
+.embed-responsive {
+  position: relative;
+  display: block;
+  height: 0;
+  padding: 0;
+  overflow: hidden;
+
+  .embed-responsive-item,
+  iframe,
+  embed,
+  object {
+    position: absolute;
+    top: 0;
+    left: 0;
+    bottom: 0;
+    height: 100%;
+    width: 100%;
+    border: 0;
+  }
+
+  // Modifier class for 16:9 aspect ratio
+  &.embed-responsive-16by9 {
+    padding-bottom: 56.25%;
+  }
+
+  // Modifier class for 4:3 aspect ratio
+  &.embed-responsive-4by3 {
+    padding-bottom: 75%;
+  }
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/responsive-utilities.less b/app/soc/content/less/thirdparty/bootstrap/responsive-utilities.less
new file mode 100755
index 0000000..b1db31d
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/responsive-utilities.less
@@ -0,0 +1,194 @@
+//
+// Responsive: Utility classes
+// --------------------------------------------------
+
+
+// IE10 in Windows (Phone) 8
+//
+// Support for responsive views via media queries is kind of borked in IE10, for
+// Surface/desktop in split view and for Windows Phone 8. This particular fix
+// must be accompanied by a snippet of JavaScript to sniff the user agent and
+// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at
+// our Getting Started page for more information on this bug.
+//
+// For more information, see the following:
+//
+// Issue: https://github.com/twbs/bootstrap/issues/10497
+// Docs: http://getbootstrap.com/getting-started/#support-ie10-width
+// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/
+// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/
+
+@-ms-viewport {
+  width: device-width;
+}
+
+
+// Visibility utilities
+// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0
+.visible-xs,
+.visible-sm,
+.visible-md,
+.visible-lg {
+  .responsive-invisibility();
+}
+
+.visible-xs-block,
+.visible-xs-inline,
+.visible-xs-inline-block,
+.visible-sm-block,
+.visible-sm-inline,
+.visible-sm-inline-block,
+.visible-md-block,
+.visible-md-inline,
+.visible-md-inline-block,
+.visible-lg-block,
+.visible-lg-inline,
+.visible-lg-inline-block {
+  display: none !important;
+}
+
+.visible-xs {
+  @media (max-width: @screen-xs-max) {
+    .responsive-visibility();
+  }
+}
+.visible-xs-block {
+  @media (max-width: @screen-xs-max) {
+    display: block !important;
+  }
+}
+.visible-xs-inline {
+  @media (max-width: @screen-xs-max) {
+    display: inline !important;
+  }
+}
+.visible-xs-inline-block {
+  @media (max-width: @screen-xs-max) {
+    display: inline-block !important;
+  }
+}
+
+.visible-sm {
+  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
+    .responsive-visibility();
+  }
+}
+.visible-sm-block {
+  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
+    display: block !important;
+  }
+}
+.visible-sm-inline {
+  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
+    display: inline !important;
+  }
+}
+.visible-sm-inline-block {
+  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
+    display: inline-block !important;
+  }
+}
+
+.visible-md {
+  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
+    .responsive-visibility();
+  }
+}
+.visible-md-block {
+  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
+    display: block !important;
+  }
+}
+.visible-md-inline {
+  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
+    display: inline !important;
+  }
+}
+.visible-md-inline-block {
+  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
+    display: inline-block !important;
+  }
+}
+
+.visible-lg {
+  @media (min-width: @screen-lg-min) {
+    .responsive-visibility();
+  }
+}
+.visible-lg-block {
+  @media (min-width: @screen-lg-min) {
+    display: block !important;
+  }
+}
+.visible-lg-inline {
+  @media (min-width: @screen-lg-min) {
+    display: inline !important;
+  }
+}
+.visible-lg-inline-block {
+  @media (min-width: @screen-lg-min) {
+    display: inline-block !important;
+  }
+}
+
+.hidden-xs {
+  @media (max-width: @screen-xs-max) {
+    .responsive-invisibility();
+  }
+}
+.hidden-sm {
+  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
+    .responsive-invisibility();
+  }
+}
+.hidden-md {
+  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
+    .responsive-invisibility();
+  }
+}
+.hidden-lg {
+  @media (min-width: @screen-lg-min) {
+    .responsive-invisibility();
+  }
+}
+
+
+// Print utilities
+//
+// Media queries are placed on the inside to be mixin-friendly.
+
+// Note: Deprecated .visible-print as of v3.2.0
+.visible-print {
+  .responsive-invisibility();
+
+  @media print {
+    .responsive-visibility();
+  }
+}
+.visible-print-block {
+  display: none !important;
+
+  @media print {
+    display: block !important;
+  }
+}
+.visible-print-inline {
+  display: none !important;
+
+  @media print {
+    display: inline !important;
+  }
+}
+.visible-print-inline-block {
+  display: none !important;
+
+  @media print {
+    display: inline-block !important;
+  }
+}
+
+.hidden-print {
+  @media print {
+    .responsive-invisibility();
+  }
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/scaffolding.less b/app/soc/content/less/thirdparty/bootstrap/scaffolding.less
new file mode 100755
index 0000000..c1e270f
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/scaffolding.less
@@ -0,0 +1,150 @@
+//
+// Scaffolding
+// --------------------------------------------------
+
+
+// Reset the box-sizing
+//
+// Heads up! This reset may cause conflicts with some third-party widgets.
+// For recommendations on resolving such conflicts, see
+// http://getbootstrap.com/getting-started/#third-box-sizing
+* {
+  .box-sizing(border-box);
+}
+*:before,
+*:after {
+  .box-sizing(border-box);
+}
+
+
+// Body reset
+
+html {
+  font-size: 10px;
+  -webkit-tap-highlight-color: rgba(0,0,0,0);
+}
+
+body {
+  font-family: @font-family-base;
+  font-size: @font-size-base;
+  line-height: @line-height-base;
+  color: @text-color;
+  background-color: @body-bg;
+}
+
+// Reset fonts for relevant elements
+input,
+button,
+select,
+textarea {
+  font-family: inherit;
+  font-size: inherit;
+  line-height: inherit;
+}
+
+
+// Links
+
+a {
+  color: @link-color;
+  text-decoration: none;
+
+  &:hover,
+  &:focus {
+    color: @link-hover-color;
+    text-decoration: underline;
+  }
+
+  &:focus {
+    .tab-focus();
+  }
+}
+
+
+// Figures
+//
+// We reset this here because previously Normalize had no `figure` margins. This
+// ensures we don't break anyone's use of the element.
+
+figure {
+  margin: 0;
+}
+
+
+// Images
+
+img {
+  vertical-align: middle;
+}
+
+// Responsive images (ensure images don't scale beyond their parents)
+.img-responsive {
+  .img-responsive();
+}
+
+// Rounded corners
+.img-rounded {
+  border-radius: @border-radius-large;
+}
+
+// Image thumbnails
+//
+// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.
+.img-thumbnail {
+  padding: @thumbnail-padding;
+  line-height: @line-height-base;
+  background-color: @thumbnail-bg;
+  border: 1px solid @thumbnail-border;
+  border-radius: @thumbnail-border-radius;
+  .transition(all .2s ease-in-out);
+
+  // Keep them at most 100% wide
+  .img-responsive(inline-block);
+}
+
+// Perfect circle
+.img-circle {
+  border-radius: 50%; // set radius in percents
+}
+
+
+// Horizontal rules
+
+hr {
+  margin-top:    @line-height-computed;
+  margin-bottom: @line-height-computed;
+  border: 0;
+  border-top: 1px solid @hr-border;
+}
+
+
+// Only display content to screen readers
+//
+// See: http://a11yproject.com/posts/how-to-hide-content/
+
+.sr-only {
+  position: absolute;
+  width: 1px;
+  height: 1px;
+  margin: -1px;
+  padding: 0;
+  overflow: hidden;
+  clip: rect(0,0,0,0);
+  border: 0;
+}
+
+// Use in conjunction with .sr-only to only display content when it's focused.
+// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
+// Credit: HTML5 Boilerplate
+
+.sr-only-focusable {
+  &:active,
+  &:focus {
+    position: static;
+    width: auto;
+    height: auto;
+    margin: 0;
+    overflow: visible;
+    clip: auto;
+  }
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/tables.less b/app/soc/content/less/thirdparty/bootstrap/tables.less
new file mode 100755
index 0000000..2e1ef33
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/tables.less
@@ -0,0 +1,233 @@
+//
+// Tables
+// --------------------------------------------------
+
+
+table {
+  background-color: @table-bg;
+}
+th {
+  text-align: left;
+}
+
+
+// Baseline styles
+
+.table {
+  width: 100%;
+  max-width: 100%;
+  margin-bottom: @line-height-computed;
+  // Cells
+  > thead,
+  > tbody,
+  > tfoot {
+    > tr {
+      > th,
+      > td {
+        padding: @table-cell-padding;
+        line-height: @line-height-base;
+        vertical-align: top;
+        border-top: 1px solid @table-border-color;
+      }
+    }
+  }
+  // Bottom align for column headings
+  > thead > tr > th {
+    vertical-align: bottom;
+    border-bottom: 2px solid @table-border-color;
+  }
+  // Remove top border from thead by default
+  > caption + thead,
+  > colgroup + thead,
+  > thead:first-child {
+    > tr:first-child {
+      > th,
+      > td {
+        border-top: 0;
+      }
+    }
+  }
+  // Account for multiple tbody instances
+  > tbody + tbody {
+    border-top: 2px solid @table-border-color;
+  }
+
+  // Nesting
+  .table {
+    background-color: @body-bg;
+  }
+}
+
+
+// Condensed table w/ half padding
+
+.table-condensed {
+  > thead,
+  > tbody,
+  > tfoot {
+    > tr {
+      > th,
+      > td {
+        padding: @table-condensed-cell-padding;
+      }
+    }
+  }
+}
+
+
+// Bordered version
+//
+// Add borders all around the table and between all the columns.
+
+.table-bordered {
+  border: 1px solid @table-border-color;
+  > thead,
+  > tbody,
+  > tfoot {
+    > tr {
+      > th,
+      > td {
+        border: 1px solid @table-border-color;
+      }
+    }
+  }
+  > thead > tr {
+    > th,
+    > td {
+      border-bottom-width: 2px;
+    }
+  }
+}
+
+
+// Zebra-striping
+//
+// Default zebra-stripe styles (alternating gray and transparent backgrounds)
+
+.table-striped {
+  > tbody > tr:nth-child(odd) {
+    > td,
+    > th {
+      background-color: @table-bg-accent;
+    }
+  }
+}
+
+
+// Hover effect
+//
+// Placed here since it has to come after the potential zebra striping
+
+.table-hover {
+  > tbody > tr:hover {
+    > td,
+    > th {
+      background-color: @table-bg-hover;
+    }
+  }
+}
+
+
+// Table cell sizing
+//
+// Reset default table behavior
+
+table col[class*="col-"] {
+  position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)
+  float: none;
+  display: table-column;
+}
+table {
+  td,
+  th {
+    &[class*="col-"] {
+      position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)
+      float: none;
+      display: table-cell;
+    }
+  }
+}
+
+
+// Table backgrounds
+//
+// Exact selectors below required to override `.table-striped` and prevent
+// inheritance to nested tables.
+
+// Generate the contextual variants
+.table-row-variant(active; @table-bg-active);
+.table-row-variant(success; @state-success-bg);
+.table-row-variant(info; @state-info-bg);
+.table-row-variant(warning; @state-warning-bg);
+.table-row-variant(danger; @state-danger-bg);
+
+
+// Responsive tables
+//
+// Wrap your tables in `.table-responsive` and we'll make them mobile friendly
+// by enabling horizontal scrolling. Only applies <768px. Everything above that
+// will display normally.
+
+.table-responsive {
+  @media screen and (max-width: @screen-xs-max) {
+    width: 100%;
+    margin-bottom: (@line-height-computed * 0.75);
+    overflow-y: hidden;
+    overflow-x: auto;
+    -ms-overflow-style: -ms-autohiding-scrollbar;
+    border: 1px solid @table-border-color;
+    -webkit-overflow-scrolling: touch;
+
+    // Tighten up spacing
+    > .table {
+      margin-bottom: 0;
+
+      // Ensure the content doesn't wrap
+      > thead,
+      > tbody,
+      > tfoot {
+        > tr {
+          > th,
+          > td {
+            white-space: nowrap;
+          }
+        }
+      }
+    }
+
+    // Special overrides for the bordered tables
+    > .table-bordered {
+      border: 0;
+
+      // Nuke the appropriate borders so that the parent can handle them
+      > thead,
+      > tbody,
+      > tfoot {
+        > tr {
+          > th:first-child,
+          > td:first-child {
+            border-left: 0;
+          }
+          > th:last-child,
+          > td:last-child {
+            border-right: 0;
+          }
+        }
+      }
+
+      // Only nuke the last row's bottom-border in `tbody` and `tfoot` since
+      // chances are there will be only one `tr` in a `thead` and that would
+      // remove the border altogether.
+      > tbody,
+      > tfoot {
+        > tr:last-child {
+          > th,
+          > td {
+            border-bottom: 0;
+          }
+        }
+      }
+
+    }
+  }
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/theme.less b/app/soc/content/less/thirdparty/bootstrap/theme.less
new file mode 100755
index 0000000..b089424
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/theme.less
@@ -0,0 +1,258 @@
+
+//
+// Load core variables and mixins
+// --------------------------------------------------
+
+@import "variables.less";
+@import "mixins.less";
+
+
+
+//
+// Buttons
+// --------------------------------------------------
+
+// Common styles
+.btn-default,
+.btn-primary,
+.btn-success,
+.btn-info,
+.btn-warning,
+.btn-danger {
+  text-shadow: 0 -1px 0 rgba(0,0,0,.2);
+  @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);
+  .box-shadow(@shadow);
+
+  // Reset the shadow
+  &:active,
+  &.active {
+    .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
+  }
+}
+
+// Mixin for generating new styles
+.btn-styles(@btn-color: #555) {
+  #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));
+  .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners
+  background-repeat: repeat-x;
+  border-color: darken(@btn-color, 14%);
+
+  &:hover,
+  &:focus  {
+    background-color: darken(@btn-color, 12%);
+    background-position: 0 -15px;
+  }
+
+  &:active,
+  &.active {
+    background-color: darken(@btn-color, 12%);
+    border-color: darken(@btn-color, 14%);
+  }
+
+  &:disabled,
+  &[disabled] {
+    background-color: darken(@btn-color, 12%);
+    background-image: none;
+  }
+}
+
+// Common styles
+.btn {
+  // Remove the gradient for the pressed/active state
+  &:active,
+  &.active {
+    background-image: none;
+  }
+}
+
+// Apply the mixin to the buttons
+.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }
+.btn-primary { .btn-styles(@btn-primary-bg); }
+.btn-success { .btn-styles(@btn-success-bg); }
+.btn-info    { .btn-styles(@btn-info-bg); }
+.btn-warning { .btn-styles(@btn-warning-bg); }
+.btn-danger  { .btn-styles(@btn-danger-bg); }
+
+
+
+//
+// Images
+// --------------------------------------------------
+
+.thumbnail,
+.img-thumbnail {
+  .box-shadow(0 1px 2px rgba(0,0,0,.075));
+}
+
+
+
+//
+// Dropdowns
+// --------------------------------------------------
+
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus {
+  #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));
+  background-color: darken(@dropdown-link-hover-bg, 5%);
+}
+.dropdown-menu > .active > a,
+.dropdown-menu > .active > a:hover,
+.dropdown-menu > .active > a:focus {
+  #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));
+  background-color: darken(@dropdown-link-active-bg, 5%);
+}
+
+
+
+//
+// Navbar
+// --------------------------------------------------
+
+// Default navbar
+.navbar-default {
+  #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);
+  .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered
+  border-radius: @navbar-border-radius;
+  @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);
+  .box-shadow(@shadow);
+
+  .navbar-nav > .active > a {
+    #gradient > .vertical(@start-color: darken(@navbar-default-bg, 5%); @end-color: darken(@navbar-default-bg, 2%));
+    .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));
+  }
+}
+.navbar-brand,
+.navbar-nav > li > a {
+  text-shadow: 0 1px 0 rgba(255,255,255,.25);
+}
+
+// Inverted navbar
+.navbar-inverse {
+  #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);
+  .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered
+
+  .navbar-nav > .active > a {
+    #gradient > .vertical(@start-color: @navbar-inverse-bg; @end-color: lighten(@navbar-inverse-bg, 2.5%));
+    .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));
+  }
+
+  .navbar-brand,
+  .navbar-nav > li > a {
+    text-shadow: 0 -1px 0 rgba(0,0,0,.25);
+  }
+}
+
+// Undo rounded corners in static and fixed navbars
+.navbar-static-top,
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+  border-radius: 0;
+}
+
+
+
+//
+// Alerts
+// --------------------------------------------------
+
+// Common styles
+.alert {
+  text-shadow: 0 1px 0 rgba(255,255,255,.2);
+  @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);
+  .box-shadow(@shadow);
+}
+
+// Mixin for generating new styles
+.alert-styles(@color) {
+  #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));
+  border-color: darken(@color, 15%);
+}
+
+// Apply the mixin to the alerts
+.alert-success    { .alert-styles(@alert-success-bg); }
+.alert-info       { .alert-styles(@alert-info-bg); }
+.alert-warning    { .alert-styles(@alert-warning-bg); }
+.alert-danger     { .alert-styles(@alert-danger-bg); }
+
+
+
+//
+// Progress bars
+// --------------------------------------------------
+
+// Give the progress background some depth
+.progress {
+  #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)
+}
+
+// Mixin for generating new styles
+.progress-bar-styles(@color) {
+  #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));
+}
+
+// Apply the mixin to the progress bars
+.progress-bar            { .progress-bar-styles(@progress-bar-bg); }
+.progress-bar-success    { .progress-bar-styles(@progress-bar-success-bg); }
+.progress-bar-info       { .progress-bar-styles(@progress-bar-info-bg); }
+.progress-bar-warning    { .progress-bar-styles(@progress-bar-warning-bg); }
+.progress-bar-danger     { .progress-bar-styles(@progress-bar-danger-bg); }
+
+// Reset the striped class because our mixins don't do multiple gradients and
+// the above custom styles override the new `.progress-bar-striped` in v3.2.0.
+.progress-bar-striped {
+  #gradient > .striped();
+}
+
+
+//
+// List groups
+// --------------------------------------------------
+
+.list-group {
+  border-radius: @border-radius-base;
+  .box-shadow(0 1px 2px rgba(0,0,0,.075));
+}
+.list-group-item.active,
+.list-group-item.active:hover,
+.list-group-item.active:focus {
+  text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);
+  #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));
+  border-color: darken(@list-group-active-border, 7.5%);
+}
+
+
+
+//
+// Panels
+// --------------------------------------------------
+
+// Common styles
+.panel {
+  .box-shadow(0 1px 2px rgba(0,0,0,.05));
+}
+
+// Mixin for generating new styles
+.panel-heading-styles(@color) {
+  #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));
+}
+
+// Apply the mixin to the panel headings only
+.panel-default > .panel-heading   { .panel-heading-styles(@panel-default-heading-bg); }
+.panel-primary > .panel-heading   { .panel-heading-styles(@panel-primary-heading-bg); }
+.panel-success > .panel-heading   { .panel-heading-styles(@panel-success-heading-bg); }
+.panel-info > .panel-heading      { .panel-heading-styles(@panel-info-heading-bg); }
+.panel-warning > .panel-heading   { .panel-heading-styles(@panel-warning-heading-bg); }
+.panel-danger > .panel-heading    { .panel-heading-styles(@panel-danger-heading-bg); }
+
+
+
+//
+// Wells
+// --------------------------------------------------
+
+.well {
+  #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);
+  border-color: darken(@well-bg, 10%);
+  @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);
+  .box-shadow(@shadow);
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/thumbnails.less b/app/soc/content/less/thirdparty/bootstrap/thumbnails.less
new file mode 100755
index 0000000..c428920
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/thumbnails.less
@@ -0,0 +1,36 @@
+//
+// Thumbnails
+// --------------------------------------------------
+
+
+// Mixin and adjust the regular image class
+.thumbnail {
+  display: block;
+  padding: @thumbnail-padding;
+  margin-bottom: @line-height-computed;
+  line-height: @line-height-base;
+  background-color: @thumbnail-bg;
+  border: 1px solid @thumbnail-border;
+  border-radius: @thumbnail-border-radius;
+  .transition(all .2s ease-in-out);
+
+  > img,
+  a > img {
+    &:extend(.img-responsive);
+    margin-left: auto;
+    margin-right: auto;
+  }
+
+  // Add a hover state for linked versions only
+  a&:hover,
+  a&:focus,
+  a&.active {
+    border-color: @link-color;
+  }
+
+  // Image captions
+  .caption {
+    padding: @thumbnail-caption-padding;
+    color: @thumbnail-caption-color;
+  }
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/tooltip.less b/app/soc/content/less/thirdparty/bootstrap/tooltip.less
new file mode 100755
index 0000000..bd62699
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/tooltip.less
@@ -0,0 +1,95 @@
+//
+// Tooltips
+// --------------------------------------------------
+
+
+// Base class
+.tooltip {
+  position: absolute;
+  z-index: @zindex-tooltip;
+  display: block;
+  visibility: visible;
+  font-size: @font-size-small;
+  line-height: 1.4;
+  .opacity(0);
+
+  &.in     { .opacity(@tooltip-opacity); }
+  &.top    { margin-top:  -3px; padding: @tooltip-arrow-width 0; }
+  &.right  { margin-left:  3px; padding: 0 @tooltip-arrow-width; }
+  &.bottom { margin-top:   3px; padding: @tooltip-arrow-width 0; }
+  &.left   { margin-left: -3px; padding: 0 @tooltip-arrow-width; }
+}
+
+// Wrapper for the tooltip content
+.tooltip-inner {
+  max-width: @tooltip-max-width;
+  padding: 3px 8px;
+  color: @tooltip-color;
+  text-align: center;
+  text-decoration: none;
+  background-color: @tooltip-bg;
+  border-radius: @border-radius-base;
+}
+
+// Arrows
+.tooltip-arrow {
+  position: absolute;
+  width: 0;
+  height: 0;
+  border-color: transparent;
+  border-style: solid;
+}
+.tooltip {
+  &.top .tooltip-arrow {
+    bottom: 0;
+    left: 50%;
+    margin-left: -@tooltip-arrow-width;
+    border-width: @tooltip-arrow-width @tooltip-arrow-width 0;
+    border-top-color: @tooltip-arrow-color;
+  }
+  &.top-left .tooltip-arrow {
+    bottom: 0;
+    left: @tooltip-arrow-width;
+    border-width: @tooltip-arrow-width @tooltip-arrow-width 0;
+    border-top-color: @tooltip-arrow-color;
+  }
+  &.top-right .tooltip-arrow {
+    bottom: 0;
+    right: @tooltip-arrow-width;
+    border-width: @tooltip-arrow-width @tooltip-arrow-width 0;
+    border-top-color: @tooltip-arrow-color;
+  }
+  &.right .tooltip-arrow {
+    top: 50%;
+    left: 0;
+    margin-top: -@tooltip-arrow-width;
+    border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;
+    border-right-color: @tooltip-arrow-color;
+  }
+  &.left .tooltip-arrow {
+    top: 50%;
+    right: 0;
+    margin-top: -@tooltip-arrow-width;
+    border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;
+    border-left-color: @tooltip-arrow-color;
+  }
+  &.bottom .tooltip-arrow {
+    top: 0;
+    left: 50%;
+    margin-left: -@tooltip-arrow-width;
+    border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;
+    border-bottom-color: @tooltip-arrow-color;
+  }
+  &.bottom-left .tooltip-arrow {
+    top: 0;
+    left: @tooltip-arrow-width;
+    border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;
+    border-bottom-color: @tooltip-arrow-color;
+  }
+  &.bottom-right .tooltip-arrow {
+    top: 0;
+    right: @tooltip-arrow-width;
+    border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;
+    border-bottom-color: @tooltip-arrow-color;
+  }
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/type.less b/app/soc/content/less/thirdparty/bootstrap/type.less
new file mode 100755
index 0000000..9b1e48b
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/type.less
@@ -0,0 +1,313 @@
+//
+// Typography
+// --------------------------------------------------
+
+
+// Headings
+// -------------------------
+
+h1, h2, h3, h4, h5, h6,
+.h1, .h2, .h3, .h4, .h5, .h6 {
+  font-family: @headings-font-family;
+  font-weight: @headings-font-weight;
+  line-height: @headings-line-height;
+  color: @headings-color;
+
+  small,
+  .small {
+    font-weight: normal;
+    line-height: 1;
+    color: @headings-small-color;
+  }
+}
+
+h1, .h1,
+h2, .h2,
+h3, .h3 {
+  margin-top: @line-height-computed;
+  margin-bottom: (@line-height-computed / 2);
+
+  small,
+  .small {
+    font-size: 65%;
+  }
+}
+h4, .h4,
+h5, .h5,
+h6, .h6 {
+  margin-top: (@line-height-computed / 2);
+  margin-bottom: (@line-height-computed / 2);
+
+  small,
+  .small {
+    font-size: 75%;
+  }
+}
+
+h1, .h1 { font-size: @font-size-h1; }
+h2, .h2 { font-size: @font-size-h2; }
+h3, .h3 { font-size: @font-size-h3; }
+h4, .h4 { font-size: @font-size-h4; }
+h5, .h5 { font-size: @font-size-h5; }
+h6, .h6 { font-size: @font-size-h6; }
+
+
+// Body text
+// -------------------------
+
+p {
+  margin: 0 0 (@line-height-computed / 2);
+}
+
+.lead {
+  margin-bottom: @line-height-computed;
+  font-size: floor((@font-size-base * 1.15));
+  font-weight: 300;
+  line-height: 1.4;
+
+  @media (min-width: @screen-sm-min) {
+    font-size: (@font-size-base * 1.5);
+  }
+}
+
+
+// Emphasis & misc
+// -------------------------
+
+// Ex: (12px small font / 14px base font) * 100% = about 85%
+small,
+.small {
+  font-size: floor((100% * @font-size-small / @font-size-base));
+}
+
+// Undo browser default styling
+cite {
+  font-style: normal;
+}
+
+mark,
+.mark {
+  background-color: @state-warning-bg;
+  padding: .2em;
+}
+
+// Alignment
+.text-left           { text-align: left; }
+.text-right          { text-align: right; }
+.text-center         { text-align: center; }
+.text-justify        { text-align: justify; }
+.text-nowrap         { white-space: nowrap; }
+
+// Transformation
+.text-lowercase      { text-transform: lowercase; }
+.text-uppercase      { text-transform: uppercase; }
+.text-capitalize     { text-transform: capitalize; }
+
+// Contextual colors
+.text-muted {
+  color: @text-muted;
+}
+.text-primary {
+  .text-emphasis-variant(@brand-primary);
+}
+.text-success {
+  .text-emphasis-variant(@state-success-text);
+}
+.text-info {
+  .text-emphasis-variant(@state-info-text);
+}
+.text-warning {
+  .text-emphasis-variant(@state-warning-text);
+}
+.text-danger {
+  .text-emphasis-variant(@state-danger-text);
+}
+
+// Contextual backgrounds
+// For now we'll leave these alongside the text classes until v4 when we can
+// safely shift things around (per SemVer rules).
+.bg-primary {
+  // Given the contrast here, this is the only class to have its color inverted
+  // automatically.
+  color: #fff;
+  .bg-variant(@brand-primary);
+}
+.bg-success {
+  .bg-variant(@state-success-bg);
+}
+.bg-info {
+  .bg-variant(@state-info-bg);
+}
+.bg-warning {
+  .bg-variant(@state-warning-bg);
+}
+.bg-danger {
+  .bg-variant(@state-danger-bg);
+}
+
+
+// Page header
+// -------------------------
+
+.page-header {
+  padding-bottom: ((@line-height-computed / 2) - 1);
+  margin: (@line-height-computed * 2) 0 @line-height-computed;
+  border-bottom: 1px solid @page-header-border-color;
+}
+
+
+// Lists
+// -------------------------
+
+// Unordered and Ordered lists
+ul,
+ol {
+  margin-top: 0;
+  margin-bottom: (@line-height-computed / 2);
+  ul,
+  ol {
+    margin-bottom: 0;
+  }
+}
+
+// List options
+
+// Unstyled keeps list items block level, just removes default browser padding and list-style
+.list-unstyled {
+  padding-left: 0;
+  list-style: none;
+}
+
+// Inline turns list items into inline-block
+.list-inline {
+  .list-unstyled();
+  margin-left: -5px;
+
+  > li {
+    display: inline-block;
+    padding-left: 5px;
+    padding-right: 5px;
+  }
+}
+
+// Description Lists
+dl {
+  margin-top: 0; // Remove browser default
+  margin-bottom: @line-height-computed;
+}
+dt,
+dd {
+  line-height: @line-height-base;
+}
+dt {
+  font-weight: bold;
+}
+dd {
+  margin-left: 0; // Undo browser default
+}
+
+// Horizontal description lists
+//
+// Defaults to being stacked without any of the below styles applied, until the
+// grid breakpoint is reached (default of ~768px).
+
+.dl-horizontal {
+  dd {
+    &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present
+  }
+
+  @media (min-width: @grid-float-breakpoint) {
+    dt {
+      float: left;
+      width: (@dl-horizontal-offset - 20);
+      clear: left;
+      text-align: right;
+      .text-overflow();
+    }
+    dd {
+      margin-left: @dl-horizontal-offset;
+    }
+  }
+}
+
+
+// Misc
+// -------------------------
+
+// Abbreviations and acronyms
+abbr[title],
+// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257
+abbr[data-original-title] {
+  cursor: help;
+  border-bottom: 1px dotted @abbr-border-color;
+}
+.initialism {
+  font-size: 90%;
+  text-transform: uppercase;
+}
+
+// Blockquotes
+blockquote {
+  padding: (@line-height-computed / 2) @line-height-computed;
+  margin: 0 0 @line-height-computed;
+  font-size: @blockquote-font-size;
+  border-left: 5px solid @blockquote-border-color;
+
+  p,
+  ul,
+  ol {
+    &:last-child {
+      margin-bottom: 0;
+    }
+  }
+
+  // Note: Deprecated small and .small as of v3.1.0
+  // Context: https://github.com/twbs/bootstrap/issues/11660
+  footer,
+  small,
+  .small {
+    display: block;
+    font-size: 80%; // back to default font-size
+    line-height: @line-height-base;
+    color: @blockquote-small-color;
+
+    &:before {
+      content: '\2014 \00A0'; // em dash, nbsp
+    }
+  }
+}
+
+// Opposite alignment of blockquote
+//
+// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.
+.blockquote-reverse,
+blockquote.pull-right {
+  padding-right: 15px;
+  padding-left: 0;
+  border-right: 5px solid @blockquote-border-color;
+  border-left: 0;
+  text-align: right;
+
+  // Account for citation
+  footer,
+  small,
+  .small {
+    &:before { content: ''; }
+    &:after {
+      content: '\00A0 \2014'; // nbsp, em dash
+    }
+  }
+}
+
+// Quotes
+blockquote:before,
+blockquote:after {
+  content: "";
+}
+
+// Addresses
+address {
+  margin-bottom: @line-height-computed;
+  font-style: normal;
+  line-height: @line-height-base;
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/utilities.less b/app/soc/content/less/thirdparty/bootstrap/utilities.less
new file mode 100755
index 0000000..c0becab
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/utilities.less
@@ -0,0 +1,57 @@
+//
+// Utility classes
+// --------------------------------------------------
+
+
+// Floats
+// -------------------------
+
+.clearfix {
+  .clearfix();
+}
+.center-block {
+  .center-block();
+}
+.pull-right {
+  float: right !important;
+}
+.pull-left {
+  float: left !important;
+}
+
+
+// Toggling content
+// -------------------------
+
+// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1
+.hide {
+  display: none !important;
+}
+.show {
+  display: block !important;
+}
+.invisible {
+  visibility: hidden;
+}
+.text-hide {
+  .text-hide();
+}
+
+
+// Hide from screenreaders and browsers
+//
+// Credit: HTML5 Boilerplate
+
+.hidden {
+  display: none !important;
+  visibility: hidden !important;
+}
+
+
+// For Affix plugin
+// -------------------------
+
+.affix {
+  position: fixed;
+  .translate3d(0, 0, 0);
+}
diff --git a/app/soc/content/less/thirdparty/bootstrap/variables.less b/app/soc/content/less/thirdparty/bootstrap/variables.less
new file mode 100755
index 0000000..582f0f8
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/variables.less
@@ -0,0 +1,846 @@
+//
+// Variables
+// --------------------------------------------------
+
+
+//== Colors
+//
+//## Gray and brand colors for use across Bootstrap.
+
+@gray-darker:            lighten(#000, 13.5%); // #222
+@gray-dark:              lighten(#000, 20%);   // #333
+@gray:                   lighten(#000, 33.5%); // #555
+@gray-light:             lighten(#000, 46.7%); // #777
+@gray-lighter:           lighten(#000, 93.5%); // #eee
+
+@brand-primary:         #428bca;
+@brand-success:         #5cb85c;
+@brand-info:            #5bc0de;
+@brand-warning:         #f0ad4e;
+@brand-danger:          #d9534f;
+
+
+//== Scaffolding
+//
+//## Settings for some of the most global styles.
+
+//** Background color for `<body>`.
+@body-bg:               #fff;
+//** Global text color on `<body>`.
+@text-color:            @gray-dark;
+
+//** Global textual link color.
+@link-color:            @brand-primary;
+//** Link hover color set via `darken()` function.
+@link-hover-color:      darken(@link-color, 15%);
+
+
+//== Typography
+//
+//## Font, line-height, and color for body text, headings, and more.
+
+@font-family-sans-serif:  "Helvetica Neue", Helvetica, Arial, sans-serif;
+@font-family-serif:       Georgia, "Times New Roman", Times, serif;
+//** Default monospace fonts for `<code>`, `<kbd>`, and `<pre>`.
+@font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace;
+@font-family-base:        @font-family-sans-serif;
+
+@font-size-base:          14px;
+@font-size-large:         ceil((@font-size-base * 1.25)); // ~18px
+@font-size-small:         ceil((@font-size-base * 0.85)); // ~12px
+
+@font-size-h1:            floor((@font-size-base * 2.6)); // ~36px
+@font-size-h2:            floor((@font-size-base * 2.15)); // ~30px
+@font-size-h3:            ceil((@font-size-base * 1.7)); // ~24px
+@font-size-h4:            ceil((@font-size-base * 1.25)); // ~18px
+@font-size-h5:            @font-size-base;
+@font-size-h6:            ceil((@font-size-base * 0.85)); // ~12px
+
+//** Unit-less `line-height` for use in components like buttons.
+@line-height-base:        1.428571429; // 20/14
+//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
+@line-height-computed:    floor((@font-size-base * @line-height-base)); // ~20px
+
+//** By default, this inherits from the `<body>`.
+@headings-font-family:    inherit;
+@headings-font-weight:    500;
+@headings-line-height:    1.1;
+@headings-color:          inherit;
+
+
+//== Iconography
+//
+//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
+
+//** Load fonts from this directory.
+@icon-font-path:          "../fonts/";
+//** File name for all font files.
+@icon-font-name:          "glyphicons-halflings-regular";
+//** Element ID within SVG icon file.
+@icon-font-svg-id:        "glyphicons_halflingsregular";
+
+
+//== Components
+//
+//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
+
+@padding-base-vertical:     6px;
+@padding-base-horizontal:   12px;
+
+@padding-large-vertical:    10px;
+@padding-large-horizontal:  16px;
+
+@padding-small-vertical:    5px;
+@padding-small-horizontal:  10px;
+
+@padding-xs-vertical:       1px;
+@padding-xs-horizontal:     5px;
+
+@line-height-large:         1.33;
+@line-height-small:         1.5;
+
+@border-radius-base:        4px;
+@border-radius-large:       6px;
+@border-radius-small:       3px;
+
+//** Global color for active items (e.g., navs or dropdowns).
+@component-active-color:    #fff;
+//** Global background color for active items (e.g., navs or dropdowns).
+@component-active-bg:       @brand-primary;
+
+//** Width of the `border` for generating carets that indicator dropdowns.
+@caret-width-base:          4px;
+//** Carets increase slightly in size for larger components.
+@caret-width-large:         5px;
+
+
+//== Tables
+//
+//## Customizes the `.table` component with basic values, each used across all table variations.
+
+//** Padding for `<th>`s and `<td>`s.
+@table-cell-padding:            8px;
+//** Padding for cells in `.table-condensed`.
+@table-condensed-cell-padding:  5px;
+
+//** Default background color used for all tables.
+@table-bg:                      transparent;
+//** Background color used for `.table-striped`.
+@table-bg-accent:               #f9f9f9;
+//** Background color used for `.table-hover`.
+@table-bg-hover:                #f5f5f5;
+@table-bg-active:               @table-bg-hover;
+
+//** Border color for table and cell borders.
+@table-border-color:            #ddd;
+
+
+//== Buttons
+//
+//## For each of Bootstrap's buttons, define text, background and border color.
+
+@btn-font-weight:                normal;
+
+@btn-default-color:              #333;
+@btn-default-bg:                 #fff;
+@btn-default-border:             #ccc;
+
+@btn-primary-color:              #fff;
+@btn-primary-bg:                 @brand-primary;
+@btn-primary-border:             darken(@btn-primary-bg, 5%);
+
+@btn-success-color:              #fff;
+@btn-success-bg:                 @brand-success;
+@btn-success-border:             darken(@btn-success-bg, 5%);
+
+@btn-info-color:                 #fff;
+@btn-info-bg:                    @brand-info;
+@btn-info-border:                darken(@btn-info-bg, 5%);
+
+@btn-warning-color:              #fff;
+@btn-warning-bg:                 @brand-warning;
+@btn-warning-border:             darken(@btn-warning-bg, 5%);
+
+@btn-danger-color:               #fff;
+@btn-danger-bg:                  @brand-danger;
+@btn-danger-border:              darken(@btn-danger-bg, 5%);
+
+@btn-link-disabled-color:        @gray-light;
+
+
+//== Forms
+//
+//##
+
+//** `<input>` background color
+@input-bg:                       #fff;
+//** `<input disabled>` background color
+@input-bg-disabled:              @gray-lighter;
+
+//** Text color for `<input>`s
+@input-color:                    @gray;
+//** `<input>` border color
+@input-border:                   #ccc;
+//** `<input>` border radius
+@input-border-radius:            @border-radius-base;
+//** Border color for inputs on focus
+@input-border-focus:             #66afe9;
+
+//** Placeholder text color
+@input-color-placeholder:        @gray-light;
+
+//** Default `.form-control` height
+@input-height-base:              (@line-height-computed + (@padding-base-vertical * 2) + 2);
+//** Large `.form-control` height
+@input-height-large:             (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);
+//** Small `.form-control` height
+@input-height-small:             (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);
+
+@legend-color:                   @gray-dark;
+@legend-border-color:            #e5e5e5;
+
+//** Background color for textual input addons
+@input-group-addon-bg:           @gray-lighter;
+//** Border color for textual input addons
+@input-group-addon-border-color: @input-border;
+
+
+//== Dropdowns
+//
+//## Dropdown menu container and contents.
+
+//** Background for the dropdown menu.
+@dropdown-bg:                    #fff;
+//** Dropdown menu `border-color`.
+@dropdown-border:                rgba(0,0,0,.15);
+//** Dropdown menu `border-color` **for IE8**.
+@dropdown-fallback-border:       #ccc;
+//** Divider color for between dropdown items.
+@dropdown-divider-bg:            #e5e5e5;
+
+//** Dropdown link text color.
+@dropdown-link-color:            @gray-dark;
+//** Hover color for dropdown links.
+@dropdown-link-hover-color:      darken(@gray-dark, 5%);
+//** Hover background for dropdown links.
+@dropdown-link-hover-bg:         #f5f5f5;
+
+//** Active dropdown menu item text color.
+@dropdown-link-active-color:     @component-active-color;
+//** Active dropdown menu item background color.
+@dropdown-link-active-bg:        @component-active-bg;
+
+//** Disabled dropdown menu item background color.
+@dropdown-link-disabled-color:   @gray-light;
+
+//** Text color for headers within dropdown menus.
+@dropdown-header-color:          @gray-light;
+
+//** Deprecated `@dropdown-caret-color` as of v3.1.0
+@dropdown-caret-color:           #000;
+
+
+//-- Z-index master list
+//
+// Warning: Avoid customizing these values. They're used for a bird's eye view
+// of components dependent on the z-axis and are designed to all work together.
+//
+// Note: These variables are not generated into the Customizer.
+
+@zindex-navbar:            1000;
+@zindex-dropdown:          1000;
+@zindex-popover:           1060;
+@zindex-tooltip:           1070;
+@zindex-navbar-fixed:      1030;
+@zindex-modal-background:  1040;
+@zindex-modal:             1050;
+
+
+//== Media queries breakpoints
+//
+//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
+
+// Extra small screen / phone
+//** Deprecated `@screen-xs` as of v3.0.1
+@screen-xs:                  480px;
+//** Deprecated `@screen-xs-min` as of v3.2.0
+@screen-xs-min:              @screen-xs;
+//** Deprecated `@screen-phone` as of v3.0.1
+@screen-phone:               @screen-xs-min;
+
+// Small screen / tablet
+//** Deprecated `@screen-sm` as of v3.0.1
+@screen-sm:                  768px;
+@screen-sm-min:              @screen-sm;
+//** Deprecated `@screen-tablet` as of v3.0.1
+@screen-tablet:              @screen-sm-min;
+
+// Medium screen / desktop
+//** Deprecated `@screen-md` as of v3.0.1
+@screen-md:                  992px;
+@screen-md-min:              @screen-md;
+//** Deprecated `@screen-desktop` as of v3.0.1
+@screen-desktop:             @screen-md-min;
+
+// Large screen / wide desktop
+//** Deprecated `@screen-lg` as of v3.0.1
+@screen-lg:                  1200px;
+@screen-lg-min:              @screen-lg;
+//** Deprecated `@screen-lg-desktop` as of v3.0.1
+@screen-lg-desktop:          @screen-lg-min;
+
+// So media queries don't overlap when required, provide a maximum
+@screen-xs-max:              (@screen-sm-min - 1);
+@screen-sm-max:              (@screen-md-min - 1);
+@screen-md-max:              (@screen-lg-min - 1);
+
+
+//== Grid system
+//
+//## Define your custom responsive grid.
+
+//** Number of columns in the grid.
+@grid-columns:              12;
+//** Padding between columns. Gets divided in half for the left and right.
+@grid-gutter-width:         30px;
+// Navbar collapse
+//** Point at which the navbar becomes uncollapsed.
+@grid-float-breakpoint:     @screen-sm-min;
+//** Point at which the navbar begins collapsing.
+@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);
+
+
+//== Container sizes
+//
+//## Define the maximum width of `.container` for different screen sizes.
+
+// Small screen / tablet
+@container-tablet:             ((720px + @grid-gutter-width));
+//** For `@screen-sm-min` and up.
+@container-sm:                 @container-tablet;
+
+// Medium screen / desktop
+@container-desktop:            ((940px + @grid-gutter-width));
+//** For `@screen-md-min` and up.
+@container-md:                 @container-desktop;
+
+// Large screen / wide desktop
+@container-large-desktop:      ((1140px + @grid-gutter-width));
+//** For `@screen-lg-min` and up.
+@container-lg:                 @container-large-desktop;
+
+
+//== Navbar
+//
+//##
+
+// Basics of a navbar
+@navbar-height:                    50px;
+@navbar-margin-bottom:             @line-height-computed;
+@navbar-border-radius:             @border-radius-base;
+@navbar-padding-horizontal:        floor((@grid-gutter-width / 2));
+@navbar-padding-vertical:          ((@navbar-height - @line-height-computed) / 2);
+@navbar-collapse-max-height:       340px;
+
+@navbar-default-color:             #777;
+@navbar-default-bg:                #f8f8f8;
+@navbar-default-border:            darken(@navbar-default-bg, 6.5%);
+
+// Navbar links
+@navbar-default-link-color:                #777;
+@navbar-default-link-hover-color:          #333;
+@navbar-default-link-hover-bg:             transparent;
+@navbar-default-link-active-color:         #555;
+@navbar-default-link-active-bg:            darken(@navbar-default-bg, 6.5%);
+@navbar-default-link-disabled-color:       #ccc;
+@navbar-default-link-disabled-bg:          transparent;
+
+// Navbar brand label
+@navbar-default-brand-color:               @navbar-default-link-color;
+@navbar-default-brand-hover-color:         darken(@navbar-default-brand-color, 10%);
+@navbar-default-brand-hover-bg:            transparent;
+
+// Navbar toggle
+@navbar-default-toggle-hover-bg:           #ddd;
+@navbar-default-toggle-icon-bar-bg:        #888;
+@navbar-default-toggle-border-color:       #ddd;
+
+
+// Inverted navbar
+// Reset inverted navbar basics
+@navbar-inverse-color:                      @gray-light;
+@navbar-inverse-bg:                         #222;
+@navbar-inverse-border:                     darken(@navbar-inverse-bg, 10%);
+
+// Inverted navbar links
+@navbar-inverse-link-color:                 @gray-light;
+@navbar-inverse-link-hover-color:           #fff;
+@navbar-inverse-link-hover-bg:              transparent;
+@navbar-inverse-link-active-color:          @navbar-inverse-link-hover-color;
+@navbar-inverse-link-active-bg:             darken(@navbar-inverse-bg, 10%);
+@navbar-inverse-link-disabled-color:        #444;
+@navbar-inverse-link-disabled-bg:           transparent;
+
+// Inverted navbar brand label
+@navbar-inverse-brand-color:                @navbar-inverse-link-color;
+@navbar-inverse-brand-hover-color:          #fff;
+@navbar-inverse-brand-hover-bg:             transparent;
+
+// Inverted navbar toggle
+@navbar-inverse-toggle-hover-bg:            #333;
+@navbar-inverse-toggle-icon-bar-bg:         #fff;
+@navbar-inverse-toggle-border-color:        #333;
+
+
+//== Navs
+//
+//##
+
+//=== Shared nav styles
+@nav-link-padding:                          10px 15px;
+@nav-link-hover-bg:                         @gray-lighter;
+
+@nav-disabled-link-color:                   @gray-light;
+@nav-disabled-link-hover-color:             @gray-light;
+
+@nav-open-link-hover-color:                 #fff;
+
+//== Tabs
+@nav-tabs-border-color:                     #ddd;
+
+@nav-tabs-link-hover-border-color:          @gray-lighter;
+
+@nav-tabs-active-link-hover-bg:             @body-bg;
+@nav-tabs-active-link-hover-color:          @gray;
+@nav-tabs-active-link-hover-border-color:   #ddd;
+
+@nav-tabs-justified-link-border-color:            #ddd;
+@nav-tabs-justified-active-link-border-color:     @body-bg;
+
+//== Pills
+@nav-pills-border-radius:                   @border-radius-base;
+@nav-pills-active-link-hover-bg:            @component-active-bg;
+@nav-pills-active-link-hover-color:         @component-active-color;
+
+
+//== Pagination
+//
+//##
+
+@pagination-color:                     @link-color;
+@pagination-bg:                        #fff;
+@pagination-border:                    #ddd;
+
+@pagination-hover-color:               @link-hover-color;
+@pagination-hover-bg:                  @gray-lighter;
+@pagination-hover-border:              #ddd;
+
+@pagination-active-color:              #fff;
+@pagination-active-bg:                 @brand-primary;
+@pagination-active-border:             @brand-primary;
+
+@pagination-disabled-color:            @gray-light;
+@pagination-disabled-bg:               #fff;
+@pagination-disabled-border:           #ddd;
+
+
+//== Pager
+//
+//##
+
+@pager-bg:                             @pagination-bg;
+@pager-border:                         @pagination-border;
+@pager-border-radius:                  15px;
+
+@pager-hover-bg:                       @pagination-hover-bg;
+
+@pager-active-bg:                      @pagination-active-bg;
+@pager-active-color:                   @pagination-active-color;
+
+@pager-disabled-color:                 @pagination-disabled-color;
+
+
+//== Jumbotron
+//
+//##
+
+@jumbotron-padding:              30px;
+@jumbotron-color:                inherit;
+@jumbotron-bg:                   @gray-lighter;
+@jumbotron-heading-color:        inherit;
+@jumbotron-font-size:            ceil((@font-size-base * 1.5));
+
+
+//== Form states and alerts
+//
+//## Define colors for form feedback states and, by default, alerts.
+
+@state-success-text:             #3c763d;
+@state-success-bg:               #dff0d8;
+@state-success-border:           darken(spin(@state-success-bg, -10), 5%);
+
+@state-info-text:                #31708f;
+@state-info-bg:                  #d9edf7;
+@state-info-border:              darken(spin(@state-info-bg, -10), 7%);
+
+@state-warning-text:             #8a6d3b;
+@state-warning-bg:               #fcf8e3;
+@state-warning-border:           darken(spin(@state-warning-bg, -10), 5%);
+
+@state-danger-text:              #a94442;
+@state-danger-bg:                #f2dede;
+@state-danger-border:            darken(spin(@state-danger-bg, -10), 5%);
+
+
+//== Tooltips
+//
+//##
+
+//** Tooltip max width
+@tooltip-max-width:           200px;
+//** Tooltip text color
+@tooltip-color:               #fff;
+//** Tooltip background color
+@tooltip-bg:                  #000;
+@tooltip-opacity:             .9;
+
+//** Tooltip arrow width
+@tooltip-arrow-width:         5px;
+//** Tooltip arrow color
+@tooltip-arrow-color:         @tooltip-bg;
+
+
+//== Popovers
+//
+//##
+
+//** Popover body background color
+@popover-bg:                          #fff;
+//** Popover maximum width
+@popover-max-width:                   276px;
+//** Popover border color
+@popover-border-color:                rgba(0,0,0,.2);
+//** Popover fallback border color
+@popover-fallback-border-color:       #ccc;
+
+//** Popover title background color
+@popover-title-bg:                    darken(@popover-bg, 3%);
+
+//** Popover arrow width
+@popover-arrow-width:                 10px;
+//** Popover arrow color
+@popover-arrow-color:                 #fff;
+
+//** Popover outer arrow width
+@popover-arrow-outer-width:           (@popover-arrow-width + 1);
+//** Popover outer arrow color
+@popover-arrow-outer-color:           fadein(@popover-border-color, 5%);
+//** Popover outer arrow fallback color
+@popover-arrow-outer-fallback-color:  darken(@popover-fallback-border-color, 20%);
+
+
+//== Labels
+//
+//##
+
+//** Default label background color
+@label-default-bg:            @gray-light;
+//** Primary label background color
+@label-primary-bg:            @brand-primary;
+//** Success label background color
+@label-success-bg:            @brand-success;
+//** Info label background color
+@label-info-bg:               @brand-info;
+//** Warning label background color
+@label-warning-bg:            @brand-warning;
+//** Danger label background color
+@label-danger-bg:             @brand-danger;
+
+//** Default label text color
+@label-color:                 #fff;
+//** Default text color of a linked label
+@label-link-hover-color:      #fff;
+
+
+//== Modals
+//
+//##
+
+//** Padding applied to the modal body
+@modal-inner-padding:         15px;
+
+//** Padding applied to the modal title
+@modal-title-padding:         15px;
+//** Modal title line-height
+@modal-title-line-height:     @line-height-base;
+
+//** Background color of modal content area
+@modal-content-bg:                             #fff;
+//** Modal content border color
+@modal-content-border-color:                   rgba(0,0,0,.2);
+//** Modal content border color **for IE8**
+@modal-content-fallback-border-color:          #999;
+
+//** Modal backdrop background color
+@modal-backdrop-bg:           #000;
+//** Modal backdrop opacity
+@modal-backdrop-opacity:      .5;
+//** Modal header border color
+@modal-header-border-color:   #e5e5e5;
+//** Modal footer border color
+@modal-footer-border-color:   @modal-header-border-color;
+
+@modal-lg:                    900px;
+@modal-md:                    600px;
+@modal-sm:                    300px;
+
+
+//== Alerts
+//
+//## Define alert colors, border radius, and padding.
+
+@alert-padding:               15px;
+@alert-border-radius:         @border-radius-base;
+@alert-link-font-weight:      bold;
+
+@alert-success-bg:            @state-success-bg;
+@alert-success-text:          @state-success-text;
+@alert-success-border:        @state-success-border;
+
+@alert-info-bg:               @state-info-bg;
+@alert-info-text:             @state-info-text;
+@alert-info-border:           @state-info-border;
+
+@alert-warning-bg:            @state-warning-bg;
+@alert-warning-text:          @state-warning-text;
+@alert-warning-border:        @state-warning-border;
+
+@alert-danger-bg:             @state-danger-bg;
+@alert-danger-text:           @state-danger-text;
+@alert-danger-border:         @state-danger-border;
+
+
+//== Progress bars
+//
+//##
+
+//** Background color of the whole progress component
+@progress-bg:                 #f5f5f5;
+//** Progress bar text color
+@progress-bar-color:          #fff;
+
+//** Default progress bar color
+@progress-bar-bg:             @brand-primary;
+//** Success progress bar color
+@progress-bar-success-bg:     @brand-success;
+//** Warning progress bar color
+@progress-bar-warning-bg:     @brand-warning;
+//** Danger progress bar color
+@progress-bar-danger-bg:      @brand-danger;
+//** Info progress bar color
+@progress-bar-info-bg:        @brand-info;
+
+
+//== List group
+//
+//##
+
+//** Background color on `.list-group-item`
+@list-group-bg:                 #fff;
+//** `.list-group-item` border color
+@list-group-border:             #ddd;
+//** List group border radius
+@list-group-border-radius:      @border-radius-base;
+
+//** Background color of single list items on hover
+@list-group-hover-bg:           #f5f5f5;
+//** Text color of active list items
+@list-group-active-color:       @component-active-color;
+//** Background color of active list items
+@list-group-active-bg:          @component-active-bg;
+//** Border color of active list elements
+@list-group-active-border:      @list-group-active-bg;
+//** Text color for content within active list items
+@list-group-active-text-color:  lighten(@list-group-active-bg, 40%);
+
+//** Text color of disabled list items
+@list-group-disabled-color:      @gray-light;
+//** Background color of disabled list items
+@list-group-disabled-bg:         @gray-lighter;
+//** Text color for content within disabled list items
+@list-group-disabled-text-color: @list-group-disabled-color;
+
+@list-group-link-color:         #555;
+@list-group-link-hover-color:   @list-group-link-color;
+@list-group-link-heading-color: #333;
+
+
+//== Panels
+//
+//##
+
+@panel-bg:                    #fff;
+@panel-body-padding:          15px;
+@panel-heading-padding:       10px 15px;
+@panel-footer-padding:        @panel-heading-padding;
+@panel-border-radius:         @border-radius-base;
+
+//** Border color for elements within panels
+@panel-inner-border:          #ddd;
+@panel-footer-bg:             #f5f5f5;
+
+@panel-default-text:          @gray-dark;
+@panel-default-border:        #ddd;
+@panel-default-heading-bg:    #f5f5f5;
+
+@panel-primary-text:          #fff;
+@panel-primary-border:        @brand-primary;
+@panel-primary-heading-bg:    @brand-primary;
+
+@panel-success-text:          @state-success-text;
+@panel-success-border:        @state-success-border;
+@panel-success-heading-bg:    @state-success-bg;
+
+@panel-info-text:             @state-info-text;
+@panel-info-border:           @state-info-border;
+@panel-info-heading-bg:       @state-info-bg;
+
+@panel-warning-text:          @state-warning-text;
+@panel-warning-border:        @state-warning-border;
+@panel-warning-heading-bg:    @state-warning-bg;
+
+@panel-danger-text:           @state-danger-text;
+@panel-danger-border:         @state-danger-border;
+@panel-danger-heading-bg:     @state-danger-bg;
+
+
+//== Thumbnails
+//
+//##
+
+//** Padding around the thumbnail image
+@thumbnail-padding:           4px;
+//** Thumbnail background color
+@thumbnail-bg:                @body-bg;
+//** Thumbnail border color
+@thumbnail-border:            #ddd;
+//** Thumbnail border radius
+@thumbnail-border-radius:     @border-radius-base;
+
+//** Custom text color for thumbnail captions
+@thumbnail-caption-color:     @text-color;
+//** Padding around the thumbnail caption
+@thumbnail-caption-padding:   9px;
+
+
+//== Wells
+//
+//##
+
+@well-bg:                     #f5f5f5;
+@well-border:                 darken(@well-bg, 7%);
+
+
+//== Badges
+//
+//##
+
+@badge-color:                 #fff;
+//** Linked badge text color on hover
+@badge-link-hover-color:      #fff;
+@badge-bg:                    @gray-light;
+
+//** Badge text color in active nav link
+@badge-active-color:          @link-color;
+//** Badge background color in active nav link
+@badge-active-bg:             #fff;
+
+@badge-font-weight:           bold;
+@badge-line-height:           1;
+@badge-border-radius:         10px;
+
+
+//== Breadcrumbs
+//
+//##
+
+@breadcrumb-padding-vertical:   8px;
+@breadcrumb-padding-horizontal: 15px;
+//** Breadcrumb background color
+@breadcrumb-bg:                 #f5f5f5;
+//** Breadcrumb text color
+@breadcrumb-color:              #ccc;
+//** Text color of current page in the breadcrumb
+@breadcrumb-active-color:       @gray-light;
+//** Textual separator for between breadcrumb elements
+@breadcrumb-separator:          "/";
+
+
+//== Carousel
+//
+//##
+
+@carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6);
+
+@carousel-control-color:                      #fff;
+@carousel-control-width:                      15%;
+@carousel-control-opacity:                    .5;
+@carousel-control-font-size:                  20px;
+
+@carousel-indicator-active-bg:                #fff;
+@carousel-indicator-border-color:             #fff;
+
+@carousel-caption-color:                      #fff;
+
+
+//== Close
+//
+//##
+
+@close-font-weight:           bold;
+@close-color:                 #000;
+@close-text-shadow:           0 1px 0 #fff;
+
+
+//== Code
+//
+//##
+
+@code-color:                  #c7254e;
+@code-bg:                     #f9f2f4;
+
+@kbd-color:                   #fff;
+@kbd-bg:                      #333;
+
+@pre-bg:                      #f5f5f5;
+@pre-color:                   @gray-dark;
+@pre-border-color:            #ccc;
+@pre-scrollable-max-height:   340px;
+
+
+//== Type
+//
+//##
+
+//** Horizontal offset for forms and lists.
+@component-offset-horizontal: 180px;
+//** Text muted color
+@text-muted:                  @gray-light;
+//** Abbreviations and acronyms border color
+@abbr-border-color:           @gray-light;
+//** Headings small color
+@headings-small-color:        @gray-light;
+//** Blockquote small color
+@blockquote-small-color:      @gray-light;
+//** Blockquote font size
+@blockquote-font-size:        (@font-size-base * 1.25);
+//** Blockquote border color
+@blockquote-border-color:     @gray-lighter;
+//** Page header border color
+@page-header-border-color:    @gray-lighter;
+//** Width of horizontal description list titles
+@dl-horizontal-offset:        @component-offset-horizontal;
+//** Horizontal line color.
+@hr-border:                   @gray-lighter;
+
+
diff --git a/app/soc/content/less/thirdparty/bootstrap/wells.less b/app/soc/content/less/thirdparty/bootstrap/wells.less
new file mode 100755
index 0000000..15d072b
--- /dev/null
+++ b/app/soc/content/less/thirdparty/bootstrap/wells.less
@@ -0,0 +1,29 @@
+//
+// Wells
+// --------------------------------------------------
+
+
+// Base class
+.well {
+  min-height: 20px;
+  padding: 19px;
+  margin-bottom: 20px;
+  background-color: @well-bg;
+  border: 1px solid @well-border;
+  border-radius: @border-radius-base;
+  .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));
+  blockquote {
+    border-color: #ddd;
+    border-color: rgba(0,0,0,.15);
+  }
+}
+
+// Sizes
+.well-lg {
+  padding: 24px;
+  border-radius: @border-radius-large;
+}
+.well-sm {
+  padding: 9px;
+  border-radius: @border-radius-small;
+}
diff --git a/app/soc/content/less/thirdparty/lesshat/lesshat-prefixed.less b/app/soc/content/less/thirdparty/lesshat/lesshat-prefixed.less
new file mode 100755
index 0000000..370cb21
--- /dev/null
+++ b/app/soc/content/less/thirdparty/lesshat/lesshat-prefixed.less
@@ -0,0 +1,892 @@
+//  * =========================================================== *
+//  <                            LESSHat                          >
+//  * =========================================================== *
+//
+// Made with Energy drinks in Prague, Czech Republic.
+// Handcrafted by Petr Brzek, lesshat.com
+// Works great with CSS Hat csshat.com
+
+// version: v3.0.2 (2014-06-17)
+
+// TABLE OF MIXINS:
+	// align-content
+	// align-items
+	// align-self
+	// animation
+	// animation-delay
+	// animation-direction
+	// animation-duration
+	// animation-fill-mode
+	// animation-iteration-count
+	// animation-name
+	// animation-play-state
+	// animation-timing-function
+	// appearance
+	// backface-visibility
+	// background-clip
+	// background-image
+	// background-origin
+	// background-size
+	// blur
+	// border-bottom-left-radius
+	// border-bottom-right-radius
+	// border-image
+	// border-radius
+	// border-top-left-radius
+	// border-top-right-radius
+	// box-shadow
+	// box-sizing
+	// brightness
+	// calc
+	// column-count
+	// column-gap
+	// column-rule
+	// column-width
+	// columns
+	// contrast
+	// display
+	// drop-shadow
+	// filter
+	// flex
+	// flex-basis
+	// flex-direction
+	// flex-grow
+	// flex-shrink
+	// flex-wrap
+	// font-face
+	// grayscale
+	// hue-rotate
+	// hyphens
+	// invert
+	// justify-content
+	// keyframes
+	// opacity
+	// order
+	// perspective
+	// perspective-origin
+	// placeholder
+	// rotate
+	// rotate3d
+	// rotateX
+	// rotateY
+	// rotateZ
+	// saturate
+	// scale
+	// scale3d
+	// scaleX
+	// scaleY
+	// scaleZ
+	// selection
+	// sepia
+	// size
+	// skew
+	// skewX
+	// skewY
+	// transform
+	// transform-origin
+	// transform-style
+	// transition
+	// transition-delay
+	// transition-duration
+	// transition-property
+	// transition-timing-function
+	// translate
+	// translate3d
+	// translateX
+	// translateY
+	// translateZ
+	// user-select
+
+.lh-align-content(...) {
+  @process: ~`(function(r){return r=r||"stretch"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_ms: ~`(function(t){return t=t||"stretch","flex-start"==t?t="start":"flex-end"==t?t="end":"space-between"==t?t="justify":"space-around"==t&&(t="distribute"),t})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-align-content: @process;
+  -ms-flex-line-pack: @process_ms;
+  align-content: @process;
+}
+
+.lh-align-items(...) {
+  @process_olderwebkit: ~`(function(t){return t=t||"stretch","flex-start"==t?t="start":"flex-end"==t&&(t="end"),t})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  @process_moz: ~`(function(t){return t=t||"stretch","flex-start"==t?t="start":"flex-end"==t&&(t="end"),t})((function(){var t="@{arguments}";return t=t.replace(/^\[|\]$/g,"")})())`;
+  @process: ~`(function(t){return t=t||"stretch"})((function(){var t="@{arguments}";return t=t.replace(/^\[|\]$/g,"")})())`;
+  @process_ms: ~`(function(t){return t=t||"stretch","flex-start"==t?t="start":"flex-end"==t&&(t="end"),t})((function(){var t="@{arguments}";return t=t.replace(/^\[|\]$/g,"")})())`;
+  -webkit-box-align: @process_olderwebkit;
+  -moz-box-align: @process_moz;
+  -webkit-align-items: @process;
+  -ms-flex-align: @process_ms;
+  align-items: @process;
+}
+
+.lh-align-self(...) {
+  @process: ~`(function(t){return t=t||"auto"})((function(){var t="@{arguments}";return t=t.replace(/^\[|\]$/g,"")})())`;
+  @process_ms: ~`(function(t){return t=t||"auto","flex-start"==t?t="start":"flex-end"==t&&(t="end"),t})((function(){var t="@{arguments}";return t=t.replace(/^\[|\]$/g,"")})())`;
+  -webkit-align-self: @process;
+  -ms-flex-item-align: @process_ms;
+  align-self: @process;
+}
+
+.lh-animation(...) {
+  @process: ~`(function(t){return t=t||"none",/^[^, ]*,/.test(t)&&(t=t.replace(/(?:,)(?![^(]*\))/g,"")),t})((function(){var t="@{arguments}";return t=t.replace(/^\[|\]$/g,"")})())`;
+  -webkit-animation: @process;
+  -moz-animation: @process;
+  -o-animation: @process;
+  animation: @process;
+}
+
+.lh-animation-delay(...) {
+  @process: ~`(function(t){t=t||"0";var r=/(?:\d)(?:ms|s)/gi,e=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(t)||"0"===t||(t=t.replace(e,function(t){return t+=parseFloat(t,10)>10?"ms":"s"})),t})((function(){var t="@{arguments}";return t=t.replace(/^\[|\]$/g,"")})())`;
+  -webkit-animation-delay: @process;
+  -moz-animation-delay: @process;
+  -o-animation-delay: @process;
+  animation-delay: @process;
+}
+
+.lh-animation-direction(...) {
+  @process: ~`(function(r){return r||"normal"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-animation-direction: @process;
+  -moz-animation-direction: @process;
+  -o-animation-direction: @process;
+  animation-direction: @process;
+}
+
+.lh-animation-duration(...) {
+  @process: ~`(function(r){r=r||"0";var t=/ms|s/gi,e=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return t.test(r)||"0"===r||(r=r.replace(e,function(r){return r+=parseFloat(r,10)>10?"ms":"s"})),r})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-animation-duration: @process;
+  -moz-animation-duration: @process;
+  -o-animation-duration: @process;
+  animation-duration: @process;
+}
+
+.lh-animation-fill-mode(...) {
+  @process: ~`(function(r){return r||"none"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-animation-fill-mode: @process;
+  -moz-animation-fill-mode: @process;
+  -o-animation-fill-mode: @process;
+  animation-fill-mode: @process;
+}
+
+.lh-animation-iteration-count(...) {
+  @process: ~`(function(r){return r||"0"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-animation-iteration-count: @process;
+  -moz-animation-iteration-count: @process;
+  -o-animation-iteration-count: @process;
+  animation-iteration-count: @process;
+}
+
+.lh-animation-name(...) {
+  @process: ~`(function(r){return r||"none"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-animation-name: @process;
+  -moz-animation-name: @process;
+  -o-animation-name: @process;
+  animation-name: @process;
+}
+
+.lh-animation-play-state(...) {
+  @process: ~`(function(r){return r||"running"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-animation-play-state: @process;
+  -moz-animation-play-state: @process;
+  -o-animation-play-state: @process;
+  animation-play-state: @process;
+}
+
+.lh-animation-timing-function(...) {
+  @process: ~`(function(r){return r||"ease"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-animation-timing-function: @process;
+  -moz-animation-timing-function: @process;
+  -o-animation-timing-function: @process;
+  animation-timing-function: @process;
+}
+
+.lh-appearance(...) {
+  @process: ~`(function(r){return r||"none"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-appearance: @process;
+  -moz-appearance: @process;
+  appearance: @process;
+}
+
+.lh-backface-visibility(...) {
+  @process: ~`(function(r){return r||"visible"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-backface-visibility: @process;
+  -moz-backface-visibility: @process;
+  -o-backface-visibility: @process;
+  -ms-backface-visibility: @process;
+  backface-visibility: @process;
+}
+
+.lh-background-clip(...) {
+  @process: ~`(function(r){return r||"border-box"})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  -webkit-background-clip: @process;
+  -moz-background-clip: @process;
+  background-clip: @process;
+}
+
+.lh-background-image(...) {
+  @process_ms: ~`(function(t){function e(t){var e,r,n,a,s,i,u,o,g="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",c=0,l=0,f="",d=[];if(!t)return t;do e=t.charCodeAt(c++),r=t.charCodeAt(c++),n=t.charCodeAt(c++),o=e<<16|r<<8|n,a=63&o>>18,s=63&o>>12,i=63&o>>6,u=63&o,d[l++]=g.charAt(a)+g.charAt(s)+g.charAt(i)+g.charAt(u);while(c<t.length);f=d.join("");var p=t.length%3;return(p?f.slice(0,p-3):f)+"===".slice(p||3)}if(t=t||8121991,8121991==t)return t;var r=/linear|radial/g.test(t)&&t.split(/,(?=\s*(?:linear|radial|url))/g),n=[],a={"to bottom":'x1="0%" y1="0%" x2="0%" y2="100%"',"to left":'x1="100%" y1="0%" x2="0%" y2="0%"',"to top":'x1="0%" y1="100%" x2="0%" y2="0%"',"to right":'x1="0%" y1="0%" x2="100%" y2="0%"',get"top"(){return this["to bottom"]},get"180deg"(){return this["to bottom"]},get"right"(){return this["to left"]},get"270deg"(){return this["to left"]},get"bottom"(){return this["to top"]},get"90deg"(){return this["to right"]},get"0deg"(){return this["to top"]},get"left"(){return this["to right"]},"-45deg":'x1="0%" y1="0%" x2="100%" y2="100%"',"45deg":'x1="0%" y1="100%" x2="100%" y2="0%"',"ellipse at center":'cx="50%" cy="50%" r="75%"',get"135deg"(){return this["-45deg"]}},s={uri_data:"url(data:image/svg+xml;base64,",xml:'<?xml version="1.0" ?>',svg_start:'<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 1 1" preserveAspectRatio="none">',linear_gradient_start:'<linearGradient id="lesshat-generated" gradientUnits="userSpaceOnUse"',radial_gradient_start:'<radialGradient id="lesshat-generated" gradientUnits="userSpaceOnUse"',linear_gradient_end:"</linearGradient>",radial_gradient_end:"</radialGradient>",rect_linear:'<rect x="0" y="0" width="1" height="1" fill="url(#lesshat-generated)" />',rect_radial:'<rect x="-50" y="-50" width="101" height="101" fill="url(#lesshat-generated)" />',svg_end:"</svg>"};if(r.length){r.forEach(function(t){var e={};if(Object.keys(a).some(function(r){return t.indexOf(r)>=0?(e.svg_direction=a[r],!0):(e.svg_direction=!1,void 0)}),/linear/.test(t))e.svg_type="linear";else if(/radial/.test(t))e.svg_type="radial";else if(!/linear/.test(t)&&!/radial/.test(t))return e.url=t.trim(),e.svg_type="url",e.svg_direction=!0,n.push(e),!1;var r=t.match(/rgb|#[a-zA-Z0-9]|hsl/g).length;e.svg_stops=[],t=t.replace(/transparent/g,"rgba(0,0,0,0)"),t.match(/#[a-zA-Z0-9]/g)&&t.match(/(#[a-zA-Z0-9]+)\s*(\d+%)?/g).forEach(function(t){t=t.split(" "),e.svg_stops.push('<stop offset="'+(t[1]||!1)+'" stop-color="'+t[0]+'" stop-opacity="1"/>')}),t.match(/rgba?\(\d+,\s*\d+,\s*\d+(?:,\s*(0|1|\.\d+|0\.\d+))?\)/g)&&t.replace(/rgba?\((\d+,\s*\d+,\s*\d+)(?:,\s*(0|1|\.\d+|0\.\d+))?\)\s*(\d+%)?/g,function(t,r,n,a){e.svg_stops.push('<stop offset="'+(a||!1)+'" stop-color="rgb('+r+')" stop-opacity="'+(n||1)+'"/>')}),t.match(/hsla?\((\d+,\s*\d+%,\s*\d+%),\s*(0|1|\.\d+|0\.\d+)\)/g)&&t.replace(/hsla?\((\d+,\s*\d+%,\s*\d+%),\s*(0|1|\.\d+|0\.\d+)\)\s*(\d+%)?/g,function(t,r,n,a){e.svg_stops.push('<stop offset="'+(a||!1)+'" stop-color="hsl('+r+')" stop-opacity="'+(n||1)+'"/>')});var s=Math.floor(100/(r-1));e.svg_stops.forEach(function(t,r){/offset="false"/.test(t)&&(e.svg_stops[r]=t.replace(/offset="false"/,'offset="'+s*r+'%"'))}),e.svg_stops.sort(function(t,e){return t=t.match(/offset="(\d+)%"/),e=e.match(/offset="(\d+)%"/),2==t.length&&2==e.length?t[1]-e[1]:void 0}),n.push(e)});var i=[],u=n.every(function(t){for(var e in t)if(0==t[e]||0==t[e].length)return!1;return!0});if(!u)return 8121991;n.forEach(function(t,e){("linear"==t.svg_type||"radial"==t.svg_type)&&(i[e]=s.xml+s.svg_start),"linear"==t.svg_type?(i[e]+=s.linear_gradient_start+" "+t.svg_direction+">",t.svg_stops.forEach(function(t){i[e]+=t}),i[e]+=s.linear_gradient_end,i[e]+=s.rect_linear,i[e]+=s.svg_end):"radial"==t.svg_type?(i[e]+=s.radial_gradient_start+" "+t.svg_direction+">",t.svg_stops.forEach(function(t){i[e]+=t}),i[e]+=s.radial_gradient_end,i[e]+=s.rect_radial,i[e]+=s.svg_end):"url"==t.svg_type&&(i[e]=t.url)}),i.forEach(function(t,r){/<\?xml version="1.0" \?>/g.test(t)&&(i[r]=s.uri_data+e(t)+")")}),t=i.join(",")}return t})((function(){var r="@{arguments}";return r=r.replace(/^\[|\]$/g,"")})())`;
+  @process_webkit: ~`(function(t){if(t=t||8121991,8121991==t)return t;var e={"to bottom":"top","to left":"right","to top":"bottom","to right":"left","ellipse at center":"center, ellipse cover","circle closest-side":"center center, circle contain","circle farthest-corner":"center center, circle cover","circle farthest-side":"center center, circle cover","ellipse closest-side":"center center, ellipse contain","ellipse farthest-corner":"center center, ellipse cover","ellipse farthest-side":"center center, ellipse cover"},r=/(radial-gradient\()([a-z- ]+)at\s+(\w+%?)\s*(\w*%?)/g,n=Object.keys(e);return n.some(function(n){return t.indexOf(n)>=0?(t=t.replace(new RegExp(n+"(?![ a-z0-9])","g"),e[n]),!0):(r.test(t)&&(t=t.replace(r,function(t,e,r,n,a){return e.trim()+n.trim()+" "+a.trim()+","+r.replace(/closest-side/g,"contain").replace(/farthest-corner/g,"cover").trim()})),void 0)}),t=t.replace(/(\d+)\s*deg/g,function(t,e){return 90-e+"deg"}).replace(/(linear|radial)-gradient/g,"-webkit-$1-gradient")})((function(){var t="@{arguments}";return t=t.replace(/^\[|\]$/g,"")})())`;
+  @process_moz: ~`(function(e){if(e=e||8121991,8121991==e)return e;var t={"to bottom":"top","to left":"right","to top":"bottom","to right":"left","ellipse at center":"center, ellipse cover","circle closest-side":"center center, circle contain","circle farthest-corner":"center center, circle cover","circle farthest-side":"center center, circle cover","ellipse closest-side":"center center, ellipse contain","ellipse farthest-corner":"center center, ellipse cover","ellipse farthest-side":"center center, ellipse cover"},r=/(radial-gradient\()([a-z- ]+)at\s+(\w+%?)\s*(\w*%?)/g,n=Object.keys(t);return n.some(function(n){return e.indexOf(n)>=0?(e=e.replace(new RegExp(n+"(?![ a-z0-9])","g"),t[n]),!0):(r.test(e)&&(e=e.replace(r,function(e,t,r,n,a){return t.trim()+n.trim()+" "+a.trim()+","+r.replace(/closest-side/g,"contain").replace(/farthest-corner/g,"cover").trim()})),void 0)}),e=e.replace(/(\d+)\s*deg/g,function(e,t){return 90-t+"deg"}).replace(/(linear|radial)-gradient/g,"-moz-$1-gradient")})((function(){var t="@{arguments}";return t=t.replace(/^\[|\]$/g,"")})())`;
+  @process_opera: ~`(function(e){if(e=e||8121991,8121991==e)return e;var t={"to bottom":"top","to left":"right","to top":"bottom","to right":"left","ellipse at center":"center, ellipse cover","circle closest-side":"center center, circle contain","circle farthest-corner":"center center, circle cover","circle farthest-side":"center center, circle cover","ellipse closest-side":"center center, ellipse contain","ellipse farthest-corner":"center center, ellipse cover","ellipse farthest-side":"center center, ellipse cover"},r=/(radial-gradient\()([a-z- ]+)at\s+(\w+%?)\s*(\w*%?)/g,n=Object.keys(t);return n.some(function(n){return e.indexOf(n)>=0?(e=e.replace(new RegExp(n+"(?![ a-z0-9])","g"),t[n]),!0):(r.test(e)&&(e=e.replace(r,function(e,t,r,n,a){return t.trim()+n.trim()+" "+a.trim()+","+r.replace(/closest-side/g,"contain").replace(/farthest-corner/g,"cover").trim()})),void 0)}),e=e.replace(/(\d+)\s*deg/g,function(e,t){return 90-t+"deg"}).replace(/(linear|radial)-gradient/g,"-o-$1-gradient")})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  @process: ~`(function(e){if(e=e||8121991,8121991==e)return e;var t={top:"to bottom",right:"to left",bottom:"to top",left:"to right"},r=Object.keys(t);return r.some(function(r){return e.indexOf(r)>=0&&!new RegExp("to\\s+"+r+"|at\\s+"+r,"g").test(e)?(e=e.replace(new RegExp(r),t[r]),!0):void 0}),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  background-image: @process_ms;
+  background-image: @process_webkit;
+  background-image: @process_moz;
+  background-image: @process_opera;
+  background-image: @process;
+}
+
+.lh-background-origin(...) {
+  @process: ~`(function(e){return e||"padding-box"})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-background-origin: @process;
+  -moz-background-origin: @process;
+  background-origin: @process;
+}
+
+.lh-background-size(...) {
+  @process: ~`(function(e){e=e||"auto auto";var t=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),t.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"px"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-background-size: @process;
+  -moz-background-size: @process;
+  background-size: @process;
+}
+
+.lh-blur(...) {
+  @process: ~`(function(e){e=e||"0";var t=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return t.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"px"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-filter: blur(@process);
+  -moz-filter: blur(@process);
+  -ms-filter: blur(@process);
+  filter: blur(@process);
+}
+
+.lh-border-bottom-left-radius(...) {
+  @process: ~`(function(e){e=e||"0";var t=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),t.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"px"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-border-bottom-left-radius: @process; -webkit-background-clip: padding-box; 
+  -moz-border-radius-bottomleft: @process; -moz-background-clip: padding; 
+  border-bottom-left-radius: @process; background-clip: padding-box; 
+}
+
+.lh-border-bottom-right-radius(...) {
+  @process: ~`(function(e){e=e||"0";var t=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),t.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"px"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-border-bottom-right-radius: @process; -webkit-background-clip: padding-box; 
+  -moz-border-radius-bottomright: @process; -moz-background-clip: padding; 
+  border-bottom-right-radius: @process; background-clip: padding-box; 
+}
+
+.lh-border-image(...) {
+  @process: ~`(function(e){return e=e||8121991,/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-border-image: @process;
+  -moz-border-image: @process;
+  -o-border-image: @process;
+  border-image: @process;
+}
+
+.lh-border-radius(...) {
+  @process: ~`(function(e){e=e||"0";var t=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),t.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"px"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-border-radius: @process; -webkit-background-clip: padding-box; 
+  -moz-border-radius: @process; -moz-background-clip: padding; 
+  border-radius: @process; background-clip: padding-box; 
+}
+
+.lh-border-top-left-radius(...) {
+  @process: ~`(function(e){e=e||"0";var t=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),t.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"px"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-border-top-left-radius: @process; -webkit-background-clip: padding-box; 
+  -moz-border-radius-topleft: @process; -moz-background-clip: padding; 
+  border-top-left-radius: @process; background-clip: padding-box; 
+}
+
+.lh-border-top-right-radius(...) {
+  @process: ~`(function(e){e=e||"0";var t=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),t.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"px"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-border-top-right-radius: @process; -webkit-background-clip: padding-box; 
+  -moz-border-radius-topright: @process; -moz-background-clip: padding; 
+  border-top-right-radius: @process; background-clip: padding-box; 
+}
+
+.lh-box-shadow(...) {
+  @process: ~`(function(e){e=e||"0";var t=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),t.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"px"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-box-shadow: @process;
+  -moz-box-shadow: @process;
+  box-shadow: @process;
+}
+
+.lh-box-sizing(...) {
+  @process: ~`(function(e){return e=e||"content-box"})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-box-sizing: @process;
+  -moz-box-sizing: @process;
+  box-sizing: @process;
+}
+
+.lh-brightness(...) {
+  @process: ~`(function(e){return e=e||"1"})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-filter: brightness(@process);
+  -moz-filter: brightness(@process);
+  -ms-filter: brightness(@process);
+  filter: brightness(@process);
+}
+
+.lh-calc(...) {
+  @process: ~`(function(e){function t(t,r){var a=");\n",c=n.split(","),i=c[0]+":"+t+"("+(c[1].trim()||0)+a;"start"==r?e="0;\n"+i:e+=i}e=e||8121991;var r="@{state}",n=e;if(8121991==e)return e;switch(r){case"1":t("-webkit-calc","start"),t("-moz-calc"),t("calc");break;case"2":t("-webkit-calc","start"),t("-moz-calc");break;case"3":t("-webkit-calc","start"),t("calc");break;case"4":t("-webkit-calc","start");break;case"5":t("-moz-calc","start"),t("calc");break;case"6":t("-moz-calc","start");break;case"7":t("calc","start")}return e=e.replace(/;$/g,"")})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  @state: 1; -lh-property: @process;
+
+}
+
+.lh-column-count(...) {
+  @process: ~`(function(e){return e=e||"auto"})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-column-count: @process;
+  -moz-column-count: @process;
+  column-count: @process;
+}
+
+.lh-column-gap(...) {
+  @process: ~`(function(e){e=e||"normal";var t=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return t.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"px"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-column-gap: @process;
+  -moz-column-gap: @process;
+  column-gap: @process;
+}
+
+.lh-column-rule(...) {
+  @process: ~`(function(e){e=e||"medium none black";var t=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),t.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"px"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-column-rule: @process;
+  -moz-column-rule: @process;
+  column-rule: @process;
+}
+
+.lh-column-width(...) {
+  @process: ~`(function(e){e=e||"auto";var t=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return t.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"px"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-column-width: @process;
+  -moz-column-width: @process;
+  column-width: @process;
+}
+
+.lh-columns(...) {
+  @process: ~`(function(e){e=e||"auto auto";var t=/^\d+$/;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,""),e=e.split(" ")),t.test(e[0])&&(e[0]=e[0]+"px"),e.join(" ")})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-columns: @process;
+  -moz-columns: @process;
+  columns: @process;
+}
+
+.lh-contrast(...) {
+  @process: ~`(function(e){e=e||"100%";var t=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return t.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"%"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-filter: ~"contrast(@{process})";
+  -moz-filter: ~"contrast(@{process})";
+  -ms-filter: ~"contrast(@{process})";
+  filter: ~"contrast(@{process})";
+}
+
+.lh-display(...) {
+  @process_oldwebkit: ~`(function(e){return e="flex"==e||"inline-flex"==e?"-webkit-box":8121991})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  @process_moz: ~`(function(e){return e="flex"==e||"inline-flex"==e?"-moz-box":8121991})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  @process_webkit: ~`(function(e){return e="flex"==e||"inline-flex"==e?"-webkit-"+e:8121991})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  @process_ms: ~`(function(e){return e="flex"==e?"-ms-flexbox":"inline-flex"==e?"-ms-inline-flexbox":8121991})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  @process: ~`(function(e){return"flex"!=e&&"inline-flex"!=e&&(e=8121991),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  display: @process_oldwebkit;
+  display: @process_moz;
+  display: @process_webkit;
+  display: @process_ms;
+  display: @process;
+}
+
+.lh-drop-shadow(...) {
+  @process: ~`(function(e){if(e=e||8121991,8121991==e)return e;var t=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),t.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"px"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-filter: drop-shadow(@process);
+  -moz-filter: drop-shadow(@process);
+  -ms-filter: drop-shadow(@process);
+  filter: drop-shadow(@process);
+}
+
+.lh-filter(...) {
+  @process: ~`(function(e){return e=e||"none",/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-filter: @process;
+  -moz-filter: @process;
+  -ms-filter: @process;
+  filter: @process;
+}
+
+.lh-flex(...) {
+  @process_olderwebkit: ~`(function(e){return/^\d+/.test(e)?e=e.match(/^\d+/)[0]:""==e&&(e="0"),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  @process_moz: ~`(function(e){return/^\d+/.test(e)?e=e.match(/^\d+/)[0]:""==e&&(e="0"),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  @process: ~`(function(e){return e=e||"0 1 auto",/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-box-flex: @process_olderwebkit;
+  -moz-box-flex: @process_moz;
+  -webkit-flex: @process;
+  -ms-flex: @process;
+  flex: @process;
+}
+
+.lh-flex-basis(...) {
+  @process: ~`(function(e){e=e||"auto";var t=/\d/gi,r=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return t.test(e)&&(e=e.replace(r,function(e){return 0==e&&e||e+"px"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-flex-basis: @process;
+  flex-basis: @process;
+}
+
+.lh-flex-direction(...) {
+  @process_oldestwebkit: ~`(function(e){return e="row"==e||"column"==e?"normal":"row-reverse"==e||"column-reverse"==e?"reverse":8121991})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  @process_oldermoz: ~`(function(e){return e="row"==e||"column"==e?"normal":"row-reverse"==e||"column-reverse"==e?"reverse":8121991})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  @process_olderwebkit: ~`(function(e){return e="row"==e||"row-reverse"==e?"horizontal":"column"==e||"column-reverse"==e?"vertical":8121991})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  @process_moz: ~`(function(e){return e="row"==e||"row-reverse"==e?"horizontal":"column"==e||"column-reverse"==e?"vertical":8121991})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  @process: ~`(function(e){return e=e||"row"})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-box-direction: @process_oldestwebkit;
+  -moz-box-direction: @process_oldermoz;
+  -webkit-box-orient: @process_olderwebkit;
+  -moz-box-orient: @process_moz;
+  -webkit-flex-direction: @process;
+  -ms-flex-direction: @process;
+  flex-direction: @process;
+}
+
+.lh-flex-grow(...) {
+  @process: ~`(function(e){return e=e||"0"})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-flex-grow: @process;
+  flex-grow: @process;
+}
+
+.lh-flex-shrink(...) {
+  @process: ~`(function(e){return e=e||"1"})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-flex-shrink: @process;
+  flex-shrink: @process;
+}
+
+.lh-flex-wrap(...) {
+  @process: ~`(function(e){return e=e||"nowrap"})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-flex-wrap: @process;
+  -ms-flex-wrap: @process;
+  flex-wrap: @process;
+}
+
+.lh-font-face(@fontname, @fontfile, @fontweight:normal, @fontstyle:normal) {
+  font-family: "@{fontname}";
+  src: url("@{fontfile}.eot");
+  src: url("@{fontfile}.eot?#iefix") format("embedded-opentype"),
+       url("@{fontfile}.woff") format("woff"),
+       url("@{fontfile}.ttf") format("truetype"),
+       url("@{fontfile}.svg#@{fontname}") format("svg");
+  font-weight: @fontweight;
+  font-style: @fontstyle;
+}
+
+.lh-grayscale(...) {
+  @process: ~`(function(e){e=e||"0";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(e)&&(e=e.replace(t,function(e){return 0==e&&e||e+"%"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-filter: grayscale(@process);
+  -moz-filter: grayscale(@process);
+  -ms-filter: grayscale(@process);
+  filter: grayscale(@process);
+}
+
+.lh-hue-rotate(...) {
+  @process: ~`(function(e){e=e||"0";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(e)&&(e=e.replace(t,function(e){return 0==e&&e||e+"deg"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-filter: hue-rotate(@process);
+  -moz-filter: hue-rotate(@process);
+  -ms-filter: hue-rotate(@process);
+  filter: hue-rotate(@process);
+}
+
+.lh-hyphens(...) {
+  @process: ~`(function(e){return e=e||"manual"})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-hyphens: @process;
+  -moz-hyphens: @process;
+  -ms-hyphens: @process;
+  hyphens: @process;
+}
+
+.lh-invert(...) {
+  @process: ~`(function(e){e=e||"100%";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(e)&&(e=e.replace(t,function(e){return 0==e&&e||e+"%"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-filter: invert(@process);
+  -moz-filter: invert(@process);
+  -ms-filter: invert(@process);
+  filter: invert(@process);
+}
+
+.lh-justify-content(...) {
+  @process_oldestWebkit: ~`(function(e){return e=e||"start","flex-start"==e?e="start":"flex-end"==e?e="end":("space-between"==e||"space-around"==e)&&(e="justify"),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  @process_moz: ~`(function(e){return e=e||"start","flex-start"==e?e="start":"flex-end"==e?e="end":("space-between"==e||"space-around"==e)&&(e="justify"),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  @process_ms: ~`(function(e){return e=e||"start","flex-start"==e?e="start":"flex-end"==e?e="end":"space-between"==e?e="justify":"space-around"==e&&(e="distribute"),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  @process: ~`(function(e){return e=e||"flex-start"})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-box-pack: @process_oldestWebkit;
+  -moz-box-pack: @process_moz;
+  -ms-flex-pack: @process_ms;
+  -webkit-justify-content: @process;
+  justify-content: @process;
+}
+
+.lh-keyframes(...) {
+  @process: ~`(function(e){function r(r,t,c){var i="}\n",u=n.split(/(^[a-zA-Z0-9-]+),/g),s=t+" "+u[1]+"{",o=["-webkit-","-moz-","-ms-",""];c?a.forEach(function(r){-1!==e.indexOf(r)&&(u[2]=u[2].replace(new RegExp(r,"g"),function(e){return c+e}))}):u[2]=u[2].replace(/{([^}]+)}/g,function(e,r){var t=r.split(";");t.forEach(function(e,r){a.forEach(function(n){-1!==e.indexOf(n)&&(t[r]="",o.forEach(function(a){t[r]+=e.trim().replace(new RegExp(n,"g"),function(e){return a+e})+";"}))})});var n=t.join(";").replace(/;;/g,";");return e.replace(r,n)}),s+=u[2]+i,"start"==r?e="0; } \n"+s:"startend"==r?e="0; } \n"+s.replace(i,""):e+="end"==r?s.replace(i,""):s}e=e||8121991;var t="@{state}",n=e;if(8121991==e)return e;var a=["animation","transform","filter"];switch(t){case"1":r("start","@-webkit-keyframes","-webkit-"),r(null,"@-moz-keyframes","-moz-"),r(null,"@-o-keyframes","-o-"),r("end","@keyframes");break;case"2":r("start","@-webkit-keyframes","-webkit-"),r(null,"@-moz-keyframes","-moz-"),r("end","@keyframes");break;case"3":r("start","@-webkit-keyframes","-webkit-"),r(null,"@-moz-keyframes","-moz-"),r("end","@-o-keyframes","-o-");break;case"4":r("start","@-webkit-keyframes","-webkit-"),r(null,"@-o-keyframes","-o-"),r("end","@keyframes");break;case"5":r("start","@-webkit-keyframes","-webkit-"),r("end","@-moz-keyframes","-moz-");break;case"6":r("start","@-webkit-keyframes","-webkit-"),r("end","@-o-keyframes","-o-");break;case"7":r("start","@-webkit-keyframes","-webkit-"),r("end","@keyframes");break;case"8":r("startend","@-webkit-keyframes","-webkit-");break;case"9":r("start","@-moz-keyframes","-moz-"),r(null,"@-o-keyframes","-o-"),r("end","@keyframes");break;case"10":r("start","@-moz-keyframes","-moz-"),r("end","@-o-keyframes","-o-");break;case"11":r("start","@-moz-keyframes","-moz-"),r("end","@keyframes");break;case"12":r("startend","@-moz-keyframes","-moz-");break;case"13":r("start","@-o-keyframes","-o-"),r("end","@keyframes");break;case"14":r("startend","@-o-keyframes","-o-");break;case"15":r("startend","@keyframes")}return e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  @state: 1; lesshat-selector { -lh-property: @process; }
+
+
+
+}
+
+.lh-opacity(...) {
+  @process_ms: ~`(function(e){return e=e||"filter: alpha(opacity=100)","alpha(opacity="+Math.floor(100*e)+")"})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  @process: ~`(function(e){return e=e||"1"})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+   zoom: 1; filter: @process_ms;
+  -webkit-opacity: @process;
+  -moz-opacity: @process;
+  opacity: @process;
+}
+
+.lh-order(...) {
+  @process: ~`(function(e){return e=e||"0"})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-box-ordinal-group: @process;
+  -moz-box-ordinal-group: @process;
+  -ms-flex-order: @process;
+  -webkit-order: @process;
+  order: @process;
+}
+
+.lh-perspective(...) {
+  @process: ~`(function(e){e=e||"none";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(e)&&(e=e.replace(t,function(e){return 0==e&&e||e+"px"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-perspective: @process;
+  -moz-perspective: @process;
+  perspective: @process;
+}
+
+.lh-perspective-origin(...) {
+  @process: ~`(function(e){e=e||"50% 50%";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),r.test(e)&&(e=e.replace(t,function(e){return 0==e&&e||e+"%"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-perspective-origin: @process;
+  -moz-perspective-origin: @process;
+  perspective-origin: @process;
+}
+
+.lh-placeholder(@color:#aaa, @element: 08121991) {
+  .inception (@arguments) when not (@element = 08121991) {
+    @{element}::-webkit-input-placeholder {
+       color: @color;
+    }
+    @{element}:-moz-placeholder {
+       color: @color;
+    }
+    @{element}::-moz-placeholder {
+       color: @color;
+    }
+    @{element}:-ms-input-placeholder {
+       color: @color;
+    }
+  }
+  .inception (@arguments) when (@element = 08121991) {
+    &::-webkit-input-placeholder {
+       color: @color;
+    }
+    &:-moz-placeholder {
+       color: @color;
+    }
+    &::-moz-placeholder {
+       color: @color;
+    }
+    &:-ms-input-placeholder {
+       color: @color;
+    }
+  }
+  .inception(@arguments);
+}
+
+.lh-rotate(...) {
+  @process: ~`(function(e){e=e||"0";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(e)&&(e=e.replace(t,function(e){return 0==e&&e||e+"deg"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: rotate(@process);
+  -moz-transform: rotate(@process);
+  -o-transform: rotate(@process);
+  -ms-transform: rotate(@process);
+  transform: rotate(@process);
+}
+
+.lh-rotate3d(...) {
+  @process: ~`(function(e){return e=e||"0, 0, 0, 0",e=e.replace(/,\s*\d+$/,function(e){return e+"deg"})})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: rotate3d(@process);
+  -moz-transform: rotate3d(@process);
+  -o-transform: rotate3d(@process);
+  -ms-transform: rotate3d(@process);
+  transform: rotate3d(@process);
+}
+
+.lh-rotateX(...) {
+  @process: ~`(function(e){e=e||"0";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(e)&&(e=e.replace(t,function(e){return 0==e&&e||e+"deg"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: rotateX(@process);
+  -moz-transform: rotateX(@process);
+  -o-transform: rotateX(@process);
+  -ms-transform: rotateX(@process);
+  transform: rotateX(@process);
+}
+
+.lh-rotateY(...) {
+  @process: ~`(function(e){e=e||"0";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(e)&&(e=e.replace(t,function(e){return 0==e&&e||e+"deg"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: rotateY(@process);
+  -moz-transform: rotateY(@process);
+  -o-transform: rotateY(@process);
+  -ms-transform: rotateY(@process);
+  transform: rotateY(@process);
+}
+
+.lh-rotateZ(...) {
+  @process: ~`(function(e){e=e||"0";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(e)&&(e=e.replace(t,function(e){return 0==e&&e||e+"deg"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: rotateZ(@process);
+  -moz-transform: rotateZ(@process);
+  -o-transform: rotateZ(@process);
+  -ms-transform: rotateZ(@process);
+  transform: rotateZ(@process);
+}
+
+.lh-saturate(...) {
+  @process: ~`(function(e){e=e||"100%";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(e)&&(e=e.replace(t,function(e){return 0==e&&e||e+"%"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-filter: ~"saturate(@{process})";
+  -moz-filter: ~"saturate(@{process})";
+  -ms-filter: ~"saturate(@{process})";
+  filter: ~"saturate(@{process})";
+}
+
+.lh-scale(...) {
+  @process: ~`(function(e){return e=e||"1"})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: scale(@process);
+  -moz-transform: scale(@process);
+  -o-transform: scale(@process);
+  -ms-transform: scale(@process);
+  transform: scale(@process);
+}
+
+.lh-scale3d(...) {
+  @process: ~`(function(e){return e=e||"1, 1, 1"})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: scale3d(@process);
+  -moz-transform: scale3d(@process);
+  -o-transform: scale3d(@process);
+  -ms-transform: scale3d(@process);
+  transform: scale3d(@process);
+}
+
+.lh-scaleX(...) {
+  @process: ~`(function(e){return e=e||"1"})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: scaleX(@process);
+  -moz-transform: scaleX(@process);
+  -o-transform: scaleX(@process);
+  -ms-transform: scaleX(@process);
+  transform: scaleX(@process);
+}
+
+.lh-scaleY(...) {
+  @process: ~`(function(e){return e=e||"1"})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: scaleY(@process);
+  -moz-transform: scaleY(@process);
+  -o-transform: scaleY(@process);
+  -ms-transform: scaleY(@process);
+  transform: scaleY(@process);
+}
+
+.lh-scaleZ(...) {
+  @process: ~`(function(e){return e=e||"1"})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: scaleZ(@process);
+  -moz-transform: scaleZ(@process);
+  -o-transform: scaleZ(@process);
+  -ms-transform: scaleZ(@process);
+  transform: scaleZ(@process);
+}
+
+.lh-selection(...) {
+  @process: ~`(function(e){function r(r,t){var a="}\n",c=n.split(","),u=(c[1]||"")+t+"{"+c[0]+a;"start"==r?e="0; } \n"+u:"startend"==r?e="0; } \n"+u.replace(a,""):e+="end"==r?u.replace(a,""):u}e=e||8121991;var t="@{state}",n=e;if(8121991==e)return e;switch(t){case"1":r("start","::selection"),r("end","::-moz-selection");break;case"2":r("startend","::selection");break;case"3":r("startend","::-moz-selection")}return e=e.replace(/;$/g,"")})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  @state: 1; lesshat-selector { -lh-property: @process; }
+
+}
+
+.lh-sepia(...) {
+  @process: ~`(function(e){e=e||"100%";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(e)&&(e=e.replace(t,function(e){return 0==e&&e||e+"%"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-filter: sepia(@process);
+  -moz-filter: sepia(@process);
+  -ms-filter: sepia(@process);
+  filter: sepia(@process);
+}
+
+.lh-size(@square) {
+  @unit: 'px';
+  .process(@square) when (ispixel(@square)), (isem(@square)), (ispercentage(@square)), (iskeyword(@square)) {
+    width: @square;
+    height: @square;
+  }
+
+  .process(@square) when not (ispixel(@square)) and not (isem(@square)) and not (ispercentage(@square)) and not (isstring(@square)) and not (iskeyword(@square)) {
+    width: ~`@{square} + @{unit}`;
+    height: ~`@{square} + @{unit}`;
+  }
+
+  .process(@square);
+
+}
+
+.lh-size(@width, @height) {
+  @unit: 'px';
+  .process(@width, @height) when (ispixel(@width)), (isem(@width)), (ispercentage(@width)), (iskeyword(@width)) {
+    .kittens(@height) when (ispixel(@height)), (isem(@height)), (ispercentage(@height)), (iskeyword(@height)) {
+      width: @width;
+      height: @height;
+    }
+    .kittens(@height) when not (ispixel(@height)) and not (isem(@height)) and not (ispercentage(@height)) and not (iskeyword(@height)) {
+      width: @width;
+      height: ~`@{height} + @{unit}`;
+    }
+    .kittens(@height);
+  }
+
+  .process(@width, @height) when (ispixel(@height)), (isem(@height)), (ispercentage(@height)), (iskeyword(@height)) {
+    .kittens(@width) when (ispixel(@width)), (isem(@width)), (ispercentage(@width)), (iskeyword(@width)) {}
+    .kittens(@width) when not (ispixel(@width)) and not (isem(@width)) and not (ispercentage(@width)) and not (iskeyword(@width)) {
+      width: ~`@{width} + @{unit}`;
+      height: @height;
+    }
+    .kittens(@width);
+  }
+
+  .process(@width, @height) when not (ispixel(@width)) and not (isem(@width)) and not (ispercentage(@width)) and not (iskeyword(@width)) and not (ispixel(@height)) and not (isem(@height)) and not (ispercentage(@height)) and not (iskeyword(@height))  {
+    width: ~`@{width} + @{unit}`;
+    height: ~`@{height} + @{unit}`;
+  }
+
+  .process(@width, @height);
+
+}
+
+.lh-skew(...) {
+  @process: ~`(function(e){e=e||"0";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(e)&&(e=e.replace(t,function(e){return 0==e&&e||e+"deg"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: skew(@process);
+  -moz-transform: skew(@process);
+  -o-transform: skew(@process);
+  -ms-transform: skew(@process);
+  transform: skew(@process);
+}
+
+.lh-skewX(...) {
+  @process: ~`(function(e){e=e||"0";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(e)&&(e=e.replace(t,function(e){return 0==e&&e||e+"deg"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: skewX(@process);
+  -moz-transform: skewX(@process);
+  -o-transform: skewX(@process);
+  -ms-transform: skewX(@process);
+  transform: skewX(@process);
+}
+
+.lh-skewY(...) {
+  @process: ~`(function(e){e=e||"0";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(e)&&(e=e.replace(t,function(e){return 0==e&&e||e+"deg"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: skewY(@process);
+  -moz-transform: skewY(@process);
+  -o-transform: skewY(@process);
+  -ms-transform: skewY(@process);
+  transform: skewY(@process);
+}
+
+.lh-transform(...) {
+  @process: ~`(function(e){e=e||"none";var r={translate:"px",rotate:"deg",rotate3d:"deg",skew:"deg"};/^\w*\(?[a-z0-9.]*\)?/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,""));for(var t in r)e.indexOf(t)>=0&&(e=e.replace(new RegExp(t+"[\\w]?\\([a-z0-9, %]*\\)"),function(e){var n=/(\d+\.?\d*)(?!\w|%)/g;return"rotate3d"==t&&(n=/,\s*\d+$/),e.replace(n,function(e){return e+r[t]})}));return e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: @process;
+  -moz-transform: @process;
+  -o-transform: @process;
+  -ms-transform: @process;
+  transform: @process;
+}
+
+.lh-transform-origin(...) {
+  @process: ~`(function(e){e=e||"50% 50% 0";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),r.test(e)&&(e=e.replace(t,function(e){return 0==e&&e||e+"%"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform-origin: @process;
+  -moz-transform-origin: @process;
+  -o-transform-origin: @process;
+  -ms-transform-origin: @process;
+  transform-origin: @process;
+}
+
+.lh-transform-style(...) {
+  @process: ~`(function(e){return e=e||"flat"})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform-style: @process;
+  -moz-transform-style: @process;
+  -o-transform-style: @process;
+  -ms-transform-style: @process;
+  transform-style: @process;
+}
+
+.lh-transition(...) {
+  @process_webkit: ~`(function(e){e=e||"all 0 ease 0";var r=["background-size","border-radius","border-bottom-left-radius","border-bottom-right-radius","border-top-left-radius","border-top-right-radius","box-shadow","column","transform","filter"],t="-webkit-",n=/(?:\d)(?:ms|s)/gi,a=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),r.forEach(function(r){-1!==e.indexOf(r)&&(e=e.replace(new RegExp(r,"g"),function(e){return t+e}))}),n.test(e)||"0"===e||(e=e.replace(a,function(e){return e+=parseFloat(e,10)>10?"ms":"s"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  @process_moz: ~`(function(e){e=e||"all 0 ease 0";var r=["background-size","box-shadow","column","transform","filter"],t="-moz-",n=/(?:\d)(?:ms|s)/gi,a=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),r.forEach(function(r){-1!==e.indexOf(r)&&(e=e.replace(new RegExp(r,"g"),function(e){return t+e}))}),n.test(e)||"0"===e||(e=e.replace(a,function(e){return e+=parseFloat(e,10)>10?"ms":"s"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  @process_opera: ~`(function(e){e=e||"all 0 ease 0";var r=["transform"],t="-o-",n=/(?:\d)(?:ms|s)/gi,a=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%)/gi;return/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,"")),r.forEach(function(r){-1!==e.indexOf(r)&&(e=e.replace(new RegExp(r,"g"),function(e){return t+e}))}),n.test(e)||"0"===e||(e=e.replace(a,function(e){return e+=parseFloat(e,10)>10?"ms":"s"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  @process: ~`(function(e){e=e||"all 0 ease 0";var r=["-webkit-","-moz-","-o-",""],t=["column","transform","filter"],n=/(?:\d)(?:ms|s)/gi,a=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%)/gi;/^[^, ]*,/.test(e)&&(e=e.replace(/(?:,)(?![^(]*\))/g,""));var c=e.split(/(?:,)(?![^(]*\))/g);return c.forEach(function(e,n){t.forEach(function(t){-1!==e.indexOf(t)&&(c[n]="",r.forEach(function(a,u){c[n]+=e.trim().replace(new RegExp(t,"g"),function(e){return a+e}),u<r.length-1&&(c[n]+=",")}))})}),e=c.join(","),n.test(e)||"0"===e||(e=e.replace(a,function(e){return e+=parseFloat(e,10)>10?"ms":"s"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transition: @process_webkit;
+  -moz-transition: @process_moz;
+  -o-transition: @process_opera;
+  transition: @process;
+}
+
+.lh-transition-delay(...) {
+  @process: ~`(function(e){e=e||"0";var r=/(?:\d)(?:ms|s)/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(e)||"0"===e||(e=e.replace(t,function(e){return e+=parseFloat(e,10)>10?"ms":"s"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transition-delay: @process;
+  -moz-transition-delay: @process;
+  -o-transition-delay: @process;
+  transition-delay: @process;
+}
+
+.lh-transition-duration(...) {
+  @process: ~`(function(e){e=e||"0";var r=/ms|s/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(e)||"0"===e||(e=e.replace(t,function(e){return e+=parseFloat(e,10)>10?"ms":"s"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transition-duration: @process;
+  -moz-transition-duration: @process;
+  -o-transition-duration: @process;
+  transition-duration: @process;
+}
+
+.lh-transition-property(...) {
+  @process_webkit: ~`(function(e){e=e||"all";var r=["background-size","border-radius","border-bottom-left-radius","border-bottom-right-radius","border-top-left-radius","border-top-right-radius","box-shadow","column","transform","filter"],t="-webkit-";return r.forEach(function(r){-1!==e.indexOf(r)&&(e=e.replace(new RegExp(r,"g"),function(e){return t+e}))}),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  @process_moz: ~`(function(e){e=e||"all";var r=["background-size","box-shadow","column","transform","filter"],t="-moz-";return r.forEach(function(r){-1!==e.indexOf(r)&&(e=e.replace(new RegExp(r,"g"),function(e){return t+e}))}),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  @process_opera: ~`(function(e){e=e||"all";var r=["transform"],t="-o-";return r.forEach(function(r){-1!==e.indexOf(r)&&(e=e.replace(new RegExp(r,"g"),function(e){return t+e}))}),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  @process: ~`(function(e){e=e||"all";var r=["-webkit-","-moz-","-o-",""],t=["column","transform","filter"],n=e.split(/(?:,)(?![^(]*\))/g);return n.forEach(function(e,a){t.forEach(function(t){-1!==e.indexOf(t)&&(n[a]="",r.forEach(function(c,u){n[a]+=e.trim().replace(new RegExp(t,"g"),function(e){return c+e}),u<r.length-1&&(n[a]+=",")}))})}),e=n.join(",")})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transition-property: @process_webkit;
+  -moz-transition-property: @process_moz;
+  -o-transition-property: @process_opera;
+  transition-property: @process;
+}
+
+.lh-transition-timing-function(...) {
+  @process: ~`(function(e){return e=e||"ease"})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transition-timing-function: @process;
+  -moz-transition-timing-function: @process;
+  -o-transition-timing-function: @process;
+  transition-timing-function: @process;
+}
+
+.lh-translate(...) {
+  @process: ~`(function(e){e=e||"0";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(e)&&(e=e.replace(t,function(e){return 0==e&&e||e+"px"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: translate(@process);
+  -moz-transform: translate(@process);
+  -o-transform: translate(@process);
+  -ms-transform: translate(@process);
+  transform: translate(@process);
+}
+
+.lh-translate3d(...) {
+  @process: ~`(function(e){e=e||"0, 0, 0";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(e)&&(e=e.replace(t,function(e){return 0==e&&e||e+"px"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: translate3d(@process);
+  -moz-transform: translate3d(@process);
+  -o-transform: translate3d(@process);
+  -ms-transform: translate3d(@process);
+  transform: translate3d(@process);
+}
+
+.lh-translateX(...) {
+  @process: ~`(function(e){e=e||"0";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(e)&&(e=e.replace(t,function(e){return 0==e&&e||e+"px"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: translateX(@process);
+  -moz-transform: translateX(@process);
+  -o-transform: translateX(@process);
+  -ms-transform: translateX(@process);
+  transform: translateX(@process);
+}
+
+.lh-translateY(...) {
+  @process: ~`(function(e){e=e||"0";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(e)&&(e=e.replace(t,function(e){return 0==e&&e||e+"px"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: translateY(@process);
+  -moz-transform: translateY(@process);
+  -o-transform: translateY(@process);
+  -ms-transform: translateY(@process);
+  transform: translateY(@process);
+}
+
+.lh-translateZ(...) {
+  @process: ~`(function(e){e=e||"0";var r=/\d/gi,t=/(?:\s|^)(\.?\d+\.?\d*)(?![^(]*\)|\w|%|\.)/gi;return r.test(e)&&(e=e.replace(t,function(e){return 0==e&&e||e+"px"})),e})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-transform: translateZ(@process);
+  -moz-transform: translateZ(@process);
+  -o-transform: translateZ(@process);
+  -ms-transform: translateZ(@process);
+  transform: translateZ(@process);
+}
+
+.lh-user-select(...) {
+  @process: ~`(function(e){return e=e||"auto"})((function(){var e="@{arguments}";return e=e.replace(/^\[|\]$/g,"")})())`;
+  -webkit-user-select: @process;
+  -moz-user-select: @process;
+  -ms-user-select: @process;
+  user-select: @process;
+}
+
+
diff --git a/app/soc/models/universities.py b/app/soc/models/universities.py
index f57c2d4..6e37845 100644
--- a/app/soc/models/universities.py
+++ b/app/soc/models/universities.py
@@ -14,6 +14,2159 @@
 
 """Set of known countries and corresponding universities"""
 
+# Update this file by using scripts/tsv2universities.py.
+# Source spreadsheet is "GSoC Schools with country, URL as available"
 
 UNIVERSITIES = {
-}
+ 'Algeria': ["Ecole nationale Superieure d'Informatique (National Higher School of Computer Science )",
+             'University Mentouri of Constantine'],
+ 'Argentina': ['Centro Universitario de Idiomas // UTN FRBA',
+               'Escuela Da Vinci',
+               'National University of Rosario',
+               'Universidad Abierta Interamericana',
+               'Universidad CAECE',
+               'Universidad de Buenos Aires',
+               'Universidad de Mendoza',
+               'Universidad De Palermo',
+               'Universidad Nacional de Cordoba',
+               'Universidad Nacional de La Plata',
+               'Universidad Nacional De Mar Del Plata',
+               'Universidad Nacional de Quilmes',
+               'Universidad Nacional de Rio Cuarto',
+               'Universidad Nacional de Salta',
+               'Universidad Nacional Del Centro De La Provincia De Buenos Aires',
+               'Universidad Nacional del Sur',
+               'Universidad Tecnologica Nacional',
+               'University CAECE, Mar del Plata'],
+ 'Armenia': ['Institute of Molecular Biology of the National Academy of Sciences of the Republic of Armenia',
+             'State Engineering Univerity of Armenia (SEUA)',
+             'Yerevan State University'],
+ 'Australia': ['Australian National University',
+               'CQ University Australia',
+               'Curtin University of Technology',
+               'Edith Cowan University (Mt Lawley)',
+               'Gordon Institute of TAFE, Geelong',
+               'Griffith University',
+               'Grinnell College',
+               'Macquarie University',
+               'Monash University',
+               'Murdoch University',
+               'Queensland University of Technology',
+               'Royal Melbourne Institute of Technology University',
+               'Southern Cross University',
+               'Swinburne University of Technology',
+               'University of Adelaide',
+               'University of Ballarat',
+               'University of Melbourne',
+               'University of New South Wales, Australia',
+               'University Of Queensland',
+               'University of Southern Queensland',
+               'University of Sydney',
+               'University of Tasmania',
+               'University of Technology Sydney',
+               'University of Western Australia',
+               'University of Wollongong'],
+ 'Austria': ['FH Campus Wien - ITTK',
+             'FH Hagenberg',
+             'FH St. Polten',
+             'Graz University of Technology /Erzherzog Johann University/ Technische Universit\xc3\xa4t Graz',
+             'HTL Pinkafeld',
+             'HTL-Wels',
+             'HTL-Wolfsberg',
+             'Johannes Kepler University Linz',
+             'Medical University of Vienna / MedUni Wien',
+             'Perg Vocational High School for IT and Business Organisation',
+             'Technische Universit\xc3\xa4t Wien, TU Wien, Vienna University of Technology',
+             'University of Applied Arts Vienna / Universit\xc3\xa4t f\xc3\xbcr angewandte Kunst Wien',
+             'University of Applied Science Salzburg',
+             'University of Applied Sciences Technikum Wien',
+             'University of Applied Sciences Wiener Neustadt / Fachhochschule Wiener Neustadt',
+             'University of Graz, Austria / Karl-Franzens-Universit\xc3\xa4t Graz',
+             'University of Innsbruck',
+             'University of Krems, Austria / IMC University of Applied Sciences Krems / FH Krems',
+             'University of Salzburg',
+             'University of Vienna',
+             'Vienna University of Economics',
+             'Vocational High School for IT and Business Organisation Perg',
+             'Vorarlberg University of Applied Sciences'],
+ 'Azerbaidjan': ['Azerbaijan State Oil Academy'],
+ 'Bangladesh': ['American International University - Bangladesh',
+                'Bangladesh University of Engineering and Technology',
+                'Bangladesh University of Science and Technology',
+                'Dhaka University (DU)',
+                'International Islamic University Chittagong',
+                'University of Dhaka'],
+ 'Belarus': ['Belarusian State University',
+             'Belarusian State University of Informatics and Radioelectronics',
+             'Belarussian State Technological University',
+             'European Humanities University',
+             'Grodno State University',
+             'Minsk State Automotive College',
+             'Polotsk State University',
+             'United Institute of Informatics Problems of the National Academy of Sciences of Belarus'],
+ 'Belgium': ['BIRM',
+             'ECAM - Ing\xc3\xa9nieur industriel',
+             'Emile Bockstael Atheneum',
+             'Haute Ecole Rennequin Sualem',
+             'HAUTE ECOLE ROBERT SCHUMAN',
+             'Higher Education Institution of the Province of Li\xc3\xa8ge',
+             'Hogeschool Antwerpen',
+             'Hogeschool Gent',
+             'Hogeschool West Vlaanderen / University College of West Flanders',
+             'Informatic High Scool (networks class)',
+             "Institut d'Enseignement de Promotion Sociale de la Communaut\xc3\xa9 Fran\xc3\xa7aise - Uccle / Institute of Education for Social Promotion of the French Community of Uccle (Ukkel-IEPSCF)",
+             'Katholieke Universiteit Leuven / Catholic University of Leuven / University of Leuven (KU Leuven)',
+             'Koninklijk Atheneum Sint-Niklaas',
+             'Limburgs Universitair Centrum (soon renamed to Universiteit Hasselt)',
+             'PROVINCIAL INSTITUTE OF EDUCATION OF SOCIAL ADVANCEMENT OF VERVIERS',
+             'Stedelijke Handelsschool Turnhout',
+             'Technical University Kortrijk',
+             'Universit\xc3\xa9 catholique de Louvain / Catholic University of Louvain',
+             'Universit\xc3\xa9 de Li\xc3\xa8ge',
+             'Universit\xc3\xa9 Libre de Bruxelles',
+             'Universiteit Antwerpen /University of Antwerp',
+             'University de Mons-Hainaut',
+             'University of Ghent',
+             'University of Leuven',
+             'Vrije Universiteit Brussel'],
+ 'Bosnia': ['University of Sarajevo /Univerzitet u Sarajevu'],
+ 'Bosnia-Herzegovina': ['International University of Sarajevo'],
+ 'Brazil': ['Alternative Language Learning',
+            'Britanic Language School',
+            'Catholic University Of Brasilia',
+            'Centro Universidade Nove de Julho',
+            'Centro Universidade Senac, Sao Paulo',
+            'CEUT - Centro de Ensino Unificado de Teresina',
+            'Faculdade Cotemig',
+            'Faculdade de Tecnologia de Sao Paulo',
+            'Faculdade de Tecnologia SENAC RS - Porto Alegre / National Service of Commercial Learning - SENAC',
+            'Faculdade do Centro Leste /East Central College (UCL)',
+            'Faculdade Integrada de Recife - Est\xc3\xa1cio/FIR',
+            'Faculdade Lemos de Castro',
+            'Faculdades Integradas de Taquara - FACCAT',
+            'Federal Center for Technological Education of Minas Gerais',
+            'Federal University Foundation Of Pelotas',
+            'Federal University of Alagoas',
+            'Federal University Of Campina Grande / Universidade Federal de Campina Grande',
+            'Federal University of Para\xc3\xadba',
+            'Federal University of Parana - UFPR / Universidade Federal do Paran\xc3\xa1',
+            'Federal University of Santa Catarina',
+            'Fluminense Federal Institute',
+            'IESCAMP',
+            'Instituto Federal de Educa\xc3\xa7\xc3\xa3o, Ci\xc3\xaancia e Tecnologia da Para\xc3\xadba',
+            'Instituto pela Democraticacao da Educacao no Brasil (Politeia)',
+            'Instituto Tecnologico de Aeronautica / Aeronautical Technology Institute',
+            'La Salle University Centre of Rio de Janeiro',
+            'Pontif\xc3\xadcia Universidade Cat\xc3\xb3lica do Paran\xc3\xa1',
+            'Pontif\xc3\xadcia Universidade Cat\xc3\xb3lica do Rio de Janeiro',
+            'Salgado de Oliveira University',
+            'State University of Maringa / Universidade Estadual De Maringa',
+            'State University of Rio de Janeiro - IPRJ/UERJ / Polytechnic Institute of Rio de Janeiro - UERJ',
+            'UFF - Fluminense State University',
+            'UNIC - Universidade de Cuiaba',
+            'UNICE - Ensino Superior',
+            'UniCEUMA (Universitary Center of Maranh\xc3\xa3o)',
+            'Uniritter Laureate International Universities',
+            'Unirondon Centro Universit\xc3\xa1rio',
+            'UniverCidade',
+            'Universidade Anhembi Morumbi',
+            'Universidade Candido Mendes',
+            'Universidade Catolica De Goias',
+            'Universidade Catolica De Pernambuco',
+            'Universidade de Bras\xc3\xadlia',
+            'Universidade de Caxias do Sul',
+            'Universidade do Estado do Amazonas',
+            'Universidade do Extemo Sul Catarinense',
+            'Universidade Estadual de Goi\xc3\xa1s / State University of Goias',
+            'Universidade Estadual do Oeste do Parana',
+            'Universidade Estadual do Sudoeste da Bahia',
+            'Universidade Estadual Paulista Julio de Mesquita Filho',
+            'Universidade Federal da Bahia',
+            'Universidade Federal da Paraiba / Federal University Of Paraiba',
+            'Universidade Federal de Ci\xc3\xaancias da Sa\xc3\xbade de Porto Alegre / University of Health Sciences of Porto Alegre',
+            'Universidade Federal de Goias',
+            'Universidade Federal de Mato Grasso (UFMT)',
+            'Universidade Federal de Minas Gerais',
+            'Universidade Federal de Pernambuco / Federal University Of Pernambuco',
+            'Universidade Federal de Santa Catarina',
+            'Universidade Federal de Sao Carlos',
+            'Universidade Federal do Cear\xc3\xa1',
+            'Universidade Federal do Esp\xc3\xadrito Santo / Federal University of Espirito Santo / Federal University Of The Holy Spirit',
+            'Universidade Federal do Estado do Rio de Janeiro',
+            'Universidade Federal do Pampa - UNIPAMPA',
+            'Universidade Federal do Rio de Janeiro',
+            'Universidade Federal do Rio Grande do Norte',
+            'Universidade Federal do Rio Grande do Sul / Federal University Of South Rio Grande',
+            'Universidade Federal Rural de Pernambuco',
+            'Universidade Nove de Julho',
+            'Universidade Sao Judas Tadeu',
+            'Universidade Tecnol\xc3\xb3gica Federal do Paran\xc3\xa1 (UTFPR) / Federal Technological University of Parana',
+            'Universidade Tuiuti do Parana',
+            'University of Campinas - UNICAMP / State University Of Campinas / Universidade Estadual de Campinas',
+            'University of Sao Paulo (USP)',
+            'University of Sao Paulo at Sao Carlos',
+            'University of the West of Santa Catarina UNOESC',
+            'Wizard Idiomas'],
+ 'Bulgaria': ['American University in Bulgaria',
+              'Sofia University St. Kliment Ohridski',
+              'Technical University Sofia',
+              'University of Forestry',
+              'University of Karlsruhe',
+              'University of National and World Economy',
+              'University of Plovdiv "Paisii Hilendarski"',
+              'Varna Free University "Chernorizets Hrabar"'],
+ 'Cambodia, Kingdom of': ['IIC University of Technology'],
+ 'Cameroon': ['University of Buea'],
+ 'Canada': ['Algonquin College',
+            'Athabasca University',
+            "Bishop's University",
+            'British Columbia Institute of Technology',
+            'Brock University',
+            'Carleton University',
+            'Cegep Champlain-St.Lawrence',
+            'CEGEP de Sept-Iles',
+            'CEGEP de Sherbrooke',
+            'Cegep de Ste-Foy',
+            'CEGEP du Vieux Montreal',
+            'Concordia University',
+            'Concordia University College of Alberta',
+            'Conestoga College',
+            'Dalhousie University',
+            '\xc3\x89cole de technologie Sup\xc3\xa9rieure',
+            'Ecole Polytechnique de Montreal',
+            'Henry Wise Wood High School',
+            'Heritage College',
+            'John Abbott College',
+            'Lakehead University',
+            'Laurentian University',
+            'Laval University',
+            'Macewan University',
+            'McGill University',
+            'McMaster University',
+            'Memorial University of Newfoundland',
+            'Mohawk College',
+            'Mount Royal College',
+            'Niagara College',
+            'Nova Scotia Community College',
+            'Okanagan College',
+            'Ontario College Of Art & Design / OCAD University',
+            "Queen's University",
+            'Riverview High School',
+            'Ryerson University',
+            "Saint Mary's University",
+            'Saskatchewan Institute of Applied Science and Technology',
+            'Seneca College',
+            'Sheridan College',
+            'Simon Fraser University',
+            'Southern Adventist University',
+            'SUPINFO',
+            'The Centre for Digital Media',
+            'Universit\xc3\xa9 du Qu\xc3\xa9bec \xc3\xa0 Chicoutimi',
+            'Universit\xc3\xa9 du Qu\xc3\xa9bec \xc3\xa0 Montr\xc3\xa9al (UQAM)',
+            'Universite du Quebec, ETS',
+            'University College of the Fraser Valley',
+            'University du Quebec a Trois-Rivieres',
+            'University Laval',
+            'University of Alberta',
+            'University of British Columbia',
+            'University of British Columbia Okanagan',
+            'University of British Columbia, Vancouver',
+            'University of Calgary',
+            'University of Guelph',
+            'University of Manitoba',
+            'University of Montreal',
+            'University of New Brunswick',
+            'University of Northern British Columbia',
+            'University of Ontario Institute of Technology',
+            'University of Ottawa',
+            'University of Regina',
+            'University of Saskatchewan',
+            'University of Toronto',
+            'University of Toronto, Scarborough',
+            'University of Toronto, St. George',
+            'University of Victoria',
+            'University Of Waterloo',
+            'University of Western Ontario',
+            'University of Windsor',
+            'York University'],
+ 'Chile': ['Inacap',
+           'Pontificia Universidad Cat\xc3\xb3lica de Chile',
+           'Talca University',
+           'Universidad de Concepcion/University of Concepci\xc3\xb3n',
+           'Universidad de Playa Ancha',
+           'Universidad de Santiago de Chile',
+           'Universidad T\xc3\xa9cnica Federico Santa Mar\xc3\xada',
+           'University of Chile / Universidad de Chile',
+           'Wall Street Institute'],
+ 'China': ['Beihang University (formerly Beijing Institute of Aeronautics and Astronautics or BUAA)',
+           'Beijing Foreign Studies University',
+           'Beijing Jiaotong University',
+           'Beijing Language and Culture University',
+           'Beijing Normal University',
+           'Beijing Normal University Zhuhai Campus',
+           'Beijing Union University',
+           'Beijing University of Chemical Technology',
+           'Beijing University of Posts and Telecommunications',
+           'Beijing Youth Politics College',
+           'Bejing (Peking) University',
+           'Capital Normal University',
+           'Central South University',
+           'Changchun University of Science and Technology',
+           'ChangChun University, School of Science.',
+           'Chengdu Neusoft University',
+           'China Agricultural University',
+           'China JiLiang University',
+           'Chinese Academy of Sciences',
+           'Chongqing University of Posts and Telecommunications',
+           'Dalian University Of Technology',
+           'Defence Industry Staff College',
+           'East China Normal University',
+           'Fudan University',
+           'Graduate University of Chinese Academy of Sciences',
+           'Guangdong University of Technology',
+           'Guilin University of Electronic Technology',
+           'Hangzhou Dianzi University',
+           'Harbin Institute of Technology',
+           'Hebei University of Engineering',
+           'Huazhong University of Science and Technology',
+           'Institute of Computing Technology (ICT), Chinese Academy of Sciences (CAS)',
+           'Institute of Software, Chinese Academy Of Sciences',
+           'Jiangxi Agricultural University',
+           'Jilin University',
+           'Kunming University of Science and Technology',
+           'Nanjing University',
+           'Nanjing University of Posts and Telecommunications',
+           'NanKai University',
+           'North China Institute of Aerospace Engineering',
+           'North China University of Technology',
+           'Peking University Shenzhen Graduate School',
+           'Renmin University of China',
+           'Shanghai Jiao Tong University',
+           'Shanghai University',
+           'Shenzhen Institutes of Advanced Technology, Chinese Academy of Sciences',
+           'SiChuan University',
+           'Soochow University',
+           'South China University of Technology',
+           'SouthEast University',
+           'Southwest Jiaotong University',
+           'Southwestern Uniwersity of Finance and Economics',
+           'Sun Yat-sen University',
+           'Tianjin Electronic Information College',
+           'Tongji University',
+           'Tsinghua University',
+           'University of Chinese Academy of Sciences',
+           'University of Electronic science and technology of China',
+           'University of International Business and Economics',
+           'University of Science and Technology Beijing',
+           'University of Science and Technology of China',
+           'Wuhan University',
+           "Xi'an Jiaotong University",
+           "Xi'An University of Posts and Telecommunications",
+           'Xiamen University',
+           'Zhejiang University',
+           'Zunyi Medical College (ZMC)'],
+ 'Colombia': ['EAFIT University',
+              'Pontificia Universidad Javeriana, Bogata',
+              'Pontificia Universidad Javeriana, Cali',
+              'Servicio Nacional de Aprendizaje SENA, Instituto Tecnologico Metropolitano',
+              'Unidades Tecnol\xc3\xb3gicas de Santander',
+              'Universidad de Antioquia',
+              'Universidad del Cauca',
+              'Universidad EAFIT',
+              'Universidad Industrial de Santander',
+              'Universidad Manuela Beltran',
+              'Universidad Nacional de Colombia / National University of Colombia'],
+ 'Comoros': ['Universidad Pontificia Bolivariana'],
+ 'Costa Rica': ['Universidad de Costa Rica'],
+ 'Croatia': ['Polytechnic of Zagreb',
+             'University Of Josip Juraj Strossmayer',
+             'University of Osijek',
+             'University of Zagreb',
+             'University of Zagreb, Varazdin'],
+ 'Cyprus': ['Cyprus University of Technology', 'University of Cyprus'],
+ 'Czech Republic': ['Brno University of Technology /FIT VUT Brno',
+                    'Charles University in Prague /Univerzita Karlova v Praze',
+                    'Czech Technical University in Prague',
+                    'Gymna\xc2\xa1zium Chrisitana Dopplera',
+                    'Masaryk University',
+                    'Palacky University',
+                    'Technical University of Liberec',
+                    'University of Economics, Prague',
+                    'University of West Bohemia in Pilsen',
+                    'VSB Technical University Of Ostrava'],
+ 'Denmark': ['Aalborg University',
+             'Aarhus Business College',
+             'Aarhus University',
+             'HTX Thisted, EUC Nordvest',
+             'IT University of Copenhagen',
+             'Politechnika Slaska',
+             'Technical University of Denmark (DTU)',
+             'University of Copenhagen'],
+ 'Dominican Republic': ['Instituto Tecnol\xc3\xb3gico de Santo Domingo (INTEC)',
+                        'Mother and Teacher Pontifical Catholic University'],
+ 'Ecuador': ['Escuela Superior Politecnica del Litoral, ESPOL',
+             'San Francisco de Quito University',
+             'Technical University of Loja'],
+ 'Egypt': ['Ain Shams University',
+           'Al-Azhar University',
+           'Alexandria University',
+           'American University in Cairo',
+           'Arab Academy for Science, Technology, and Maritime Transport',
+           'Cairo University',
+           'El Shorouk Academy',
+           'German University in Cairo',
+           'Mansoura University',
+           'Minufiya University, Faculty of Computers and Information',
+           'Nile University',
+           'October University For Modern Sciences And Arts',
+           'Sohag University'],
+ 'Estonia': ['Estonian IT College',
+             'Tallinn University of Technology',
+             'University of Tartu'],
+ 'Ethiopia': ['HiLCoE School of computer science and Technology'],
+ 'Finland': ['Aalto University',
+             'Central Ostrobothnian University of Applied Sciences',
+             'EVTEK Institute of Technology',
+             'Haaga-Helia University of Applied Sciences',
+             'Helsinki University of Technology',
+             'Jyv\xc3\xa4skyl\xc3\xa4 University of Applied Sciences (JAMK)',
+             'Sibelius Academy',
+             'Tampere University of Technology',
+             'Turku University of Applied Sciences',
+             'University of Applied Sciences Vaasa / Vaasan ammattikorkeakoulu (VAMK)',
+             'University of Eastern Finland',
+             'University of Helsinki',
+             'University Of Jyvaskyla / Jyv\xc3\xa4skyl\xc3\xa4n yliopisto',
+             'University of Oulu',
+             'University of Tampere',
+             'University of Turku'],
+ 'France': ['IUT Belfort-Montb\xc3\xa9liard (Belfort-Montb\xc3\xa9liard University Institute of Technology) /University Of Besancon',
+            'Compiegne University of Technology',
+            'Conservatoire National des Arts et Metiers',
+            'CPE Lyon and my last year at EPFL',
+            'Cryptis',
+            'Ecole Centrale de Lille',
+            'Ecole Centrale Paris',
+            "Ecole d'ing\xc3\xa9nieurs Polytechnique de l'Universit\xc3\xa9 de Tours",
+            'Ecole des Mines de Douai',
+            'Ecole des Mines de St Etienne',
+            "Ecole Nationale d'Ing\xc3\xa9nieurs de Tarbes (ENIT)",
+            'ECOLE NATIONALE DES SCIENCES APLLIQUEES AGADIR',
+            'Ecole Nationale Sup\xc3\xa9rieure des T\xc3\xa9l\xc3\xa9communications',
+            'Ecole Normale Superieure (ENS)',
+            'Ecole Normale Superieure de Lyon',
+            'Ecole Polytechnique',
+            "Ecole Pour l'Informatique et les Techniques Avanc\xc3\xa9es",
+            "EISTI (Ecole Internationale des Sciences du Traitement de l'Information)",
+            'ENS Lyon',
+            'ENSEEIHT',
+            'ENSEIRB: Ecole Nationale Sup\xc3\xa9rieure d\xe2\x80\x99Electronique, Informatique et Radiocommunications de Bordeaux',
+            "ENSIB : Ecole Nationale Sup\xc3\xa9rieure d'Ing\xc3\xa9nieur de Bourges",
+            "ENSIMAG / \xc3\x89cole Nationale Sup\xc3\xa9rieure d'Informatique et de Math\xc3\xa9matiques Appliqu\xc3\xa9es de Grenoble / Grenoble Institute of Technology - Ensimag (Superior National School of Applied Mathematics and Computer Science)",
+            "ENSISA /Ecole Nationale Sup\xc3\xa9rieure d'Ing\xc3\xa9nieurs Sud Alsace / National south alsace school of engineering /",
+            'ENSSAT (National Superior School of Applied Sciences and Technology - Ecole Nationale Sup\xc3\xa9rieure des Sciences Appliqu\xc3\xa9es et de Technologie)',
+            'ENST Paris',
+            "EPITA - Ecole d'ing\xc3\xa9nieurs en informatique",
+            'EPITECH - European Institute of Information Technology',
+            'EPSI Lyon',
+            "ESIEE (previously named \xc3\x89cole Sup\xc3\xa9rieure d'Ing\xc3\xa9nieurs en \xc3\x89lectronique et \xc3\x89lectrotechnique)",
+            'ESSAIM / Haute Alsace University (Universit\xc3\xa9 de Haute-Alsace or UHA)',
+            "Etablissement Public Local d'Enseignement et de Formation Professionnelle Agricultural college LEGTA of Loz\xc3\xa8re site Louis Pasteur Canourgue",
+            'INGESUP/ Ecole Sup\xc3\xa9rieure de formation sur les nouvelles technologies et informatique',
+            'INRIA /french national institute for research in computer science and control',
+            'INSA-Lyon / Institut National des Sciences Appliqu\xc3\xa9es de Lyon',
+            'INSA-Rennes',
+            'INSA-Toulouse',
+            "Institut d'Optique - Palaiseau",
+            'Institut national des t\xc3\xa9l\xc3\xa9communications',
+            'Institut National Polytechnique de Toulouse (INPT) / National Polytechnic Institute of Toulouse / INP Toulouse / INPT',
+            'Institut Sup\xe2\x88\x9a\xc2\xa9rieur des Techniques Avanc\xe2\x88\x9a\xc2\xa9es de Saint Etienne',
+            'Institut Universitaire de Technologie at Lens',
+            'Institute of Technology Lannion - University of Rennes 1',
+            "IUT de clermont ferrand, universite d'auvergne",
+            'IUT de Montpellier',
+            'IUT orsay',
+            'IUT Robert Schuman',
+            'Joseph Fourier University - Grenoble',
+            'Le Havre University',
+            'Lycee Camille Jullian',
+            'Lyc\xc3\xa9e C\xc3\xa9sar Baggio',
+            'Lycee Jess\xc3\xa9 de Forest',
+            'Lycee liberget',
+            'Lycee Louis Thuillier',
+            'Lycee MASSENA',
+            'Pierre Mend\xc3\xa8s France',
+            'Poitiers University',
+            "Polytech' Grenoble",
+            "Polytech' Montpellier",
+            'Provence University',
+            'Sciences Po',
+            'Sup\xc3\xa9lec',
+            'SUPINFO ESI / SUPINFO International University',
+            'Tampere University of Technology',
+            'Telecom Bretagne',
+            'Telecom Lille 1',
+            'T\xc3\xa9l\xc3\xa9com SudParis',
+            'Toulouse School of Economics (Universit\xc3\xa9 Toulouse 1 Capitole)',
+            'Universit\xc3\xa9 Bordeaux 1',
+            "Universite Catholique de l'Ouest Bretagne Nord",
+            'Universite Claude Bernard Lyon1',
+            "Universite D'Evry-Val D'Essonne",
+            'Universite de Nice Sophia - Antipolis',
+            'Universit\xc3\xa9 de Rennes 1',
+            'Universit\xc3\xa9 de Strasbourg',
+            'Universit\xc3\xa9 de Technologie de Belfort-Montb\xc3\xa9liard / UTBM / University of Technology of Belfort Monb\xc3\xa9liard',
+            'Universite de Technologie de Troyes',
+            'Universite De Toulon Et Du Var',
+            'Universit\xc3\xa9 Fran\xc3\xa7ois-Rabelais de Tours',
+            'Universit\xc3\xa9 Henri Poincar\xc3\xa9 / Henri Poincar\xc3\xa9 University (UHP) / Nancy 1) Includes 3 Engineering schools: ESSTIN, ENSTIB and ESIAL.',
+            'Universit\xc3\xa9 Lille 1 / University des Sciences et Technologies de Lille',
+            'Universite Louis Pasteur, Strasbourg',
+            'Universit\xc3\xa9 Montesquieu - Bordeaux IV',
+            'Universit\xc3\xa9 Montpellier 2 / University Of Montpellier 2',
+            'Universite Paris Diderot',
+            'Universite Paris V Renee Descartes',
+            'Universite Paris-Sud 11',
+            'Universite Paul Sabatier III / UNIVERSITY OF TOULOUSE 3 - PAUL SABATIER',
+            'Universite Pierre et Marie Curie - Paris 6 (UPMC)',
+            'Universite Toulouse le Mirail / Universit\xc3\xa9 de Toulouse II - Le Mirail',
+            'University de Technologie de Compiegne',
+            'University Nice Sophia Antipolis',
+            'University of Bethune',
+            'University of Bordeaux',
+            'University of Burgundy',
+            'University of Caen',
+            'University of Franche-Comte',
+            'University of Limoges',
+            'University of Nantes',
+            'University of Savoie',
+            'University of Toulouse',
+            'University Paris-Est Marne-la-Vallee (UPEM)',
+            'University Pierre Mendes France at Grenoble',
+            'UPVD University of Perpignan',
+            'Versailles Saint-Quentin-en-Yvelines University / University of Versailles Saint Quentin'],
+ 'Georgia': ['Caucasus University', 'Georgian Technical University'],
+ 'Germany': ['Aachen University of Applied Sciences (FH)',
+             'Albert-Ludwigs-Universitat Freiburg',
+             'Altes Gymnasium Oldenburg (Old Academic High School Oldenburg)',
+             'Anne- Frank Gymnasium Halver',
+             'ASW Berufsakademie Saarland',
+             'Baden-Wuerttemberg Cooperative State University',
+             'Bauhaus University Weimart',
+             'BAW Hameln',
+             'Bergstadt Gymnasium L\xc3\xbcdenscheid',
+             'Berufs Bildung Zentrum Dithmarschen',
+             'Brandenburg University of Technology / Technical University of Cottbus or TU Cottbus',
+             'Bremerhaven University of Applied Sciences',
+             'Bundeswehr University Munich',
+             'Carl von Ossietzky University Oldenburg',
+             'Christian-Albrechts-Universit\xc3\xa4t zu Kiel',
+             'Cologne University Bioinformatics Center (CUBIC)',
+             'Cologne University of Music (official: Hochschule f\xc3\xbcr Musik und Tanz K\xc3\xb6ln)',
+             'Distance University of Hagen',
+             'Eberhard Karls University Tuebingen',
+             'Einhard Gymnasium Aachen',
+             'Einstein-Gymnasium Potsdam',
+             'Fachhochschule Brandenburg / Brandenburg University of Applied Sciences',
+             'Fachhochschule Dortmund',
+             'Fachhochschule Dortmund / Dortmund University of Applied Sciences and Arts',
+             'Fachhochschule Kaiserslautern - University of Applied Sciences',
+             'Fachhochschule S\xc3\xbcdwestfalen Iserlohn',
+             'Fachhochschule Trier, University of Applied Sciences (FH)',
+             'FernUniversitaet in Hagen / University of Hagen',
+             'FH D\xc3\xbcsseldorf',
+             'Flensburg University of Applied Sciences',
+             'Freie Universitaet Berlin / Free University Of Berlin /FU Berlin',
+             'Friedrich-Alexander University',
+             'Friedrich-Alexander-University of Erlangen-Nuremberg',
+             'Friedrich-Schiller-Universitaet Jena',
+             'Furtwangen University of Applied Sciences',
+             'Georg-Simon-Ohm-Fachhochschule Nuernberg / Georg Simon Ohm University at Nuremberg',
+             'Georg-Wilhelm-Steller-Gymnasium',
+             'Goethe-Universit\xc3\xa4t Frankfurt am Main',
+             'Grimmelshausen-Gymnasium Offenburg',
+             'Gymnasium Beilngries',
+             'Gymnasium Philippinum Weilburg',
+             'Gymnasium Vilshofen',
+             'Hamburg University of Applied Sciences',
+             'Hamburg-Harburg University of Technology / Technische Universit\xc3\xa4t Hamburg-Harburg (TUHH)',
+             'Hasso-Plattner-Institut, University Potsdam',
+             'Heidelberg University',
+             'Heilbronn University',
+             'Herderschule in Rendsburg',
+             'Hochschule Bremen / Bremen University of Applied Sciences',
+             'Hochschule Fulda',
+             'Hochschule f\xc3\xbcr Angewandte Wissenschaften Hamburg (HAW Hamburg)',
+             'Hochschule f\xc3\xbcr Angewandte Wissenschaften Harz / University Of Applied Studies And Research, Harz',
+             'Hochschule f\xc3\xbcr Technik und Wirtschaft Berlin (University of applied sciences) (FHTW Berlin)',
+             'Hochschule Fur Technik Und Wirtschaft Dresden (FH)',
+             'Hochschule f\xc3\xbcr Telekommunikation Leipzig',
+             'Hochschule f\xc3\xbcr Wirtschaft und Recht Berlin /Berlin School of Economics and Law',
+             'Hochschule Furtwangen University',
+             'HOCHSCHULE OSNABR\xc3\x9cCK / University of Applied Sciences Osnabrueck',
+             'Humboldt University Berlin',
+             'Ilmenau University of Technology',
+             'ILS Institut f\xc3\xbcr Lernsysteme GmbH',
+             'International University Bremen',
+             'jacobs University Bremen',
+             'Johannes Gutenberg University Mainz',
+             'Julius-Maximilians-Universitaet Wuerzburg',
+             'Justus-Liebig-University Giessen',
+             'Kaufm\xc3\xa4nnisches Berufsbildungszentrum Dillingen',
+             'KIT - Karlsruhe Institute of Technology / Universit\xc3\xa4t Karlsruhe (TH)',
+             'Leibniz Universit\xc3\xa4t Hannover/ Leibniz University Hannover',
+             'Ludwig-Maximilians-University Muenchen /Ludwig-Maximilians-Universit\xc3\xa4t Munich',
+             'Martin Luther University Halle-Wittenberg',
+             'Max Planck Institute for Astronomy',
+             'Max Planck Institute of Biochemistry',
+             'Maximilian Kolbe Gymnasium Wegberg',
+             'Otto-von-Guericke University Magdeburg',
+             'Philipps-Universit\xc3\xa4t Marburg',
+             'Ruhr Universit\xc3\xa4t Bochum',
+             'Ruprecht-Karls University Heidelberg',
+             'RWTH Aachen University',
+             'South Westphalia University Of Applied Sciences',
+             'SZ Lange Reihe (Abitur)',
+             'Technisch-gewerbliches BerufsbildungsZentrum 1 Saarbrucken',
+             'Technische Universit\xc3\xa4t Chemnitz  /Chemnitz University of Technology',
+             'Technische Universit\xc3\xa4t Kaiserslautern',
+             'TU Berlin / Technische Universit\xc3\xa4t Berlin / Technical University Berlin /',
+             'TU Braunschweig',
+             'TU Chemnitz',
+             'TU Darmstadt /Technische Universit\xc3\xa4t Darmstadt / Darmstadt University of Technology',
+             'TU Dresden /Technische Universit\xc3\xa4t Dresden /Dresden University of Technology',
+             'TU Ilmenau',
+             'TU Munich/ Technische Universit\xc3\xa4t M\xc3\xbcnchen (TUM; University of Technology, Munich; Technical University of Munich)',
+             'Universit\xc3\xa4t Bremen / University of Bremen',
+             'Universit\xc3\xa4t Osnabr\xc3\xbcck / Osnabr\xc3\xbcck University',
+             'University of Applied Science Hamburg',
+             'University of Applied Sciences and Arts, Hanover',
+             'University of Applied Sciences Esslingen',
+             'University of applied sciences Nuremberg',
+             'University of Applied Sciences, Aachen',
+             'University of Applied Sciences, Berlin (HTW Berlin)',
+             'University of Applied Sciences, Gelsenkirchen',
+             'University of Applied Sciences, Giessen-Friedberg',
+             'University of Applied Sciences, Karlsruhe',
+             'University of Applied Sciences, Kempten',
+             'University of Applied Sciences, Munich / Munich University of Applied Sciences (MUAS)',
+             'University of Applied Sciences, Offenburg',
+             'University of Applied Sciences, Pforzheim',
+             'University of Applied Sciences, Regensburg',
+             'University of Applied Sciences, Rosenheim',
+             'University of Applied Sciences, Saarbr\xc3\xbccken',
+             'University of Applied Sciences, Trier',
+             'University of Applied Sciences, Wedel / FH Wedel',
+             'University of Applied Sciences, Wiesbaden',
+             'University of Applied Sciences, Wuerzburg-Schweinfurt',
+             'University of Augsburg',
+             'University of Bamberg',
+             'University of Bielefeld',
+             'University of Bochum',
+             'University of Bonn / Rheinische Friedrich-Wilhelms-Universit\xc3\xa4t Bonn',
+             'University of Cologne',
+             'University of Cooperative Education',
+             'University of Cooperative Education Glauchau / Studienakademie Glauchau',
+             'University of Cooperative Education Heidenheim',
+             'University of Cooperative Education Karlsruhe',
+             'University of Cooperative Education Loerrach',
+             'University of Cooperative Education Mannheim',
+             'University of Cooperative Education Stuttgart',
+             'University of Dortmund',
+             'University of Duisburg-Essen',
+             'University of Erlangen-Nuremberg',
+             'University of Frankfurt am Main',
+             'University Of Freiburg',
+             'University of G\xc3\xb6ttingen',
+             'University of G\xc3\xb6ttingen / Georg-August-Universit\xc3\xa4t G\xc3\xb6ttingen',
+             'University of Hamburg',
+             'University Of Heidelberg / Universit\xc3\xa4t Heidelberg',
+             'University of Jena',
+             'University of Kaiserslautern',
+             'University Of Karlsruhe',
+             'University of Kiel',
+             'University of Koblenz-Landau',
+             'University of Leipzig',
+             'University of L\xc3\xbcbeck / Universit\xc3\xa4t zu L\xc3\xbcbeck',
+             'University of Mannheim',
+             'University Of Muenster',
+             'University of Paderborn',
+             'University of Passau',
+             'University of Potsdam',
+             'University of Regensburg',
+             'University of Rostock',
+             'University of Saarlandes',
+             'University of Stuttgart',
+             'University of Stuttgart - Intitute for Space Systems',
+             'University of the Arts, Bremen',
+             'University of Tuebingen',
+             'University of Ulm',
+             'University of W\xc3\xbcrzburg',
+             'Westfalische Wilhelms University Muenster, NRW',
+             'WHU Otto Beisheim School of Management',
+             'Wilhelm-Raabe-Schule L\xc3\xbcneburg'],
+ 'Ghana': ['Ghana Telecom University College', 'University of Cape Coast'],
+ 'Greece': ['Alexander Technological Educational Institute Of Thessaloniki',
+            'Aristotle University of Thessaloniki',
+            'Athens University of Economics and Business',
+            'Democritus University of Thrace',
+            'HAROKOPIO UNIVERSITY OF ATHENS',
+            'Hellenic Open University',
+            'National and Kapodistrian University of Athens',
+            'National Technical University of Athens',
+            'National Technical University of Athens',
+            'T.E.I. of Central Macedonia / Technological Educational Institute of Central Macedonia at Serres',
+            'Technical University of Serres',
+            'Technological Educational Institute of Athens',
+            'Technological Educational Institute of Thessaly - Formerly Technological Educational Institute Larissa',
+            'Technological Institute of Lamia',
+            'University of Crete',
+            'University of Patras',
+            'University Of Pireaeus'],
+ 'Guatemala': ['Universidad de San Carlos de Guatemala'],
+ 'Honduras': ['Universidad Tecnol\xc3\xb3gica Centroamericana'],
+ 'Hong Kong': ['Chinese University of HONG KONG',
+               'City University of Hong Kong',
+               'Hong Kong Polytechnic University',
+               'Hong Kong University of Science and Technology',
+               'Li Po Chun United World College',
+               'University of Hong Kong'],
+ 'Hungary': ['Babits Mihaly Gimnazium',
+             'Budapest Business School',
+             'Budapest University of Technology and Economics / Budapesti Muszaki Es Gazdasagtudomanyi Egyetem',
+             'Central European University',
+             'Eotvos Lorand Tudomanyegyetem / E\xc3\xb6tv\xc3\xb6s Lor\xc3\xa1nd University',
+             'Gabor Denes Foiskola',
+             'Kazinczy Ferenc Gimnazium',
+             'Obuda University',
+             'Pazmany Peter Catholic University',
+             'Politecnico di Torino',
+             'Puskas Tivadar Tavkozlesi Technikum',
+             'Sz\xc3\xa9chenyi Istv\xc3\xa1n University',
+             'Szent Istvan Egyetem',
+             'University of Debrecen',
+             'University of Pannonia',
+             'University of Szeged'],
+ 'Iceland': ['Fjolbrautaskolinn vio Armula (Armuli Secondary Comprehensive School)'],
+ 'India': ['Adichunchanagiri Institute of Technology',
+           'Advanced Institute of Techology and Management',
+           'AMITY School of Engineering and Technology',
+           'Amrita Institute Of Technology & Science,Ettimadai',
+           'Amrita Institute Of Technology & Science,Kollam',
+           'Amrita School Of Engineering, Amritapuri',
+           'Amrita School of Engineering, Bangalore',
+           'Amrita University / Amrita Vishwa Vidyapeetham',
+           'Anna University, Chennai',
+           'Anna University, Guindy',
+           'APS College Of Commerce',
+           'Asia Pacific Institute of Information Technology SD India',
+           'Atal Behari Vajpayee Indian Institute of Information Technology and Management',
+           'ATRI',
+           'Atria Institute Of Technology',
+           'B.M.S. College Of Engineering',
+           'B.M.Srinivasaiah Institute of Technology',
+           'Banasthali University',
+           'Bangalore Institute Of Technology, Bangalore',
+           'Bengal Engineering and Science University, Shibpur',
+           'Bhagwan Parshuram Institute of Technology, New Delhi, India',
+           'Bharathiar University',
+           "Bharati Vidyapeeth's College of Engineering, New Delhi",
+           'Bhoj Reddy Engineering College for Women',
+           'Bhopal School of Social Sciences',
+           'Birla Institute of Technology and Science Pilani, Goa campus / BITS-Pilani - K.K.Birla Goa Campus',
+           'Birla Institute of Technology and Science, Pilani (BITS Pilani)',
+           'Birla Institute of Technology, Mesra',
+           'BITS Pilani, Hyderabad Campus',
+           'Calicut University',
+           'Canara Engineering College',
+           'Chandigarh College of Engeneering and Technology',
+           'Chandigarh Engineering College, Landran',
+           'Charotar University of Science and Technology',
+           'Chaudhary Charan Singh University, Meerut',
+           'Chennai Mathematical Institute',
+           'CMR Institute Of Technology, Bangalore (Visvesvaraya Technological University)',
+           'Cochin University of Science and Technology',
+           'College Of Engineering And Technology, Bhubaneswar',
+           'College of Engineering, Guindy',
+           'College of Engineering, Pune',
+           'College of Engineering, Trikaripur',
+           'College of Engineering, Trivandrum',
+           'College Of Technology, Gobind Ballabh Pant University of Agriculture &amp; Technology',
+           'Cummins College of Engineering for Women',
+           'D.J.Sanghvi College of Engg.',
+           'Dayananda Sagar College Of Engineering, Bangalore',
+           'Dehradun Institute of Technology',
+           'Delhi Technological University (formerly Delhi College of Engineering)',
+           'Dharmsinh Desai University/ PANDYA VIVEK VASUDEVBHAI',
+           'Dhirubhai Ambani Institute of Information and Communication Technology',
+           'Don Bosco Institute of Technology',
+           'Dr. B. C. Roy Engineering College',
+           'Dronacharya College of Engineering',
+           'Echelon Institute of Technology',
+           'Engineering College Bikaner / Government Engineering College Bikaner',
+           'Fr.Conceico Rodrigues Institute of Technology',
+           'G.B. Pant Engineering College',
+           "Galgotia's College of Engineering and Technology",
+           'Galgotias University',
+           'Ganpat University, U.V. Patel College of Engineering',
+           'Gitam College Of Engineering / GITAM University / Gandhi Institute of Technology and Management University',
+           'Gokhale Institute Of Politics & Economics',
+           'Gold Field Institute of Technology and Management, Faridabad',
+           'Government Engineering College, Sreekrishnapuram, Palakkad, Kerala',
+           'Government Engineering College, Thrissur',
+           'Government Polytechnic Ahmedabad (Affiliation: Gujarat Technological University)',
+           'Govt. Higher Secondary School Bijolia, Bhilwara',
+           'Guru Gobind Singh Indraprastha University (GGSIPU Dwarka)',
+           'Guru Nanak Dev Engineering College, Ludhiana',
+           'Guru Prem Sukh Memorial College Of Eng',
+           'Harcourt Butler Technological Institute, Kanpur',
+           'Heritage University of Technology, Kolkata',
+           'Hi Tech Enggineering College',
+           'HMRITM, IP University',
+           'India Institute of Science(IISc), Bangalore',
+           'Indian Institute of Information Technology Allahabad(Amethi Campus)',
+           'Indian Institute of Information Technology, Design and Manufacturing , Jabalpur',
+           'Indian Institute of Management, Bangalore',
+           'Indian Institute of Science',
+           'Indian Institute of Technology',
+           'Indian Institute of Technology (BHU) Varanasi',
+           'Indian Institute of Technology Jodhpur',
+           'Indian Institute of Technology, Bombay',
+           'Indian Institute of Technology, Delhi',
+           'Indian Institute of Technology, Guwahati',
+           'Indian Institute of Technology, Kanpur',
+           'Indian Institute of Technology, Kharagpur',
+           'Indian Institute of Technology, Madras',
+           'Indian Institute of Technology, Mandi',
+           'Indian Institute of Technology, Patna',
+           'Indian Institute of Technology, Roorkee',
+           'Indian Institute of Technology, Ropar',
+           'Indian Statistical Institute',
+           'Indira Gandhi Institute of technology, Kashmere Gate, Delhi',
+           'Indraprashta Institute of Information Technology',
+           'Indraprastha University, Delhi',
+           'Indria Gandhi National Open University',
+           'Institute of Engineering and Rural Technology, Allahabad',
+           'Institute of Technical Education and Research',
+           'Institute Of Technology and Management, Gurgaon',
+           'Institute of Technology, Banaras Hindu University (IT-BHU)',
+           'International Institute of Information Technology - Allahabad',
+           'International Institute of Information Technology - Hyderabad',
+           'International Institute of Information Technology, Bhubaneswar',
+           'J S S Public School',
+           'Jabalpur Engineering College',
+           'Jadavpur University',
+           'Jamia Millia Islamia',
+           'Jawaharlal Nehru Technological University',
+           'Jaya Engineering College',
+           'Jaypee Institute of Information Technology',
+           'Jaypee University Of Engineering and Technology',
+           'Jeppiaar Engineering College (Anna University)',
+           'JNTU college of engineering Hyderabad',
+           'JNTU College Of Engineering, Pulivendula',
+           'JSS Academy Of Technology Education Nodia',
+           'Kalinga Institute of Industrial Technology',
+           'Karnataka State Open University',
+           'KARUNYA UNIVERSITY',
+           'KCG College of Technology',
+           'Keshav Memorial Institute Of Technology',
+           'Kurukshetra University,Kurukshetra,India',
+           'L.D. College of Engineering',
+           'Leelaben Dashrathbhai Raamdas Patel Institute of Technology',
+           'LNM Institute of Information Technology',
+           'M.E.S. Abasaheb Garware College',
+           'Madras Institute Of Technology',
+           'Maharaja Manindra Chandra College',
+           'Maharaja Sayajirao University at Baroda',
+           'Maharaja Surajmal Institute of Technology',
+           'Maharaja Surajmal Institute, Janak Puri, New Delhi',
+           'Maharastra Institute of Technology, Pune',
+           'Maharshi Dayanand University',
+           'Malaviya National Institute of Technology',
+           'Manav Rachna College of Engineering, Faridabad',
+           'Manav Rachna International University',
+           'Manipal Institute of Technology, Manipal Karnataka',
+           'Meerut Institute of Engineering and Technology',
+           'MES College of Engineering',
+           'Model Engineering College, Cochin',
+           'Motilal Nehru National Institute of Tehnology, Allahabad',
+           'Mukesh Patel School of Technology Management & Engineering',
+           'Mumbai University',
+           'N.K.Bagrodia Public School',
+           'N.S.S College of Engineering, Palakkad, Kerala, India',
+           'National Institute Of Engineering, Mysore',
+           'National Institute of Technology',
+           'National Institute of Technology Delhi',
+           'National Institute of Technology Goa',
+           'National Institute of Technology Karnataka',
+           'National Institute Of Technology Raipur',
+           'National Institute of Technology, Calicut',
+           'National Institute of Technology, Durgapur',
+           'National Institute Of Technology, Hamirpur',
+           'National Institute of Technology, Jamshedpur',
+           'National Institute of Technology, Rourkela',
+           'National Institute of Technology, Srinagar',
+           'National Institute Of Technology, Suratkal',
+           'National Institute Of Technology, Tiruchirappalli',
+           'National Institute Of Technology, Warangal',
+           'National Institute Of Technology, West Bengal',
+           'Navy Children School, Goa',
+           'Neotia Institute Of Technology Management And Science',
+           'Netaji Subhas Institute Of Technology (NSIT), New Delhi',
+           'Netaji Subhash Engineering College (West Bengal University of Technology)',
+           'Nirma University, Institute of Technology, / Nirma University Of Science & Technology, Gujarat',
+           'Northern India Engineering College, Lucknow',
+           'Northern India Engineering College, New Delhi',
+           'Osmania University',
+           'Pailan College of Management and Technology (West Bengal University of Technology)',
+           'Panjab University, Chandigarh',
+           'Patkar Varde College',
+           'Peoples Education Society Institute of Technology',
+           'PES University',
+           'PSG College of Technology',
+           'Pune Institute of Computer Technology',
+           "Pune Vidyarthi Griha's College of Engineering and Technology, University of Pune",
+           'Punjab Engineering College, Deemed University at Chandigarh',
+           'Punjab Technical University',
+           'Punjabi University',
+           'Rajasthan Technical University',
+           'Ramgarhia Institute of Engg. and Technology',
+           'Rashtreeya Vidyalaya College Of Engineering',
+           'Rayat and Bahra Institute of Engineering and Biotechnology',
+           'Regional Computer Center Institute of Information Technology / RCC Institute of Information Technology (RCCIIT)',
+           'Regional Institute of Management and Technology',
+           'Reva Institute of Technology and Management',
+           'Sa-A-Diya Arts & Science College, Koliyadukkam, P.O. Kalanad, Kasargod',
+           'SAL Institute of Technology & Engineering Research',
+           'Sardar Patel Institute of Technology (affiliated to Mumbai University)',
+           'Sardar Patel University',
+           'Sardar Vallabhbhai National Institute Of Technology',
+           'Sathyabama University',
+           'Seth Jaiprakash Mukand Lal Institute Of Engineering & Technology',
+           'Shanmugha Arts, Science, Technology & Research Academy (SASTRA)',
+           'Shivaji University',
+           'Shree Swaminarayan College of Computer Science',
+           'Shri Andal Alagar College of Engineering',
+           'Shri Guru Gobind Singhji Institute of Engineering & Technology',
+           'Shri Mata Vaishno Devi University',
+           'Sinhgad Institute Of Technology',
+           'Sir M. Visveshwaraiah Institute Of Technology',
+           'Sir Padampat Singhania Education Center',
+           'Sri Jayachamarajendra College of Engineering',
+           'Sri Sarathi Institute of Engineering and Technology (SSIET)',
+           'Sri Sivasubramaniya Nadar College of Engineering (SSNCE) / SSN College of Engineering',
+           'Sri Venkateswara College of Engineering',
+           'SRM University, Chennai, India',
+           'St. Francis Institute of Technology',
+           "St. Xavier's College, Kolkata",
+           "St.Joseph'S College Of Engineering",
+           'Step By Step High School',
+           'Swami Keshvanand Institute of Technology',
+           'Symbiosis Centre For Distance Learning',
+           'Symbiosis Institute of Computer Studies and Research',
+           'Symbiosis Inst