diff --git a/profiles/wcm_base/CHANGELOG.txt b/profiles/wcm_base/CHANGELOG.txt
index ca6b639549e71262ca2faf3b61bcbe65f0fec3e7..a361f1c3ffcd057c222fffb4dc15f60eafad8460 100644
--- a/profiles/wcm_base/CHANGELOG.txt
+++ b/profiles/wcm_base/CHANGELOG.txt
@@ -1,3 +1,8 @@
+WCM Base 7.x-1.x, 2016-04-14
+----------------------------
+- WCM Base: Update Panopoly to 1.33.
+- OCIO Omega Base: Add current layout indicator, improved layout changer styles.
+
 WCM Base 7.x-1.x, 2016-04-13
 ----------------------------
 - WCM Base: Updated Features module to 2.9 (security release).
diff --git a/profiles/wcm_base/libraries/respondjs/.gitignore b/profiles/wcm_base/libraries/respondjs/.gitignore
deleted file mode 100644
index 0736affbc7df694e291a12690c79601c79e7f135..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/libraries/respondjs/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-.DS_Store
-.vimdir
-node_modules
diff --git a/profiles/wcm_base/libraries/respondjs/Gruntfile.js b/profiles/wcm_base/libraries/respondjs/Gruntfile.js
deleted file mode 100644
index 7f81986a033730229e4cac92454c9c4f35c879e6..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/libraries/respondjs/Gruntfile.js
+++ /dev/null
@@ -1,92 +0,0 @@
-module.exports = function(grunt) {
-	"use strict";
-
-	// Project configuration.
-	grunt.initConfig({
-		pkg: grunt.file.readJSON('package.json'),
-		banner:
-						'/*! Respond.js v<%= pkg.version %>: <%= pkg.description %>\n' +
-						' * Copyright <%= grunt.template.today("yyyy") %> <%= pkg.author.name %>\n' +
-						' * Licensed under <%= _.pluck(pkg.licenses, "type").join(", ") %>\n' + 
-						' * <%= pkg.homepageShortened %>' +
-						' */\n\n',
-		uglify: {
-			nonMinMatchMedia: {
-				options: {
-					banner: '<%= banner %>',
-					mangle: false,
-					compress: false,
-					preserveComments: 'some',
-					beautify: {
-						beautify: true,
-						indent_level: 2
-					}
-				},
-				files: {
-					'dest/respond.src.js': ['src/matchmedia.polyfill.js', 'src/respond.js']
-				}
-			},
-			minMatchMedia: {
-				options: {
-					banner: '<%= banner %>'
-				},
-				files: {
-					'dest/respond.min.js': ['src/matchmedia.polyfill.js', 'src/respond.js']
-				}
-			},
-			nonMinMatchMediaListener: {
-				options: {
-					banner: '<%= banner %>',
-					mangle: false,
-					compress: false,
-					preserveComments: 'some',
-					beautify: {
-						beautify: true,
-						indent_level: 2
-					}
-				},
-				files: {
-					'dest/respond.matchmedia.addListener.src.js': ['src/matchmedia.polyfill.js', 'src/matchmedia.addListener.js', 'src/respond.js']
-				}
-			},
-			minMatchMediaListener: {
-				options: {
-					banner: '<%= banner %>'
-				},
-				files: {
-					'dest/respond.matchmedia.addListener.min.js': ['src/matchmedia.polyfill.js', 'src/matchmedia.addListener.js', 'src/respond.js']
-				}
-			}
-		},
-		jshint: {
-			files: ['src/respond.js', 'src/matchmedia.polyfill.js'],
-			options: {
-				curly: true,
-				eqeqeq: true,
-				immed: true,
-				latedef: false,
-				newcap: true,
-				noarg: true,
-				sub: true,
-				undef: true,
-				boss: true,
-				eqnull: true,
-				smarttabs: true,
-				node: true,
-				es5: true,
-				strict: false
-			},
-			globals: {
-				Image: true,
-				window: true
-			}
-		}
-	});
-
-	grunt.loadNpmTasks( 'grunt-contrib-jshint' );
-	grunt.loadNpmTasks( 'grunt-contrib-uglify' );
-
-	// Default task.
-	grunt.registerTask('default', ['jshint', 'uglify']);
-
-};
diff --git a/profiles/wcm_base/libraries/respondjs/LICENSE-MIT b/profiles/wcm_base/libraries/respondjs/LICENSE-MIT
deleted file mode 100644
index c7cf40db13d7631ca7b53d88c6762eb5114c2cb3..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/libraries/respondjs/LICENSE-MIT
+++ /dev/null
@@ -1,22 +0,0 @@
-Copyright (c) 2012 Scott Jehl
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
diff --git a/profiles/wcm_base/libraries/respondjs/README.md b/profiles/wcm_base/libraries/respondjs/README.md
deleted file mode 100644
index 909eb5041a0276b1dd64d5cfba007b126b337aee..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/libraries/respondjs/README.md
+++ /dev/null
@@ -1,112 +0,0 @@
-# Respond.js
-### A fast & lightweight polyfill for min/max-width CSS3 Media Queries (for IE 6-8, and more)
-
- - Copyright 2011: Scott Jehl, scottjehl.com
-
- - Licensed under the MIT license.
- 
-The goal of this script is to provide a fast and lightweight (3kb minified / 1kb gzipped) script to enable [responsive web designs](http://www.alistapart.com/articles/responsive-web-design/) in browsers that don't support CSS3 Media Queries - in particular, Internet Explorer 8 and under. It's written in such a way that it will probably patch support for other non-supporting browsers as well (more information on that soon).
-
-If you're unfamiliar with the concepts surrounding Responsive Web Design, you can read up [here](http://www.alistapart.com/articles/responsive-web-design/) and also [here](http://scottjehl.github.io/picturefill/)
-
-[Demo page](http://scottjehl.github.io/Respond/test/test.html) (the colors change to show media queries working)
-
-
-Usage Instructions
-======
-
-1. Craft your CSS with min/max-width media queries to adapt your layout from mobile (first) all the way up to desktop
-<pre>
-    @media screen and (min-width: 480px){
-        ...styles for 480px and up go here
-    }
-</pre>
-
-2. Reference the respond.min.js script (1kb min/gzipped) after all of your CSS (the earlier it runs, the greater chance IE users will not see a flash of un-media'd content)
-
-3. Crack open Internet Explorer and pump fists in delight
-
-
-CDN/X-Domain Setup
-======
-
-Respond.js works by requesting a pristine copy of your CSS via AJAX, so if you host your stylesheets on a CDN (or a subdomain), you'll need to upload a proxy page to enable cross-domain communication.
-
-See `cross-domain/example.html` for a demo:
-
-- Upload `cross-domain/respond-proxy.html` to your external domain
-- Upload `cross-domain/respond.proxy.gif` to your origin domain
-- Reference the file(s) via `<link />` element(s):
-
-<pre>
-	&lt;!-- Respond.js proxy on external server --&gt;
-	&lt;link href=&quot;http://externalcdn.com/respond-proxy.html&quot; id=&quot;respond-proxy&quot; rel=&quot;respond-proxy&quot; /&gt;
-
-	&lt;!-- Respond.js redirect location on local server --&gt;
-	&lt;link href=&quot;/path/to/respond.proxy.gif&quot; id=&quot;respond-redirect&quot; rel=&quot;respond-redirect&quot; /&gt;
-
-	&lt;!-- Respond.js proxy script on local server --&gt;
-	&lt;script src="/path/to/respond.proxy.js"&gt;&lt;/script&gt;
-</pre>
-
-If you are having problems with the cross-domain setup, make sure respond-proxy.html does not have a query string appended to it.
-
-Note: HUGE thanks to @doctyper for the contributions in the cross-domain proxy!
-
-
-Support & Caveats
-======
-
-Some notes to keep in mind:
-
-- This script's focus is purposely very narrow: only min-width and max-width media queries and all media types (screen, print, etc) are translated to non-supporting browsers. I wanted to keep things simple for filesize, maintenance, and performance, so I've intentionally limited support to queries that are essential to building a (mobile-first) responsive design. In the future, I may rework things a bit to include a hook for patching-in additional media query features - stay tuned!
-
-- Browsers that natively support CSS3 Media Queries are opted-out of running this script as quickly as possible. In testing for support, all other browsers are subjected to a quick  test to determine whether they support media queries or not before proceeding to run the script. This test is now included separately at the top, and uses the window.matchMedia polyfill found here: https://github.com/paulirish/matchMedia.js . If you are already including this polyfill via Modernizr or otherwise, feel free to remove that part.
-
-- This script relies on no other scripts or frameworks (aside from the included matchMedia polyfill), and is optimized for mobile delivery (~1kb total filesize min/gzip)
-
-- As you might guess, this implementation is quite dumb in regards to CSS parsing rules. This is a good thing, because that allows it to run really fast, but its looseness may also cause unexpected behavior. For example: if you enclose a whole media query in a comment intending to disable its rules, you'll probably find that those rules will end up enabled in non-media-query-supporting browsers.
-
-- Respond.js doesn't parse CSS referenced via @import, nor does it work with media queries within style elements, as those styles can't be re-requested for parsing.
-
-- Due to security restrictions, some browsers may not allow this script to work on file:// urls (because it uses xmlHttpRequest). Run it on a web server.
-
-- If the request for the CSS file that includes MQ-specific styling is
-  behind a redirect, Respond.js will fail silently. CSS files should
-respond with a 200 status.
-
-- Currently, media attributes on link elements are supported, but only if the linked stylesheet contains no media queries. If it does contain queries, the media attribute will be ignored and the internal queries will be parsed normally. In other words, @media statements in the CSS take priority.
-
-- Reportedly, if CSS files are encoded in UTF-8 with Byte-Order-Mark (BOM), they will not work with Respond.js in IE7 or IE8. Noted in issue #97
-
-- WARNING: Including @font-face rules inside a media query will cause IE7 and IE8 to hang during load. To work around this, place @font-face rules in the wide open, as a sibling to other media queries.
-
-- If you have more than 32 stylesheets referenced, IE will throw an error, `Invalid procedure call or argument`. Concatenate your CSS and the issue should go away.
-
-- Sass/SCSS source maps are not supported; `@media -sass-debug-info` will break respond.js. Noted in issue [#148](https://github.com/scottjehl/Respond/issues/148)
-
-- Internet Explorer 9 supports css3 media queries, but not within frames when the CSS containing the media query is in an external file (this appears to be a bug in IE9 — see http://stackoverflow.com/questions/10316247/media-queries-fail-inside-ie9-iframe). See this commit for a fix if you're having this problem. https://github.com/NewSignature/Respond/commit/1c86c66075f0a2099451eb426702fc3540d2e603
-
-- Nested Media Queries are not supported
-
-
-How's it work?
-======
-Basically, the script loops through the CSS referenced in the page and runs a regular expression or two on their contents to find media queries and their associated blocks of CSS. In Internet Explorer, the content of the stylesheet is impossible to retrieve in its pre-parsed state (which in IE 8-, means its media queries are removed from the text), so Respond.js re-requests the CSS files using Ajax and parses the text response from there. Be sure to configure your CSS files' caching properly so that this re-request doesn't actually go to the server, hitting your browser cache instead.
-
-From there, each media query block is appended to the head in order via style elements, and those style elements are enabled and disabled (read: appended and removed from the DOM) depending on how their min/max width compares with the browser width. The media attribute on the style elements will match that of the query in the CSS, so it could be "screen", "projector", or whatever you want. Any relative paths contained in the CSS will be prefixed by their stylesheet's href, so image paths will direct to their proper destination
-
-API Options?
-======
-Sure, a couple:
-
-- respond.update() : rerun the parser (helpful if you added a stylesheet to the page and it needs to be translated)
-- respond.mediaQueriesSupported: set to true if the browser natively supports media queries.
-- respond.getEmValue() : returns the pixel value of one em
-
-
-Alternatives to this script
-======
-This isn't the only CSS3 Media Query polyfill script out there; but it damn well may be the fastest.
-
-If you're looking for more robust CSS3 Media Query support, you might check out http://code.google.com/p/css3-mediaqueries-js/. In testing, I've found that script to be noticeably slow when rendering complex responsive designs (both in filesize and performance), but it really does support a lot more media query features than this script. Big hat tip to the authors! :)
diff --git a/profiles/wcm_base/libraries/respondjs/bower.json b/profiles/wcm_base/libraries/respondjs/bower.json
deleted file mode 100644
index b98e964619ab850a72c9aa06abf296c190b4b960..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/libraries/respondjs/bower.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-  "name": "respond",
-  "version": "1.4.2",
-  "main": "dest/respond.src.js",
-  "description": "Fast and lightweight polyfill for min/max-width CSS3 Media Queries (for IE 6-8, and more)",
-  "ignore": [
-    "**/.*",
-    "test"
-  ]
-}
diff --git a/profiles/wcm_base/libraries/respondjs/cross-domain/example-base.html b/profiles/wcm_base/libraries/respondjs/cross-domain/example-base.html
deleted file mode 100644
index 50201d98f0554e0f25f1e0edba14892123705f18..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/libraries/respondjs/cross-domain/example-base.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-	<!-- Change this to match your local server hostname and path -->
-	<base href="http://localhost/Respond/cross-domain/"><!--[if lte IE 6]></base><![endif]-->
-		<meta charset="utf-8" />
-	<title>Respond JS Test Page</title>
-	<link href="https://rawgithub.com/scottjehl/Respond/master/test/test.css" rel="stylesheet"/>
-	<link href="https://rawgithub.com/scottjehl/Respond/master/test/test2.css" media="screen and (min-width: 600px)" rel="stylesheet"/>
-	<script src="../dest/respond.src.js"></script>
-	
-	<!-- Respond.js proxy on external server -->
-	<link href="https://rawgithub.com/scottjehl/Respond/master/cross-domain/respond-proxy.html" id="respond-proxy" rel="respond-proxy" />
-	<link href="respond.proxy.gif" id="respond-redirect" rel="respond-redirect" />
-	<script src="respond.proxy.js"></script>
-</head> 
-<body>
-	<p>This is a visual test file for cross-domain proxy and custom base tag. NB: For this test to work properly, you need to set the href attribute of the base tag to the fully-qualified path to cross-domain on your system, terminated with a slash (earlier versions of IE don't play nicely otherwise).</p>
-
-	<p>The media queries in the included CSS file simply change the body's background color depending on the browser width. If you see any colors aside from black, then the media queries are working in your browser. You can resize your browser window to see it change on the fly.</p>
-
-
-	<p id="attribute-test">Media-attributes are working too! This should be visible above 600px.</p>
-
-</body>
-</html>
diff --git a/profiles/wcm_base/libraries/respondjs/cross-domain/example.html b/profiles/wcm_base/libraries/respondjs/cross-domain/example.html
deleted file mode 100644
index 700224e71c6811ec54a36bdd892633fe0f4901bd..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/libraries/respondjs/cross-domain/example.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-	<meta charset="utf-8" />
-	<title>Respond JS Test Page</title>
-	<link href="https://rawgithub.com/scottjehl/Respond/master/test/test.css" rel="stylesheet"/>
-	<link href="https://rawgithub.com/scottjehl/Respond/master/test/test2.css" media="screen and (min-width: 600px)" rel="stylesheet"/>
-	<script src="../dest/respond.src.js"></script>
-	
-	<!-- Respond.js proxy on external server -->
-	<link href="https://rawgithub.com/scottjehl/Respond/master/cross-domain/respond-proxy.html" id="respond-proxy" rel="respond-proxy" />
-	<link href="respond.proxy.gif" id="respond-redirect" rel="respond-redirect" />
-	<script src="respond.proxy.js"></script>
-</head> 
-<body>
-	<p>This is a visual test file for cross-domain proxy.</p>
-
-	<p>The media queries in the included CSS file simply change the body's background color depending on the browser width. If you see any colors aside from black, then the media queries are working in your browser. You can resize your browser window to see it change on the fly.</p>
-
-
-	<p id="attribute-test">Media-attributes are working too! This should be visible above 600px.</p>
-
-</body>
-</html>
diff --git a/profiles/wcm_base/libraries/respondjs/cross-domain/respond-proxy.html b/profiles/wcm_base/libraries/respondjs/cross-domain/respond-proxy.html
deleted file mode 100644
index f828a0a5d2030c5fdb43a01ac38c55e238a6de81..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/libraries/respondjs/cross-domain/respond-proxy.html
+++ /dev/null
@@ -1,96 +0,0 @@
-<!-- Respond.js: min/max-width media query polyfill. Remote proxy (c) Scott Jehl. MIT/GPLv2 Lic. j.mp/respondjs -->
-<!DOCTYPE html>
-<html>
-<head>
-	<meta charset="utf-8" />
-	<title>Respond JS Proxy</title>
-</head> 
-<body>
-	<script>
-		(function () {
-			var domain, css, query, getQueryString, ajax, xmlHttp;
-
-			/*
-				http://stackoverflow.com/questions/4963673/get-url-array-variables-in-javascript-jquery/4963817#4963817
-			*/
-			getQueryString = function() {
-				var ret = {}, parts, i, p;
-
-				parts = (document.location.toString().split("?")[1]).split("&");
-
-				for (i = 0; i < parts.length; i++) {
-
-					p = parts[i].split("=");
-					// so strings will be correctly parsed:
-					p[1] = decodeURIComponent(p[1].replace(/\+/g, " "));
-
-					if (p[0].search(/\[\]/) >= 0) { // then it"s an array
-						p[0] = p[0].replace("[]", "");
-
-						if (typeof ret[p[0]] != "object") {
-							ret[p[0]] = [];
-						}
-						ret[p[0]].push(p[1]);
-					} else {
-						ret[p[0]] = p[1];
-					}
-				}
-				return ret;
-			};
-
-			ajax = function( url, callback ) {
-				var req = xmlHttp();
-				if (!req){
-					return;
-				}
-				req.open( "GET", url, true );
-				req.onreadystatechange = function () {
-					if ( req.readyState != 4 || req.status != 200 && req.status != 304 ){
-						return;
-					}
-					callback( req.responseText );
-				};
-				if ( req.readyState == 4 ){
-					return;
-				}
-				req.send();
-			};
-
-			//define ajax obj 
-			xmlHttp = (function() {
-				var xmlhttpmethod = false,
-					attempts = [
-						function(){ return new XMLHttpRequest(); },
-						function(){ return new ActiveXObject("Microsoft.XMLHTTP"); },
-						function(){ return new ActiveXObject("MSXML2.XMLHTTP.3.0"); }
-					],
-					al = attempts.length;
-
-				while( al-- ){
-					try {
-						xmlhttpmethod = attempts[ al ]();
-					}
-					catch(e) {
-						continue;
-					}
-					break;
-				}
-				return function(){
-					return xmlhttpmethod;
-				};
-			})();
-
-			query = getQueryString();
-			css = query["css"];
-			domain = query["url"];
-
-			if (css && domain) {
-				ajax(css, function (response) {
-					window.name = response;
-					window.location.href = domain;
-				});
-			}
-		}());
-	</script>
-</body>
-</html>
\ No newline at end of file
diff --git a/profiles/wcm_base/libraries/respondjs/cross-domain/respond.proxy.gif b/profiles/wcm_base/libraries/respondjs/cross-domain/respond.proxy.gif
deleted file mode 100644
index ced1c0532c8669047dcaf7f93a48ae08ab6cf412..0000000000000000000000000000000000000000
Binary files a/profiles/wcm_base/libraries/respondjs/cross-domain/respond.proxy.gif and /dev/null differ
diff --git a/profiles/wcm_base/libraries/respondjs/cross-domain/respond.proxy.js b/profiles/wcm_base/libraries/respondjs/cross-domain/respond.proxy.js
deleted file mode 100644
index 9322a3542db2be9d9d3bd74a911c682b269cf410..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/libraries/respondjs/cross-domain/respond.proxy.js
+++ /dev/null
@@ -1,129 +0,0 @@
-/*! Respond.js: min/max-width media query polyfill. Remote proxy (c) Scott Jehl. MIT/GPLv2 Lic. j.mp/respondjs  */
-(function(win, doc, undefined){
-	var docElem			= doc.documentElement,
-		proxyURL		= doc.getElementById("respond-proxy").href,
-		redirectURL		= (doc.getElementById("respond-redirect") || location).href,
-		baseElem		= doc.getElementsByTagName("base")[0],
-		urls			= [],
-		refNode;
-
-	function encode(url){
-		return win.encodeURIComponent(url);
-	}
-
-	 function fakejax( url, callback ){
-
-		var iframe,
-			AXO;
-		
-		// All hail Google http://j.mp/iKMI19
-		// Behold, an iframe proxy without annoying clicky noises.
-		if ( "ActiveXObject" in win ) {
-			AXO = new ActiveXObject( "htmlfile" );
-			AXO.open();
-			AXO.write( '<iframe id="x"></iframe>' );
-			AXO.close();
-			iframe = AXO.getElementById( "x" );
-		} else {
-			iframe = doc.createElement( "iframe" );
-			iframe.style.cssText = "position:absolute;top:-99em";
-			docElem.insertBefore(iframe, docElem.firstElementChild || docElem.firstChild );
-		}
-
-		iframe.src = checkBaseURL(proxyURL) + "?url=" + encode(redirectURL) + "&css=" + encode(checkBaseURL(url));
-		
-		function checkFrameName() {
-			var cssText;
-
-			try {
-				cssText = iframe.contentWindow.name;
-			}
-			catch (e) { }
-
-			if (cssText) {
-				// We've got what we need. Stop the iframe from loading further content.
-				iframe.src = "about:blank";
-				iframe.parentNode.removeChild(iframe);
-				iframe = null;
-
-			
-				// Per http://j.mp/kn9EPh, not taking any chances. Flushing the ActiveXObject
-				if (AXO) {
-					AXO = null;
-
-					if (win.CollectGarbage) {
-						win.CollectGarbage();
-					}
-				}
-
-				callback(cssText);
-			}
-			else{
-				win.setTimeout(checkFrameName, 100);
-			}
-		}
-		
-		win.setTimeout(checkFrameName, 500);
-	}
-
-    // http://stackoverflow.com/a/472729
-	function checkBaseURL(href) {
-        var el = document.createElement('div'),
-        escapedURL = href.split('&').join('&amp;').
-            split('<').join('&lt;').
-            split('"').join('&quot;');
-
-        el.innerHTML = '<a href="' + escapedURL + '">x</a>';
-        return el.firstChild.href;
-	}
-	
-	function checkRedirectURL() {
-		// IE6 & IE7 don't build out absolute urls in <link /> attributes.
-		// So respond.proxy.gif remains relative instead of http://example.com/respond.proxy.gif.
-		// This trickery resolves that issue.
-		if (~ !redirectURL.indexOf(location.host)) {
-
-			var fakeLink = doc.createElement("div");
-
-			fakeLink.innerHTML = '<a href="' + redirectURL + '"></a>';
-			docElem.insertBefore(fakeLink, docElem.firstElementChild || docElem.firstChild );
-
-			// Grab the parsed URL from that dummy object
-			redirectURL = fakeLink.firstChild.href;
-
-			// Clean up
-			fakeLink.parentNode.removeChild(fakeLink);
-			fakeLink = null;
-		}
-	}
-	
-	function buildUrls(){
-		var links = doc.getElementsByTagName( "link" );
-		
-		for( var i = 0, linkl = links.length; i < linkl; i++ ){
-			
-			var thislink	= links[i],
-				href		= links[i].href,
-				extreg		= (/^([a-zA-Z:]*\/\/(www\.)?)/).test( href ),
-				ext			= (baseElem && !extreg) || extreg;
-
-			//make sure it's an external stylesheet
-			if( thislink.rel.indexOf( "stylesheet" ) >= 0 && ext ){
-				(function( link ){			
-					fakejax( href, function( css ){
-						link.styleSheet.rawCssText = css;
-						respond.update();
-					} );
-				})( thislink );
-			}	
-		}
-
-		
-	}
-	
-	if( !respond.mediaQueriesSupported ){
-		checkRedirectURL();
-		buildUrls();
-	}
-
-})( window, document );
diff --git a/profiles/wcm_base/libraries/respondjs/dest/respond.matchmedia.addListener.min.js b/profiles/wcm_base/libraries/respondjs/dest/respond.matchmedia.addListener.min.js
deleted file mode 100644
index f4798649f135b8ecf29f3fea599116660aac94a4..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/libraries/respondjs/dest/respond.matchmedia.addListener.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*! Respond.js v1.4.2: min/max-width media query polyfill
- * Copyright 2014 Scott Jehl
- * Licensed under MIT
- * http://j.mp/respondjs */
-
-!function(a){"use strict";a.matchMedia=a.matchMedia||function(a){var b,c=a.documentElement,d=c.firstElementChild||c.firstChild,e=a.createElement("body"),f=a.createElement("div");return f.id="mq-test-1",f.style.cssText="position:absolute;top:-100em",e.style.background="none",e.appendChild(f),function(a){return f.innerHTML='&shy;<style media="'+a+'"> #mq-test-1 { width: 42px; }</style>',c.insertBefore(e,d),b=42===f.offsetWidth,c.removeChild(e),{matches:b,media:a}}}(a.document)}(this),function(a){"use strict";if(a.matchMedia&&a.matchMedia("all").addListener)return!1;var b=a.matchMedia,c=b("only all").matches,d=!1,e=0,f=[],g=function(){a.clearTimeout(e),e=a.setTimeout(function(){for(var c=0,d=f.length;d>c;c++){var e=f[c].mql,g=f[c].listeners||[],h=b(e.media).matches;if(h!==e.matches){e.matches=h;for(var i=0,j=g.length;j>i;i++)g[i].call(a,e)}}},30)};a.matchMedia=function(e){var h=b(e),i=[],j=0;return h.addListener=function(b){c&&(d||(d=!0,a.addEventListener("resize",g,!0)),0===j&&(j=f.push({mql:h,listeners:i})),i.push(b))},h.removeListener=function(a){for(var b=0,c=i.length;c>b;b++)i[b]===a&&i.splice(b,1)},h}}(this),function(a){"use strict";function b(){v(!0)}var c={};a.respond=c,c.update=function(){};var d=[],e=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}(),f=function(a,b){var c=e();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))},g=function(a){return a.replace(c.regex.minmaxwh,"").match(c.regex.other)};if(c.ajax=f,c.queue=d,c.unsupportedmq=g,c.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,comments:/\/\*[^*]*\*+([^/][^*]*\*+)*\//gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,maxw:/\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,minmaxwh:/\(\s*m(in|ax)\-(height|width)\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/gi,other:/\([^\)]*\)/g},c.mediaQueriesSupported=a.matchMedia&&null!==a.matchMedia("only all")&&a.matchMedia("only all").matches,!c.mediaQueriesSupported){var h,i,j,k=a.document,l=k.documentElement,m=[],n=[],o=[],p={},q=30,r=k.getElementsByTagName("head")[0]||l,s=k.getElementsByTagName("base")[0],t=r.getElementsByTagName("link"),u=function(){var a,b=k.createElement("div"),c=k.body,d=l.style.fontSize,e=c&&c.style.fontSize,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",c||(c=f=k.createElement("body"),c.style.background="none"),l.style.fontSize="100%",c.style.fontSize="100%",c.appendChild(b),f&&l.insertBefore(c,l.firstChild),a=b.offsetWidth,f?l.removeChild(c):c.removeChild(b),l.style.fontSize=d,e&&(c.style.fontSize=e),a=j=parseFloat(a)},v=function(b){var c="clientWidth",d=l[c],e="CSS1Compat"===k.compatMode&&d||k.body[c]||d,f={},g=t[t.length-1],p=(new Date).getTime();if(b&&h&&q>p-h)return a.clearTimeout(i),i=a.setTimeout(v,q),void 0;h=p;for(var s in m)if(m.hasOwnProperty(s)){var w=m[s],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?j||u():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?j||u():1)),w.hasquery&&(z&&A||!(z||e>=x)||!(A||y>=e))||(f[w.media]||(f[w.media]=[]),f[w.media].push(n[w.rules]))}for(var C in o)o.hasOwnProperty(C)&&o[C]&&o[C].parentNode===r&&r.removeChild(o[C]);o.length=0;for(var D in f)if(f.hasOwnProperty(D)){var E=k.createElement("style"),F=f[D].join("\n");E.type="text/css",E.media=D,r.insertBefore(E,g.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(k.createTextNode(F)),o.push(E)}},w=function(a,b,d){var e=a.replace(c.regex.comments,"").replace(c.regex.keyframes,"").match(c.regex.media),f=e&&e.length||0;b=b.substring(0,b.lastIndexOf("/"));var h=function(a){return a.replace(c.regex.urls,"$1"+b+"$2$3")},i=!f&&d;b.length&&(b+="/"),i&&(f=1);for(var j=0;f>j;j++){var k,l,o,p;i?(k=d,n.push(h(a))):(k=e[j].match(c.regex.findStyles)&&RegExp.$1,n.push(RegExp.$2&&h(RegExp.$2))),o=k.split(","),p=o.length;for(var q=0;p>q;q++)l=o[q],g(l)||m.push({media:l.split("(")[0].match(c.regex.only)&&RegExp.$2||"all",rules:n.length-1,hasquery:l.indexOf("(")>-1,minw:l.match(c.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:l.match(c.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}v()},x=function(){if(d.length){var b=d.shift();f(b.href,function(c){w(c,b.href,b.media),p[b.href]=!0,a.setTimeout(function(){x()},0)})}},y=function(){for(var b=0;b<t.length;b++){var c=t[b],e=c.href,f=c.media,g=c.rel&&"stylesheet"===c.rel.toLowerCase();e&&g&&!p[e]&&(c.styleSheet&&c.styleSheet.rawCssText?(w(c.styleSheet.rawCssText,e,f),p[e]=!0):(!/^([a-zA-Z:]*\/\/)/.test(e)&&!s||e.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&("//"===e.substring(0,2)&&(e=a.location.protocol+e),d.push({href:e,media:f})))}x()};y(),c.update=y,c.getEmValue=u,a.addEventListener?a.addEventListener("resize",b,!1):a.attachEvent&&a.attachEvent("onresize",b)}}(this);
\ No newline at end of file
diff --git a/profiles/wcm_base/libraries/respondjs/dest/respond.matchmedia.addListener.src.js b/profiles/wcm_base/libraries/respondjs/dest/respond.matchmedia.addListener.src.js
deleted file mode 100644
index 37c46115ea610eb2452f8705062c94112dd4f6ff..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/libraries/respondjs/dest/respond.matchmedia.addListener.src.js
+++ /dev/null
@@ -1,286 +0,0 @@
-/*! Respond.js v1.4.2: min/max-width media query polyfill
- * Copyright 2014 Scott Jehl
- * Licensed under MIT
- * http://j.mp/respondjs */
-
-/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */
-/*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */
-(function(w) {
-  "use strict";
-  w.matchMedia = w.matchMedia || function(doc, undefined) {
-    var bool, docElem = doc.documentElement, refNode = docElem.firstElementChild || docElem.firstChild, fakeBody = doc.createElement("body"), div = doc.createElement("div");
-    div.id = "mq-test-1";
-    div.style.cssText = "position:absolute;top:-100em";
-    fakeBody.style.background = "none";
-    fakeBody.appendChild(div);
-    return function(q) {
-      div.innerHTML = '&shy;<style media="' + q + '"> #mq-test-1 { width: 42px; }</style>';
-      docElem.insertBefore(fakeBody, refNode);
-      bool = div.offsetWidth === 42;
-      docElem.removeChild(fakeBody);
-      return {
-        matches: bool,
-        media: q
-      };
-    };
-  }(w.document);
-})(this);
-
-/*! matchMedia() polyfill addListener/removeListener extension. Author & copyright (c) 2012: Scott Jehl. Dual MIT/BSD license */
-(function(w) {
-  "use strict";
-  if (w.matchMedia && w.matchMedia("all").addListener) {
-    return false;
-  }
-  var localMatchMedia = w.matchMedia, hasMediaQueries = localMatchMedia("only all").matches, isListening = false, timeoutID = 0, queries = [], handleChange = function(evt) {
-    w.clearTimeout(timeoutID);
-    timeoutID = w.setTimeout(function() {
-      for (var i = 0, il = queries.length; i < il; i++) {
-        var mql = queries[i].mql, listeners = queries[i].listeners || [], matches = localMatchMedia(mql.media).matches;
-        if (matches !== mql.matches) {
-          mql.matches = matches;
-          for (var j = 0, jl = listeners.length; j < jl; j++) {
-            listeners[j].call(w, mql);
-          }
-        }
-      }
-    }, 30);
-  };
-  w.matchMedia = function(media) {
-    var mql = localMatchMedia(media), listeners = [], index = 0;
-    mql.addListener = function(listener) {
-      if (!hasMediaQueries) {
-        return;
-      }
-      if (!isListening) {
-        isListening = true;
-        w.addEventListener("resize", handleChange, true);
-      }
-      if (index === 0) {
-        index = queries.push({
-          mql: mql,
-          listeners: listeners
-        });
-      }
-      listeners.push(listener);
-    };
-    mql.removeListener = function(listener) {
-      for (var i = 0, il = listeners.length; i < il; i++) {
-        if (listeners[i] === listener) {
-          listeners.splice(i, 1);
-        }
-      }
-    };
-    return mql;
-  };
-})(this);
-
-(function(w) {
-  "use strict";
-  var respond = {};
-  w.respond = respond;
-  respond.update = function() {};
-  var requestQueue = [], xmlHttp = function() {
-    var xmlhttpmethod = false;
-    try {
-      xmlhttpmethod = new w.XMLHttpRequest();
-    } catch (e) {
-      xmlhttpmethod = new w.ActiveXObject("Microsoft.XMLHTTP");
-    }
-    return function() {
-      return xmlhttpmethod;
-    };
-  }(), ajax = function(url, callback) {
-    var req = xmlHttp();
-    if (!req) {
-      return;
-    }
-    req.open("GET", url, true);
-    req.onreadystatechange = function() {
-      if (req.readyState !== 4 || req.status !== 200 && req.status !== 304) {
-        return;
-      }
-      callback(req.responseText);
-    };
-    if (req.readyState === 4) {
-      return;
-    }
-    req.send(null);
-  }, isUnsupportedMediaQuery = function(query) {
-    return query.replace(respond.regex.minmaxwh, "").match(respond.regex.other);
-  };
-  respond.ajax = ajax;
-  respond.queue = requestQueue;
-  respond.unsupportedmq = isUnsupportedMediaQuery;
-  respond.regex = {
-    media: /@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,
-    keyframes: /@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,
-    comments: /\/\*[^*]*\*+([^/][^*]*\*+)*\//gi,
-    urls: /(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,
-    findStyles: /@media *([^\{]+)\{([\S\s]+?)$/,
-    only: /(only\s+)?([a-zA-Z]+)\s?/,
-    minw: /\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,
-    maxw: /\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,
-    minmaxwh: /\(\s*m(in|ax)\-(height|width)\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/gi,
-    other: /\([^\)]*\)/g
-  };
-  respond.mediaQueriesSupported = w.matchMedia && w.matchMedia("only all") !== null && w.matchMedia("only all").matches;
-  if (respond.mediaQueriesSupported) {
-    return;
-  }
-  var doc = w.document, docElem = doc.documentElement, mediastyles = [], rules = [], appendedEls = [], parsedSheets = {}, resizeThrottle = 30, head = doc.getElementsByTagName("head")[0] || docElem, base = doc.getElementsByTagName("base")[0], links = head.getElementsByTagName("link"), lastCall, resizeDefer, eminpx, getEmValue = function() {
-    var ret, div = doc.createElement("div"), body = doc.body, originalHTMLFontSize = docElem.style.fontSize, originalBodyFontSize = body && body.style.fontSize, fakeUsed = false;
-    div.style.cssText = "position:absolute;font-size:1em;width:1em";
-    if (!body) {
-      body = fakeUsed = doc.createElement("body");
-      body.style.background = "none";
-    }
-    docElem.style.fontSize = "100%";
-    body.style.fontSize = "100%";
-    body.appendChild(div);
-    if (fakeUsed) {
-      docElem.insertBefore(body, docElem.firstChild);
-    }
-    ret = div.offsetWidth;
-    if (fakeUsed) {
-      docElem.removeChild(body);
-    } else {
-      body.removeChild(div);
-    }
-    docElem.style.fontSize = originalHTMLFontSize;
-    if (originalBodyFontSize) {
-      body.style.fontSize = originalBodyFontSize;
-    }
-    ret = eminpx = parseFloat(ret);
-    return ret;
-  }, applyMedia = function(fromResize) {
-    var name = "clientWidth", docElemProp = docElem[name], currWidth = doc.compatMode === "CSS1Compat" && docElemProp || doc.body[name] || docElemProp, styleBlocks = {}, lastLink = links[links.length - 1], now = new Date().getTime();
-    if (fromResize && lastCall && now - lastCall < resizeThrottle) {
-      w.clearTimeout(resizeDefer);
-      resizeDefer = w.setTimeout(applyMedia, resizeThrottle);
-      return;
-    } else {
-      lastCall = now;
-    }
-    for (var i in mediastyles) {
-      if (mediastyles.hasOwnProperty(i)) {
-        var thisstyle = mediastyles[i], min = thisstyle.minw, max = thisstyle.maxw, minnull = min === null, maxnull = max === null, em = "em";
-        if (!!min) {
-          min = parseFloat(min) * (min.indexOf(em) > -1 ? eminpx || getEmValue() : 1);
-        }
-        if (!!max) {
-          max = parseFloat(max) * (max.indexOf(em) > -1 ? eminpx || getEmValue() : 1);
-        }
-        if (!thisstyle.hasquery || (!minnull || !maxnull) && (minnull || currWidth >= min) && (maxnull || currWidth <= max)) {
-          if (!styleBlocks[thisstyle.media]) {
-            styleBlocks[thisstyle.media] = [];
-          }
-          styleBlocks[thisstyle.media].push(rules[thisstyle.rules]);
-        }
-      }
-    }
-    for (var j in appendedEls) {
-      if (appendedEls.hasOwnProperty(j)) {
-        if (appendedEls[j] && appendedEls[j].parentNode === head) {
-          head.removeChild(appendedEls[j]);
-        }
-      }
-    }
-    appendedEls.length = 0;
-    for (var k in styleBlocks) {
-      if (styleBlocks.hasOwnProperty(k)) {
-        var ss = doc.createElement("style"), css = styleBlocks[k].join("\n");
-        ss.type = "text/css";
-        ss.media = k;
-        head.insertBefore(ss, lastLink.nextSibling);
-        if (ss.styleSheet) {
-          ss.styleSheet.cssText = css;
-        } else {
-          ss.appendChild(doc.createTextNode(css));
-        }
-        appendedEls.push(ss);
-      }
-    }
-  }, translate = function(styles, href, media) {
-    var qs = styles.replace(respond.regex.comments, "").replace(respond.regex.keyframes, "").match(respond.regex.media), ql = qs && qs.length || 0;
-    href = href.substring(0, href.lastIndexOf("/"));
-    var repUrls = function(css) {
-      return css.replace(respond.regex.urls, "$1" + href + "$2$3");
-    }, useMedia = !ql && media;
-    if (href.length) {
-      href += "/";
-    }
-    if (useMedia) {
-      ql = 1;
-    }
-    for (var i = 0; i < ql; i++) {
-      var fullq, thisq, eachq, eql;
-      if (useMedia) {
-        fullq = media;
-        rules.push(repUrls(styles));
-      } else {
-        fullq = qs[i].match(respond.regex.findStyles) && RegExp.$1;
-        rules.push(RegExp.$2 && repUrls(RegExp.$2));
-      }
-      eachq = fullq.split(",");
-      eql = eachq.length;
-      for (var j = 0; j < eql; j++) {
-        thisq = eachq[j];
-        if (isUnsupportedMediaQuery(thisq)) {
-          continue;
-        }
-        mediastyles.push({
-          media: thisq.split("(")[0].match(respond.regex.only) && RegExp.$2 || "all",
-          rules: rules.length - 1,
-          hasquery: thisq.indexOf("(") > -1,
-          minw: thisq.match(respond.regex.minw) && parseFloat(RegExp.$1) + (RegExp.$2 || ""),
-          maxw: thisq.match(respond.regex.maxw) && parseFloat(RegExp.$1) + (RegExp.$2 || "")
-        });
-      }
-    }
-    applyMedia();
-  }, makeRequests = function() {
-    if (requestQueue.length) {
-      var thisRequest = requestQueue.shift();
-      ajax(thisRequest.href, function(styles) {
-        translate(styles, thisRequest.href, thisRequest.media);
-        parsedSheets[thisRequest.href] = true;
-        w.setTimeout(function() {
-          makeRequests();
-        }, 0);
-      });
-    }
-  }, ripCSS = function() {
-    for (var i = 0; i < links.length; i++) {
-      var sheet = links[i], href = sheet.href, media = sheet.media, isCSS = sheet.rel && sheet.rel.toLowerCase() === "stylesheet";
-      if (!!href && isCSS && !parsedSheets[href]) {
-        if (sheet.styleSheet && sheet.styleSheet.rawCssText) {
-          translate(sheet.styleSheet.rawCssText, href, media);
-          parsedSheets[href] = true;
-        } else {
-          if (!/^([a-zA-Z:]*\/\/)/.test(href) && !base || href.replace(RegExp.$1, "").split("/")[0] === w.location.host) {
-            if (href.substring(0, 2) === "//") {
-              href = w.location.protocol + href;
-            }
-            requestQueue.push({
-              href: href,
-              media: media
-            });
-          }
-        }
-      }
-    }
-    makeRequests();
-  };
-  ripCSS();
-  respond.update = ripCSS;
-  respond.getEmValue = getEmValue;
-  function callMedia() {
-    applyMedia(true);
-  }
-  if (w.addEventListener) {
-    w.addEventListener("resize", callMedia, false);
-  } else if (w.attachEvent) {
-    w.attachEvent("onresize", callMedia);
-  }
-})(this);
\ No newline at end of file
diff --git a/profiles/wcm_base/libraries/respondjs/dest/respond.min.js b/profiles/wcm_base/libraries/respondjs/dest/respond.min.js
deleted file mode 100644
index e8d6207f760a842cc7a4f2be3e856e54c6eed207..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/libraries/respondjs/dest/respond.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*! Respond.js v1.4.2: min/max-width media query polyfill
- * Copyright 2014 Scott Jehl
- * Licensed under MIT
- * http://j.mp/respondjs */
-
-!function(a){"use strict";a.matchMedia=a.matchMedia||function(a){var b,c=a.documentElement,d=c.firstElementChild||c.firstChild,e=a.createElement("body"),f=a.createElement("div");return f.id="mq-test-1",f.style.cssText="position:absolute;top:-100em",e.style.background="none",e.appendChild(f),function(a){return f.innerHTML='&shy;<style media="'+a+'"> #mq-test-1 { width: 42px; }</style>',c.insertBefore(e,d),b=42===f.offsetWidth,c.removeChild(e),{matches:b,media:a}}}(a.document)}(this),function(a){"use strict";function b(){v(!0)}var c={};a.respond=c,c.update=function(){};var d=[],e=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}(),f=function(a,b){var c=e();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))},g=function(a){return a.replace(c.regex.minmaxwh,"").match(c.regex.other)};if(c.ajax=f,c.queue=d,c.unsupportedmq=g,c.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,comments:/\/\*[^*]*\*+([^/][^*]*\*+)*\//gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,maxw:/\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,minmaxwh:/\(\s*m(in|ax)\-(height|width)\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/gi,other:/\([^\)]*\)/g},c.mediaQueriesSupported=a.matchMedia&&null!==a.matchMedia("only all")&&a.matchMedia("only all").matches,!c.mediaQueriesSupported){var h,i,j,k=a.document,l=k.documentElement,m=[],n=[],o=[],p={},q=30,r=k.getElementsByTagName("head")[0]||l,s=k.getElementsByTagName("base")[0],t=r.getElementsByTagName("link"),u=function(){var a,b=k.createElement("div"),c=k.body,d=l.style.fontSize,e=c&&c.style.fontSize,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",c||(c=f=k.createElement("body"),c.style.background="none"),l.style.fontSize="100%",c.style.fontSize="100%",c.appendChild(b),f&&l.insertBefore(c,l.firstChild),a=b.offsetWidth,f?l.removeChild(c):c.removeChild(b),l.style.fontSize=d,e&&(c.style.fontSize=e),a=j=parseFloat(a)},v=function(b){var c="clientWidth",d=l[c],e="CSS1Compat"===k.compatMode&&d||k.body[c]||d,f={},g=t[t.length-1],p=(new Date).getTime();if(b&&h&&q>p-h)return a.clearTimeout(i),i=a.setTimeout(v,q),void 0;h=p;for(var s in m)if(m.hasOwnProperty(s)){var w=m[s],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?j||u():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?j||u():1)),w.hasquery&&(z&&A||!(z||e>=x)||!(A||y>=e))||(f[w.media]||(f[w.media]=[]),f[w.media].push(n[w.rules]))}for(var C in o)o.hasOwnProperty(C)&&o[C]&&o[C].parentNode===r&&r.removeChild(o[C]);o.length=0;for(var D in f)if(f.hasOwnProperty(D)){var E=k.createElement("style"),F=f[D].join("\n");E.type="text/css",E.media=D,r.insertBefore(E,g.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(k.createTextNode(F)),o.push(E)}},w=function(a,b,d){var e=a.replace(c.regex.comments,"").replace(c.regex.keyframes,"").match(c.regex.media),f=e&&e.length||0;b=b.substring(0,b.lastIndexOf("/"));var h=function(a){return a.replace(c.regex.urls,"$1"+b+"$2$3")},i=!f&&d;b.length&&(b+="/"),i&&(f=1);for(var j=0;f>j;j++){var k,l,o,p;i?(k=d,n.push(h(a))):(k=e[j].match(c.regex.findStyles)&&RegExp.$1,n.push(RegExp.$2&&h(RegExp.$2))),o=k.split(","),p=o.length;for(var q=0;p>q;q++)l=o[q],g(l)||m.push({media:l.split("(")[0].match(c.regex.only)&&RegExp.$2||"all",rules:n.length-1,hasquery:l.indexOf("(")>-1,minw:l.match(c.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:l.match(c.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}v()},x=function(){if(d.length){var b=d.shift();f(b.href,function(c){w(c,b.href,b.media),p[b.href]=!0,a.setTimeout(function(){x()},0)})}},y=function(){for(var b=0;b<t.length;b++){var c=t[b],e=c.href,f=c.media,g=c.rel&&"stylesheet"===c.rel.toLowerCase();e&&g&&!p[e]&&(c.styleSheet&&c.styleSheet.rawCssText?(w(c.styleSheet.rawCssText,e,f),p[e]=!0):(!/^([a-zA-Z:]*\/\/)/.test(e)&&!s||e.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&("//"===e.substring(0,2)&&(e=a.location.protocol+e),d.push({href:e,media:f})))}x()};y(),c.update=y,c.getEmValue=u,a.addEventListener?a.addEventListener("resize",b,!1):a.attachEvent&&a.attachEvent("onresize",b)}}(this);
\ No newline at end of file
diff --git a/profiles/wcm_base/libraries/respondjs/dest/respond.src.js b/profiles/wcm_base/libraries/respondjs/dest/respond.src.js
deleted file mode 100644
index 640f0183eb3b4261c7dfaee8ba16b3723cce7604..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/libraries/respondjs/dest/respond.src.js
+++ /dev/null
@@ -1,237 +0,0 @@
-/*! Respond.js v1.4.2: min/max-width media query polyfill
- * Copyright 2014 Scott Jehl
- * Licensed under MIT
- * http://j.mp/respondjs */
-
-/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */
-/*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */
-(function(w) {
-  "use strict";
-  w.matchMedia = w.matchMedia || function(doc, undefined) {
-    var bool, docElem = doc.documentElement, refNode = docElem.firstElementChild || docElem.firstChild, fakeBody = doc.createElement("body"), div = doc.createElement("div");
-    div.id = "mq-test-1";
-    div.style.cssText = "position:absolute;top:-100em";
-    fakeBody.style.background = "none";
-    fakeBody.appendChild(div);
-    return function(q) {
-      div.innerHTML = '&shy;<style media="' + q + '"> #mq-test-1 { width: 42px; }</style>';
-      docElem.insertBefore(fakeBody, refNode);
-      bool = div.offsetWidth === 42;
-      docElem.removeChild(fakeBody);
-      return {
-        matches: bool,
-        media: q
-      };
-    };
-  }(w.document);
-})(this);
-
-(function(w) {
-  "use strict";
-  var respond = {};
-  w.respond = respond;
-  respond.update = function() {};
-  var requestQueue = [], xmlHttp = function() {
-    var xmlhttpmethod = false;
-    try {
-      xmlhttpmethod = new w.XMLHttpRequest();
-    } catch (e) {
-      xmlhttpmethod = new w.ActiveXObject("Microsoft.XMLHTTP");
-    }
-    return function() {
-      return xmlhttpmethod;
-    };
-  }(), ajax = function(url, callback) {
-    var req = xmlHttp();
-    if (!req) {
-      return;
-    }
-    req.open("GET", url, true);
-    req.onreadystatechange = function() {
-      if (req.readyState !== 4 || req.status !== 200 && req.status !== 304) {
-        return;
-      }
-      callback(req.responseText);
-    };
-    if (req.readyState === 4) {
-      return;
-    }
-    req.send(null);
-  }, isUnsupportedMediaQuery = function(query) {
-    return query.replace(respond.regex.minmaxwh, "").match(respond.regex.other);
-  };
-  respond.ajax = ajax;
-  respond.queue = requestQueue;
-  respond.unsupportedmq = isUnsupportedMediaQuery;
-  respond.regex = {
-    media: /@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,
-    keyframes: /@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,
-    comments: /\/\*[^*]*\*+([^/][^*]*\*+)*\//gi,
-    urls: /(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,
-    findStyles: /@media *([^\{]+)\{([\S\s]+?)$/,
-    only: /(only\s+)?([a-zA-Z]+)\s?/,
-    minw: /\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,
-    maxw: /\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,
-    minmaxwh: /\(\s*m(in|ax)\-(height|width)\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/gi,
-    other: /\([^\)]*\)/g
-  };
-  respond.mediaQueriesSupported = w.matchMedia && w.matchMedia("only all") !== null && w.matchMedia("only all").matches;
-  if (respond.mediaQueriesSupported) {
-    return;
-  }
-  var doc = w.document, docElem = doc.documentElement, mediastyles = [], rules = [], appendedEls = [], parsedSheets = {}, resizeThrottle = 30, head = doc.getElementsByTagName("head")[0] || docElem, base = doc.getElementsByTagName("base")[0], links = head.getElementsByTagName("link"), lastCall, resizeDefer, eminpx, getEmValue = function() {
-    var ret, div = doc.createElement("div"), body = doc.body, originalHTMLFontSize = docElem.style.fontSize, originalBodyFontSize = body && body.style.fontSize, fakeUsed = false;
-    div.style.cssText = "position:absolute;font-size:1em;width:1em";
-    if (!body) {
-      body = fakeUsed = doc.createElement("body");
-      body.style.background = "none";
-    }
-    docElem.style.fontSize = "100%";
-    body.style.fontSize = "100%";
-    body.appendChild(div);
-    if (fakeUsed) {
-      docElem.insertBefore(body, docElem.firstChild);
-    }
-    ret = div.offsetWidth;
-    if (fakeUsed) {
-      docElem.removeChild(body);
-    } else {
-      body.removeChild(div);
-    }
-    docElem.style.fontSize = originalHTMLFontSize;
-    if (originalBodyFontSize) {
-      body.style.fontSize = originalBodyFontSize;
-    }
-    ret = eminpx = parseFloat(ret);
-    return ret;
-  }, applyMedia = function(fromResize) {
-    var name = "clientWidth", docElemProp = docElem[name], currWidth = doc.compatMode === "CSS1Compat" && docElemProp || doc.body[name] || docElemProp, styleBlocks = {}, lastLink = links[links.length - 1], now = new Date().getTime();
-    if (fromResize && lastCall && now - lastCall < resizeThrottle) {
-      w.clearTimeout(resizeDefer);
-      resizeDefer = w.setTimeout(applyMedia, resizeThrottle);
-      return;
-    } else {
-      lastCall = now;
-    }
-    for (var i in mediastyles) {
-      if (mediastyles.hasOwnProperty(i)) {
-        var thisstyle = mediastyles[i], min = thisstyle.minw, max = thisstyle.maxw, minnull = min === null, maxnull = max === null, em = "em";
-        if (!!min) {
-          min = parseFloat(min) * (min.indexOf(em) > -1 ? eminpx || getEmValue() : 1);
-        }
-        if (!!max) {
-          max = parseFloat(max) * (max.indexOf(em) > -1 ? eminpx || getEmValue() : 1);
-        }
-        if (!thisstyle.hasquery || (!minnull || !maxnull) && (minnull || currWidth >= min) && (maxnull || currWidth <= max)) {
-          if (!styleBlocks[thisstyle.media]) {
-            styleBlocks[thisstyle.media] = [];
-          }
-          styleBlocks[thisstyle.media].push(rules[thisstyle.rules]);
-        }
-      }
-    }
-    for (var j in appendedEls) {
-      if (appendedEls.hasOwnProperty(j)) {
-        if (appendedEls[j] && appendedEls[j].parentNode === head) {
-          head.removeChild(appendedEls[j]);
-        }
-      }
-    }
-    appendedEls.length = 0;
-    for (var k in styleBlocks) {
-      if (styleBlocks.hasOwnProperty(k)) {
-        var ss = doc.createElement("style"), css = styleBlocks[k].join("\n");
-        ss.type = "text/css";
-        ss.media = k;
-        head.insertBefore(ss, lastLink.nextSibling);
-        if (ss.styleSheet) {
-          ss.styleSheet.cssText = css;
-        } else {
-          ss.appendChild(doc.createTextNode(css));
-        }
-        appendedEls.push(ss);
-      }
-    }
-  }, translate = function(styles, href, media) {
-    var qs = styles.replace(respond.regex.comments, "").replace(respond.regex.keyframes, "").match(respond.regex.media), ql = qs && qs.length || 0;
-    href = href.substring(0, href.lastIndexOf("/"));
-    var repUrls = function(css) {
-      return css.replace(respond.regex.urls, "$1" + href + "$2$3");
-    }, useMedia = !ql && media;
-    if (href.length) {
-      href += "/";
-    }
-    if (useMedia) {
-      ql = 1;
-    }
-    for (var i = 0; i < ql; i++) {
-      var fullq, thisq, eachq, eql;
-      if (useMedia) {
-        fullq = media;
-        rules.push(repUrls(styles));
-      } else {
-        fullq = qs[i].match(respond.regex.findStyles) && RegExp.$1;
-        rules.push(RegExp.$2 && repUrls(RegExp.$2));
-      }
-      eachq = fullq.split(",");
-      eql = eachq.length;
-      for (var j = 0; j < eql; j++) {
-        thisq = eachq[j];
-        if (isUnsupportedMediaQuery(thisq)) {
-          continue;
-        }
-        mediastyles.push({
-          media: thisq.split("(")[0].match(respond.regex.only) && RegExp.$2 || "all",
-          rules: rules.length - 1,
-          hasquery: thisq.indexOf("(") > -1,
-          minw: thisq.match(respond.regex.minw) && parseFloat(RegExp.$1) + (RegExp.$2 || ""),
-          maxw: thisq.match(respond.regex.maxw) && parseFloat(RegExp.$1) + (RegExp.$2 || "")
-        });
-      }
-    }
-    applyMedia();
-  }, makeRequests = function() {
-    if (requestQueue.length) {
-      var thisRequest = requestQueue.shift();
-      ajax(thisRequest.href, function(styles) {
-        translate(styles, thisRequest.href, thisRequest.media);
-        parsedSheets[thisRequest.href] = true;
-        w.setTimeout(function() {
-          makeRequests();
-        }, 0);
-      });
-    }
-  }, ripCSS = function() {
-    for (var i = 0; i < links.length; i++) {
-      var sheet = links[i], href = sheet.href, media = sheet.media, isCSS = sheet.rel && sheet.rel.toLowerCase() === "stylesheet";
-      if (!!href && isCSS && !parsedSheets[href]) {
-        if (sheet.styleSheet && sheet.styleSheet.rawCssText) {
-          translate(sheet.styleSheet.rawCssText, href, media);
-          parsedSheets[href] = true;
-        } else {
-          if (!/^([a-zA-Z:]*\/\/)/.test(href) && !base || href.replace(RegExp.$1, "").split("/")[0] === w.location.host) {
-            if (href.substring(0, 2) === "//") {
-              href = w.location.protocol + href;
-            }
-            requestQueue.push({
-              href: href,
-              media: media
-            });
-          }
-        }
-      }
-    }
-    makeRequests();
-  };
-  ripCSS();
-  respond.update = ripCSS;
-  respond.getEmValue = getEmValue;
-  function callMedia() {
-    applyMedia(true);
-  }
-  if (w.addEventListener) {
-    w.addEventListener("resize", callMedia, false);
-  } else if (w.attachEvent) {
-    w.attachEvent("onresize", callMedia);
-  }
-})(this);
\ No newline at end of file
diff --git a/profiles/wcm_base/libraries/respondjs/package.json b/profiles/wcm_base/libraries/respondjs/package.json
deleted file mode 100644
index 9d7f5b218ec955254ca9c555fd3ba7a588a5e663..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/libraries/respondjs/package.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-	"name": "Respond.js",
-	"description": "min/max-width media query polyfill",
-	"version": "1.4.2",
-	"homepage": "https://github.com/scottjehl/Respond",
-	"homepageShortened": "http://j.mp/respondjs",
-	"author": {
-		"name": "Scott Jehl",
-		"email": "scott@filamentgroup.com",
-		"url": "http://filamentgroup.com"
-	},
-	"repository": {
-		"type": "git",
-		"url": "https://github.com/scottjehl/Respond.git"
-	},
-	"bugs": {
-		"url": "https://github.com/scottjehl/Respond/issues"
-	},
-	"licenses": [
-		{
-			"type": "MIT",
-			"url": "https://github.com/scottjehl/Respond/blob/master/LICENSE-MIT"
-		}
-	],
-	"devDependencies": {
-		"grunt-cli":"~0.1",
-		"grunt": "~0.4.0",
-		"grunt-contrib-jshint": "~0.2.0",
-		"grunt-contrib-qunit": "~0.3.0",
-		"grunt-contrib-uglify": "0.2.7"
-	}
-
-}
diff --git a/profiles/wcm_base/libraries/respondjs/src/matchmedia.addListener.js b/profiles/wcm_base/libraries/respondjs/src/matchmedia.addListener.js
deleted file mode 100644
index 829091577f4e9cb19dd6d7f65aef8d2a1c378903..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/libraries/respondjs/src/matchmedia.addListener.js
+++ /dev/null
@@ -1,76 +0,0 @@
-/*! matchMedia() polyfill addListener/removeListener extension. Author & copyright (c) 2012: Scott Jehl. Dual MIT/BSD license */
-(function( w ){
-	"use strict";
-	// Bail out for browsers that have addListener support
-	if (w.matchMedia && w.matchMedia('all').addListener) {
-		return false;
-	}
-
-	var localMatchMedia = w.matchMedia,
-		hasMediaQueries = localMatchMedia('only all').matches,
-		isListening     = false,
-		timeoutID       = 0,    // setTimeout for debouncing 'handleChange'
-		queries         = [],   // Contains each 'mql' and associated 'listeners' if 'addListener' is used
-		handleChange    = function(evt) {
-			// Debounce
-			w.clearTimeout(timeoutID);
-
-			timeoutID = w.setTimeout(function() {
-				for (var i = 0, il = queries.length; i < il; i++) {
-					var mql         = queries[i].mql,
-						listeners   = queries[i].listeners || [],
-						matches     = localMatchMedia(mql.media).matches;
-
-					// Update mql.matches value and call listeners
-					// Fire listeners only if transitioning to or from matched state
-					if (matches !== mql.matches) {
-						mql.matches = matches;
-
-						for (var j = 0, jl = listeners.length; j < jl; j++) {
-							listeners[j].call(w, mql);
-						}
-					}
-				}
-			}, 30);
-		};
-
-	w.matchMedia = function(media) {
-		var mql         = localMatchMedia(media),
-			listeners   = [],
-			index       = 0;
-
-		mql.addListener = function(listener) {
-			// Changes would not occur to css media type so return now (Affects IE <= 8)
-			if (!hasMediaQueries) {
-				return;
-			}
-
-			// Set up 'resize' listener for browsers that support CSS3 media queries (Not for IE <= 8)
-			// There should only ever be 1 resize listener running for performance
-			if (!isListening) {
-				isListening = true;
-				w.addEventListener('resize', handleChange, true);
-			}
-
-			// Push object only if it has not been pushed already
-			if (index === 0) {
-				index = queries.push({
-					mql         : mql,
-					listeners   : listeners
-				});
-			}
-
-			listeners.push(listener);
-		};
-
-		mql.removeListener = function(listener) {
-			for (var i = 0, il = listeners.length; i < il; i++){
-				if (listeners[i] === listener){
-					listeners.splice(i, 1);
-				}
-			}
-		};
-
-		return mql;
-	};
-}( this ));
diff --git a/profiles/wcm_base/libraries/respondjs/src/matchmedia.polyfill.js b/profiles/wcm_base/libraries/respondjs/src/matchmedia.polyfill.js
deleted file mode 100644
index 12d2b95f283670807b14ddabd3ca47a04e3adcf8..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/libraries/respondjs/src/matchmedia.polyfill.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */
-/*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */
-
-(function(w){
-	"use strict";
-	w.matchMedia = w.matchMedia || (function( doc, undefined ) {
-
-		var bool,
-			docElem = doc.documentElement,
-			refNode = docElem.firstElementChild || docElem.firstChild,
-			// fakeBody required for <FF4 when executed in <head>
-			fakeBody = doc.createElement( "body" ),
-			div = doc.createElement( "div" );
-
-		div.id = "mq-test-1";
-		div.style.cssText = "position:absolute;top:-100em";
-		fakeBody.style.background = "none";
-		fakeBody.appendChild(div);
-
-		return function(q){
-
-			div.innerHTML = "&shy;<style media=\"" + q + "\"> #mq-test-1 { width: 42px; }</style>";
-
-			docElem.insertBefore( fakeBody, refNode );
-			bool = div.offsetWidth === 42;
-			docElem.removeChild( fakeBody );
-
-			return {
-				matches: bool,
-				media: q
-			};
-
-		};
-
-	}( w.document ));
-}( this ));
diff --git a/profiles/wcm_base/libraries/respondjs/src/respond.js b/profiles/wcm_base/libraries/respondjs/src/respond.js
deleted file mode 100644
index 58883e4bc8102b6b5d1969f3e21a282c1b8d0d7b..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/libraries/respondjs/src/respond.js
+++ /dev/null
@@ -1,353 +0,0 @@
-/* Respond.js: min/max-width media query polyfill. (c) Scott Jehl. MIT Lic. j.mp/respondjs  */
-(function( w ){
-
-	"use strict";
-
-	//exposed namespace
-	var respond = {};
-	w.respond = respond;
-
-	//define update even in native-mq-supporting browsers, to avoid errors
-	respond.update = function(){};
-
-	//define ajax obj
-	var requestQueue = [],
-		xmlHttp = (function() {
-			var xmlhttpmethod = false;
-			try {
-				xmlhttpmethod = new w.XMLHttpRequest();
-			}
-			catch( e ){
-				xmlhttpmethod = new w.ActiveXObject( "Microsoft.XMLHTTP" );
-			}
-			return function(){
-				return xmlhttpmethod;
-			};
-		})(),
-
-		//tweaked Ajax functions from Quirksmode
-		ajax = function( url, callback ) {
-			var req = xmlHttp();
-			if (!req){
-				return;
-			}
-			req.open( "GET", url, true );
-			req.onreadystatechange = function () {
-				if ( req.readyState !== 4 || req.status !== 200 && req.status !== 304 ){
-					return;
-				}
-				callback( req.responseText );
-			};
-			if ( req.readyState === 4 ){
-				return;
-			}
-			req.send( null );
-		},
-		isUnsupportedMediaQuery = function( query ) {
-			return query.replace( respond.regex.minmaxwh, '' ).match( respond.regex.other );
-		};
-
-	//expose for testing
-	respond.ajax = ajax;
-	respond.queue = requestQueue;
-	respond.unsupportedmq = isUnsupportedMediaQuery;
-	respond.regex = {
-		media: /@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,
-		keyframes: /@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,
-		comments: /\/\*[^*]*\*+([^/][^*]*\*+)*\//gi,
-		urls: /(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,
-		findStyles: /@media *([^\{]+)\{([\S\s]+?)$/,
-		only: /(only\s+)?([a-zA-Z]+)\s?/,
-		minw: /\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,
-		maxw: /\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,
-		minmaxwh: /\(\s*m(in|ax)\-(height|width)\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/gi,
-		other: /\([^\)]*\)/g
-	};
-
-	//expose media query support flag for external use
-	respond.mediaQueriesSupported = w.matchMedia && w.matchMedia( "only all" ) !== null && w.matchMedia( "only all" ).matches;
-
-	//if media queries are supported, exit here
-	if( respond.mediaQueriesSupported ){
-		return;
-	}
-
-	//define vars
-	var doc = w.document,
-		docElem = doc.documentElement,
-		mediastyles = [],
-		rules = [],
-		appendedEls = [],
-		parsedSheets = {},
-		resizeThrottle = 30,
-		head = doc.getElementsByTagName( "head" )[0] || docElem,
-		base = doc.getElementsByTagName( "base" )[0],
-		links = head.getElementsByTagName( "link" ),
-
-		lastCall,
-		resizeDefer,
-
-		//cached container for 1em value, populated the first time it's needed
-		eminpx,
-
-		// returns the value of 1em in pixels
-		getEmValue = function() {
-			var ret,
-				div = doc.createElement('div'),
-				body = doc.body,
-				originalHTMLFontSize = docElem.style.fontSize,
-				originalBodyFontSize = body && body.style.fontSize,
-				fakeUsed = false;
-
-			div.style.cssText = "position:absolute;font-size:1em;width:1em";
-
-			if( !body ){
-				body = fakeUsed = doc.createElement( "body" );
-				body.style.background = "none";
-			}
-
-			// 1em in a media query is the value of the default font size of the browser
-			// reset docElem and body to ensure the correct value is returned
-			docElem.style.fontSize = "100%";
-			body.style.fontSize = "100%";
-
-			body.appendChild( div );
-
-			if( fakeUsed ){
-				docElem.insertBefore( body, docElem.firstChild );
-			}
-
-			ret = div.offsetWidth;
-
-			if( fakeUsed ){
-				docElem.removeChild( body );
-			}
-			else {
-				body.removeChild( div );
-			}
-
-			// restore the original values
-			docElem.style.fontSize = originalHTMLFontSize;
-			if( originalBodyFontSize ) {
-				body.style.fontSize = originalBodyFontSize;
-			}
-
-
-			//also update eminpx before returning
-			ret = eminpx = parseFloat(ret);
-
-			return ret;
-		},
-
-		//enable/disable styles
-		applyMedia = function( fromResize ){
-			var name = "clientWidth",
-				docElemProp = docElem[ name ],
-				currWidth = doc.compatMode === "CSS1Compat" && docElemProp || doc.body[ name ] || docElemProp,
-				styleBlocks	= {},
-				lastLink = links[ links.length-1 ],
-				now = (new Date()).getTime();
-
-			//throttle resize calls
-			if( fromResize && lastCall && now - lastCall < resizeThrottle ){
-				w.clearTimeout( resizeDefer );
-				resizeDefer = w.setTimeout( applyMedia, resizeThrottle );
-				return;
-			}
-			else {
-				lastCall = now;
-			}
-
-			for( var i in mediastyles ){
-				if( mediastyles.hasOwnProperty( i ) ){
-					var thisstyle = mediastyles[ i ],
-						min = thisstyle.minw,
-						max = thisstyle.maxw,
-						minnull = min === null,
-						maxnull = max === null,
-						em = "em";
-
-					if( !!min ){
-						min = parseFloat( min ) * ( min.indexOf( em ) > -1 ? ( eminpx || getEmValue() ) : 1 );
-					}
-					if( !!max ){
-						max = parseFloat( max ) * ( max.indexOf( em ) > -1 ? ( eminpx || getEmValue() ) : 1 );
-					}
-
-					// if there's no media query at all (the () part), or min or max is not null, and if either is present, they're true
-					if( !thisstyle.hasquery || ( !minnull || !maxnull ) && ( minnull || currWidth >= min ) && ( maxnull || currWidth <= max ) ){
-						if( !styleBlocks[ thisstyle.media ] ){
-							styleBlocks[ thisstyle.media ] = [];
-						}
-						styleBlocks[ thisstyle.media ].push( rules[ thisstyle.rules ] );
-					}
-				}
-			}
-
-			//remove any existing respond style element(s)
-			for( var j in appendedEls ){
-				if( appendedEls.hasOwnProperty( j ) ){
-					if( appendedEls[ j ] && appendedEls[ j ].parentNode === head ){
-						head.removeChild( appendedEls[ j ] );
-					}
-				}
-			}
-			appendedEls.length = 0;
-
-			//inject active styles, grouped by media type
-			for( var k in styleBlocks ){
-				if( styleBlocks.hasOwnProperty( k ) ){
-					var ss = doc.createElement( "style" ),
-						css = styleBlocks[ k ].join( "\n" );
-
-					ss.type = "text/css";
-					ss.media = k;
-
-					//originally, ss was appended to a documentFragment and sheets were appended in bulk.
-					//this caused crashes in IE in a number of circumstances, such as when the HTML element had a bg image set, so appending beforehand seems best. Thanks to @dvelyk for the initial research on this one!
-					head.insertBefore( ss, lastLink.nextSibling );
-
-					if ( ss.styleSheet ){
-						ss.styleSheet.cssText = css;
-					}
-					else {
-						ss.appendChild( doc.createTextNode( css ) );
-					}
-
-					//push to appendedEls to track for later removal
-					appendedEls.push( ss );
-				}
-			}
-		},
-		//find media blocks in css text, convert to style blocks
-		translate = function( styles, href, media ){
-			var qs = styles.replace( respond.regex.comments, '' )
-					.replace( respond.regex.keyframes, '' )
-					.match( respond.regex.media ),
-				ql = qs && qs.length || 0;
-
-			//try to get CSS path
-			href = href.substring( 0, href.lastIndexOf( "/" ) );
-
-			var repUrls = function( css ){
-					return css.replace( respond.regex.urls, "$1" + href + "$2$3" );
-				},
-				useMedia = !ql && media;
-
-			//if path exists, tack on trailing slash
-			if( href.length ){ href += "/"; }
-
-			//if no internal queries exist, but media attr does, use that
-			//note: this currently lacks support for situations where a media attr is specified on a link AND
-				//its associated stylesheet has internal CSS media queries.
-				//In those cases, the media attribute will currently be ignored.
-			if( useMedia ){
-				ql = 1;
-			}
-
-			for( var i = 0; i < ql; i++ ){
-				var fullq, thisq, eachq, eql;
-
-				//media attr
-				if( useMedia ){
-					fullq = media;
-					rules.push( repUrls( styles ) );
-				}
-				//parse for styles
-				else{
-					fullq = qs[ i ].match( respond.regex.findStyles ) && RegExp.$1;
-					rules.push( RegExp.$2 && repUrls( RegExp.$2 ) );
-				}
-
-				eachq = fullq.split( "," );
-				eql = eachq.length;
-
-				for( var j = 0; j < eql; j++ ){
-					thisq = eachq[ j ];
-
-					if( isUnsupportedMediaQuery( thisq ) ) {
-						continue;
-					}
-
-					mediastyles.push( {
-						media : thisq.split( "(" )[ 0 ].match( respond.regex.only ) && RegExp.$2 || "all",
-						rules : rules.length - 1,
-						hasquery : thisq.indexOf("(") > -1,
-						minw : thisq.match( respond.regex.minw ) && parseFloat( RegExp.$1 ) + ( RegExp.$2 || "" ),
-						maxw : thisq.match( respond.regex.maxw ) && parseFloat( RegExp.$1 ) + ( RegExp.$2 || "" )
-					} );
-				}
-			}
-
-			applyMedia();
-		},
-
-		//recurse through request queue, get css text
-		makeRequests = function(){
-			if( requestQueue.length ){
-				var thisRequest = requestQueue.shift();
-
-				ajax( thisRequest.href, function( styles ){
-					translate( styles, thisRequest.href, thisRequest.media );
-					parsedSheets[ thisRequest.href ] = true;
-
-					// by wrapping recursive function call in setTimeout
-					// we prevent "Stack overflow" error in IE7
-					w.setTimeout(function(){ makeRequests(); },0);
-				} );
-			}
-		},
-
-		//loop stylesheets, send text content to translate
-		ripCSS = function(){
-
-			for( var i = 0; i < links.length; i++ ){
-				var sheet = links[ i ],
-				href = sheet.href,
-				media = sheet.media,
-				isCSS = sheet.rel && sheet.rel.toLowerCase() === "stylesheet";
-
-				//only links plz and prevent re-parsing
-				if( !!href && isCSS && !parsedSheets[ href ] ){
-					// selectivizr exposes css through the rawCssText expando
-					if (sheet.styleSheet && sheet.styleSheet.rawCssText) {
-						translate( sheet.styleSheet.rawCssText, href, media );
-						parsedSheets[ href ] = true;
-					} else {
-						if( (!/^([a-zA-Z:]*\/\/)/.test( href ) && !base) ||
-							href.replace( RegExp.$1, "" ).split( "/" )[0] === w.location.host ){
-							// IE7 doesn't handle urls that start with '//' for ajax request
-							// manually add in the protocol
-							if ( href.substring(0,2) === "//" ) { href = w.location.protocol + href; }
-							requestQueue.push( {
-								href: href,
-								media: media
-							} );
-						}
-					}
-				}
-			}
-			makeRequests();
-		};
-
-	//translate CSS
-	ripCSS();
-
-	//expose update for re-running respond later on
-	respond.update = ripCSS;
-
-	//expose getEmValue
-	respond.getEmValue = getEmValue;
-
-	//adjust on resize
-	function callMedia(){
-		applyMedia( true );
-	}
-
-	if( w.addEventListener ){
-		w.addEventListener( "resize", callMedia, false );
-	}
-	else if( w.attachEvent ){
-		w.attachEvent( "onresize", callMedia );
-	}
-})(this);
diff --git a/profiles/wcm_base/libraries/respondjs/test/test.css b/profiles/wcm_base/libraries/respondjs/test/test.css
deleted file mode 100644
index 1ea38a378309160e9a01d429d2ff88f80fc7dcd6..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/libraries/respondjs/test/test.css
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
-This is just a test file for making sure the script is working properly.
-If it is, the media queries below will change the body's background color depending on the browser width.
-For a realistic use case for media queries: read up on Responsive Web Design: 
-http://www.alistapart.com/articles/responsive-web-design/
-*/
-
-body {
-	background: black;
-	color: #333;
-	font-family: Helvetica, sans-serif;
-}
-p {
-	width: 60%;
-	min-width: 18.75em; /* 300px @ 16px */
-	max-width: 43.75em; /* 700px @ 16px */
-	margin: 2em auto;
-	background: #fff;
-	padding: 20px;
-}
-a {
-	color: #333;
-}
-
-/* hide the attribute-test element. test2.css will show it */
-#attribute-test {
-	display: none;
-}
-
-/*styles for 300 and up @ 16px!*/
-/* The max-width declaration below blocks this from ever working */
-@media only screen and (min-width: 18.75em){
-	body {
-		background: yellow;
-	}
-}
-
-
-/*styles for 480px - 620px @ 16px!*/
-@media only screen and (min-width: 30em) and (max-width: 38.75em) {
-	body {
-		background: green;
-	}
-}
-
-
-
-
-@media screen and (min-width: 38.75em),only print,projector{body{background:red;}}
-
-/*styles for 800px and up @ 16px!*/
-@media screen and (min-width: 50em){
-	body {
-		background: blue;
-	}
-}
-
-/*styles for 1100px and up @ 16px!*/
-@media screen and (min-width: 68.75em){
-	body {
-		background: orange;
-	}
-}
-
-/*one with pixels too! */
-/* NOTE - if the user were to increase his browser font size to 20px (chrome: Large), 
-			the above (68.75em) media query will be incorrectly ignored!!!
-			
-			Assuming 20px browser setting, we would expect to see this progression:
-			yellow > green > red > blue > NAVY > orange
-			
-			However, the orange never kicks in... which seems like a browser bug!
-			Here's the math (assuming 20px browser setting):
-			1200/20 = 60em     <     68.75em
-*/
-@media screen and (min-width: 1200px){
-	body {
-		background: navy;
-	}
-}
-
-@media only screen and (min-width: 1250px) and (min--moz-device-pixel-ratio: 1.5),
-	only screen and (min-width: 1250px) and (-moz-min-device-pixel-ratio: 1.5),
-	only screen and (min-width: 1250px) and (-o-min-device-pixel-ratio: 3/2),
-	only screen and (min-width: 1250px) and (-webkit-min-device-pixel-ratio: 1.5),
-	only screen and (min-width: 1250px) and (min-device-pixel-ratio: 1.5),
-	only screen and (min-width: 1250px) and (min-resolution: 1.5dppx),
-	screen and (min-width: 1250px) {
-
-	body {
-		background-color: pink;
-	}
-}
\ No newline at end of file
diff --git a/profiles/wcm_base/libraries/respondjs/test/test.html b/profiles/wcm_base/libraries/respondjs/test/test.html
deleted file mode 100644
index 8c29422030792d8542bcff6cc230a9370586f955..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/libraries/respondjs/test/test.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-	<meta charset="utf-8" />
-	<title>Respond JS Test Page</title>
-	<link href="test.css" rel="stylesheet"/>
-	<link href="test2.css" media="screen and (min-width: 37.5em)" rel="stylesheet"/> <!-- 37.5em = 600px @ 16px -->
-	<script src="../dest/respond.src.js"></script>
-</head>
-<body>
-	<p>This is just a visual test file, and an ugly one at that! For unit tests, visit the <a href="unit/"> Respond.js unit test suite</a></p>
-
-	<p>The media queries in the included CSS file simply change the body's background color depending on the browser width. If you see any colors aside from black, then the media queries are working in your browser. You can resize your browser window to see it change on the fly.</p>
-
-	<p>For a realistic use case for media queries: read up on <a href="http://www.alistapart.com/articles/responsive-web-design/">Responsive Web Design</a></p>
-
-	<p id="attribute-test">Media-attributes are working too! This should be visible above 37.5em.</p>
-
-</body>
-</html>
diff --git a/profiles/wcm_base/libraries/respondjs/test/test2.css b/profiles/wcm_base/libraries/respondjs/test/test2.css
deleted file mode 100644
index 79877fd11bdbf62a52e47cfa4b38c6ae02d9f418..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/libraries/respondjs/test/test2.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* this stylesheet was referenced via a link that had a media attr defined
-it should only apply on screen > 600px */
-#attribute-test {
-	display: block;
-	color: #fff;
-	background: black;
-	text-align: center;
-}
\ No newline at end of file
diff --git a/profiles/wcm_base/libraries/respondjs/test/unit/index.html b/profiles/wcm_base/libraries/respondjs/test/unit/index.html
deleted file mode 100644
index 2d9bb0810edc4031544e17ac39f8f7f50b3d6187..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/libraries/respondjs/test/unit/index.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-	<meta charset="utf-8" />
-	<title>Respond.js Test Suite</title>
-	<link rel="stylesheet" href="qunit/qunit.css" media="screen">
-	<script src="qunit/qunit.js"></script>
-	<link href="test.css" rel="stylesheet" />
-	<link href="test2.css" media="screen and (min-width: 950px)" rel="stylesheet" />
-	<link href="test3.css" media="screen and (min-width: 68.75em)" rel="stylesheet" />
-	<script src="../../dest/respond.src.js"></script>
-	<script src="tests.js"></script>
-
-</head>
-<body>
-	<h1 id="qunit-header">Respond.js Test Suite</h1>
-	<h2 id="qunit-banner"></h2>
-	<div id="qunit-testrunner-toolbar"></div>
-	<h2 id="qunit-userAgent"></h2>
-	<ol id="qunit-tests"></ol>
-	
-	<!-- tests must run in new window -->
-	<div id="launcher"></div>
-	
-	<!-- elem for applying css via queries -->
-	<div id="testelem" class="foo">test</div>
-	
-</body>
-</html>
\ No newline at end of file
diff --git a/profiles/wcm_base/libraries/respondjs/test/unit/qunit/qunit.css b/profiles/wcm_base/libraries/respondjs/test/unit/qunit/qunit.css
deleted file mode 100644
index 10fdca9a7146812aa0e996cbc0de0a454bbbdda1..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/libraries/respondjs/test/unit/qunit/qunit.css
+++ /dev/null
@@ -1,226 +0,0 @@
-/**
- * QUnit v1.3.0pre - A JavaScript Unit Testing Framework
- *
- * http://docs.jquery.com/QUnit
- *
- * Copyright (c) 2011 John Resig, Jörn Zaefferer
- * Dual licensed under the MIT (MIT-LICENSE.txt)
- * or GPL (GPL-LICENSE.txt) licenses.
- */
-
-/** Font Family and Sizes */
-
-#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
-	font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
-}
-
-#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
-#qunit-tests { font-size: smaller; }
-
-
-/** Resets */
-
-#qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult {
-	margin: 0;
-	padding: 0;
-}
-
-
-/** Header */
-
-#qunit-header {
-	padding: 0.5em 0 0.5em 1em;
-
-	color: #8699a4;
-	background-color: #0d3349;
-
-	font-size: 1.5em;
-	line-height: 1em;
-	font-weight: normal;
-
-	border-radius: 15px 15px 0 0;
-	-moz-border-radius: 15px 15px 0 0;
-	-webkit-border-top-right-radius: 15px;
-	-webkit-border-top-left-radius: 15px;
-}
-
-#qunit-header a {
-	text-decoration: none;
-	color: #c2ccd1;
-}
-
-#qunit-header a:hover,
-#qunit-header a:focus {
-	color: #fff;
-}
-
-#qunit-banner {
-	height: 5px;
-}
-
-#qunit-testrunner-toolbar {
-	padding: 0.5em 0 0.5em 2em;
-	color: #5E740B;
-	background-color: #eee;
-}
-
-#qunit-userAgent {
-	padding: 0.5em 0 0.5em 2.5em;
-	background-color: #2b81af;
-	color: #fff;
-	text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
-}
-
-
-/** Tests: Pass/Fail */
-
-#qunit-tests {
-	list-style-position: inside;
-}
-
-#qunit-tests li {
-	padding: 0.4em 0.5em 0.4em 2.5em;
-	border-bottom: 1px solid #fff;
-	list-style-position: inside;
-}
-
-#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running  {
-	display: none;
-}
-
-#qunit-tests li strong {
-	cursor: pointer;
-}
-
-#qunit-tests li a {
-	padding: 0.5em;
-	color: #c2ccd1;
-	text-decoration: none;
-}
-#qunit-tests li a:hover,
-#qunit-tests li a:focus {
-	color: #000;
-}
-
-#qunit-tests ol {
-	margin-top: 0.5em;
-	padding: 0.5em;
-
-	background-color: #fff;
-
-	border-radius: 15px;
-	-moz-border-radius: 15px;
-	-webkit-border-radius: 15px;
-
-	box-shadow: inset 0px 2px 13px #999;
-	-moz-box-shadow: inset 0px 2px 13px #999;
-	-webkit-box-shadow: inset 0px 2px 13px #999;
-}
-
-#qunit-tests table {
-	border-collapse: collapse;
-	margin-top: .2em;
-}
-
-#qunit-tests th {
-	text-align: right;
-	vertical-align: top;
-	padding: 0 .5em 0 0;
-}
-
-#qunit-tests td {
-	vertical-align: top;
-}
-
-#qunit-tests pre {
-	margin: 0;
-	white-space: pre-wrap;
-	word-wrap: break-word;
-}
-
-#qunit-tests del {
-	background-color: #e0f2be;
-	color: #374e0c;
-	text-decoration: none;
-}
-
-#qunit-tests ins {
-	background-color: #ffcaca;
-	color: #500;
-	text-decoration: none;
-}
-
-/*** Test Counts */
-
-#qunit-tests b.counts                       { color: black; }
-#qunit-tests b.passed                       { color: #5E740B; }
-#qunit-tests b.failed                       { color: #710909; }
-
-#qunit-tests li li {
-	margin: 0.5em;
-	padding: 0.4em 0.5em 0.4em 0.5em;
-	background-color: #fff;
-	border-bottom: none;
-	list-style-position: inside;
-}
-
-/*** Passing Styles */
-
-#qunit-tests li li.pass {
-	color: #5E740B;
-	background-color: #fff;
-	border-left: 26px solid #C6E746;
-}
-
-#qunit-tests .pass                          { color: #528CE0; background-color: #D2E0E6; }
-#qunit-tests .pass .test-name               { color: #366097; }
-
-#qunit-tests .pass .test-actual,
-#qunit-tests .pass .test-expected           { color: #999999; }
-
-#qunit-banner.qunit-pass                    { background-color: #C6E746; }
-
-/*** Failing Styles */
-
-#qunit-tests li li.fail {
-	color: #710909;
-	background-color: #fff;
-	border-left: 26px solid #EE5757;
-	white-space: pre;
-}
-
-#qunit-tests > li:last-child {
-	border-radius: 0 0 15px 15px;
-	-moz-border-radius: 0 0 15px 15px;
-	-webkit-border-bottom-right-radius: 15px;
-	-webkit-border-bottom-left-radius: 15px;
-}
-
-#qunit-tests .fail                          { color: #000000; background-color: #EE5757; }
-#qunit-tests .fail .test-name,
-#qunit-tests .fail .module-name             { color: #000000; }
-
-#qunit-tests .fail .test-actual             { color: #EE5757; }
-#qunit-tests .fail .test-expected           { color: green;   }
-
-#qunit-banner.qunit-fail                    { background-color: #EE5757; }
-
-
-/** Result */
-
-#qunit-testresult {
-	padding: 0.5em 0.5em 0.5em 2.5em;
-
-	color: #2b81af;
-	background-color: #D2E0E6;
-
-	border-bottom: 1px solid white;
-}
-
-/** Fixture */
-
-#qunit-fixture {
-	position: absolute;
-	top: -10000px;
-	left: -10000px;
-}
\ No newline at end of file
diff --git a/profiles/wcm_base/libraries/respondjs/test/unit/qunit/qunit.js b/profiles/wcm_base/libraries/respondjs/test/unit/qunit/qunit.js
deleted file mode 100644
index b5dbbe26ab9fc9eee773b0fe23b1252f7d1e7eac..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/libraries/respondjs/test/unit/qunit/qunit.js
+++ /dev/null
@@ -1,1598 +0,0 @@
-/**
- * QUnit v1.3.0pre - A JavaScript Unit Testing Framework
- *
- * http://docs.jquery.com/QUnit
- *
- * Copyright (c) 2011 John Resig, Jörn Zaefferer
- * Dual licensed under the MIT (MIT-LICENSE.txt)
- * or GPL (GPL-LICENSE.txt) licenses.
- */
-
-(function(window) {
-
-var defined = {
-	setTimeout: typeof window.setTimeout !== "undefined",
-	sessionStorage: (function() {
-		try {
-			return !!sessionStorage.getItem;
-		} catch(e) {
-			return false;
-		}
-	})()
-};
-
-var	testId = 0,
-	toString = Object.prototype.toString,
-	hasOwn = Object.prototype.hasOwnProperty;
-
-var Test = function(name, testName, expected, testEnvironmentArg, async, callback) {
-	this.name = name;
-	this.testName = testName;
-	this.expected = expected;
-	this.testEnvironmentArg = testEnvironmentArg;
-	this.async = async;
-	this.callback = callback;
-	this.assertions = [];
-};
-Test.prototype = {
-	init: function() {
-		var tests = id("qunit-tests");
-		if (tests) {
-			var b = document.createElement("strong");
-				b.innerHTML = "Running " + this.name;
-			var li = document.createElement("li");
-				li.appendChild( b );
-				li.className = "running";
-				li.id = this.id = "test-output" + testId++;
-			tests.appendChild( li );
-		}
-	},
-	setup: function() {
-		if (this.module != config.previousModule) {
-			if ( config.previousModule ) {
-				runLoggingCallbacks('moduleDone', QUnit, {
-					name: config.previousModule,
-					failed: config.moduleStats.bad,
-					passed: config.moduleStats.all - config.moduleStats.bad,
-					total: config.moduleStats.all
-				} );
-			}
-			config.previousModule = this.module;
-			config.moduleStats = { all: 0, bad: 0 };
-			runLoggingCallbacks( 'moduleStart', QUnit, {
-				name: this.module
-			} );
-		}
-
-		config.current = this;
-		this.testEnvironment = extend({
-			setup: function() {},
-			teardown: function() {}
-		}, this.moduleTestEnvironment);
-		if (this.testEnvironmentArg) {
-			extend(this.testEnvironment, this.testEnvironmentArg);
-		}
-
-		runLoggingCallbacks( 'testStart', QUnit, {
-			name: this.testName,
-			module: this.module
-		});
-
-		// allow utility functions to access the current test environment
-		// TODO why??
-		QUnit.current_testEnvironment = this.testEnvironment;
-
-		try {
-			if ( !config.pollution ) {
-				saveGlobal();
-			}
-
-			this.testEnvironment.setup.call(this.testEnvironment);
-		} catch(e) {
-			QUnit.ok( false, "Setup failed on " + this.testName + ": " + e.message );
-		}
-	},
-	run: function() {
-		config.current = this;
-		if ( this.async ) {
-			QUnit.stop();
-		}
-
-		if ( config.notrycatch ) {
-			this.callback.call(this.testEnvironment);
-			return;
-		}
-		try {
-			this.callback.call(this.testEnvironment);
-		} catch(e) {
-			fail("Test " + this.testName + " died, exception and test follows", e, this.callback);
-			QUnit.ok( false, "Died on test #" + (this.assertions.length + 1) + ": " + e.message + " - " + QUnit.jsDump.parse(e) );
-			// else next test will carry the responsibility
-			saveGlobal();
-
-			// Restart the tests if they're blocking
-			if ( config.blocking ) {
-				QUnit.start();
-			}
-		}
-	},
-	teardown: function() {
-		config.current = this;
-		try {
-			this.testEnvironment.teardown.call(this.testEnvironment);
-			checkPollution();
-		} catch(e) {
-			QUnit.ok( false, "Teardown failed on " + this.testName + ": " + e.message );
-		}
-	},
-	finish: function() {
-		config.current = this;
-		if ( this.expected != null && this.expected != this.assertions.length ) {
-			QUnit.ok( false, "Expected " + this.expected + " assertions, but " + this.assertions.length + " were run" );
-		}
-
-		var good = 0, bad = 0,
-			tests = id("qunit-tests");
-
-		config.stats.all += this.assertions.length;
-		config.moduleStats.all += this.assertions.length;
-
-		if ( tests ) {
-			var ol = document.createElement("ol");
-
-			for ( var i = 0; i < this.assertions.length; i++ ) {
-				var assertion = this.assertions[i];
-
-				var li = document.createElement("li");
-				li.className = assertion.result ? "pass" : "fail";
-				li.innerHTML = assertion.message || (assertion.result ? "okay" : "failed");
-				ol.appendChild( li );
-
-				if ( assertion.result ) {
-					good++;
-				} else {
-					bad++;
-					config.stats.bad++;
-					config.moduleStats.bad++;
-				}
-			}
-
-			// store result when possible
-			if ( QUnit.config.reorder && defined.sessionStorage ) {
-				if (bad) {
-					sessionStorage.setItem("qunit-" + this.module + "-" + this.testName, bad);
-				} else {
-					sessionStorage.removeItem("qunit-" + this.module + "-" + this.testName);
-				}
-			}
-
-			if (bad == 0) {
-				ol.style.display = "none";
-			}
-
-			var b = document.createElement("strong");
-			b.innerHTML = this.name + " <b class='counts'>(<b class='failed'>" + bad + "</b>, <b class='passed'>" + good + "</b>, " + this.assertions.length + ")</b>";
-
-			var a = document.createElement("a");
-			a.innerHTML = "Rerun";
-			a.href = QUnit.url({ filter: getText([b]).replace(/\([^)]+\)$/, "").replace(/(^\s*|\s*$)/g, "") });
-
-			addEvent(b, "click", function() {
-				var next = b.nextSibling.nextSibling,
-					display = next.style.display;
-				next.style.display = display === "none" ? "block" : "none";
-			});
-
-			addEvent(b, "dblclick", function(e) {
-				var target = e && e.target ? e.target : window.event.srcElement;
-				if ( target.nodeName.toLowerCase() == "span" || target.nodeName.toLowerCase() == "b" ) {
-					target = target.parentNode;
-				}
-				if ( window.location && target.nodeName.toLowerCase() === "strong" ) {
-					window.location = QUnit.url({ filter: getText([target]).replace(/\([^)]+\)$/, "").replace(/(^\s*|\s*$)/g, "") });
-				}
-			});
-
-			var li = id(this.id);
-			li.className = bad ? "fail" : "pass";
-			li.removeChild( li.firstChild );
-			li.appendChild( b );
-			li.appendChild( a );
-			li.appendChild( ol );
-
-		} else {
-			for ( var i = 0; i < this.assertions.length; i++ ) {
-				if ( !this.assertions[i].result ) {
-					bad++;
-					config.stats.bad++;
-					config.moduleStats.bad++;
-				}
-			}
-		}
-
-		try {
-			QUnit.reset();
-		} catch(e) {
-			fail("reset() failed, following Test " + this.testName + ", exception and reset fn follows", e, QUnit.reset);
-		}
-
-		runLoggingCallbacks( 'testDone', QUnit, {
-			name: this.testName,
-			module: this.module,
-			failed: bad,
-			passed: this.assertions.length - bad,
-			total: this.assertions.length
-		} );
-	},
-
-	queue: function() {
-		var test = this;
-		synchronize(function() {
-			test.init();
-		});
-		function run() {
-			// each of these can by async
-			synchronize(function() {
-				test.setup();
-			});
-			synchronize(function() {
-				test.run();
-			});
-			synchronize(function() {
-				test.teardown();
-			});
-			synchronize(function() {
-				test.finish();
-			});
-		}
-		// defer when previous test run passed, if storage is available
-		var bad = QUnit.config.reorder && defined.sessionStorage && +sessionStorage.getItem("qunit-" + this.module + "-" + this.testName);
-		if (bad) {
-			run();
-		} else {
-			synchronize(run, true);
-		};
-	}
-
-};
-
-var QUnit = {
-
-	// call on start of module test to prepend name to all tests
-	module: function(name, testEnvironment) {
-		config.currentModule = name;
-		config.currentModuleTestEnviroment = testEnvironment;
-	},
-
-	asyncTest: function(testName, expected, callback) {
-		if ( arguments.length === 2 ) {
-			callback = expected;
-			expected = null;
-		}
-
-		QUnit.test(testName, expected, callback, true);
-	},
-
-	test: function(testName, expected, callback, async) {
-		var name = '<span class="test-name">' + escapeInnerText(testName) + '</span>', testEnvironmentArg;
-
-		if ( arguments.length === 2 ) {
-			callback = expected;
-			expected = null;
-		}
-		// is 2nd argument a testEnvironment?
-		if ( expected && typeof expected === 'object') {
-			testEnvironmentArg = expected;
-			expected = null;
-		}
-
-		if ( config.currentModule ) {
-			name = '<span class="module-name">' + config.currentModule + "</span>: " + name;
-		}
-
-		if ( !validTest(config.currentModule + ": " + testName) ) {
-			return;
-		}
-
-		var test = new Test(name, testName, expected, testEnvironmentArg, async, callback);
-		test.module = config.currentModule;
-		test.moduleTestEnvironment = config.currentModuleTestEnviroment;
-		test.queue();
-	},
-
-	/**
-	 * Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through.
-	 */
-	expect: function(asserts) {
-		config.current.expected = asserts;
-	},
-
-	/**
-	 * Asserts true.
-	 * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" );
-	 */
-	ok: function(a, msg) {
-		a = !!a;
-		var details = {
-			result: a,
-			message: msg
-		};
-		msg = escapeInnerText(msg);
-		runLoggingCallbacks( 'log', QUnit, details );
-		config.current.assertions.push({
-			result: a,
-			message: msg
-		});
-	},
-
-	/**
-	 * Checks that the first two arguments are equal, with an optional message.
-	 * Prints out both actual and expected values.
-	 *
-	 * Prefered to ok( actual == expected, message )
-	 *
-	 * @example equal( format("Received {0} bytes.", 2), "Received 2 bytes." );
-	 *
-	 * @param Object actual
-	 * @param Object expected
-	 * @param String message (optional)
-	 */
-	equal: function(actual, expected, message) {
-		QUnit.push(expected == actual, actual, expected, message);
-	},
-
-	notEqual: function(actual, expected, message) {
-		QUnit.push(expected != actual, actual, expected, message);
-	},
-
-	deepEqual: function(actual, expected, message) {
-		QUnit.push(QUnit.equiv(actual, expected), actual, expected, message);
-	},
-
-	notDeepEqual: function(actual, expected, message) {
-		QUnit.push(!QUnit.equiv(actual, expected), actual, expected, message);
-	},
-
-	strictEqual: function(actual, expected, message) {
-		QUnit.push(expected === actual, actual, expected, message);
-	},
-
-	notStrictEqual: function(actual, expected, message) {
-		QUnit.push(expected !== actual, actual, expected, message);
-	},
-
-	raises: function(block, expected, message) {
-		var actual, ok = false;
-
-		if (typeof expected === 'string') {
-			message = expected;
-			expected = null;
-		}
-
-		try {
-			block();
-		} catch (e) {
-			actual = e;
-		}
-
-		if (actual) {
-			// we don't want to validate thrown error
-			if (!expected) {
-				ok = true;
-			// expected is a regexp
-			} else if (QUnit.objectType(expected) === "regexp") {
-				ok = expected.test(actual);
-			// expected is a constructor
-			} else if (actual instanceof expected) {
-				ok = true;
-			// expected is a validation function which returns true is validation passed
-			} else if (expected.call({}, actual) === true) {
-				ok = true;
-			}
-		}
-
-		QUnit.ok(ok, message);
-	},
-
-	start: function(count) {
-		config.semaphore -= count || 1;
-		if (config.semaphore > 0) {
-			// don't start until equal number of stop-calls
-			return;
-		}
-		if (config.semaphore < 0) {
-			// ignore if start is called more often then stop
-			config.semaphore = 0;
-		}
-		// A slight delay, to avoid any current callbacks
-		if ( defined.setTimeout ) {
-			window.setTimeout(function() {
-				if (config.semaphore > 0) {
-					return;
-				}
-				if ( config.timeout ) {
-					clearTimeout(config.timeout);
-				}
-
-				config.blocking = false;
-				process(true);
-			}, 13);
-		} else {
-			config.blocking = false;
-			process(true);
-		}
-	},
-
-	stop: function(count) {
-		config.semaphore += count || 1;
-		config.blocking = true;
-
-		if ( config.testTimeout && defined.setTimeout ) {
-			clearTimeout(config.timeout);
-			config.timeout = window.setTimeout(function() {
-				QUnit.ok( false, "Test timed out" );
-				config.semaphore = 1;
-				QUnit.start();
-			}, config.testTimeout);
-		}
-	}
-};
-
-//We want access to the constructor's prototype
-(function() {
-	function F(){};
-	F.prototype = QUnit;
-	QUnit = new F();
-	//Make F QUnit's constructor so that we can add to the prototype later
-	QUnit.constructor = F;
-})();
-
-// Backwards compatibility, deprecated
-QUnit.equals = QUnit.equal;
-QUnit.same = QUnit.deepEqual;
-
-// Maintain internal state
-var config = {
-	// The queue of tests to run
-	queue: [],
-
-	// block until document ready
-	blocking: true,
-
-	// when enabled, show only failing tests
-	// gets persisted through sessionStorage and can be changed in UI via checkbox
-	hidepassed: false,
-
-	// by default, run previously failed tests first
-	// very useful in combination with "Hide passed tests" checked
-	reorder: true,
-
-	// by default, modify document.title when suite is done
-	altertitle: true,
-
-	urlConfig: ['noglobals', 'notrycatch'],
-
-	//logging callback queues
-	begin: [],
-	done: [],
-	log: [],
-	testStart: [],
-	testDone: [],
-	moduleStart: [],
-	moduleDone: []
-};
-
-// Load paramaters
-(function() {
-	var location = window.location || { search: "", protocol: "file:" },
-		params = location.search.slice( 1 ).split( "&" ),
-		length = params.length,
-		urlParams = {},
-		current;
-
-	if ( params[ 0 ] ) {
-		for ( var i = 0; i < length; i++ ) {
-			current = params[ i ].split( "=" );
-			current[ 0 ] = decodeURIComponent( current[ 0 ] );
-			// allow just a key to turn on a flag, e.g., test.html?noglobals
-			current[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true;
-			urlParams[ current[ 0 ] ] = current[ 1 ];
-		}
-	}
-
-	QUnit.urlParams = urlParams;
-	config.filter = urlParams.filter;
-
-	// Figure out if we're running the tests from a server or not
-	QUnit.isLocal = !!(location.protocol === 'file:');
-})();
-
-// Expose the API as global variables, unless an 'exports'
-// object exists, in that case we assume we're in CommonJS
-if ( typeof exports === "undefined" || typeof require === "undefined" ) {
-	extend(window, QUnit);
-	window.QUnit = QUnit;
-} else {
-	extend(exports, QUnit);
-	exports.QUnit = QUnit;
-}
-
-// define these after exposing globals to keep them in these QUnit namespace only
-extend(QUnit, {
-	config: config,
-
-	// Initialize the configuration options
-	init: function() {
-		extend(config, {
-			stats: { all: 0, bad: 0 },
-			moduleStats: { all: 0, bad: 0 },
-			started: +new Date,
-			updateRate: 1000,
-			blocking: false,
-			autostart: true,
-			autorun: false,
-			filter: "",
-			queue: [],
-			semaphore: 0
-		});
-
-		var tests = id( "qunit-tests" ),
-			banner = id( "qunit-banner" ),
-			result = id( "qunit-testresult" );
-
-		if ( tests ) {
-			tests.innerHTML = "";
-		}
-
-		if ( banner ) {
-			banner.className = "";
-		}
-
-		if ( result ) {
-			result.parentNode.removeChild( result );
-		}
-
-		if ( tests ) {
-			result = document.createElement( "p" );
-			result.id = "qunit-testresult";
-			result.className = "result";
-			tests.parentNode.insertBefore( result, tests );
-			result.innerHTML = 'Running...<br/>&nbsp;';
-		}
-	},
-
-	/**
-	 * Resets the test setup. Useful for tests that modify the DOM.
-	 *
-	 * If jQuery is available, uses jQuery's html(), otherwise just innerHTML.
-	 */
-	reset: function() {
-		if ( window.jQuery ) {
-			jQuery( "#qunit-fixture" ).html( config.fixture );
-		} else {
-			var main = id( 'qunit-fixture' );
-			if ( main ) {
-				main.innerHTML = config.fixture;
-			}
-		}
-	},
-
-	/**
-	 * Trigger an event on an element.
-	 *
-	 * @example triggerEvent( document.body, "click" );
-	 *
-	 * @param DOMElement elem
-	 * @param String type
-	 */
-	triggerEvent: function( elem, type, event ) {
-		if ( document.createEvent ) {
-			event = document.createEvent("MouseEvents");
-			event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView,
-				0, 0, 0, 0, 0, false, false, false, false, 0, null);
-			elem.dispatchEvent( event );
-
-		} else if ( elem.fireEvent ) {
-			elem.fireEvent("on"+type);
-		}
-	},
-
-	// Safe object type checking
-	is: function( type, obj ) {
-		return QUnit.objectType( obj ) == type;
-	},
-
-	objectType: function( obj ) {
-		if (typeof obj === "undefined") {
-				return "undefined";
-
-		// consider: typeof null === object
-		}
-		if (obj === null) {
-				return "null";
-		}
-
-		var type = toString.call( obj ).match(/^\[object\s(.*)\]$/)[1] || '';
-
-		switch (type) {
-				case 'Number':
-						if (isNaN(obj)) {
-								return "nan";
-						} else {
-								return "number";
-						}
-				case 'String':
-				case 'Boolean':
-				case 'Array':
-				case 'Date':
-				case 'RegExp':
-				case 'Function':
-						return type.toLowerCase();
-		}
-		if (typeof obj === "object") {
-				return "object";
-		}
-		return undefined;
-	},
-
-	push: function(result, actual, expected, message) {
-		var details = {
-			result: result,
-			message: message,
-			actual: actual,
-			expected: expected
-		};
-
-		message = escapeInnerText(message) || (result ? "okay" : "failed");
-		message = '<span class="test-message">' + message + "</span>";
-		expected = escapeInnerText(QUnit.jsDump.parse(expected));
-		actual = escapeInnerText(QUnit.jsDump.parse(actual));
-		var output = message + '<table><tr class="test-expected"><th>Expected: </th><td><pre>' + expected + '</pre></td></tr>';
-		if (actual != expected) {
-			output += '<tr class="test-actual"><th>Result: </th><td><pre>' + actual + '</pre></td></tr>';
-			output += '<tr class="test-diff"><th>Diff: </th><td><pre>' + QUnit.diff(expected, actual) +'</pre></td></tr>';
-		}
-		if (!result) {
-			var source = sourceFromStacktrace();
-			if (source) {
-				details.source = source;
-				output += '<tr class="test-source"><th>Source: </th><td><pre>' + escapeInnerText(source) + '</pre></td></tr>';
-			}
-		}
-		output += "</table>";
-
-		runLoggingCallbacks( 'log', QUnit, details );
-
-		config.current.assertions.push({
-			result: !!result,
-			message: output
-		});
-	},
-
-	url: function( params ) {
-		params = extend( extend( {}, QUnit.urlParams ), params );
-		var querystring = "?",
-			key;
-		for ( key in params ) {
-			if ( !hasOwn.call( params, key ) ) {
-				continue;
-			}
-			querystring += encodeURIComponent( key ) + "=" +
-				encodeURIComponent( params[ key ] ) + "&";
-		}
-		return window.location.pathname + querystring.slice( 0, -1 );
-	},
-
-	extend: extend,
-	id: id,
-	addEvent: addEvent
-});
-
-//QUnit.constructor is set to the empty F() above so that we can add to it's prototype later
-//Doing this allows us to tell if the following methods have been overwritten on the actual
-//QUnit object, which is a deprecated way of using the callbacks.
-extend(QUnit.constructor.prototype, {
-	// Logging callbacks; all receive a single argument with the listed properties
-	// run test/logs.html for any related changes
-	begin: registerLoggingCallback('begin'),
-	// done: { failed, passed, total, runtime }
-	done: registerLoggingCallback('done'),
-	// log: { result, actual, expected, message }
-	log: registerLoggingCallback('log'),
-	// testStart: { name }
-	testStart: registerLoggingCallback('testStart'),
-	// testDone: { name, failed, passed, total }
-	testDone: registerLoggingCallback('testDone'),
-	// moduleStart: { name }
-	moduleStart: registerLoggingCallback('moduleStart'),
-	// moduleDone: { name, failed, passed, total }
-	moduleDone: registerLoggingCallback('moduleDone')
-});
-
-if ( typeof document === "undefined" || document.readyState === "complete" ) {
-	config.autorun = true;
-}
-
-QUnit.load = function() {
-	runLoggingCallbacks( 'begin', QUnit, {} );
-
-	// Initialize the config, saving the execution queue
-	var oldconfig = extend({}, config);
-	QUnit.init();
-	extend(config, oldconfig);
-
-	config.blocking = false;
-
-	var urlConfigHtml = '', len = config.urlConfig.length;
-	for ( var i = 0, val; i < len, val = config.urlConfig[i]; i++ ) {
-		config[val] = QUnit.urlParams[val];
-		urlConfigHtml += '<label><input name="' + val + '" type="checkbox"' + ( config[val] ? ' checked="checked"' : '' ) + '>' + val + '</label>';
-	}
-
-	var userAgent = id("qunit-userAgent");
-	if ( userAgent ) {
-		userAgent.innerHTML = navigator.userAgent;
-	}
-	var banner = id("qunit-header");
-	if ( banner ) {
-		banner.innerHTML = '<a href="' + QUnit.url({ filter: undefined }) + '"> ' + banner.innerHTML + '</a> ' + urlConfigHtml;
-		addEvent( banner, "change", function( event ) {
-			var params = {};
-			params[ event.target.name ] = event.target.checked ? true : undefined;
-			window.location = QUnit.url( params );
-		});
-	}
-
-	var toolbar = id("qunit-testrunner-toolbar");
-	if ( toolbar ) {
-		var filter = document.createElement("input");
-		filter.type = "checkbox";
-		filter.id = "qunit-filter-pass";
-		addEvent( filter, "click", function() {
-			var ol = document.getElementById("qunit-tests");
-			if ( filter.checked ) {
-				ol.className = ol.className + " hidepass";
-			} else {
-				var tmp = " " + ol.className.replace( /[\n\t\r]/g, " " ) + " ";
-				ol.className = tmp.replace(/ hidepass /, " ");
-			}
-			if ( defined.sessionStorage ) {
-				if (filter.checked) {
-					sessionStorage.setItem("qunit-filter-passed-tests", "true");
-				} else {
-					sessionStorage.removeItem("qunit-filter-passed-tests");
-				}
-			}
-		});
-		if ( config.hidepassed || defined.sessionStorage && sessionStorage.getItem("qunit-filter-passed-tests") ) {
-			filter.checked = true;
-			var ol = document.getElementById("qunit-tests");
-			ol.className = ol.className + " hidepass";
-		}
-		toolbar.appendChild( filter );
-
-		var label = document.createElement("label");
-		label.setAttribute("for", "qunit-filter-pass");
-		label.innerHTML = "Hide passed tests";
-		toolbar.appendChild( label );
-	}
-
-	var main = id('qunit-fixture');
-	if ( main ) {
-		config.fixture = main.innerHTML;
-	}
-
-	if (config.autostart) {
-		QUnit.start();
-	}
-};
-
-addEvent(window, "load", QUnit.load);
-
-// addEvent(window, "error") gives us a useless event object
-window.onerror = function( message, file, line ) {
-	if ( QUnit.config.current ) {
-		ok( false, message + ", " + file + ":" + line );
-	} else {
-		test( "global failure", function() {
-			ok( false, message + ", " + file + ":" + line );
-		});
-	}
-};
-
-function done() {
-	config.autorun = true;
-
-	// Log the last module results
-	if ( config.currentModule ) {
-		runLoggingCallbacks( 'moduleDone', QUnit, {
-			name: config.currentModule,
-			failed: config.moduleStats.bad,
-			passed: config.moduleStats.all - config.moduleStats.bad,
-			total: config.moduleStats.all
-		} );
-	}
-
-	var banner = id("qunit-banner"),
-		tests = id("qunit-tests"),
-		runtime = +new Date - config.started,
-		passed = config.stats.all - config.stats.bad,
-		html = [
-			'Tests completed in ',
-			runtime,
-			' milliseconds.<br/>',
-			'<span class="passed">',
-			passed,
-			'</span> tests of <span class="total">',
-			config.stats.all,
-			'</span> passed, <span class="failed">',
-			config.stats.bad,
-			'</span> failed.'
-		].join('');
-
-	if ( banner ) {
-		banner.className = (config.stats.bad ? "qunit-fail" : "qunit-pass");
-	}
-
-	if ( tests ) {
-		id( "qunit-testresult" ).innerHTML = html;
-	}
-
-	if ( config.altertitle && typeof document !== "undefined" && document.title ) {
-		// show ✖ for good, ✔ for bad suite result in title
-		// use escape sequences in case file gets loaded with non-utf-8-charset
-		document.title = [
-			(config.stats.bad ? "\u2716" : "\u2714"),
-			document.title.replace(/^[\u2714\u2716] /i, "")
-		].join(" ");
-	}
-
-	runLoggingCallbacks( 'done', QUnit, {
-		failed: config.stats.bad,
-		passed: passed,
-		total: config.stats.all,
-		runtime: runtime
-	} );
-}
-
-function validTest( name ) {
-	var filter = config.filter,
-		run = false;
-
-	if ( !filter ) {
-		return true;
-	}
-
-	var not = filter.charAt( 0 ) === "!";
-	if ( not ) {
-		filter = filter.slice( 1 );
-	}
-
-	if ( name.indexOf( filter ) !== -1 ) {
-		return !not;
-	}
-
-	if ( not ) {
-		run = true;
-	}
-
-	return run;
-}
-
-// so far supports only Firefox, Chrome and Opera (buggy)
-// could be extended in the future to use something like https://github.com/csnover/TraceKit
-function sourceFromStacktrace() {
-	try {
-		throw new Error();
-	} catch ( e ) {
-		if (e.stacktrace) {
-			// Opera
-			return e.stacktrace.split("\n")[6];
-		} else if (e.stack) {
-			// Firefox, Chrome
-			return e.stack.split("\n")[4];
-		} else if (e.sourceURL) {
-			// Safari, PhantomJS
-			// TODO sourceURL points at the 'throw new Error' line above, useless
-			//return e.sourceURL + ":" + e.line;
-		}
-	}
-}
-
-function escapeInnerText(s) {
-	if (!s) {
-		return "";
-	}
-	s = s + "";
-	return s.replace(/[\&<>]/g, function(s) {
-		switch(s) {
-			case "&": return "&amp;";
-			case "<": return "&lt;";
-			case ">": return "&gt;";
-			default: return s;
-		}
-	});
-}
-
-function synchronize( callback, last ) {
-	config.queue.push( callback );
-
-	if ( config.autorun && !config.blocking ) {
-		process(last);
-	}
-}
-
-function process( last ) {
-	var start = new Date().getTime();
-	config.depth = config.depth ? config.depth + 1 : 1;
-
-	while ( config.queue.length && !config.blocking ) {
-		if ( !defined.setTimeout || config.updateRate <= 0 || ( ( new Date().getTime() - start ) < config.updateRate ) ) {
-			config.queue.shift()();
-		} else {
-			window.setTimeout( function(){
-				process( last );
-			}, 13 );
-			break;
-		}
-	}
-	config.depth--;
-	if ( last && !config.blocking && !config.queue.length && config.depth === 0 ) {
-		done();
-	}
-}
-
-function saveGlobal() {
-	config.pollution = [];
-
-	if ( config.noglobals ) {
-		for ( var key in window ) {
-			if ( !hasOwn.call( window, key ) ) {
-				continue;
-			}
-			config.pollution.push( key );
-		}
-	}
-}
-
-function checkPollution( name ) {
-	var old = config.pollution;
-	saveGlobal();
-
-	var newGlobals = diff( config.pollution, old );
-	if ( newGlobals.length > 0 ) {
-		ok( false, "Introduced global variable(s): " + newGlobals.join(", ") );
-	}
-
-	var deletedGlobals = diff( old, config.pollution );
-	if ( deletedGlobals.length > 0 ) {
-		ok( false, "Deleted global variable(s): " + deletedGlobals.join(", ") );
-	}
-}
-
-// returns a new Array with the elements that are in a but not in b
-function diff( a, b ) {
-	var result = a.slice();
-	for ( var i = 0; i < result.length; i++ ) {
-		for ( var j = 0; j < b.length; j++ ) {
-			if ( result[i] === b[j] ) {
-				result.splice(i, 1);
-				i--;
-				break;
-			}
-		}
-	}
-	return result;
-}
-
-function fail(message, exception, callback) {
-	if ( typeof console !== "undefined" && console.error && console.warn ) {
-		console.error(message);
-		console.error(exception);
-		console.error(exception.stack);
-		console.warn(callback.toString());
-
-	} else if ( window.opera && opera.postError ) {
-		opera.postError(message, exception, callback.toString);
-	}
-}
-
-function extend(a, b) {
-	for ( var prop in b ) {
-		if ( b[prop] === undefined ) {
-			delete a[prop];
-
-		// Avoid "Member not found" error in IE8 caused by setting window.constructor
-		} else if ( prop !== "constructor" || a !== window ) {
-			a[prop] = b[prop];
-		}
-	}
-
-	return a;
-}
-
-function addEvent(elem, type, fn) {
-	if ( elem.addEventListener ) {
-		elem.addEventListener( type, fn, false );
-	} else if ( elem.attachEvent ) {
-		elem.attachEvent( "on" + type, fn );
-	} else {
-		fn();
-	}
-}
-
-function id(name) {
-	return !!(typeof document !== "undefined" && document && document.getElementById) &&
-		document.getElementById( name );
-}
-
-function registerLoggingCallback(key){
-	return function(callback){
-		config[key].push( callback );
-	};
-}
-
-// Supports deprecated method of completely overwriting logging callbacks
-function runLoggingCallbacks(key, scope, args) {
-	//debugger;
-	var callbacks;
-	if ( QUnit.hasOwnProperty(key) ) {
-		QUnit[key].call(scope, args);
-	} else {
-		callbacks = config[key];
-		for( var i = 0; i < callbacks.length; i++ ) {
-			callbacks[i].call( scope, args );
-		}
-	}
-}
-
-// Test for equality any JavaScript type.
-// Author: Philippe Rathé <prathe@gmail.com>
-QUnit.equiv = function () {
-
-	var innerEquiv; // the real equiv function
-	var callers = []; // stack to decide between skip/abort functions
-	var parents = []; // stack to avoiding loops from circular referencing
-
-	// Call the o related callback with the given arguments.
-	function bindCallbacks(o, callbacks, args) {
-		var prop = QUnit.objectType(o);
-		if (prop) {
-			if (QUnit.objectType(callbacks[prop]) === "function") {
-				return callbacks[prop].apply(callbacks, args);
-			} else {
-				return callbacks[prop]; // or undefined
-			}
-		}
-	}
-
-	var getProto = Object.getPrototypeOf || function (obj) {
-		return obj.__proto__;
-	};
-
-	var callbacks = function () {
-
-		// for string, boolean, number and null
-		function useStrictEquality(b, a) {
-			if (b instanceof a.constructor || a instanceof b.constructor) {
-				// to catch short annotaion VS 'new' annotation of a
-				// declaration
-				// e.g. var i = 1;
-				// var j = new Number(1);
-				return a == b;
-			} else {
-				return a === b;
-			}
-		}
-
-		return {
-			"string" : useStrictEquality,
-			"boolean" : useStrictEquality,
-			"number" : useStrictEquality,
-			"null" : useStrictEquality,
-			"undefined" : useStrictEquality,
-
-			"nan" : function(b) {
-				return isNaN(b);
-			},
-
-			"date" : function(b, a) {
-				return QUnit.objectType(b) === "date"
-						&& a.valueOf() === b.valueOf();
-			},
-
-			"regexp" : function(b, a) {
-				return QUnit.objectType(b) === "regexp"
-						&& a.source === b.source && // the regex itself
-						a.global === b.global && // and its modifers
-													// (gmi) ...
-						a.ignoreCase === b.ignoreCase
-						&& a.multiline === b.multiline;
-			},
-
-			// - skip when the property is a method of an instance (OOP)
-			// - abort otherwise,
-			// initial === would have catch identical references anyway
-			"function" : function() {
-				var caller = callers[callers.length - 1];
-				return caller !== Object && typeof caller !== "undefined";
-			},
-
-			"array" : function(b, a) {
-				var i, j, loop;
-				var len;
-
-				// b could be an object literal here
-				if (!(QUnit.objectType(b) === "array")) {
-					return false;
-				}
-
-				len = a.length;
-				if (len !== b.length) { // safe and faster
-					return false;
-				}
-
-				// track reference to avoid circular references
-				parents.push(a);
-				for (i = 0; i < len; i++) {
-					loop = false;
-					for (j = 0; j < parents.length; j++) {
-						if (parents[j] === a[i]) {
-							loop = true;// dont rewalk array
-						}
-					}
-					if (!loop && !innerEquiv(a[i], b[i])) {
-						parents.pop();
-						return false;
-					}
-				}
-				parents.pop();
-				return true;
-			},
-
-			"object" : function(b, a) {
-				var i, j, loop;
-				var eq = true; // unless we can proove it
-				var aProperties = [], bProperties = []; // collection of
-														// strings
-
-				// comparing constructors is more strict than using
-				// instanceof
-				if (a.constructor !== b.constructor) {
-					// Allow objects with no prototype to be equivalent to
-					// objects with Object as their constructor.
-					if (!((getProto(a) === null && getProto(b) === Object.prototype) ||
-						  (getProto(b) === null && getProto(a) === Object.prototype)))
-					{
-						return false;
-					}
-				}
-
-				// stack constructor before traversing properties
-				callers.push(a.constructor);
-				// track reference to avoid circular references
-				parents.push(a);
-
-				for (i in a) { // be strict: don't ensures hasOwnProperty
-								// and go deep
-					loop = false;
-					for (j = 0; j < parents.length; j++) {
-						if (parents[j] === a[i])
-							loop = true; // don't go down the same path
-											// twice
-					}
-					aProperties.push(i); // collect a's properties
-
-					if (!loop && !innerEquiv(a[i], b[i])) {
-						eq = false;
-						break;
-					}
-				}
-
-				callers.pop(); // unstack, we are done
-				parents.pop();
-
-				for (i in b) {
-					bProperties.push(i); // collect b's properties
-				}
-
-				// Ensures identical properties name
-				return eq
-						&& innerEquiv(aProperties.sort(), bProperties
-								.sort());
-			}
-		};
-	}();
-
-	innerEquiv = function() { // can take multiple arguments
-		var args = Array.prototype.slice.apply(arguments);
-		if (args.length < 2) {
-			return true; // end transition
-		}
-
-		return (function(a, b) {
-			if (a === b) {
-				return true; // catch the most you can
-			} else if (a === null || b === null || typeof a === "undefined"
-					|| typeof b === "undefined"
-					|| QUnit.objectType(a) !== QUnit.objectType(b)) {
-				return false; // don't lose time with error prone cases
-			} else {
-				return bindCallbacks(a, callbacks, [ b, a ]);
-			}
-
-			// apply transition with (1..n) arguments
-		})(args[0], args[1])
-				&& arguments.callee.apply(this, args.splice(1,
-						args.length - 1));
-	};
-
-	return innerEquiv;
-
-}();
-
-/**
- * jsDump Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com |
- * http://flesler.blogspot.com Licensed under BSD
- * (http://www.opensource.org/licenses/bsd-license.php) Date: 5/15/2008
- *
- * @projectDescription Advanced and extensible data dumping for Javascript.
- * @version 1.0.0
- * @author Ariel Flesler
- * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html}
- */
-QUnit.jsDump = (function() {
-	function quote( str ) {
-		return '"' + str.toString().replace(/"/g, '\\"') + '"';
-	};
-	function literal( o ) {
-		return o + '';
-	};
-	function join( pre, arr, post ) {
-		var s = jsDump.separator(),
-			base = jsDump.indent(),
-			inner = jsDump.indent(1);
-		if ( arr.join )
-			arr = arr.join( ',' + s + inner );
-		if ( !arr )
-			return pre + post;
-		return [ pre, inner + arr, base + post ].join(s);
-	};
-	function array( arr, stack ) {
-		var i = arr.length, ret = Array(i);
-		this.up();
-		while ( i-- )
-			ret[i] = this.parse( arr[i] , undefined , stack);
-		this.down();
-		return join( '[', ret, ']' );
-	};
-
-	var reName = /^function (\w+)/;
-
-	var jsDump = {
-		parse:function( obj, type, stack ) { //type is used mostly internally, you can fix a (custom)type in advance
-			stack = stack || [ ];
-			var parser = this.parsers[ type || this.typeOf(obj) ];
-			type = typeof parser;
-			var inStack = inArray(obj, stack);
-			if (inStack != -1) {
-				return 'recursion('+(inStack - stack.length)+')';
-			}
-			//else
-			if (type == 'function')  {
-					stack.push(obj);
-					var res = parser.call( this, obj, stack );
-					stack.pop();
-					return res;
-			}
-			// else
-			return (type == 'string') ? parser : this.parsers.error;
-		},
-		typeOf:function( obj ) {
-			var type;
-			if ( obj === null ) {
-				type = "null";
-			} else if (typeof obj === "undefined") {
-				type = "undefined";
-			} else if (QUnit.is("RegExp", obj)) {
-				type = "regexp";
-			} else if (QUnit.is("Date", obj)) {
-				type = "date";
-			} else if (QUnit.is("Function", obj)) {
-				type = "function";
-			} else if (typeof obj.setInterval !== undefined && typeof obj.document !== "undefined" && typeof obj.nodeType === "undefined") {
-				type = "window";
-			} else if (obj.nodeType === 9) {
-				type = "document";
-			} else if (obj.nodeType) {
-				type = "node";
-			} else if (
-				// native arrays
-				toString.call( obj ) === "[object Array]" ||
-				// NodeList objects
-				( typeof obj.length === "number" && typeof obj.item !== "undefined" && ( obj.length ? obj.item(0) === obj[0] : ( obj.item( 0 ) === null && typeof obj[0] === "undefined" ) ) )
-			) {
-				type = "array";
-			} else {
-				type = typeof obj;
-			}
-			return type;
-		},
-		separator:function() {
-			return this.multiline ?	this.HTML ? '<br />' : '\n' : this.HTML ? '&nbsp;' : ' ';
-		},
-		indent:function( extra ) {// extra can be a number, shortcut for increasing-calling-decreasing
-			if ( !this.multiline )
-				return '';
-			var chr = this.indentChar;
-			if ( this.HTML )
-				chr = chr.replace(/\t/g,'   ').replace(/ /g,'&nbsp;');
-			return Array( this._depth_ + (extra||0) ).join(chr);
-		},
-		up:function( a ) {
-			this._depth_ += a || 1;
-		},
-		down:function( a ) {
-			this._depth_ -= a || 1;
-		},
-		setParser:function( name, parser ) {
-			this.parsers[name] = parser;
-		},
-		// The next 3 are exposed so you can use them
-		quote:quote,
-		literal:literal,
-		join:join,
-		//
-		_depth_: 1,
-		// This is the list of parsers, to modify them, use jsDump.setParser
-		parsers:{
-			window: '[Window]',
-			document: '[Document]',
-			error:'[ERROR]', //when no parser is found, shouldn't happen
-			unknown: '[Unknown]',
-			'null':'null',
-			'undefined':'undefined',
-			'function':function( fn ) {
-				var ret = 'function',
-					name = 'name' in fn ? fn.name : (reName.exec(fn)||[])[1];//functions never have name in IE
-				if ( name )
-					ret += ' ' + name;
-				ret += '(';
-
-				ret = [ ret, QUnit.jsDump.parse( fn, 'functionArgs' ), '){'].join('');
-				return join( ret, QUnit.jsDump.parse(fn,'functionCode'), '}' );
-			},
-			array: array,
-			nodelist: array,
-			arguments: array,
-			object:function( map, stack ) {
-				var ret = [ ];
-				QUnit.jsDump.up();
-				for ( var key in map ) {
-				    var val = map[key];
-					ret.push( QUnit.jsDump.parse(key,'key') + ': ' + QUnit.jsDump.parse(val, undefined, stack));
-                }
-				QUnit.jsDump.down();
-				return join( '{', ret, '}' );
-			},
-			node:function( node ) {
-				var open = QUnit.jsDump.HTML ? '&lt;' : '<',
-					close = QUnit.jsDump.HTML ? '&gt;' : '>';
-
-				var tag = node.nodeName.toLowerCase(),
-					ret = open + tag;
-
-				for ( var a in QUnit.jsDump.DOMAttrs ) {
-					var val = node[QUnit.jsDump.DOMAttrs[a]];
-					if ( val )
-						ret += ' ' + a + '=' + QUnit.jsDump.parse( val, 'attribute' );
-				}
-				return ret + close + open + '/' + tag + close;
-			},
-			functionArgs:function( fn ) {//function calls it internally, it's the arguments part of the function
-				var l = fn.length;
-				if ( !l ) return '';
-
-				var args = Array(l);
-				while ( l-- )
-					args[l] = String.fromCharCode(97+l);//97 is 'a'
-				return ' ' + args.join(', ') + ' ';
-			},
-			key:quote, //object calls it internally, the key part of an item in a map
-			functionCode:'[code]', //function calls it internally, it's the content of the function
-			attribute:quote, //node calls it internally, it's an html attribute value
-			string:quote,
-			date:quote,
-			regexp:literal, //regex
-			number:literal,
-			'boolean':literal
-		},
-		DOMAttrs:{//attributes to dump from nodes, name=>realName
-			id:'id',
-			name:'name',
-			'class':'className'
-		},
-		HTML:false,//if true, entities are escaped ( <, >, \t, space and \n )
-		indentChar:'  ',//indentation unit
-		multiline:true //if true, items in a collection, are separated by a \n, else just a space.
-	};
-
-	return jsDump;
-})();
-
-// from Sizzle.js
-function getText( elems ) {
-	var ret = "", elem;
-
-	for ( var i = 0; elems[i]; i++ ) {
-		elem = elems[i];
-
-		// Get the text from text nodes and CDATA nodes
-		if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
-			ret += elem.nodeValue;
-
-		// Traverse everything else, except comment nodes
-		} else if ( elem.nodeType !== 8 ) {
-			ret += getText( elem.childNodes );
-		}
-	}
-
-	return ret;
-};
-
-//from jquery.js
-function inArray( elem, array ) {
-	if ( array.indexOf ) {
-		return array.indexOf( elem );
-	}
-
-	for ( var i = 0, length = array.length; i < length; i++ ) {
-		if ( array[ i ] === elem ) {
-			return i;
-		}
-	}
-
-	return -1;
-}
-
-/*
- * Javascript Diff Algorithm
- *  By John Resig (http://ejohn.org/)
- *  Modified by Chu Alan "sprite"
- *
- * Released under the MIT license.
- *
- * More Info:
- *  http://ejohn.org/projects/javascript-diff-algorithm/
- *
- * Usage: QUnit.diff(expected, actual)
- *
- * QUnit.diff("the quick brown fox jumped over", "the quick fox jumps over") == "the  quick <del>brown </del> fox <del>jumped </del><ins>jumps </ins> over"
- */
-QUnit.diff = (function() {
-	function diff(o, n) {
-		var ns = {};
-		var os = {};
-
-		for (var i = 0; i < n.length; i++) {
-			if (ns[n[i]] == null)
-				ns[n[i]] = {
-					rows: [],
-					o: null
-				};
-			ns[n[i]].rows.push(i);
-		}
-
-		for (var i = 0; i < o.length; i++) {
-			if (os[o[i]] == null)
-				os[o[i]] = {
-					rows: [],
-					n: null
-				};
-			os[o[i]].rows.push(i);
-		}
-
-		for (var i in ns) {
-			if ( !hasOwn.call( ns, i ) ) {
-				continue;
-			}
-			if (ns[i].rows.length == 1 && typeof(os[i]) != "undefined" && os[i].rows.length == 1) {
-				n[ns[i].rows[0]] = {
-					text: n[ns[i].rows[0]],
-					row: os[i].rows[0]
-				};
-				o[os[i].rows[0]] = {
-					text: o[os[i].rows[0]],
-					row: ns[i].rows[0]
-				};
-			}
-		}
-
-		for (var i = 0; i < n.length - 1; i++) {
-			if (n[i].text != null && n[i + 1].text == null && n[i].row + 1 < o.length && o[n[i].row + 1].text == null &&
-			n[i + 1] == o[n[i].row + 1]) {
-				n[i + 1] = {
-					text: n[i + 1],
-					row: n[i].row + 1
-				};
-				o[n[i].row + 1] = {
-					text: o[n[i].row + 1],
-					row: i + 1
-				};
-			}
-		}
-
-		for (var i = n.length - 1; i > 0; i--) {
-			if (n[i].text != null && n[i - 1].text == null && n[i].row > 0 && o[n[i].row - 1].text == null &&
-			n[i - 1] == o[n[i].row - 1]) {
-				n[i - 1] = {
-					text: n[i - 1],
-					row: n[i].row - 1
-				};
-				o[n[i].row - 1] = {
-					text: o[n[i].row - 1],
-					row: i - 1
-				};
-			}
-		}
-
-		return {
-			o: o,
-			n: n
-		};
-	}
-
-	return function(o, n) {
-		o = o.replace(/\s+$/, '');
-		n = n.replace(/\s+$/, '');
-		var out = diff(o == "" ? [] : o.split(/\s+/), n == "" ? [] : n.split(/\s+/));
-
-		var str = "";
-
-		var oSpace = o.match(/\s+/g);
-		if (oSpace == null) {
-			oSpace = [" "];
-		}
-		else {
-			oSpace.push(" ");
-		}
-		var nSpace = n.match(/\s+/g);
-		if (nSpace == null) {
-			nSpace = [" "];
-		}
-		else {
-			nSpace.push(" ");
-		}
-
-		if (out.n.length == 0) {
-			for (var i = 0; i < out.o.length; i++) {
-				str += '<del>' + out.o[i] + oSpace[i] + "</del>";
-			}
-		}
-		else {
-			if (out.n[0].text == null) {
-				for (n = 0; n < out.o.length && out.o[n].text == null; n++) {
-					str += '<del>' + out.o[n] + oSpace[n] + "</del>";
-				}
-			}
-
-			for (var i = 0; i < out.n.length; i++) {
-				if (out.n[i].text == null) {
-					str += '<ins>' + out.n[i] + nSpace[i] + "</ins>";
-				}
-				else {
-					var pre = "";
-
-					for (n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++) {
-						pre += '<del>' + out.o[n] + oSpace[n] + "</del>";
-					}
-					str += " " + out.n[i].text + nSpace[i] + pre;
-				}
-			}
-		}
-
-		return str;
-	};
-})();
-
-})(this);
\ No newline at end of file
diff --git a/profiles/wcm_base/libraries/respondjs/test/unit/test-with-comment.css b/profiles/wcm_base/libraries/respondjs/test/unit/test-with-comment.css
deleted file mode 100644
index ececa73c9624fd470bc99f734ad942a8c45cb355..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/libraries/respondjs/test/unit/test-with-comment.css
+++ /dev/null
@@ -1,29 +0,0 @@
-/* this is a comment
-	 *
-	 */
-
-@media (min-width: 1px) {
-
-	/* see issue #22 */
-	/* @media {} */
-	/* @media {
-	} */
-
-	/* this is a comment
-	 *
-	 */
-
-	/* * / /*
-		Will this strip right?
-	 */
-	body {
-		color: red;
-		/* TODO This edge case is not currently supported */
-		content: "content /* this should not strip */";
-	}
-
-	/* this is a comment */
-
-	/* see issue #22 */
-	/* @media */
-}
diff --git a/profiles/wcm_base/libraries/respondjs/test/unit/test-with-dpr.css b/profiles/wcm_base/libraries/respondjs/test/unit/test-with-dpr.css
deleted file mode 100644
index 07053c61697b9031608fa872df1e87290e8df33a..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/libraries/respondjs/test/unit/test-with-dpr.css
+++ /dev/null
@@ -1,10 +0,0 @@
-@media 
-only screen and (max-width: 1004px) and (min--moz-device-pixel-ratio: 1.5),
-only screen and (max-width: 1004px) and (-moz-min-device-pixel-ratio: 1.5),
-only screen and (max-width: 1004px) and (-o-min-device-pixel-ratio: 3/2),
-only screen and (max-width: 1004px) and (-webkit-min-device-pixel-ratio: 1.5),
-only screen and (max-width: 1004px) and (min-device-pixel-ratio: 1.5),
-only screen and (max-width: 1004px) and (min-resolution: 1.5dppx) {
-	
-	
-}
\ No newline at end of file
diff --git a/profiles/wcm_base/libraries/respondjs/test/unit/test-with-keyframe.css b/profiles/wcm_base/libraries/respondjs/test/unit/test-with-keyframe.css
deleted file mode 100644
index b692f00158d590240566f137f461c20be635529b..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/libraries/respondjs/test/unit/test-with-keyframe.css
+++ /dev/null
@@ -1,15 +0,0 @@
-@media (min-width: 1px) {
-
-	@-webkit-keyframes NAME-YOUR-ANIMATION {
-		0%   { opacity: 0; }
-		100% { opacity: 1; }
-	}
-	@keyframes NAME-YOUR-ANIMATION {
-		0%   { opacity: 0; }
-		100% { opacity: 1; }
-	}
-
-	body {
-		color: red;
-	}
-}
\ No newline at end of file
diff --git a/profiles/wcm_base/libraries/respondjs/test/unit/test.css b/profiles/wcm_base/libraries/respondjs/test/unit/test.css
deleted file mode 100644
index fa00f92dd66aa5690b66e21b33efbc21624e51a7..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/libraries/respondjs/test/unit/test.css
+++ /dev/null
@@ -1,74 +0,0 @@
-
-
-.launcher #qunit-testrunner-toolbar,
-.launcher #qunit-userAgent,
-.launcher #qunit-tests,
-.launcher #qunit-testresult {
-	display: none;
-}
-.launcher #launcher {
-
-	font: 1.5em/1 bold Helvetica, sans-serif;
-}
-
-#testelem {
-	width: 50px;
-	overflow: hidden;
-	display: block;
-}
-
-/* a style like this should never apply in IE. If it does, tests will fail */
-@media screen and (view-mode: minimized) {
-	#testelem {
-		width: 10px !important;
-	}
-}
-
-/*styles for 480px and up - media type purposely left out here to test that in the process */
-@media (min-width: 480px) {
-	#testelem {
-		width: 150px;
-	}
-	#testelem[class=foo] {
-		height: 200px;
-	}
-}
-
-/*styles for 500px and under*/
-@media screen and (max-width: 460px) {
-	#testelem {
-		height: 150px;
-	}
-}
-
-/* testing em unit support - 33em should be 528px and 35em should be 560px in IE with default font settings */
-@media screen and (min-width: 33em) and (max-width: 38em) {
-	#testelem {
-		width: 75px;
-	}
-}
-
-
-
-/*styles for 620px and up */
-@media only screen and (min-width: 620px) {
-	#testelem {
-		width: 250px;
-	}
-}
-
-
-/*styles for 760px and up */
-@media only print, only screen and (min-width: 760px) {
-	#testelem {
-		width: 350px;
-	}
-}
-
-
-/*styles for print that shouldn't apply */
-@media only print and (min-width: 800px) {
-	#testelem {
-		width: 500px;
-	}
-}
\ No newline at end of file
diff --git a/profiles/wcm_base/libraries/respondjs/test/unit/test2.css b/profiles/wcm_base/libraries/respondjs/test/unit/test2.css
deleted file mode 100644
index c3e5d3a159c252df08a6294eb8a1319cac13a86b..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/libraries/respondjs/test/unit/test2.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/* this stylesheet was referenced via a link that had a media attr defined
-it should only apply on window > 950px */
-#testelem {
-	width: 16px;
-}
\ No newline at end of file
diff --git a/profiles/wcm_base/libraries/respondjs/test/unit/test3.css b/profiles/wcm_base/libraries/respondjs/test/unit/test3.css
deleted file mode 100644
index bac9532a33967230333b708b8b6040965edea1e9..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/libraries/respondjs/test/unit/test3.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/* this stylesheet was referenced via a link that had a media attr defined
-it should only apply on screen > 87.5em (1400px) */
-#testelem {
-	width: 25px;
-}
\ No newline at end of file
diff --git a/profiles/wcm_base/libraries/respondjs/test/unit/tests.js b/profiles/wcm_base/libraries/respondjs/test/unit/tests.js
deleted file mode 100644
index cf0a93c988eecf318e38b28343b36843c627ea66..0000000000000000000000000000000000000000
--- a/profiles/wcm_base/libraries/respondjs/test/unit/tests.js
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- Respond.js unit tests - based on qUnit
-*/
-
-QUnit.config.reorder = false;
-
-window.onload = function(){
-
-	function getNormalizedUrl( filename ) {
-		var url = window.location.href;
-		return url.substr( 0, url.lastIndexOf( '/' ) + 1 ) + ( filename || '' );
-	}
-
-	// ajax doesn’t finish if you queue them while respond is already ajaxing
-	function queueRequest( callback ) {
-		var clearQueue = window.setInterval( function() {
-			if( !respond.queue.length ) {
-				window.clearInterval( clearQueue );
-				callback();
-			}
-		}, 50 );
-	}
-
-	if( !window.opener ){
-
-		document.documentElement.className = "launcher";
-
-		document.getElementById("launcher").innerHTML = '<p>Tests must run in a popup window. <a href="suite.html" id="suitelink">Open test suite</a></p>';
-
-		document.getElementById( "suitelink" ).onclick = function(){
-			window.open( location.href + "?" + Math.random(), 'win', 'width=800,height=600,scrollbars=1,resizable=1' );
-			return false;
-		};
-
-	}
-	else {
-
-		var testElem = document.getElementById("testelem");
-
-		function getWidth(){
-			return testElem.offsetWidth;
-		}
-		function getHeight(){
-			return testElem.offsetHeight;
-		}
-		
-		// A short snippet for detecting versions of IE in JavaScript - author: @padolsey
-		var ie = (function(){
-
-				var undef,
-						v = 3,
-						div = document.createElement('div'),
-						all = div.getElementsByTagName('i');
-		
-				while (
-						div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
-						all[0]
-				);
-		
-				return v > 4 ? v : undef;
-		
-		}());
-
-		window.moveTo(0,0);
-		
-		/* TESTS HERE */ 
-		asyncTest( 'Styles not nested in media queries apply as expected', function() { 
-			window.resizeTo(200,800);
-			setTimeout(function(){
-				strictEqual( getWidth(), 50, "testelem is 50px wide when window is 200px wide" );
-				start();
-			}, 900);
-		});
-		
-		asyncTest( 'styles within min-width media queries apply properly', function() { 
-			window.resizeTo(520,800);
-			setTimeout(function(){
-				strictEqual( getWidth(), 150, 'testelem is 150px wide when window is 500px wide'  );
-				start();
-			}, 900);
-		});
-		
-		// // This test is for a feature in IE7 and up
-		if( ie >= 7 ){
-			asyncTest( "attribute selectors still work (where supported) after respond runs its course", function() { 
-				window.resizeTo(520,800);
-				setTimeout(function(){
-					strictEqual( getHeight(), 200, "testelem is 200px tall when window is 500px wide" );
-					start();
-				}, 900);
-			});
-		}
-		
-		
-		asyncTest( 'styles within max-width media queries apply properly', function() { 
-			window.resizeTo(300,800);
-			setTimeout(function(){
-				strictEqual( getHeight(), 150, 'testelem is 150px tall when window is under 480px wide'  );
-				start();
-			}, 900);
-		});
-
-
-		
-		asyncTest( 'min and max-width media queries that use EM units apply properly', function() { 
-			window.resizeTo(580,800);
-			setTimeout(function(){
-				strictEqual( getWidth(), 75, 'testelem is 75px wide when window is 580px wide (between 33em and 38em)'  );
-				start();
-			}, 900);
-		});
-		
-		
-		
-		asyncTest( "styles within a min-width media query with an \"only\" keyword apply properly", function() { 
-			window.resizeTo(660,800);
-			setTimeout(function(){
-				strictEqual( getWidth(), 250, "testelem is 250px wide when window is 650px wide" );
-				start();
-			}, 900);
-		});
-		
-		asyncTest( "styles within a media query with a one true query among other false queries apply properly", function() { 
-			window.resizeTo(800,800);
-			setTimeout(function(){
-				strictEqual( getWidth(), 350, "testelem is 350px wide when window is > 620px wide" );
-				start();
-			}, 900);
-		});
-		
-		
-		
-		asyncTest( "Styles within a false media query do not apply", function() { 
-			window.resizeTo(800,800);
-			setTimeout(function(){
-				notStrictEqual( getWidth(), 500, "testelem is not 500px wide when window is 800px wide" );
-				start();
-
-			}, 900);
-		});
-
-		asyncTest( "stylesheets with a media query in a media attribute apply when they should", function() { 
-			window.resizeTo(1000,800);
-			setTimeout(function(){
-				strictEqual( getWidth(), 16, "testelem is 16px wide when window is wider than 950px" );
-				start();
-			}, 900);
-		});
-
-		// Careful, browserstack has a default resolution of 1024x768
-		asyncTest( "stylesheets with an EM-based media query in a media attribute apply when they should", function() { 
-			window.resizeTo(1150,800);
-			setTimeout(function(){
-				strictEqual( getWidth(), 25, "testelem is 25px wide when window is wider than 1100px wide. Does your screen width go that wide?" );
-				start();
-			}, 900);
-		});
-
-		asyncTest( 'Test keyframe animation inside of media query', function() { 
-			queueRequest( function() {
-				respond.ajax( getNormalizedUrl( 'test-with-keyframe.css' ),
-					function( data ) {
-						ok( data.replace( respond.regex.keyframes, '' ).match( respond.regex.media ), 'A keyframe animation doesn\'t bust the media regex.' );
-						start();
-					});
-			});
-		});
-
-		asyncTest( 'Test comments inside of a media query', function() { 
-			queueRequest( function() {
-				respond.ajax( getNormalizedUrl( 'test-with-comment.css' ),
-					function( data ) {
-						var stripped = data.replace( respond.regex.comments, '' );
-						// TODO allow /* */ inside of CSS content strings.
-						ok( stripped.match( respond.regex.media ), 'Comments don\'t bust the media regex.' );
-						ok( !stripped.match( /\/\*/gi ), 'No start comments exist in the result.' );
-						ok( !stripped.match( /\*\//gi ), 'No end comments exist in the result.' );
-						start();
-					});
-			});
-		});
-
-		test( 'Issue #242 overly agressive keyframes regex', function() {
-			strictEqual( '@media(q1){ @keyframes abc{ from{ }to{ } } } @media(q2){}'.replace( respond.regex.keyframes, '' ), '@media(q1){  } @media(q2){}' );
-			strictEqual( '@media(q1){} @keyframes abc{ from{ }to{ } } @media(q2){}'.replace( respond.regex.keyframes, '' ), '@media(q1){}  @media(q2){}' );
-			strictEqual( '@media(q1){} @media(q2){ @keyframes abc{ from{ }to{ } } }'.replace( respond.regex.keyframes, '' ), '@media(q1){} @media(q2){  }' );
-		});
-
-		test( 'Test spaces around min-width/max-width', function() {
-			ok( '@media only screen and (min-width: 1px) { }'.match( respond.regex.maxw ) === null );
-			ok( '@media only screen and ( min-width: 1px ) { }'.match( respond.regex.maxw ) === null );
-			ok( '@media only screen and (min-width: 1px) { }'.match( respond.regex.minw ).length );
-			ok( '@media only screen and ( min-width: 1px ) { }'.match( respond.regex.minw ).length );
-
-			ok( '@media only screen and (max-width: 1280px) { }'.match( respond.regex.minw ) === null );
-			ok( '@media only screen and ( max-width: 1280px ) { }'.match( respond.regex.minw ) === null );
-			ok( '@media only screen and (max-width: 1280px) { }'.match( respond.regex.maxw ).length );
-			ok( '@media only screen and ( max-width: 1280px ) { }'.match( respond.regex.maxw ).length );
-		});
-
-
-		test( 'Issue #161: spaces around inside min-width/max-width', function() {
-			ok( '@media only screen and (min-width : 1px) { }'.match( respond.regex.min ) !== null );
-			ok( '@media only screen and (max-width : 1px ) { }'.match( respond.regex.maxw ) !== null );
-		});
-
-		test( 'Issue #181: non-min-width and non-max-width queries', function() {
-			var others = ['(min--moz-device-pixel-ratio: 1.5)',
-				'(-moz-min-device-pixel-ratio: 1.5)',
-				'(-o-min-device-pixel-ratio: 1.5)',
-				'(-webkit-min-device-pixel-ratio: 1.5)',
-				'(min-device-pixel-ratio: 1.5)',
-				'(min-resolution: 1.5dppx)'],
-				str,
-				mq;
-
-			for( var j = 0, k = others.length; j<k; j++ ) {
-				str = 'only screen and (max-width: 1319px) and ' + others[ j ] + ' {}';
-				mq = str.match( respond.regex.minmaxwh );
-				equal( mq && mq[ 0 ], '(max-width: 1319px)' );
-				equal( respond.unsupportedmq( str )[ 0 ], others[ j ] );
-
-				equal( ( 'only screen and (max-width: 1319px) and (min-width: 1px) and ' + others[ j ] + ' {}' ).replace( respond.regex.minmaxwh, '' ).match( respond.regex.other )[ 0 ], others[ j ] );
-				equal( ( 'only screen and (max-width: 1319px) and (min-height: 1px) and ' + others[ j ] + ' {}' ).replace( respond.regex.minmaxwh, '' ).match( respond.regex.other )[ 0 ], others[ j ] );
-			}
-		});
-
-		// At this point the media queries are already divided by commas
-		test( 'Issue #181: unsupported MQ tests', function() { 
-			// should pass
-			strictEqual( respond.unsupportedmq( '(min-width: 1151px)' ), null );
-			strictEqual( respond.unsupportedmq( 'all and (max-width: 699px) and (min-width: 520px)' ), null );
-			strictEqual( respond.unsupportedmq( 'print' ), null );
-
-			// source: http://www.w3.org/TR/css3-mediaqueries/
-			// should fail: looks for anything in parens that is not min/max-height/width
-			ok( respond.unsupportedmq( 'all and (orientation:portrait)' ) );
-			ok( respond.unsupportedmq( 'screen and (device-aspect-ratio: 16/9)' ) );
-			ok( respond.unsupportedmq( 'all and (color)' ) );
-			ok( respond.unsupportedmq( 'all and (min-color: 1)' ) );
-			ok( respond.unsupportedmq( 'all and (monochrome)' ) );
-			ok( respond.unsupportedmq( 'print and (min-resolution: 300dpi)' ) );
-			ok( respond.unsupportedmq( 'tv and (scan: progressive)' ) );
-			ok( respond.unsupportedmq( 'handheld and (grid) and (device-max-height: 7em)' ) );
-		});
-
-		asyncTest( 'Issue #181: full MQ with DPR', function() { 
-			queueRequest( function() {
-				respond.ajax( getNormalizedUrl( 'test-with-dpr.css' ),
-					function( data ) {
-						ok( respond.unsupportedmq( data ) );
-						start();
-					});
-			});
-		});
-	}
-	
-};
\ No newline at end of file
diff --git a/profiles/wcm_base/modules/contrib/panels/PATCHES.txt b/profiles/wcm_base/modules/contrib/panels/PATCHES.txt
index a0f87b265a3c6c31690cb66238e50819dea2ac34..e45db27f144f11e8e6cd7a24bdf0ccccbd0a2a4f 100644
--- a/profiles/wcm_base/modules/contrib/panels/PATCHES.txt
+++ b/profiles/wcm_base/modules/contrib/panels/PATCHES.txt
@@ -2,5 +2,6 @@ The following patches have been applied to this project:
 - https://www.drupal.org/files/issues/panels-export-indentation-2448825-1.patch
 - https://www.drupal.org/files/issues/panels-focus-add-content-tab-2390803-13.patch
 - https://www.drupal.org/files/issues/panels-1588212-10.patch
+- https://www.drupal.org/files/issues/panels-ipe-remove-debug-2405733-1.patch
 
 This file was automatically generated by Drush Make (http://drupal.org/project/drush).
\ No newline at end of file
diff --git a/profiles/wcm_base/modules/contrib/panels/panels_ipe/js/panels_ipe.js b/profiles/wcm_base/modules/contrib/panels/panels_ipe/js/panels_ipe.js
index b203f5e5a0dafc0831ca78998051dfd6c9b3f268..8d62da87295e40a31f0c669604c31cb9753204fd 100644
--- a/profiles/wcm_base/modules/contrib/panels/panels_ipe/js/panels_ipe.js
+++ b/profiles/wcm_base/modules/contrib/panels/panels_ipe/js/panels_ipe.js
@@ -2,12 +2,7 @@
 // Ensure the $ alias is owned by jQuery.
 (function($) {
 
-// randomly lock a pane.
-// @debug only
 Drupal.settings.Panels = Drupal.settings.Panels || {};
-Drupal.settings.Panels.RegionLock = {
-  10: { 'top': false, 'left': true, 'middle': true }
-}
 
 Drupal.PanelsIPE = {
   editors: {},
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_admin/CHANGELOG.txt b/profiles/wcm_base/modules/panopoly/panopoly_admin/CHANGELOG.txt
index 315b55a9f9fd93d7a50c53734e872c5e36c3bfda..ded32516d17a2a3035bc1436b80c7d4a7467881a 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_admin/CHANGELOG.txt
+++ b/profiles/wcm_base/modules/panopoly/panopoly_admin/CHANGELOG.txt
@@ -1,3 +1,7 @@
+Panopoly Admin 7.x-1.33, 2016-04-14
+----------------------------
+- No changes since last release.
+
 Panopoly Admin 7.x-1.32, 2016-03-03
 ----------------------------
 - No changes since last release.
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_admin/panopoly_admin.info b/profiles/wcm_base/modules/panopoly/panopoly_admin/panopoly_admin.info
index 92d612332fba21e5683ab44c1ed373916433378f..f08ede6f0de86c9ec150ae6bda24445754df689c 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_admin/panopoly_admin.info
+++ b/profiles/wcm_base/modules/panopoly/panopoly_admin/panopoly_admin.info
@@ -37,9 +37,9 @@ features[page_manager_pages][] = panopoly_admin_layout_library
 features[page_manager_pages][] = panopoly_admin_page_library
 features[page_manager_pages][] = panopoly_admin_pane_library
 
-; Information added by Drupal.org packaging script on 2016-03-03
-version = "7.x-1.32"
+; Information added by Drupal.org packaging script on 2016-04-14
+version = "7.x-1.33"
 core = "7.x"
 project = "panopoly_admin"
-datestamp = "1457024382"
+datestamp = "1460636861"
 
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_core/CHANGELOG.txt b/profiles/wcm_base/modules/panopoly/panopoly_core/CHANGELOG.txt
index bb7fa5605e44468f6077c66b75651a2e44a6b198..1f7bbd9f6fa0e45fa8f64e7d33c1e6b202302d45 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_core/CHANGELOG.txt
+++ b/profiles/wcm_base/modules/panopoly/panopoly_core/CHANGELOG.txt
@@ -1,3 +1,8 @@
+Panopoly Core 7.x-1.33, 2016-04-14
+---------------------------
+- Update to Features 2.9 for SA-CONTRIB-2016-020.
+- Remove debug code from Panels IPE.
+
 Panopoly Core 7.x-1.32, 2016-03-03
 ---------------------------
 - Security update to fieldable panels panes 1.8.
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_core/panopoly_core.info b/profiles/wcm_base/modules/panopoly/panopoly_core/panopoly_core.info
index ee3c0ce1dd89aa5fad117e4e51be29821ccea053..e075871f2417129b1283197dc048f0308fd371d3 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_core/panopoly_core.info
+++ b/profiles/wcm_base/modules/panopoly/panopoly_core/panopoly_core.info
@@ -74,9 +74,9 @@ features[variable][] = panelizer_taxonomy_term:panopoly_categories_allowed_layou
 features[variable][] = panelizer_taxonomy_term:panopoly_categories_allowed_types_default
 features[views_view][] = panopoly_taxonomy
 
-; Information added by Drupal.org packaging script on 2016-03-03
-version = "7.x-1.32"
+; Information added by Drupal.org packaging script on 2016-04-14
+version = "7.x-1.33"
 core = "7.x"
 project = "panopoly_core"
-datestamp = "1457025187"
+datestamp = "1460636869"
 
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_core/panopoly_core.make b/profiles/wcm_base/modules/panopoly/panopoly_core/panopoly_core.make
index 1107c7e222fdfdde8001656d5b8162dad3059a59..0775f79a3634a635a9bf0129b3ba705c51f15e0c 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_core/panopoly_core.make
+++ b/profiles/wcm_base/modules/panopoly/panopoly_core/panopoly_core.make
@@ -14,6 +14,7 @@ projects[panels][subdir] = contrib
 projects[panels][patch][2448825] = https://www.drupal.org/files/issues/panels-export-indentation-2448825-1.patch
 projects[panels][patch][2390803] = https://www.drupal.org/files/issues/panels-focus-add-content-tab-2390803-13.patch
 projects[panels][patch][1588212] = https://www.drupal.org/files/issues/panels-1588212-10.patch
+projects[panels][patch][2405733] = https://www.drupal.org/files/issues/panels-ipe-remove-debug-2405733-1.patch
 
 projects[panels_breadcrumbs][version] = 2.2
 projects[panels_breadcrumbs][subdir] = contrib
@@ -85,7 +86,7 @@ projects[link][subdir] = contrib
 projects[apps][version] = 1.0
 projects[apps][subdir] = contrib
 
-projects[features][version] = 2.7
+projects[features][version] = 2.9
 projects[features][subdir] = contrib
 
 projects[strongarm][version] = 2.0
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_magic/CHANGELOG.txt b/profiles/wcm_base/modules/panopoly/panopoly_magic/CHANGELOG.txt
index 1034e0a16d201c6e403fdcd9974e1ceb195e8304..6577e6a5979174804ef64c4d3170157f9cf275da 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_magic/CHANGELOG.txt
+++ b/profiles/wcm_base/modules/panopoly/panopoly_magic/CHANGELOG.txt
@@ -1,3 +1,7 @@
+Panopoly Magic 7.x-1.33, 2016-04-14
+----------------------------
+- Preview fieldset overflows in Firefox if using a very large image.
+
 Panopoly Magic 7.x-1.32, 2016-03-03
 ----------------------------
 - No changes since last release.
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_magic/css/panopoly-modal.css b/profiles/wcm_base/modules/panopoly/panopoly_magic/css/panopoly-modal.css
index 9520f13fb26bd01c031257eeae677178c0a6d644..384e27e458d92869e87991d5ce2feb41b6dc691b 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_magic/css/panopoly-modal.css
+++ b/profiles/wcm_base/modules/panopoly/panopoly_magic/css/panopoly-modal.css
@@ -191,7 +191,8 @@
  * IPE a more consistent look
  * @see https://drupal.org/node/1717644
  */
-#modal-content fieldset {
+#modal-content fieldset,
+#modal-content .panopoly-magic-preview-wrapper {
   clear: none;
   width: auto;
   position: relative;
@@ -206,7 +207,8 @@
   padding: 0 0 10px;
 }
 
-#modal-content fieldset.panopoly-magic-preview {
+#modal-content fieldset.panopoly-magic-preview,
+#modal-content .panopoly-magic-preview-wrapper.panopoly-magic-preview {
   margin-top: 2em;
   margin-bottom: 5em;
   -webkitborder-top-right-radius: 0;
@@ -214,12 +216,14 @@
   border-top-right-radius: 0;
 }
 
-#modal-content fieldset.panopoly-magic-preview-single {
+#modal-content fieldset.panopoly-magic-preview-single,
+#modal-content .panopoly-magic-preview-wrapper.panopoly-magic-preview-single {
   margin-top: 10px;
   margin-bottom: 1em;
 }
 
-#modal-content fieldset.panopoly-magic-preview-single .fieldset-wrapper {
+#modal-content fieldset.panopoly-magic-preview-single .fieldset-wrapper,
+#modal-content .panopoly-magic-preview-wrapper.panopoly-magic-preview-single .panopoly-magic-preview-inner {
   font-size: 100%;
   max-width: 100%;
   overflow-y: auto;
@@ -227,11 +231,13 @@
   max-height: 375px;
 }
 
-#modal-content fieldset.panopoly-magic-preview-single .fieldset-wrapper .panopoly-spotlight img {
+#modal-content fieldset.panopoly-magic-preview-single .fieldset-wrapper .panopoly-spotlight img,
+#modal-content .panopoly-magic-preview-wrapper.panopoly-magic-preview-single .panopoly-magic-preview-inner .panopoly-spotlight img {
   width: 100%;
 }
   
-#modal-content fieldset legend {
+#modal-content fieldset legend,
+#modal-content .panopoly-magic-preview-wrapper .panopoly-magic-preview-title-wrapper {
   background: #dbdbdb;
   border: 1px solid #ccc;
   border-bottom: none;
@@ -254,38 +260,47 @@
   border-top-right-radius: 4px;
 }
   
-#modal-content fieldset.panopoly-magic-preview legend {
+#modal-content fieldset.panopoly-magic-preview legend,
+#modal-content .panopoly-magic-preview-wrapper.panopoly-magic-preview .panopoly-magic-preview-title-wrapper {
   -moz-border-radius-topright: 0;
   -webkit-border-top-right-radius: 0;
   border-top-right-radius: 0;
 }
   
-#modal-content .fieldset-legend {
+#modal-content .fieldset-legend,
+#modal-content .panopoly-magic-preview-title-inner {
   font: bold 12px/1.5em 'Open Sans', 'Lucida Sans', 'Lucida Grande', Verdana, sans-serif;
 }
   
+/** No .panopoly-magic-preview-wrapper version because it can't be collapsed. */
 #modal-content fieldset.collapsed legend {
   -moz-border-radius: 4px;
   -webkit-border-radius: 4px;
   border-radius: 4px;
 }
 
-#modal-content fieldset legend a {
+#modal-content fieldset legend a,
+#modal-content .panopoly-magic-preview-wrapper .panopoly-magic-preview-title-wrapper a {
   color: #3b3b3b;
 }
 
 #modal-content fieldset legend a:hover,
 #modal-content fieldset legend a:focus,
-#modal-content fieldset legend a:active {
+#modal-content fieldset legend a:active,
+#modal-content .panopoly-magic-preview-wrapper .panopoly-magic-preview-title-inner a:hover,
+#modal-content .panopoly-magic-preview-wrapper .panopoly-magic-preview-title-inner a:focus,
+#modal-content .panopoly-magic-preview-wrapper .panopoly-magic-preview-title-inner a:active {
   color: #000;
 }
   
-#modal-content .fieldset-wrapper {
+#modal-content .fieldset-wrapper,
+#modal-content .panopoly-magic-preview-inner {
   padding: 0 10px;
   margin-top: 2.25em;
 }
 
-#modal-content .panopoly-magic-preview .fieldset-wrapper {
+#modal-content .panopoly-magic-preview .fieldset-wrapper,
+#modal-content .panopoly-magic-preview .panopoly-magic-preview-inner {
   max-width: 100%;
   overflow-y: auto;
   font-size: 75%;
@@ -295,11 +310,13 @@
 }
 
 #modal-content .panopoly-magic-preview .fieldset-wrapper table tr.even td, 
-#modal-content .panopoly-magic-preview .fieldset-wrapper table tr.odd td {
+#modal-content .panopoly-magic-preview .fieldset-wrapper table tr.odd td,
+#modal-content .panopoly-magic-preview .panopoly-magic-preview-inner table tr.even td, 
+#modal-content .panopoly-magic-preview .panopoly-magic-preview-inner table tr.odd td {
   padding: 3px 5px;
 }
 
-#modal-content .panopoly-magic-preview .fieldset-wrapper h2 {
+#modal-content .panopoly-magic-preview .panopoly-magic-preview-inner h2 {
   font-size: 150%;
   margin-top: .25em;
 }
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly-magic-preview.tpl.php b/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly-magic-preview.tpl.php
index 85651b52032c20b3b83eba5c266681ed273985b2..75ebd7f1d2b8ee6a1ef05c018df02597860cc61f 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly-magic-preview.tpl.php
+++ b/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly-magic-preview.tpl.php
@@ -4,15 +4,35 @@
  * Template for the Panopoly Magic preview.
  */
 ?>
-<fieldset class="<?php print $classes; ?>"<?php print $attributes; ?>>
-  <legend>
-    <?php if (!empty($add_link)): ?>
-      <?php // Only keeping 'widget-preview-title' for backcompat with 3rd party themes. ?>
-      <div class="panopoly-magic-preview-title widget-preview-title"><?php print $add_link; ?></div>
-    <?php endif; ?>
-    <span class="fieldset-legend"><?php print $title; ?></span>
-  </legend>
-  <div class="fieldset-wrapper">
-    <?php print $preview; ?>
+<?php if (!$use_legacy_fieldset): ?>
+  <div class="panopoly-magic-preview-wrapper <?php print $classes; ?>"<?php print $attributes; ?>>
+    <div class="panopoly-magic-preview-title-wrapper">
+      <?php if (!empty($add_link)): ?>
+        <div class="panopoly-magic-preview-title"><?php print $add_link; ?></div>
+      <?php endif; ?>
+      <span class="panopoly-magic-preview-title-inner"><?php print $title; ?></span>
+    </div>
+    <div class="panopoly-magic-preview-inner">
+      <?php print $preview; ?>
+    </div>
   </div>
-</fieldset>
+<?php else: ?>
+  <?php
+  /**
+   * When creating a new Panopoly theme, don't include the legacy fieldset
+   * markup below - just use the markup above and leave this out.
+   */
+  ?>
+  <fieldset class="<?php print $classes; ?>"<?php print $attributes; ?>>
+    <legend>
+      <?php if (!empty($add_link)): ?>
+        <?php // Only keeping 'widget-preview-title' for backcompat with 3rd party themes. ?>
+        <div class="panopoly-magic-preview-title widget-preview-title"><?php print $add_link; ?></div>
+      <?php endif; ?>
+      <span class="fieldset-legend"><?php print $title; ?></span>
+    </legend>
+    <div class="fieldset-wrapper">
+      <?php print $preview; ?>
+    </div>
+  </fieldset>
+<?php endif; ?>
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly_magic.info b/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly_magic.info
index 726f814af55658ffedd613f5827054dd9fed4813..b32fb434cec2e84f32b43a33f8a97416c10ff244 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly_magic.info
+++ b/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly_magic.info
@@ -15,9 +15,9 @@ stylesheets[all][] = css/panopoly-modal.css
 features[features_api][] = api:2
 files[] = plugins/views/panopoly_magic_plugin_display_panel_pane.inc
 
-; Information added by Drupal.org packaging script on 2016-03-03
-version = "7.x-1.32"
+; Information added by Drupal.org packaging script on 2016-04-14
+version = "7.x-1.33"
 core = "7.x"
 project = "panopoly_magic"
-datestamp = "1457025209"
+datestamp = "1460636906"
 
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly_magic.install b/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly_magic.install
index ac6a72aaf51d4b3663e3d143d24af2541aae3472..4b339a0115d92d0a586b97389cf457008b06cd24 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly_magic.install
+++ b/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly_magic.install
@@ -52,3 +52,12 @@ function panopoly_magic_update_7103() {
     variable_set('panopoly_magic_pane_add_preview', PANOPOLY_ADD_PREVIEW_AUTOMATIC);
   }
 }
+
+/**
+ * Preserve the legacy fieldset preview markup.
+ */
+function panopoly_magic_update_7104() {
+  if (variable_get('panopoly_magic_preview_use_legacy_fieldset', 'not set') === 'not set') {
+    variable_set('panopoly_magic_preview_use_legacy_fieldset', TRUE);
+  }
+}
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly_magic.module b/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly_magic.module
index 43cee54cce9fdc41ffa291ca4cacb7035b488eb2..51bc0247b1314f6667c6542eea229db719935434 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly_magic.module
+++ b/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly_magic.module
@@ -213,6 +213,18 @@ function panopoly_magic_configure_form($form, &$form_state) {
     '#description' => t('Some embedded javascript may cause issues with panopoly and the IPE, stripping the .js from your previews will fix this issue, but may alter the look of the preview.'),
   );
 
+  $form['panopoly_magic_preview_use_legacy_fieldset'] = array(
+    '#title' => t('Use legacy &lt;fieldset&gt; markup in preview'),
+    '#type' => 'select',
+    '#required' => TRUE,
+    '#options' => array(
+      '1' => t('Yes'),
+      '0' => t('No'),
+    ),
+    '#default_value' => variable_get('panopoly_magic_preview_use_legacy_fieldset', 0),
+    '#description' => t('The preview used to appear in a &lt;fieldset&gt;, however, that turned out to be problematic in some browsers. But if your theme depends on the old markup, you can enabled it.'),
+  );
+
   $form['advanced'] = array(
     '#title' => t('Advanced'),
     '#type' => 'fieldset',
@@ -1534,6 +1546,9 @@ function template_preprocess_panopoly_magic_preview(&$vars) {
   if (!empty($vars['single'])) {
     $vars['classes_array'][] = 'widget-preview-single';
   }
+
+  // For backcompat with themes that depend on the fieldset markup.
+  $vars['use_legacy_fieldset'] = variable_get('panopoly_magic_preview_use_legacy_fieldset', FALSE);
 }
 
 /**
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_pages/CHANGELOG.txt b/profiles/wcm_base/modules/panopoly/panopoly_pages/CHANGELOG.txt
index 68bb7abd0ec839de6efdd97545cbd3c62b8ed370..62dc479f7079f1611311cd21be66a729df3fe655 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_pages/CHANGELOG.txt
+++ b/profiles/wcm_base/modules/panopoly/panopoly_pages/CHANGELOG.txt
@@ -1,3 +1,7 @@
+Panopoly Pages 7.x-1.33, 2016-04-14
+----------------------------
+- No changes since last release.
+
 Panopoly Pages 7.x-1.32, 2016-03-03
 ----------------------------
 - No changes since last release.
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_pages/panopoly_pages.info b/profiles/wcm_base/modules/panopoly/panopoly_pages/panopoly_pages.info
index c913b1952dd7d6123e1998a33204a649f33a1189..4d12df9c826251fd2fe6f20969fc5fdc28d0b91f 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_pages/panopoly_pages.info
+++ b/profiles/wcm_base/modules/panopoly/panopoly_pages/panopoly_pages.info
@@ -67,9 +67,9 @@ features[variable][] = panelizer_node:panopoly_page_allowed_layouts_default
 features[variable][] = panelizer_node:panopoly_page_allowed_types_default
 features[variable][] = save_continue_panopoly_page
 
-; Information added by Drupal.org packaging script on 2016-03-03
-version = "7.x-1.32"
+; Information added by Drupal.org packaging script on 2016-04-14
+version = "7.x-1.33"
 core = "7.x"
 project = "panopoly_pages"
-datestamp = "1457025215"
+datestamp = "1460636919"
 
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_search/CHANGELOG.txt b/profiles/wcm_base/modules/panopoly/panopoly_search/CHANGELOG.txt
index fd19ac9dfa51e187a3881d5acdba4c6dcc6b63f0..984608822be2a560a790e05e9ac6693dbf9cbf86 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_search/CHANGELOG.txt
+++ b/profiles/wcm_base/modules/panopoly/panopoly_search/CHANGELOG.txt
@@ -1,3 +1,7 @@
+Panopoly Search 7.x-1.33, 2016-04-14
+-----------------------------
+- Don't log searches for empty keywords.
+
 Panopoly Search 7.x-1.32, 2016-03-03
 -----------------------------
 - No changes since last release.
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.info b/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.info
index 32c9378ce64693ae6ee5ce477a31ca65f234b742..6410d181aeb73df6d58b5666e4e4db8d5f0a5981 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.info
+++ b/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.info
@@ -54,9 +54,9 @@ features[variable][] = search_cron_limit
 features[views_view][] = panopoly_database_search
 features[views_view][] = panopoly_search
 
-; Information added by Drupal.org packaging script on 2016-03-03
-version = "7.x-1.32"
+; Information added by Drupal.org packaging script on 2016-04-14
+version = "7.x-1.33"
 core = "7.x"
 project = "panopoly_search"
-datestamp = "1457025222"
+datestamp = "1460636927"
 
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.module b/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.module
index 235533b8691c75cb357244e235b7f4199147e459..21510c6d009cce1b15f319eb58a8534e0e99cd49 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.module
+++ b/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.module
@@ -126,7 +126,13 @@ function panopoly_search_modules_enabled($modules) {
 function panopoly_search_search_api_query_alter($query) {
   // Mimick the logging from Drupal core's search module so that the
   // 'Top search phrase' report will work.
+
   $keys = $query->getOriginalKeys();
+  if (empty($keys)) {
+    // Don't log if keywords are empty.
+    return;
+  }
+
   $type = $query->getIndex()->getEntityType();
 
   // Try to make the type names match if possible.
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/CHANGELOG.txt b/profiles/wcm_base/modules/panopoly/panopoly_test/CHANGELOG.txt
index b6f49e1b8c9efae13a09f17dc7bb3ee97fa29535..4f1f4752f40e2aaa81a40458d67e9ea6bf72214e 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_test/CHANGELOG.txt
+++ b/profiles/wcm_base/modules/panopoly/panopoly_test/CHANGELOG.txt
@@ -1,3 +1,7 @@
+Panopoly Test 7.x-1.33, 2016-04-14
+---------------------------
+- Preview fieldset overflows in Firefox if using a very large image.
+
 Panopoly Test 7.x-1.32, 2016-03-03
 ---------------------------
 - No changes since last release.
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/panopoly_test.info b/profiles/wcm_base/modules/panopoly/panopoly_test/panopoly_test.info
index 062f83bb36cc2d1e0f36023edd1d661fd5f40d8a..ccf71f1ce9e84ad3ab7cecd8423c8353f60acadd 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_test/panopoly_test.info
+++ b/profiles/wcm_base/modules/panopoly/panopoly_test/panopoly_test.info
@@ -99,9 +99,9 @@ features_exclude[dependencies][panopoly_pages] = panopoly_pages
 features_exclude[dependencies][panelizer] = panelizer
 hidden = 1
 
-; Information added by Drupal.org packaging script on 2016-03-03
-version = "7.x-1.32"
+; Information added by Drupal.org packaging script on 2016-04-14
+version = "7.x-1.33"
 core = "7.x"
 project = "panopoly_test"
-datestamp = "1457025229"
+datestamp = "1460637317"
 
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/behat.common.yml b/profiles/wcm_base/modules/panopoly/panopoly_test/tests/behat.common.yml
index 536cb18cd621f017a265661dbc836815173a90a8..82e7387a96f161bce1abe0626236aed40854d732 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/behat.common.yml
+++ b/profiles/wcm_base/modules/panopoly/panopoly_test/tests/behat.common.yml
@@ -36,7 +36,7 @@ default:
         Bryant Flipped Sidebar: ".bryant-flipped .radix-layouts-sidebar"
         # For Panels / Panopoly specific regions.
         CTools modal: "#modalContent"
-        Live preview: "fieldset.panopoly-magic-preview"
+        Live preview: ".panopoly-magic-preview"
         Linkit modal: "#linkit-modal"
         # For the Media Browser
         Media web tab: '#media-tab-media_internet'
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_theme/CHANGELOG.txt b/profiles/wcm_base/modules/panopoly/panopoly_theme/CHANGELOG.txt
index ac62184639469e0534bb52b7cf85fa703546d2ad..5a2c89c22f58eb8f44265b43f68ca19da0383d42 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_theme/CHANGELOG.txt
+++ b/profiles/wcm_base/modules/panopoly/panopoly_theme/CHANGELOG.txt
@@ -1,3 +1,7 @@
+Panopoly Theme 7.x-1.33, 2016-04-14
+----------------------------
+- Remove the Respondjs library from Panopoly.
+
 Panopoly Theme 7.x-1.32, 2016-03-03
 ----------------------------
 - No changes since last release.
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_theme/panopoly_theme.info b/profiles/wcm_base/modules/panopoly/panopoly_theme/panopoly_theme.info
index 9e7d03473df09b793d8c4c610d5ffe50406c7078..9691d8abcda0dd5eeab1bf1223b79d3afbed88fb 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_theme/panopoly_theme.info
+++ b/profiles/wcm_base/modules/panopoly/panopoly_theme/panopoly_theme.info
@@ -11,9 +11,9 @@ stylesheets[all][] = css/panopoly-accordian.css
 stylesheets[all][] = css/panopoly-layouts.css
 features[features_api][] = api:2
 
-; Information added by Drupal.org packaging script on 2016-03-03
-version = "7.x-1.32"
+; Information added by Drupal.org packaging script on 2016-04-14
+version = "7.x-1.33"
 core = "7.x"
 project = "panopoly_theme"
-datestamp = "1457025236"
+datestamp = "1460637323"
 
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_theme/panopoly_theme.make b/profiles/wcm_base/modules/panopoly/panopoly_theme/panopoly_theme.make
index b5d6de8ca659acf846a43d1a4eeb01919d8986a6..6d22f8421b967085ec5d85c89f4dcfa6f1e1ae09 100755
--- a/profiles/wcm_base/modules/panopoly/panopoly_theme/panopoly_theme.make
+++ b/profiles/wcm_base/modules/panopoly/panopoly_theme/panopoly_theme.make
@@ -12,10 +12,14 @@ projects[radix_layouts][subdir] = contrib
 projects[respondjs][version] = 1.5
 projects[respondjs][subdir] = contrib
 
-libraries[respondjs][download][type] = git
-libraries[respondjs][download][url] = https://github.com/scottjehl/Respond.git
-libraries[respondjs][download][revision] = 86dea4ab1e93a275e2044965ab7452c3c1e2c6da
-libraries[respondjs][download][branch] = master
+; The RespondJS library is licenesed under the MIT license, and can't be
+; packaged on Drupal.org. Copy and paste the below into your distributions
+; .make file if you still need it, or clone manually from Git.
+
+;libraries[respondjs][download][type] = git
+;libraries[respondjs][download][url] = https://github.com/scottjehl/Respond.git
+;libraries[respondjs][download][revision] = 86dea4ab1e93a275e2044965ab7452c3c1e2c6da
+;libraries[respondjs][download][branch] = master
 
 ; Bundle a Few Panopoly Approved Themes
 
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_widgets/CHANGELOG.txt b/profiles/wcm_base/modules/panopoly/panopoly_widgets/CHANGELOG.txt
index 91b44e293ba95577e35bcc176f5e0dc56c078724..150cfd15a187185b7f93d42276dcf56373e8d967 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_widgets/CHANGELOG.txt
+++ b/profiles/wcm_base/modules/panopoly/panopoly_widgets/CHANGELOG.txt
@@ -1,3 +1,7 @@
+Panopoly Widgets 7.x-1.33, 2016-04-14
+------------------------------
+- No changes since last release.
+
 Panopoly Widgets 7.x-1.32, 2016-03-03
 ------------------------------
 - No changes since last release.
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.info b/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.info
index 744d09d42013f3c0107e544600c2638dfd2608c1..bbaa89cab53261661d770201be498fff0f999cf5 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.info
+++ b/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.info
@@ -119,9 +119,9 @@ features[file_display][] = video__teaser__media_youtube_image
 features[file_display][] = video__teaser__media_youtube_video
 features[views_view][] = panopoly_widgets_general_content
 
-; Information added by Drupal.org packaging script on 2016-03-03
-version = "7.x-1.32"
+; Information added by Drupal.org packaging script on 2016-04-14
+version = "7.x-1.33"
 core = "7.x"
 project = "panopoly_widgets"
-datestamp = "1457025255"
+datestamp = "1460637345"
 
diff --git a/profiles/wcm_base/themes/ocio_omega_base/css/ocio-omega-base.no-query.css b/profiles/wcm_base/themes/ocio_omega_base/css/ocio-omega-base.no-query.css
index 538991d3c7da57f942dbedf1c5deed139c0e4ac3..ccd46fecc750e4313448341d316e9cd3f17a1081 100644
--- a/profiles/wcm_base/themes/ocio_omega_base/css/ocio-omega-base.no-query.css
+++ b/profiles/wcm_base/themes/ocio_omega_base/css/ocio-omega-base.no-query.css
@@ -1851,6 +1851,48 @@ h2.pane-title {
   margin-bottom: 1em;
 }
 
+.panels-ipe .modal-content .panels-choose-layout .layout-link {
+  text-align: center;
+  height: 190px;
+}
+.panels-ipe .modal-content .panels-choose-layout .layout-link img {
+  margin-top: 0.8em;
+}
+.panels-ipe .modal-content .panels-choose-layout .layout-link > div {
+  line-height: 1.4em;
+}
+.panels-ipe .modal-content .panels-choose-layout .layout-link.current-layout {
+  background-color: #ededed;
+}
+.panels-ipe .modal-content .panels-choose-layout .layout-link .ajax-progress-throbber {
+  display: block;
+  text-align: center;
+  margin: 0 auto;
+}
+.panels-ipe .modal-content .change-layout-display {
+  display: table;
+  margin: 2em auto;
+  text-align: center;
+}
+.panels-ipe .modal-content .change-layout-display .layout-icon {
+  text-align: center;
+}
+.panels-ipe .modal-content .change-layout-display .layout-icon .caption {
+  line-height: 1.4em;
+}
+.panels-ipe .modal-content .change-layout-display > img {
+  padding: 5em 2em;
+}
+.panels-ipe .modal-content #panels-dnd-main div.panel-region h2.label {
+  margin: 0.5em 0;
+}
+
+div.pane-bundle-video .media-vimeo-video,
+div.pane-bundle-video .media-youtube-video {
+  height: auto;
+  padding: 0;
+}
+
 .more-link, .field--name-node-link {
   font-size: 15px;
   font-size: 1.5rem;
@@ -2469,6 +2511,13 @@ div.workbench-info-block #edit-submit {
   margin: 1em 0 0.4em 0;
 }
 
+hr {
+  background-color: lightgray;
+  border: 0 none;
+  height: 1px;
+  margin: 2em 0;
+}
+
 .block--book-navigation {
   background-color: #ededed;
   padding: 1em;
diff --git a/profiles/wcm_base/themes/ocio_omega_base/css/ocio-omega-base.styles.css b/profiles/wcm_base/themes/ocio_omega_base/css/ocio-omega-base.styles.css
index 8821fd7fbec295b0e0bb9e3ec4db5d833623af8a..00cfc5ea6bd46e9b606fecf4a68bd977b93fdc13 100644
--- a/profiles/wcm_base/themes/ocio_omega_base/css/ocio-omega-base.styles.css
+++ b/profiles/wcm_base/themes/ocio_omega_base/css/ocio-omega-base.styles.css
@@ -1881,6 +1881,48 @@ h2.pane-title {
   margin-bottom: 1em;
 }
 
+.panels-ipe .modal-content .panels-choose-layout .layout-link {
+  text-align: center;
+  height: 190px;
+}
+.panels-ipe .modal-content .panels-choose-layout .layout-link img {
+  margin-top: 0.8em;
+}
+.panels-ipe .modal-content .panels-choose-layout .layout-link > div {
+  line-height: 1.4em;
+}
+.panels-ipe .modal-content .panels-choose-layout .layout-link.current-layout {
+  background-color: #ededed;
+}
+.panels-ipe .modal-content .panels-choose-layout .layout-link .ajax-progress-throbber {
+  display: block;
+  text-align: center;
+  margin: 0 auto;
+}
+.panels-ipe .modal-content .change-layout-display {
+  display: table;
+  margin: 2em auto;
+  text-align: center;
+}
+.panels-ipe .modal-content .change-layout-display .layout-icon {
+  text-align: center;
+}
+.panels-ipe .modal-content .change-layout-display .layout-icon .caption {
+  line-height: 1.4em;
+}
+.panels-ipe .modal-content .change-layout-display > img {
+  padding: 5em 2em;
+}
+.panels-ipe .modal-content #panels-dnd-main div.panel-region h2.label {
+  margin: 0.5em 0;
+}
+
+div.pane-bundle-video .media-vimeo-video,
+div.pane-bundle-video .media-youtube-video {
+  height: auto;
+  padding: 0;
+}
+
 .more-link, .field--name-node-link {
   font-size: 15px;
   font-size: 1.5rem;
@@ -2501,6 +2543,13 @@ div.workbench-info-block #edit-submit {
   margin: 1em 0 0.4em 0;
 }
 
+hr {
+  background-color: lightgray;
+  border: 0 none;
+  height: 1px;
+  margin: 2em 0;
+}
+
 .block--book-navigation {
   background-color: #ededed;
   padding: 1em;
diff --git a/profiles/wcm_base/themes/ocio_omega_base/sass/components/_panels.scss b/profiles/wcm_base/themes/ocio_omega_base/sass/components/_panels.scss
index 676d181cac0294d819d72e3875cacf2387d7fdba..443412e86b1484e9a35a2f886fc6e1259afb958d 100644
--- a/profiles/wcm_base/themes/ocio_omega_base/sass/components/_panels.scss
+++ b/profiles/wcm_base/themes/ocio_omega_base/sass/components/_panels.scss
@@ -92,3 +92,56 @@ h2.pane-title {
 .tile-panel {
 	margin-bottom: 1em;
 }
+
+.panels-ipe .modal-content {
+  .panels-choose-layout .layout-link {
+    text-align: center;
+    height: 190px;
+
+    img {
+      margin-top: 0.8em;
+    }
+
+    & > div {
+      line-height: 1.4em;
+    }
+
+    &.current-layout {
+      background-color: $lt-gray;
+    }
+
+    .ajax-progress-throbber {
+      display: block;
+      text-align: center;
+      margin: 0 auto;
+    }
+  }
+
+  .change-layout-display {
+    display: table;
+    margin: 2em auto;
+    text-align: center;
+
+    .layout-icon {
+      text-align:center;
+
+      .caption {
+        line-height: 1.4em;
+      }
+    }
+
+    & > img {
+      padding: 5em 2em;
+    }
+  }
+
+  #panels-dnd-main div.panel-region h2.label {
+    margin: 0.5em 0;
+  }
+}
+
+div.pane-bundle-video .media-vimeo-video,
+div.pane-bundle-video .media-youtube-video {
+  height: auto;
+  padding: 0;
+}
diff --git a/profiles/wcm_base/themes/ocio_omega_base/sass/components/_wysiwyg.scss b/profiles/wcm_base/themes/ocio_omega_base/sass/components/_wysiwyg.scss
index 45a6eeb36bc50887f298515e9fc77b3cb122bbd1..0ae16811f558c40db3d078ecb19f5cc44283ee45 100644
--- a/profiles/wcm_base/themes/ocio_omega_base/sass/components/_wysiwyg.scss
+++ b/profiles/wcm_base/themes/ocio_omega_base/sass/components/_wysiwyg.scss
@@ -29,4 +29,11 @@
 	color: $red;
 	font-weight: 300;
 	margin: 1em 0 0.4em 0;
-}
\ No newline at end of file
+}
+
+hr {
+	background-color: darken($lt-gray, 10%);
+  border: 0 none;
+  height: 1px;
+  margin: 2em 0;
+}
diff --git a/profiles/wcm_base/wcm_base.make b/profiles/wcm_base/wcm_base.make
index ebee2168eb5de159712f4a19f448a1fce593d037..9131d5493a134f13835b3d93274528aeaddee6c3 100644
--- a/profiles/wcm_base/wcm_base.make
+++ b/profiles/wcm_base/wcm_base.make
@@ -417,32 +417,32 @@ libraries[ocio_modernizr][download][branch] = 7.x-1.x
 
 ; The Panopoly Foundation
 
-projects[panopoly_core][version] = 1.32
+projects[panopoly_core][version] = 1.33
 projects[panopoly_core][subdir] = panopoly
 
-projects[panopoly_theme][version] = 1.32
+projects[panopoly_theme][version] = 1.33
 projects[panopoly_theme][subdir] = panopoly
 
-projects[panopoly_magic][version] = 1.32
+projects[panopoly_magic][version] = 1.33
 projects[panopoly_magic][subdir] = panopoly
 
-projects[panopoly_widgets][version] = 1.32
+projects[panopoly_widgets][version] = 1.33
 projects[panopoly_widgets][subdir] = panopoly
 
-projects[panopoly_admin][version] = 1.32
+projects[panopoly_admin][version] = 1.33
 projects[panopoly_admin][subdir] = panopoly
 
 
 ; The Panopoly Toolset
 
-projects[panopoly_pages][version] = 1.32
+projects[panopoly_pages][version] = 1.33
 projects[panopoly_pages][subdir] = panopoly
 
-projects[panopoly_search][version] = 1.32
+projects[panopoly_search][version] = 1.33
 projects[panopoly_search][subdir] = panopoly
 
 
 ; For running the automated tests.
 
-projects[panopoly_test][version] = 1.32
+projects[panopoly_test][version] = 1.33
 projects[panopoly_test][subdir] = panopoly