diff --git a/core/.eslintignore b/core/.eslintignore
index 7f26db1ea68baffe399c961f72f7db8ca687d0ba..655ca871470f5d9431dcd4007ae7e64cadcef8a6 100644
--- a/core/.eslintignore
+++ b/core/.eslintignore
@@ -6,6 +6,9 @@ node_modules/**/*
 !modules/ckeditor5/js/ckeditor5_plugins/**/*.js
 modules/locale/tests/locale_test.es6.js
 !tests/Drupal/Nightwatch/**/*.js
+misc/polyfills/array.find.es6.js
+misc/polyfills/element.closest.es6.js
+misc/polyfills/object.assign.es6.js
 
 # Ignore deliberately malformed YAML files.
 modules/system/tests/fixtures/HtaccessTest/access_test.yml
diff --git a/core/assets/vendor/css-escape/css.escape.js b/core/assets/vendor/css-escape/css.escape.js
new file mode 100644
index 0000000000000000000000000000000000000000..397cf88d318d7201bd282c5427253c418708ced8
--- /dev/null
+++ b/core/assets/vendor/css-escape/css.escape.js
@@ -0,0 +1,106 @@
+/*! https://mths.be/cssescape v1.5.1 by @mathias | MIT license */
+;(function(root, factory) {
+	// https://github.com/umdjs/umd/blob/master/returnExports.js
+	if (typeof exports == 'object') {
+		// For Node.js.
+		module.exports = factory(root);
+	} else if (typeof define == 'function' && define.amd) {
+		// For AMD. Register as an anonymous module.
+		define([], factory.bind(root, root));
+	} else {
+		// For browser globals (not exposing the function separately).
+		factory(root);
+	}
+}(typeof global != 'undefined' ? global : this, function(root) {
+
+	if (root.CSS && root.CSS.escape) {
+		return root.CSS.escape;
+	}
+
+	// https://drafts.csswg.org/cssom/#serialize-an-identifier
+	var cssEscape = function(value) {
+		if (arguments.length == 0) {
+			throw new TypeError('`CSS.escape` requires an argument.');
+		}
+		var string = String(value);
+		var length = string.length;
+		var index = -1;
+		var codeUnit;
+		var result = '';
+		var firstCodeUnit = string.charCodeAt(0);
+		while (++index < length) {
+			codeUnit = string.charCodeAt(index);
+			// Note: there’s no need to special-case astral symbols, surrogate
+			// pairs, or lone surrogates.
+
+			// If the character is NULL (U+0000), then the REPLACEMENT CHARACTER
+			// (U+FFFD).
+			if (codeUnit == 0x0000) {
+				result += '\uFFFD';
+				continue;
+			}
+
+			if (
+				// If the character is in the range [\1-\1F] (U+0001 to U+001F) or is
+				// U+007F, […]
+				(codeUnit >= 0x0001 && codeUnit <= 0x001F) || codeUnit == 0x007F ||
+				// If the character is the first character and is in the range [0-9]
+				// (U+0030 to U+0039), […]
+				(index == 0 && codeUnit >= 0x0030 && codeUnit <= 0x0039) ||
+				// If the character is the second character and is in the range [0-9]
+				// (U+0030 to U+0039) and the first character is a `-` (U+002D), […]
+				(
+					index == 1 &&
+					codeUnit >= 0x0030 && codeUnit <= 0x0039 &&
+					firstCodeUnit == 0x002D
+				)
+			) {
+				// https://drafts.csswg.org/cssom/#escape-a-character-as-code-point
+				result += '\\' + codeUnit.toString(16) + ' ';
+				continue;
+			}
+
+			if (
+				// If the character is the first character and is a `-` (U+002D), and
+				// there is no second character, […]
+				index == 0 &&
+				length == 1 &&
+				codeUnit == 0x002D
+			) {
+				result += '\\' + string.charAt(index);
+				continue;
+			}
+
+			// If the character is not handled by one of the above rules and is
+			// greater than or equal to U+0080, is `-` (U+002D) or `_` (U+005F), or
+			// is in one of the ranges [0-9] (U+0030 to U+0039), [A-Z] (U+0041 to
+			// U+005A), or [a-z] (U+0061 to U+007A), […]
+			if (
+				codeUnit >= 0x0080 ||
+				codeUnit == 0x002D ||
+				codeUnit == 0x005F ||
+				codeUnit >= 0x0030 && codeUnit <= 0x0039 ||
+				codeUnit >= 0x0041 && codeUnit <= 0x005A ||
+				codeUnit >= 0x0061 && codeUnit <= 0x007A
+			) {
+				// the character itself
+				result += string.charAt(index);
+				continue;
+			}
+
+			// Otherwise, the escaped character.
+			// https://drafts.csswg.org/cssom/#escape-a-character
+			result += '\\' + string.charAt(index);
+
+		}
+		return result;
+	};
+
+	if (!root.CSS) {
+		root.CSS = {};
+	}
+
+	root.CSS.escape = cssEscape;
+	return cssEscape;
+
+}));
diff --git a/core/assets/vendor/es6-promise/es6-promise.auto.min.js b/core/assets/vendor/es6-promise/es6-promise.auto.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..5a44a3b086e844a7602e099cc008e75f1f49279c
--- /dev/null
+++ b/core/assets/vendor/es6-promise/es6-promise.auto.min.js
@@ -0,0 +1 @@
+!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.ES6Promise=e()}(this,function(){"use strict";function t(t){var e=typeof t;return null!==t&&("object"===e||"function"===e)}function e(t){return"function"==typeof t}function n(t){W=t}function r(t){z=t}function o(){return function(){return process.nextTick(a)}}function i(){return"undefined"!=typeof U?function(){U(a)}:c()}function s(){var t=0,e=new H(a),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}function u(){var t=new MessageChannel;return t.port1.onmessage=a,function(){return t.port2.postMessage(0)}}function c(){var t=setTimeout;return function(){return t(a,1)}}function a(){for(var t=0;t<N;t+=2){var e=Q[t],n=Q[t+1];e(n),Q[t]=void 0,Q[t+1]=void 0}N=0}function f(){try{var t=Function("return this")().require("vertx");return U=t.runOnLoop||t.runOnContext,i()}catch(e){return c()}}function l(t,e){var n=this,r=new this.constructor(p);void 0===r[V]&&x(r);var o=n._state;if(o){var i=arguments[o-1];z(function(){return T(o,r,i,n._result)})}else j(n,r,t,e);return r}function h(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(p);return w(n,t),n}function p(){}function v(){return new TypeError("You cannot resolve a promise with itself")}function d(){return new TypeError("A promises callback cannot return that same promise.")}function _(t,e,n,r){try{t.call(e,n,r)}catch(o){return o}}function y(t,e,n){z(function(t){var r=!1,o=_(n,e,function(n){r||(r=!0,e!==n?w(t,n):A(t,n))},function(e){r||(r=!0,S(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&o&&(r=!0,S(t,o))},t)}function m(t,e){e._state===Z?A(t,e._result):e._state===$?S(t,e._result):j(e,void 0,function(e){return w(t,e)},function(e){return S(t,e)})}function b(t,n,r){n.constructor===t.constructor&&r===l&&n.constructor.resolve===h?m(t,n):void 0===r?A(t,n):e(r)?y(t,n,r):A(t,n)}function w(e,n){if(e===n)S(e,v());else if(t(n)){var r=void 0;try{r=n.then}catch(o){return void S(e,o)}b(e,n,r)}else A(e,n)}function g(t){t._onerror&&t._onerror(t._result),E(t)}function A(t,e){t._state===X&&(t._result=e,t._state=Z,0!==t._subscribers.length&&z(E,t))}function S(t,e){t._state===X&&(t._state=$,t._result=e,z(g,t))}function j(t,e,n,r){var o=t._subscribers,i=o.length;t._onerror=null,o[i]=e,o[i+Z]=n,o[i+$]=r,0===i&&t._state&&z(E,t)}function E(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r=void 0,o=void 0,i=t._result,s=0;s<e.length;s+=3)r=e[s],o=e[s+n],r?T(n,r,o,i):o(i);t._subscribers.length=0}}function T(t,n,r,o){var i=e(r),s=void 0,u=void 0,c=!0;if(i){try{s=r(o)}catch(a){c=!1,u=a}if(n===s)return void S(n,d())}else s=o;n._state!==X||(i&&c?w(n,s):c===!1?S(n,u):t===Z?A(n,s):t===$&&S(n,s))}function M(t,e){try{e(function(e){w(t,e)},function(e){S(t,e)})}catch(n){S(t,n)}}function P(){return tt++}function x(t){t[V]=tt++,t._state=void 0,t._result=void 0,t._subscribers=[]}function C(){return new Error("Array Methods must be provided an Array")}function O(t){return new et(this,t).promise}function k(t){var e=this;return new e(L(t)?function(n,r){for(var o=t.length,i=0;i<o;i++)e.resolve(t[i]).then(n,r)}:function(t,e){return e(new TypeError("You must pass an array to race."))})}function F(t){var e=this,n=new e(p);return S(n,t),n}function Y(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function q(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function D(){var t=void 0;if("undefined"!=typeof global)t=global;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=t.Promise;if(n){var r=null;try{r=Object.prototype.toString.call(n.resolve())}catch(e){}if("[object Promise]"===r&&!n.cast)return}t.Promise=nt}var K=void 0;K=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var L=K,N=0,U=void 0,W=void 0,z=function(t,e){Q[N]=t,Q[N+1]=e,N+=2,2===N&&(W?W(a):R())},B="undefined"!=typeof window?window:void 0,G=B||{},H=G.MutationObserver||G.WebKitMutationObserver,I="undefined"==typeof self&&"undefined"!=typeof process&&"[object process]"==={}.toString.call(process),J="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,Q=new Array(1e3),R=void 0;R=I?o():H?s():J?u():void 0===B&&"function"==typeof require?f():c();var V=Math.random().toString(36).substring(2),X=void 0,Z=1,$=2,tt=0,et=function(){function t(t,e){this._instanceConstructor=t,this.promise=new t(p),this.promise[V]||x(this.promise),L(e)?(this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?A(this.promise,this._result):(this.length=this.length||0,this._enumerate(e),0===this._remaining&&A(this.promise,this._result))):S(this.promise,C())}return t.prototype._enumerate=function(t){for(var e=0;this._state===X&&e<t.length;e++)this._eachEntry(t[e],e)},t.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===h){var o=void 0,i=void 0,s=!1;try{o=t.then}catch(u){s=!0,i=u}if(o===l&&t._state!==X)this._settledAt(t._state,e,t._result);else if("function"!=typeof o)this._remaining--,this._result[e]=t;else if(n===nt){var c=new n(p);s?S(c,i):b(c,t,o),this._willSettleAt(c,e)}else this._willSettleAt(new n(function(e){return e(t)}),e)}else this._willSettleAt(r(t),e)},t.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===X&&(this._remaining--,t===$?S(r,n):this._result[e]=n),0===this._remaining&&A(r,this._result)},t.prototype._willSettleAt=function(t,e){var n=this;j(t,void 0,function(t){return n._settledAt(Z,e,t)},function(t){return n._settledAt($,e,t)})},t}(),nt=function(){function t(e){this[V]=P(),this._result=this._state=void 0,this._subscribers=[],p!==e&&("function"!=typeof e&&Y(),this instanceof t?M(this,e):q())}return t.prototype["catch"]=function(t){return this.then(null,t)},t.prototype["finally"]=function(t){var n=this,r=n.constructor;return e(t)?n.then(function(e){return r.resolve(t()).then(function(){return e})},function(e){return r.resolve(t()).then(function(){throw e})}):n.then(t,t)},t}();return nt.prototype.then=l,nt.all=O,nt.race=k,nt.resolve=h,nt.reject=F,nt._setScheduler=n,nt._setAsap=r,nt._asap=z,nt.polyfill=D,nt.Promise=nt,nt.polyfill(),nt});
\ No newline at end of file
diff --git a/core/assets/vendor/es6-promise/es6-promise.auto.min.map b/core/assets/vendor/es6-promise/es6-promise.auto.min.map
new file mode 100644
index 0000000000000000000000000000000000000000..1d2a119dad9c47b7f6c0a452f99e53d9944df152
--- /dev/null
+++ b/core/assets/vendor/es6-promise/es6-promise.auto.min.map
@@ -0,0 +1 @@
+{"version":3,"sources":["config/versionTemplate.txt","lib/es6-promise/utils.js","lib/es6-promise/asap.js","lib/es6-promise/then.js","lib/es6-promise/promise/resolve.js","lib/es6-promise/-internal.js","lib/es6-promise/enumerator.js","lib/es6-promise/promise/all.js","lib/es6-promise/promise/race.js","lib/es6-promise/promise/reject.js","lib/es6-promise/promise.js","lib/es6-promise/polyfill.js","lib/es6-promise.js","lib/es6-promise.auto.js"],"sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license   Licensed under MIT license\n *            See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version   v4.2.8+1e68dce6\n */\n","export function objectOrFunction(x) {\n  var type = typeof x;\n  return x !== null && (type === 'object' || type === 'function');\n}\n\nexport function isFunction(x) {\n  return typeof x === 'function';\n}\n\nexport function isMaybeThenable(x) {\n  return x !== null && typeof x === 'object';\n}\n\nvar _isArray = void 0;\nif (Array.isArray) {\n  _isArray = Array.isArray;\n} else {\n  _isArray = function (x) {\n    return Object.prototype.toString.call(x) === '[object Array]';\n  };\n}\n\nexport var isArray = _isArray;","var len = 0;\nvar vertxNext = void 0;\nvar customSchedulerFn = void 0;\n\nexport var asap = function asap(callback, arg) {\n  queue[len] = callback;\n  queue[len + 1] = arg;\n  len += 2;\n  if (len === 2) {\n    // If len is 2, that means that we need to schedule an async flush.\n    // If additional callbacks are queued before the queue is flushed, they\n    // will be processed by this flush that we are scheduling.\n    if (customSchedulerFn) {\n      customSchedulerFn(flush);\n    } else {\n      scheduleFlush();\n    }\n  }\n};\n\nexport function setScheduler(scheduleFn) {\n  customSchedulerFn = scheduleFn;\n}\n\nexport function setAsap(asapFn) {\n  asap = asapFn;\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n  // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n  // see https://github.com/cujojs/when/issues/410 for details\n  return function () {\n    return process.nextTick(flush);\n  };\n}\n\n// vertx\nfunction useVertxTimer() {\n  if (typeof vertxNext !== 'undefined') {\n    return function () {\n      vertxNext(flush);\n    };\n  }\n\n  return useSetTimeout();\n}\n\nfunction useMutationObserver() {\n  var iterations = 0;\n  var observer = new BrowserMutationObserver(flush);\n  var node = document.createTextNode('');\n  observer.observe(node, { characterData: true });\n\n  return function () {\n    node.data = iterations = ++iterations % 2;\n  };\n}\n\n// web worker\nfunction useMessageChannel() {\n  var channel = new MessageChannel();\n  channel.port1.onmessage = flush;\n  return function () {\n    return channel.port2.postMessage(0);\n  };\n}\n\nfunction useSetTimeout() {\n  // Store setTimeout reference so es6-promise will be unaffected by\n  // other code modifying setTimeout (like sinon.useFakeTimers())\n  var globalSetTimeout = setTimeout;\n  return function () {\n    return globalSetTimeout(flush, 1);\n  };\n}\n\nvar queue = new Array(1000);\nfunction flush() {\n  for (var i = 0; i < len; i += 2) {\n    var callback = queue[i];\n    var arg = queue[i + 1];\n\n    callback(arg);\n\n    queue[i] = undefined;\n    queue[i + 1] = undefined;\n  }\n\n  len = 0;\n}\n\nfunction attemptVertx() {\n  try {\n    var vertx = Function('return this')().require('vertx');\n    vertxNext = vertx.runOnLoop || vertx.runOnContext;\n    return useVertxTimer();\n  } catch (e) {\n    return useSetTimeout();\n  }\n}\n\nvar scheduleFlush = void 0;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n  scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n  scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n  scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && typeof require === 'function') {\n  scheduleFlush = attemptVertx();\n} else {\n  scheduleFlush = useSetTimeout();\n}","import { invokeCallback, subscribe, FULFILLED, REJECTED, noop, makePromise, PROMISE_ID } from './-internal';\n\nimport { asap } from './asap';\n\nexport default function then(onFulfillment, onRejection) {\n  var parent = this;\n\n  var child = new this.constructor(noop);\n\n  if (child[PROMISE_ID] === undefined) {\n    makePromise(child);\n  }\n\n  var _state = parent._state;\n\n\n  if (_state) {\n    var callback = arguments[_state - 1];\n    asap(function () {\n      return invokeCallback(_state, child, callback, parent._result);\n    });\n  } else {\n    subscribe(parent, child, onFulfillment, onRejection);\n  }\n\n  return child;\n}","import { noop, resolve as _resolve } from '../-internal';\n\n/**\n  `Promise.resolve` returns a promise that will become resolved with the\n  passed `value`. It is shorthand for the following:\n\n  ```javascript\n  let promise = new Promise(function(resolve, reject){\n    resolve(1);\n  });\n\n  promise.then(function(value){\n    // value === 1\n  });\n  ```\n\n  Instead of writing the above, your code now simply becomes the following:\n\n  ```javascript\n  let promise = Promise.resolve(1);\n\n  promise.then(function(value){\n    // value === 1\n  });\n  ```\n\n  @method resolve\n  @static\n  @param {Any} value value that the returned promise will be resolved with\n  Useful for tooling.\n  @return {Promise} a promise that will become fulfilled with the given\n  `value`\n*/\nexport default function resolve(object) {\n  /*jshint validthis:true */\n  var Constructor = this;\n\n  if (object && typeof object === 'object' && object.constructor === Constructor) {\n    return object;\n  }\n\n  var promise = new Constructor(noop);\n  _resolve(promise, object);\n  return promise;\n}","import { objectOrFunction, isFunction } from './utils';\n\nimport { asap } from './asap';\n\nimport originalThen from './then';\nimport originalResolve from './promise/resolve';\n\nexport var PROMISE_ID = Math.random().toString(36).substring(2);\n\nfunction noop() {}\n\nvar PENDING = void 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\n\nfunction selfFulfillment() {\n  return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n  return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n  try {\n    then.call(value, fulfillmentHandler, rejectionHandler);\n  } catch (e) {\n    return e;\n  }\n}\n\nfunction handleForeignThenable(promise, thenable, then) {\n  asap(function (promise) {\n    var sealed = false;\n    var error = tryThen(then, thenable, function (value) {\n      if (sealed) {\n        return;\n      }\n      sealed = true;\n      if (thenable !== value) {\n        resolve(promise, value);\n      } else {\n        fulfill(promise, value);\n      }\n    }, function (reason) {\n      if (sealed) {\n        return;\n      }\n      sealed = true;\n\n      reject(promise, reason);\n    }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n    if (!sealed && error) {\n      sealed = true;\n      reject(promise, error);\n    }\n  }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n  if (thenable._state === FULFILLED) {\n    fulfill(promise, thenable._result);\n  } else if (thenable._state === REJECTED) {\n    reject(promise, thenable._result);\n  } else {\n    subscribe(thenable, undefined, function (value) {\n      return resolve(promise, value);\n    }, function (reason) {\n      return reject(promise, reason);\n    });\n  }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then) {\n  if (maybeThenable.constructor === promise.constructor && then === originalThen && maybeThenable.constructor.resolve === originalResolve) {\n    handleOwnThenable(promise, maybeThenable);\n  } else {\n    if (then === undefined) {\n      fulfill(promise, maybeThenable);\n    } else if (isFunction(then)) {\n      handleForeignThenable(promise, maybeThenable, then);\n    } else {\n      fulfill(promise, maybeThenable);\n    }\n  }\n}\n\nfunction resolve(promise, value) {\n  if (promise === value) {\n    reject(promise, selfFulfillment());\n  } else if (objectOrFunction(value)) {\n    var then = void 0;\n    try {\n      then = value.then;\n    } catch (error) {\n      reject(promise, error);\n      return;\n    }\n    handleMaybeThenable(promise, value, then);\n  } else {\n    fulfill(promise, value);\n  }\n}\n\nfunction publishRejection(promise) {\n  if (promise._onerror) {\n    promise._onerror(promise._result);\n  }\n\n  publish(promise);\n}\n\nfunction fulfill(promise, value) {\n  if (promise._state !== PENDING) {\n    return;\n  }\n\n  promise._result = value;\n  promise._state = FULFILLED;\n\n  if (promise._subscribers.length !== 0) {\n    asap(publish, promise);\n  }\n}\n\nfunction reject(promise, reason) {\n  if (promise._state !== PENDING) {\n    return;\n  }\n  promise._state = REJECTED;\n  promise._result = reason;\n\n  asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n  var _subscribers = parent._subscribers;\n  var length = _subscribers.length;\n\n\n  parent._onerror = null;\n\n  _subscribers[length] = child;\n  _subscribers[length + FULFILLED] = onFulfillment;\n  _subscribers[length + REJECTED] = onRejection;\n\n  if (length === 0 && parent._state) {\n    asap(publish, parent);\n  }\n}\n\nfunction publish(promise) {\n  var subscribers = promise._subscribers;\n  var settled = promise._state;\n\n  if (subscribers.length === 0) {\n    return;\n  }\n\n  var child = void 0,\n      callback = void 0,\n      detail = promise._result;\n\n  for (var i = 0; i < subscribers.length; i += 3) {\n    child = subscribers[i];\n    callback = subscribers[i + settled];\n\n    if (child) {\n      invokeCallback(settled, child, callback, detail);\n    } else {\n      callback(detail);\n    }\n  }\n\n  promise._subscribers.length = 0;\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n  var hasCallback = isFunction(callback),\n      value = void 0,\n      error = void 0,\n      succeeded = true;\n\n  if (hasCallback) {\n    try {\n      value = callback(detail);\n    } catch (e) {\n      succeeded = false;\n      error = e;\n    }\n\n    if (promise === value) {\n      reject(promise, cannotReturnOwn());\n      return;\n    }\n  } else {\n    value = detail;\n  }\n\n  if (promise._state !== PENDING) {\n    // noop\n  } else if (hasCallback && succeeded) {\n    resolve(promise, value);\n  } else if (succeeded === false) {\n    reject(promise, error);\n  } else if (settled === FULFILLED) {\n    fulfill(promise, value);\n  } else if (settled === REJECTED) {\n    reject(promise, value);\n  }\n}\n\nfunction initializePromise(promise, resolver) {\n  try {\n    resolver(function resolvePromise(value) {\n      resolve(promise, value);\n    }, function rejectPromise(reason) {\n      reject(promise, reason);\n    });\n  } catch (e) {\n    reject(promise, e);\n  }\n}\n\nvar id = 0;\nfunction nextId() {\n  return id++;\n}\n\nfunction makePromise(promise) {\n  promise[PROMISE_ID] = id++;\n  promise._state = undefined;\n  promise._result = undefined;\n  promise._subscribers = [];\n}\n\nexport { nextId, makePromise, noop, resolve, reject, fulfill, subscribe, publish, publishRejection, initializePromise, invokeCallback, FULFILLED, REJECTED, PENDING, handleMaybeThenable };","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport { isArray, isMaybeThenable } from './utils';\nimport { noop, reject, fulfill, subscribe, FULFILLED, REJECTED, PENDING, handleMaybeThenable } from './-internal';\n\nimport then from './then';\nimport Promise from './promise';\nimport originalResolve from './promise/resolve';\nimport originalThen from './then';\nimport { makePromise, PROMISE_ID } from './-internal';\n\nfunction validationError() {\n  return new Error('Array Methods must be provided an Array');\n};\n\nvar Enumerator = function () {\n  function Enumerator(Constructor, input) {\n    this._instanceConstructor = Constructor;\n    this.promise = new Constructor(noop);\n\n    if (!this.promise[PROMISE_ID]) {\n      makePromise(this.promise);\n    }\n\n    if (isArray(input)) {\n      this.length = input.length;\n      this._remaining = input.length;\n\n      this._result = new Array(this.length);\n\n      if (this.length === 0) {\n        fulfill(this.promise, this._result);\n      } else {\n        this.length = this.length || 0;\n        this._enumerate(input);\n        if (this._remaining === 0) {\n          fulfill(this.promise, this._result);\n        }\n      }\n    } else {\n      reject(this.promise, validationError());\n    }\n  }\n\n  Enumerator.prototype._enumerate = function _enumerate(input) {\n    for (var i = 0; this._state === PENDING && i < input.length; i++) {\n      this._eachEntry(input[i], i);\n    }\n  };\n\n  Enumerator.prototype._eachEntry = function _eachEntry(entry, i) {\n    var c = this._instanceConstructor;\n    var resolve = c.resolve;\n\n\n    if (resolve === originalResolve) {\n      var _then = void 0;\n      var error = void 0;\n      var didError = false;\n      try {\n        _then = entry.then;\n      } catch (e) {\n        didError = true;\n        error = e;\n      }\n\n      if (_then === originalThen && entry._state !== PENDING) {\n        this._settledAt(entry._state, i, entry._result);\n      } else if (typeof _then !== 'function') {\n        this._remaining--;\n        this._result[i] = entry;\n      } else if (c === Promise) {\n        var promise = new c(noop);\n        if (didError) {\n          reject(promise, error);\n        } else {\n          handleMaybeThenable(promise, entry, _then);\n        }\n        this._willSettleAt(promise, i);\n      } else {\n        this._willSettleAt(new c(function (resolve) {\n          return resolve(entry);\n        }), i);\n      }\n    } else {\n      this._willSettleAt(resolve(entry), i);\n    }\n  };\n\n  Enumerator.prototype._settledAt = function _settledAt(state, i, value) {\n    var promise = this.promise;\n\n\n    if (promise._state === PENDING) {\n      this._remaining--;\n\n      if (state === REJECTED) {\n        reject(promise, value);\n      } else {\n        this._result[i] = value;\n      }\n    }\n\n    if (this._remaining === 0) {\n      fulfill(promise, this._result);\n    }\n  };\n\n  Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) {\n    var enumerator = this;\n\n    subscribe(promise, undefined, function (value) {\n      return enumerator._settledAt(FULFILLED, i, value);\n    }, function (reason) {\n      return enumerator._settledAt(REJECTED, i, reason);\n    });\n  };\n\n  return Enumerator;\n}();\n\nexport default Enumerator;\n;","import Enumerator from '../enumerator';\n\n/**\n  `Promise.all` accepts an array of promises, and returns a new promise which\n  is fulfilled with an array of fulfillment values for the passed promises, or\n  rejected with the reason of the first passed promise to be rejected. It casts all\n  elements of the passed iterable to promises as it runs this algorithm.\n\n  Example:\n\n  ```javascript\n  let promise1 = resolve(1);\n  let promise2 = resolve(2);\n  let promise3 = resolve(3);\n  let promises = [ promise1, promise2, promise3 ];\n\n  Promise.all(promises).then(function(array){\n    // The array here would be [ 1, 2, 3 ];\n  });\n  ```\n\n  If any of the `promises` given to `all` are rejected, the first promise\n  that is rejected will be given as an argument to the returned promises's\n  rejection handler. For example:\n\n  Example:\n\n  ```javascript\n  let promise1 = resolve(1);\n  let promise2 = reject(new Error(\"2\"));\n  let promise3 = reject(new Error(\"3\"));\n  let promises = [ promise1, promise2, promise3 ];\n\n  Promise.all(promises).then(function(array){\n    // Code here never runs because there are rejected promises!\n  }, function(error) {\n    // error.message === \"2\"\n  });\n  ```\n\n  @method all\n  @static\n  @param {Array} entries array of promises\n  @param {String} label optional string for labeling the promise.\n  Useful for tooling.\n  @return {Promise} promise that is fulfilled when all `promises` have been\n  fulfilled, or rejected if any of them become rejected.\n  @static\n*/\nexport default function all(entries) {\n  return new Enumerator(this, entries).promise;\n}","import { isArray } from \"../utils\";\n\n/**\n  `Promise.race` returns a new promise which is settled in the same way as the\n  first passed promise to settle.\n\n  Example:\n\n  ```javascript\n  let promise1 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      resolve('promise 1');\n    }, 200);\n  });\n\n  let promise2 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      resolve('promise 2');\n    }, 100);\n  });\n\n  Promise.race([promise1, promise2]).then(function(result){\n    // result === 'promise 2' because it was resolved before promise1\n    // was resolved.\n  });\n  ```\n\n  `Promise.race` is deterministic in that only the state of the first\n  settled promise matters. For example, even if other promises given to the\n  `promises` array argument are resolved, but the first settled promise has\n  become rejected before the other promises became fulfilled, the returned\n  promise will become rejected:\n\n  ```javascript\n  let promise1 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      resolve('promise 1');\n    }, 200);\n  });\n\n  let promise2 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      reject(new Error('promise 2'));\n    }, 100);\n  });\n\n  Promise.race([promise1, promise2]).then(function(result){\n    // Code here never runs\n  }, function(reason){\n    // reason.message === 'promise 2' because promise 2 became rejected before\n    // promise 1 became fulfilled\n  });\n  ```\n\n  An example real-world use case is implementing timeouts:\n\n  ```javascript\n  Promise.race([ajax('foo.json'), timeout(5000)])\n  ```\n\n  @method race\n  @static\n  @param {Array} promises array of promises to observe\n  Useful for tooling.\n  @return {Promise} a promise which settles in the same way as the first passed\n  promise to settle.\n*/\nexport default function race(entries) {\n  /*jshint validthis:true */\n  var Constructor = this;\n\n  if (!isArray(entries)) {\n    return new Constructor(function (_, reject) {\n      return reject(new TypeError('You must pass an array to race.'));\n    });\n  } else {\n    return new Constructor(function (resolve, reject) {\n      var length = entries.length;\n      for (var i = 0; i < length; i++) {\n        Constructor.resolve(entries[i]).then(resolve, reject);\n      }\n    });\n  }\n}","import { noop, reject as _reject } from '../-internal';\n\n/**\n  `Promise.reject` returns a promise rejected with the passed `reason`.\n  It is shorthand for the following:\n\n  ```javascript\n  let promise = new Promise(function(resolve, reject){\n    reject(new Error('WHOOPS'));\n  });\n\n  promise.then(function(value){\n    // Code here doesn't run because the promise is rejected!\n  }, function(reason){\n    // reason.message === 'WHOOPS'\n  });\n  ```\n\n  Instead of writing the above, your code now simply becomes the following:\n\n  ```javascript\n  let promise = Promise.reject(new Error('WHOOPS'));\n\n  promise.then(function(value){\n    // Code here doesn't run because the promise is rejected!\n  }, function(reason){\n    // reason.message === 'WHOOPS'\n  });\n  ```\n\n  @method reject\n  @static\n  @param {Any} reason value that the returned promise will be rejected with.\n  Useful for tooling.\n  @return {Promise} a promise rejected with the given `reason`.\n*/\nexport default function reject(reason) {\n  /*jshint validthis:true */\n  var Constructor = this;\n  var promise = new Constructor(noop);\n  _reject(promise, reason);\n  return promise;\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport { isFunction } from './utils';\nimport { noop, nextId, PROMISE_ID, initializePromise } from './-internal';\nimport { asap, setAsap, setScheduler } from './asap';\n\nimport all from './promise/all';\nimport race from './promise/race';\nimport Resolve from './promise/resolve';\nimport Reject from './promise/reject';\nimport then from './then';\n\nfunction needsResolver() {\n  throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n  throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n  Promise objects represent the eventual result of an asynchronous operation. The\n  primary way of interacting with a promise is through its `then` method, which\n  registers callbacks to receive either a promise's eventual value or the reason\n  why the promise cannot be fulfilled.\n\n  Terminology\n  -----------\n\n  - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n  - `thenable` is an object or function that defines a `then` method.\n  - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n  - `exception` is a value that is thrown using the throw statement.\n  - `reason` is a value that indicates why a promise was rejected.\n  - `settled` the final resting state of a promise, fulfilled or rejected.\n\n  A promise can be in one of three states: pending, fulfilled, or rejected.\n\n  Promises that are fulfilled have a fulfillment value and are in the fulfilled\n  state.  Promises that are rejected have a rejection reason and are in the\n  rejected state.  A fulfillment value is never a thenable.\n\n  Promises can also be said to *resolve* a value.  If this value is also a\n  promise, then the original promise's settled state will match the value's\n  settled state.  So a promise that *resolves* a promise that rejects will\n  itself reject, and a promise that *resolves* a promise that fulfills will\n  itself fulfill.\n\n\n  Basic Usage:\n  ------------\n\n  ```js\n  let promise = new Promise(function(resolve, reject) {\n    // on success\n    resolve(value);\n\n    // on failure\n    reject(reason);\n  });\n\n  promise.then(function(value) {\n    // on fulfillment\n  }, function(reason) {\n    // on rejection\n  });\n  ```\n\n  Advanced Usage:\n  ---------------\n\n  Promises shine when abstracting away asynchronous interactions such as\n  `XMLHttpRequest`s.\n\n  ```js\n  function getJSON(url) {\n    return new Promise(function(resolve, reject){\n      let xhr = new XMLHttpRequest();\n\n      xhr.open('GET', url);\n      xhr.onreadystatechange = handler;\n      xhr.responseType = 'json';\n      xhr.setRequestHeader('Accept', 'application/json');\n      xhr.send();\n\n      function handler() {\n        if (this.readyState === this.DONE) {\n          if (this.status === 200) {\n            resolve(this.response);\n          } else {\n            reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n          }\n        }\n      };\n    });\n  }\n\n  getJSON('/posts.json').then(function(json) {\n    // on fulfillment\n  }, function(reason) {\n    // on rejection\n  });\n  ```\n\n  Unlike callbacks, promises are great composable primitives.\n\n  ```js\n  Promise.all([\n    getJSON('/posts'),\n    getJSON('/comments')\n  ]).then(function(values){\n    values[0] // => postsJSON\n    values[1] // => commentsJSON\n\n    return values;\n  });\n  ```\n\n  @class Promise\n  @param {Function} resolver\n  Useful for tooling.\n  @constructor\n*/\n\nvar Promise = function () {\n  function Promise(resolver) {\n    this[PROMISE_ID] = nextId();\n    this._result = this._state = undefined;\n    this._subscribers = [];\n\n    if (noop !== resolver) {\n      typeof resolver !== 'function' && needsResolver();\n      this instanceof Promise ? initializePromise(this, resolver) : needsNew();\n    }\n  }\n\n  /**\n  The primary way of interacting with a promise is through its `then` method,\n  which registers callbacks to receive either a promise's eventual value or the\n  reason why the promise cannot be fulfilled.\n   ```js\n  findUser().then(function(user){\n    // user is available\n  }, function(reason){\n    // user is unavailable, and you are given the reason why\n  });\n  ```\n   Chaining\n  --------\n   The return value of `then` is itself a promise.  This second, 'downstream'\n  promise is resolved with the return value of the first promise's fulfillment\n  or rejection handler, or rejected if the handler throws an exception.\n   ```js\n  findUser().then(function (user) {\n    return user.name;\n  }, function (reason) {\n    return 'default name';\n  }).then(function (userName) {\n    // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n    // will be `'default name'`\n  });\n   findUser().then(function (user) {\n    throw new Error('Found user, but still unhappy');\n  }, function (reason) {\n    throw new Error('`findUser` rejected and we're unhappy');\n  }).then(function (value) {\n    // never reached\n  }, function (reason) {\n    // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n    // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n  });\n  ```\n  If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n   ```js\n  findUser().then(function (user) {\n    throw new PedagogicalException('Upstream error');\n  }).then(function (value) {\n    // never reached\n  }).then(function (value) {\n    // never reached\n  }, function (reason) {\n    // The `PedgagocialException` is propagated all the way down to here\n  });\n  ```\n   Assimilation\n  ------------\n   Sometimes the value you want to propagate to a downstream promise can only be\n  retrieved asynchronously. This can be achieved by returning a promise in the\n  fulfillment or rejection handler. The downstream promise will then be pending\n  until the returned promise is settled. This is called *assimilation*.\n   ```js\n  findUser().then(function (user) {\n    return findCommentsByAuthor(user);\n  }).then(function (comments) {\n    // The user's comments are now available\n  });\n  ```\n   If the assimliated promise rejects, then the downstream promise will also reject.\n   ```js\n  findUser().then(function (user) {\n    return findCommentsByAuthor(user);\n  }).then(function (comments) {\n    // If `findCommentsByAuthor` fulfills, we'll have the value here\n  }, function (reason) {\n    // If `findCommentsByAuthor` rejects, we'll have the reason here\n  });\n  ```\n   Simple Example\n  --------------\n   Synchronous Example\n   ```javascript\n  let result;\n   try {\n    result = findResult();\n    // success\n  } catch(reason) {\n    // failure\n  }\n  ```\n   Errback Example\n   ```js\n  findResult(function(result, err){\n    if (err) {\n      // failure\n    } else {\n      // success\n    }\n  });\n  ```\n   Promise Example;\n   ```javascript\n  findResult().then(function(result){\n    // success\n  }, function(reason){\n    // failure\n  });\n  ```\n   Advanced Example\n  --------------\n   Synchronous Example\n   ```javascript\n  let author, books;\n   try {\n    author = findAuthor();\n    books  = findBooksByAuthor(author);\n    // success\n  } catch(reason) {\n    // failure\n  }\n  ```\n   Errback Example\n   ```js\n   function foundBooks(books) {\n   }\n   function failure(reason) {\n   }\n   findAuthor(function(author, err){\n    if (err) {\n      failure(err);\n      // failure\n    } else {\n      try {\n        findBoooksByAuthor(author, function(books, err) {\n          if (err) {\n            failure(err);\n          } else {\n            try {\n              foundBooks(books);\n            } catch(reason) {\n              failure(reason);\n            }\n          }\n        });\n      } catch(error) {\n        failure(err);\n      }\n      // success\n    }\n  });\n  ```\n   Promise Example;\n   ```javascript\n  findAuthor().\n    then(findBooksByAuthor).\n    then(function(books){\n      // found books\n  }).catch(function(reason){\n    // something went wrong\n  });\n  ```\n   @method then\n  @param {Function} onFulfilled\n  @param {Function} onRejected\n  Useful for tooling.\n  @return {Promise}\n  */\n\n  /**\n  `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n  as the catch block of a try/catch statement.\n  ```js\n  function findAuthor(){\n  throw new Error('couldn't find that author');\n  }\n  // synchronous\n  try {\n  findAuthor();\n  } catch(reason) {\n  // something went wrong\n  }\n  // async with promises\n  findAuthor().catch(function(reason){\n  // something went wrong\n  });\n  ```\n  @method catch\n  @param {Function} onRejection\n  Useful for tooling.\n  @return {Promise}\n  */\n\n\n  Promise.prototype.catch = function _catch(onRejection) {\n    return this.then(null, onRejection);\n  };\n\n  /**\n    `finally` will be invoked regardless of the promise's fate just as native\n    try/catch/finally behaves\n  \n    Synchronous example:\n  \n    ```js\n    findAuthor() {\n      if (Math.random() > 0.5) {\n        throw new Error();\n      }\n      return new Author();\n    }\n  \n    try {\n      return findAuthor(); // succeed or fail\n    } catch(error) {\n      return findOtherAuther();\n    } finally {\n      // always runs\n      // doesn't affect the return value\n    }\n    ```\n  \n    Asynchronous example:\n  \n    ```js\n    findAuthor().catch(function(reason){\n      return findOtherAuther();\n    }).finally(function(){\n      // author was either found, or not\n    });\n    ```\n  \n    @method finally\n    @param {Function} callback\n    @return {Promise}\n  */\n\n\n  Promise.prototype.finally = function _finally(callback) {\n    var promise = this;\n    var constructor = promise.constructor;\n\n    if (isFunction(callback)) {\n      return promise.then(function (value) {\n        return constructor.resolve(callback()).then(function () {\n          return value;\n        });\n      }, function (reason) {\n        return constructor.resolve(callback()).then(function () {\n          throw reason;\n        });\n      });\n    }\n\n    return promise.then(callback, callback);\n  };\n\n  return Promise;\n}();\n\nPromise.prototype.then = then;\nexport default Promise;\nPromise.all = all;\nPromise.race = race;\nPromise.resolve = Resolve;\nPromise.reject = Reject;\nPromise._setScheduler = setScheduler;\nPromise._setAsap = setAsap;\nPromise._asap = asap;","/*global self*/\nimport Promise from './promise';\n\nexport default function polyfill() {\n  var local = void 0;\n\n  if (typeof global !== 'undefined') {\n    local = global;\n  } else if (typeof self !== 'undefined') {\n    local = self;\n  } else {\n    try {\n      local = Function('return this')();\n    } catch (e) {\n      throw new Error('polyfill failed because global object is unavailable in this environment');\n    }\n  }\n\n  var P = local.Promise;\n\n  if (P) {\n    var promiseToString = null;\n    try {\n      promiseToString = Object.prototype.toString.call(P.resolve());\n    } catch (e) {\n      // silently ignored\n    }\n\n    if (promiseToString === '[object Promise]' && !P.cast) {\n      return;\n    }\n  }\n\n  local.Promise = Promise;\n}","import Promise from './es6-promise/promise';\nimport polyfill from './es6-promise/polyfill';\n\n// Strange compat..\nPromise.polyfill = polyfill;\nPromise.Promise = Promise;\nexport default Promise;","import Promise from './es6-promise';\nPromise.polyfill();\nexport default Promise;"],"names":["resolve","_resolve","then","originalThen","originalResolve","Promise","reject","_reject","Resolve","Reject"],"mappings":"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","file":"es6-promise.auto.min.js"}
\ No newline at end of file
diff --git a/core/assets/vendor/picturefill/picturefill.min.js b/core/assets/vendor/picturefill/picturefill.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..9df7198d30480847153bf2a4cd693ea59a75c991
--- /dev/null
+++ b/core/assets/vendor/picturefill/picturefill.min.js
@@ -0,0 +1,5 @@
+/*! picturefill - v3.0.2 - 2016-02-12
+ * https://scottjehl.github.io/picturefill/
+ * Copyright (c) 2016 https://github.com/scottjehl/picturefill/blob/master/Authors.txt; Licensed MIT
+ */
+!function(a){var b=navigator.userAgent;a.HTMLPictureElement&&/ecko/.test(b)&&b.match(/rv\:(\d+)/)&&RegExp.$1<45&&addEventListener("resize",function(){var b,c=document.createElement("source"),d=function(a){var b,d,e=a.parentNode;"PICTURE"===e.nodeName.toUpperCase()?(b=c.cloneNode(),e.insertBefore(b,e.firstElementChild),setTimeout(function(){e.removeChild(b)})):(!a._pfLastSize||a.offsetWidth>a._pfLastSize)&&(a._pfLastSize=a.offsetWidth,d=a.sizes,a.sizes+=",100vw",setTimeout(function(){a.sizes=d}))},e=function(){var a,b=document.querySelectorAll("picture > img, img[srcset][sizes]");for(a=0;a<b.length;a++)d(b[a])},f=function(){clearTimeout(b),b=setTimeout(e,99)},g=a.matchMedia&&matchMedia("(orientation: landscape)"),h=function(){f(),g&&g.addListener&&g.addListener(f)};return c.srcset="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",/^[c|i]|d$/.test(document.readyState||"")?h():document.addEventListener("DOMContentLoaded",h),f}())}(window),function(a,b,c){"use strict";function d(a){return" "===a||"	"===a||"\n"===a||"\f"===a||"\r"===a}function e(b,c){var d=new a.Image;return d.onerror=function(){A[b]=!1,ba()},d.onload=function(){A[b]=1===d.width,ba()},d.src=c,"pending"}function f(){M=!1,P=a.devicePixelRatio,N={},O={},s.DPR=P||1,Q.width=Math.max(a.innerWidth||0,z.clientWidth),Q.height=Math.max(a.innerHeight||0,z.clientHeight),Q.vw=Q.width/100,Q.vh=Q.height/100,r=[Q.height,Q.width,P].join("-"),Q.em=s.getEmValue(),Q.rem=Q.em}function g(a,b,c,d){var e,f,g,h;return"saveData"===B.algorithm?a>2.7?h=c+1:(f=b-c,e=Math.pow(a-.6,1.5),g=f*e,d&&(g+=.1*e),h=a+g):h=c>1?Math.sqrt(a*b):a,h>c}function h(a){var b,c=s.getSet(a),d=!1;"pending"!==c&&(d=r,c&&(b=s.setRes(c),s.applySetCandidate(b,a))),a[s.ns].evaled=d}function i(a,b){return a.res-b.res}function j(a,b,c){var d;return!c&&b&&(c=a[s.ns].sets,c=c&&c[c.length-1]),d=k(b,c),d&&(b=s.makeUrl(b),a[s.ns].curSrc=b,a[s.ns].curCan=d,d.res||aa(d,d.set.sizes)),d}function k(a,b){var c,d,e;if(a&&b)for(e=s.parseSet(b),a=s.makeUrl(a),c=0;c<e.length;c++)if(a===s.makeUrl(e[c].url)){d=e[c];break}return d}function l(a,b){var c,d,e,f,g=a.getElementsByTagName("source");for(c=0,d=g.length;d>c;c++)e=g[c],e[s.ns]=!0,f=e.getAttribute("srcset"),f&&b.push({srcset:f,media:e.getAttribute("media"),type:e.getAttribute("type"),sizes:e.getAttribute("sizes")})}function m(a,b){function c(b){var c,d=b.exec(a.substring(m));return d?(c=d[0],m+=c.length,c):void 0}function e(){var a,c,d,e,f,i,j,k,l,m=!1,o={};for(e=0;e<h.length;e++)f=h[e],i=f[f.length-1],j=f.substring(0,f.length-1),k=parseInt(j,10),l=parseFloat(j),X.test(j)&&"w"===i?((a||c)&&(m=!0),0===k?m=!0:a=k):Y.test(j)&&"x"===i?((a||c||d)&&(m=!0),0>l?m=!0:c=l):X.test(j)&&"h"===i?((d||c)&&(m=!0),0===k?m=!0:d=k):m=!0;m||(o.url=g,a&&(o.w=a),c&&(o.d=c),d&&(o.h=d),d||c||a||(o.d=1),1===o.d&&(b.has1x=!0),o.set=b,n.push(o))}function f(){for(c(T),i="",j="in descriptor";;){if(k=a.charAt(m),"in descriptor"===j)if(d(k))i&&(h.push(i),i="",j="after descriptor");else{if(","===k)return m+=1,i&&h.push(i),void e();if("("===k)i+=k,j="in parens";else{if(""===k)return i&&h.push(i),void e();i+=k}}else if("in parens"===j)if(")"===k)i+=k,j="in descriptor";else{if(""===k)return h.push(i),void e();i+=k}else if("after descriptor"===j)if(d(k));else{if(""===k)return void e();j="in descriptor",m-=1}m+=1}}for(var g,h,i,j,k,l=a.length,m=0,n=[];;){if(c(U),m>=l)return n;g=c(V),h=[],","===g.slice(-1)?(g=g.replace(W,""),e()):f()}}function n(a){function b(a){function b(){f&&(g.push(f),f="")}function c(){g[0]&&(h.push(g),g=[])}for(var e,f="",g=[],h=[],i=0,j=0,k=!1;;){if(e=a.charAt(j),""===e)return b(),c(),h;if(k){if("*"===e&&"/"===a[j+1]){k=!1,j+=2,b();continue}j+=1}else{if(d(e)){if(a.charAt(j-1)&&d(a.charAt(j-1))||!f){j+=1;continue}if(0===i){b(),j+=1;continue}e=" "}else if("("===e)i+=1;else if(")"===e)i-=1;else{if(","===e){b(),c(),j+=1;continue}if("/"===e&&"*"===a.charAt(j+1)){k=!0,j+=2;continue}}f+=e,j+=1}}}function c(a){return k.test(a)&&parseFloat(a)>=0?!0:l.test(a)?!0:"0"===a||"-0"===a||"+0"===a?!0:!1}var e,f,g,h,i,j,k=/^(?:[+-]?[0-9]+|[0-9]*\.[0-9]+)(?:[eE][+-]?[0-9]+)?(?:ch|cm|em|ex|in|mm|pc|pt|px|rem|vh|vmin|vmax|vw)$/i,l=/^calc\((?:[0-9a-z \.\+\-\*\/\(\)]+)\)$/i;for(f=b(a),g=f.length,e=0;g>e;e++)if(h=f[e],i=h[h.length-1],c(i)){if(j=i,h.pop(),0===h.length)return j;if(h=h.join(" "),s.matchesMedia(h))return j}return"100vw"}b.createElement("picture");var o,p,q,r,s={},t=!1,u=function(){},v=b.createElement("img"),w=v.getAttribute,x=v.setAttribute,y=v.removeAttribute,z=b.documentElement,A={},B={algorithm:""},C="data-pfsrc",D=C+"set",E=navigator.userAgent,F=/rident/.test(E)||/ecko/.test(E)&&E.match(/rv\:(\d+)/)&&RegExp.$1>35,G="currentSrc",H=/\s+\+?\d+(e\d+)?w/,I=/(\([^)]+\))?\s*(.+)/,J=a.picturefillCFG,K="position:absolute;left:0;visibility:hidden;display:block;padding:0;border:none;font-size:1em;width:1em;overflow:hidden;clip:rect(0px, 0px, 0px, 0px)",L="font-size:100%!important;",M=!0,N={},O={},P=a.devicePixelRatio,Q={px:1,"in":96},R=b.createElement("a"),S=!1,T=/^[ \t\n\r\u000c]+/,U=/^[, \t\n\r\u000c]+/,V=/^[^ \t\n\r\u000c]+/,W=/[,]+$/,X=/^\d+$/,Y=/^-?(?:[0-9]+|[0-9]*\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/,Z=function(a,b,c,d){a.addEventListener?a.addEventListener(b,c,d||!1):a.attachEvent&&a.attachEvent("on"+b,c)},$=function(a){var b={};return function(c){return c in b||(b[c]=a(c)),b[c]}},_=function(){var a=/^([\d\.]+)(em|vw|px)$/,b=function(){for(var a=arguments,b=0,c=a[0];++b in a;)c=c.replace(a[b],a[++b]);return c},c=$(function(a){return"return "+b((a||"").toLowerCase(),/\band\b/g,"&&",/,/g,"||",/min-([a-z-\s]+):/g,"e.$1>=",/max-([a-z-\s]+):/g,"e.$1<=",/calc([^)]+)/g,"($1)",/(\d+[\.]*[\d]*)([a-z]+)/g,"($1 * e.$2)",/^(?!(e.[a-z]|[0-9\.&=|><\+\-\*\(\)\/])).*/gi,"")+";"});return function(b,d){var e;if(!(b in N))if(N[b]=!1,d&&(e=b.match(a)))N[b]=e[1]*Q[e[2]];else try{N[b]=new Function("e",c(b))(Q)}catch(f){}return N[b]}}(),aa=function(a,b){return a.w?(a.cWidth=s.calcListLength(b||"100vw"),a.res=a.w/a.cWidth):a.res=a.d,a},ba=function(a){if(t){var c,d,e,f=a||{};if(f.elements&&1===f.elements.nodeType&&("IMG"===f.elements.nodeName.toUpperCase()?f.elements=[f.elements]:(f.context=f.elements,f.elements=null)),c=f.elements||s.qsa(f.context||b,f.reevaluate||f.reselect?s.sel:s.selShort),e=c.length){for(s.setupRun(f),S=!0,d=0;e>d;d++)s.fillImg(c[d],f);s.teardownRun(f)}}};o=a.console&&console.warn?function(a){console.warn(a)}:u,G in v||(G="src"),A["image/jpeg"]=!0,A["image/gif"]=!0,A["image/png"]=!0,A["image/svg+xml"]=b.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Image","1.1"),s.ns=("pf"+(new Date).getTime()).substr(0,9),s.supSrcset="srcset"in v,s.supSizes="sizes"in v,s.supPicture=!!a.HTMLPictureElement,s.supSrcset&&s.supPicture&&!s.supSizes&&!function(a){v.srcset="data:,a",a.src="data:,a",s.supSrcset=v.complete===a.complete,s.supPicture=s.supSrcset&&s.supPicture}(b.createElement("img")),s.supSrcset&&!s.supSizes?!function(){var a="data:image/gif;base64,R0lGODlhAgABAPAAAP///wAAACH5BAAAAAAALAAAAAACAAEAAAICBAoAOw==",c="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",d=b.createElement("img"),e=function(){var a=d.width;2===a&&(s.supSizes=!0),q=s.supSrcset&&!s.supSizes,t=!0,setTimeout(ba)};d.onload=e,d.onerror=e,d.setAttribute("sizes","9px"),d.srcset=c+" 1w,"+a+" 9w",d.src=c}():t=!0,s.selShort="picture>img,img[srcset]",s.sel=s.selShort,s.cfg=B,s.DPR=P||1,s.u=Q,s.types=A,s.setSize=u,s.makeUrl=$(function(a){return R.href=a,R.href}),s.qsa=function(a,b){return"querySelector"in a?a.querySelectorAll(b):[]},s.matchesMedia=function(){return a.matchMedia&&(matchMedia("(min-width: 0.1em)")||{}).matches?s.matchesMedia=function(a){return!a||matchMedia(a).matches}:s.matchesMedia=s.mMQ,s.matchesMedia.apply(this,arguments)},s.mMQ=function(a){return a?_(a):!0},s.calcLength=function(a){var b=_(a,!0)||!1;return 0>b&&(b=!1),b},s.supportsType=function(a){return a?A[a]:!0},s.parseSize=$(function(a){var b=(a||"").match(I);return{media:b&&b[1],length:b&&b[2]}}),s.parseSet=function(a){return a.cands||(a.cands=m(a.srcset,a)),a.cands},s.getEmValue=function(){var a;if(!p&&(a=b.body)){var c=b.createElement("div"),d=z.style.cssText,e=a.style.cssText;c.style.cssText=K,z.style.cssText=L,a.style.cssText=L,a.appendChild(c),p=c.offsetWidth,a.removeChild(c),p=parseFloat(p,10),z.style.cssText=d,a.style.cssText=e}return p||16},s.calcListLength=function(a){if(!(a in O)||B.uT){var b=s.calcLength(n(a));O[a]=b?b:Q.width}return O[a]},s.setRes=function(a){var b;if(a){b=s.parseSet(a);for(var c=0,d=b.length;d>c;c++)aa(b[c],a.sizes)}return b},s.setRes.res=aa,s.applySetCandidate=function(a,b){if(a.length){var c,d,e,f,h,k,l,m,n,o=b[s.ns],p=s.DPR;if(k=o.curSrc||b[G],l=o.curCan||j(b,k,a[0].set),l&&l.set===a[0].set&&(n=F&&!b.complete&&l.res-.1>p,n||(l.cached=!0,l.res>=p&&(h=l))),!h)for(a.sort(i),f=a.length,h=a[f-1],d=0;f>d;d++)if(c=a[d],c.res>=p){e=d-1,h=a[e]&&(n||k!==s.makeUrl(c.url))&&g(a[e].res,c.res,p,a[e].cached)?a[e]:c;break}h&&(m=s.makeUrl(h.url),o.curSrc=m,o.curCan=h,m!==k&&s.setSrc(b,h),s.setSize(b))}},s.setSrc=function(a,b){var c;a.src=b.url,"image/svg+xml"===b.set.type&&(c=a.style.width,a.style.width=a.offsetWidth+1+"px",a.offsetWidth+1&&(a.style.width=c))},s.getSet=function(a){var b,c,d,e=!1,f=a[s.ns].sets;for(b=0;b<f.length&&!e;b++)if(c=f[b],c.srcset&&s.matchesMedia(c.media)&&(d=s.supportsType(c.type))){"pending"===d&&(c=d),e=c;break}return e},s.parseSets=function(a,b,d){var e,f,g,h,i=b&&"PICTURE"===b.nodeName.toUpperCase(),j=a[s.ns];(j.src===c||d.src)&&(j.src=w.call(a,"src"),j.src?x.call(a,C,j.src):y.call(a,C)),(j.srcset===c||d.srcset||!s.supSrcset||a.srcset)&&(e=w.call(a,"srcset"),j.srcset=e,h=!0),j.sets=[],i&&(j.pic=!0,l(b,j.sets)),j.srcset?(f={srcset:j.srcset,sizes:w.call(a,"sizes")},j.sets.push(f),g=(q||j.src)&&H.test(j.srcset||""),g||!j.src||k(j.src,f)||f.has1x||(f.srcset+=", "+j.src,f.cands.push({url:j.src,d:1,set:f}))):j.src&&j.sets.push({srcset:j.src,sizes:null}),j.curCan=null,j.curSrc=c,j.supported=!(i||f&&!s.supSrcset||g&&!s.supSizes),h&&s.supSrcset&&!j.supported&&(e?(x.call(a,D,e),a.srcset=""):y.call(a,D)),j.supported&&!j.srcset&&(!j.src&&a.src||a.src!==s.makeUrl(j.src))&&(null===j.src?a.removeAttribute("src"):a.src=j.src),j.parsed=!0},s.fillImg=function(a,b){var c,d=b.reselect||b.reevaluate;a[s.ns]||(a[s.ns]={}),c=a[s.ns],(d||c.evaled!==r)&&((!c.parsed||b.reevaluate)&&s.parseSets(a,a.parentNode,b),c.supported?c.evaled=r:h(a))},s.setupRun=function(){(!S||M||P!==a.devicePixelRatio)&&f()},s.supPicture?(ba=u,s.fillImg=u):!function(){var c,d=a.attachEvent?/d$|^c/:/d$|^c|^i/,e=function(){var a=b.readyState||"";f=setTimeout(e,"loading"===a?200:999),b.body&&(s.fillImgs(),c=c||d.test(a),c&&clearTimeout(f))},f=setTimeout(e,b.body?9:99),g=function(a,b){var c,d,e=function(){var f=new Date-d;b>f?c=setTimeout(e,b-f):(c=null,a())};return function(){d=new Date,c||(c=setTimeout(e,b))}},h=z.clientHeight,i=function(){M=Math.max(a.innerWidth||0,z.clientWidth)!==Q.width||z.clientHeight!==h,h=z.clientHeight,M&&s.fillImgs()};Z(a,"resize",g(i,99)),Z(b,"readystatechange",e)}(),s.picturefill=ba,s.fillImgs=ba,s.teardownRun=u,ba._=s,a.picturefillCFG={pf:s,push:function(a){var b=a.shift();"function"==typeof s[b]?s[b].apply(s,a):(B[b]=a[0],S&&s.fillImgs({reselect:!0}))}};for(;J&&J.length;)a.picturefillCFG.push(J.shift());a.picturefill=ba,"object"==typeof module&&"object"==typeof module.exports?module.exports=ba:"function"==typeof define&&define.amd&&define("picturefill",function(){return ba}),s.supPicture||(A["image/webp"]=e("image/webp","data:image/webp;base64,UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAABBxAR/Q9ERP8DAABWUDggGAAAADABAJ0BKgEAAQADADQlpAADcAD++/1QAA=="))}(window,document);
\ No newline at end of file
diff --git a/core/core.libraries.yml b/core/core.libraries.yml
index 3f82c2ad934d9f9195ec9442c1e86b2cbd6cc333..88f64c5e9554be401b67eceea645f72cda665c2f 100644
--- a/core/core.libraries.yml
+++ b/core/core.libraries.yml
@@ -312,9 +312,14 @@ ckeditor5.translations:
     assets/vendor/ckeditor5/translation.js: {}
 
 css.escape:
-  version: VERSION
-  drupalSettings: {}
-  deprecated: The %library_id% asset library is deprecated in Drupal 10.0.0 and will be removed in Drupal 11.0.0. See https://www.drupal.org/node/3280410
+  remote: https://github.com/mathiasbynens/CSS.escape
+  version: "1.5.1"
+  license:
+    name: MIT
+    url: https://raw.githubusercontent.com/mathiasbynens/CSS.escape/v1.5.1/LICENSE-MIT.txt
+    gpl-compatible: true
+  js:
+    assets/vendor/css-escape/css.escape.js: { weight: -20 }
 
 drupal:
   version: VERSION
@@ -367,6 +372,7 @@ drupal.ajax:
     - core/jquery
     - core/drupal
     - core/drupalSettings
+    - core/drupal.nodelist.foreach
     - core/drupal.progress
     - core/once
     - core/tabbable
@@ -431,15 +437,16 @@ drupal.autocomplete:
     - core/tabbable.jquery.shim
     - core/drupal.jquery.position
 
+
 drupal.array.find:
   version: VERSION
-  drupalSettings: {}
-  deprecated: The %library_id% asset library is deprecated in Drupal 10.0.0 and will be removed in Drupal 11.0.0. See https://www.drupal.org/node/3280410
+  js:
+    misc/polyfills/array.find.js: { weight: -20 }
 
 drupal.array.includes:
   version: VERSION
-  drupalSettings: {}
-  deprecated: The %library_id% asset library is deprecated in Drupal 10.0.0 and will be removed in Drupal 11.0.0. See https://www.drupal.org/node/3280410
+  js:
+    misc/polyfills/array.includes.js: { weight: -20 }
 
 drupal.batch:
   version: VERSION
@@ -475,8 +482,8 @@ drupal.collapse:
 
 drupal.customevent:
   version: VERSION
-  drupalSettings: {}
-  deprecated: The %library_id% asset library is deprecated in Drupal 10.0.0 and will be removed in Drupal 11.0.0. See https://www.drupal.org/node/3280410
+  js:
+    misc/polyfills/customevent.js: { weight: -20 }
 
 drupal.debounce:
   version: VERSION
@@ -576,13 +583,15 @@ drupal.dropbutton:
 
 drupal.element.closest:
   version: VERSION
-  drupalSettings: {}
-  deprecated: The %library_id% asset library is deprecated in Drupal 10.0.0 and will be removed in Drupal 11.0.0. See https://www.drupal.org/node/3280410
+  js:
+    misc/polyfills/element.closest.js: { weight: -20 }
+  dependencies:
+    - core/drupal.element.matches
 
 drupal.element.matches:
   version: VERSION
-  drupalSettings: {}
-  deprecated: The %library_id% asset library is deprecated in Drupal 10.0.0 and will be removed in Drupal 11.0.0. See https://www.drupal.org/node/3280410
+  js:
+    misc/polyfills/element.matches.js: { weight: -20 }
 
 drupal.entity-form:
   version: VERSION
@@ -622,13 +631,13 @@ drupal.message:
 
 drupal.nodelist.foreach:
   version: VERSION
-  drupalSettings: {}
-  deprecated: The %library_id% asset library is deprecated in Drupal 10.0.0 and will be removed in Drupal 11.0.0. See https://www.drupal.org/node/3280410
+  js:
+    misc/polyfills/nodelist.foreach.js: { weight: -20 }
 
 drupal.object.assign:
   version: VERSION
-  drupalSettings: {}
-  deprecated: The %library_id% asset library is deprecated in Drupal 10.0.0 and will be removed in Drupal 11.0.0. See https://www.drupal.org/node/3280410
+  js:
+    misc/polyfills/object.assign.js: { weight: -20 }
 
 drupal.progress:
   version: VERSION
@@ -651,8 +660,8 @@ drupal.states:
 
 drupal.string.includes:
   version: VERSION
-  drupalSettings: {}
-  deprecated: The %library_id% asset library is deprecated in Drupal 10.0.0 and will be removed in Drupal 11.0.0. See https://www.drupal.org/node/3280410
+  js:
+    misc/polyfills/string.includes.js: { weight: -20 }
 
 drupal.tabbingmanager:
   version: VERSION
@@ -709,6 +718,7 @@ drupal.timezone:
   js:
     misc/timezone.js: {}
   dependencies:
+    - core/drupal.nodelist.foreach
     - core/jquery
     - core/once
     - core/drupal
@@ -737,9 +747,13 @@ drupal.vertical-tabs:
     - core/drupal.form
 
 es6-promise:
-  version: VERSION
-  drupalSettings: {}
-  deprecated: The %library_id% asset library is deprecated in Drupal 10.0.0 and will be removed in Drupal 11.0.0. See https://www.drupal.org/node/3280410
+  version: "4.2.8"
+  license:
+    name: MIT
+    url: https://raw.githubusercontent.com/stefanpenner/es6-promise/v4.2.8/LICENSE
+    gpl-compatible: true
+  js:
+    assets/vendor/es6-promise/es6-promise.auto.min.js: { weight: -20, minified: true }
 
 jquery:
   remote: https://github.com/jquery/jquery
@@ -835,11 +849,18 @@ once:
     gpl-compatible: true
   js:
     assets/vendor/once/once.min.js: { weight: -19, minified: true }
+  dependencies:
+    - core/drupal.element.matches
 
 picturefill:
-  version: VERSION
-  drupalSettings: {}
-  deprecated: The %library_id% asset library is deprecated in Drupal 10.0.0 and will be removed in Drupal 11.0.0. See https://www.drupal.org/node/3280410
+  remote: https://github.com/scottjehl/picturefill
+  version: "3.0.3"
+  license:
+    name: MIT
+    url: https://raw.githubusercontent.com/scottjehl/picturefill/3.0.3/LICENSE
+    gpl-compatible: true
+  js:
+    assets/vendor/picturefill/picturefill.min.js: { weight: -10, minified: true }
 
 popperjs:
   version: "2.11.5"
@@ -849,6 +870,10 @@ popperjs:
     gpl-compatible: true
   js:
     assets/vendor/popperjs/popper.min.js: { minified: true }
+  dependencies:
+    - core/drupal.array.find
+    - core/es6-promise
+    - core/drupal.object.assign
 
 sortable:
   remote: https://github.com/SortableJS/Sortable
@@ -869,6 +894,8 @@ tabbable:
     gpl-compatible: true
   js:
     assets/vendor/tabbable/index.umd.min.js: { weight: -1, minified: true }
+  dependencies:
+    - core/css.escape
 
 tabbable.jquery.shim:
   version: VERSION
diff --git a/core/misc/polyfills/array.find.es6.js b/core/misc/polyfills/array.find.es6.js
new file mode 100644
index 0000000000000000000000000000000000000000..e24f3a3c6898fbac8c96d95423dfe91d650d3d63
--- /dev/null
+++ b/core/misc/polyfills/array.find.es6.js
@@ -0,0 +1,60 @@
+/**
+ * @file
+ * Provides a polyfill for Array.find().
+ *
+ * This is needed for Internet Explorer 11 and Opera Mini.
+ *
+ * This has been copied from MDN Web Docs code samples. Code samples in the MDN
+ * Web Docs are licensed under CC0.
+ *
+ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find#Polyfill
+ * @see https://developer.mozilla.org/en-US/docs/MDN/About#Code_samples_and_snippets
+ */
+if (!Array.prototype.find) {
+  Object.defineProperty(Array.prototype, 'find', {
+    value: function (predicate) {
+      // 1. Let O be ? ToObject(this value).
+      if (this == null) {
+        throw TypeError('"this" is null or not defined');
+      }
+
+      var o = Object(this);
+
+      // 2. Let len be ? ToLength(? Get(O, "length")).
+      var len = o.length >>> 0;
+
+      // 3. If IsCallable(predicate) is false, throw a TypeError
+      // exception.
+      if (typeof predicate !== 'function') {
+        throw TypeError('predicate must be a function');
+      }
+
+      // 4. If thisArg was supplied, let T be thisArg; else let T be
+      // undefined.
+      var thisArg = arguments[1];
+
+      // 5. Let k be 0.
+      var k = 0;
+
+      // 6. Repeat, while k < len
+      while (k < len) {
+        // a. Let Pk be ! ToString(k).
+        // b. Let kValue be ? Get(O, Pk).
+        // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue,
+        //    k, O »)).
+        // d. If testResult is true, return kValue.
+        var kValue = o[k];
+        if (predicate.call(thisArg, kValue, k, o)) {
+          return kValue;
+        }
+        // e. Increase k by 1.
+        k++;
+      }
+
+      // 7. Return undefined.
+      return undefined;
+    },
+    configurable: true,
+    writable: true,
+  });
+}
diff --git a/core/misc/polyfills/array.find.js b/core/misc/polyfills/array.find.js
new file mode 100644
index 0000000000000000000000000000000000000000..e2b9706c718f2017dc794966903f88ccf093cc32
--- /dev/null
+++ b/core/misc/polyfills/array.find.js
@@ -0,0 +1,40 @@
+/**
+* DO NOT EDIT THIS FILE.
+* See the following change record for more information,
+* https://www.drupal.org/node/2815083
+* @preserve
+**/
+
+if (!Array.prototype.find) {
+  Object.defineProperty(Array.prototype, 'find', {
+    value: function (predicate) {
+      if (this == null) {
+        throw TypeError('"this" is null or not defined');
+      }
+
+      var o = Object(this);
+      var len = o.length >>> 0;
+
+      if (typeof predicate !== 'function') {
+        throw TypeError('predicate must be a function');
+      }
+
+      var thisArg = arguments[1];
+      var k = 0;
+
+      while (k < len) {
+        var kValue = o[k];
+
+        if (predicate.call(thisArg, kValue, k, o)) {
+          return kValue;
+        }
+
+        k++;
+      }
+
+      return undefined;
+    },
+    configurable: true,
+    writable: true
+  });
+}
\ No newline at end of file
diff --git a/core/misc/polyfills/array.includes.es6.js b/core/misc/polyfills/array.includes.es6.js
new file mode 100644
index 0000000000000000000000000000000000000000..afb64f16fa883e3b9bd9736d1b593ce241ec8fcc
--- /dev/null
+++ b/core/misc/polyfills/array.includes.es6.js
@@ -0,0 +1,53 @@
+/**
+ * @file
+ * Provides a polyfill for Array.includes().
+ *
+ * This is needed for Internet Explorer 11 and Opera Mini.
+ *
+ * This has based on MDN Web Docs code samples. Code samples in the MDN Web Docs
+ * are licensed under CC0.
+ *
+ * @see https://web.archive.org/web/20161012020930/https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes
+ * @see https://developer.mozilla.org/en-US/docs/MDN/About#Code_samples_and_snippets
+ */
+if (!Array.prototype.includes) {
+  // eslint-disable-next-line no-extend-native
+  Array.prototype.includes = function (searchElement) {
+    if (this == null) {
+      throw new TypeError(
+        'Array.prototype.includes called on null or undefined',
+      );
+    }
+
+    const O = Object(this);
+    const len = parseInt(O.length, 10) || 0;
+    if (len === 0) {
+      return false;
+    }
+    // eslint-disable-next-line prefer-rest-params
+    const n = parseInt(arguments[1], 10) || 0;
+    let k;
+    if (n >= 0) {
+      k = n;
+    } else {
+      k = len + n;
+      if (k < 0) {
+        k = 0;
+      }
+    }
+    let currentElement;
+    while (k < len) {
+      currentElement = O[k];
+      if (
+        searchElement === currentElement ||
+        // eslint-disable-next-line no-self-compare
+        (searchElement !== searchElement && currentElement !== currentElement)
+      ) {
+        // NaN !== NaN
+        return true;
+      }
+      k += 1;
+    }
+    return false;
+  };
+}
diff --git a/core/misc/polyfills/array.includes.js b/core/misc/polyfills/array.includes.js
new file mode 100644
index 0000000000000000000000000000000000000000..5943b58c83212c0a5f5a1ee8811cab3582324c3e
--- /dev/null
+++ b/core/misc/polyfills/array.includes.js
@@ -0,0 +1,48 @@
+/**
+* DO NOT EDIT THIS FILE.
+* See the following change record for more information,
+* https://www.drupal.org/node/2815083
+* @preserve
+**/
+
+if (!Array.prototype.includes) {
+  Array.prototype.includes = function (searchElement) {
+    if (this == null) {
+      throw new TypeError('Array.prototype.includes called on null or undefined');
+    }
+
+    const O = Object(this);
+    const len = parseInt(O.length, 10) || 0;
+
+    if (len === 0) {
+      return false;
+    }
+
+    const n = parseInt(arguments[1], 10) || 0;
+    let k;
+
+    if (n >= 0) {
+      k = n;
+    } else {
+      k = len + n;
+
+      if (k < 0) {
+        k = 0;
+      }
+    }
+
+    let currentElement;
+
+    while (k < len) {
+      currentElement = O[k];
+
+      if (searchElement === currentElement || searchElement !== searchElement && currentElement !== currentElement) {
+        return true;
+      }
+
+      k += 1;
+    }
+
+    return false;
+  };
+}
\ No newline at end of file
diff --git a/core/misc/polyfills/customevent.es6.js b/core/misc/polyfills/customevent.es6.js
new file mode 100644
index 0000000000000000000000000000000000000000..be85a56cb83392f7bd2fdcaa6ad9c8ef0d2d06b1
--- /dev/null
+++ b/core/misc/polyfills/customevent.es6.js
@@ -0,0 +1,30 @@
+/**
+ * @file
+ * Provides a polyfill for CustomEvent.
+ *
+ * This is needed for Internet Explorer 11.
+ *
+ * This has been copied from MDN Web Docs code samples. Code samples in the MDN
+ * Web Docs are licensed under CC0.
+ *
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent#Polyfill
+ * @see https://developer.mozilla.org/en-US/docs/MDN/About#Code_samples_and_snippets
+ */
+// eslint-disable-next-line func-names
+(function () {
+  if (typeof window.CustomEvent === 'function') return false;
+
+  function CustomEvent(event, params) {
+    params = params || { bubbles: false, cancelable: false, detail: null };
+    const evt = document.createEvent('CustomEvent');
+    evt.initCustomEvent(
+      event,
+      params.bubbles,
+      params.cancelable,
+      params.detail,
+    );
+    return evt;
+  }
+
+  window.CustomEvent = CustomEvent;
+})();
diff --git a/core/misc/polyfills/customevent.js b/core/misc/polyfills/customevent.js
new file mode 100644
index 0000000000000000000000000000000000000000..0e2910a4f4e2cca6913c49966a528c75f6c63778
--- /dev/null
+++ b/core/misc/polyfills/customevent.js
@@ -0,0 +1,23 @@
+/**
+* DO NOT EDIT THIS FILE.
+* See the following change record for more information,
+* https://www.drupal.org/node/2815083
+* @preserve
+**/
+
+(function () {
+  if (typeof window.CustomEvent === 'function') return false;
+
+  function CustomEvent(event, params) {
+    params = params || {
+      bubbles: false,
+      cancelable: false,
+      detail: null
+    };
+    const evt = document.createEvent('CustomEvent');
+    evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
+    return evt;
+  }
+
+  window.CustomEvent = CustomEvent;
+})();
\ No newline at end of file
diff --git a/core/misc/polyfills/element.closest.es6.js b/core/misc/polyfills/element.closest.es6.js
new file mode 100644
index 0000000000000000000000000000000000000000..d183b83393c728d37cf90d7e8fed688123fa3969
--- /dev/null
+++ b/core/misc/polyfills/element.closest.es6.js
@@ -0,0 +1,23 @@
+/**
+ * @file
+ * Provides a polyfill for Element.prototype.closest().
+ *
+ * This is needed for Internet Explorer 11 and Opera Mini.
+ *
+ * This has been copied from MDN Web Docs code samples. Code samples in the MDN
+ * Web Docs are licensed under CC0.
+ *
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#polyfill
+ * @see https://developer.mozilla.org/en-US/docs/MDN/About#Code_samples_and_snippets
+ */
+if (!Element.prototype.closest) {
+  Element.prototype.closest = function (s) {
+    var el = this;
+
+    do {
+      if (Element.prototype.matches.call(el, s)) return el;
+      el = el.parentElement || el.parentNode;
+    } while (el !== null && el.nodeType === 1);
+    return null;
+  };
+}
diff --git a/core/misc/polyfills/element.closest.js b/core/misc/polyfills/element.closest.js
new file mode 100644
index 0000000000000000000000000000000000000000..3b4c0335032bb6690c18b83fe037d5af8a94cb23
--- /dev/null
+++ b/core/misc/polyfills/element.closest.js
@@ -0,0 +1,19 @@
+/**
+* DO NOT EDIT THIS FILE.
+* See the following change record for more information,
+* https://www.drupal.org/node/2815083
+* @preserve
+**/
+
+if (!Element.prototype.closest) {
+  Element.prototype.closest = function (s) {
+    var el = this;
+
+    do {
+      if (Element.prototype.matches.call(el, s)) return el;
+      el = el.parentElement || el.parentNode;
+    } while (el !== null && el.nodeType === 1);
+
+    return null;
+  };
+}
\ No newline at end of file
diff --git a/core/misc/polyfills/element.matches.es6.js b/core/misc/polyfills/element.matches.es6.js
new file mode 100644
index 0000000000000000000000000000000000000000..0b456325a737b15e7bb0016d866263f313652be6
--- /dev/null
+++ b/core/misc/polyfills/element.matches.es6.js
@@ -0,0 +1,17 @@
+/**
+ * @file
+ * Provides a polyfill for Element.prototype.matches().
+ *
+ * This is needed for Internet Explorer 9+
+ *
+ * This has been copied from MDN Web Docs code samples. Code samples in the MDN
+ * Web Docs are licensed under CC0.
+ *
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#Polyfill
+ * @see https://developer.mozilla.org/en-US/docs/MDN/About#Code_samples_and_snippets
+ */
+if (!Element.prototype.matches) {
+  Element.prototype.matches =
+    Element.prototype.msMatchesSelector ||
+    Element.prototype.webkitMatchesSelector;
+}
diff --git a/core/misc/polyfills/element.matches.js b/core/misc/polyfills/element.matches.js
new file mode 100644
index 0000000000000000000000000000000000000000..8fc544b4b647310501654ee301d049ebd0a374a7
--- /dev/null
+++ b/core/misc/polyfills/element.matches.js
@@ -0,0 +1,10 @@
+/**
+* DO NOT EDIT THIS FILE.
+* See the following change record for more information,
+* https://www.drupal.org/node/2815083
+* @preserve
+**/
+
+if (!Element.prototype.matches) {
+  Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;
+}
\ No newline at end of file
diff --git a/core/misc/polyfills/nodelist.foreach.es6.js b/core/misc/polyfills/nodelist.foreach.es6.js
new file mode 100644
index 0000000000000000000000000000000000000000..12ddc0d44f238d9fee28efc252a16b5aa9f91f30
--- /dev/null
+++ b/core/misc/polyfills/nodelist.foreach.es6.js
@@ -0,0 +1,15 @@
+/**
+ * @file
+ * Provides a polyfill for NodeList.forEach().
+ *
+ * This is needed for Internet Explorer 11 and Opera Mini.
+ *
+ * This has been copied from MDN Web Docs code samples. Code samples in the MDN
+ * Web Docs are licensed under CC0.
+ *
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/NodeList/forEach#Polyfill
+ * @see https://developer.mozilla.org/en-US/docs/MDN/About#Code_samples_and_snippets
+ */
+if (window.NodeList && !NodeList.prototype.forEach) {
+  NodeList.prototype.forEach = Array.prototype.forEach;
+}
diff --git a/core/misc/polyfills/nodelist.foreach.js b/core/misc/polyfills/nodelist.foreach.js
new file mode 100644
index 0000000000000000000000000000000000000000..a0ecf7bbcdcc86e241c9e04a40383f146b6903b8
--- /dev/null
+++ b/core/misc/polyfills/nodelist.foreach.js
@@ -0,0 +1,10 @@
+/**
+* DO NOT EDIT THIS FILE.
+* See the following change record for more information,
+* https://www.drupal.org/node/2815083
+* @preserve
+**/
+
+if (window.NodeList && !NodeList.prototype.forEach) {
+  NodeList.prototype.forEach = Array.prototype.forEach;
+}
\ No newline at end of file
diff --git a/core/misc/polyfills/object.assign.es6.js b/core/misc/polyfills/object.assign.es6.js
new file mode 100644
index 0000000000000000000000000000000000000000..1dbb8bb5e9d1492b6c867550664153c57ba3fd8a
--- /dev/null
+++ b/core/misc/polyfills/object.assign.es6.js
@@ -0,0 +1,42 @@
+/**
+ * @file
+ * Provides a polyfill for Object.assign().
+ *
+ * This is needed for Internet Explorer 11 and Opera Mini.
+ *
+ * This has been copied from MDN Web Docs code samples. Code samples in the MDN
+ * Web Docs are licensed under CC0.
+ *
+ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Polyfill
+ * @see https://developer.mozilla.org/en-US/docs/MDN/About#Code_samples_and_snippets
+ */
+if (typeof Object.assign !== 'function') {
+  // Must be writable: true, enumerable: false, configurable: true
+  Object.defineProperty(Object, 'assign', {
+    value: function assign(target, varArgs) {
+      // .length of function is 2
+      'use strict';
+      if (target === null || target === undefined) {
+        throw new TypeError('Cannot convert undefined or null to object');
+      }
+
+      var to = Object(target);
+
+      for (var index = 1; index < arguments.length; index++) {
+        var nextSource = arguments[index];
+
+        if (nextSource !== null && nextSource !== undefined) {
+          for (var nextKey in nextSource) {
+            // Avoid bugs when hasOwnProperty is shadowed
+            if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
+              to[nextKey] = nextSource[nextKey];
+            }
+          }
+        }
+      }
+      return to;
+    },
+    writable: true,
+    configurable: true,
+  });
+}
diff --git a/core/misc/polyfills/object.assign.js b/core/misc/polyfills/object.assign.js
new file mode 100644
index 0000000000000000000000000000000000000000..265eb629a38c29703247a72d1127f518c11fc806
--- /dev/null
+++ b/core/misc/polyfills/object.assign.js
@@ -0,0 +1,36 @@
+/**
+* DO NOT EDIT THIS FILE.
+* See the following change record for more information,
+* https://www.drupal.org/node/2815083
+* @preserve
+**/
+
+if (typeof Object.assign !== 'function') {
+  Object.defineProperty(Object, 'assign', {
+    value: function assign(target, varArgs) {
+      'use strict';
+
+      if (target === null || target === undefined) {
+        throw new TypeError('Cannot convert undefined or null to object');
+      }
+
+      var to = Object(target);
+
+      for (var index = 1; index < arguments.length; index++) {
+        var nextSource = arguments[index];
+
+        if (nextSource !== null && nextSource !== undefined) {
+          for (var nextKey in nextSource) {
+            if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
+              to[nextKey] = nextSource[nextKey];
+            }
+          }
+        }
+      }
+
+      return to;
+    },
+    writable: true,
+    configurable: true
+  });
+}
\ No newline at end of file
diff --git a/core/misc/polyfills/string.includes.es6.js b/core/misc/polyfills/string.includes.es6.js
new file mode 100644
index 0000000000000000000000000000000000000000..25eebd8d126c5d4ceea7a1167e84a2cf024a39c9
--- /dev/null
+++ b/core/misc/polyfills/string.includes.es6.js
@@ -0,0 +1,26 @@
+/**
+ * @file
+ * Provides a polyfill for String.includes().
+ *
+ * This is needed for Internet Explorer 11 and Opera Mini.
+ *
+ * This has been copied from MDN Web Docs code samples. Code samples in the MDN
+ * Web Docs are licensed under CC0.
+ *
+ * @see https://web.archive.org/web/20210916035058/https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes
+ * @see https://developer.mozilla.org/en-US/docs/MDN/About#Code_samples_and_snippets
+ */
+/* eslint-disable strict, lines-around-directive, no-extend-native */
+if (!String.prototype.includes) {
+  String.prototype.includes = function (search, start) {
+    'use strict';
+
+    if (search instanceof RegExp) {
+      throw TypeError('first argument must not be a RegExp');
+    }
+    if (start === undefined) {
+      start = 0;
+    }
+    return this.indexOf(search, start) !== -1;
+  };
+}
diff --git a/core/misc/polyfills/string.includes.js b/core/misc/polyfills/string.includes.js
new file mode 100644
index 0000000000000000000000000000000000000000..1a1ea7cd04cb75fb2bff35e8c5bafaf13bfd2524
--- /dev/null
+++ b/core/misc/polyfills/string.includes.js
@@ -0,0 +1,22 @@
+/**
+* DO NOT EDIT THIS FILE.
+* See the following change record for more information,
+* https://www.drupal.org/node/2815083
+* @preserve
+**/
+
+if (!String.prototype.includes) {
+  String.prototype.includes = function (search, start) {
+    'use strict';
+
+    if (search instanceof RegExp) {
+      throw TypeError('first argument must not be a RegExp');
+    }
+
+    if (start === undefined) {
+      start = 0;
+    }
+
+    return this.indexOf(search, start) !== -1;
+  };
+}
\ No newline at end of file
diff --git a/core/modules/block/block.libraries.yml b/core/modules/block/block.libraries.yml
index ab7026fcd599b45dd267c57bc77db0a16c478223..ad6f33b105672974b62b74a1831d99e8a397a109 100644
--- a/core/modules/block/block.libraries.yml
+++ b/core/modules/block/block.libraries.yml
@@ -20,4 +20,5 @@ drupal.block.admin:
     - core/drupal.announce
     - core/drupal.debounce
     - core/drupal.dialog.ajax
+    - core/drupal.string.includes
     - core/once
diff --git a/core/modules/media_library/media_library.libraries.yml b/core/modules/media_library/media_library.libraries.yml
index 831c6ae0909862271c45dec74018b3406a13dcd3..6fd4144e6cb8e61bce7f9da5d4670fec34380ad6 100644
--- a/core/modules/media_library/media_library.libraries.yml
+++ b/core/modules/media_library/media_library.libraries.yml
@@ -23,6 +23,7 @@ widget:
     - core/drupal.dialog.ajax
     - core/once
     - core/sortable
+    - core/drupal.nodelist.foreach
 
 ui:
   version: VERSION
@@ -31,6 +32,7 @@ ui:
   dependencies:
     - core/drupal.ajax
     - core/drupal.announce
+    - core/drupal.nodelist.foreach
     - core/once
     - core/jquery
     - media_library/view
diff --git a/core/modules/responsive_image/js/responsive_image.ajax.es6.js b/core/modules/responsive_image/js/responsive_image.ajax.es6.js
new file mode 100644
index 0000000000000000000000000000000000000000..2cf6a3808789ef860ec396453bc8e8895c29ec1f
--- /dev/null
+++ b/core/modules/responsive_image/js/responsive_image.ajax.es6.js
@@ -0,0 +1,12 @@
+(function (Drupal) {
+  /**
+   * Call picturefill so newly added responsive images are processed.
+   */
+  Drupal.behaviors.responsiveImageAJAX = {
+    attach() {
+      if (window.picturefill) {
+        window.picturefill();
+      }
+    },
+  };
+})(Drupal);
diff --git a/core/modules/responsive_image/js/responsive_image.ajax.js b/core/modules/responsive_image/js/responsive_image.ajax.js
new file mode 100644
index 0000000000000000000000000000000000000000..35ffd8455730c4cfb69b4bfa9c5d622ec3c7cca7
--- /dev/null
+++ b/core/modules/responsive_image/js/responsive_image.ajax.js
@@ -0,0 +1,17 @@
+/**
+* DO NOT EDIT THIS FILE.
+* See the following change record for more information,
+* https://www.drupal.org/node/2815083
+* @preserve
+**/
+
+(function (Drupal) {
+  Drupal.behaviors.responsiveImageAJAX = {
+    attach() {
+      if (window.picturefill) {
+        window.picturefill();
+      }
+    }
+
+  };
+})(Drupal);
\ No newline at end of file
diff --git a/core/modules/responsive_image/responsive_image.libraries.yml b/core/modules/responsive_image/responsive_image.libraries.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d7f0e2ea4363baf0b022e4842214b6609f50001d
--- /dev/null
+++ b/core/modules/responsive_image/responsive_image.libraries.yml
@@ -0,0 +1,4 @@
+ajax:
+  version: VERSION
+  js:
+    js/responsive_image.ajax.js: {}
diff --git a/core/modules/responsive_image/responsive_image.module b/core/modules/responsive_image/responsive_image.module
index eab182dc6219dd6fe76ee0fdb4f943cf2647fc3c..7899c7e5b8e066ac615995e1f18b97f4afd521eb 100644
--- a/core/modules/responsive_image/responsive_image.module
+++ b/core/modules/responsive_image/responsive_image.module
@@ -29,7 +29,7 @@ function responsive_image_help($route_name, RouteMatchInterface $route_match) {
       $output .= '<dd>' . t('By creating responsive image styles you define which options the browser has in selecting which image file to display. In most cases this means providing different image sizes based on the viewport size. On the <a href=":responsive_image_style">Responsive image styles</a> page, click <em>Add responsive image style</em> to create a new style. First choose a label, a fallback image style and a breakpoint group and click Save.', [':responsive_image_style' => Url::fromRoute('entity.responsive_image_style.collection')->toString()]) . '</dd>';
       $output .= '<dl>';
       $output .= '<dt>' . t('Fallback image style') . '</dt>';
-      $output .= '<dd>' . t('The fallback image style is typically the smallest size image you expect to appear in this space. The fallback image should only appear on a site if an error occurs.') . '</dd>';
+      $output .= '<dd>' . t('The fallback image style is typically the smallest size image you expect to appear in this space. Because the responsive images module uses the Picturefill library so that responsive images can work in older browsers, the fallback image should only appear on a site if an error occurs.') . '</dd>';
       $output .= '<dt>' . t('Breakpoint groups: viewport sizing vs art direction') . '</dt>';
       $output .= '<dd>' . t('The breakpoint group typically only needs a single breakpoint with an empty media query in order to do <em>viewport sizing.</em> Multiple breakpoints are used for changing the crop or aspect ratio of images at different viewport sizes, which is often referred to as <em>art direction.</em> Once you select a breakpoint group, you can choose which breakpoints to use for the responsive image style. By default, the option <em>do not use this breakpoint</em> is selected for each breakpoint. See the <a href=":breakpoint_help">help page of the Breakpoint module</a> for more information.', [':breakpoint_help' => Url::fromRoute('help.page', ['name' => 'breakpoint'])->toString()]) . '</dd>';
       $output .= '<dt>' . t('Breakpoint settings: sizes vs image styles') . '</dt>';
@@ -191,7 +191,9 @@ function template_preprocess_responsive_image(&$variables) {
   else {
     $variables['output_image_tag'] = FALSE;
     // Prepare the fallback image. We use the src attribute, which might cause
-    // double downloads in browsers that don't support the picture tag.
+    // double downloads in browsers that don't support the picture tag (might,
+    // because when picturefill kicks in, it cancels the download and triggers
+    // the download for the correct image).
     $variables['img_element'] = [
       '#theme' => 'image',
       '#uri' => _responsive_image_image_style_url($responsive_image_style->getFallbackImageStyle(), $variables['uri']),
diff --git a/core/modules/responsive_image/src/Element/ResponsiveImage.php b/core/modules/responsive_image/src/Element/ResponsiveImage.php
index a8f1029d8e19d635ebecddc8705175f411ae2a89..2c6f677a0cb934a7697b97b9f093fd87ecaea29b 100644
--- a/core/modules/responsive_image/src/Element/ResponsiveImage.php
+++ b/core/modules/responsive_image/src/Element/ResponsiveImage.php
@@ -17,6 +17,9 @@ class ResponsiveImage extends RenderElement {
   public function getInfo() {
     return [
       '#theme' => 'responsive_image',
+      '#attached' => [
+        'library' => ['core/picturefill'],
+      ],
     ];
   }
 
diff --git a/core/modules/system/system.libraries.yml b/core/modules/system/system.libraries.yml
index 2f510872d5127c191df1656190a58c3bfe1b7009..7f77a406f2892ca1163dc72c6507c0e6e14521b1 100644
--- a/core/modules/system/system.libraries.yml
+++ b/core/modules/system/system.libraries.yml
@@ -61,6 +61,7 @@ drupal.system.modules:
     - core/jquery
     - core/drupal
     - core/drupal.debounce
+    - core/drupal.nodelist.foreach
     - core/once
     - core/drupal.announce
 
@@ -77,6 +78,7 @@ drupal.system.date:
   dependencies:
     - core/jquery
     - core/drupal
+    - core/drupal.nodelist.foreach
     - core/drupalSettings
     - core/once
     - core/drupal.form
diff --git a/core/modules/views_ui/views_ui.libraries.yml b/core/modules/views_ui/views_ui.libraries.yml
index 48758800fc84e51c45a7a6dc81ac35dad1c020a4..be90bc91c94a011cc2ed5e2a0f83b451f8a99b3d 100644
--- a/core/modules/views_ui/views_ui.libraries.yml
+++ b/core/modules/views_ui/views_ui.libraries.yml
@@ -13,6 +13,7 @@ views_ui.admin:
     - core/drupal.form
     - core/drupal.ajax
     - core/drupal.dropbutton
+    - core/drupal.nodelist.foreach
     - views/views.ajax
     - views_ui/admin.styling
 
@@ -23,6 +24,7 @@ views_ui.listing:
   dependencies:
     - core/jquery
     - core/drupal
+    - core/drupal.string.includes
     - core/once
     - views_ui/admin.styling
 
diff --git a/core/package.json b/core/package.json
index 289584fa184d840ca9044d803fa950c457c3a25c..d25cfbc6b52d2ecba07a3bc681ade51b36b85f0e 100644
--- a/core/package.json
+++ b/core/package.json
@@ -69,7 +69,9 @@
     "ckeditor5": "34.1.x",
     "cross-env": "^7.0.2",
     "cspell": "^5.0.0",
+    "css.escape": "1.5.x",
     "dotenv-safe": "^8.2.0",
+    "es6-promise": "4.2.x",
     "eslint": "^8.9.0",
     "eslint-config-airbnb-base": "^15.0.0",
     "eslint-config-prettier": "^8.4.0",
@@ -89,7 +91,9 @@
     "mkdirp": "^1.0.4",
     "nightwatch": "^2.1.3",
     "normalize.css": "8.0.x",
+    "picturefill": "3.0.x",
     "postcss": "^7.0.18",
+    "postcss-calc": "^7.0.1",
     "postcss-header": "^2.0.0",
     "postcss-import": "^12.0.1",
     "postcss-preset-env": "^6.7.0",
diff --git a/core/scripts/css/compile.js b/core/scripts/css/compile.js
index 46867eb3b506031e37214901b1e828a13bae1b34..5be0c8337322e75da4f2a339b95270c6ef6eb67b 100644
--- a/core/scripts/css/compile.js
+++ b/core/scripts/css/compile.js
@@ -1,6 +1,7 @@
 const log = require('./log');
 const fs = require('fs');
 const postcss = require('postcss');
+const postcssCalc = require("postcss-calc");
 const postcssImport = require('postcss-import');
 const postcssHeader = require('postcss-header');
 const postcssUrl = require('postcss-url');
@@ -46,6 +47,7 @@ module.exports = (filePath, callback) => {
           'prefers-color-scheme-query': false,
         }
       }),
+      postcssCalc,
       postcssPixelsToRem({
           propList: [
             '*',
diff --git a/core/scripts/js/vendor-update.js b/core/scripts/js/vendor-update.js
index a5c6e4f349a2b254c370b8509aebb83db0f16884..2353b91d42e8ae4998853b3e77b1a056c58a1a96 100644
--- a/core/scripts/js/vendor-update.js
+++ b/core/scripts/js/vendor-update.js
@@ -79,6 +79,22 @@ const assetsFolder = `${coreFolder}/assets/vendor`;
       library: 'internal.backbone',
       files: ['backbone.js', 'backbone-min.js', 'backbone-min.js.map'],
     },
+    {
+      pack: 'css.escape',
+      folder: 'css-escape',
+      library: 'css.escape',
+      files: ['css.escape.js'],
+    },
+    {
+      pack: 'es6-promise',
+      files: [
+        { from: 'dist/es6-promise.auto.min.js', to: 'es6-promise.auto.min.js' },
+        {
+          from: 'dist/es6-promise.auto.min.map',
+          to: 'es6-promise.auto.min.map',
+        },
+      ],
+    },
     {
       pack: 'farbtastic',
       library: 'jquery.farbtastic',
@@ -126,6 +142,10 @@ const assetsFolder = `${coreFolder}/assets/vendor`;
         { from: 'dist/once.min.js.map', to: 'once.min.js.map' },
       ],
     },
+    {
+      pack: 'picturefill',
+      files: [{ from: 'dist/picturefill.min.js', to: 'picturefill.min.js' }],
+    },
     {
       pack: '@popperjs/core',
       folder: 'popperjs',
diff --git a/core/themes/claro/claro.libraries.yml b/core/themes/claro/claro.libraries.yml
index dbeb894762ade1f76ff4d2eac9c8ea7006804dd4..0f57051b98790a833968720f8dcb44029b67993f 100644
--- a/core/themes/claro/claro.libraries.yml
+++ b/core/themes/claro/claro.libraries.yml
@@ -242,6 +242,7 @@ form.password-confirm:
   js:
     js/user.theme.js: {}
   dependencies:
+    - core/drupal.object.assign
     - core/drupal
     - claro/global-styling
 
diff --git a/core/themes/claro/css/base/variables.css b/core/themes/claro/css/base/variables.css
index 74128d431cf59e91974b62e449c5334d6df4e95a..876695fb55b357e11d5416525bdaf9c6f881bc36 100644
--- a/core/themes/claro/css/base/variables.css
+++ b/core/themes/claro/css/base/variables.css
@@ -88,7 +88,7 @@
   --font-family-serif: "Times New Roman", times, serif;
   --line-height: 1.5;
   --line-height-heading: 1.3;
-  --line-height-form-label: calc(18rem / 16); /* 18px */
+  --line-height-form-label: 1.125rem; /* 18px */
   --font-size-base: 1rem; /* 1rem = 16px if font root is 100% ands browser defaults are used. */
   --font-size-h1: 2.027rem; /* ~32px */
   --font-size-h2: 1.802rem; /* ~29px */
@@ -148,7 +148,7 @@
   --input-padding-horizontal: calc(var(--space-m) - var(--input-border-size));
   --input-font-size: var(--font-size-base);
   --input-line-height: var(--space-l);
-  --input-padding-vertical--small: calc(var(--space-xs) - (var(--input-border-size) * 2));
+  --input-padding-vertical--small: calc(var(--space-xs) - var(--input-border-size)*2);
   --input-padding-horizontal--small: calc(var(--space-m) - var(--input-border-size));
   --input-font-size--small: var(--font-size-xs);
   --input-line-height--small: 1.3125rem;
@@ -212,12 +212,12 @@
   --jui-dialog-title-color: var(--color-white);
   --jui-dialog-title-bg-color: var(--color-text);
   --jui-dialog-title-font-size: var(--font-size-h4);
-  --jui-dialog-close-button-size: calc(var(--space-m) * 2);
+  --jui-dialog-close-button-size: calc(var(--space-m)*2);
   --jui-dialog-close-button-border-radius: 50%;
-  --jui-dialog-close-button-reserved-space: calc(var(--space-m) * 4);
-  --jui-dialog-off-canvas-close-button-reserved-space: calc(var(--space-m) * 3);
+  --jui-dialog-close-button-reserved-space: calc(var(--space-m)*4);
+  --jui-dialog-off-canvas-close-button-reserved-space: calc(var(--space-m)*3);
   --jui-dialog-border-radius: 0.25rem;
-  --jui-dialog-box-shadow: 0 0 var(--space-m) calc(var(--space-m) / -4) var(--color-text);
+  --jui-dialog-box-shadow: 0 0 var(--space-m) calc(var(--space-m)/-4) var(--color-text);
   --jui-dialog--focus-outline: 2px dotted transparent;
   --jui-dialog--focus-box-shadow: 0 0 0 0.1875rem var(--color-focus);
   --jui-dialog-z-index: 1260;
@@ -226,7 +226,7 @@
    * Progress bar.
    */
   --progress-bar-border-size: 1px;
-  --progress-bar-small-size: calc(var(--space-xs) - (2 * var(--progress-bar-border-size)));
+  --progress-bar-small-size: calc(var(--space-xs) - var(--progress-bar-border-size)*2);
   --progress-bar-small-size-radius: var(--space-xs);
   --progress-bar-spacing-size: var(--space-xs);
   --progress-bar-transition: width 0.5s ease-out;
@@ -238,7 +238,7 @@
   /**
    * Tabledrag icon size.
    */
-  --tabledrag-handle-icon-size: calc(17rem / 16); /* 17px */
+  --tabledrag-handle-icon-size: 1.0625rem; /* 17px */
   /**
    * Ajax progress.
    */
@@ -257,10 +257,10 @@
   --vertical-tabs-border-size: 1px;
   --vertical-tabs-border: var(--vertical-tabs-border-size) solid var(--vertical-tabs-border-color);
   --vertical-tabs-menu-item-shadow-extraspace: 0.5rem;
-  --vertical-tabs-menu-item--top-margin: calc(var(--vertical-tabs-menu-item-shadow-extraspace) * -2);
-  --vertical-tabs-menu-item--right-margin: calc(var(--vertical-tabs-border-size) * -1);
-  --vertical-tabs-menu-item--bottom-margin: calc(var(--vertical-tabs-menu-item-shadow-extraspace) * -1);
-  --vertical-tabs-menu-item--left-margin: calc(var(--vertical-tabs-menu-item-shadow-extraspace) * -1);
+  --vertical-tabs-menu-item--top-margin: calc(var(--vertical-tabs-menu-item-shadow-extraspace)*-2);
+  --vertical-tabs-menu-item--right-margin: calc(var(--vertical-tabs-border-size)*-1);
+  --vertical-tabs-menu-item--bottom-margin: calc(var(--vertical-tabs-menu-item-shadow-extraspace)*-1);
+  --vertical-tabs-menu-item--left-margin: calc(var(--vertical-tabs-menu-item-shadow-extraspace)*-1);
   --vertical-tabs-menu-separator-color: var(--color-gray-200);
   --vertical-tabs-menu-separator-size: 1px;
   --vertical-tabs-menu-width: 20em;
diff --git a/core/themes/claro/css/components/action-link.css b/core/themes/claro/css/components/action-link.css
index f66bbc3d0d8a9217a021658cf050ecafb979eb29..251d737068628f8099bd5b38dee0dd5b928f52ee 100644
--- a/core/themes/claro/css/components/action-link.css
+++ b/core/themes/claro/css/components/action-link.css
@@ -50,7 +50,7 @@
 
 .action-link {
   display: inline-block;
-  padding: calc(var(--space-m) - ((var(--space-l) - var(--space-m)) / 2)) var(--space-m);
+  padding: calc(var(--space-m) - var(--space-l)/2 + var(--space-m)/2) var(--space-m);
   cursor: pointer;
   text-decoration: none;
   color: var(--color-gray-800);
@@ -65,7 +65,7 @@
 /* Small variant. */
 
 .no-touchevents .action-link--small {
-  padding: calc(var(--space-s) - ((var(--space-l) - var(--space-s)) / 2)) var(--space-s);
+  padding: calc(var(--space-s) - var(--space-l)/2 + var(--space-s)/2) var(--space-s);
   font-size: var(--font-size-s);
 }
 
diff --git a/core/themes/claro/css/components/autocomplete-loading.module.css b/core/themes/claro/css/components/autocomplete-loading.module.css
index a77c1d0e481a2740e604084ed53bee3399e72353..51eec25e1e328651b07ab67d4b520e69b8f47f53 100644
--- a/core/themes/claro/css/components/autocomplete-loading.module.css
+++ b/core/themes/claro/css/components/autocomplete-loading.module.css
@@ -90,7 +90,7 @@ _:-ms-fullscreen,
   color: var(--color-link);
   font-size: var(--font-size-xxs); /* ~11px */
   font-weight: bold;
-  line-height: calc(18rem / 16); /* 18px */
+  line-height: 1.125rem; /* 18px */
 }
 
 [dir="rtl"] .claro-autocomplete__message {
diff --git a/core/themes/claro/css/components/button.css b/core/themes/claro/css/components/button.css
index 656266af8afa56b02036ddc593c94b4811d59009..27eafc2a861800559d19383f4c1df894fa155c1b 100644
--- a/core/themes/claro/css/components/button.css
+++ b/core/themes/claro/css/components/button.css
@@ -87,7 +87,7 @@
 
 .no-touchevents .button--extrasmall {
   margin: var(--space-xs) var(--space-xs) var(--space-xs) 0; /* LTR */
-  padding: calc(calc(var(--space-xs) / 2) - 1px) calc(var(--space-s) - 1px); /* 1 */
+  padding: calc(var(--space-xs)/2 - 1px) calc(var(--space-s) - 1px); /* 1 */
   font-size: var(--font-size-xs);
 }
 
diff --git a/core/themes/claro/css/components/details.css b/core/themes/claro/css/components/details.css
index 6bcc296bf5e577405a162df85ebb9ffd0f22be7d..3eba252410225471bfbed18c81c420fc434f6cc3 100644
--- a/core/themes/claro/css/components/details.css
+++ b/core/themes/claro/css/components/details.css
@@ -37,7 +37,7 @@
 
 :root {
   --size-summary-border-radius: calc(var(--details-border-size-radius) - var(--details-border-size));
-  --summary-accordion-padding-vertical: calc(var(--space-l) + ((var(--space-m) - var(--space-l)) / 2));
+  --summary-accordion-padding-vertical: calc(var(--space-l) + var(--space-m)/2 - var(--space-l)/2);
   --summary-accordion-line-height: var(--space-l);
 }
 
@@ -148,7 +148,7 @@
   display: inline-block;
   width: var(--space-m);
   height: var(--space-m);
-  margin-top: calc(var(--space-m) / -2);
+  margin-top: calc(var(--space-m)/-2);
   content: "";
   transition: transform var(--details-transform-transition-duration) ease-in 0s;
   transform: rotate(90deg); /* LTR */
@@ -298,7 +298,7 @@
 
   .claro-details[open] > .claro-details__summary::before,
   [dir="rtl"] .claro-details[open] > .claro-details__summary::before {
-    margin-top: calc(0.125rem / -2);
+    margin-top: -0.0625rem;
     margin-right: 0.125rem;
     transform: rotate(-45deg); /* for LTR and RTL */
     background: none;
@@ -451,7 +451,7 @@
   margin-bottom: var(--space-m);
   color: var(--input-fg-color--description);
   font-size: var(--font-size-xs); /* ~13px */
-  line-height: calc(17rem / 16); /* 17px */
+  line-height: 1.0625rem; /* 17px */
 }
 
 .claro-details__description.is-disabled {
diff --git a/core/themes/claro/css/components/dialog.css b/core/themes/claro/css/components/dialog.css
index 932f38d4c522779bd9f97c70d2c86fbe0f962fa2..4f37e16bd869f99f4ba13957d4cb038c939f6f93 100644
--- a/core/themes/claro/css/components/dialog.css
+++ b/core/themes/claro/css/components/dialog.css
@@ -41,7 +41,7 @@
   border-top-left-radius: var(--jui-dialog-border-radius);
   border-top-right-radius: var(--jui-dialog-border-radius);
   background: var(--jui-dialog-title-bg-color);
-  line-height: calc(var(--space-m) * 2);
+  line-height: calc(var(--space-m)*2);
 }
 
 [dir="rtl"] .ui-dialog .ui-dialog-titlebar {
diff --git a/core/themes/claro/css/components/dropbutton.css b/core/themes/claro/css/components/dropbutton.css
index 1bbf5429c90636cef79ceeadc0edfb9a194e32b1..c5a8e23888ee1073f0777bf88ed96df38a4860a0 100644
--- a/core/themes/claro/css/components/dropbutton.css
+++ b/core/themes/claro/css/components/dropbutton.css
@@ -30,12 +30,12 @@
   --dropbutton-small-spacing-size: 0.625rem;
   --dropbutton-small-font-size: var(--font-size-xs);
   --dropbutton-small-line-height: 0.75rem;
-  --dropbutton-small-toggle-size: calc((2 * var(--dropbutton-small-spacing-size)) + var(--dropbutton-small-line-height));
+  --dropbutton-small-toggle-size: calc(var(--dropbutton-small-spacing-size)*2 + var(--dropbutton-small-line-height));
   /* Variant variables: extra small. */
   --dropbutton-extrasmall-spacing-size: 0.375rem;
   --dropbutton-extrasmall-font-size: var(--font-size-xs);
   --dropbutton-extrasmall-line-height: 0.75rem;
-  --dropbutton-extrasmall-toggle-size: calc((2 * var(--dropbutton-extrasmall-spacing-size)) + var(--dropbutton-extrasmall-line-height));
+  --dropbutton-extrasmall-toggle-size: calc(var(--dropbutton-extrasmall-spacing-size)*2 + var(--dropbutton-extrasmall-line-height));
 }
 
 .dropbutton-wrapper {
@@ -212,7 +212,7 @@
   .dropbutton__toggle::before {
     width: 0.5625rem;
     height: 0.5625rem;
-    margin-top: calc(0.5625rem / (2 * -1.41429));
+    margin-top: -0.19886rem;
     transform: translate(50%, -50%) rotate(135deg); /* LTR */
     border: 0.125rem solid;
     border-width: 0.125rem 0.125rem 0 0;
@@ -220,7 +220,7 @@
   }
 
   .dropbutton-wrapper.open .dropbutton__toggle::before {
-    margin-top: calc(0.5625rem / (2 * 1.41429));
+    margin-top: 0.19886rem;
     transform: translate(50%, -50%) rotate(315deg);
   }
   [dir="rtl"] .dropbutton-wrapper.open .dropbutton__toggle::before {
@@ -233,11 +233,11 @@
   .no-touchevents .dropbutton--extrasmall .dropbutton__toggle::before {
     width: 0.4375rem;
     height: 0.4375rem;
-    margin-top: calc(0.4375rem / (2 * -1.41429));
+    margin-top: -0.15467rem;
   }
 
   .dropbutton-wrapper.open .dropbutton__toggle::before {
-    margin-top: calc(0.4375rem / (2 * 1.41429));
+    margin-top: 0.15467rem;
   }
 }
 
diff --git a/core/themes/claro/css/components/fieldset.css b/core/themes/claro/css/components/fieldset.css
index ff193c92650155d8caaf637f7389f01fa727dffa..03f1036616083675c988f6c75e3a58b3cfec7a39 100644
--- a/core/themes/claro/css/components/fieldset.css
+++ b/core/themes/claro/css/components/fieldset.css
@@ -63,10 +63,10 @@ _:-ms-fullscreen,
   float: none;
   width: auto;
   margin-top: 0; /* IE11 and Edge do not collapse this margin. Ideally this would be 4px */
-  margin-bottom: calc(var(--space-xs) / 2); /* 4px */
+  margin-bottom: calc(var(--space-xs)/2); /* 4px */
   color: inherit;
   font-size: var(--font-size-s); /* 14px */
-  line-height: calc(18rem / 16); /* 18px */
+  line-height: 1.125rem; /* 18px */
 }
 
 /* This is used only on install configure form. */
@@ -103,11 +103,11 @@ _:-ms-fullscreen,
 }
 
 .fieldset__description {
-  margin-top: calc(6rem / 16); /* 6px */
-  margin-bottom: calc(6rem / 16); /* 6px */
+  margin-top: 0.375rem; /* 6px */
+  margin-bottom: 0.375rem; /* 6px */
   color: var(--input-fg-color--description);
   font-size: var(--font-size-xs); /* ~13px */
-  line-height: calc(17rem / 16); /* 17px */
+  line-height: 1.0625rem; /* 17px */
 }
 
 .fieldset__description.is-disabled {
@@ -117,12 +117,12 @@ _:-ms-fullscreen,
 /* Error message (Inline form errors). */
 
 .fieldset__error-message {
-  margin-top: calc(6rem / 16); /* 6px */
-  margin-bottom: calc(6rem / 16); /* 6px */
+  margin-top: 0.375rem; /* 6px */
+  margin-bottom: 0.375rem; /* 6px */
   color: var(--input--error-color);
   font-size: var(--font-size-xs); /* ~13px */
   font-weight: normal;
-  line-height: calc(17rem / 16); /* 17px */
+  line-height: 1.0625rem; /* 17px */
 }
 
 .fieldset__wrapper {
diff --git a/core/themes/claro/css/components/file.css b/core/themes/claro/css/components/file.css
index e42fbead763777d990b015c06a71be01c5cae2b3..94923d6bd33de48474d19a813a9a9f347f2ad0d5 100644
--- a/core/themes/claro/css/components/file.css
+++ b/core/themes/claro/css/components/file.css
@@ -16,7 +16,7 @@
   background-position: left 0.0625rem;
   background-size: var(--space-m) var(--space-m);
   font-size: var(--font-size-s);
-  line-height: calc(18rem / 16);
+  line-height: 1.125rem;
 }
 
 [dir="rtl"] .file {
diff --git a/core/themes/claro/css/components/form--checkbox-radio.css b/core/themes/claro/css/components/form--checkbox-radio.css
index 4ae3f10176536b788c2874a9ce4f33bbfa53aa35..24820f7d3818266857d4dbfd61b5812395800ecf 100644
--- a/core/themes/claro/css/components/form--checkbox-radio.css
+++ b/core/themes/claro/css/components/form--checkbox-radio.css
@@ -30,15 +30,15 @@
 
 .form-type--boolean .form-boolean {
   position: relative;
-  top: calc(var(--space-l) / 2);
+  top: calc(var(--space-l)/2);
   float: left; /* LTR */
-  margin-left: calc(var(--input--label-spacing) * -1); /* LTR */
+  margin-left: calc(var(--input--label-spacing)*-1); /* LTR */
   transform: translateY(-50%);
 }
 
 [dir="rtl"] .form-type--boolean .form-boolean {
   float: right;
-  margin-right: calc(var(--input--label-spacing) * -1);
+  margin-right: calc(var(--input--label-spacing)*-1);
   margin-left: 0;
 }
 
diff --git a/core/themes/claro/css/components/form--password-confirm.css b/core/themes/claro/css/components/form--password-confirm.css
index bb62ecb9eea159bb6cddc7b06ca13d56a161da18..eaf289d4c9eddc0c772423735ce4a91474518d1b 100644
--- a/core/themes/claro/css/components/form--password-confirm.css
+++ b/core/themes/claro/css/components/form--password-confirm.css
@@ -93,7 +93,7 @@
 .password-strength__bar {
   min-width: var(--progress-bar-small-size);
   height: var(--progress-bar-small-size);
-  margin: calc(var(--progress-bar-border-size) * -1);
+  margin: calc(var(--progress-bar-border-size)*-1);
   transition: var(--progress-bar-transition);
   border: var(--progress-bar-border-size) solid transparent;
   border-radius: var(--progress-bar-small-size-radius);
diff --git a/core/themes/claro/css/components/form--text.css b/core/themes/claro/css/components/form--text.css
index 561880ef4524db1b8798139159ed24806052fb3d..5656dd60078819aa0c454292e6256b3e22e5150b 100644
--- a/core/themes/claro/css/components/form--text.css
+++ b/core/themes/claro/css/components/form--text.css
@@ -13,7 +13,7 @@
 .form-element {
   box-sizing: border-box;
   max-width: 100%;
-  min-height: calc(((var(--input-padding-vertical) + var(--input-border-size)) * 2) + var(--input-line-height)); /* iOS. */
+  min-height: calc(var(--input-padding-vertical)*2 + var(--input-border-size)*2 + var(--input-line-height)); /* iOS. */
   padding: var(--input-padding-vertical) var(--input-padding-horizontal);
   color: var(--input-fg-color);
   border: var(--input-border-size) solid var(--input-border-color);
@@ -27,7 +27,7 @@
 
 .no-touchevents .form-element--extrasmall,
 .no-touchevents .form-element[name$="][_weight]"] {
-  min-height: calc(((var(--input--extrasmall-padding-vertical) + var(--input-border-size)) * 2) + var(--input--extrasmall-line-height)); /* iOS. */
+  min-height: calc(var(--input--extrasmall-padding-vertical)*2 + var(--input-border-size)*2 + var(--input--extrasmall-line-height)); /* iOS. */
   padding: var(--input--extrasmall-padding-vertical) var(--input--extrasmall-padding-horizontal);
   font-size: var(--input--extrasmall-font-size);
   line-height: var(--input--extrasmall-line-height);
diff --git a/core/themes/claro/css/components/form.css b/core/themes/claro/css/components/form.css
index cb818001cf76c8aa32c7097feaf01ff0b47759be..b0bb8b9f9b5ee6a96cc3c9bb9eab46e2482ed560 100644
--- a/core/themes/claro/css/components/form.css
+++ b/core/themes/claro/css/components/form.css
@@ -48,8 +48,8 @@ tr .form-item,
 
 .form-item__label {
   display: table;
-  margin-top: calc(var(--space-xs) / 2); /* 4px */
-  margin-bottom: calc(var(--space-xs) / 2); /* 4px */
+  margin-top: calc(var(--space-xs)/2); /* 4px */
+  margin-bottom: calc(var(--space-xs)/2); /* 4px */
   font-size: var(--font-size-s); /* ~14px */
   font-weight: bold;
   line-height: var(--line-height-form-label);
@@ -102,11 +102,11 @@ tr .form-item,
  */
 
 .form-item__description {
-  margin-top: calc(6rem / 16); /* 6px */
-  margin-bottom: calc(6rem / 16); /* 6px */
+  margin-top: 0.375rem; /* 6px */
+  margin-bottom: 0.375rem; /* 6px */
   color: var(--input-fg-color--description);
   font-size: var(--font-size-xs); /* ~13px */
-  line-height: calc(17rem / 16); /* 17px */
+  line-height: 1.0625rem; /* 17px */
 }
 
 /* Description states. */
@@ -120,12 +120,12 @@ tr .form-item,
  */
 
 .form-item__error-message {
-  margin-top: calc(6rem / 16); /* 6px */
-  margin-bottom: calc(6rem / 16); /* 6px */
+  margin-top: 0.375rem; /* 6px */
+  margin-bottom: 0.375rem; /* 6px */
   color: var(--input--error-color);
   font-size: var(--font-size-xs); /* ~13px */
   font-weight: normal;
-  line-height: calc(17rem / 16); /* 17px */
+  line-height: 1.0625rem; /* 17px */
 }
 
 .form-item__prefix.is-disabled,
diff --git a/core/themes/claro/css/components/image-preview.css b/core/themes/claro/css/components/image-preview.css
index fac026cc5a38bfead8560cd4e76be7f051dc309c..b5c4f7dd25745a44c0ae72dfbfb5f3076836548f 100644
--- a/core/themes/claro/css/components/image-preview.css
+++ b/core/themes/claro/css/components/image-preview.css
@@ -12,7 +12,7 @@
 
 :root {
   --color-pattern: var(--color-gray-200);
-  --size-pattern-square: calc(7rem / 16);
+  --size-pattern-square: 0.4375rem;
 }
 
 /**
@@ -41,7 +41,7 @@
     var(--size-pattern-square) var(--size-pattern-square),
     var(--size-pattern-square) var(--size-pattern-square),
     0 0;
-  background-size: calc(var(--size-pattern-square) * 2) calc(var(--size-pattern-square) * 2);
+  background-size: calc(var(--size-pattern-square)*2) calc(var(--size-pattern-square)*2);
 }
 
 @media screen and (-ms-high-contrast: active) {
diff --git a/core/themes/claro/css/components/pager.css b/core/themes/claro/css/components/pager.css
index e04b83fa8ad0f4d64fbab17d3779687a07eb3bfa..2db59a28ee16f4a51cb2affce1bb51fa0c7ded36 100644
--- a/core/themes/claro/css/components/pager.css
+++ b/core/themes/claro/css/components/pager.css
@@ -47,8 +47,8 @@
 
 .pager__item {
   display: inline-block;
-  margin-right: calc(var(--space-xs) / 2);
-  margin-left: calc(var(--space-xs) / 2);
+  margin-right: calc(var(--space-xs)/2);
+  margin-left: calc(var(--space-xs)/2);
   vertical-align: top;
 }
 
@@ -161,8 +161,8 @@
 }
 
 .pager__item--mini {
-  margin-right: calc(var(--space-m) / 2);
-  margin-left: calc(var(--space-m) / 2);
+  margin-right: calc(var(--space-m)/2);
+  margin-left: calc(var(--space-m)/2);
 }
 
 .pager__link--mini {
diff --git a/core/themes/claro/css/components/progress.css b/core/themes/claro/css/components/progress.css
index 9dcbe24b63db04174f3bb24084452f1d3665d092..5340247aebd2f39d6fa7e9c0660100084214a935 100644
--- a/core/themes/claro/css/components/progress.css
+++ b/core/themes/claro/css/components/progress.css
@@ -17,7 +17,7 @@
   --progress-bar-border-color: var(--color-absolutezero);
   --progress-bar-label-font-size: var(--font-size-base);
   --progress-bar-small-label-font-size: var(--font-size-label);
-  --progress-bar-default-size: calc(var(--space-m) - (2 * var(--progress-bar-border-size)));
+  --progress-bar-default-size: calc(var(--space-m) - var(--progress-bar-border-size)*2);
   --progress-bar-default-size-radius: var(--space-m);
 }
 
@@ -53,8 +53,8 @@
   width: var(--progress-bar-default-size);
   min-width: var(--progress-bar-default-size);
   height: var(--progress-bar-default-size);
-  margin-top: calc(var(--progress-bar-border-size) * -1);
-  margin-left: calc(var(--progress-bar-border-size) * -1); /* LTR */
+  margin-top: calc(var(--progress-bar-border-size)*-1);
+  margin-left: calc(var(--progress-bar-border-size)*-1); /* LTR */
   transition: var(--progress-bar-transition);
   border: var(--progress-bar-border-size) var(--progress-bar-border-color) solid;
   border-radius: var(--progress-bar-default-size-radius);
@@ -62,7 +62,7 @@
 }
 
 [dir="rtl"] .progress__bar {
-  margin-right: calc(var(--progress-bar-border-size) * -1);
+  margin-right: calc(var(--progress-bar-border-size)*-1);
   margin-left: 0;
 }
 
diff --git a/core/themes/claro/css/components/shortcut.css b/core/themes/claro/css/components/shortcut.css
index ccebf30f93ceddbc535f6586e919ab84ea54970b..8883d980a1dcd26cc7185dd9f96b9c35782a2a57 100644
--- a/core/themes/claro/css/components/shortcut.css
+++ b/core/themes/claro/css/components/shortcut.css
@@ -16,7 +16,7 @@
   */
   --shortcut-bg-color: var(--color-gray-800);
   --shortcut-border-radius-size: var(--base-border-radius);
-  --shortcut-padding-size: calc(0.5 * var(--space-xs)) var(--space-m);
+  --shortcut-padding-size: calc(var(--space-xs)*0.5) var(--space-m);
   --shortcut-icon-size: var(--space-l);
 }
 
@@ -38,7 +38,7 @@
   margin-left: var(--space-s); /* LTR */
   padding: var(--shortcut-padding-size);
   transition: var(--transition);
-  transform: translateY(calc(-1 * var(--space-xs)));
+  transform: translateY(calc(var(--space-xs)*-1));
   vertical-align: top;
   opacity: 0;
   color: var(--color-white);
@@ -65,7 +65,7 @@
   width: var(--shortcut-icon-size);
   height: var(--shortcut-icon-size);
   vertical-align: -0.0625rem;
-  background: transparent url("data:image/svg+xml,%3csvg height='24' width='96' xmlns='http://www.w3.org/2000/svg'%3e%3cg stroke='%238e929c'%3e%3cpath d='m94.46 9.667h-7.937l-2.523-8.007-2.523 8.007h-7.937l6.768 4.926-3.076 8.007 6.768-4.927 6.768 4.927-3.076-8.007zm-24 0h-7.937l-2.523-8.007-2.523 8.007h-7.937l6.768 4.926-3.076 8.007 6.768-4.927 6.768 4.927-3.076-8.007z' fill='%23ffd23f'/%3e%3cg fill='none'%3e%3cpath d='m38.42 9.327.11.35h7.934l-6.521 4.742-.31.225.138.358 2.922 7.599-6.397-4.653-.294-.214-.294.214-6.397 4.653 2.923-7.599.137-.358-.31-.225-6.521-4.742h7.934l.11-.35 2.418-7.665zm-24.002 0 .11.35h7.934l-6.521 4.742-.31.225.138.358 2.922 7.599-6.397-4.653-.294-.214-.294.214-6.397 4.653 2.923-7.599.137-.358-.31-.225-6.521-4.742h7.934l.11-.35 2.418-7.665z'/%3e%3cpath d='m42.5 1v7m-3.5-3.5h7m42 2.5 6-6m0 6-6-6' stroke-linecap='square' stroke-miterlimit='3'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e") left top / calc(var(--shortcut-icon-size) * 4) var(--shortcut-icon-size) no-repeat;
+  background: transparent url("data:image/svg+xml,%3csvg height='24' width='96' xmlns='http://www.w3.org/2000/svg'%3e%3cg stroke='%238e929c'%3e%3cpath d='m94.46 9.667h-7.937l-2.523-8.007-2.523 8.007h-7.937l6.768 4.926-3.076 8.007 6.768-4.927 6.768 4.927-3.076-8.007zm-24 0h-7.937l-2.523-8.007-2.523 8.007h-7.937l6.768 4.926-3.076 8.007 6.768-4.927 6.768 4.927-3.076-8.007z' fill='%23ffd23f'/%3e%3cg fill='none'%3e%3cpath d='m38.42 9.327.11.35h7.934l-6.521 4.742-.31.225.138.358 2.922 7.599-6.397-4.653-.294-.214-.294.214-6.397 4.653 2.923-7.599.137-.358-.31-.225-6.521-4.742h7.934l.11-.35 2.418-7.665zm-24.002 0 .11.35h7.934l-6.521 4.742-.31.225.138.358 2.922 7.599-6.397-4.653-.294-.214-.294.214-6.397 4.653 2.923-7.599.137-.358-.31-.225-6.521-4.742h7.934l.11-.35 2.418-7.665z'/%3e%3cpath d='m42.5 1v7m-3.5-3.5h7m42 2.5 6-6m0 6-6-6' stroke-linecap='square' stroke-miterlimit='3'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e") left top / calc(var(--shortcut-icon-size)*4) var(--shortcut-icon-size) no-repeat;
 }
 
 [dir="rtl"] .shortcut-action__icon {
@@ -74,14 +74,14 @@
 
 .shortcut-action--add:hover .shortcut-action__icon,
 .shortcut-action--add:focus .shortcut-action__icon {
-  background-position: calc(-1 * var(--shortcut-icon-size)) top;
+  background-position: calc(var(--shortcut-icon-size)*-1) top;
 }
 
 .shortcut-action--remove .shortcut-action__icon {
-  background-position: calc(-2 * var(--shortcut-icon-size)) top;
+  background-position: calc(var(--shortcut-icon-size)*-2) top;
 }
 
 .shortcut-action--remove:focus .shortcut-action__icon,
 .shortcut-action--remove:hover .shortcut-action__icon {
-  background-position: calc(-3 * var(--shortcut-icon-size)) top;
+  background-position: calc(var(--shortcut-icon-size)*-3) top;
 }
diff --git a/core/themes/claro/css/components/system-admin--admin-list.css b/core/themes/claro/css/components/system-admin--admin-list.css
index d356792b0d849f078e586ee08f6ab578df2ea834..524f1b691ef6ef5bd0c4c3d14daf3084a72db414 100644
--- a/core/themes/claro/css/components/system-admin--admin-list.css
+++ b/core/themes/claro/css/components/system-admin--admin-list.css
@@ -38,7 +38,7 @@
 }
 
 .admin-item:not(:last-child) {
-  border-bottom: calc(1em / 16) solid var(--color-gray-200);
+  border-bottom: 0.0625em solid var(--color-gray-200);
 }
 
 .admin-item__title {
diff --git a/core/themes/claro/css/components/system-admin--modules.css b/core/themes/claro/css/components/system-admin--modules.css
index 1f8805afe7889d61abfc379c38860ea2a84a2cff..73df3d81f5b3c7f1f6ef0e6d960bff2635356696 100644
--- a/core/themes/claro/css/components/system-admin--modules.css
+++ b/core/themes/claro/css/components/system-admin--modules.css
@@ -12,7 +12,7 @@
 
 :root {
   --module-table-cell-padding-vertical: var(--space-m);
-  --module-table-cell-padding-horizontal: calc(var(--space-m) - (var(--input-border-size) * 2));
+  --module-table-cell-padding-horizontal: calc(var(--space-m) - var(--input-border-size)*2);
 }
 
 .modules-table-filter {
@@ -147,7 +147,7 @@ td.module-list__description {
 .module-details__links {
   position: relative;
   /* Negative margin matches the value of action link's top padding. */
-  margin-top: calc((var(--space-s) - ((var(--space-l) - var(--space-s)) / 2)) * -1);
+  margin-top: calc(var(--space-s)*-1 - var(--space-l)/2*-1 + var(--space-s)/2*-1);
   margin-bottom: var(--space-m);
 }
 
@@ -169,7 +169,7 @@ td.module-list__description {
   position: relative;
   top: -1px;
   display: inline-block;
-  width: calc(var(--space-m) * 2);
+  width: calc(var(--space-m)*2);
   height: 1.25rem;
   content: "";
   cursor: pointer;
diff --git a/core/themes/claro/css/components/system-admin--panel.css b/core/themes/claro/css/components/system-admin--panel.css
index 653553115c68c598bdd02b37685b5b35d4dc792f..dffa67a7f5b1f800e97a5521ff8132efcd56db78 100644
--- a/core/themes/claro/css/components/system-admin--panel.css
+++ b/core/themes/claro/css/components/system-admin--panel.css
@@ -14,15 +14,15 @@
   margin-top: 1em;
   margin-bottom: 3em;
   padding: 0;
-  border-bottom: calc(1em / 16) solid var(--color-gray-200);
+  border-bottom: 0.0625em solid var(--color-gray-200);
 }
 
 .panel__title {
   margin: 0;
-  padding: calc(12em / 18) calc(24em / 18);
+  padding: 0.66667em 1.33333em;
   background: var(--color-gray-050);
-  font-size: calc(18em / 16);
-  line-height: calc(24em / 18);
+  font-size: 1.125em;
+  line-height: 1.33333em;
 }
 
 .panel__content,
diff --git a/core/themes/claro/css/components/table--file-multiple-widget.css b/core/themes/claro/css/components/table--file-multiple-widget.css
index 93824c8419b989a879de1b483daccd2310b10f83..abf6c4637a628f98ac965fbc35b123ab67da3f99 100644
--- a/core/themes/claro/css/components/table--file-multiple-widget.css
+++ b/core/themes/claro/css/components/table--file-multiple-widget.css
@@ -38,7 +38,7 @@
 
 .table-file-multiple-widget .tabledrag-changed {
   float: left; /* LTR */
-  line-height: calc(var(--tabledrag-handle-icon-size) + calc(var(--space-xs) * 2));
+  line-height: calc(var(--tabledrag-handle-icon-size) + var(--space-xs)*2);
 }
 
 [dir="rtl"] .table-file-multiple-widget .tabledrag-changed {
@@ -46,7 +46,7 @@
 }
 
 .table-file-multiple-widget td {
-  height: calc(var(--space-m) * 3);
+  height: calc(var(--space-m)*3);
 }
 
 .table-file-multiple-widget td > :first-child {
@@ -62,7 +62,7 @@
 }
 
 .table-file-multiple-widget th {
-  height: calc(var(--space-m) * 2);
+  height: calc(var(--space-m)*2);
   color: var(--color-gray-800);
   background: var(--color-gray-050);
   font-size: var(--font-size-s);
@@ -79,7 +79,7 @@
 }
 
 .table-file-multiple-widget .checkbox .form-type--boolean {
-  line-height: calc(var(--space-m) * 3);
+  line-height: calc(var(--space-m)*3);
 }
 
 .no-touchevents .table-file-multiple-widget .checkbox .form-type--boolean {
@@ -110,8 +110,8 @@
 
 @media screen and (max-width: 37.5em) {
   .claro-details__wrapper .file-widget-multiple__table-wrapper {
-    margin-right: calc(var(--space-m) * -1);
-    margin-left: calc(var(--space-m) * -1);
+    margin-right: calc(var(--space-m)*-1);
+    margin-left: calc(var(--space-m)*-1);
   }
 
   .claro-details__wrapper .file-widget-multiple__table-wrapper > :not(table) {
diff --git a/core/themes/claro/css/components/tabledrag.css b/core/themes/claro/css/components/tabledrag.css
index 3ba613ae02b70da5cdf0aa918ba35cdb81096769..52609d767a6edb2d23fb394ca2bc988556615ece 100644
--- a/core/themes/claro/css/components/tabledrag.css
+++ b/core/themes/claro/css/components/tabledrag.css
@@ -58,11 +58,11 @@ body.drag {
 
 .draggable .tabledrag-changed {
   position: relative;
-  left: calc(var(--space-xs) * -1); /* LTR */
+  left: calc(var(--space-xs)*-1); /* LTR */
 }
 
 [dir="rtl"] .draggable .tabledrag-changed {
-  right: calc(var(--space-xs) * -1); /* LTR */
+  right: calc(var(--space-xs)*-1); /* LTR */
   left: auto;
 }
 
@@ -124,7 +124,7 @@ body.drag {
   display: inline-block;
   width: var(--tabledrag-handle-icon-size);
   height: var(--tabledrag-handle-icon-size);
-  margin-left: calc(var(--space-m) * -1); /* LTR */
+  margin-left: calc(var(--space-m)*-1); /* LTR */
   padding: var(--space-xs) var(--space-m);
   content: "";
   transition: transform 0.1s ease-in-out 0s;
@@ -132,7 +132,7 @@ body.drag {
 }
 
 [dir="rtl"] .tabledrag-handle::after {
-  margin-right: calc(var(--space-m) * -1);
+  margin-right: calc(var(--space-m)*-1);
   margin-left: 0;
 }
 
@@ -174,9 +174,9 @@ body.drag {
 
 .tabledrag-handle:focus::before {
   display: block;
-  width: calc(var(--space-m) + (var(--space-xs) * 2)); /* Same as height. */
-  height: calc(var(--space-m) + (var(--space-xs) * 2)); /* Hande svg height + its vertical padding */
-  margin: 0 calc(var(--space-xs) * -1) calc((var(--space-m) + (var(--space-xs) * 2)) * -1); /* Bottom: handle height as negative value. */
+  width: calc(var(--space-m) + var(--space-xs)*2); /* Same as height. */
+  height: calc(var(--space-m) + var(--space-xs)*2); /* Hande svg height + its vertical padding */
+  margin: 0 calc(var(--space-xs)*-1) calc(var(--space-m)*-1 + var(--space-xs)*2*-1); /* Bottom: handle height as negative value. */
   content: "";
   border-radius: var(--base-border-radius);
   outline: var(--outline-size) dotted transparent;
@@ -317,16 +317,16 @@ body.drag {
 
 .indentation {
   position: relative;
-  left: calc(var(--space-xs) * -0.5); /* LTR */
+  left: calc(var(--space-xs)*-0.5); /* LTR */
   float: left; /* LTR */
-  width: calc(25rem / 16); /* 25px */
-  height: calc(25rem / 16); /* 25px */
+  width: 1.5625rem; /* 25px */
+  height: 1.5625rem; /* 25px */
   background: none !important;
   line-height: 0;
 }
 
 [dir="rtl"] .indentation {
-  right: calc(var(--space-xs) * -0.5);
+  right: calc(var(--space-xs)*-0.5);
   left: auto;
   float: right;
 }
@@ -340,8 +340,8 @@ body.drag {
  */
 
 .tree {
-  width: calc(25rem / 16); /* 25px */
-  height: calc(25rem / 16); /* 25px */
+  width: 1.5625rem; /* 25px */
+  height: 1.5625rem; /* 25px */
 }
 
 .tree__item {
diff --git a/core/themes/claro/css/components/tables.css b/core/themes/claro/css/components/tables.css
index 744114f78638b7ae3bf7eada8d2648d763bc73d4..de912499c2bfc72df8d21f7d0ef11e89164b873b 100644
--- a/core/themes/claro/css/components/tables.css
+++ b/core/themes/claro/css/components/tables.css
@@ -302,7 +302,7 @@ td.priority-medium {
 
 .tabledrag-toggle-weight-wrapper {
   margin-top: var(--space-l);
-  line-height: calc(28rem / 16);
+  line-height: 1.75rem;
 }
 
 .tabledrag-toggle-weight-wrapper + table,
diff --git a/core/themes/claro/css/components/tabs.css b/core/themes/claro/css/components/tabs.css
index 0eb2c5f7a2ae54c6bf92493e5e7d1ac29874cf4c..9a77fd2a37f17fb6afac2c4d58c6b54fed4dc11b 100644
--- a/core/themes/claro/css/components/tabs.css
+++ b/core/themes/claro/css/components/tabs.css
@@ -161,7 +161,7 @@
 }
 
 .tabs__tab.is-active:focus::before {
-  top: calc(var(--tabs--focus-height) * -1);
+  top: calc(var(--tabs--focus-height)*-1);
   height: calc(var(--tabs-link-height) + 2px);
 }
 
@@ -219,7 +219,7 @@
 
   .is-horizontal .tabs--secondary {
     overflow: hidden;
-    margin: calc(calc(var(--tabs--focus-height) + 0.1875rem) * -1) calc(calc(var(--tabs--focus-height) + 0.1875rem) * -1) 0;
+    margin: calc(var(--tabs--focus-height)*-1 + -0.1875rem) calc(var(--tabs--focus-height)*-1 + -0.1875rem) 0;
     padding: calc(var(--tabs--focus-height) + 0.1875rem) calc(var(--tabs--focus-height) + 0.1875rem) 0;
     border-radius: 0;
   }
diff --git a/core/themes/claro/css/components/vertical-tabs.css b/core/themes/claro/css/components/vertical-tabs.css
index 6c86da87ea25f6417bc2f530505c35877a9530aa..b262da08d2167955806d4678d11916b8d088506c 100644
--- a/core/themes/claro/css/components/vertical-tabs.css
+++ b/core/themes/claro/css/components/vertical-tabs.css
@@ -77,7 +77,7 @@
   z-index: 1; /* The line should be kept above the vertical tabs menu link to keep it visible even if the link is hovered and gets the 'hover' background color. */
   display: block;
   width: 100%;
-  margin-top: calc(var(--vertical-tabs-menu-separator-size) * -1);
+  margin-top: calc(var(--vertical-tabs-menu-separator-size)*-1);
   border-top: var(--vertical-tabs-menu-separator-size) solid var(--vertical-tabs-menu-separator-color);
 }
 
@@ -129,7 +129,7 @@
 .vertical-tabs__menu-link {
   position: relative;
   display: block;
-  margin-top: calc(var(--vertical-tabs-border-size) * -1);
+  margin-top: calc(var(--vertical-tabs-border-size)*-1);
   padding: var(--space-s) var(--space-s) var(--space-s) calc(var(--space-l) - var(--vertical-tabs-menu-link--active-border-size)); /* LTR */
   text-decoration: none;
   word-wrap: break-word;
@@ -172,17 +172,17 @@
 .vertical-tabs__menu-link::before {
   position: absolute;
   z-index: 0; /* This should be on a lower level than the menu-item separator lines. */
-  top: calc(var(--vertical-tabs-border-size) * -1);
+  top: calc(var(--vertical-tabs-border-size)*-1);
   right: 0; /* LTR */
-  bottom: calc(var(--vertical-tabs-border-size) * -1);
-  left: calc(var(--vertical-tabs-menu-link--active-border-size) * -1); /* LTR */
+  bottom: calc(var(--vertical-tabs-border-size)*-1);
+  left: calc(var(--vertical-tabs-menu-link--active-border-size)*-1); /* LTR */
   content: "";
   pointer-events: none;
   background-clip: padding-box;
 }
 
 [dir="rtl"] .vertical-tabs__menu-link::before {
-  right: calc(var(--vertical-tabs-menu-link--active-border-size) * -1);
+  right: calc(var(--vertical-tabs-menu-link--active-border-size)*-1);
   left: 0;
 }
 
@@ -196,7 +196,7 @@
   right: 0;
   bottom: 0;
   left: 0;
-  margin: calc(var(--vertical-tabs-border-size) * -1) calc(var(--vertical-tabs-menu-link--active-border-size) * -1);
+  margin: calc(var(--vertical-tabs-border-size)*-1) calc(var(--vertical-tabs-menu-link--active-border-size)*-1);
   content: "";
   pointer-events: none;
   border: var(--vertical-tabs-menu-link-focus-border-size) solid var(--color-focus);
@@ -316,7 +316,7 @@
 
 .vertical-tabs__item {
   /* Render on top of the border of vertical-tabs__items. */
-  margin: calc(var(--vertical-tabs-border-size) * -1) calc(var(--vertical-tabs-border-size) * -1) 0;
+  margin: calc(var(--vertical-tabs-border-size)*-1) calc(var(--vertical-tabs-border-size)*-1) 0;
   border-radius: 0;
 }
 
@@ -326,7 +326,7 @@
 }
 
 .vertical-tabs__item.last {
-  margin-bottom: calc(var(--vertical-tabs-border-size) * -1);
+  margin-bottom: calc(var(--vertical-tabs-border-size)*-1);
   border-bottom-right-radius: var(--details-accordion-border-size-radius);
   border-bottom-left-radius: var(--details-accordion-border-size-radius);
 }
diff --git a/core/themes/claro/css/components/views-ui.css b/core/themes/claro/css/components/views-ui.css
index de3925d6a9c4144959e1f3289bb1b8921d273c54..5e1dc6f97c94d852dd5cb7476bb4945a16aca67d 100644
--- a/core/themes/claro/css/components/views-ui.css
+++ b/core/themes/claro/css/components/views-ui.css
@@ -99,14 +99,14 @@ details.fieldset-no-legend {
 }
 
 .views-ui-dialog .form-element {
-  min-height: calc(((var(--input-padding-vertical--small) + var(--input-border-size)) * 2) + var(--input-line-height--small)); /* iOS. */
+  min-height: calc(var(--input-padding-vertical--small)*2 + var(--input-border-size)*2 + var(--input-line-height--small)); /* iOS. */
   padding: var(--input-padding-vertical--small) var(--input-padding-horizontal--small);
   font-size: var(--input-font-size--small);
   line-height: var(--input-line-height--small);
 }
 
 .views-ui-dialog .form-element--type-select {
-  padding-right: calc((var(--space-m) * 2) + var(--input-border-size) * 2);
+  padding-right: calc(var(--space-m)*2 + var(--input-border-size)*2);
   background-position: 100% 56%;
 }
 
@@ -184,7 +184,7 @@ details.fieldset-no-legend {
 }
 
 .views-display-top__extra-actions-wrapper {
-  margin: calc(var(--space-xs) / 2) var(--space-xs) var(--space-xs);
+  margin: calc(var(--space-xs)/2) var(--space-xs) var(--space-xs);
 }
 
 /* @end */
@@ -320,7 +320,7 @@ details.fieldset-no-legend {
 .views-tabs .add a::before {
   display: inline-block;
   width: 1em;
-  height: calc(1em - (var(--input-border-size) * 2));
+  height: calc(1em - var(--input-border-size)*2);
   content: "";
   /* Copy of icon from .action-link--icon-plus */
   background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16' stroke-width='2' stroke='%23545560'%3E%3Cpath d='m3 8h10'/%3E%3Cpath d='m8 3v10'/%3E%3C/svg%3E");
@@ -686,6 +686,6 @@ details.fieldset-no-legend {
   }
   [dir="rtl"] .views-display-top__extra-actions-wrapper {
     margin-right: auto;
-    margin-left: calc(var(--space-xs) / 2);
+    margin-left: calc(var(--space-xs)/2);
   }
 }
diff --git a/core/themes/claro/css/layout/card-list.css b/core/themes/claro/css/layout/card-list.css
index 50ed09626669d6caeb50e1b2516391007413aac7..a2e62741bd27c2bac24b08b23cf4f751e0c3b4c8 100644
--- a/core/themes/claro/css/layout/card-list.css
+++ b/core/themes/claro/css/layout/card-list.css
@@ -13,9 +13,9 @@
 :root {
   --card-list-spacing: var(--space-m);
   /* Using 100% as base causes issues in IE11. */
-  --cards-two-cols-width: calc(((99.9% + var(--card-list-spacing)) / 2) - var(--card-list-spacing));
-  --cards-three-cols-width: calc(((99.9% + var(--card-list-spacing)) / 3) - var(--card-list-spacing));
-  --cards-four-cols-width: calc(((99.9% + var(--card-list-spacing)) / 4) - var(--card-list-spacing));
+  --cards-two-cols-width: calc(49.95% + var(--card-list-spacing)/2 - var(--card-list-spacing));
+  --cards-three-cols-width: calc(33.3% + var(--card-list-spacing)/3 - var(--card-list-spacing));
+  --cards-four-cols-width: calc(24.975% + var(--card-list-spacing)/4 - var(--card-list-spacing));
 }
 
 .card-list {
diff --git a/core/themes/claro/css/layout/local-actions.css b/core/themes/claro/css/layout/local-actions.css
index f637bc563889d77e1eb6c8e90b13bb27a0892975..b1970d6a873ee2217e5abe9c7e4c1ea66a70c3f7 100644
--- a/core/themes/claro/css/layout/local-actions.css
+++ b/core/themes/claro/css/layout/local-actions.css
@@ -28,7 +28,7 @@
 
 .local-actions__item {
   display: inline-block;
-  margin: 0 calc(var(--space-xs) / 2);
+  margin: 0 calc(var(--space-xs)/2);
 }
 
 .local-actions__item:first-child {
@@ -37,7 +37,7 @@
 
 [dir="rtl"] .local-actions__item:first-child {
   margin-right: 0;
-  margin-left: calc(var(--space-xs) / 2);
+  margin-left: calc(var(--space-xs)/2);
 }
 
 .local-actions__item:last-child {
@@ -45,7 +45,7 @@
 }
 
 [dir="rtl"] .local-actions__item:last-child {
-  margin-right: calc(var(--space-xs) / 2);
+  margin-right: calc(var(--space-xs)/2);
   margin-left: 0;
 }
 
diff --git a/core/themes/claro/css/theme/media-library.css b/core/themes/claro/css/theme/media-library.css
index cbcf6b6b47c76f0851b13e64c6a2fcb34ca56dd7..af3d302112612fc05ef128833d91100f6e291786 100644
--- a/core/themes/claro/css/theme/media-library.css
+++ b/core/themes/claro/css/theme/media-library.css
@@ -61,7 +61,7 @@
   z-index: var(--vertical-tabs-menu--z-index); /* The line should be kept above the vertical tabs menu link to keep it visible even if the link is hovered and gets the 'hover' background color. */
   display: block;
   width: 100%;
-  margin-top: calc(var(--vertical-tabs-menu-separator-size) * -1);
+  margin-top: calc(var(--vertical-tabs-menu-separator-size)*-1);
   content: "";
   border-top: var(--vertical-tabs-menu-separator-size) solid var(--vertical-tabs-menu-separator-color);
 }
@@ -69,7 +69,7 @@
 .media-library-menu__link {
   position: relative;
   display: block;
-  margin-top: calc(var(--vertical-tabs-border-size) * -1);
+  margin-top: calc(var(--vertical-tabs-border-size)*-1);
   padding: var(--space-s) var(--space-s) var(--space-s) calc(var(--space-l) - var(--vertical-tabs-menu-link--active-border-size)); /* LTR */
   text-decoration: none;
   word-wrap: break-word;
@@ -116,17 +116,17 @@
 .media-library-menu__link::before {
   position: absolute;
   z-index: calc(var(--vertical-tabs-menu--z-index) - 1); /* This should be on a lower level than the menu-item separator lines. */
-  top: calc(var(--vertical-tabs-border-size) * -1);
+  top: calc(var(--vertical-tabs-border-size)*-1);
   right: 0; /* LTR */
-  bottom: calc(var(--vertical-tabs-border-size) * -1);
-  left: calc(var(--vertical-tabs-menu-link--active-border-size) * -1); /* LTR */
+  bottom: calc(var(--vertical-tabs-border-size)*-1);
+  left: calc(var(--vertical-tabs-menu-link--active-border-size)*-1); /* LTR */
   content: "";
   pointer-events: none;
   background-clip: padding-box;
 }
 
 [dir="rtl"] .media-library-menu__link::before {
-  right: calc(var(--vertical-tabs-menu-link--active-border-size) * -1);
+  right: calc(var(--vertical-tabs-menu-link--active-border-size)*-1);
   left: 0;
 }
 
@@ -136,7 +136,7 @@
   right: 0;
   bottom: 0;
   left: 0;
-  margin: calc(var(--vertical-tabs-border-size) * -1) calc(var(--vertical-tabs-menu-link--active-border-size) * -1);
+  margin: calc(var(--vertical-tabs-border-size)*-1) calc(var(--vertical-tabs-menu-link--active-border-size)*-1);
   content: "";
   pointer-events: none;
   border: var(--vertical-tabs-menu-link-focus-border-size) solid var(--color-focus);
@@ -217,7 +217,7 @@
 .media-library-add-form__added-media .media-library-add-form__remove-button.button--extrasmall {
   margin: var(--space-xs) 0; /* LTR */
   /* Left padding is double the background size of the button icon. */
-  padding: calc(calc(var(--space-xs) / 2) - 1px) calc(var(--space-s) - 1px) calc(calc(var(--space-xs) / 2) - 1px) calc(var(--space-s) * 2);
+  padding: calc(var(--space-xs)/2 - 1px) calc(var(--space-s) - 1px) calc(var(--space-xs)/2 - 1px) calc(var(--space-s)*2);
 }
 
 /* This is needed to override the default extrasmall button left margin. */
@@ -259,10 +259,10 @@
 
 @media all and (-ms-high-contrast: active), (-ms-high-contrast: none) {
   .ui-dialog > .ui-dialog-content {
-    padding-right: calc(var(--space-s) - calc(var(--focus-border-size) + var(--focus-border-offset-size) + 2px));
+    padding-right: calc(var(--space-s) - var(--focus-border-size) - var(--focus-border-offset-size) - 2px);
   }
   [dir="rtl"] .ui-dialog > .ui-dialog-content {
-    padding-left: calc(var(--space-s) - calc(var(--focus-border-size) + var(--focus-border-offset-size) + 2px));
+    padding-left: calc(var(--space-s) - var(--focus-border-size) - var(--focus-border-offset-size) - 2px);
   }
 }
 
@@ -702,7 +702,7 @@
 .media-library-item__name {
   display: block;
   overflow: hidden;
-  margin: calc(var(--space-xs) / 2) var(--space-xs);
+  margin: calc(var(--space-xs)/2) var(--space-xs);
   white-space: nowrap;
   text-overflow: ellipsis;
   font-size: 0.875rem;
diff --git a/core/themes/olivero/css/base/variables.css b/core/themes/olivero/css/base/variables.css
index 37244ee4979d079b8982994cb350049d05e0f218..51205e71efffbf67b3c0bd3daf0909d7eb2b3048 100644
--- a/core/themes/olivero/css/base/variables.css
+++ b/core/themes/olivero/css/base/variables.css
@@ -66,7 +66,7 @@
   --grid-gap: var(--sp);
   --grid-gap-count: calc(var(--grid-col-count) - 1); /* Count of grid-gaps. */
   --grid-full-width: calc(100vw - var(--sp2) - var(--scrollbar-width)); /* Width of the entire grid. */
-  --grid-col-width: calc((var(--grid-full-width) - (var(--grid-gap-count) * var(--grid-gap))) / var(--grid-col-count)); /* Width of a grid column. */
+  --grid-col-width: calc((var(--grid-full-width) - var(--grid-gap-count)*var(--grid-gap))/var(--grid-col-count)); /* Width of a grid column. */
 }
 
 @media (min-width: 43.75rem) {
@@ -101,23 +101,23 @@
 :root {
 
   /* Layout helpers */
-  --sp0-25: calc(0.25 * var(--sp));
-  --sp0-5: calc(0.5 * var(--sp));
-  --sp0-75: calc(0.75 * var(--sp));
-  --sp1: calc(1 * var(--sp));
-  --sp1-5: calc(1.5 * var(--sp));
-  --sp2: calc(2 * var(--sp));
-  --sp2-5: calc(2.5 * var(--sp));
-  --sp3: calc(3 * var(--sp));
-  --sp4: calc(4 * var(--sp));
-  --sp5: calc(5 * var(--sp));
-  --sp6: calc(6 * var(--sp));
-  --sp7: calc(7 * var(--sp));
-  --sp8: calc(8 * var(--sp));
-  --sp9: calc(9 * var(--sp));
-  --sp10: calc(10 * var(--sp));
-  --sp11: calc(11 * var(--sp));
-  --sp12: calc(12 * var(--sp));
+  --sp0-25: calc(var(--sp)*0.25);
+  --sp0-5: calc(var(--sp)*0.5);
+  --sp0-75: calc(var(--sp)*0.75);
+  --sp1: calc(var(--sp)*1);
+  --sp1-5: calc(var(--sp)*1.5);
+  --sp2: calc(var(--sp)*2);
+  --sp2-5: calc(var(--sp)*2.5);
+  --sp3: calc(var(--sp)*3);
+  --sp4: calc(var(--sp)*4);
+  --sp5: calc(var(--sp)*5);
+  --sp6: calc(var(--sp)*6);
+  --sp7: calc(var(--sp)*7);
+  --sp8: calc(var(--sp)*8);
+  --sp9: calc(var(--sp)*9);
+  --sp10: calc(var(--sp)*10);
+  --sp11: calc(var(--sp)*11);
+  --sp12: calc(var(--sp)*12);
 
   /**
    * Gray colors.
@@ -145,10 +145,10 @@
   --color--primary-hue: 202;
   --color--primary-saturation: 79%;
   --color--primary-lightness: 50;
-  --color--primary-30: hsl(var(--color--primary-hue), var(--color--primary-saturation), calc(1% * (var(--color--primary-lightness) - (0.36 * var(--color--primary-lightness)))));
-  --color--primary-40: hsl(var(--color--primary-hue), var(--color--primary-saturation), calc(1% * (var(--color--primary-lightness) - (0.24 * var(--color--primary-lightness))))); /* Blue dark */
-  --color--primary-50: hsl(var(--color--primary-hue), var(--color--primary-saturation), calc(1% * var(--color--primary-lightness))); /* Blue medium */
-  --color--primary-60: hsl(var(--color--primary-hue), var(--color--primary-saturation), calc(1% * (var(--color--primary-lightness) + (0.24 * (100 - var(--color--primary-lightness)))))); /* Blue bright */
+  --color--primary-30: hsl(var(--color--primary-hue), var(--color--primary-saturation), calc(1%*(var(--color--primary-lightness) - var(--color--primary-lightness)*0.36)));
+  --color--primary-40: hsl(var(--color--primary-hue), var(--color--primary-saturation), calc(1%*(var(--color--primary-lightness) - var(--color--primary-lightness)*0.24))); /* Blue dark */
+  --color--primary-50: hsl(var(--color--primary-hue), var(--color--primary-saturation), calc(1%*var(--color--primary-lightness))); /* Blue medium */
+  --color--primary-60: hsl(var(--color--primary-hue), var(--color--primary-saturation), calc(1%*(var(--color--primary-lightness) + 24 - var(--color--primary-lightness)*0.24))); /* Blue bright */
 
   /**
    * Variables specific to text.
@@ -170,7 +170,7 @@
   --color--green: #3fa21c; /* Green */
 
   /* Header */
-  --header-height-wide-when-fixed: calc(6 * var(--sp));
+  --header-height-wide-when-fixed: calc(var(--sp)*6);
 
   /* Width of slide out navigation */
   --mobile-nav-width: 31.25rem;
diff --git a/core/themes/olivero/css/components/breadcrumb.css b/core/themes/olivero/css/components/breadcrumb.css
index 99bc1024a2ec52ac60bf4610afec0eb415ef751d..67c65963164954cf75180ff687007e8f7d0a454c 100644
--- a/core/themes/olivero/css/components/breadcrumb.css
+++ b/core/themes/olivero/css/components/breadcrumb.css
@@ -33,11 +33,11 @@
 }
 
 [dir="ltr"] .breadcrumb:after {
-    right: calc(var(--sp1) * -1)
+    right: calc(var(--sp1)*-1)
 }
 
 [dir="rtl"] .breadcrumb:after {
-    left: calc(var(--sp1) * -1)
+    left: calc(var(--sp1)*-1)
 }
 
 .breadcrumb:after {
@@ -68,19 +68,19 @@
 }
 
 [dir="ltr"] .breadcrumb__content {
-  margin-left: calc(var(--sp0-5) * -1)
+  margin-left: calc(var(--sp0-5)*-1)
 }
 
 [dir="rtl"] .breadcrumb__content {
-  margin-right: calc(var(--sp0-5) * -1)
+  margin-right: calc(var(--sp0-5)*-1)
 }
 
 [dir="ltr"] .breadcrumb__content {
-  margin-right: calc(var(--sp1) * -1)
+  margin-right: calc(var(--sp1)*-1)
 }
 
 [dir="rtl"] .breadcrumb__content {
-  margin-left: calc(var(--sp1) * -1)
+  margin-left: calc(var(--sp1)*-1)
 }
 
 [dir="ltr"] .breadcrumb__content {
@@ -93,8 +93,8 @@
 
 .breadcrumb__content {
   overflow: auto;
-  margin-top: calc(var(--sp0-5) * -1);
-  margin-bottom: calc(var(--sp0-5) * -1);
+  margin-top: calc(var(--sp0-5)*-1);
+  margin-bottom: calc(var(--sp0-5)*-1);
   padding-top: var(--sp0-5);
   padding-bottom: var(--sp0-5);
   -webkit-overflow-scrolling: touch
@@ -112,19 +112,19 @@
   }
 
 [dir="ltr"] .breadcrumb__list {
-  margin-left: calc(var(--sp1) * -1)
+  margin-left: calc(var(--sp1)*-1)
 }
 
 [dir="rtl"] .breadcrumb__list {
-  margin-right: calc(var(--sp1) * -1)
+  margin-right: calc(var(--sp1)*-1)
 }
 
 [dir="ltr"] .breadcrumb__list {
-  margin-right: calc(var(--sp1) * -1)
+  margin-right: calc(var(--sp1)*-1)
 }
 
 [dir="rtl"] .breadcrumb__list {
-  margin-left: calc(var(--sp1) * -1)
+  margin-left: calc(var(--sp1)*-1)
 }
 
 [dir="ltr"] .breadcrumb__list {
diff --git a/core/themes/olivero/css/components/button.css b/core/themes/olivero/css/components/button.css
index a45e22811d96a3fb8ec04ae4c4efc1baba306e84..16b102fbf4b42a873ff347b7e9e3287842e032dc 100644
--- a/core/themes/olivero/css/components/button.css
+++ b/core/themes/olivero/css/components/button.css
@@ -44,8 +44,8 @@
   height: var(--sp3);
   margin-top: var(--sp1);
   margin-bottom: var(--sp1);
-  padding-top: calc((var(--sp3) - var(--line-height-s)) / 2);
-  padding-bottom: calc((var(--sp3) - var(--line-height-s)) / 2);
+  padding-top: calc(var(--sp3)/2 - var(--line-height-s)/2);
+  padding-bottom: calc(var(--sp3)/2 - var(--line-height-s)/2);
   padding-left: var(--sp1-5);
   padding-right: var(--sp1-5);
   cursor: pointer;
@@ -137,8 +137,8 @@
 
 .button--small {
   height: var(--sp2-5);
-  padding-top: calc((var(--sp2-5) - var(--line-height-s)) / 2);
-  padding-bottom: calc((var(--sp2-5) - var(--line-height-s)) / 2);
+  padding-top: calc(var(--sp2-5)/2 - var(--line-height-s)/2);
+  padding-bottom: calc(var(--sp2-5)/2 - var(--line-height-s)/2);
   padding-left: var(--sp);
   padding-right: var(--sp);
   font-size: var(--font-size-base);
diff --git a/core/themes/olivero/css/components/comments.css b/core/themes/olivero/css/components/comments.css
index 083711799d6520482bbf7480b803a0af9d313cbc..efaf78b372e4b0d276f33e0b232d95dafc9e0c52 100644
--- a/core/themes/olivero/css/components/comments.css
+++ b/core/themes/olivero/css/components/comments.css
@@ -241,12 +241,12 @@
 
 [dir="ltr"] .add-comment__picture,[dir="ltr"] 
 .comment__picture {
-    left: calc(-1 * var(--sp5));
+    left: calc(var(--sp5)*-1);
   }
 
 [dir="rtl"] .add-comment__picture,[dir="rtl"] 
 .comment__picture {
-    right: calc(-1 * var(--sp5));
+    right: calc(var(--sp5)*-1);
   }
 
 .add-comment__picture,
@@ -259,11 +259,11 @@
 @media (min-width: 43.75rem) {
 
 [dir="ltr"] .indented .comment__picture {
-    left: calc(-1 * var(--sp4));
+    left: calc(var(--sp4)*-1);
   }
 
 [dir="rtl"] .indented .comment__picture {
-    right: calc(-1 * var(--sp4));
+    right: calc(var(--sp4)*-1);
   }
 
 .indented .comment__picture {
@@ -312,11 +312,11 @@
 }
 
 [dir="ltr"] .indented > .comment:not(:last-of-type):not(.has-children):before {
-    left: calc(-1 * var(--comment-indentation) - var(--sp));
+    left: calc(var(--comment-indentation)*-1 - var(--sp));
 }
 
 [dir="rtl"] .indented > .comment:not(:last-of-type):not(.has-children):before {
-    right: calc(-1 * var(--comment-indentation) - var(--sp));
+    right: calc(var(--comment-indentation)*-1 - var(--sp));
 }
 
 [dir="ltr"] .indented > .comment:not(:last-of-type):not(.has-children):before {
@@ -338,11 +338,11 @@
 @media (min-width: 43.75rem) {
 
 [dir="ltr"] .indented > .comment:not(:last-of-type):not(.has-children):before {
-      left: calc(-1 * var(--comment-indentation--md) + var(--sp));
+      left: calc(var(--comment-indentation--md)*-1 + var(--sp));
   }
 
 [dir="rtl"] .indented > .comment:not(:last-of-type):not(.has-children):before {
-      right: calc(-1 * var(--comment-indentation--md) + var(--sp));
+      right: calc(var(--comment-indentation--md)*-1 + var(--sp));
   }
     }
 
diff --git a/core/themes/olivero/css/components/content-moderation.css b/core/themes/olivero/css/components/content-moderation.css
index b2df805ea7258a01c828295ddfe5dc5c30b53ff9..e633431a363ff1b9af1492cdf198beea77c4facb 100644
--- a/core/themes/olivero/css/components/content-moderation.css
+++ b/core/themes/olivero/css/components/content-moderation.css
@@ -110,15 +110,15 @@
 @media (min-width: 43.75rem) {
 
 [dir="ltr"] .layout--content-narrow .entity-moderation-form,[dir="ltr"]  .layout--pass--content-narrow > * .entity-moderation-form,[dir="ltr"]  .layout--content-medium .entity-moderation-form,[dir="ltr"]  .layout--pass--content-medium > * .entity-moderation-form {
-      margin-left: calc(-2 * (var(--grid-col-width) + var(--grid-gap)))
+      margin-left: calc(var(--grid-col-width)*-2 + var(--grid-gap)*-2)
   }
 
 [dir="rtl"] .layout--content-narrow .entity-moderation-form,[dir="rtl"]  .layout--pass--content-narrow > * .entity-moderation-form,[dir="rtl"]  .layout--content-medium .entity-moderation-form,[dir="rtl"]  .layout--pass--content-medium > * .entity-moderation-form {
-      margin-right: calc(-2 * (var(--grid-col-width) + var(--grid-gap)))
+      margin-right: calc(var(--grid-col-width)*-2 + var(--grid-gap)*-2)
   }
 
 .layout--content-narrow .entity-moderation-form, .layout--pass--content-narrow > * .entity-moderation-form, .layout--content-medium .entity-moderation-form, .layout--pass--content-medium > * .entity-moderation-form {
-      width: calc(var(--grid-col-count) * var(--grid-col-width) + var(--grid-gap-count) * var(--grid-gap));
+      width: calc(var(--grid-col-count)*var(--grid-col-width) + var(--grid-gap-count)*var(--grid-gap));
       margin-top: var(--sp2);
       margin-bottom: var(--sp4)
   }
@@ -127,15 +127,15 @@
 @media (min-width: 62.5rem) {
 
 [dir="ltr"] .layout--content-narrow .entity-moderation-form,[dir="ltr"]  .layout--pass--content-narrow > * .entity-moderation-form,[dir="ltr"]  .layout--content-medium .entity-moderation-form,[dir="ltr"]  .layout--pass--content-medium > * .entity-moderation-form {
-      margin-left: calc(-1 * (var(--grid-col-width) + var(--grid-gap)))
+      margin-left: calc(var(--grid-col-width)*-1 + var(--grid-gap)*-1)
   }
 
 [dir="rtl"] .layout--content-narrow .entity-moderation-form,[dir="rtl"]  .layout--pass--content-narrow > * .entity-moderation-form,[dir="rtl"]  .layout--content-medium .entity-moderation-form,[dir="rtl"]  .layout--pass--content-medium > * .entity-moderation-form {
-      margin-right: calc(-1 * (var(--grid-col-width) + var(--grid-gap)))
+      margin-right: calc(var(--grid-col-width)*-1 + var(--grid-gap)*-1)
   }
 
 .layout--content-narrow .entity-moderation-form, .layout--pass--content-narrow > * .entity-moderation-form, .layout--content-medium .entity-moderation-form, .layout--pass--content-medium > * .entity-moderation-form {
-      width: calc(12 * var(--grid-col-width) + 11 * var(--grid-gap))
+      width: calc(var(--grid-col-width)*12 + var(--grid-gap)*11)
   }
     }
 
@@ -150,6 +150,6 @@
   }
 
 .layout--content-narrow .entity-moderation-form, .layout--pass--content-narrow > * .entity-moderation-form, .layout--content-medium .entity-moderation-form, .layout--pass--content-medium > * .entity-moderation-form {
-      width: calc(10 * var(--grid-col-width) + 11 * var(--grid-gap))
+      width: calc(var(--grid-col-width)*10 + var(--grid-gap)*11)
   }
     }
diff --git a/core/themes/olivero/css/components/details.css b/core/themes/olivero/css/components/details.css
index f8970f36eeae1be85fa44f9c85c5f95864fd3f62..adf42930fdb1ea90d0f4713adb85b30a694add68 100644
--- a/core/themes/olivero/css/components/details.css
+++ b/core/themes/olivero/css/components/details.css
@@ -108,10 +108,10 @@
 .olivero-details__summary:after,
 .collapse-processed > .olivero-details__summary .details-title:after {
   position: absolute;
-  top: calc(var(--details-border-width) * -1);
-  right: calc(var(--details-border-width) * -1);
-  bottom: calc(var(--details-border-width) * -1);
-  left: calc(var(--details-border-width) * -1);
+  top: calc(var(--details-border-width)*-1);
+  right: calc(var(--details-border-width)*-1);
+  bottom: calc(var(--details-border-width)*-1);
+  left: calc(var(--details-border-width)*-1);
   content: "";
   pointer-events: none;
   opacity: 0;
diff --git a/core/themes/olivero/css/components/embedded-media.css b/core/themes/olivero/css/components/embedded-media.css
index bc8ccfea088e74de34a418e91658e4d02d3a4ebf..5cd9fb8d6a011ce49d1ee7d10c8eb76aefc57bf5 100644
--- a/core/themes/olivero/css/components/embedded-media.css
+++ b/core/themes/olivero/css/components/embedded-media.css
@@ -145,12 +145,12 @@ figcaption {
 
 [dir="ltr"] .layout--content-narrow .align-right,[dir="ltr"] 
 .layout--pass--content-narrow > * .align-right {
-    margin-right: calc(-1 * ((var(--grid-col-width) + var(--grid-gap))));
+    margin-right: calc(var(--grid-col-width)*-1 + var(--grid-gap)*-1);
   }
 
 [dir="rtl"] .layout--content-narrow .align-right,[dir="rtl"] 
 .layout--pass--content-narrow > * .align-right {
-    margin-left: calc(-1 * ((var(--grid-col-width) + var(--grid-gap))));
+    margin-left: calc(var(--grid-col-width)*-1 + var(--grid-gap)*-1);
   }
   }
 
@@ -158,12 +158,12 @@ figcaption {
 
 [dir="ltr"] .layout--content-narrow .align-right,[dir="ltr"] 
 .layout--pass--content-narrow > * .align-right {
-    margin-right: calc(-2 * ((var(--grid-col-width) + var(--grid-gap))));
+    margin-right: calc(var(--grid-col-width)*-2 + var(--grid-gap)*-2);
   }
 
 [dir="rtl"] .layout--content-narrow .align-right,[dir="rtl"] 
 .layout--pass--content-narrow > * .align-right {
-    margin-left: calc(-2 * ((var(--grid-col-width) + var(--grid-gap))));
+    margin-left: calc(var(--grid-col-width)*-2 + var(--grid-gap)*-2);
   }
   }
 
@@ -171,12 +171,12 @@ figcaption {
 
 [dir="ltr"] .layout--content-narrow .align-right,[dir="ltr"] 
 .layout--pass--content-narrow > * .align-right {
-    margin-right: calc(-3 * ((var(--grid-col-width) + var(--grid-gap))));
+    margin-right: calc(var(--grid-col-width)*-3 + var(--grid-gap)*-3);
   }
 
 [dir="rtl"] .layout--content-narrow .align-right,[dir="rtl"] 
 .layout--pass--content-narrow > * .align-right {
-    margin-left: calc(-3 * ((var(--grid-col-width) + var(--grid-gap))));
+    margin-left: calc(var(--grid-col-width)*-3 + var(--grid-gap)*-3);
   }
   }
 
@@ -184,12 +184,12 @@ figcaption {
 
 [dir="ltr"] .layout--content-narrow .align-right,[dir="ltr"] 
 .layout--pass--content-narrow > * .align-right {
-    margin-right: calc(-3 * ((var(--grid-col-width) + var(--grid-gap))));
+    margin-right: calc(var(--grid-col-width)*-3 + var(--grid-gap)*-3);
   }
 
 [dir="rtl"] .layout--content-narrow .align-right,[dir="rtl"] 
 .layout--pass--content-narrow > * .align-right {
-    margin-left: calc(-3 * ((var(--grid-col-width) + var(--grid-gap))));
+    margin-left: calc(var(--grid-col-width)*-3 + var(--grid-gap)*-3);
   }
   }
 
@@ -255,12 +255,12 @@ figcaption {
 
 [dir="ltr"] .layout--content-narrow .align-left,[dir="ltr"] 
 .layout--pass--content-narrow > * .align-left {
-    margin-left: calc(-1 * ((var(--grid-col-width) + var(--grid-gap))));
+    margin-left: calc(var(--grid-col-width)*-1 + var(--grid-gap)*-1);
   }
 
 [dir="rtl"] .layout--content-narrow .align-left,[dir="rtl"] 
 .layout--pass--content-narrow > * .align-left {
-    margin-right: calc(-1 * ((var(--grid-col-width) + var(--grid-gap))));
+    margin-right: calc(var(--grid-col-width)*-1 + var(--grid-gap)*-1);
   }
   }
 
diff --git a/core/themes/olivero/css/components/header-navigation.css b/core/themes/olivero/css/components/header-navigation.css
index 6fbc9684479810c4138a889fe569c2b100db8624..13cc0332ddb2f1fc8ba6d10fd047fe581a108b92 100644
--- a/core/themes/olivero/css/components/header-navigation.css
+++ b/core/themes/olivero/css/components/header-navigation.css
@@ -182,7 +182,7 @@ body:not(.is-always-mobile-nav) .header-nav {
 
 body.is-always-mobile-nav .header-nav {
       overflow: auto;
-      max-width: calc((7 * (var(--grid-col-width) + var(--grid-gap))));
+      max-width: calc(var(--grid-col-width)*7 + var(--grid-gap)*7);
       transition: transform 0.2s, visibility 0.2s;
       border-top-width: calc(var(--drupal-displace-offset-top, 0px) + var(--sp11))
   }
@@ -191,15 +191,15 @@ body.is-always-mobile-nav .header-nav {
 @media (min-width: 90rem) {
 
 [dir="ltr"] body.is-always-mobile-nav .header-nav {
-      padding-right: calc(100vw - (var(--max-width) + var(--content-left) - var(--sp)))
+      padding-right: calc(100vw - var(--max-width) - var(--content-left) + var(--sp))
   }
 
 [dir="rtl"] body.is-always-mobile-nav .header-nav {
-      padding-left: calc(100vw - (var(--max-width) + var(--content-left) - var(--sp)))
+      padding-left: calc(100vw - var(--max-width) - var(--content-left) + var(--sp))
   }
 
 body.is-always-mobile-nav .header-nav {
-      max-width: calc(100vw - (var(--max-width) + var(--content-left)) + ((7 * (var(--grid-col-width) + var(--grid-gap)))))
+      max-width: calc(100vw - var(--max-width) - var(--content-left) + var(--grid-col-width)*7 + var(--grid-gap)*7)
   }
     }
 
diff --git a/core/themes/olivero/css/components/header-search-narrow.css b/core/themes/olivero/css/components/header-search-narrow.css
index 37e66901067f03b15b060794461ffa0962e2f56f..ecd8a7b8f58dd57357a88f35d3a4a7a3e674c8c7 100644
--- a/core/themes/olivero/css/components/header-search-narrow.css
+++ b/core/themes/olivero/css/components/header-search-narrow.css
@@ -24,8 +24,8 @@
 /* Width of the entire grid maxes out. */
 
 .block-search-narrow {
-  margin-left: calc(-1 * var(--sp));
-  margin-right: calc(-1 * var(--sp));
+  margin-left: calc(var(--sp)*-1);
+  margin-right: calc(var(--sp)*-1);
   margin-bottom: var(--sp2);
   background: var(--color--black)
 }
@@ -61,7 +61,7 @@
 
 .block-search-narrow input[type="search"] {
     width: calc(100% + var(--sp2));
-    height: calc(3 * var(--sp));
+    height: calc(var(--sp)*3);
     padding-top: 0;
     padding-bottom: 0;
     transition: background-size 0.4s;
@@ -120,7 +120,7 @@
   }
 
 .block-search-narrow input[type="search"] {
-      height: calc(4 * var(--sp))
+      height: calc(var(--sp)*4)
   }
     }
 
diff --git a/core/themes/olivero/css/components/header-site-branding.css b/core/themes/olivero/css/components/header-site-branding.css
index 53e0971aeb2403be5024d24b0db360b01b9f1de2..29094e934c0ecba1849b345d00b1366a927ae163 100644
--- a/core/themes/olivero/css/components/header-site-branding.css
+++ b/core/themes/olivero/css/components/header-site-branding.css
@@ -24,12 +24,12 @@
 /* Width of the entire grid maxes out. */
 
 [dir="ltr"] .site-branding {
-  margin-left: calc(-1 * var(--container-padding));
+  margin-left: calc(var(--container-padding)*-1);
   margin-right: var(--sp)
 }
 
 [dir="rtl"] .site-branding {
-  margin-right: calc(-1 * var(--container-padding));
+  margin-right: calc(var(--container-padding)*-1);
   margin-left: var(--sp)
 }
 
@@ -53,7 +53,7 @@
   display: flex;
   flex-shrink: 1;
   align-items: flex-end;
-  min-width: calc((2 * var(--grid-col-width)) + (2 * var(--grid-gap)) + var(--container-padding)); /* Span minimum of 2 column widths. */
+  min-width: calc(var(--grid-col-width)*2 + var(--grid-gap)*2 + var(--container-padding)); /* Span minimum of 2 column widths. */
   min-height: var(--sp3); /* Negative margin to break out of .container element. */
   padding-top: 0;
   padding-bottom: var(--sp0-5);
@@ -70,7 +70,7 @@
 @media (min-width: 43.75rem) {
 
 .site-branding {
-    min-width: calc((4 * var(--grid-col-width)) + (4 * var(--grid-gap)) + var(--container-padding)); /* Span minimum of 4 column widths. */
+    min-width: calc(var(--grid-col-width)*4 + var(--grid-gap)*4 + var(--container-padding)); /* Span minimum of 4 column widths. */
     min-height: var(--sp6);
     padding-bottom: var(--sp)
 }
@@ -79,18 +79,18 @@
 @media (min-width: 62.5rem) {
 
 .site-branding {
-    min-width: calc((2 * var(--grid-col-width)) + (2 * var(--grid-gap)) + var(--container-padding)) /* Span minimum of 2 column widths. */
+    min-width: calc(var(--grid-col-width)*2 + var(--grid-gap)*2 + var(--container-padding)) /* Span minimum of 2 column widths. */
 }
   }
 
 @media (min-width: 75rem) {
 
 [dir="ltr"] .site-branding {
-    margin-left: calc(-1 * var(--container-padding))
+    margin-left: calc(var(--container-padding)*-1)
   }
 
 [dir="rtl"] .site-branding {
-    margin-right: calc(-1 * var(--container-padding))
+    margin-right: calc(var(--container-padding)*-1)
   }
 
 .site-branding {
diff --git a/core/themes/olivero/css/components/messages.css b/core/themes/olivero/css/components/messages.css
index 402ed0318cab8df50a50219bdf480524cf080980..4ae935945b2a8c4ceaf2044e41edfd7d02844162 100644
--- a/core/themes/olivero/css/components/messages.css
+++ b/core/themes/olivero/css/components/messages.css
@@ -68,7 +68,7 @@
 }
 
 .messages {
-  min-height: calc(var(--messages-icon-size) + 2 * var(--sp1));
+  min-height: calc(var(--messages-icon-size) + var(--sp1)*2);
   padding-top: var(--sp1);
   padding-bottom: var(--sp1);
   color: var(--color--white);
diff --git a/core/themes/olivero/css/components/navigation/nav-primary-button.css b/core/themes/olivero/css/components/navigation/nav-primary-button.css
index 8f541d1a33f940e589a3b29ff77517a376c859f4..3001a4daf8461fd398104afa5f09acfc2dc8c92c 100644
--- a/core/themes/olivero/css/components/navigation/nav-primary-button.css
+++ b/core/themes/olivero/css/components/navigation/nav-primary-button.css
@@ -109,10 +109,10 @@
 
 @media (min-width: 75rem) {
     [dir="ltr"] body:not(.is-always-mobile-nav) .primary-nav__button-toggle {
-      margin-right: calc(-1 * var(--sp2))
+      margin-right: calc(var(--sp2)*-1)
   }
     [dir="rtl"] body:not(.is-always-mobile-nav) .primary-nav__button-toggle {
-      margin-left: calc(-1 * var(--sp2))
+      margin-left: calc(var(--sp2)*-1)
   }
     body:not(.is-always-mobile-nav) .primary-nav__button-toggle {
       flex-shrink: 0;
diff --git a/core/themes/olivero/css/components/navigation/nav-primary-wide.css b/core/themes/olivero/css/components/navigation/nav-primary-wide.css
index 3252a5b276c329b2b4e7b351f71e35454d048590..3673f022c6f29a0ae96c5cc67243d18355815de4 100644
--- a/core/themes/olivero/css/components/navigation/nav-primary-wide.css
+++ b/core/themes/olivero/css/components/navigation/nav-primary-wide.css
@@ -207,7 +207,7 @@
     body:not(.is-always-mobile-nav) .primary-nav__menu--level-2 {
       position: absolute;
       z-index: 105; /* Appear above search container. */
-      top: calc(100% - (0.5 * var(--sp)));
+      top: calc(100% - var(--sp)*0.5);
       left: 50%;
       visibility: hidden;
       overflow: auto;
@@ -216,8 +216,8 @@
        * elements should always be in viewport per accessibility guidelines). */
       max-height: calc(100vh - var(--site-header-height-wide) - var(--drupal-displace-offset-top, 0px) - var(--drupal-displace-offset-bottom, 0px) - var(--sp));
       margin-top: 0;
-      padding-top: calc(3 * var(--sp));
-      padding-bottom: calc(3 * var(--sp));
+      padding-top: calc(var(--sp)*3);
+      padding-bottom: calc(var(--sp)*3);
       transition: none;
       transform: translate(-50%, -1.25rem);
       opacity: 0;
@@ -244,7 +244,7 @@
 
       body:not(.is-always-mobile-nav) .primary-nav__menu-link--level-2:focus:before {
         top: 0;
-        left: calc(var(--sp0-5) * -1);
+        left: calc(var(--sp0-5)*-1);
         height: 100%;
         transform: none;
       }
diff --git a/core/themes/olivero/css/components/navigation/nav-primary.css b/core/themes/olivero/css/components/navigation/nav-primary.css
index 089a94a273b1a22001618b6dfb301252d463a196..d7eb32fadd563726972ec209e9cc9353e61eca4c 100644
--- a/core/themes/olivero/css/components/navigation/nav-primary.css
+++ b/core/themes/olivero/css/components/navigation/nav-primary.css
@@ -268,11 +268,11 @@
 */
 
 [dir="ltr"] .primary-nav__menu--level-2 {
-  margin-left: calc(-1 * var(--sp));
+  margin-left: calc(var(--sp)*-1);
 }
 
 [dir="rtl"] .primary-nav__menu--level-2 {
-  margin-right: calc(-1 * var(--sp));
+  margin-right: calc(var(--sp)*-1);
 }
 
 [dir="ltr"] .primary-nav__menu--level-2 {
@@ -312,11 +312,11 @@
 @media (min-width: 43.75rem) {
 
 [dir="ltr"] .primary-nav__menu--level-2 {
-    margin-left: calc(-1 * var(--sp3));
+    margin-left: calc(var(--sp3)*-1);
   }
 
 [dir="rtl"] .primary-nav__menu--level-2 {
-    margin-right: calc(-1 * var(--sp3));
+    margin-right: calc(var(--sp3)*-1);
   }
 
 [dir="ltr"] .primary-nav__menu--level-2 {
diff --git a/core/themes/olivero/css/components/node-teaser.css b/core/themes/olivero/css/components/node-teaser.css
index b2e09d5a22dfe4268ca682336d9a1298a659ea7f..824eee1afdc583da035b0d58b4b965dfce6418c6 100644
--- a/core/themes/olivero/css/components/node-teaser.css
+++ b/core/themes/olivero/css/components/node-teaser.css
@@ -78,7 +78,7 @@
   }
 
 .node--view-mode-teaser .primary-image + .node__title {
-      flex-basis: calc(100% - calc(4.5 * var(--sp)))
+      flex-basis: calc(100% - var(--sp)*4.5)
     }
 
 @media (min-width: 62.5rem) {
@@ -93,8 +93,8 @@
     }
 
 .node--view-mode-teaser .primary-image img {
-      width: calc(3.5 * var(--sp));
-      height: calc(3.5 * var(--sp));
+      width: calc(var(--sp)*3.5);
+      height: calc(var(--sp)*3.5);
       object-fit: cover;
       border-radius: 50%
     }
@@ -110,11 +110,11 @@
 @media (min-width: 62.5rem) {
 
 [dir="ltr"] .node--view-mode-teaser .primary-image {
-      left: calc(-1 * ((var(--grid-col-width) + var(--grid-gap))))
+      left: calc(var(--grid-col-width)*-1 + var(--grid-gap)*-1)
   }
 
 [dir="rtl"] .node--view-mode-teaser .primary-image {
-      right: calc(-1 * ((var(--grid-col-width) + var(--grid-gap))))
+      right: calc(var(--grid-col-width)*-1 + var(--grid-gap)*-1)
   }
 
 .node--view-mode-teaser .primary-image {
diff --git a/core/themes/olivero/css/components/powered-by-block.css b/core/themes/olivero/css/components/powered-by-block.css
index 0c5af952ddc89b2b61365d2cf20d25b97995757e..a312435f18ee632d8e6847555ada531bafd1c488 100644
--- a/core/themes/olivero/css/components/powered-by-block.css
+++ b/core/themes/olivero/css/components/powered-by-block.css
@@ -39,16 +39,16 @@
     }
 
 [dir="ltr"] .block-system-powered-by-block .drupal-logo {
-    margin-left: calc(var(--sp) / 4)
+    margin-left: calc(var(--sp)/4)
 }
 
 [dir="rtl"] .block-system-powered-by-block .drupal-logo {
-    margin-right: calc(var(--sp) / 4)
+    margin-right: calc(var(--sp)/4)
 }
 
 .block-system-powered-by-block .drupal-logo {
     display: inline-block;
-    margin-top: calc(-1 * var(--sp) / 4);
+    margin-top: calc(var(--sp)*-1/4);
   }
 
 .block-system-powered-by-block svg {
diff --git a/core/themes/olivero/css/components/tabs.css b/core/themes/olivero/css/components/tabs.css
index b74f875164a2f8c2609be2e98141a65dbfa47ded..b3bf23e4d622965fa142e2380324d2681bde7e98 100644
--- a/core/themes/olivero/css/components/tabs.css
+++ b/core/themes/olivero/css/components/tabs.css
@@ -62,7 +62,7 @@
 .tabs__tab {
   display: none;
   margin: 0;
-  margin-bottom: calc(-1 * var(--tabs-border-width))
+  margin-bottom: calc(var(--tabs-border-width)*-1)
 }
 
 .tabs__tab.is-active {
@@ -72,11 +72,11 @@
 @media (min-width: 43.75rem) {
 
 [dir="ltr"] .tabs__tab {
-    margin-left: calc(-1 * var(--tabs-border-width))
+    margin-left: calc(var(--tabs-border-width)*-1)
   }
 
 [dir="rtl"] .tabs__tab {
-    margin-right: calc(-1 * var(--tabs-border-width))
+    margin-right: calc(var(--tabs-border-width)*-1)
   }
 
 .tabs__tab {
@@ -160,11 +160,11 @@ html:not(.js) .tabs__tab {
   }
 
 [dir="ltr"] .tabs__link.is-active:after {
-      left: calc(-1 * var(--tabs-border-width))
+      left: calc(var(--tabs-border-width)*-1)
 }
 
 [dir="rtl"] .tabs__link.is-active:after {
-      right: calc(-1 * var(--tabs-border-width))
+      right: calc(var(--tabs-border-width)*-1)
 }
 
 [dir="ltr"] .tabs__link.is-active:after {
@@ -177,8 +177,8 @@ html:not(.js) .tabs__tab {
 
 .tabs__link.is-active:after {
       position: absolute;
-      top: calc(-1 * var(--tabs-border-width));
-      height: calc(100% + var(--tabs-border-width) * 2);
+      top: calc(var(--tabs-border-width)*-1);
+      height: calc(100% + var(--tabs-border-width)*2);
       content: ""
     }
 
@@ -194,8 +194,8 @@ html:not(.js) .tabs__tab {
 
 .tabs__link.is-active:after {
         top: auto;
-        bottom: calc(-1 * var(--tabs-border-width));
-        width: calc(100% + 2 * var(--tabs-border-width));
+        bottom: calc(var(--tabs-border-width)*-1);
+        width: calc(100% + var(--tabs-border-width)*2);
         height: 0;
         border-top: var(--tabs-active-border-size) solid var(--tabs-highlight-color)
     }
@@ -217,12 +217,12 @@ html:not(.js) .tabs__tab {
 /* Button that opens and closes primary tabs at narrow viewports. */
 
 [dir="ltr"] .tabs__trigger {
-  margin-left: calc(-1 * var(--tabs-border-width));
+  margin-left: calc(var(--tabs-border-width)*-1);
   margin-right: 0
 }
 
 [dir="rtl"] .tabs__trigger {
-  margin-right: calc(-1 * var(--tabs-border-width));
+  margin-right: calc(var(--tabs-border-width)*-1);
   margin-left: 0
 }
 
@@ -269,7 +269,7 @@ html:not(.js) .tabs__trigger {
   display: block;
   width: var(--sp);
   height: 0.625rem;
-  margin-top: calc(-2 * var(--tabs-border-width))
+  margin-top: calc(var(--tabs-border-width)*-2)
 }
 
 [dir="ltr"] .tabs__trigger-icon > span {
diff --git a/core/themes/olivero/css/components/tags.css b/core/themes/olivero/css/components/tags.css
index cd9ccae36fc16f7c844b84726d5431431c49ed24..dfbdcf5b6984f2ec6462b0439517725ace85a2ab 100644
--- a/core/themes/olivero/css/components/tags.css
+++ b/core/themes/olivero/css/components/tags.css
@@ -29,11 +29,11 @@
 }
 
 [dir="ltr"] .field--tags__label {
-  margin-right: calc(var(--sp1-5) - (var(--sp0-5) / 2));
+  margin-right: calc(var(--sp1-5) - var(--sp0-5)/2);
 }
 
 [dir="rtl"] .field--tags__label {
-  margin-left: calc(var(--sp1-5) - (var(--sp0-5) / 2));
+  margin-left: calc(var(--sp1-5) - var(--sp0-5)/2);
 }
 
 .field--tags__label {
@@ -78,19 +78,19 @@
 }
 
 [dir="ltr"] .field--tags__items {
-  margin-left: calc((var(--sp0-5) / 2) * -1);
+  margin-left: calc(var(--sp0-5)/2*-1);
 }
 
 [dir="rtl"] .field--tags__items {
-  margin-right: calc((var(--sp0-5) / 2) * -1);
+  margin-right: calc(var(--sp0-5)/2*-1);
 }
 
 [dir="ltr"] .field--tags__items {
-  margin-right: calc((var(--sp0-5) / 2) * -1);
+  margin-right: calc(var(--sp0-5)/2*-1);
 }
 
 [dir="rtl"] .field--tags__items {
-  margin-left: calc((var(--sp0-5) / 2) * -1);
+  margin-left: calc(var(--sp0-5)/2*-1);
 }
 
 [dir="ltr"] .field--tags__items {
@@ -112,33 +112,33 @@
 .field--tags__items {
   display: flex;
   flex-wrap: wrap;
-  margin-top: calc((var(--sp0-5) / 2) * -1);
-  margin-bottom: calc((var(--sp0-5) / 2) * -1);
+  margin-top: calc(var(--sp0-5)/2*-1);
+  margin-bottom: calc(var(--sp0-5)/2*-1);
   padding-top: 0;
   padding-bottom: 0;
   list-style: none;
 }
 
 [dir="ltr"] .field--tags__item {
-  margin-left: calc(var(--sp0-5) / 2);
+  margin-left: calc(var(--sp0-5)/2);
 }
 
 [dir="rtl"] .field--tags__item {
-  margin-right: calc(var(--sp0-5) / 2);
+  margin-right: calc(var(--sp0-5)/2);
 }
 
 [dir="ltr"] .field--tags__item {
-  margin-right: calc(var(--sp0-5) / 2);
+  margin-right: calc(var(--sp0-5)/2);
 }
 
 [dir="rtl"] .field--tags__item {
-  margin-left: calc(var(--sp0-5) / 2);
+  margin-left: calc(var(--sp0-5)/2);
 }
 
 .field--tags__item {
   display: flex;
-  margin-top: calc(var(--sp0-5) / 2);
-  margin-bottom: calc(var(--sp0-5) / 2);
+  margin-top: calc(var(--sp0-5)/2);
+  margin-bottom: calc(var(--sp0-5)/2);
 }
 
 .field--tags__item:nth-last-child(n+2):after {
diff --git a/core/themes/olivero/css/components/text-content.css b/core/themes/olivero/css/components/text-content.css
index 780e2b330ba714536690ab69ced13525dc2909f5..03c94582645a1140ec7123bb1ce1ad6a9f2b3911 100644
--- a/core/themes/olivero/css/components/text-content.css
+++ b/core/themes/olivero/css/components/text-content.css
@@ -202,7 +202,7 @@
 
 .text-content blockquote, .cke_editable blockquote {
       font-size: 2.5rem;
-      line-height: calc(3.5 * var(--sp))
+      line-height: calc(var(--sp)*3.5)
   }
     }
 
diff --git a/core/themes/olivero/css/components/vertical-tabs.css b/core/themes/olivero/css/components/vertical-tabs.css
index a39591b6a22ff1a380091c6be5fc20993f562d75..3b4571413f894313665860228901135e0203de45 100644
--- a/core/themes/olivero/css/components/vertical-tabs.css
+++ b/core/themes/olivero/css/components/vertical-tabs.css
@@ -70,7 +70,7 @@
   }
 
 .vertical-tabs__panes {
-  margin-top: calc(var(--vertical-tabs-menu-border-width) * -1)
+  margin-top: calc(var(--vertical-tabs-menu-border-width)*-1)
 }
 
 @media (min-width: 62.5rem) {
@@ -140,11 +140,11 @@
 @media (min-width: 62.5rem) {
 
 [dir="ltr"] .vertical-tabs__menu-item.is-selected {
-    margin-right: calc(var(--vertical-tabs-menu-border-width) * -1);
+    margin-right: calc(var(--vertical-tabs-menu-border-width)*-1);
   }
 
 [dir="rtl"] .vertical-tabs__menu-item.is-selected {
-    margin-left: calc(var(--vertical-tabs-menu-border-width) * -1);
+    margin-left: calc(var(--vertical-tabs-menu-border-width)*-1);
   }
 
 [dir="ltr"] .vertical-tabs__menu-item.is-selected {
diff --git a/core/themes/olivero/css/components/wide-image.css b/core/themes/olivero/css/components/wide-image.css
index ff67e2dd24f9d2421c7109afabaadba079650d4a..1652d64bf8fd17bcf8081d9a91adf28f51f32a87 100644
--- a/core/themes/olivero/css/components/wide-image.css
+++ b/core/themes/olivero/css/components/wide-image.css
@@ -47,15 +47,15 @@
 @media (min-width: 43.75rem) {
 
 [dir="ltr"] .wide-image {
-    margin-left: calc(-1 * ((var(--grid-col-width) + var(--grid-gap))))
+    margin-left: calc(var(--grid-col-width)*-1 + var(--grid-gap)*-1)
   }
 
 [dir="rtl"] .wide-image {
-    margin-right: calc(-1 * ((var(--grid-col-width) + var(--grid-gap))))
+    margin-right: calc(var(--grid-col-width)*-1 + var(--grid-gap)*-1)
   }
 
 .wide-image {
-    width: calc(var(--grid-col-count) * var(--grid-col-width) + var(--grid-gap-count) * var(--grid-gap));
+    width: calc(var(--grid-col-count)*var(--grid-col-width) + var(--grid-gap-count)*var(--grid-gap));
     margin-top: var(--sp2);
     margin-bottom: var(--sp4)
 }
@@ -64,15 +64,15 @@
 @media (min-width: 62.5rem) {
 
 [dir="ltr"] .wide-image {
-    margin-left: calc(-1 * (var(--grid-col-width) + var(--grid-gap)))
+    margin-left: calc(var(--grid-col-width)*-1 + var(--grid-gap)*-1)
   }
 
 [dir="rtl"] .wide-image {
-    margin-right: calc(-1 * (var(--grid-col-width) + var(--grid-gap)))
+    margin-right: calc(var(--grid-col-width)*-1 + var(--grid-gap)*-1)
   }
 
 .wide-image {
-    width: calc(12 * var(--grid-col-width) + 11 * var(--grid-gap))
+    width: calc(var(--grid-col-width)*12 + var(--grid-gap)*11)
 }
   }
 
@@ -81,14 +81,14 @@
 @media (min-width: 62.5rem) {
 
 .sidebar-grid .wide-image {
-    width: calc(9 * var(--grid-col-width) + 8 * var(--grid-gap))
+    width: calc(var(--grid-col-width)*9 + var(--grid-gap)*8)
 }
   }
 
 @media (min-width: 81.25rem) {
 
 .sidebar-grid .wide-image {
-    width: calc(10 * var(--grid-col-width) + 9 * var(--grid-gap))
+    width: calc(var(--grid-col-width)*10 + var(--grid-gap)*9)
 }
   }
 
diff --git a/core/themes/olivero/css/layout/layout-builder-fourcol-section.css b/core/themes/olivero/css/layout/layout-builder-fourcol-section.css
index 57399aadbb6a3c37afb4723cfb3a0dd9ec0e1e46..9ddc38d98b5f1bbd2e295fd0d99fa627b7f33338 100644
--- a/core/themes/olivero/css/layout/layout-builder-fourcol-section.css
+++ b/core/themes/olivero/css/layout/layout-builder-fourcol-section.css
@@ -36,7 +36,7 @@
 @media (min-width: 43.75rem) {
 
 .layout--fourcol-section > .layout__region {
-      flex-basis: calc(50% - (var(--grid-gap) * 0.5));
+      flex-basis: calc(50% - var(--grid-gap)*0.5);
       flex-grow: 0;
       flex-shrink: 0;
       margin-bottom: 0
@@ -56,22 +56,22 @@
 
     [dir="ltr"] .layout--fourcol-section > .layout__region--first,[dir="ltr"] 
     .layout--fourcol-section > .layout__region--third {
-      margin-right: calc(var(--grid-gap) * 0.5)
+      margin-right: calc(var(--grid-gap)*0.5)
   }
 
     [dir="rtl"] .layout--fourcol-section > .layout__region--first,[dir="rtl"] 
     .layout--fourcol-section > .layout__region--third {
-      margin-left: calc(var(--grid-gap) * 0.5)
+      margin-left: calc(var(--grid-gap)*0.5)
   }
 
     [dir="ltr"] .layout--fourcol-section > .layout__region--second,[dir="ltr"] 
     .layout--fourcol-section > .layout__region--fourth {
-      margin-left: calc(var(--grid-gap) * 0.5)
+      margin-left: calc(var(--grid-gap)*0.5)
   }
 
     [dir="rtl"] .layout--fourcol-section > .layout__region--second,[dir="rtl"] 
     .layout--fourcol-section > .layout__region--fourth {
-      margin-right: calc(var(--grid-gap) * 0.5)
+      margin-right: calc(var(--grid-gap)*0.5)
   }
   }
 
@@ -82,7 +82,7 @@
 
 @media (min-width: 62.5rem) {
     .layout--fourcol-section > .layout__region {
-      flex-basis: calc(25% - (var(--grid-gap) * 0.75));
+      flex-basis: calc(25% - var(--grid-gap)*0.75);
     }
 
     .layout--fourcol-section > .layout__region--first,
@@ -91,24 +91,24 @@
     }
 
     [dir="ltr"] .layout--fourcol-section > .layout__region--first {
-      margin-right: calc(var(--grid-gap) * 0.5)
+      margin-right: calc(var(--grid-gap)*0.5)
   }
 
     [dir="rtl"] .layout--fourcol-section > .layout__region--first {
-      margin-left: calc(var(--grid-gap) * 0.5)
+      margin-left: calc(var(--grid-gap)*0.5)
   }
 
     .layout--fourcol-section > .layout__region--second,
     .layout--fourcol-section > .layout__region--third {
-      margin-left: calc(var(--grid-gap) * 0.5);
-      margin-right: calc(var(--grid-gap) * 0.5);
+      margin-left: calc(var(--grid-gap)*0.5);
+      margin-right: calc(var(--grid-gap)*0.5);
     }
 
     [dir="ltr"] .layout--fourcol-section > .layout__region--fourth {
-      margin-left: calc(var(--grid-gap) * 0.5)
+      margin-left: calc(var(--grid-gap)*0.5)
   }
 
     [dir="rtl"] .layout--fourcol-section > .layout__region--fourth {
-      margin-right: calc(var(--grid-gap) * 0.5)
+      margin-right: calc(var(--grid-gap)*0.5)
   }
   }
diff --git a/core/themes/olivero/css/layout/layout-builder-threecol-section.css b/core/themes/olivero/css/layout/layout-builder-threecol-section.css
index d864f9ea17a1aabc6fa36d20b72c020db5fd8ce2..9caf4ff712f47b253e60a461c1eee778016ac5bb 100644
--- a/core/themes/olivero/css/layout/layout-builder-threecol-section.css
+++ b/core/themes/olivero/css/layout/layout-builder-threecol-section.css
@@ -44,27 +44,27 @@
 
 @media (min-width: 62.5rem) {
     [dir="ltr"] .layout--threecol-section > .layout__region--first {
-      margin-right: calc(var(--grid-gap) * 0.5)
+      margin-right: calc(var(--grid-gap)*0.5)
   }
     [dir="rtl"] .layout--threecol-section > .layout__region--first {
-      margin-left: calc(var(--grid-gap) * 0.5)
+      margin-left: calc(var(--grid-gap)*0.5)
   }
 
     .layout--threecol-section > .layout__region--second {
-      margin-left: calc(var(--grid-gap) * 0.5);
-      margin-right: calc(var(--grid-gap) * 0.5);
+      margin-left: calc(var(--grid-gap)*0.5);
+      margin-right: calc(var(--grid-gap)*0.5);
     }
 
     [dir="ltr"] .layout--threecol-section > .layout__region--third {
-      margin-left: calc(var(--grid-gap) * 0.5)
+      margin-left: calc(var(--grid-gap)*0.5)
   }
 
     [dir="rtl"] .layout--threecol-section > .layout__region--third {
-      margin-right: calc(var(--grid-gap) * 0.5)
+      margin-right: calc(var(--grid-gap)*0.5)
   }
     .layout--threecol-section--25-50-25 > .layout__region--first,
     .layout--threecol-section--25-50-25 > .layout__region--third {
-      flex-basis: calc(25% - (var(--grid-gap) * 0.5));
+      flex-basis: calc(25% - var(--grid-gap)*0.5);
     }
 
     .layout--threecol-section--25-50-25 > .layout__region--second {
@@ -72,7 +72,7 @@
     }
     .layout--threecol-section--25-25-50 > .layout__region--first,
     .layout--threecol-section--25-25-50 > .layout__region--second {
-      flex-basis: calc(25% - (var(--grid-gap) * 0.5));
+      flex-basis: calc(25% - var(--grid-gap)*0.5);
     }
 
     .layout--threecol-section--25-25-50 > .layout__region--third {
@@ -84,11 +84,11 @@
 
     .layout--threecol-section--50-25-25 > .layout__region--second,
     .layout--threecol-section--50-25-25 > .layout__region--third {
-      flex-basis: calc(25% - (var(--grid-gap) * 0.5));
+      flex-basis: calc(25% - var(--grid-gap)*0.5);
     }
     .layout--threecol-section--33-34-33 > .layout__region--first,
     .layout--threecol-section--33-34-33 > .layout__region--second,
     .layout--threecol-section--33-34-33 > .layout__region--third {
-      flex-basis: calc(33.33% - (var(--grid-gap) * 0.667));
+      flex-basis: calc(33.33% - var(--grid-gap)*0.667);
     }
 }
diff --git a/core/themes/olivero/css/layout/layout-builder-twocol-section.css b/core/themes/olivero/css/layout/layout-builder-twocol-section.css
index 3c030079b50330182f4cf236bb4618c1d2f4ff5c..1f3d68644dc71d98fe627a013f3ada65aa27e879 100644
--- a/core/themes/olivero/css/layout/layout-builder-twocol-section.css
+++ b/core/themes/olivero/css/layout/layout-builder-twocol-section.css
@@ -44,108 +44,108 @@
 
 @media (min-width: 43.75rem) {
     [dir="ltr"] .layout--twocol-section--50-50 > .layout__region--first {
-      margin-right: calc(var(--grid-gap) * 0.5)
+      margin-right: calc(var(--grid-gap)*0.5)
   }
     [dir="rtl"] .layout--twocol-section--50-50 > .layout__region--first {
-      margin-left: calc(var(--grid-gap) * 0.5)
+      margin-left: calc(var(--grid-gap)*0.5)
   }
     .layout--twocol-section--50-50 > .layout__region--first {
-      flex-basis: calc(50% - (var(--grid-gap) * 0.5));
+      flex-basis: calc(50% - var(--grid-gap)*0.5);
     }
 
     [dir="ltr"] .layout--twocol-section--50-50 > .layout__region--second {
-      margin-left: calc(var(--grid-gap) * 0.5)
+      margin-left: calc(var(--grid-gap)*0.5)
   }
 
     [dir="rtl"] .layout--twocol-section--50-50 > .layout__region--second {
-      margin-right: calc(var(--grid-gap) * 0.5)
+      margin-right: calc(var(--grid-gap)*0.5)
   }
 
     .layout--twocol-section--50-50 > .layout__region--second {
-      flex-basis: calc(50% - (var(--grid-gap) * 0.5));
+      flex-basis: calc(50% - var(--grid-gap)*0.5);
     }
     [dir="ltr"] .layout--twocol-section--33-67 > .layout__region--first {
-      margin-right: calc(var(--grid-gap) * 0.3333)
+      margin-right: calc(var(--grid-gap)*0.3333)
   }
     [dir="rtl"] .layout--twocol-section--33-67 > .layout__region--first {
-      margin-left: calc(var(--grid-gap) * 0.3333)
+      margin-left: calc(var(--grid-gap)*0.3333)
   }
     .layout--twocol-section--33-67 > .layout__region--first {
-      flex-basis: calc(33.33% - (var(--grid-gap) * 0.3333));
+      flex-basis: calc(33.33% - var(--grid-gap)*0.3333);
     }
 
     [dir="ltr"] .layout--twocol-section--33-67 > .layout__region--second {
-      margin-left: calc(var(--grid-gap) * 0.6666)
+      margin-left: calc(var(--grid-gap)*0.6666)
   }
 
     [dir="rtl"] .layout--twocol-section--33-67 > .layout__region--second {
-      margin-right: calc(var(--grid-gap) * 0.6666)
+      margin-right: calc(var(--grid-gap)*0.6666)
   }
 
     .layout--twocol-section--33-67 > .layout__region--second {
-      flex-basis: calc(66.66% - (var(--grid-gap) * 0.6666));
+      flex-basis: calc(66.66% - var(--grid-gap)*0.6666);
     }
     [dir="ltr"] .layout--twocol-section--67-33 > .layout__region--first {
-      margin-right: calc(var(--grid-gap) * 0.6666)
+      margin-right: calc(var(--grid-gap)*0.6666)
   }
     [dir="rtl"] .layout--twocol-section--67-33 > .layout__region--first {
-      margin-left: calc(var(--grid-gap) * 0.6666)
+      margin-left: calc(var(--grid-gap)*0.6666)
   }
     .layout--twocol-section--67-33 > .layout__region--first {
-      flex-basis: calc(66.66% - (var(--grid-gap) * 0.6666));
+      flex-basis: calc(66.66% - var(--grid-gap)*0.6666);
     }
 
     [dir="ltr"] .layout--twocol-section--67-33 > .layout__region--second {
-      margin-left: calc(var(--grid-gap) * 0.3333)
+      margin-left: calc(var(--grid-gap)*0.3333)
   }
 
     [dir="rtl"] .layout--twocol-section--67-33 > .layout__region--second {
-      margin-right: calc(var(--grid-gap) * 0.3333)
+      margin-right: calc(var(--grid-gap)*0.3333)
   }
 
     .layout--twocol-section--67-33 > .layout__region--second {
-      flex-basis: calc(33.33% - (var(--grid-gap) * 0.3333));
+      flex-basis: calc(33.33% - var(--grid-gap)*0.3333);
     }
     [dir="ltr"] .layout--twocol-section--25-75 > .layout__region--first {
-      margin-right: calc(var(--grid-gap) * 0.25)
+      margin-right: calc(var(--grid-gap)*0.25)
   }
     [dir="rtl"] .layout--twocol-section--25-75 > .layout__region--first {
-      margin-left: calc(var(--grid-gap) * 0.25)
+      margin-left: calc(var(--grid-gap)*0.25)
   }
     .layout--twocol-section--25-75 > .layout__region--first {
-      flex-basis: calc(25% - (var(--grid-gap) * 0.25));
+      flex-basis: calc(25% - var(--grid-gap)*0.25);
     }
 
     [dir="ltr"] .layout--twocol-section--25-75 > .layout__region--second {
-      margin-left: calc(var(--grid-gap) * 0.75)
+      margin-left: calc(var(--grid-gap)*0.75)
   }
 
     [dir="rtl"] .layout--twocol-section--25-75 > .layout__region--second {
-      margin-right: calc(var(--grid-gap) * 0.75)
+      margin-right: calc(var(--grid-gap)*0.75)
   }
 
     .layout--twocol-section--25-75 > .layout__region--second {
-      flex-basis: calc(75% - (var(--grid-gap) * 0.75));
+      flex-basis: calc(75% - var(--grid-gap)*0.75);
     }
     [dir="ltr"] .layout--twocol-section--75-25 > .layout__region--first {
-      margin-right: calc(var(--grid-gap) * 0.75)
+      margin-right: calc(var(--grid-gap)*0.75)
   }
     [dir="rtl"] .layout--twocol-section--75-25 > .layout__region--first {
-      margin-left: calc(var(--grid-gap) * 0.75)
+      margin-left: calc(var(--grid-gap)*0.75)
   }
     .layout--twocol-section--75-25 > .layout__region--first {
-      flex-basis: calc(75% - (var(--grid-gap) * 0.75));
+      flex-basis: calc(75% - var(--grid-gap)*0.75);
     }
 
     [dir="ltr"] .layout--twocol-section--75-25 > .layout__region--second {
-      margin-left: calc(var(--grid-gap) * 0.25)
+      margin-left: calc(var(--grid-gap)*0.25)
   }
 
     [dir="rtl"] .layout--twocol-section--75-25 > .layout__region--second {
-      margin-right: calc(var(--grid-gap) * 0.25)
+      margin-right: calc(var(--grid-gap)*0.25)
   }
 
     .layout--twocol-section--75-25 > .layout__region--second {
-      flex-basis: calc(25% - (var(--grid-gap) * 0.25));
+      flex-basis: calc(25% - var(--grid-gap)*0.25);
     }
 }
diff --git a/core/themes/olivero/css/layout/layout-content-narrow.css b/core/themes/olivero/css/layout/layout-content-narrow.css
index 96cee2dedce694318145cccd49456040afb282a1..2ea0719b72aaaf80c18d0f8759999d1573b44b27 100644
--- a/core/themes/olivero/css/layout/layout-content-narrow.css
+++ b/core/themes/olivero/css/layout/layout-content-narrow.css
@@ -90,22 +90,22 @@
 @media (min-width: 43.75rem) {
 
 [dir="ltr"] .layout--content-narrow.text-content blockquote:before,[dir="ltr"]  .layout--content-narrow .text-content blockquote:before,[dir="ltr"]  .layout--pass--content-narrow > *.text-content blockquote:before,[dir="ltr"]  .layout--pass--content-narrow > * .text-content blockquote:before {
-          left: calc(-1 * (var(--grid-col-width) + var(--grid-gap)))
+          left: calc(var(--grid-col-width)*-1 + var(--grid-gap)*-1)
   }
 
 [dir="rtl"] .layout--content-narrow.text-content blockquote:before,[dir="rtl"]  .layout--content-narrow .text-content blockquote:before,[dir="rtl"]  .layout--pass--content-narrow > *.text-content blockquote:before,[dir="rtl"]  .layout--pass--content-narrow > * .text-content blockquote:before {
-          right: calc(-1 * (var(--grid-col-width) + var(--grid-gap)))
+          right: calc(var(--grid-col-width)*-1 + var(--grid-gap)*-1)
   }
         }
 
 @media (min-width: 43.75rem) {
 
 [dir="ltr"] .layout--content-narrow.text-content blockquote:after,[dir="ltr"]  .layout--content-narrow .text-content blockquote:after,[dir="ltr"]  .layout--pass--content-narrow > *.text-content blockquote:after,[dir="ltr"]  .layout--pass--content-narrow > * .text-content blockquote:after {
-          left: calc(-1 * (var(--grid-col-width) + var(--grid-gap)))
+          left: calc(var(--grid-col-width)*-1 + var(--grid-gap)*-1)
   }
 
 [dir="rtl"] .layout--content-narrow.text-content blockquote:after,[dir="rtl"]  .layout--content-narrow .text-content blockquote:after,[dir="rtl"]  .layout--pass--content-narrow > *.text-content blockquote:after,[dir="rtl"]  .layout--pass--content-narrow > * .text-content blockquote:after {
-          right: calc(-1 * (var(--grid-col-width) + var(--grid-gap)))
+          right: calc(var(--grid-col-width)*-1 + var(--grid-gap)*-1)
   }
 
 [dir="ltr"] .layout--content-narrow.text-content blockquote:after,[dir="ltr"]  .layout--content-narrow .text-content blockquote:after,[dir="ltr"]  .layout--pass--content-narrow > *.text-content blockquote:after,[dir="ltr"]  .layout--pass--content-narrow > * .text-content blockquote:after {
@@ -133,7 +133,7 @@
   }
 
 .layout--content-narrow.text-content blockquote, .layout--content-narrow .text-content blockquote, .layout--pass--content-narrow > *.text-content blockquote, .layout--pass--content-narrow > * .text-content blockquote {
-        width: calc(10 * var(--grid-col-width) + 9 * var(--grid-gap));
+        width: calc(var(--grid-col-width)*10 + var(--grid-gap)*9);
         margin-top: var(--sp3);
         margin-bottom: var(--sp3)
     }
@@ -150,15 +150,15 @@
 @media (min-width: 62.5rem) {
 
 [dir="ltr"] .layout--content-narrow.text-content pre,[dir="ltr"]  .layout--content-narrow .text-content pre,[dir="ltr"]  .layout--pass--content-narrow > *.text-content pre,[dir="ltr"]  .layout--pass--content-narrow > * .text-content pre {
-        margin-left: calc(-1 * (var(--grid-col-width) + var(--grid-gap)))
+        margin-left: calc(var(--grid-col-width)*-1 + var(--grid-gap)*-1)
   }
 
 [dir="rtl"] .layout--content-narrow.text-content pre,[dir="rtl"]  .layout--content-narrow .text-content pre,[dir="rtl"]  .layout--pass--content-narrow > *.text-content pre,[dir="rtl"]  .layout--pass--content-narrow > * .text-content pre {
-        margin-right: calc(-1 * (var(--grid-col-width) + var(--grid-gap)))
+        margin-right: calc(var(--grid-col-width)*-1 + var(--grid-gap)*-1)
   }
 
 .layout--content-narrow.text-content pre, .layout--content-narrow .text-content pre, .layout--pass--content-narrow > *.text-content pre, .layout--pass--content-narrow > * .text-content pre {
-        width: calc(12 * var(--grid-col-width) + 11 * var(--grid-gap))
+        width: calc(var(--grid-col-width)*12 + var(--grid-gap)*11)
     }
       }
 
diff --git a/core/themes/olivero/css/layout/layout-footer.css b/core/themes/olivero/css/layout/layout-footer.css
index 8aa5c822327bea812d1a1f400a4306e36027b41f..45bae863ed1b85e6f09a8462e3198d1a5e7703ec 100644
--- a/core/themes/olivero/css/layout/layout-footer.css
+++ b/core/themes/olivero/css/layout/layout-footer.css
@@ -42,7 +42,7 @@
 
 .site-footer__inner {
     padding-top: var(--sp4);
-    padding-bottom: calc(13 * var(--sp))
+    padding-bottom: calc(var(--sp)*13)
 }
   }
 
diff --git a/core/themes/olivero/css/layout/layout-views-grid.css b/core/themes/olivero/css/layout/layout-views-grid.css
index 376665d748983f890a41b0503666f56ed320b6b1..dedd5828dbbf576ba67c6d78ab89e9454b51f471 100644
--- a/core/themes/olivero/css/layout/layout-views-grid.css
+++ b/core/themes/olivero/css/layout/layout-views-grid.css
@@ -38,8 +38,8 @@
    * Calculated values.
    */
   --views-grid--gap-count: calc(var(--views-grid--column-count) - 1);
-  --views-grid--total-gap-width: calc(var(--views-grid--gap-count) * var(--views-grid--layout-gap));
-  --views-grid-item--max-width: calc((100% - var(--views-grid--total-gap-width)) / var(--views-grid--column-count));
+  --views-grid--total-gap-width: calc(var(--views-grid--gap-count)*var(--views-grid--layout-gap));
+  --views-grid-item--max-width: calc((100% - var(--views-grid--total-gap-width))/var(--views-grid--column-count));
 
   display: grid;
   grid-template-columns: repeat(auto-fill, minmax(max(var(--views-grid-item--min-width), var(--views-grid-item--max-width)), 1fr));
@@ -47,7 +47,7 @@
 }
 
 .views-view-grid--vertical {
-  margin-bottom: calc(-1 * var(--views-grid--layout-gap)); /* Offset the bottom row's padding. */
+  margin-bottom: calc(var(--views-grid--layout-gap)*-1); /* Offset the bottom row's padding. */
   column-width: var(--views-grid-item--min-width);
   column-count: var(--views-grid--column-count);
   grid-column-gap: var(--views-grid--layout-gap)
diff --git a/core/themes/olivero/css/layout/region-content-below.css b/core/themes/olivero/css/layout/region-content-below.css
index fb5e28118b46f73bcef53a4a588b20b22b930de8..096f8c5774794bf66d55789d33acb8788224d154 100644
--- a/core/themes/olivero/css/layout/region-content-below.css
+++ b/core/themes/olivero/css/layout/region-content-below.css
@@ -39,7 +39,7 @@
 }
 
     .region--content-below > * {
-      flex-basis: calc(50% - (var(--grid-gap) / 2));
+      flex-basis: calc(50% - var(--grid-gap)/2);
       flex-grow: 1;
       flex-shrink: 0
     }
@@ -57,7 +57,7 @@
 
 @media (min-width: 43.75rem) {
     .region--content-below > * {
-      flex-basis: calc(33.33% - (var(--grid-gap) * 0.667))
+      flex-basis: calc(33.33% - var(--grid-gap)*0.667)
     }
 
       [dir="ltr"] .region--content-below > *:nth-child(2n),[dir="ltr"] 
diff --git a/core/themes/olivero/css/layout/social-bar.css b/core/themes/olivero/css/layout/social-bar.css
index a73a1dc6a1ea0206f44d399340a201061ebb6299..a8b47c11d0c6185ae4a5abcf58f71a50fd0991c1 100644
--- a/core/themes/olivero/css/layout/social-bar.css
+++ b/core/themes/olivero/css/layout/social-bar.css
@@ -76,8 +76,8 @@
 .social-bar__inner {
     position: relative;
     width: var(--content-left);
-    padding-top: calc(5 * var(--sp));
-    padding-bottom: calc(5 * var(--sp))
+    padding-top: calc(var(--sp)*5);
+    padding-bottom: calc(var(--sp)*5)
 }
 
     [dir="ltr"] .social-bar__inner.is-fixed {
@@ -91,7 +91,7 @@
     .social-bar__inner.is-fixed {
       position: fixed;
       top: var(--sp6);
-      height: calc(100vh - 6 * var(--sp));
+      height: calc(100vh - var(--sp)*6);
     }
   }
 
diff --git a/core/themes/olivero/olivero.libraries.yml b/core/themes/olivero/olivero.libraries.yml
index 68a1fc056e2b54e3a451b18b719e6e8e88d626fd..cc81e03f4d2b6206482f4fc9677deb47245f1956 100644
--- a/core/themes/olivero/olivero.libraries.yml
+++ b/core/themes/olivero/olivero.libraries.yml
@@ -56,6 +56,9 @@ global-styling:
     js/navigation-utils.js: {}
 
   dependencies:
+    - core/drupal.element.closest
+    - core/drupal.element.matches
+    - core/drupal.nodelist.foreach
     - core/drupal
     - core/once
     - core/tabbable
@@ -217,6 +220,8 @@ messages:
   version: VERSION
   js:
     js/messages.js: {}
+  dependencies:
+    - core/drupal.array.includes
 
 navigation-primary:
   version: VERSION
diff --git a/core/yarn.lock b/core/yarn.lock
index 0e433e506b32829e7d7b84119d089f43825ba21f..e302d12ce30650b9926f5ffad9ea251170ca4f4c 100644
--- a/core/yarn.lock
+++ b/core/yarn.lock
@@ -2714,6 +2714,11 @@ css-what@^6.0.1:
   resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
   integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
 
+css.escape@1.5.x:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb"
+  integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=
+
 cssdb@^4.4.0:
   version "4.4.0"
   resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-4.4.0.tgz#3bf2f2a68c10f5c6a08abd92378331ee803cddb0"
@@ -3125,6 +3130,11 @@ es-to-primitive@^1.2.1:
     is-date-object "^1.0.1"
     is-symbol "^1.0.2"
 
+es6-promise@4.2.x:
+  version "4.2.8"
+  resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a"
+  integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==
+
 escalade@^3.1.1:
   version "3.1.1"
   resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
@@ -5211,6 +5221,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
   resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
   integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
 
+picturefill@3.0.x:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/picturefill/-/picturefill-3.0.3.tgz#a5c38eeb02d74def38e1790ff61e166166b4f224"
+  integrity sha512-JDdx+3i4fs2pkqwWZJgGEM2vFWsq+01YsQFT9CKPGuv2Q0xSdrQZoxi9XwyNARTgxiOdgoAwWQRluLRe/JQX2g==
+
 pify@^2.3.0:
   version "2.3.0"
   resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
@@ -5253,6 +5268,15 @@ postcss-attribute-case-insensitive@^4.0.1:
     postcss "^7.0.2"
     postcss-selector-parser "^6.0.2"
 
+postcss-calc@^7.0.1:
+  version "7.0.5"
+  resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e"
+  integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==
+  dependencies:
+    postcss "^7.0.27"
+    postcss-selector-parser "^6.0.2"
+    postcss-value-parser "^4.0.2"
+
 postcss-calc@^8.2.3:
   version "8.2.4"
   resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5"
@@ -5834,7 +5858,7 @@ postcss-value-parser@^3.2.3:
   resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281"
   integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==
 
-postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0:
+postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0:
   version "4.2.0"
   resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
   integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==