Commit ba57b2813d1 for woocommerce

commit ba57b2813d19e015c6bf92b5f12fb5e78d864932
Author: Raluca Stan <ralucastn@gmail.com>
Date:   Fri Aug 28 15:39:50 2026 +0200

    Replace the classic-assets Grunt pipeline with a node build script (#68085)

    * Replace the classic-assets Grunt pipeline with a node build script

    * Add changelog entry for the classic-assets build rework

    * Address review feedback on the classic-assets build script

    * Use Windows-compatible quoting for the stylelint globs

    * Use Windows-compatible quoting for the eslint globs

diff --git a/plugins/woocommerce/changelog/dev-classic-assets-node-build b/plugins/woocommerce/changelog/dev-classic-assets-node-build
new file mode 100644
index 00000000000..c5a1d581fd6
--- /dev/null
+++ b/plugins/woocommerce/changelog/dev-classic-assets-node-build
@@ -0,0 +1,4 @@
+Significance: patch
+Type: dev
+
+Replace the Grunt pipeline in @woocommerce/classic-assets with a small node build script that calls the same libraries directly. Built assets are byte-identical; full builds and watch-mode rebuilds are faster.
diff --git a/plugins/woocommerce/client/legacy/Gruntfile.js b/plugins/woocommerce/client/legacy/Gruntfile.js
deleted file mode 100644
index a0035f5e56a..00000000000
--- a/plugins/woocommerce/client/legacy/Gruntfile.js
+++ /dev/null
@@ -1,295 +0,0 @@
-module.exports = function ( grunt ) {
-	'use strict';
-	var sass = require( 'sass' );
-
-	grunt.initConfig( {
-		// Setting folder templates.
-		dirs: {
-			css: 'css',
-			// Write directly to the plugin's `assets/css` so PHP enqueues
-			// from the final location with no intermediate rsync step.
-			cssDest: '../../assets/css',
-			fonts: 'assets/fonts',
-			images: 'assets/images',
-			js: 'js',
-			// See `cssDest`. The plugin enqueues from `assets/js`.
-			jsDest: '../../assets/js',
-		},
-
-
-		// Sass linting with Stylelint.
-		stylelint: {
-			options: {
-				configFile: '.stylelintrc',
-			},
-			all: [ '<%= dirs.css %>/*.scss', '!<%= dirs.css %>/select2.scss' ],
-		},
-
-		// Minify .js files.
-		uglify: {
-			options: {
-				ie8: true,
-				parse: {
-					strict: false,
-				},
-				output: {
-					comments: /@license|@preserve|^!/,
-				},
-			},
-			js_assets: {
-				files: [
-					{
-						expand: true,
-						cwd: '<%= dirs.jsDest %>/',
-						src: [ '**/*.js', '!**/*.min.js' ],
-						extDot: 'last',
-						dest: '<%= dirs.jsDest %>',
-						ext: '.min.js',
-					},
-				],
-			},
-		},
-
-		// Compile all .scss files.
-		sass: {
-			compile: {
-				options: {
-					implementation: sass,
-					sourceMap: false,
-				},
-				files: [
-					{
-						expand: true,
-						cwd: '<%= dirs.css %>/',
-						src: [ '*.scss' ],
-						dest: '<%= dirs.css %>/',
-						ext: '.css',
-					},
-				],
-			},
-		},
-
-		// Generate RTL .css files.
-		rtlcss: {
-			woocommerce: {
-				expand: true,
-				cwd: '<%= dirs.css %>',
-				src: [ '*.css', '!select2.css', '!*-rtl.css' ],
-				dest: '<%= dirs.css %>/',
-				ext: '-rtl.css',
-			},
-		},
-
-		// Minify all .css files.
-		cssmin: {
-			minify: {
-				files: [
-					{
-						expand: true,
-						cwd: '<%= dirs.css %>/',
-						src: [ '*.css' ],
-						dest: '<%= dirs.css %>/',
-						ext: '.css',
-					},
-					{
-						expand: true,
-						cwd: '<%= dirs.css %>/photoswipe/',
-						src: [ '*.css', '!*.min.css' ],
-						dest: '<%= dirs.css %>/photoswipe/',
-						ext: '.min.css',
-					},
-					{
-						expand: true,
-						cwd: '<%= dirs.css %>/photoswipe/default-skin/',
-						src: [ '*.css', '!*.min.css' ],
-						dest: '<%= dirs.css %>/photoswipe/default-skin/',
-						ext: '.min.css',
-					},
-				],
-			},
-		},
-
-		concat: {
-			// Concatenate select2.css onto the admin.css files.
-			css: {
-				files: {
-					'<%= dirs.css %>/admin.css': [
-						'<%= dirs.css %>/select2.css',
-						'<%= dirs.css %>/admin.css',
-					],
-					'<%= dirs.css %>/admin-rtl.css': [
-						'<%= dirs.css %>/select2.css',
-						'<%= dirs.css %>/admin-rtl.css',
-					],
-				},
-			},
-			// Concatenate number validation and maybe modify decimal utility functions with shipping zone methods
-			js: {
-				files: {
-					'<%= dirs.jsDest %>/admin/wc-shipping-zone-methods.js': [
-						'<%= dirs.js %>/admin/utils/number-validation.js',
-						'<%= dirs.js %>/admin/utils/maybe-modify-decimal.js',
-						'<%= dirs.jsDest %>/admin/wc-shipping-zone-methods.js',
-					],
-				},
-			},
-		},
-
-		// The css tasks process files in place, so move them
-		// to their final location afterwards.
-		move: {
-			css: {
-				files: [
-					{
-						src: '<%= dirs.css %>/*.css',
-						dest: '<%= dirs.cssDest %>/',
-					},
-					{
-						src: '<%= dirs.css %>/photoswipe/*.min.css',
-						dest: '<%= dirs.cssDest %>/photoswipe/',
-					},
-					{
-						src:
-							'<%= dirs.css %>/photoswipe/default-skin/*.min.css',
-						dest: '<%= dirs.cssDest %>/photoswipe/default-skin/',
-					},
-				],
-			},
-		},
-		copy: {
-			css: {
-				files: [
-					{
-						cwd: '<%= dirs.css %>',
-						expand: true,
-						src: 'photoswipe/**',
-						dest: '<%= dirs.cssDest %>/',
-					},
-					{
-						cwd: '<%= dirs.css %>',
-						expand: true,
-						src: 'jquery-ui/**',
-						dest: '<%= dirs.cssDest %>/',
-					},
-					{
-						cwd: '<%= dirs.css %>',
-						expand: true,
-						src: '*.scss',
-						dest: '<%= dirs.cssDest %>/',
-					},
-				],
-			},
-			js: {
-				files: [
-					{
-						cwd: '<%= dirs.js %>/',
-						expand: true,
-						src: [ '**', '!admin/utils/**', '!**/test/**' ],
-						dest: '<%= dirs.jsDest %>/',
-					},
-					{
-						expand: true,
-						flatten: true,
-						src: ['node_modules/sourcebuster/dist/sourcebuster*','node_modules/sourcebuster/LICENSE'],
-						dest: '<%= dirs.jsDest %>/sourcebuster/',
-					},
-				],
-			},
-		},
-	} );
-
-	// Load NPM tasks to be used here.
-	grunt.loadNpmTasks( 'grunt-sass' );
-	grunt.loadNpmTasks( 'grunt-rtlcss' );
-	grunt.loadNpmTasks( 'grunt-stylelint' );
-	grunt.loadNpmTasks( 'grunt-contrib-uglify-es' );
-	grunt.loadNpmTasks( 'grunt-contrib-cssmin' );
-	grunt.loadNpmTasks( 'grunt-contrib-concat' );
-	grunt.loadNpmTasks( 'grunt-contrib-copy' );
-	grunt.loadNpmTasks( 'grunt-newer' );
-	grunt.loadNpmTasks( 'grunt-move' );
-
-	// Register tasks.
-	grunt.registerTask( 'default', [ 'js', 'css' ] );
-
-	grunt.registerTask( 'js', [ 'copy:js', 'concat:js', 'uglify:js_assets' ] );
-
-	grunt.registerTask( 'css', [
-		'sass',
-		'rtlcss',
-		'cssmin',
-		'concat:css',
-		'move:css',
-		'copy:css',
-	] );
-
-	grunt.registerTask( 'assets', [ 'js', 'css' ] );
-
-	grunt.registerTask( 'e2e-build', [ 'uglify:js_assets', 'css' ] );
-
-	// Only an alias to 'default' task.
-	grunt.registerTask( 'dev', [ 'default' ] );
-
-	grunt.registerTask(
-		'watch',
-		'Rebuild js/css assets when their sources change.',
-		function () {
-			const chokidar = require( 'chokidar' );
-			this.async(); // Keep this task alive until SIGINT.
-
-			let running = false;
-			const pending = new Set();
-			const runQueued = ( tasks ) => {
-				tasks.forEach( ( task ) => pending.add( task ) );
-				if ( running ) {
-					return;
-				}
-				running = true;
-				const next = [ ...pending ];
-				pending.clear();
-				grunt.util.spawn(
-					{
-						grunt: true,
-						args: next,
-						opts: { stdio: 'inherit' },
-					},
-					() => {
-						running = false;
-						if ( pending.size > 0 ) {
-							// Drain the queue.
-							runQueued( [] );
-						}
-					}
-				);
-			};
-
-			chokidar
-				.watch( [ 'css/*.scss' ], { ignoreInitial: true } )
-				.on( 'all', () =>
-					runQueued( [
-						'sass',
-						'rtlcss',
-						'cssmin',
-						'concat:css',
-						'move:css',
-						'copy:css',
-					] )
-				);
-
-			chokidar
-				.watch( [ 'js/**/*.js', 'Gruntfile.js' ], {
-					ignoreInitial: true,
-					ignored: '**/*.min.js',
-				} )
-				.on( 'all', () =>
-					runQueued( [
-						'copy:js',
-						'concat:js',
-						'newer:uglify',
-					] )
-				);
-
-			grunt.log.writeln( 'Watching css/ and js/ for changes...' );
-		}
-	);
-};
diff --git a/plugins/woocommerce/client/legacy/build.js b/plugins/woocommerce/client/legacy/build.js
new file mode 100644
index 00000000000..b7e382a6b27
--- /dev/null
+++ b/plugins/woocommerce/client/legacy/build.js
@@ -0,0 +1,474 @@
+#!/usr/bin/env node
+/**
+ * Build script for the classic (non-React) WooCommerce assets.
+ *
+ *   js:  copy sources into ../../assets/js, concat the admin utils into
+ *        wc-shipping-zone-methods.js, minify everything to .min.js (uglify-es).
+ *   css: compile Sass (sass-embedded), generate RTL variants (rtlcss),
+ *        minify in place (clean-css), prepend select2.css onto admin(-rtl).css,
+ *        then move/copy the results into ../../assets/css.
+ *
+ * The library versions (pinned exactly in package.json) and the options
+ * passed to them are chosen so the built files are byte-identical to the
+ * output of the Grunt pipeline this script replaced. Changing either
+ * changes the shipped assets, so treat both as part of the contract.
+ *
+ * Usage: node build.js [js|css|watch]  (no argument builds js and css)
+ */
+
+'use strict';
+
+const fs = require( 'fs' );
+const os = require( 'os' );
+const path = require( 'path' );
+const {
+	Worker,
+	isMainThread,
+	parentPort,
+} = require( 'worker_threads' );
+
+const CSS_SRC = path.join( __dirname, 'css' );
+const JS_SRC = path.join( __dirname, 'js' );
+const CSS_DEST = path.join( __dirname, '..', '..', 'assets', 'css' );
+const JS_DEST = path.join( __dirname, '..', '..', 'assets', 'js' );
+
+/* ------------------------------------------------------------------ */
+/* Small fs helpers                                                    */
+/* ------------------------------------------------------------------ */
+
+// Read a text file, stripping a UTF-8 BOM so it can't leak into
+// concatenated or minified output.
+function read( file ) {
+	let content = fs.readFileSync( file, 'utf8' );
+	if ( content.charCodeAt( 0 ) === 0xfeff ) {
+		content = content.slice( 1 );
+	}
+	return content;
+}
+
+function write( file, content ) {
+	fs.mkdirSync( path.dirname( file ), { recursive: true } );
+	fs.writeFileSync( file, content );
+}
+
+function copyFile( src, dest ) {
+	fs.mkdirSync( path.dirname( dest ), { recursive: true } );
+	fs.copyFileSync( src, dest );
+}
+
+function moveFile( src, dest ) {
+	fs.mkdirSync( path.dirname( dest ), { recursive: true } );
+	fs.renameSync( src, dest );
+}
+
+// List plain files directly inside dir (no recursion, no dotfiles).
+function listFiles( dir ) {
+	if ( ! fs.existsSync( dir ) ) {
+		return [];
+	}
+	return fs
+		.readdirSync( dir, { withFileTypes: true } )
+		.filter( ( e ) => e.isFile() && ! e.name.startsWith( '.' ) )
+		.map( ( e ) => e.name )
+		.sort();
+}
+
+// List files under dir recursively, as paths relative to dir (no dotfiles).
+function walk( dir, prefix = '' ) {
+	if ( ! fs.existsSync( dir ) ) {
+		return [];
+	}
+	const out = [];
+	for ( const entry of fs.readdirSync( dir, { withFileTypes: true } ) ) {
+		if ( entry.name.startsWith( '.' ) ) {
+			continue;
+		}
+		const rel = prefix ? prefix + '/' + entry.name : entry.name;
+		if ( entry.isDirectory() ) {
+			out.push( ...walk( path.join( dir, entry.name ), rel ) );
+		} else if ( entry.isFile() ) {
+			out.push( rel );
+		}
+	}
+	return out.sort();
+}
+
+/* ------------------------------------------------------------------ */
+/* JS pipeline                                                         */
+/* ------------------------------------------------------------------ */
+
+// True when dest is missing or older than src, so unchanged files can
+// be skipped on watch-mode rebuilds.
+function isStale( src, dest ) {
+	return (
+		! fs.existsSync( dest ) ||
+		fs.statSync( dest ).mtimeMs < fs.statSync( src ).mtimeMs
+	);
+}
+
+// Copy js/** (minus the concat-only utils and tests) into assets/js,
+// plus the sourcebuster dist files. When stale === true, only files
+// newer than their copy are written.
+function copyJs( { stale = false } = {} ) {
+	const copy = ( src, dest ) => {
+		if ( ! stale || isStale( src, dest ) ) {
+			copyFile( src, dest );
+		}
+	};
+
+	for ( const rel of walk( JS_SRC ) ) {
+		const dirs = rel.split( '/' ).slice( 0, -1 );
+		if ( rel.startsWith( 'admin/utils/' ) || dirs.includes( 'test' ) ) {
+			continue;
+		}
+		copy( path.join( JS_SRC, rel ), path.join( JS_DEST, rel ) );
+	}
+
+	const sourcebuster = path.join( __dirname, 'node_modules', 'sourcebuster' );
+	for ( const name of listFiles( path.join( sourcebuster, 'dist' ) ) ) {
+		if ( name.startsWith( 'sourcebuster' ) ) {
+			copy(
+				path.join( sourcebuster, 'dist', name ),
+				path.join( JS_DEST, 'sourcebuster', name )
+			);
+		}
+	}
+	copy(
+		path.join( sourcebuster, 'LICENSE' ),
+		path.join( JS_DEST, 'sourcebuster', 'LICENSE' )
+	);
+}
+
+// Prepend the number validation and maybe-modify-decimal utils onto
+// wc-shipping-zone-methods.js. Always rebuilt from the source, so its
+// .min.js is re-minified on every watch pass (cheap: one small file).
+function concatJs() {
+	const dest = path.join( JS_DEST, 'admin', 'wc-shipping-zone-methods.js' );
+	copyFile(
+		path.join( JS_SRC, 'admin', 'wc-shipping-zone-methods.js' ),
+		dest
+	);
+	const parts = [
+		path.join( JS_SRC, 'admin', 'utils', 'number-validation.js' ),
+		path.join( JS_SRC, 'admin', 'utils', 'maybe-modify-decimal.js' ),
+		dest,
+	];
+	write( dest, parts.map( read ).join( '\n' ) );
+}
+
+function minifyJsFile( src, dest ) {
+	const uglify = require( 'uglify-es' );
+	const result = uglify.minify(
+		{ [ path.basename( src ) ]: read( src ) },
+		{
+			compress: {},
+			ie8: true,
+			mangle: { reserved: [] },
+			output: { comments: /@license|@preserve|^!/ },
+			parse: { strict: false },
+		}
+	);
+	if ( result.error ) {
+		throw new Error( `Minifying ${ src } failed: ${ result.error }` );
+	}
+	write( dest, result.code );
+}
+
+// Minification is CPU-bound and per-file independent, so batches are
+// spread over a pool of worker threads (each worker runs this file
+// with isMainThread === false and minifies the jobs it is sent).
+function minifyJsParallel( jobs ) {
+	const poolSize = Math.min(
+		jobs.length,
+		Math.max( 1, os.availableParallelism() - 1 )
+	);
+	const queue = [ ...jobs ];
+	return Promise.all(
+		Array.from( { length: poolSize }, () => {
+			return new Promise( ( resolve, reject ) => {
+				const worker = new Worker( __filename );
+				const next = () => {
+					const job = queue.shift();
+					if ( ! job ) {
+						worker.terminate().then( resolve, reject );
+						return;
+					}
+					worker.postMessage( job );
+				};
+				worker.on( 'message', next );
+				worker.on( 'error', reject );
+				next();
+			} );
+		} )
+	);
+}
+
+// Minify every non-minified .js in assets/js to a .min.js sibling.
+// When stale === true, skip files whose .min.js is already up to date.
+async function minifyJs( { stale = false } = {} ) {
+	const jobs = [];
+	for ( const rel of walk( JS_DEST ) ) {
+		if ( ! rel.endsWith( '.js' ) || rel.endsWith( '.min.js' ) ) {
+			continue;
+		}
+		const src = path.join( JS_DEST, rel );
+		const dest = src.replace( /\.js$/, '.min.js' );
+		if ( stale && ! isStale( src, dest ) ) {
+			continue;
+		}
+		jobs.push( { src, dest } );
+	}
+	// Worker startup costs ~50ms each, so small batches (watch mode
+	// rebuilds) are faster minified in-process.
+	if ( jobs.length < 4 ) {
+		jobs.forEach( ( { src, dest } ) => minifyJsFile( src, dest ) );
+	} else {
+		await minifyJsParallel( jobs );
+	}
+}
+
+async function buildJs( options = {} ) {
+	const started = Date.now();
+	copyJs( options );
+	concatJs();
+	await minifyJs( options );
+	console.log( `js built in ${ Date.now() - started }ms` );
+}
+
+/* ------------------------------------------------------------------ */
+/* CSS pipeline                                                        */
+/* ------------------------------------------------------------------ */
+
+// Compile every non-partial css/*.scss to css/*.css.
+async function compileSass() {
+	const sass = require( 'sass-embedded' );
+	await Promise.all(
+		listFiles( CSS_SRC )
+			.filter( ( f ) => f.endsWith( '.scss' ) && ! f.startsWith( '_' ) )
+			.map( async ( f ) => {
+				const result = await sass.compileAsync(
+					path.join( CSS_SRC, f ),
+					{ sourceMap: false }
+				);
+				write(
+					path.join( CSS_SRC, f.replace( /\.scss$/, '.css' ) ),
+					result.css
+				);
+			} )
+	);
+}
+
+// Generate css/*-rtl.css for every compiled stylesheet except select2.css.
+function generateRtl() {
+	const rtlcss = require( 'rtlcss' );
+	const processor = rtlcss.configure( {
+		options: {
+			autoRename: false,
+			autoRenameStrict: false,
+			blacklist: {},
+			clean: true,
+			greedy: false,
+			processUrls: false,
+			stringMap: [],
+		},
+		plugins: [],
+	} );
+	for ( const f of listFiles( CSS_SRC ) ) {
+		if (
+			! f.endsWith( '.css' ) ||
+			f === 'select2.css' ||
+			f.endsWith( '-rtl.css' )
+		) {
+			continue;
+		}
+		const src = path.join( CSS_SRC, f );
+		const dest = path.join(
+			CSS_SRC,
+			f.replace( /\.css$/, '-rtl.css' )
+		);
+		write( dest, processor.process( read( src ), { map: false, from: src, to: dest } ).css );
+	}
+}
+
+// Minify one stylesheet with clean-css. The file is passed by path:
+// string input would be treated differently (no source directory context).
+function minifyCssFile( src, dest ) {
+	const CleanCSS = require( 'clean-css' );
+	const result = new CleanCSS( { sourceMap: false } ).minify( [ src ] );
+	if ( result.errors.length ) {
+		throw new Error( `Minifying ${ src } failed: ${ result.errors }` );
+	}
+	result.warnings.forEach( ( warning ) =>
+		console.warn( `clean-css [${ path.basename( src ) }]: ${ warning }` )
+	);
+	write( dest, result.styles );
+}
+
+// Minify css/*.css in place, and the photoswipe stylesheets to .min.css.
+function minifyCss() {
+	for ( const f of listFiles( CSS_SRC ) ) {
+		if ( f.endsWith( '.css' ) ) {
+			const file = path.join( CSS_SRC, f );
+			minifyCssFile( file, file );
+		}
+	}
+	for ( const dir of [ 'photoswipe', 'photoswipe/default-skin' ] ) {
+		for ( const f of listFiles( path.join( CSS_SRC, dir ) ) ) {
+			if ( f.endsWith( '.css' ) && ! f.endsWith( '.min.css' ) ) {
+				minifyCssFile(
+					path.join( CSS_SRC, dir, f ),
+					path.join(
+						CSS_SRC,
+						dir,
+						f.replace( /\.css$/, '.min.css' )
+					)
+				);
+			}
+		}
+	}
+}
+
+// Prepend select2.css onto admin.css and admin-rtl.css.
+function concatCss() {
+	for ( const admin of [ 'admin.css', 'admin-rtl.css' ] ) {
+		const dest = path.join( CSS_SRC, admin );
+		write(
+			dest,
+			[ path.join( CSS_SRC, 'select2.css' ), dest ]
+				.map( read )
+				.join( '\n' )
+		);
+	}
+}
+
+// The css steps above process files in place inside css/, so move the
+// results to assets/css and copy the static sources alongside them.
+function moveAndCopyCss() {
+	for ( const f of listFiles( CSS_SRC ) ) {
+		if ( f.endsWith( '.css' ) ) {
+			moveFile( path.join( CSS_SRC, f ), path.join( CSS_DEST, f ) );
+		}
+	}
+	for ( const dir of [ 'photoswipe', 'photoswipe/default-skin' ] ) {
+		for ( const f of listFiles( path.join( CSS_SRC, dir ) ) ) {
+			if ( f.endsWith( '.min.css' ) ) {
+				moveFile(
+					path.join( CSS_SRC, dir, f ),
+					path.join( CSS_DEST, dir, f )
+				);
+			}
+		}
+	}
+	for ( const dir of [ 'photoswipe', 'jquery-ui' ] ) {
+		for ( const rel of walk( path.join( CSS_SRC, dir ) ) ) {
+			copyFile(
+				path.join( CSS_SRC, dir, rel ),
+				path.join( CSS_DEST, dir, rel )
+			);
+		}
+	}
+	for ( const f of listFiles( CSS_SRC ) ) {
+		if ( f.endsWith( '.scss' ) ) {
+			copyFile( path.join( CSS_SRC, f ), path.join( CSS_DEST, f ) );
+		}
+	}
+}
+
+async function buildCss() {
+	const started = Date.now();
+	await compileSass();
+	generateRtl();
+	minifyCss();
+	concatCss();
+	moveAndCopyCss();
+	console.log( `css built in ${ Date.now() - started }ms` );
+}
+
+/* ------------------------------------------------------------------ */
+/* Watch mode                                                          */
+/* ------------------------------------------------------------------ */
+
+function watch() {
+	const chokidar = require( 'chokidar' );
+
+	let running = false;
+	const pending = new Set();
+	const runQueued = async ( task ) => {
+		if ( task ) {
+			pending.add( task );
+		}
+		if ( running || pending.size === 0 ) {
+			return;
+		}
+		running = true;
+		const next = [ ...pending ];
+		pending.clear();
+		for ( const t of next ) {
+			try {
+				if ( t === 'css' ) {
+					await buildCss();
+				} else {
+					// Re-minify only files whose .min.js is out of date.
+					await buildJs( { stale: true } );
+				}
+			} catch ( error ) {
+				console.error( error );
+			}
+		}
+		running = false;
+		// Drain anything queued while we were building.
+		runQueued();
+	};
+
+	chokidar
+		.watch( [ 'css/*.scss' ], { cwd: __dirname, ignoreInitial: true } )
+		.on( 'all', () => runQueued( 'css' ) );
+
+	chokidar
+		.watch( [ 'js/**/*.js' ], {
+			cwd: __dirname,
+			ignoreInitial: true,
+			ignored: '**/*.min.js',
+		} )
+		.on( 'all', () => runQueued( 'js' ) );
+
+	console.log( 'Watching css/ and js/ for changes...' );
+}
+
+/* ------------------------------------------------------------------ */
+/* Entry point                                                         */
+/* ------------------------------------------------------------------ */
+
+async function main() {
+	const task = process.argv[ 2 ] || 'all';
+	switch ( task ) {
+		case 'js':
+			await buildJs();
+			break;
+		case 'css':
+			await buildCss();
+			break;
+		case 'all':
+			await Promise.all( [ buildJs(), buildCss() ] );
+			break;
+		case 'watch':
+			watch();
+			break;
+		default:
+			console.error( `Unknown task: ${ task }` );
+			process.exitCode = 1;
+	}
+}
+
+if ( isMainThread ) {
+	main().catch( ( error ) => {
+		console.error( error );
+		process.exitCode = 1;
+	} );
+} else {
+	// Worker thread: minify the { src, dest } jobs the pool sends over.
+	parentPort.on( 'message', ( { src, dest } ) => {
+		minifyJsFile( src, dest );
+		parentPort.postMessage( 'done' );
+	} );
+}
diff --git a/plugins/woocommerce/client/legacy/package.json b/plugins/woocommerce/client/legacy/package.json
index 4b1548c5bb5..fb3f92f8747 100644
--- a/plugins/woocommerce/client/legacy/package.json
+++ b/plugins/woocommerce/client/legacy/package.json
@@ -4,21 +4,20 @@
 	"version": "1.0.0",
 	"author": "Automattic",
 	"license": "GPL-2.0-or-later",
-	"main": "Gruntfile.js",
 	"scripts": {
 		"build": "pnpm build:project",
 		"build:project": "pnpm --stream '/^build:project:.*$/'",
-		"build:project:js": "grunt js",
-		"build:project:css": "grunt css",
+		"build:project:js": "node ./build.js js",
+		"build:project:css": "node ./build.js css",
 		"lint": "pnpm --if-present '/^lint:lang:.*$/'",
 		"lint:fix": "pnpm --if-present '/^lint:fix:lang:.*$/'",
-		"lint:lang:js": "eslint 'js/admin/*.js' 'js/frontend/*.js'",
-		"lint:lang:css": "grunt stylelint",
-		"lint:fix:lang:js": "eslint 'js/admin/*.js' 'js/frontend/*.js' --fix",
-		"lint:fix:lang:css": "grunt stylelint --fix",
+		"lint:lang:js": "eslint \"js/admin/*.js\" \"js/frontend/*.js\" build.js",
+		"lint:lang:css": "stylelint \"css/*.scss\" \"!css/select2.scss\" --allow-empty-input",
+		"lint:fix:lang:js": "eslint \"js/admin/*.js\" \"js/frontend/*.js\" build.js --fix",
+		"lint:fix:lang:css": "stylelint \"css/*.scss\" \"!css/select2.scss\" --allow-empty-input --fix",
 		"watch:build": "pnpm watch:build:project",
 		"watch:build:project": "pnpm --stream '/^watch:build:project:.*$/'",
-		"watch:build:project:assets": "grunt watch",
+		"watch:build:project:assets": "node ./build.js watch",
 		"test:js": "wp-scripts test-unit-js --config jest.config.json"
 	},
 	"devDependencies": {
@@ -26,21 +25,14 @@
 		"@wordpress/scripts": "32.6.0",
 		"@wordpress/stylelint-config": "^21.36.0",
 		"chokidar": "^3.6.0",
+		"clean-css": "5.3.3",
 		"eslint": "^10.0.0",
 		"globals": "^16.5.0",
-		"grunt": "1.6.3",
-		"grunt-contrib-concat": "1.0.1",
-		"grunt-contrib-copy": "1.0.0",
-		"grunt-contrib-cssmin": "4.0.0",
-		"grunt-contrib-uglify-es": "^3.3.0",
-		"grunt-move": "1.0.3",
-		"grunt-newer": "1.3.0",
-		"grunt-rtlcss": "2.0.2",
-		"grunt-sass": "3.1.0",
-		"grunt-stylelint": "0.16.0",
 		"jest-fixed-jsdom": "^0.0.10",
-		"sass": "^1.69.5",
-		"stylelint": "^14.16.1"
+		"rtlcss": "2.6.2",
+		"sass-embedded": "1.69.5",
+		"stylelint": "^14.16.1",
+		"uglify-es": "3.3.9"
 	},
 	"dependencies": {
 		"sourcebuster": "github:woocommerce/sourcebuster-js#d7f4616d5a17e17db925ca1842457f309379d861"
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 855134b1651..3e1be5857f9 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -3768,58 +3768,37 @@ importers:
         version: 24.12.2
       '@wordpress/scripts':
         specifier: 32.6.0
-        version: 32.6.0(@playwright/test@1.61.1)(@swc/core@1.15.24)(@types/node@24.12.2)(@types/react@18.3.28)(@types/webpack@4.41.40)(@wordpress/env@11.9.0(@types/node@24.12.2))(file-loader@6.2.0(webpack@5.97.1))(jiti@2.6.1)(node-notifier@8.0.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass-embedded@1.100.0)(stylelint-scss@6.14.0(stylelint@14.16.1))(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))(type-fest@4.41.0)(typescript@5.7.3)(webpack-hot-middleware@2.26.1)
+        version: 32.6.0(@playwright/test@1.61.1)(@swc/core@1.15.24)(@types/node@24.12.2)(@types/react@18.3.28)(@types/webpack@4.41.40)(@wordpress/env@11.9.0(@types/node@24.12.2))(file-loader@6.2.0(webpack@5.97.1))(jiti@2.6.1)(node-notifier@8.0.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass-embedded@1.69.5)(stylelint-scss@6.14.0(stylelint@14.16.1))(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))(type-fest@4.41.0)(typescript@5.7.3)(webpack-hot-middleware@2.26.1)
       '@wordpress/stylelint-config':
         specifier: ^21.36.0
         version: 21.41.0(postcss@8.5.26)(stylelint@14.16.1)
       chokidar:
         specifier: ^3.6.0
         version: 3.6.0
+      clean-css:
+        specifier: 5.3.3
+        version: 5.3.3
       eslint:
         specifier: ^10.0.0
         version: 10.7.0(jiti@2.6.1)
       globals:
         specifier: ^16.5.0
         version: 16.5.0
-      grunt:
-        specifier: 1.6.3
-        version: 1.6.3
-      grunt-contrib-concat:
-        specifier: 1.0.1
-        version: 1.0.1(grunt@1.6.3)
-      grunt-contrib-copy:
-        specifier: 1.0.0
-        version: 1.0.0
-      grunt-contrib-cssmin:
-        specifier: 4.0.0
-        version: 4.0.0
-      grunt-contrib-uglify-es:
-        specifier: ^3.3.0
-        version: 3.3.0
-      grunt-move:
-        specifier: 1.0.3
-        version: 1.0.3
-      grunt-newer:
-        specifier: 1.3.0
-        version: 1.3.0(grunt@1.6.3)
-      grunt-rtlcss:
-        specifier: 2.0.2
-        version: 2.0.2
-      grunt-sass:
-        specifier: 3.1.0
-        version: 3.1.0(grunt@1.6.3)
-      grunt-stylelint:
-        specifier: 0.16.0
-        version: 0.16.0(stylelint@14.16.1)
       jest-fixed-jsdom:
         specifier: ^0.0.10
         version: 0.0.10(jest-environment-jsdom@30.4.1)
-      sass:
+      rtlcss:
+        specifier: 2.6.2
+        version: 2.6.2
+      sass-embedded:
         specifier: 1.69.5
         version: 1.69.5
       stylelint:
         specifier: ^14.16.1
         version: 14.16.1
+      uglify-es:
+        specifier: 3.3.9
+        version: 3.3.9

   tools/code-analyzer:
     dependencies:
@@ -5349,6 +5328,9 @@ packages:
   '@bcoe/v8-coverage@0.2.3':
     resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}

+  '@bufbuild/protobuf@1.10.1':
+    resolution: {integrity: sha512-wJ8ReQbHxsAfXhrf9ixl0aYbZorRuOWpBNzm8pL8ftmSxQx/wnJD5Eg861NwJU/czy2VXFIebCeZnZrI9rktIQ==, tarball: https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.10.1.tgz}
+
   '@bufbuild/protobuf@2.14.0':
     resolution: {integrity: sha512-C3UGsiCwSprE2NKIIFA3hCDlpXTMCAXRZuEVp88L1GY36Y41+rYL5fryE+nOFhp4p4JPQvdV8PQ4DWgHgeTE+w==, tarball: https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.14.0.tgz}

@@ -5368,7 +5350,7 @@ packages:
     resolution: {integrity: sha512-eiFgzCbIneyMlLOmNG4g9xzF7Hv3Mga4LjxjcSC/ues6VYq2+gUbQI8JqNuw/ZM8tJIeIaBGpswAsqV2V7ApgA==}

   '@choojs/findup@0.2.1':
-    resolution: {integrity: sha512-YstAqNb0MCN8PjdLCDfRsBcGVRN41f3vgLvaI0IrIcBp4AqILRSS0DeWNGkicC+f/zRIPJLc+9RURVSepwvfBw==}
+    resolution: {integrity: sha512-YstAqNb0MCN8PjdLCDfRsBcGVRN41f3vgLvaI0IrIcBp4AqILRSS0DeWNGkicC+f/zRIPJLc+9RURVSepwvfBw==, tarball: https://registry.npmjs.org/@choojs/findup/-/findup-0.2.1.tgz}
     hasBin: true

   '@commander-js/extra-typings@0.1.0':
@@ -10354,9 +10336,6 @@ packages:
     resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
     deprecated: Use your platform's native atob() and btoa() methods instead

-  abbrev@1.1.1:
-    resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
-
   abbrev@2.0.0:
     resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==}
     engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
@@ -10517,10 +10496,6 @@ packages:
     resolution: {integrity: sha512-q5i8bFLg2wDfsuR56c1NzlJFPzVD+9mxhDrhqOGigEFa87OZHlF+9dWeGWzVTP/0ECiA/JUGzfzRr2t3eYORRw==}
     engines: {node: '>=0.10.0'}

-  ansi-regex@2.1.1:
-    resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==}
-    engines: {node: '>=0.10.0'}
-
   ansi-regex@3.0.1:
     resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==}
     engines: {node: '>=4'}
@@ -10537,12 +10512,8 @@ packages:
     resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==}
     engines: {node: '>=12'}

-  ansi-styles@2.2.1:
-    resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==}
-    engines: {node: '>=0.10.0'}
-
   ansi-styles@3.2.1:
-    resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
+    resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, tarball: https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz}
     engines: {node: '>=4'}

   ansi-styles@4.3.0:
@@ -10550,11 +10521,11 @@ packages:
     engines: {node: '>=8'}

   ansi-styles@5.2.0:
-    resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
+    resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==, tarball: https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz}
     engines: {node: '>=10'}

   ansi-styles@6.2.3:
-    resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
+    resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==, tarball: https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz}
     engines: {node: '>=12'}

   ansicolors@0.3.2:
@@ -10618,14 +10589,6 @@ packages:
     resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==}
     engines: {node: '>= 0.4'}

-  array-each@1.0.1:
-    resolution: {integrity: sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==}
-    engines: {node: '>=0.10.0'}
-
-  array-find-index@1.0.2:
-    resolution: {integrity: sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==}
-    engines: {node: '>=0.10.0'}
-
   array-flatten@1.1.1:
     resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}

@@ -10633,10 +10596,6 @@ packages:
     resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==}
     engines: {node: '>= 0.4'}

-  array-slice@1.1.0:
-    resolution: {integrity: sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==}
-    engines: {node: '>=0.10.0'}
-
   array-union@1.0.2:
     resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==}
     engines: {node: '>=0.10.0'}
@@ -10732,12 +10691,6 @@ packages:
   async-retry@1.3.3:
     resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==}

-  async@1.5.2:
-    resolution: {integrity: sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==}
-
-  async@3.1.1:
-    resolution: {integrity: sha512-X5Dj8hK1pJNC2Wzo2Rcp9FBVdJMGRR/S7V+lH46s8GVFhtbo5O4Le5GECCF/8PISVdkUA6mMPvgz7qTTD1rf1g==}
-
   async@3.2.6:
     resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}

@@ -11017,9 +10970,6 @@ packages:
   browser-filesaver@1.1.1:
     resolution: {integrity: sha512-UI4ps3bE/YXvGKlL7BoITvw8bE/SOt7YnvZeCyME7votTLxsDQ0ES0lvQdEWZMvO9aF5/66h+a3PGWn1KOblBA==}

-  browserify-zlib@0.1.4:
-    resolution: {integrity: sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==}
-
   browserslist@4.19.3:
     resolution: {integrity: sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg==}
     engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
@@ -11051,6 +11001,9 @@ packages:
   buffer-alloc@1.2.0:
     resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==}

+  buffer-builder@0.2.0:
+    resolution: {integrity: sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==, tarball: https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz}
+
   buffer-crc32@0.2.13:
     resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}

@@ -11124,18 +11077,10 @@ packages:
   camel-case@4.1.2:
     resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==}

-  camelcase-keys@2.1.0:
-    resolution: {integrity: sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==}
-    engines: {node: '>=0.10.0'}
-
   camelcase-keys@6.2.2:
     resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==}
     engines: {node: '>=8'}

-  camelcase@2.1.1:
-    resolution: {integrity: sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==}
-    engines: {node: '>=0.10.0'}
-
   camelcase@4.1.0:
     resolution: {integrity: sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==}
     engines: {node: '>=4'}
@@ -11186,16 +11131,12 @@ packages:
     resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==, tarball: https://registry.npmjs.org/chai/-/chai-5.3.3.tgz}
     engines: {node: '>=18'}

-  chalk@1.1.3:
-    resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==}
-    engines: {node: '>=0.10.0'}
-
   chalk@2.4.2:
-    resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
+    resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, tarball: https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz}
     engines: {node: '>=4'}

   chalk@3.0.0:
-    resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==}
+    resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==, tarball: https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz}
     engines: {node: '>=8'}

   chalk@4.1.2:
@@ -11292,7 +11233,7 @@ packages:
     resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==}

   clean-css@5.3.3:
-    resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==}
+    resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==, tarball: https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz}
     engines: {node: '>= 10.0'}

   clean-git-ref@2.0.1:
@@ -11404,17 +11345,17 @@ packages:
     engines: {node: '>=0.10.0'}

   color-convert@1.9.3:
-    resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
+    resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, tarball: https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz}

   color-convert@2.0.1:
     resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
     engines: {node: '>=7.0.0'}

   color-name@1.1.3:
-    resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
+    resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==, tarball: https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz}

   color-name@1.1.4:
-    resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+    resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, tarball: https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz}

   color-string@0.3.0:
     resolution: {integrity: sha512-sz29j1bmSDfoAxKIEU6zwoIZXN6BrFbAMIhfYCNyiZXBDuU/aiHlN84lp/xDzL2ubyFhLDobHIlU1X70XRrMDA==}
@@ -11441,10 +11382,6 @@ packages:
     resolution: {integrity: sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==}
     engines: {node: '>=0.1.90'}

-  colors@1.1.2:
-    resolution: {integrity: sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w==}
-    engines: {node: '>=0.1.90'}
-
   columnify@1.5.1:
     resolution: {integrity: sha512-JUsujUm6cRwWegK9l8WK4ykTAyqLYzzuJN82TTxxgGyDpSgjdx0Mzs9tWGaU8UIDupVt70dbzqUGBxYtNOOTUw==}

@@ -11460,7 +11397,7 @@ packages:
     engines: {node: '>=14'}

   commander@12.1.0:
-    resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
+    resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==, tarball: https://registry.npmjs.org/commander/-/commander-12.1.0.tgz}
     engines: {node: '>=18'}

   commander@14.0.3:
@@ -11468,10 +11405,10 @@ packages:
     engines: {node: '>=20'}

   commander@2.13.0:
-    resolution: {integrity: sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==}
+    resolution: {integrity: sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==, tarball: https://registry.npmjs.org/commander/-/commander-2.13.0.tgz}

   commander@2.20.3:
-    resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+    resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==, tarball: https://registry.npmjs.org/commander/-/commander-2.20.3.tgz}

   commander@4.1.1:
     resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
@@ -11490,11 +11427,11 @@ packages:
     engines: {node: '>= 10'}

   commander@8.3.0:
-    resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
+    resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==, tarball: https://registry.npmjs.org/commander/-/commander-8.3.0.tgz}
     engines: {node: '>= 12'}

   commander@9.0.0:
-    resolution: {integrity: sha512-JJfP2saEKbQqvW+FI93OYUB4ByV5cizMpFMiiJI8xDbBvQvSkIk0VvQdn1CZ8mqAO8Loq2h0gYTYtDFUZUeERw==}
+    resolution: {integrity: sha512-JJfP2saEKbQqvW+FI93OYUB4ByV5cizMpFMiiJI8xDbBvQvSkIk0VvQdn1CZ8mqAO8Loq2h0gYTYtDFUZUeERw==, tarball: https://registry.npmjs.org/commander/-/commander-9.0.0.tgz}
     engines: {node: ^12.20.0 || >=14}

   commander@9.4.0:
@@ -11838,10 +11775,6 @@ packages:
   csstype@3.2.3:
     resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}

-  currently-unhandled@0.4.1:
-    resolution: {integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==}
-    engines: {node: '>=0.10.0'}
-
   cwd@0.10.0:
     resolution: {integrity: sha512-YGZxdTTL9lmLkCUTpg4j0zQ7IhRB5ZmqNBbGCl3Tg6MP/d5/6sY7L5mmTjzbc6JKgVZYiqTQTNhPFsbXNGlRaA==}
     engines: {node: '>=0.8'}
@@ -11933,9 +11866,6 @@ packages:
   date-fns@4.1.0:
     resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==}

-  dateformat@4.6.3:
-    resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==}
-
   debug@2.6.9:
     resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
     peerDependencies:
@@ -12128,10 +12058,6 @@ packages:
     resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
     engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}

-  detect-file@1.0.0:
-    resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==}
-    engines: {node: '>=0.10.0'}
-
   detect-newline@3.1.0:
     resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==}
     engines: {node: '>=8'}
@@ -12476,11 +12402,11 @@ packages:
     resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}

   escape-string-regexp@1.0.5:
-    resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
+    resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==, tarball: https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz}
     engines: {node: '>=0.8.0'}

   escape-string-regexp@2.0.0:
-    resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
+    resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==, tarball: https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz}
     engines: {node: '>=8'}

   escape-string-regexp@4.0.0:
@@ -12732,9 +12658,6 @@ packages:
     resolution: {integrity: sha512-8q3LsZjRezbFZ2PN+uP+Q7pnHUMmAOziU2vA2OwoFaKIXxlxl38IylhSSgUorWu/rf4er67w0ikBqjBFk/pomA==}
     engines: {node: '>=10.13.0'}

-  eventemitter2@0.4.14:
-    resolution: {integrity: sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ==}
-
   eventemitter3@3.1.2:
     resolution: {integrity: sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==}

@@ -12763,10 +12686,6 @@ packages:
   exenv@1.2.2:
     resolution: {integrity: sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw==}

-  exit-x@0.2.2:
-    resolution: {integrity: sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==}
-    engines: {node: '>= 0.8.0'}
-
   exit@0.1.2:
     resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==}
     engines: {node: '>= 0.8.0'}
@@ -12779,10 +12698,6 @@ packages:
     resolution: {integrity: sha512-rtmc+cjLZqnu9dSYosX9EWmSJhTwpACgJQTfj4hgg2JjOD/6SIQalZrt4a3aQeh++oNxkazcaxrhPUj6+g5G/Q==}
     engines: {node: '>=0.10.0'}

-  expand-tilde@2.0.2:
-    resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==}
-    engines: {node: '>=0.10.0'}
-
   expect-puppeteer@4.4.0:
     resolution: {integrity: sha512-6Ey4Xy2xvmuQu7z7YQtMsaMV0EHJRpVxIDOd5GRrm04/I3nkTKIutELfECsLp6le+b3SSa3cXhPiw6PgqzxYWA==}

@@ -12806,9 +12721,6 @@ packages:
     resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==}
     engines: {node: '>=0.10.0'}

-  extend@3.0.2:
-    resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
-
   external-editor@3.1.0:
     resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
     engines: {node: '>=4'}
@@ -12924,10 +12836,6 @@ packages:
     engines: {node: '>= 17.0.0'}
     hasBin: true

-  figures@1.7.0:
-    resolution: {integrity: sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==}
-    engines: {node: '>=0.10.0'}
-
   figures@3.2.0:
     resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
     engines: {node: '>=8'}
@@ -12949,9 +12857,6 @@ packages:
     peerDependencies:
       webpack: ^4.0.0 || ^5.0.0

-  file-sync-cmp@0.1.1:
-    resolution: {integrity: sha512-0k45oWBokCqh2MOexeYKpyqmGKG+8mQ2Wd8iawx+uWd/weWJQAZ6SoPybagdCI4xFisag8iAR77WPm4h3pTfxA==}
-
   filelist@1.0.6:
     resolution: {integrity: sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==}

@@ -13005,10 +12910,6 @@ packages:
   find-root@1.1.0:
     resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==}

-  find-up@1.1.2:
-    resolution: {integrity: sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==}
-    engines: {node: '>=0.10.0'}
-
   find-up@3.0.0:
     resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==}
     engines: {node: '>=6'}
@@ -13028,22 +12929,6 @@ packages:
   find-yarn-workspace-root@2.0.0:
     resolution: {integrity: sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==}

-  findup-sync@4.0.0:
-    resolution: {integrity: sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==}
-    engines: {node: '>= 8'}
-
-  findup-sync@5.0.0:
-    resolution: {integrity: sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==}
-    engines: {node: '>= 10.13.0'}
-
-  fined@1.2.0:
-    resolution: {integrity: sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==}
-    engines: {node: '>= 0.10'}
-
-  flagged-respawn@1.0.1:
-    resolution: {integrity: sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==}
-    engines: {node: '>= 0.10'}
-
   flat-cache@3.2.0:
     resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
     engines: {node: ^10.12.0 || >=12.0.0}
@@ -13091,10 +12976,6 @@ packages:
     resolution: {integrity: sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==}
     engines: {node: '>=0.10.0'}

-  for-own@1.0.0:
-    resolution: {integrity: sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==}
-    engines: {node: '>=0.10.0'}
-
   foreground-child@2.0.0:
     resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==}
     engines: {node: '>=8.0.0'}
@@ -13260,10 +13141,6 @@ packages:
     resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
     engines: {node: '>= 0.4'}

-  get-stdin@4.0.1:
-    resolution: {integrity: sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==}
-    engines: {node: '>=0.10.0'}
-
   get-stdin@8.0.0:
     resolution: {integrity: sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==}
     engines: {node: '>=10'}
@@ -13299,10 +13176,6 @@ packages:
     resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==}
     engines: {node: '>=0.10.0'}

-  getobject@1.0.2:
-    resolution: {integrity: sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg==}
-    engines: {node: '>=10'}
-
   gettext-parser@1.4.0:
     resolution: {integrity: sha512-sedZYLHlHeBop/gZ1jdg59hlUEcpcZJofLq2JFwJT1zTqAU3l2wFv6IsuwFHGqbiT9DWzMUW4/em2+hspnmMMA==}

@@ -13330,10 +13203,6 @@ packages:
     deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
     hasBin: true

-  glob@7.1.7:
-    resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==}
-    deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
-
   glob@7.2.3:
     resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
     deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
@@ -13350,10 +13219,6 @@ packages:
     resolution: {integrity: sha512-JeXuCbvYzYXcwE6acL9V2bAOeSIGl4dD+iwLY9iUx2VBJJ80R18HCn+JCwHM9Oegdfya3lEkGCdaRkSyc10hDA==}
     engines: {node: '>=0.10.0'}

-  global-modules@1.0.0:
-    resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==}
-    engines: {node: '>=0.10.0'}
-
   global-modules@2.0.0:
     resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==}
     engines: {node: '>=6'}
@@ -13362,10 +13227,6 @@ packages:
     resolution: {integrity: sha512-gOPiyxcD9dJGCEArAhF4Hd0BAqvAe/JzERP7tYumE4yIkmIedPUVXcJFWbV3/p/ovIIvKjkrTk+f1UVkq7vvbw==}
     engines: {node: '>=0.10.0'}

-  global-prefix@1.0.2:
-    resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==}
-    engines: {node: '>=0.10.0'}
-
   global-prefix@3.0.0:
     resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==}
     engines: {node: '>=6'}
@@ -13462,86 +13323,6 @@ packages:
   growly@1.3.0:
     resolution: {integrity: sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==, tarball: https://registry.npmjs.org/growly/-/growly-1.3.0.tgz}

-  grunt-cli@1.5.0:
-    resolution: {integrity: sha512-rILKAFoU0dzlf22SUfDtq2R1fosChXXlJM5j7wI6uoW8gwmXDXzbUvirlKZSYCdXl3LXFbR+8xyS+WFo+b6vlA==}
-    engines: {node: '>=10'}
-    hasBin: true
-
-  grunt-contrib-concat@1.0.1:
-    resolution: {integrity: sha512-QdTmcxe8aim2Z0dFeuSJ+f7fHIeY7PZaTMZxgvosjXwyMhpy2GUR5WHkr12lksHfZVE80v2wUwqF56wyfPUwoQ==}
-    engines: {node: '>=0.10.0'}
-    peerDependencies:
-      grunt: '>=0.4.0'
-
-  grunt-contrib-copy@1.0.0:
-    resolution: {integrity: sha512-gFRFUB0ZbLcjKb67Magz1yOHGBkyU6uL29hiEW1tdQ9gQt72NuMKIy/kS6dsCbV0cZ0maNCb0s6y+uT1FKU7jA==}
-    engines: {node: '>=0.10.0'}
-
-  grunt-contrib-cssmin@4.0.0:
-    resolution: {integrity: sha512-jXU+Zlk8Q8XztOGNGpjYlD/BDQ0n95IHKrQKtFR7Gd8hZrzgqiG1Ra7cGYc8h2DD9vkSFGNlweb9Q00rBxOK2w==}
-    engines: {node: '>=10.0'}
-
-  grunt-contrib-uglify-es@3.3.0:
-    resolution: {integrity: sha512-E+9EbUQiBjFynaZp4wsdjktMo2oHEetGaBIhy9XTbhneHiXomXQWlfgY5Ib5c/FU9WiL/OfXbmo6nwgIN1hLAA==}
-    engines: {node: '>=0.10.0'}
-    deprecated: deprecated
-
-  grunt-known-options@2.0.0:
-    resolution: {integrity: sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA==}
-    engines: {node: '>=0.10.0'}
-
-  grunt-legacy-log-utils@2.1.3:
-    resolution: {integrity: sha512-sgG+QvKmdb44wZyzJP+ejDsy3jYxG2wzohpol+JTMlXqMUBDoZb01JPQ5jKAedtZBFwhmABAc88T9hEBLy3U+Q==}
-    engines: {node: '>=10'}
-
-  grunt-legacy-log@3.0.1:
-    resolution: {integrity: sha512-vytI3IUC8qUK9TcvvpHpGJzDojua/sfJV4TdLB4FtCFzospqduzBuL3+dEfpvO+tGECv7/273+33hjjMXSa92g==}
-    engines: {node: '>= 0.10.0'}
-
-  grunt-legacy-util@2.0.2:
-    resolution: {integrity: sha512-0xoDILyR4BVJel5uJwnhjdWN9evOQ8A0uXbQUIJ0hgVthIA6kloXHSoqATQPj6BRrHrHkcQtCeGVb0ixFoHyEQ==}
-    engines: {node: '>=10'}
-
-  grunt-move@1.0.3:
-    resolution: {integrity: sha512-hzfoRZZeq04bOz/iOgUNhza3T3ahd6yw86+bAZtCNfXLcg3z5QWaaow/cbV0SGdlb19VuG5bbKHUdK+NtseoiA==}
-    engines: {node: '>=6'}
-
-  grunt-newer@1.3.0:
-    resolution: {integrity: sha512-HEbcE3pTueSx2IT/WR9F/pJaGioy1+bDu0RPS1JZn8cPHaAGc8BIkcbEHato9Bhoy6ip1R43wY4gfgO6d7utnA==}
-    engines: {node: '>= 0.8.0'}
-    peerDependencies:
-      grunt: '>=0.4.1'
-
-  grunt-rtlcss@2.0.2:
-    resolution: {integrity: sha512-WbI2thnwlF04N+xvJu+NxqEaCyPuLyar196SYhEQFZ2EJHkOS8YYE+Zkh+X9cWhwAtKp7ZEpR/IKXcyQggOIsQ==}
-    engines: {node: '>= 0.8.0'}
-
-  grunt-sass@3.1.0:
-    resolution: {integrity: sha512-90s27H7FoCDcA8C8+R0GwC+ntYD3lG6S/jqcavWm3bn9RiJTmSfOvfbFa1PXx4NbBWuiGQMLfQTj/JvvqT5w6A==}
-    engines: {node: '>=8'}
-    peerDependencies:
-      grunt: '>=1'
-
-  grunt-stylelint@0.16.0:
-    resolution: {integrity: sha512-ullm0h9iCdgPEDq1TNwKL5HteXA4zke6wbYoRtsO32ATCU3zfUXmDN9unhu+joEcdgJKOPcd2+7UhRNXO1rr+w==}
-    engines: {node: '>=10'}
-    peerDependencies:
-      stylelint: ^13.8.0
-
-  grunt@1.6.3:
-    resolution: {integrity: sha512-ng0CbpyNp/ox5e5CBY9TkZgVdAL4wK+nBHO6rNE8cXGa5kM++Lxlp0MpFBVZbpgOR2oCp/91V+T3CZVSWWLqMA==}
-    engines: {node: '>=16'}
-    hasBin: true
-
-  gzip-size@1.0.0:
-    resolution: {integrity: sha512-mu66twX6zg8WB6IPfUtrquS7fjwGnDJ7kdVcggd5rpjwBItQKjHtvhu6VcQMkqPYAR7DjWpEaN3xiBSNmxvzPg==}
-    engines: {node: '>=0.10.0'}
-    hasBin: true
-
-  gzip-size@5.1.1:
-    resolution: {integrity: sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==}
-    engines: {node: '>=6'}
-
   gzip-size@6.0.0:
     resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==}
     engines: {node: '>=10'}
@@ -13558,20 +13339,16 @@ packages:
     resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==}
     engines: {node: '>=6'}

-  has-ansi@2.0.0:
-    resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==}
-    engines: {node: '>=0.10.0'}
-
   has-bigints@1.1.0:
     resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
     engines: {node: '>= 0.4'}

   has-flag@3.0.0:
-    resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
+    resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==, tarball: https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz}
     engines: {node: '>=4'}

   has-flag@4.0.0:
-    resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+    resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, tarball: https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz}
     engines: {node: '>=8'}

   has-property-descriptors@1.0.2:
@@ -13652,9 +13429,6 @@ packages:
     resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==}
     engines: {node: '>=0.10.0'}

-  hooker@0.2.3:
-    resolution: {integrity: sha512-t+UerCsQviSymAInD01Pw+Dn/usmz1sRO+3Zk1+lx8eg+WKpD2ulcwWqHHL0+aseRBr+3+vIhiG1K1JTwaIcTA==}
-
   hookified@1.15.1:
     resolution: {integrity: sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==}

@@ -13859,7 +13633,7 @@ packages:
     resolution: {integrity: sha512-W7+sO6/yhxy83L0G7xR8YAc5Z5QFtYEXXRV6EaE8tuYBZJnA3gVgp3q7X7muhLZVodeb9UfvjSbwt9VJwjIYAg==}

   immutable@4.3.9:
-    resolution: {integrity: sha512-ObHy4YN7ycwZOUCLI1/6svfyAFu7vL8RhAvVu/bh/RZW9EPlOyDaQ9jDQWCtdqzaXUjgXZCW1migtHE7YI7UGQ==}
+    resolution: {integrity: sha512-ObHy4YN7ycwZOUCLI1/6svfyAFu7vL8RhAvVu/bh/RZW9EPlOyDaQ9jDQWCtdqzaXUjgXZCW1migtHE7YI7UGQ==, tarball: https://registry.npmjs.org/immutable/-/immutable-4.3.9.tgz}

   immutable@5.1.9:
     resolution: {integrity: sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==, tarball: https://registry.npmjs.org/immutable/-/immutable-5.1.9.tgz}
@@ -13891,10 +13665,6 @@ packages:
     resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
     engines: {node: '>=0.8.19'}

-  indent-string@2.1.0:
-    resolution: {integrity: sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==}
-    engines: {node: '>=0.10.0'}
-
   indent-string@4.0.0:
     resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
     engines: {node: '>=8'}
@@ -13931,9 +13701,6 @@ packages:
     resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
     engines: {node: '>= 0.4'}

-  interpret@1.1.0:
-    resolution: {integrity: sha512-CLM8SNMDu7C5psFCn6Wg/tgpj/bKAg7hc2gWqcuR9OD5Ft9PhBpIu8PLicPeis+xDd6YX2ncI8MCA64I9tftIA==}
-
   interpret@1.4.0:
     resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==}
     engines: {node: '>= 0.10'}
@@ -13961,10 +13728,6 @@ packages:
     resolution: {integrity: sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==}
     engines: {node: '>=8'}

-  is-absolute@1.0.0:
-    resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==}
-    engines: {node: '>=0.10.0'}
-
   is-accessor-descriptor@1.0.1:
     resolution: {integrity: sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==}
     engines: {node: '>= 0.10'}
@@ -14063,10 +13826,6 @@ packages:
     resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==}
     engines: {node: '>= 0.4'}

-  is-finite@1.1.0:
-    resolution: {integrity: sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==}
-    engines: {node: '>=0.10.0'}
-
   is-fullwidth-code-point@2.0.0:
     resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==}
     engines: {node: '>=4'}
@@ -14169,10 +13928,6 @@ packages:
     resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
     engines: {node: '>= 0.4'}

-  is-relative@1.0.0:
-    resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==}
-    engines: {node: '>=0.10.0'}
-
   is-retry-allowed@1.2.0:
     resolution: {integrity: sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==}
     engines: {node: '>=0.10.0'}
@@ -14212,10 +13967,6 @@ packages:
     resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
     engines: {node: '>= 0.4'}

-  is-unc-path@1.0.0:
-    resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==}
-    engines: {node: '>=0.10.0'}
-
   is-unicode-supported@0.1.0:
     resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
     engines: {node: '>=10'}
@@ -14223,9 +13974,6 @@ packages:
   is-unsafe@2.0.2:
     resolution: {integrity: sha512-HgbIHPBH0KHHCcjLfGsCvhtPTVxjaAZlXjwdz7/GQC40SjSe4sfQsar8J5VFo8JOSbarkpV0OLG95bbaNd9aAQ==}

-  is-utf8@0.2.1:
-    resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==}
-
   is-weakmap@2.0.2:
     resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
     engines: {node: '>= 0.4'}
@@ -14783,10 +14531,6 @@ packages:
     engines: {node: '>=16'}
     hasBin: true

-  liftup@3.0.1:
-    resolution: {integrity: sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw==}
-    engines: {node: '>=10'}
-
   lighthouse-logger@2.0.2:
     resolution: {integrity: sha512-vWl2+u5jgOQuZR55Z1WM0XDdrJT6mzMP8zHUct7xTlWhuQs+eV0g+QL0RQdFjT54zVmbhLCP8vIVpy1wGn/gCg==}

@@ -14848,10 +14592,6 @@ packages:
       enquirer:
         optional: true

-  load-json-file@1.1.0:
-    resolution: {integrity: sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==}
-    engines: {node: '>=0.10.0'}
-
   loader-runner@4.3.1:
     resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==}
     engines: {node: '>=6.11.5'}
@@ -14999,10 +14739,6 @@ packages:
     resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
     hasBin: true

-  loud-rejection@1.6.0:
-    resolution: {integrity: sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==}
-    engines: {node: '>=0.10.0'}
-
   loupe@3.2.1:
     resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==, tarball: https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz}

@@ -15072,10 +14808,6 @@ packages:
   make-error@1.3.6:
     resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}

-  make-iterator@1.0.1:
-    resolution: {integrity: sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==}
-    engines: {node: '>=0.10.0'}
-
   makeerror@1.0.12:
     resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==}

@@ -15124,14 +14856,6 @@ packages:
   mathml-tag-names@2.1.3:
     resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==}

-  maxmin@1.1.0:
-    resolution: {integrity: sha512-jypoV6wTPuz/ngkc2sDZnFvpvx14QICNKS/jK9RbkmiQQJZ4JWstIszA8iT/z9tPSF/vXQ5qtG0h65N9tiLIKA==}
-    engines: {node: '>=0.10.0'}
-
-  maxmin@3.0.0:
-    resolution: {integrity: sha512-wcahMInmGtg/7c6a75fr21Ch/Ks1Tb+Jtoan5Ft4bAI0ZvJqyOw8kkM7e7p8hDSzY805vmxwHT50KcjGwKyJ0g==}
-    engines: {node: '>=10'}
-
   md5@2.3.0:
     resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==}

@@ -15180,10 +14904,6 @@ packages:
     resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==}
     engines: {node: '>=18'}

-  meow@3.7.0:
-    resolution: {integrity: sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==}
-    engines: {node: '>=0.10.0'}
-
   meow@9.0.0:
     resolution: {integrity: sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==}
     engines: {node: '>=10'}
@@ -15318,7 +15038,7 @@ packages:
     engines: {node: '>=0.10.0'}

   mkdirp@0.5.6:
-    resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+    resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==, tarball: https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz}
     hasBin: true

   mkdirp@1.0.4:
@@ -15480,11 +15200,6 @@ packages:
     resolution: {integrity: sha512-RinNxoz4W1cep1b928fuFhvAQ5ag/+1UlMDV7rbyGthBIgsiEouS4kvRayvvboxii4m8eolKOIBo3OjDqbc+uQ==}
     engines: {node: '>=6'}

-  nopt@5.0.0:
-    resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==}
-    engines: {node: '>=6'}
-    hasBin: true
-
   nopt@7.2.1:
     resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==}
     engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
@@ -15674,10 +15389,6 @@ packages:
     resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==}
     engines: {node: '>= 0.4'}

-  object.defaults@1.1.0:
-    resolution: {integrity: sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==}
-    engines: {node: '>=0.10.0'}
-
   object.entries@1.1.9:
     resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==}
     engines: {node: '>= 0.4'}
@@ -15690,10 +15401,6 @@ packages:
     resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==}
     engines: {node: '>= 0.4'}

-  object.map@1.0.1:
-    resolution: {integrity: sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==}
-    engines: {node: '>=0.10.0'}
-
   object.pick@1.3.0:
     resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==}
     engines: {node: '>=0.10.0'}
@@ -15868,9 +15575,6 @@ packages:
     resolution: {integrity: sha512-q/R5GrMek0vzgoomq6rm9OX+3PQve8sLwTirmK30YB3Cu0Bbt9OX9M/SIUnroN5BGJkzwGsFwDaRGD9EwBOlCA==}
     engines: {node: '>=4'}

-  pako@0.2.9:
-    resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==}
-
   pako@1.0.11:
     resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}

@@ -15884,17 +15588,9 @@ packages:
   parse-cache-control@1.0.1:
     resolution: {integrity: sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==}

-  parse-filepath@1.0.2:
-    resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==}
-    engines: {node: '>=0.8'}
-
   parse-imports-exports@0.2.4:
     resolution: {integrity: sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==}

-  parse-json@2.2.0:
-    resolution: {integrity: sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==}
-    engines: {node: '>=0.10.0'}
-
   parse-json@4.0.0:
     resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==}
     engines: {node: '>=4'}
@@ -15936,10 +15632,6 @@ packages:
   path-case@3.0.4:
     resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==}

-  path-exists@2.1.0:
-    resolution: {integrity: sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==}
-    engines: {node: '>=0.10.0'}
-
   path-exists@3.0.0:
     resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==}
     engines: {node: '>=4'}
@@ -15981,14 +15673,6 @@ packages:
   path-parse@1.0.7:
     resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}

-  path-root-regex@0.1.2:
-    resolution: {integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==}
-    engines: {node: '>=0.10.0'}
-
-  path-root@0.1.1:
-    resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==}
-    engines: {node: '>=0.10.0'}
-
   path-scurry@1.11.1:
     resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
     engines: {node: '>=16 || 14 >=14.18'}
@@ -15999,10 +15683,6 @@ packages:
   path-to-regexp@6.3.0:
     resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==}

-  path-type@1.1.0:
-    resolution: {integrity: sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==}
-    engines: {node: '>=0.10.0'}
-
   path-type@4.0.0:
     resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
     engines: {node: '>=8'}
@@ -16555,7 +16235,7 @@ packages:
     resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}

   postcss@6.0.23:
-    resolution: {integrity: sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==}
+    resolution: {integrity: sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==, tarball: https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz}
     engines: {node: '>=4.0.0'}

   postcss@7.0.39:
@@ -16606,15 +16286,6 @@ packages:
     engines: {node: '>=10.13.0'}
     hasBin: true

-  pretty-bytes@1.0.4:
-    resolution: {integrity: sha512-LNisJvAjy+hruxp3GV4IkZZscTI34+ISfeM1hesB9V6ezIDfXYrBi9TIXVjjMcEB4QFN7tL+dFDEk4s8jMBMyA==}
-    engines: {node: '>=0.10.0'}
-    hasBin: true
-
-  pretty-bytes@5.6.0:
-    resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==}
-    engines: {node: '>=6'}
-
   pretty-error@4.0.0:
     resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==}

@@ -17084,18 +16755,10 @@ packages:
   read-cache@1.0.0:
     resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}

-  read-pkg-up@1.0.1:
-    resolution: {integrity: sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==}
-    engines: {node: '>=0.10.0'}
-
   read-pkg-up@7.0.1:
     resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
     engines: {node: '>=8'}

-  read-pkg@1.1.0:
-    resolution: {integrity: sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==}
-    engines: {node: '>=0.10.0'}
-
   read-pkg@5.2.0:
     resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==}
     engines: {node: '>=8'}
@@ -17162,18 +16825,10 @@ packages:
     resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==}
     engines: {node: '>= 0.10'}

-  rechoir@0.7.1:
-    resolution: {integrity: sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==}
-    engines: {node: '>= 0.10'}
-
   rechoir@0.8.0:
     resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==}
     engines: {node: '>= 10.13.0'}

-  redent@1.0.0:
-    resolution: {integrity: sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==}
-    engines: {node: '>=0.10.0'}
-
   redent@3.0.0:
     resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
     engines: {node: '>=8'}
@@ -17261,10 +16916,6 @@ packages:
     resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==}
     engines: {node: '>=0.10'}

-  repeating@2.0.1:
-    resolution: {integrity: sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==}
-    engines: {node: '>=0.10.0'}
-
   replace@1.2.2:
     resolution: {integrity: sha512-C4EDifm22XZM2b2JOYe6Mhn+lBsLBAvLbK8drfUQLTfD1KYl/n3VaW/CDju0Ny4w3xTtegBpg8YNSpFJPUDSjA==}
     engines: {node: '>= 6'}
@@ -17319,10 +16970,6 @@ packages:
     resolution: {integrity: sha512-QxMPqI6le2u0dCLyiGzgy92kjkkL6zO0XyvHzjdTNH3zM6e5Hz3BwG6+aEyNgiQ5Xz6PwTwgQEj3U50dByPKIA==}
     engines: {node: '>=0.10.0'}

-  resolve-dir@1.0.1:
-    resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==}
-    engines: {node: '>=0.10.0'}
-
   resolve-from@4.0.0:
     resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
     engines: {node: '>=4'}
@@ -17417,7 +17064,7 @@ packages:
     resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==}

   rtlcss@2.6.2:
-    resolution: {integrity: sha512-06LFAr+GAPo+BvaynsXRfoYTJvSaWRyOhURCQ7aeI1MKph9meM222F+Zkt3bDamyHHJuGi3VPtiRkpyswmQbGA==}
+    resolution: {integrity: sha512-06LFAr+GAPo+BvaynsXRfoYTJvSaWRyOhURCQ7aeI1MKph9meM222F+Zkt3bDamyHHJuGi3VPtiRkpyswmQbGA==, tarball: https://registry.npmjs.org/rtlcss/-/rtlcss-2.6.2.tgz}
     hasBin: true

   rtlcss@4.3.0:
@@ -17448,7 +17095,7 @@ packages:
     engines: {npm: '>=2.0.0'}

   rxjs@7.8.2:
-    resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
+    resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==, tarball: https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz}

   safe-array-concat@1.1.3:
     resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==}
@@ -17512,12 +17159,26 @@ packages:
     cpu: [arm64]
     os: [darwin]

+  sass-embedded-darwin-arm64@1.69.5:
+    resolution: {integrity: sha512-zVuXJzgT54t24E4QPP/iteHsw/cawZE8gAXGEm20cP2DKsIQBF7bvSTk0zzY0bS01YFtJviYM13HcGUe4q7/7w==, tarball: https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.69.5.tgz}
+    engines: {node: '>=14.0.0'}
+    cpu: [arm64]
+    os: [darwin]
+    hasBin: true
+
   sass-embedded-darwin-x64@1.100.0:
     resolution: {integrity: sha512-x97o3JnGyImZNCIVs9wQHJUE5QCvmVIKaH1cwrz/5dK7OT1FpeNiW+u9TUomP9hG6Ekjd8EL8NBHpxTfIhdjmg==, tarball: https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.100.0.tgz}
     engines: {node: '>=14.0.0'}
     cpu: [x64]
     os: [darwin]

+  sass-embedded-darwin-x64@1.69.5:
+    resolution: {integrity: sha512-HcA9YER3Ax7lMnHouxnIY462gnst5lNL56QXkZaTQmg9nH7oqR2bMfWbckEQL+mHIXGSM/QfX0aD59VOm5iKZw==, tarball: https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.69.5.tgz}
+    engines: {node: '>=14.0.0'}
+    cpu: [x64]
+    os: [darwin]
+    hasBin: true
+
   sass-embedded-linux-arm64@1.100.0:
     resolution: {integrity: sha512-Dwjmj8Z6VRy7rAi53JAdEwIyUjpfl7PhpSc2/LpQPQx+aO5Dp7Spaipkax0ufJl1SoDUdchCsM4y/88YaluorQ==, tarball: https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.100.0.tgz}
     engines: {node: '>=14.0.0'}
@@ -17525,6 +17186,13 @@ packages:
     os: [linux]
     libc: glibc

+  sass-embedded-linux-arm64@1.69.5:
+    resolution: {integrity: sha512-HWCjdFSLGh0dMUNLNh+slc2j9koSZnfTEO9qQR6WEIuC+We6vYKJugGPo1V9pFbBeoW6VAJGYdlqsRPquteCZw==, tarball: https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.69.5.tgz}
+    engines: {node: '>=14.0.0'}
+    cpu: [arm64]
+    os: [linux]
+    hasBin: true
+
   sass-embedded-linux-arm@1.100.0:
     resolution: {integrity: sha512-9Ul7O1eKrc5YlhwWjkp8tZPSe3UEwSZ1uwUZOQom1HL0pRlBA6F/IlGZYFTLwnHMIP1fc77MMNaBRfc05mKMpw==, tarball: https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.100.0.tgz}
     engines: {node: '>=14.0.0'}
@@ -17532,6 +17200,20 @@ packages:
     os: [linux]
     libc: glibc

+  sass-embedded-linux-arm@1.69.5:
+    resolution: {integrity: sha512-m0NxVkrfcS3UsF33q0FgItMWIz/F1FZdfVZpjp+dP6qd0KLeTuoPUCh2GSize0DAU5T0Zj24b2mXeowDKv463g==, tarball: https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.69.5.tgz}
+    engines: {node: '>=14.0.0'}
+    cpu: [arm]
+    os: [linux]
+    hasBin: true
+
+  sass-embedded-linux-ia32@1.69.5:
+    resolution: {integrity: sha512-0taR6AJDb+eLOBTEMc1nfX2fI1hgRF9M+Hmv+wwGrxfBu/MkASk6fmR9B8MDw9hPHIqGVUkTVizjOh50O7nIKg==, tarball: https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.69.5.tgz}
+    engines: {node: '>=14.0.0'}
+    cpu: [ia32]
+    os: [linux]
+    hasBin: true
+
   sass-embedded-linux-musl-arm64@1.100.0:
     resolution: {integrity: sha512-XpACJB2KjSLjf2e9uuvGVdOURsoNrFqgRiihhXyUHK9W0t3LIHb7z5MA/7XGPIT9bWSOO2zyw+rH/FHtDV/Yrg==, tarball: https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.100.0.tgz}
     engines: {node: '>=14.0.0'}
@@ -17574,6 +17256,13 @@ packages:
     os: [linux]
     libc: glibc

+  sass-embedded-linux-x64@1.69.5:
+    resolution: {integrity: sha512-gN9yLTbKC0hUHukx4mdRs4V39WD719PM2GhWQBUA+3Z8qr9ywywi7LiU2atWrKESRF34V+eqF9lYiYVQxtTHZw==, tarball: https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.69.5.tgz}
+    engines: {node: '>=14.0.0'}
+    cpu: [x64]
+    os: [linux]
+    hasBin: true
+
   sass-embedded-unknown-all@1.100.0:
     resolution: {integrity: sha512-c+naBgWId4MIpToXcI0DgqetjdAkwTTAxFAuOaBz7HUXLdyG1oZRrEvSsbe41nEdQOKH0vgofVFCeSQgoXOG9A==, tarball: https://registry.npmjs.org/sass-embedded-unknown-all/-/sass-embedded-unknown-all-1.100.0.tgz}
     os: ['!android', '!darwin', '!linux', '!win32']
@@ -17584,17 +17273,35 @@ packages:
     cpu: [arm64]
     os: [win32]

+  sass-embedded-win32-ia32@1.69.5:
+    resolution: {integrity: sha512-9OgSaufHP53b33gaH1Y5NZ/Im3druCHIQvLUEqJBCFuOzly47g/hZGrO+dBDiWgYGYKbSYI7Z4/PBtQoK5Vkxg==, tarball: https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.69.5.tgz}
+    engines: {node: '>=14.0.0'}
+    cpu: [ia32]
+    os: [win32]
+    hasBin: true
+
   sass-embedded-win32-x64@1.100.0:
     resolution: {integrity: sha512-qI4F8MI7/KYoy9NdjJfhSspG42WPkADSNDvwEV7qWvCSFC83koJssRsKO2/PfY+niZz6BG65Ic/D+A11h959hw==, tarball: https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.100.0.tgz}
     engines: {node: '>=14.0.0'}
     cpu: [x64]
     os: [win32]

+  sass-embedded-win32-x64@1.69.5:
+    resolution: {integrity: sha512-p1PsOJnpwXdPfiRbX6QdRa4PnL2QXPpIRy8fkeAZpQFYZ278ZIlwemC2MukKMVLcE3iQ5lBulbC8IYm91rod6Q==, tarball: https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.69.5.tgz}
+    engines: {node: '>=14.0.0'}
+    cpu: [x64]
+    os: [win32]
+    hasBin: true
+
   sass-embedded@1.100.0:
     resolution: {integrity: sha512-Ut8wlQSk19tm7jMK6mz6cF1+e+E7tUnW2tM02zQDPnOTcVbV8qCQG8UWxZkkNlY50+hV3hqP24OOkUlMz8xBpw==, tarball: https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.100.0.tgz}
     engines: {node: '>=16.0.0'}
     hasBin: true

+  sass-embedded@1.69.5:
+    resolution: {integrity: sha512-0YNcRcbSpgGd4AnE+mm3a3g4S97puFLIZ0cYJgbwdD4iGz/hiOzE+yh72XS+u1LMhE+pQfNeC9MNnRsc8n1yRg==, tarball: https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.69.5.tgz}
+    engines: {node: '>=14.0.0'}
+
   sass-loader@10.5.2:
     resolution: {integrity: sha512-vMUoSNOUKJILHpcNCCyD23X34gve1TS7Rjd9uXHeKqhvBG39x6XbswFDtpbTElj6XdMFezoWhkh5vtKudf2cgQ==}
     engines: {node: '>= 10.13.0'}
@@ -17937,11 +17644,11 @@ packages:
     deprecated: See https://github.com/lydell/source-map-url#deprecated

   source-map@0.5.7:
-    resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
+    resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==, tarball: https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz}
     engines: {node: '>=0.10.0'}

   source-map@0.6.1:
-    resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+    resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, tarball: https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz}
     engines: {node: '>=0.10.0'}

   source-map@0.7.6:
@@ -18106,10 +17813,6 @@ packages:
     engines: {node: '>=0.10.0'}
     hasBin: true

-  strip-ansi@3.0.1:
-    resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==}
-    engines: {node: '>=0.10.0'}
-
   strip-ansi@4.0.0:
     resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==}
     engines: {node: '>=4'}
@@ -18130,10 +17833,6 @@ packages:
     resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==}
     engines: {node: '>=0.10.0'}

-  strip-bom@2.0.0:
-    resolution: {integrity: sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==}
-    engines: {node: '>=0.10.0'}
-
   strip-bom@3.0.0:
     resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
     engines: {node: '>=4'}
@@ -18154,11 +17853,6 @@ packages:
     resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
     engines: {node: '>=12'}

-  strip-indent@1.0.1:
-    resolution: {integrity: sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==}
-    engines: {node: '>=0.10.0'}
-    hasBin: true
-
   strip-indent@3.0.0:
     resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
     engines: {node: '>=8'}
@@ -18168,11 +17862,11 @@ packages:
     engines: {node: '>=12'}

   strip-json-comments@2.0.1:
-    resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
+    resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==, tarball: https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz}
     engines: {node: '>=0.10.0'}

   strip-json-comments@3.1.1:
-    resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+    resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, tarball: https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz}
     engines: {node: '>=8'}

   strip-json-comments@5.0.3:
@@ -18278,12 +17972,8 @@ packages:
     resolution: {integrity: sha512-mJiVjfd2vokfDxsQPOwJ/PtanO87LhpYY88ubI5dUB1Ab58Txbyje3+jpm+/83R/fevaq/107NNhtYBLuoTrFg==}
     engines: {node: '>=10'}

-  supports-color@2.0.0:
-    resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==}
-    engines: {node: '>=0.8.0'}
-
   supports-color@5.5.0:
-    resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
+    resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, tarball: https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz}
     engines: {node: '>=4'}

   supports-color@7.2.0:
@@ -18291,7 +17981,7 @@ packages:
     engines: {node: '>=8'}

   supports-color@8.1.1:
-    resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+    resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==, tarball: https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz}
     engines: {node: '>=10'}

   supports-color@9.4.0:
@@ -18584,10 +18274,6 @@ packages:
   trim-html@0.1.9:
     resolution: {integrity: sha512-Wjr79dz+FGKeDApfZ9o8YRC4RZDX3/lj0QeTLfEoyZr5b/ZFkvSCg7cWYkVdwoRLe7PBHTCFUSmTztAqa9UGAQ==}

-  trim-newlines@1.0.0:
-    resolution: {integrity: sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==}
-    engines: {node: '>=0.10.0'}
-
   trim-newlines@3.0.1:
     resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==}
     engines: {node: '>=8'}
@@ -18659,7 +18345,7 @@ packages:
     engines: {node: '>=6'}

   tslib@1.14.1:
-    resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
+    resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==, tarball: https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz}

   tslib@2.8.1:
     resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
@@ -18748,7 +18434,7 @@ packages:
     resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==}

   uglify-es@3.3.9:
-    resolution: {integrity: sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==}
+    resolution: {integrity: sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==, tarball: https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz}
     engines: {node: '>=0.8.0'}
     deprecated: support for ECMAScript is superseded by `uglify-js` as of v3.13.0
     hasBin: true
@@ -18769,13 +18455,6 @@ packages:
   unbzip2-stream@1.4.3:
     resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==}

-  unc-path-regex@0.1.2:
-    resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==}
-    engines: {node: '>=0.10.0'}
-
-  underscore.string@3.3.6:
-    resolution: {integrity: sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==}
-
   undici-types@6.21.0:
     resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}

@@ -18866,10 +18545,6 @@ packages:
   uri-js@4.4.1:
     resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}

-  uri-path@1.0.0:
-    resolution: {integrity: sha512-8pMuAn4KacYdGMkFaoQARicp4HSw24/DHOVKWqVRJ8LhhAwPPFpdGvdL9184JVmUwe7vz7Z9n6IqI6t5n2ELdg==}
-    engines: {node: '>= 0.10'}
-
   urix@0.1.0:
     resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==}
     deprecated: Please see https://github.com/lydell/urix#deprecated
@@ -18999,10 +18674,6 @@ packages:
     resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==}
     engines: {node: '>=10.12.0'}

-  v8flags@4.0.1:
-    resolution: {integrity: sha512-fcRLaS4H/hrZk9hYwbdRM35D0U8IYMfEClhXxCivOojl+yTRAZH3Zy2sSy6qVCiGbV9YAtPssP6jaChqC9vPCg==}
-    engines: {node: '>= 10.13.0'}
-
   validate-npm-package-license@3.0.4:
     resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}

@@ -21823,6 +21494,8 @@ snapshots:

   '@bcoe/v8-coverage@0.2.3': {}

+  '@bufbuild/protobuf@1.10.1': {}
+
   '@bufbuild/protobuf@2.14.0':
     optional: true

@@ -30886,7 +30559,7 @@ snapshots:
       - webpack-hot-middleware
       - webpack-plugin-serve

-  '@wordpress/scripts@32.6.0(@playwright/test@1.61.1)(@swc/core@1.15.24)(@types/node@24.12.2)(@types/react@18.3.28)(@types/webpack@4.41.40)(@wordpress/env@11.9.0(@types/node@24.12.2))(file-loader@6.2.0(webpack@5.97.1))(jiti@2.6.1)(node-notifier@8.0.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass-embedded@1.100.0)(stylelint-scss@6.14.0(stylelint@14.16.1))(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))(type-fest@4.41.0)(typescript@5.7.3)(webpack-hot-middleware@2.26.1)':
+  '@wordpress/scripts@32.6.0(@playwright/test@1.61.1)(@swc/core@1.15.24)(@types/node@24.12.2)(@types/react@18.3.28)(@types/webpack@4.41.40)(@wordpress/env@11.9.0(@types/node@24.12.2))(file-loader@6.2.0(webpack@5.97.1))(jiti@2.6.1)(node-notifier@8.0.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass-embedded@1.100.0)(stylelint-scss@6.14.0(stylelint@16.26.1(typescript@5.7.3)))(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))(type-fest@4.41.0)(typescript@5.7.3)(uglify-js@3.19.3)(webpack-hot-middleware@2.26.1)':
     dependencies:
       '@babel/core': 7.25.7
       '@playwright/test': 1.61.1
@@ -30901,7 +30574,7 @@ snapshots:
       '@wordpress/npm-package-json-lint-config': 5.51.0(npm-package-json-lint@6.4.0(typescript@5.7.3))
       '@wordpress/postcss-plugins-preset': 5.51.0(postcss@8.5.26)
       '@wordpress/prettier-config': 4.51.0(wp-prettier@3.0.3)
-      '@wordpress/stylelint-config': 23.42.0(@types/react@18.3.28)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint-scss@6.14.0(stylelint@14.16.1))(stylelint@16.26.1(typescript@5.7.3))
+      '@wordpress/stylelint-config': 23.42.0(@types/react@18.3.28)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint-scss@6.14.0(stylelint@16.26.1(typescript@5.7.3)))(stylelint@16.26.1(typescript@5.7.3))
       adm-zip: 0.5.17
       babel-jest: 29.7.0(@babel/core@7.25.7)
       babel-loader: 9.2.1(@babel/core@7.25.7)(webpack@5.97.1(@swc/core@1.15.24))
@@ -30944,9 +30617,9 @@ snapshots:
       schema-utils: 4.3.3
       source-map-loader: 3.0.2(webpack@5.97.1)
       stylelint: 16.26.1(typescript@5.7.3)
-      terser-webpack-plugin: 5.4.0(@swc/core@1.15.24)(webpack@5.97.1)
+      terser-webpack-plugin: 5.4.0(@swc/core@1.15.24)(uglify-js@3.19.3)(webpack@5.97.1)
       url-loader: 4.1.1(file-loader@6.2.0(webpack@5.97.1))(webpack@5.97.1)
-      webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+      webpack: 5.97.1(@swc/core@1.15.24)(uglify-js@3.19.3)(webpack-cli@5.1.4)
       webpack-bundle-analyzer: 4.9.1
       webpack-cli: 5.1.4(webpack-bundle-analyzer@4.9.1)(webpack-dev-server@4.15.2)(webpack@5.97.1)
       webpack-dev-server: 4.15.2(webpack-cli@5.1.4)(webpack@5.97.1)
@@ -30989,7 +30662,7 @@ snapshots:
       - webpack-hot-middleware
       - webpack-plugin-serve

-  '@wordpress/scripts@32.6.0(@playwright/test@1.61.1)(@swc/core@1.15.24)(@types/node@24.12.2)(@types/react@18.3.28)(@types/webpack@4.41.40)(@wordpress/env@11.9.0(@types/node@24.12.2))(file-loader@6.2.0(webpack@5.97.1))(jiti@2.6.1)(node-notifier@8.0.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass-embedded@1.100.0)(stylelint-scss@6.14.0(stylelint@16.26.1(typescript@5.7.3)))(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))(type-fest@4.41.0)(typescript@5.7.3)(uglify-js@3.19.3)(webpack-hot-middleware@2.26.1)':
+  '@wordpress/scripts@32.6.0(@playwright/test@1.61.1)(@swc/core@1.15.24)(@types/node@24.12.2)(@types/react@18.3.28)(@types/webpack@4.41.40)(@wordpress/env@11.9.0(@types/node@24.12.2))(file-loader@6.2.0(webpack@5.97.1))(jiti@2.6.1)(node-notifier@8.0.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass-embedded@1.69.5)(stylelint-scss@6.14.0(stylelint@14.16.1))(ts-node@10.9.2(@swc/core@1.15.24)(@types/node@24.12.2)(typescript@5.7.3))(type-fest@4.41.0)(typescript@5.7.3)(webpack-hot-middleware@2.26.1)':
     dependencies:
       '@babel/core': 7.25.7
       '@playwright/test': 1.61.1
@@ -31004,7 +30677,7 @@ snapshots:
       '@wordpress/npm-package-json-lint-config': 5.51.0(npm-package-json-lint@6.4.0(typescript@5.7.3))
       '@wordpress/postcss-plugins-preset': 5.51.0(postcss@8.5.26)
       '@wordpress/prettier-config': 4.51.0(wp-prettier@3.0.3)
-      '@wordpress/stylelint-config': 23.42.0(@types/react@18.3.28)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint-scss@6.14.0(stylelint@16.26.1(typescript@5.7.3)))(stylelint@16.26.1(typescript@5.7.3))
+      '@wordpress/stylelint-config': 23.42.0(@types/react@18.3.28)(postcss@8.5.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint-scss@6.14.0(stylelint@14.16.1))(stylelint@16.26.1(typescript@5.7.3))
       adm-zip: 0.5.17
       babel-jest: 29.7.0(@babel/core@7.25.7)
       babel-loader: 9.2.1(@babel/core@7.25.7)(webpack@5.97.1(@swc/core@1.15.24))
@@ -31043,13 +30716,13 @@ snapshots:
       resolve-bin: 0.4.3
       rtlcss: 4.3.0
       sass: 1.69.5
-      sass-loader: 16.0.7(sass-embedded@1.100.0)(sass@1.69.5)(webpack@5.97.1)
+      sass-loader: 16.0.7(sass-embedded@1.69.5)(sass@1.69.5)(webpack@5.97.1)
       schema-utils: 4.3.3
       source-map-loader: 3.0.2(webpack@5.97.1)
       stylelint: 16.26.1(typescript@5.7.3)
-      terser-webpack-plugin: 5.4.0(@swc/core@1.15.24)(uglify-js@3.19.3)(webpack@5.97.1)
+      terser-webpack-plugin: 5.4.0(@swc/core@1.15.24)(webpack@5.97.1)
       url-loader: 4.1.1(file-loader@6.2.0(webpack@5.97.1))(webpack@5.97.1)
-      webpack: 5.97.1(@swc/core@1.15.24)(uglify-js@3.19.3)(webpack-cli@5.1.4)
+      webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
       webpack-bundle-analyzer: 4.9.1
       webpack-cli: 5.1.4(webpack-bundle-analyzer@4.9.1)(webpack-dev-server@4.15.2)(webpack@5.97.1)
       webpack-dev-server: 4.15.2(webpack-cli@5.1.4)(webpack@5.97.1)
@@ -32013,8 +31686,6 @@ snapshots:

   abab@2.0.6: {}

-  abbrev@1.1.1: {}
-
   abbrev@2.0.0: {}

   abort-controller@3.0.0:
@@ -32180,8 +31851,6 @@ snapshots:

   ansi-regex@1.1.1: {}

-  ansi-regex@2.1.1: {}
-
   ansi-regex@3.0.1:
     optional: true

@@ -32191,8 +31860,6 @@ snapshots:

   ansi-regex@6.2.2: {}

-  ansi-styles@2.2.1: {}
-
   ansi-styles@3.2.1:
     dependencies:
       color-convert: 1.9.3
@@ -32253,10 +31920,6 @@ snapshots:
       call-bound: 1.0.4
       is-array-buffer: 3.0.5

-  array-each@1.0.1: {}
-
-  array-find-index@1.0.2: {}
-
   array-flatten@1.1.1: {}

   array-includes@3.1.9:
@@ -32270,8 +31933,6 @@ snapshots:
       is-string: 1.1.1
       math-intrinsics: 1.1.0

-  array-slice@1.1.0: {}
-
   array-union@1.0.2:
     dependencies:
       array-uniq: 1.0.3
@@ -32378,10 +32039,6 @@ snapshots:
     dependencies:
       retry: 0.13.1

-  async@1.5.2: {}
-
-  async@3.1.1: {}
-
   async@3.2.6: {}

   asynckit@0.4.0: {}
@@ -32812,10 +32469,6 @@ snapshots:

   browser-filesaver@1.1.1: {}

-  browserify-zlib@0.1.4:
-    dependencies:
-      pako: 0.2.9
-
   browserslist@4.19.3:
     dependencies:
       caniuse-lite: 1.0.30001788
@@ -32859,6 +32512,8 @@ snapshots:
       buffer-fill: 1.0.0
     optional: true

+  buffer-builder@0.2.0: {}
+
   buffer-crc32@0.2.13: {}

   buffer-equal-constant-time@1.0.1: {}
@@ -32967,19 +32622,12 @@ snapshots:
       pascal-case: 3.1.2
       tslib: 2.8.1

-  camelcase-keys@2.1.0:
-    dependencies:
-      camelcase: 2.1.1
-      map-obj: 1.0.1
-
   camelcase-keys@6.2.2:
     dependencies:
       camelcase: 5.3.1
       map-obj: 4.3.0
       quick-lru: 4.0.1

-  camelcase@2.1.1: {}
-
   camelcase@4.1.0:
     optional: true

@@ -33036,14 +32684,6 @@ snapshots:
       loupe: 3.2.1
       pathval: 2.0.1

-  chalk@1.1.3:
-    dependencies:
-      ansi-styles: 2.2.1
-      escape-string-regexp: 1.0.5
-      has-ansi: 2.0.0
-      strip-ansi: 3.0.1
-      supports-color: 2.0.0
-
   chalk@2.4.2:
     dependencies:
       ansi-styles: 3.2.1
@@ -33324,8 +32964,6 @@ snapshots:

   colors@1.0.3: {}

-  colors@1.1.2: {}
-
   columnify@1.5.1:
     dependencies:
       strip-ansi: 2.0.1
@@ -33405,6 +33043,7 @@ snapshots:
       inherits: 2.0.4
       readable-stream: 2.3.8
       typedarray: 0.0.6
+    optional: true

   config-chain@1.1.13:
     dependencies:
@@ -33808,10 +33447,6 @@ snapshots:

   csstype@3.2.3: {}

-  currently-unhandled@0.4.1:
-    dependencies:
-      array-find-index: 1.0.2
-
   cwd@0.10.0:
     dependencies:
       find-pkg: 0.1.2
@@ -33908,8 +33543,6 @@ snapshots:

   date-fns@4.1.0: {}

-  dateformat@4.6.3: {}
-
   debug@2.6.9:
     dependencies:
       ms: 2.0.0
@@ -34062,8 +33695,6 @@ snapshots:

   destroy@1.2.0: {}

-  detect-file@1.0.0: {}
-
   detect-newline@3.1.0: {}

   detect-node-es@1.1.0: {}
@@ -34855,8 +34486,6 @@ snapshots:

   event-target-shim@6.0.2: {}

-  eventemitter2@0.4.14: {}
-
   eventemitter3@3.1.2: {}

   eventemitter3@4.0.7: {}
@@ -34906,8 +34535,6 @@ snapshots:

   exenv@1.2.2: {}

-  exit-x@0.2.2: {}
-
   exit@0.1.2: {}

   expand-brackets@2.1.4:
@@ -34926,10 +34553,6 @@ snapshots:
     dependencies:
       os-homedir: 1.0.2

-  expand-tilde@2.0.2:
-    dependencies:
-      homedir-polyfill: 1.0.3
-
   expect-puppeteer@4.4.0: {}

   expect@29.7.0:
@@ -35021,8 +34644,6 @@ snapshots:
       assign-symbols: 1.0.0
       is-extendable: 1.0.1

-  extend@3.0.2: {}
-
   external-editor@3.1.0:
     dependencies:
       chardet: 0.7.0
@@ -35156,11 +34777,6 @@ snapshots:
     dependencies:
       commander: 14.0.3

-  figures@1.7.0:
-    dependencies:
-      escape-string-regexp: 1.0.5
-      object-assign: 4.1.1
-
   figures@3.2.0:
     dependencies:
       escape-string-regexp: 1.0.5
@@ -35184,8 +34800,6 @@ snapshots:
       webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
     optional: true

-  file-sync-cmp@0.1.1: {}
-
   filelist@1.0.6:
     dependencies:
       minimatch: 5.1.9
@@ -35257,11 +34871,6 @@ snapshots:

   find-root@1.1.0: {}

-  find-up@1.1.2:
-    dependencies:
-      path-exists: 2.1.0
-      pinkie-promise: 2.0.1
-
   find-up@3.0.0:
     dependencies:
       locate-path: 3.0.0
@@ -35285,30 +34894,6 @@ snapshots:
     dependencies:
       micromatch: 4.0.8

-  findup-sync@4.0.0:
-    dependencies:
-      detect-file: 1.0.0
-      is-glob: 4.0.3
-      micromatch: 4.0.8
-      resolve-dir: 1.0.1
-
-  findup-sync@5.0.0:
-    dependencies:
-      detect-file: 1.0.0
-      is-glob: 4.0.3
-      micromatch: 4.0.8
-      resolve-dir: 1.0.1
-
-  fined@1.2.0:
-    dependencies:
-      expand-tilde: 2.0.2
-      is-plain-object: 2.0.4
-      object.defaults: 1.1.0
-      object.pick: 1.3.0
-      parse-filepath: 1.0.2
-
-  flagged-respawn@1.0.1: {}
-
   flat-cache@3.2.0:
     dependencies:
       flatted: 3.4.2
@@ -35348,10 +34933,6 @@ snapshots:
     dependencies:
       for-in: 1.0.2

-  for-own@1.0.0:
-    dependencies:
-      for-in: 1.0.2
-
   foreground-child@2.0.0:
     dependencies:
       cross-spawn: 7.0.6
@@ -35539,8 +35120,6 @@ snapshots:
       dunder-proto: 1.0.1
       es-object-atoms: 1.1.1

-  get-stdin@4.0.1: {}
-
   get-stdin@8.0.0: {}

   get-stdin@9.0.0: {}
@@ -35574,8 +35153,6 @@ snapshots:

   get-value@2.0.6: {}

-  getobject@1.0.2: {}
-
   gettext-parser@1.4.0:
     dependencies:
       encoding: 0.1.13
@@ -35612,15 +35189,6 @@ snapshots:
       package-json-from-dist: 1.0.1
       path-scurry: 1.11.1

-  glob@7.1.7:
-    dependencies:
-      fs.realpath: 1.0.0
-      inflight: 1.0.6
-      inherits: 2.0.4
-      minimatch: 3.1.5
-      once: 1.4.0
-      path-is-absolute: 1.0.1
-
   glob@7.2.3:
     dependencies:
       fs.realpath: 1.0.0
@@ -35645,12 +35213,6 @@ snapshots:
       global-prefix: 0.1.5
       is-windows: 0.2.0

-  global-modules@1.0.0:
-    dependencies:
-      global-prefix: 1.0.2
-      is-windows: 1.0.2
-      resolve-dir: 1.0.1
-
   global-modules@2.0.0:
     dependencies:
       global-prefix: 3.0.0
@@ -35662,14 +35224,6 @@ snapshots:
       is-windows: 0.2.0
       which: 1.3.1

-  global-prefix@1.0.2:
-    dependencies:
-      expand-tilde: 2.0.2
-      homedir-polyfill: 1.0.3
-      ini: 1.3.8
-      is-windows: 1.0.2
-      which: 1.3.1
-
   global-prefix@3.0.0:
     dependencies:
       ini: 1.3.8
@@ -35802,112 +35356,6 @@ snapshots:
   growly@1.3.0:
     optional: true

-  grunt-cli@1.5.0:
-    dependencies:
-      grunt-known-options: 2.0.0
-      interpret: 1.1.0
-      liftup: 3.0.1
-      nopt: 5.0.0
-      v8flags: 4.0.1
-
-  grunt-contrib-concat@1.0.1(grunt@1.6.3):
-    dependencies:
-      chalk: 1.1.3
-      grunt: 1.6.3
-      source-map: 0.5.7
-
-  grunt-contrib-copy@1.0.0:
-    dependencies:
-      chalk: 1.1.3
-      file-sync-cmp: 0.1.1
-
-  grunt-contrib-cssmin@4.0.0:
-    dependencies:
-      chalk: 4.1.2
-      clean-css: 5.3.3
-      maxmin: 3.0.0
-
-  grunt-contrib-uglify-es@3.3.0:
-    dependencies:
-      chalk: 1.1.3
-      maxmin: 1.1.0
-      uglify-es: 3.3.9
-      uri-path: 1.0.0
-
-  grunt-known-options@2.0.0: {}
-
-  grunt-legacy-log-utils@2.1.3:
-    dependencies:
-      chalk: 4.1.2
-
-  grunt-legacy-log@3.0.1:
-    dependencies:
-      colors: 1.1.2
-      grunt-legacy-log-utils: 2.1.3
-      hooker: 0.2.3
-      lodash: 4.18.1
-
-  grunt-legacy-util@2.0.2:
-    dependencies:
-      async: 3.2.6
-      exit-x: 0.2.2
-      getobject: 1.0.2
-      hooker: 0.2.3
-      lodash: 4.18.1
-      underscore.string: 3.3.6
-      which: 2.0.2
-
-  grunt-move@1.0.3:
-    dependencies:
-      async: 3.1.1
-      chalk: 2.4.2
-
-  grunt-newer@1.3.0(grunt@1.6.3):
-    dependencies:
-      async: 1.5.2
-      grunt: 1.6.3
-      rimraf: 2.7.1
-
-  grunt-rtlcss@2.0.2:
-    dependencies:
-      chalk: 1.1.3
-      rtlcss: 2.6.2
-
-  grunt-sass@3.1.0(grunt@1.6.3):
-    dependencies:
-      grunt: 1.6.3
-
-  grunt-stylelint@0.16.0(stylelint@14.16.1):
-    dependencies:
-      chalk: 4.1.2
-      stylelint: 14.16.1
-
-  grunt@1.6.3:
-    dependencies:
-      dateformat: 4.6.3
-      eventemitter2: 0.4.14
-      exit: 0.1.2
-      findup-sync: 5.0.0
-      glob: 7.1.7
-      grunt-cli: 1.5.0
-      grunt-known-options: 2.0.0
-      grunt-legacy-log: 3.0.1
-      grunt-legacy-util: 2.0.2
-      iconv-lite: 0.6.3
-      js-yaml: 3.15.1
-      minimatch: 3.1.5
-      nopt: 5.0.0
-
-  gzip-size@1.0.0:
-    dependencies:
-      browserify-zlib: 0.1.4
-      concat-stream: 1.6.2
-
-  gzip-size@5.1.1:
-    dependencies:
-      duplexer: 0.1.2
-      pify: 4.0.1
-
   gzip-size@6.0.0:
     dependencies:
       duplexer: 0.1.2
@@ -35925,10 +35373,6 @@ snapshots:

   hard-rejection@2.1.0: {}

-  has-ansi@2.0.0:
-    dependencies:
-      ansi-regex: 2.1.1
-
   has-bigints@1.1.0: {}

   has-flag@3.0.0: {}
@@ -36016,8 +35460,6 @@ snapshots:
     dependencies:
       parse-passwd: 1.0.0

-  hooker@0.2.3: {}
-
   hookified@1.15.1: {}

   hookified@2.1.1: {}
@@ -36302,10 +35744,6 @@ snapshots:

   imurmurhash@0.1.4: {}

-  indent-string@2.1.0:
-    dependencies:
-      repeating: 2.0.1
-
   indent-string@4.0.0: {}

   indento@1.1.14: {}
@@ -36347,8 +35785,6 @@ snapshots:
       hasown: 2.0.2
       side-channel: 1.1.0

-  interpret@1.1.0: {}
-
   interpret@1.4.0: {}

   interpret@3.1.1: {}
@@ -36368,11 +35804,6 @@ snapshots:

   irregular-plurals@3.5.0: {}

-  is-absolute@1.0.0:
-    dependencies:
-      is-relative: 1.0.0
-      is-windows: 1.0.2
-
   is-accessor-descriptor@1.0.1:
     dependencies:
       hasown: 2.0.2
@@ -36471,8 +35902,6 @@ snapshots:
     dependencies:
       call-bound: 1.0.4

-  is-finite@1.1.0: {}
-
   is-fullwidth-code-point@2.0.0: {}

   is-fullwidth-code-point@3.0.0: {}
@@ -36557,10 +35986,6 @@ snapshots:
       has-tostringtag: 1.0.2
       hasown: 2.0.2

-  is-relative@1.0.0:
-    dependencies:
-      is-unc-path: 1.0.0
-
   is-retry-allowed@1.2.0: {}

   is-set@2.0.3: {}
@@ -36592,16 +36017,10 @@ snapshots:
     dependencies:
       which-typed-array: 1.1.20

-  is-unc-path@1.0.0:
-    dependencies:
-      unc-path-regex: 0.1.2
-
   is-unicode-supported@0.1.0: {}

   is-unsafe@2.0.2: {}

-  is-utf8@0.2.1: {}
-
   is-weakmap@2.0.2: {}

   is-weakref@1.1.1:
@@ -37512,17 +36931,6 @@ snapshots:
     dependencies:
       isomorphic.js: 0.2.5

-  liftup@3.0.1:
-    dependencies:
-      extend: 3.0.2
-      findup-sync: 4.0.0
-      fined: 1.2.0
-      flagged-respawn: 1.0.1
-      is-plain-object: 2.0.4
-      object.map: 1.0.1
-      rechoir: 0.7.1
-      resolve: 1.22.12
-
   lighthouse-logger@2.0.2:
     dependencies:
       debug: 4.4.3(supports-color@8.1.1)
@@ -37649,14 +37057,6 @@ snapshots:
     optionalDependencies:
       enquirer: 2.4.1

-  load-json-file@1.1.0:
-    dependencies:
-      graceful-fs: 4.2.11
-      parse-json: 2.2.0
-      pify: 2.3.0
-      pinkie-promise: 2.0.1
-      strip-bom: 2.0.0
-
   loader-runner@4.3.1: {}

   loader-utils@2.0.4:
@@ -37796,11 +37196,6 @@ snapshots:
     dependencies:
       js-tokens: 4.0.0

-  loud-rejection@1.6.0:
-    dependencies:
-      currently-unhandled: 0.4.1
-      signal-exit: 3.0.7
-
   loupe@3.2.1: {}

   lower-case@2.0.2:
@@ -37864,10 +37259,6 @@ snapshots:

   make-error@1.3.6: {}

-  make-iterator@1.0.1:
-    dependencies:
-      kind-of: 6.0.3
-
   makeerror@1.0.12:
     dependencies:
       tmpl: 1.0.5
@@ -37917,20 +37308,6 @@ snapshots:

   mathml-tag-names@2.1.3: {}

-  maxmin@1.1.0:
-    dependencies:
-      chalk: 1.1.3
-      figures: 1.7.0
-      gzip-size: 1.0.0
-      pretty-bytes: 1.0.4
-
-  maxmin@3.0.0:
-    dependencies:
-      chalk: 4.1.2
-      figures: 3.2.0
-      gzip-size: 5.1.1
-      pretty-bytes: 5.6.0
-
   md5@2.3.0:
     dependencies:
       charenc: 0.0.2
@@ -37967,19 +37344,6 @@ snapshots:

   meow@13.2.0: {}

-  meow@3.7.0:
-    dependencies:
-      camelcase-keys: 2.1.0
-      decamelize: 1.2.0
-      loud-rejection: 1.6.0
-      map-obj: 1.0.1
-      minimist: 1.2.8
-      normalize-package-data: 2.5.0
-      object-assign: 4.1.1
-      read-pkg-up: 1.0.1
-      redent: 1.0.0
-      trim-newlines: 1.0.0
-
   meow@9.0.0:
     dependencies:
       '@types/minimist': 1.2.5
@@ -38289,10 +37653,6 @@ snapshots:

   node-watch@0.7.4: {}

-  nopt@5.0.0:
-    dependencies:
-      abbrev: 1.1.1
-
   nopt@7.2.1:
     dependencies:
       abbrev: 2.0.0
@@ -38431,13 +37791,6 @@ snapshots:
       has-symbols: 1.1.0
       object-keys: 1.1.1

-  object.defaults@1.1.0:
-    dependencies:
-      array-each: 1.0.1
-      array-slice: 1.1.0
-      for-own: 1.0.0
-      isobject: 3.0.1
-
   object.entries@1.1.9:
     dependencies:
       call-bind: 1.0.9
@@ -38458,11 +37811,6 @@ snapshots:
       define-properties: 1.2.1
       es-abstract: 1.24.2

-  object.map@1.0.1:
-    dependencies:
-      for-own: 1.0.0
-      make-iterator: 1.0.1
-
   object.pick@1.3.0:
     dependencies:
       isobject: 3.0.1
@@ -38771,8 +38119,6 @@ snapshots:
       semver: 5.7.2
     optional: true

-  pako@0.2.9: {}
-
   pako@1.0.11: {}

   param-case@3.0.4:
@@ -38786,20 +38132,10 @@ snapshots:

   parse-cache-control@1.0.1: {}

-  parse-filepath@1.0.2:
-    dependencies:
-      is-absolute: 1.0.0
-      map-cache: 0.2.2
-      path-root: 0.1.1
-
   parse-imports-exports@0.2.4:
     dependencies:
       parse-statements: 1.0.11

-  parse-json@2.2.0:
-    dependencies:
-      error-ex: 1.3.4
-
   parse-json@4.0.0:
     dependencies:
       error-ex: 1.3.4
@@ -38845,10 +38181,6 @@ snapshots:
       dot-case: 3.0.4
       tslib: 2.8.1

-  path-exists@2.1.0:
-    dependencies:
-      pinkie-promise: 2.0.1
-
   path-exists@3.0.0: {}

   path-exists@4.0.0: {}
@@ -38878,12 +38210,6 @@ snapshots:

   path-parse@1.0.7: {}

-  path-root-regex@0.1.2: {}
-
-  path-root@0.1.1:
-    dependencies:
-      path-root-regex: 0.1.2
-
   path-scurry@1.11.1:
     dependencies:
       lru-cache: 10.4.3
@@ -38893,12 +38219,6 @@ snapshots:

   path-to-regexp@6.3.0: {}

-  path-type@1.1.0:
-    dependencies:
-      graceful-fs: 4.2.11
-      pify: 2.3.0
-      pinkie-promise: 2.0.1
-
   path-type@4.0.0: {}

   pathval@2.0.1: {}
@@ -39453,13 +38773,6 @@ snapshots:
   prettier@2.8.8:
     optional: true

-  pretty-bytes@1.0.4:
-    dependencies:
-      get-stdin: 4.0.1
-      meow: 3.7.0
-
-  pretty-bytes@5.6.0: {}
-
   pretty-error@4.0.0:
     dependencies:
       lodash: 4.18.1
@@ -40049,23 +39362,12 @@ snapshots:
     dependencies:
       pify: 2.3.0

-  read-pkg-up@1.0.1:
-    dependencies:
-      find-up: 1.1.2
-      read-pkg: 1.1.0
-
   read-pkg-up@7.0.1:
     dependencies:
       find-up: 4.1.0
       read-pkg: 5.2.0
       type-fest: 0.8.1

-  read-pkg@1.1.0:
-    dependencies:
-      load-json-file: 1.1.0
-      normalize-package-data: 2.5.0
-      path-type: 1.1.0
-
   read-pkg@5.2.0:
     dependencies:
       '@types/normalize-package-data': 2.4.4
@@ -40156,19 +39458,10 @@ snapshots:
     dependencies:
       resolve: 1.22.12

-  rechoir@0.7.1:
-    dependencies:
-      resolve: 1.22.12
-
   rechoir@0.8.0:
     dependencies:
       resolve: 1.22.12

-  redent@1.0.0:
-    dependencies:
-      indent-string: 2.1.0
-      strip-indent: 1.0.1
-
   redent@3.0.0:
     dependencies:
       indent-string: 4.0.0
@@ -40271,10 +39564,6 @@ snapshots:

   repeat-string@1.6.1: {}

-  repeating@2.0.1:
-    dependencies:
-      is-finite: 1.1.0
-
   replace@1.2.2:
     dependencies:
       chalk: 2.4.2
@@ -40322,11 +39611,6 @@ snapshots:
       expand-tilde: 1.2.2
       global-modules: 0.2.3

-  resolve-dir@1.0.1:
-    dependencies:
-      expand-tilde: 2.0.2
-      global-modules: 1.0.0
-
   resolve-from@4.0.0: {}

   resolve-from@5.0.0: {}
@@ -40383,6 +39667,7 @@ snapshots:
   rimraf@2.7.1:
     dependencies:
       glob: 7.2.3
+    optional: true

   rimraf@3.0.2:
     dependencies:
@@ -40493,15 +39778,30 @@ snapshots:
   sass-embedded-darwin-arm64@1.100.0:
     optional: true

+  sass-embedded-darwin-arm64@1.69.5:
+    optional: true
+
   sass-embedded-darwin-x64@1.100.0:
     optional: true

+  sass-embedded-darwin-x64@1.69.5:
+    optional: true
+
   sass-embedded-linux-arm64@1.100.0:
     optional: true

+  sass-embedded-linux-arm64@1.69.5:
+    optional: true
+
   sass-embedded-linux-arm@1.100.0:
     optional: true

+  sass-embedded-linux-arm@1.69.5:
+    optional: true
+
+  sass-embedded-linux-ia32@1.69.5:
+    optional: true
+
   sass-embedded-linux-musl-arm64@1.100.0:
     optional: true

@@ -40520,6 +39820,9 @@ snapshots:
   sass-embedded-linux-x64@1.100.0:
     optional: true

+  sass-embedded-linux-x64@1.69.5:
+    optional: true
+
   sass-embedded-unknown-all@1.100.0:
     dependencies:
       sass: 1.69.5
@@ -40528,9 +39831,15 @@ snapshots:
   sass-embedded-win32-arm64@1.100.0:
     optional: true

+  sass-embedded-win32-ia32@1.69.5:
+    optional: true
+
   sass-embedded-win32-x64@1.100.0:
     optional: true

+  sass-embedded-win32-x64@1.69.5:
+    optional: true
+
   sass-embedded@1.100.0:
     dependencies:
       '@bufbuild/protobuf': 2.14.0
@@ -40561,6 +39870,24 @@ snapshots:
       sass-embedded-win32-x64: 1.100.0
     optional: true

+  sass-embedded@1.69.5:
+    dependencies:
+      '@bufbuild/protobuf': 1.10.1
+      buffer-builder: 0.2.0
+      immutable: 4.3.9
+      rxjs: 7.8.2
+      supports-color: 8.1.1
+      varint: 6.0.0
+    optionalDependencies:
+      sass-embedded-darwin-arm64: 1.69.5
+      sass-embedded-darwin-x64: 1.69.5
+      sass-embedded-linux-arm: 1.69.5
+      sass-embedded-linux-arm64: 1.69.5
+      sass-embedded-linux-ia32: 1.69.5
+      sass-embedded-linux-x64: 1.69.5
+      sass-embedded-win32-ia32: 1.69.5
+      sass-embedded-win32-x64: 1.69.5
+
   sass-loader@10.5.2(sass@1.69.5)(webpack@5.97.1(@swc/core@1.15.24)(esbuild@0.24.2)):
     dependencies:
       klona: 2.0.6
@@ -40602,6 +39929,14 @@ snapshots:
       sass-embedded: 1.100.0
       webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)

+  sass-loader@16.0.7(sass-embedded@1.69.5)(sass@1.69.5)(webpack@5.97.1):
+    dependencies:
+      neo-async: 2.6.2
+    optionalDependencies:
+      sass: 1.69.5
+      sass-embedded: 1.69.5
+      webpack: 5.97.1(@swc/core@1.15.24)(webpack-cli@5.1.4)
+
   sass@1.69.5:
     dependencies:
       chokidar: 3.6.0
@@ -41242,10 +40577,6 @@ snapshots:
     dependencies:
       ansi-regex: 1.1.1

-  strip-ansi@3.0.1:
-    dependencies:
-      ansi-regex: 2.1.1
-
   strip-ansi@4.0.0:
     dependencies:
       ansi-regex: 3.0.1
@@ -41265,10 +40596,6 @@ snapshots:

   strip-bom-string@1.0.0: {}

-  strip-bom@2.0.0:
-    dependencies:
-      is-utf8: 0.2.1
-
   strip-bom@3.0.0: {}

   strip-bom@4.0.0: {}
@@ -41280,10 +40607,6 @@ snapshots:

   strip-final-newline@3.0.0: {}

-  strip-indent@1.0.1:
-    dependencies:
-      get-stdin: 4.0.1
-
   strip-indent@3.0.0:
     dependencies:
       min-indent: 1.0.1
@@ -41508,8 +40831,6 @@ snapshots:
     dependencies:
       copy-anything: 3.0.5

-  supports-color@2.0.0: {}
-
   supports-color@5.5.0:
     dependencies:
       has-flag: 3.0.0
@@ -41846,8 +41167,6 @@ snapshots:

   trim-html@0.1.9: {}

-  trim-newlines@1.0.0: {}
-
   trim-newlines@3.0.1: {}

   trim-repeated@1.0.0:
@@ -42028,7 +41347,8 @@ snapshots:

   typed-query-selector@2.12.1: {}

-  typedarray@0.0.6: {}
+  typedarray@0.0.6:
+    optional: true

   typescript-eslint@8.64.0(eslint@10.7.0(jiti@2.6.1))(typescript@5.7.3):
     dependencies:
@@ -42066,13 +41386,6 @@ snapshots:
       buffer: 5.7.1
       through: 2.3.8

-  unc-path-regex@0.1.2: {}
-
-  underscore.string@3.3.6:
-    dependencies:
-      sprintf-js: 1.1.3
-      util-deprecate: 1.0.2
-
   undici-types@6.21.0: {}

   undici-types@7.16.0: {}
@@ -42194,8 +41507,6 @@ snapshots:
     dependencies:
       punycode: 2.3.1

-  uri-path@1.0.0: {}
-
   urix@0.1.0: {}

   url-loader@4.1.1(file-loader@6.2.0(webpack@5.97.1))(webpack@5.97.1):
@@ -42295,8 +41606,6 @@ snapshots:
       '@types/istanbul-lib-coverage': 2.0.6
       convert-source-map: 2.0.0

-  v8flags@4.0.1: {}
-
   validate-npm-package-license@3.0.4:
     dependencies:
       spdx-correct: 3.2.0
@@ -42314,8 +41623,7 @@ snapshots:
       babel-plugin-macros: 3.1.0
       react: 18.3.1

-  varint@6.0.0:
-    optional: true
+  varint@6.0.0: {}

   vary@1.1.2: {}