diff --git a/.gitignore b/.gitignore index 6017dc0..f289a1c 100644 --- a/.gitignore +++ b/.gitignore @@ -86,6 +86,7 @@ reports/status/lighthouse-report.html lighthouse-report.html undefined*/ **/AppData/Local/lighthouse.*/ +undefined*/ # IDE files *.swp diff --git a/docs/deployment/PROXMOX_DEPLOYMENT.md b/docs/deployment/PROXMOX_DEPLOYMENT.md index 34fb272..5e2c4d5 100644 --- a/docs/deployment/PROXMOX_DEPLOYMENT.md +++ b/docs/deployment/PROXMOX_DEPLOYMENT.md @@ -34,6 +34,18 @@ curl -I -H 'Host: mim4u.org' http://192.168.11.37/ curl -I -H 'Host: mim4u.org' http://192.168.11.37/brand/logo-horizontal-nav.svg ``` +**Post-deploy smoke** (proxmox repo): + +```bash +./scripts/verify/smoke-mim4u-deploy.sh --lan +``` + +**Evidence pack** (miracles_in_motion repo, needs Chrome + Playwright): + +```bash +npm run evidence:full +``` + Public HTTPS: NPMplus proxy hosts for `mim4u.org`, `www.mim4u.org`, `secure.mim4u.org`, `training.mim4u.org` → `192.168.11.37:80`. ## CI (GitHub Actions) diff --git a/package-lock.json b/package-lock.json index ae77651..f15d5d2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,6 +35,7 @@ "zustand": "^5.0.8" }, "devDependencies": { + "@resvg/resvg-js": "^2.6.2", "@tailwindcss/typography": "^0.5.10", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.0", @@ -53,7 +54,9 @@ "eslint-plugin-react-refresh": "^0.4.4", "gh-pages": "^6.0.0", "jsdom": "^27.0.0", + "playwright": "^1.61.0", "postcss": "^8.4.31", + "potrace": "^2.1.8", "react-helmet-async": "^2.0.5", "tailwindcss": "^3.4.18", "terser": "^5.44.0", @@ -2615,6 +2618,514 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, + "node_modules/@jimp/bmp": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.14.0.tgz", + "integrity": "sha512-5RkX6tSS7K3K3xNEb2ygPuvyL9whjanhoaB/WmmXlJS6ub4DjTqrapu8j4qnIWmO4YYtFeTbDTXV6v9P1yMA5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "bmp-js": "^0.1.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/core": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.14.0.tgz", + "integrity": "sha512-S62FcKdtLtj3yWsGfJRdFXSutjvHg7aQNiFogMbwq19RP4XJWqS2nOphu7ScB8KrSlyy5nPF2hkWNhLRLyD82w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "any-base": "^1.1.0", + "buffer": "^5.2.0", + "exif-parser": "^0.1.12", + "file-type": "^9.0.0", + "load-bmfont": "^1.3.1", + "mkdirp": "^0.5.1", + "phin": "^2.9.1", + "pixelmatch": "^4.0.2", + "tinycolor2": "^1.4.1" + } + }, + "node_modules/@jimp/core/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/@jimp/custom": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.14.0.tgz", + "integrity": "sha512-kQJMeH87+kWJdVw8F9GQhtsageqqxrvzg7yyOw3Tx/s7v5RToe8RnKyMM+kVtBJtNAG+Xyv/z01uYQ2jiZ3GwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/core": "^0.14.0" + } + }, + "node_modules/@jimp/gif": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.14.0.tgz", + "integrity": "sha512-DHjoOSfCaCz72+oGGEh8qH0zE6pUBaBxPxxmpYJjkNyDZP7RkbBkZJScIYeQ7BmJxmGN4/dZn+MxamoQlr+UYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "gifwrap": "^0.9.2", + "omggif": "^1.0.9" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/jpeg": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.14.0.tgz", + "integrity": "sha512-561neGbr+87S/YVQYnZSTyjWTHBm9F6F1obYHiyU3wVmF+1CLbxY3FQzt4YolwyQHIBv36Bo0PY2KkkU8BEeeQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "jpeg-js": "^0.4.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-blit": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.14.0.tgz", + "integrity": "sha512-YoYOrnVHeX3InfgbJawAU601iTZMwEBZkyqcP1V/S33Qnz9uzH1Uj1NtC6fNgWzvX6I4XbCWwtr4RrGFb5CFrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-blur": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.14.0.tgz", + "integrity": "sha512-9WhZcofLrT0hgI7t0chf7iBQZib//0gJh9WcQMUt5+Q1Bk04dWs8vTgLNj61GBqZXgHSPzE4OpCrrLDBG8zlhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-circle": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.14.0.tgz", + "integrity": "sha512-o5L+wf6QA44tvTum5HeLyLSc5eVfIUd5ZDVi5iRfO4o6GT/zux9AxuTSkKwnjhsG8bn1dDmywAOQGAx7BjrQVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-color": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.14.0.tgz", + "integrity": "sha512-JJz512SAILYV0M5LzBb9sbOm/XEj2fGElMiHAxb7aLI6jx+n0agxtHpfpV/AePTLm1vzzDxx6AJxXbKv355hBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "tinycolor2": "^1.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-contain": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.14.0.tgz", + "integrity": "sha512-RX2q233lGyaxiMY6kAgnm9ScmEkNSof0hdlaJAVDS1OgXphGAYAeSIAwzESZN4x3ORaWvkFefeVH9O9/698Evg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5", + "@jimp/plugin-scale": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-cover": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.14.0.tgz", + "integrity": "sha512-0P/5XhzWES4uMdvbi3beUgfvhn4YuQ/ny8ijs5kkYIw6K8mHcl820HahuGpwWMx56DJLHRl1hFhJwo9CeTRJtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-crop": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5", + "@jimp/plugin-scale": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-crop": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.14.0.tgz", + "integrity": "sha512-Ojtih+XIe6/XSGtpWtbAXBozhCdsDMmy+THUJAGu2x7ZgKrMS0JotN+vN2YC3nwDpYkM+yOJImQeptSfZb2Sug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-displace": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.14.0.tgz", + "integrity": "sha512-c75uQUzMgrHa8vegkgUvgRL/PRvD7paFbFJvzW0Ugs8Wl+CDMGIPYQ3j7IVaQkIS+cAxv+NJ3TIRBQyBrfVEOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-dither": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.14.0.tgz", + "integrity": "sha512-g8SJqFLyYexXQQsoh4dc1VP87TwyOgeTElBcxSXX2LaaMZezypmxQfLTzOFzZoK8m39NuaoH21Ou1Ftsq7LzVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-fisheye": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.14.0.tgz", + "integrity": "sha512-BFfUZ64EikCaABhCA6mR3bsltWhPpS321jpeIQfJyrILdpFsZ/OccNwCgpW1XlbldDHIoNtXTDGn3E+vCE7vDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-flip": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.14.0.tgz", + "integrity": "sha512-WtL1hj6ryqHhApih+9qZQYA6Ye8a4HAmdTzLbYdTMrrrSUgIzFdiZsD0WeDHpgS/+QMsWwF+NFmTZmxNWqKfXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-rotate": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-gaussian": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.14.0.tgz", + "integrity": "sha512-uaLwQ0XAQoydDlF9tlfc7iD9drYPriFe+jgYnWm8fbw5cN+eOIcnneEX9XCOOzwgLPkNCxGox6Kxjn8zY6GxtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-invert": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.14.0.tgz", + "integrity": "sha512-UaQW9X9vx8orQXYSjT5VcITkJPwDaHwrBbxxPoDG+F/Zgv4oV9fP+udDD6qmkgI9taU+44Fy+zm/J/gGcMWrdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-mask": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.14.0.tgz", + "integrity": "sha512-tdiGM69OBaKtSPfYSQeflzFhEpoRZ+BvKfDEoivyTjauynbjpRiwB1CaiS8En1INTDwzLXTT0Be9SpI3LkJoEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-normalize": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.14.0.tgz", + "integrity": "sha512-AfY8sqlsbbdVwFGcyIPy5JH/7fnBzlmuweb+Qtx2vn29okq6+HelLjw2b+VT2btgGUmWWHGEHd86oRGSoWGyEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-print": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.14.0.tgz", + "integrity": "sha512-MwP3sH+VS5AhhSTXk7pui+tEJFsxnTKFY3TraFJb8WFbA2Vo2qsRCZseEGwpTLhENB7p/JSsLvWoSSbpmxhFAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "load-bmfont": "^1.4.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-resize": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.14.0.tgz", + "integrity": "sha512-qFeMOyXE/Bk6QXN0GQo89+CB2dQcXqoxUcDb2Ah8wdYlKqpi53skABkgVy5pW3EpiprDnzNDboMltdvDslNgLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-rotate": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.14.0.tgz", + "integrity": "sha512-aGaicts44bvpTcq5Dtf93/8TZFu5pMo/61lWWnYmwJJU1RqtQlxbCLEQpMyRhKDNSfPbuP8nyGmaqXlM/82J0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5", + "@jimp/plugin-crop": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-scale": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.14.0.tgz", + "integrity": "sha512-ZcJk0hxY5ZKZDDwflqQNHEGRblgaR+piePZm7dPwPUOSeYEH31P0AwZ1ziceR74zd8N80M0TMft+e3Td6KGBHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-shadow": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.14.0.tgz", + "integrity": "sha512-p2igcEr/iGrLiTu0YePNHyby0WYAXM14c5cECZIVnq/UTOOIQ7xIcWZJ1lRbAEPxVVXPN1UibhZAbr3HAb5BjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blur": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-threshold": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.14.0.tgz", + "integrity": "sha512-N4BlDgm/FoOMV/DQM2rSpzsgqAzkP0DXkWZoqaQrlRxQBo4zizQLzhEL00T/YCCMKnddzgEhnByaocgaaa0fKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-color": ">=0.8.0", + "@jimp/plugin-resize": ">=0.8.0" + } + }, + "node_modules/@jimp/plugins": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.14.0.tgz", + "integrity": "sha512-vDO3XT/YQlFlFLq5TqNjQkISqjBHT8VMhpWhAfJVwuXIpilxz5Glu4IDLK6jp4IjPR6Yg2WO8TmRY/HI8vLrOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/plugin-blit": "^0.14.0", + "@jimp/plugin-blur": "^0.14.0", + "@jimp/plugin-circle": "^0.14.0", + "@jimp/plugin-color": "^0.14.0", + "@jimp/plugin-contain": "^0.14.0", + "@jimp/plugin-cover": "^0.14.0", + "@jimp/plugin-crop": "^0.14.0", + "@jimp/plugin-displace": "^0.14.0", + "@jimp/plugin-dither": "^0.14.0", + "@jimp/plugin-fisheye": "^0.14.0", + "@jimp/plugin-flip": "^0.14.0", + "@jimp/plugin-gaussian": "^0.14.0", + "@jimp/plugin-invert": "^0.14.0", + "@jimp/plugin-mask": "^0.14.0", + "@jimp/plugin-normalize": "^0.14.0", + "@jimp/plugin-print": "^0.14.0", + "@jimp/plugin-resize": "^0.14.0", + "@jimp/plugin-rotate": "^0.14.0", + "@jimp/plugin-scale": "^0.14.0", + "@jimp/plugin-shadow": "^0.14.0", + "@jimp/plugin-threshold": "^0.14.0", + "timm": "^1.6.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/png": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.14.0.tgz", + "integrity": "sha512-0RV/mEIDOrPCcNfXSPmPBqqSZYwGADNRVUTyMt47RuZh7sugbYdv/uvKmQSiqRdR0L1sfbCBMWUEa5G/8MSbdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "pngjs": "^3.3.3" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/tiff": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.14.0.tgz", + "integrity": "sha512-zBYDTlutc7j88G/7FBCn3kmQwWr0rmm1e0FKB4C3uJ5oYfT8645lftUsvosKVUEfkdmOaMAnhrf4ekaHcb5gQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "utif": "^2.0.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/types": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.14.0.tgz", + "integrity": "sha512-hx3cXAW1KZm+b+XCrY3LXtdWy2U+hNtq0rPyJ7NuXCjU7lZR3vIkpz1DLJ3yDdS70hTi5QDXY3Cd9kd6DtloHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/bmp": "^0.14.0", + "@jimp/gif": "^0.14.0", + "@jimp/jpeg": "^0.14.0", + "@jimp/png": "^0.14.0", + "@jimp/tiff": "^0.14.0", + "timm": "^1.6.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/utils": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.14.0.tgz", + "integrity": "sha512-MY5KFYUru0y74IsgM/9asDwb3ERxWxXEu3CRCZEvE7DtT86y1bR1XgtlSliMrptjz4qbivNGMQSvUBpEFJDp1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "regenerator-runtime": "^0.13.3" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", @@ -2833,6 +3344,234 @@ } } }, + "node_modules/@resvg/resvg-js": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js/-/resvg-js-2.6.2.tgz", + "integrity": "sha512-xBaJish5OeGmniDj9cW5PRa/PtmuVU3ziqrbr5xJj901ZDN4TosrVaNZpEiLZAxdfnhAe7uQ7QFWfjPe9d9K2Q==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@resvg/resvg-js-android-arm-eabi": "2.6.2", + "@resvg/resvg-js-android-arm64": "2.6.2", + "@resvg/resvg-js-darwin-arm64": "2.6.2", + "@resvg/resvg-js-darwin-x64": "2.6.2", + "@resvg/resvg-js-linux-arm-gnueabihf": "2.6.2", + "@resvg/resvg-js-linux-arm64-gnu": "2.6.2", + "@resvg/resvg-js-linux-arm64-musl": "2.6.2", + "@resvg/resvg-js-linux-x64-gnu": "2.6.2", + "@resvg/resvg-js-linux-x64-musl": "2.6.2", + "@resvg/resvg-js-win32-arm64-msvc": "2.6.2", + "@resvg/resvg-js-win32-ia32-msvc": "2.6.2", + "@resvg/resvg-js-win32-x64-msvc": "2.6.2" + } + }, + "node_modules/@resvg/resvg-js-android-arm-eabi": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-android-arm-eabi/-/resvg-js-android-arm-eabi-2.6.2.tgz", + "integrity": "sha512-FrJibrAk6v29eabIPgcTUMPXiEz8ssrAk7TXxsiZzww9UTQ1Z5KAbFJs+Z0Ez+VZTYgnE5IQJqBcoSiMebtPHA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-android-arm64": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-android-arm64/-/resvg-js-android-arm64-2.6.2.tgz", + "integrity": "sha512-VcOKezEhm2VqzXpcIJoITuvUS/fcjIw5NA/w3tjzWyzmvoCdd+QXIqy3FBGulWdClvp4g+IfUemigrkLThSjAQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-darwin-arm64": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-darwin-arm64/-/resvg-js-darwin-arm64-2.6.2.tgz", + "integrity": "sha512-nmok2LnAd6nLUKI16aEB9ydMC6Lidiiq2m1nEBDR1LaaP7FGs4AJ90qDraxX+CWlVuRlvNjyYJTNv8qFjtL9+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-darwin-x64": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-darwin-x64/-/resvg-js-darwin-x64-2.6.2.tgz", + "integrity": "sha512-GInyZLjgWDfsVT6+SHxQVRwNzV0AuA1uqGsOAW+0th56J7Nh6bHHKXHBWzUrihxMetcFDmQMAX1tZ1fZDYSRsw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-linux-arm-gnueabihf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm-gnueabihf/-/resvg-js-linux-arm-gnueabihf-2.6.2.tgz", + "integrity": "sha512-YIV3u/R9zJbpqTTNwTZM5/ocWetDKGsro0SWp70eGEM9eV2MerWyBRZnQIgzU3YBnSBQ1RcxRZvY/UxwESfZIw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-linux-arm64-gnu": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm64-gnu/-/resvg-js-linux-arm64-gnu-2.6.2.tgz", + "integrity": "sha512-zc2BlJSim7YR4FZDQ8OUoJg5holYzdiYMeobb9pJuGDidGL9KZUv7SbiD4E8oZogtYY42UZEap7dqkkYuA91pg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-linux-arm64-musl": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm64-musl/-/resvg-js-linux-arm64-musl-2.6.2.tgz", + "integrity": "sha512-3h3dLPWNgSsD4lQBJPb4f+kvdOSJHa5PjTYVsWHxLUzH4IFTJUAnmuWpw4KqyQ3NA5QCyhw4TWgxk3jRkQxEKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-linux-x64-gnu": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-x64-gnu/-/resvg-js-linux-x64-gnu-2.6.2.tgz", + "integrity": "sha512-IVUe+ckIerA7xMZ50duAZzwf1U7khQe2E0QpUxu5MBJNao5RqC0zwV/Zm965vw6D3gGFUl7j4m+oJjubBVoftw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-linux-x64-musl": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-x64-musl/-/resvg-js-linux-x64-musl-2.6.2.tgz", + "integrity": "sha512-UOf83vqTzoYQO9SZ0fPl2ZIFtNIz/Rr/y+7X8XRX1ZnBYsQ/tTb+cj9TE+KHOdmlTFBxhYzVkP2lRByCzqi4jQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-win32-arm64-msvc": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-arm64-msvc/-/resvg-js-win32-arm64-msvc-2.6.2.tgz", + "integrity": "sha512-7C/RSgCa+7vqZ7qAbItfiaAWhyRSoD4l4BQAbVDqRRsRgY+S+hgS3in0Rxr7IorKUpGE69X48q6/nOAuTJQxeQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-win32-ia32-msvc": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-ia32-msvc/-/resvg-js-win32-ia32-msvc-2.6.2.tgz", + "integrity": "sha512-har4aPAlvjnLcil40AC77YDIk6loMawuJwFINEM7n0pZviwMkMvjb2W5ZirsNOZY4aDbo5tLx0wNMREp5Brk+w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@resvg/resvg-js-win32-x64-msvc": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-x64-msvc/-/resvg-js-win32-x64-msvc-2.6.2.tgz", + "integrity": "sha512-ZXtYhtUr5SSaBrUDq7DiyjOFJqBVL/dOBN7N/qmi/pO0IgiWW/f/ue3nbvu9joWE5aAKDoIzy/CxsY0suwGosQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@rolldown/pluginutils": { "version": "1.0.0-beta.27", "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", @@ -4351,6 +5090,13 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/any-base": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", + "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==", + "dev": true, + "license": "MIT" + }, "node_modules/any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", @@ -4661,6 +5407,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/bmp-js": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", + "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==", + "dev": true, + "license": "MIT" + }, "node_modules/brace-expansion": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", @@ -4758,6 +5511,16 @@ "ieee754": "^1.2.1" } }, + "node_modules/buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -4865,6 +5628,16 @@ ], "license": "CC-BY-4.0" }, + "node_modules/centra": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/centra/-/centra-2.7.0.tgz", + "integrity": "sha512-PbFMgMSrmgx6uxCdm57RUos9Tc3fclMvhLSATYN39XsDV29B89zZ3KA89jmY0vwSGazyU+uerqwa6t+KaodPcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6" + } + }, "node_modules/chai": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", @@ -5566,6 +6339,12 @@ "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "license": "MIT" }, + "node_modules/dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", + "dev": true + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -6124,6 +6903,12 @@ "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", "license": "MIT" }, + "node_modules/exif-parser": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", + "integrity": "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==", + "dev": true + }, "node_modules/expect": { "version": "30.2.0", "resolved": "https://registry.npmjs.org/expect/-/expect-30.2.0.tgz", @@ -6250,6 +7035,16 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/file-type": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", + "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/filelist": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", @@ -6371,6 +7166,27 @@ "dev": true, "license": "ISC" }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/for-each": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", @@ -6668,6 +7484,17 @@ "node": ">=10" } }, + "node_modules/gifwrap": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.9.4.tgz", + "integrity": "sha512-MDMwbhASQuVeD4JKd1fKgNgCRL3fGqMM4WaqpNhWO0JiMOAjbQdumbs4BbBZEy9/M00EHEjKN3HieVhCUlwjeQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "image-q": "^4.0.0", + "omggif": "^1.0.10" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -6724,6 +7551,17 @@ "node": "*" } }, + "node_modules/global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, "node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", @@ -7043,6 +7881,23 @@ "node": ">= 4" } }, + "node_modules/image-q": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/image-q/-/image-q-4.0.0.tgz", + "integrity": "sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "16.9.1" + } + }, + "node_modules/image-q/node_modules/@types/node": { + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz", + "integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==", + "dev": true, + "license": "MIT" + }, "node_modules/immer": { "version": "10.1.3", "resolved": "https://registry.npmjs.org/immer/-/immer-10.1.3.tgz", @@ -7324,6 +8179,13 @@ "node": ">=8" } }, + "node_modules/is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", + "dev": true, + "license": "MIT" + }, "node_modules/is-generator-function": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", @@ -7895,6 +8757,20 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/jimp": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.14.0.tgz", + "integrity": "sha512-8BXU+J8+SPmwwyq9ELihpSV4dWPTiOKBWCEgtkbnxxAVMjXdf3yGmyaLSshBfXc8sP/JQ9OZj5R8nZzz2wPXgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/custom": "^0.14.0", + "@jimp/plugins": "^0.14.0", + "@jimp/types": "^0.14.0", + "regenerator-runtime": "^0.13.3" + } + }, "node_modules/jiti": { "version": "1.21.7", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", @@ -7905,6 +8781,13 @@ "jiti": "bin/jiti.js" } }, + "node_modules/jpeg-js": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz", + "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", @@ -8101,6 +8984,37 @@ "dev": true, "license": "MIT" }, + "node_modules/load-bmfont": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.2.tgz", + "integrity": "sha512-qElWkmjW9Oq1F9EI5Gt7aD9zcdHb9spJCW1L/dmPf7KzCCEJxq8nhHz5eCgI9aMf7vrG/wyaCqdsI+Iy9ZTlog==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-equal": "0.0.1", + "mime": "^1.3.4", + "parse-bmfont-ascii": "^1.0.3", + "parse-bmfont-binary": "^1.0.5", + "parse-bmfont-xml": "^1.1.4", + "phin": "^3.7.1", + "xhr": "^2.0.1", + "xtend": "^4.0.0" + } + }, + "node_modules/load-bmfont/node_modules/phin": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/phin/-/phin-3.7.1.tgz", + "integrity": "sha512-GEazpTWwTZaEQ9RhL7Nyz0WwqilbqgLahDM3D0hxWwmVDI52nXEybHqiN6/elwpkJBhcuj+WbBu+QfT0uhPGfQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "dependencies": { + "centra": "^2.7.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -8290,6 +9204,19 @@ "integrity": "sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==", "license": "MIT" }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -8311,6 +9238,16 @@ "node": ">= 0.6" } }, + "node_modules/min-document": { + "version": "2.19.2", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.2.tgz", + "integrity": "sha512-8S5I8db/uZN8r9HSLFVWPdJCvYOejMcEC82VIzNUc6Zkklf/d1gg2psfE79/vyhWOj4+J8MtwmoOz3TmvaGu5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "dom-walk": "^0.1.0" + } + }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -8337,6 +9274,16 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/minipass": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", @@ -8347,6 +9294,19 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, "node_modules/motion-dom": { "version": "11.18.1", "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-11.18.1.tgz", @@ -8563,6 +9523,13 @@ "integrity": "sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==", "license": "MIT" }, + "node_modules/omggif": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", + "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==", + "dev": true, + "license": "MIT" + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -8657,6 +9624,13 @@ "dev": true, "license": "BlueOak-1.0.0" }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true, + "license": "(MIT AND Zlib)" + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -8670,6 +9644,38 @@ "node": ">=6" } }, + "node_modules/parse-bmfont-ascii": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", + "integrity": "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse-bmfont-binary": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", + "integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse-bmfont-xml": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.6.tgz", + "integrity": "sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-parse-from-string": "^1.0.0", + "xml2js": "^0.5.0" + } + }, + "node_modules/parse-headers": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.6.tgz", + "integrity": "sha512-Tz11t3uKztEW5FEVZnj1ox8GKblWn+PvHY9TmJV5Mll2uHEwRdR/5Li1OlXoECjLYkApdhWy44ocONwXLiKO5A==", + "dev": true, + "license": "MIT" + }, "node_modules/parse5": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", @@ -8770,6 +9776,14 @@ "node": ">= 14.16" } }, + "node_modules/phin": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", + "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -8809,6 +9823,19 @@ "node": ">= 6" } }, + "node_modules/pixelmatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", + "integrity": "sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==", + "dev": true, + "license": "ISC", + "dependencies": { + "pngjs": "^3.0.0" + }, + "bin": { + "pixelmatch": "bin/pixelmatch" + } + }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -8878,6 +9905,63 @@ "node": ">=8" } }, + "node_modules/playwright": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.61.0.tgz", + "integrity": "sha512-Z+7BeeqQPRRzklHsVFP4KTGIyMxKUmfeRA4WisM6G3/XW6nwGeX6fX9qYaDa+CiUqpOkb2f6X3nar05R3kSuJQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.61.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.61.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.61.0.tgz", + "integrity": "sha512-caX7TrY3Ml6egyDX0WUcTHDxodl/b51y5wJOdCEA36QviK/s2g081hvmGs8eaE3DWb6NYZQ6BjO/QkNRPenoPA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/playwright/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/possible-typed-array-names": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", @@ -9065,6 +10149,16 @@ "dev": true, "license": "MIT" }, + "node_modules/potrace": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/potrace/-/potrace-2.1.8.tgz", + "integrity": "sha512-V9hI7UMJyEhNZjM8CbZaP/804ZRLgzWkCS9OOYnEZkszzj3zKR/erRdj0uFMcN3pp6x4B+AIZebmkQgGRinG/g==", + "dev": true, + "license": "GPL-2.0", + "dependencies": { + "jimp": "^0.14.0" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -9114,6 +10208,16 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -9791,6 +10895,16 @@ "dev": true, "license": "MIT" }, + "node_modules/sax": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, "node_modules/saxes": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", @@ -10744,6 +11858,13 @@ "integrity": "sha512-o+qycAMZrh+TsE01GqWUxUIKR1AL0S8pq7zDkYOQw8GqfX8b8VoCKYUoHbhiX5j+7hr8XsuHDVU6+gkQJQKg9w==", "license": "MIT" }, + "node_modules/timm": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz", + "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==", + "dev": true, + "license": "MIT" + }, "node_modules/tiny-invariant": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", @@ -10757,6 +11878,13 @@ "dev": true, "license": "MIT" }, + "node_modules/tinycolor2": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", + "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", + "dev": true, + "license": "MIT" + }, "node_modules/tinyexec": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", @@ -11241,6 +12369,16 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, + "node_modules/utif": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", + "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pako": "^1.0.5" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -12273,6 +13411,19 @@ } } }, + "node_modules/xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, "node_modules/xml-name-validator": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", @@ -12283,6 +13434,37 @@ "node": ">=18" } }, + "node_modules/xml-parse-from-string": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", + "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, "node_modules/xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", @@ -12298,6 +13480,16 @@ "node": ">=0.4.0" } }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/package.json b/package.json index e4033c5..27612ef 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,12 @@ "test:watch": "vitest", "type-check": "tsc --noEmit", "validate:ci": "npm run type-check && npm run test:ci && npm run a11y:header-audit", + "brand:trace-svg": "node scripts/brand/trace-nav-svg.mjs", "a11y:header-audit": "node scripts/a11y/audit-header-wcag.mjs", "a11y:header-audit:live": "node scripts/a11y/audit-header-wcag.mjs --lighthouse", + "a11y:site-lighthouse": "node scripts/a11y/audit-site-lighthouse.mjs", + "evidence:header-screenshots": "node scripts/evidence/capture-header-screenshots.mjs", + "evidence:full": "npm run a11y:site-lighthouse && npm run evidence:header-screenshots", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", "prepreview": "npm run build", "preview": "vite preview", @@ -73,6 +77,7 @@ "zustand": "^5.0.8" }, "devDependencies": { + "@resvg/resvg-js": "^2.6.2", "@tailwindcss/typography": "^0.5.10", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.0", @@ -91,7 +96,9 @@ "eslint-plugin-react-refresh": "^0.4.4", "gh-pages": "^6.0.0", "jsdom": "^27.0.0", + "playwright": "^1.61.0", "postcss": "^8.4.31", + "potrace": "^2.1.8", "react-helmet-async": "^2.0.5", "tailwindcss": "^3.4.18", "terser": "^5.44.0", diff --git a/public/brand/BRAND_GUIDELINES.md b/public/brand/BRAND_GUIDELINES.md index 35dbdde..8d3085d 100644 --- a/public/brand/BRAND_GUIDELINES.md +++ b/public/brand/BRAND_GUIDELINES.md @@ -21,7 +21,7 @@ Logo type in lockups is part of the artwork; do not substitute fonts in the logo 1. Use approved files from this kit only. 2. Do not stretch, rotate, or change logo colors. 3. Maintain clear space around the lockup (minimum: height of the “M” in MIRACLES). -4. **Nav / web header:** use `logo-horizontal-nav.svg` (preferred), `.webp`, or `.png` (tablet/desktop) and `logo-symbol-nav.svg` or `.png` (mobile). Opaque `logo-horizontal.png` is for print, social, and partner kits only. +4. **Nav / web header:** use `logo-horizontal-nav.svg` and `logo-symbol-nav.svg` (potrace from approved PNGs; regenerated via `npm run brand:export`), with WebP/PNG fallbacks in ``. Opaque `logo-horizontal.png` is for print, social, and partner kits only. 5. **Social / square placements:** square lockup with full name. 6. **Favicon / app icon:** symbol on forest green (`#1a3c34`). 7. Co-branding and sponsor logo placement require written approval — see [mim4u.org/#/legal](https://mim4u.org/#/legal). diff --git a/public/brand/MIM4U-Brand-Kit.zip b/public/brand/MIM4U-Brand-Kit.zip index c56bce9..876ada0 100644 Binary files a/public/brand/MIM4U-Brand-Kit.zip and b/public/brand/MIM4U-Brand-Kit.zip differ diff --git a/public/brand/logo-horizontal-nav.png b/public/brand/logo-horizontal-nav.png index 1e6a6e0..b9f4507 100644 Binary files a/public/brand/logo-horizontal-nav.png and b/public/brand/logo-horizontal-nav.png differ diff --git a/public/brand/logo-horizontal-nav.svg b/public/brand/logo-horizontal-nav.svg index 779197f..ad63e1f 100644 --- a/public/brand/logo-horizontal-nav.svg +++ b/public/brand/logo-horizontal-nav.svg @@ -1,48 +1,4 @@ -

", + "nodeLabel": "We use cookies to improve your experience. By continuing, you agree to our cook…" + }, + "score": 0.00036 + }, + { + "node": { + "type": "node", + "lhId": "page-8-DIV", + "path": "1,HTML,1,BODY,0,DIV,0,DIV,3,MAIN,0,SECTION,0,DIV,0,DIV,10,DIV", + "selector": "section.hero-section > div.absolute > div.absolute > div.absolute", + "boundingRect": { + "top": 1110, + "bottom": 1112, + "left": 165, + "right": 166, + "width": 1, + "height": 1 + }, + "snippet": "

", + "nodeLabel": "section.hero-section > div.absolute > div.absolute > div.absolute" + }, + "score": 0.000058 + } + ] + }, + "guidanceLevel": 2 + }, + "long-tasks": { + "id": "long-tasks", + "title": "Avoid long main-thread tasks", + "description": "Lists the longest tasks on the main thread, useful for identifying worst contributors to input delay. [Learn how to avoid long main-thread tasks](https://web.dev/articles/optimize-long-tasks)", + "score": 1, + "scoreDisplayMode": "informative", + "displayValue": "11 long tasks found", + "metricSavings": { + "TBT": 600 + }, + "details": { + "type": "table", + "headings": [ + { + "key": "url", + "valueType": "url", + "label": "URL" + }, + { + "key": "startTime", + "valueType": "ms", + "granularity": 1, + "label": "Start Time" + }, + { + "key": "duration", + "valueType": "ms", + "granularity": 1, + "label": "Duration" + } + ], + "items": [ + { + "url": "https://mim4u.org/js/vendor-eVk5PToZ.js", + "duration": 299, + "startTime": 3012.169 + }, + { + "url": "https://mim4u.org/", + "duration": 178.9999999999999, + "startTime": 878.169 + }, + { + "url": "https://mim4u.org/js/ui-Cy2Pfd4a.js", + "duration": 171, + "startTime": 3922.169 + }, + { + "url": "https://mim4u.org/js/ui-Cy2Pfd4a.js", + "duration": 125, + "startTime": 3523.169 + }, + { + "url": "https://mim4u.org/js/vendor-eVk5PToZ.js", + "duration": 107, + "startTime": 3776.169 + }, + { + "url": "https://mim4u.org/js/vendor-eVk5PToZ.js", + "duration": 99, + "startTime": 3424.169 + }, + { + "url": "https://mim4u.org/registerSW.js", + "duration": 78, + "startTime": 3311.169 + }, + { + "url": "https://mim4u.org/js/vendor-eVk5PToZ.js", + "duration": 74, + "startTime": 3648.169 + }, + { + "url": "Unattributable", + "duration": 58, + "startTime": 820.169 + }, + { + "url": "https://mim4u.org/js/ui-Cy2Pfd4a.js", + "duration": 54, + "startTime": 3722.169 + }, + { + "url": "https://mim4u.org/js/ui-Cy2Pfd4a.js", + "duration": 54, + "startTime": 4093.169 + } + ], + "sortedBy": [ + "duration" + ], + "skipSumming": [ + "startTime" + ], + "debugData": { + "type": "debugdata", + "urls": [ + "https://mim4u.org/js/vendor-eVk5PToZ.js", + "https://mim4u.org/", + "https://mim4u.org/js/ui-Cy2Pfd4a.js", + "https://mim4u.org/registerSW.js", + "Unattributable" + ], + "tasks": [ + { + "urlIndex": 0, + "startTime": 3012.2, + "duration": 299, + "other": 299 + }, + { + "urlIndex": 1, + "startTime": 878.2, + "duration": 179, + "other": 179, + "styleLayout": 0 + }, + { + "urlIndex": 2, + "startTime": 3922.2, + "duration": 171, + "other": 171, + "paintCompositeRender": 0, + "scriptEvaluation": 0, + "styleLayout": 0 + }, + { + "urlIndex": 2, + "startTime": 3523.2, + "duration": 125, + "other": 125, + "paintCompositeRender": 0, + "scriptEvaluation": 0, + "styleLayout": 0 + }, + { + "urlIndex": 0, + "startTime": 3776.2, + "duration": 107, + "other": 107 + }, + { + "urlIndex": 0, + "startTime": 3424.2, + "duration": 99, + "other": 99 + }, + { + "urlIndex": 3, + "startTime": 3311.2, + "duration": 78, + "other": 78, + "scriptEvaluation": 0 + }, + { + "urlIndex": 0, + "startTime": 3648.2, + "duration": 74, + "other": 74, + "paintCompositeRender": 0, + "scriptEvaluation": 0, + "styleLayout": 0 + }, + { + "urlIndex": 4, + "startTime": 820.2, + "duration": 58, + "other": 58 + }, + { + "urlIndex": 2, + "startTime": 3722.2, + "duration": 54, + "other": 54, + "paintCompositeRender": 0, + "scriptEvaluation": 0, + "styleLayout": 0 + }, + { + "urlIndex": 2, + "startTime": 4093.2, + "duration": 54, + "other": 54, + "paintCompositeRender": 0, + "scriptEvaluation": 0, + "styleLayout": 0 + } + ] + } + }, + "guidanceLevel": 1 + }, + "non-composited-animations": { + "id": "non-composited-animations", + "title": "Avoid non-composited animations", + "description": "Animations which are not composited can be janky and increase CLS. [Learn how to avoid non-composited animations](https://developer.chrome.com/docs/lighthouse/performance/non-composited-animations/)", + "score": null, + "scoreDisplayMode": "notApplicable", + "metricSavings": { + "CLS": 0 + }, + "details": { + "type": "table", + "headings": [ + { + "key": "node", + "valueType": "node", + "subItemsHeading": { + "key": "failureReason", + "valueType": "text" + }, + "label": "Element" + } + ], + "items": [] + }, + "guidanceLevel": 2 + }, + "unsized-images": { + "id": "unsized-images", + "title": "Image elements have explicit `width` and `height`", + "description": "Set an explicit width and height on image elements to reduce layout shifts and improve CLS. [Learn how to set image dimensions](https://web.dev/articles/optimize-cls#images_without_dimensions)", + "score": 1, + "scoreDisplayMode": "metricSavings", + "metricSavings": { + "CLS": 0 + }, + "details": { + "type": "table", + "headings": [ + { + "key": "node", + "valueType": "node", + "label": "" + }, + { + "key": "url", + "valueType": "url", + "label": "URL" + } + ], + "items": [] + }, + "guidanceLevel": 4 + }, + "valid-source-maps": { + "id": "valid-source-maps", + "title": "Page has valid source maps", + "description": "Source maps translate minified code to the original source code. This helps developers debug in production. In addition, Lighthouse is able to provide further insights. Consider deploying source maps to take advantage of these benefits. [Learn more about source maps](https://developer.chrome.com/docs/devtools/javascript/source-maps/).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "type": "table", + "headings": [ + { + "key": "scriptUrl", + "valueType": "url", + "subItemsHeading": { + "key": "error" + }, + "label": "URL" + }, + { + "key": "sourceMapUrl", + "valueType": "url", + "label": "Map URL" + } + ], + "items": [ + { + "scriptUrl": "https://mim4u.org/js/vendor-eVk5PToZ.js", + "sourceMapUrl": "https://mim4u.org/js/vendor-eVk5PToZ.js.map", + "subItems": { + "type": "subitems", + "items": [] + } + }, + { + "scriptUrl": "https://mim4u.org/js/utils-Ch7f8Mnl.js", + "sourceMapUrl": "https://mim4u.org/js/utils-Ch7f8Mnl.js.map", + "subItems": { + "type": "subitems", + "items": [] + } + }, + { + "scriptUrl": "https://mim4u.org/js/ui-Cy2Pfd4a.js", + "sourceMapUrl": "https://mim4u.org/js/ui-Cy2Pfd4a.js.map", + "subItems": { + "type": "subitems", + "items": [] + } + }, + { + "scriptUrl": "https://mim4u.org/assets/index-CkvCcRBa.js", + "sourceMapUrl": "https://mim4u.org/assets/index-CkvCcRBa.js.map", + "subItems": { + "type": "subitems", + "items": [] + } + } + ] + } + }, + "csp-xss": { + "id": "csp-xss", + "title": "Ensure CSP is effective against XSS attacks", + "description": "A strong Content Security Policy (CSP) significantly reduces the risk of cross-site scripting (XSS) attacks. [Learn how to use a CSP to prevent XSS](https://developer.chrome.com/docs/lighthouse/best-practices/csp-xss/)", + "score": 1, + "scoreDisplayMode": "informative", + "details": { + "type": "table", + "headings": [ + { + "key": "description", + "valueType": "text", + "subItemsHeading": { + "key": "description" + }, + "label": "Description" + }, + { + "key": "directive", + "valueType": "code", + "subItemsHeading": { + "key": "directive" + }, + "label": "Directive" + }, + { + "key": "severity", + "valueType": "text", + "subItemsHeading": { + "key": "severity" + }, + "label": "Severity" + } + ], + "items": [ + { + "directive": "script-src", + "description": "`script-src` directive is missing. This can allow the execution of unsafe scripts.", + "severity": "High" + }, + { + "directive": "object-src", + "description": "Missing `object-src` allows the injection of plugins that execute unsafe scripts. Consider setting `object-src` to `'none'` if you can.", + "severity": "High" + } + ] + } + }, + "has-hsts": { + "id": "has-hsts", + "title": "Use a strong HSTS policy", + "description": "Deployment of the HSTS header significantly reduces the risk of downgrading HTTP connections and eavesdropping attacks. A rollout in stages, starting with a low max-age is recommended. [Learn more about using a strong HSTS policy.](https://developer.chrome.com/docs/lighthouse/best-practices/has-hsts)", + "score": null, + "scoreDisplayMode": "notApplicable", + "details": { + "type": "table", + "headings": [ + { + "key": "description", + "valueType": "text", + "subItemsHeading": { + "key": "description" + }, + "label": "Description" + }, + { + "key": "directive", + "valueType": "code", + "subItemsHeading": { + "key": "directive" + }, + "label": "Directive" + }, + { + "key": "severity", + "valueType": "text", + "subItemsHeading": { + "key": "severity" + }, + "label": "Severity" + } + ], + "items": [] + } + }, + "origin-isolation": { + "id": "origin-isolation", + "title": "Ensure proper origin isolation with COOP", + "description": "The Cross-Origin-Opener-Policy (COOP) can be used to isolate the top-level window from other documents such as pop-ups. [Learn more about deploying the COOP header.](https://web.dev/articles/why-coop-coep#coop)", + "score": 1, + "scoreDisplayMode": "informative", + "details": { + "type": "table", + "headings": [ + { + "key": "description", + "valueType": "text", + "subItemsHeading": { + "key": "description" + }, + "label": "Description" + }, + { + "key": "directive", + "valueType": "code", + "subItemsHeading": { + "key": "directive" + }, + "label": "Directive" + }, + { + "key": "severity", + "valueType": "text", + "subItemsHeading": { + "key": "severity" + }, + "label": "Severity" + } + ], + "items": [ + { + "description": "No COOP header found", + "severity": "High" + } + ] + } + }, + "clickjacking-mitigation": { + "id": "clickjacking-mitigation", + "title": "Mitigate clickjacking with XFO or CSP", + "description": "The `X-Frame-Options` (XFO) header or the `frame-ancestors` directive in the `Content-Security-Policy` (CSP) header control where a page can be embedded. These can mitigate clickjacking attacks by blocking some or all sites from embedding the page. [Learn more about mitigating clickjacking](https://developer.chrome.com/docs/lighthouse/best-practices/clickjacking-mitigation).", + "score": null, + "scoreDisplayMode": "notApplicable", + "details": { + "type": "table", + "headings": [ + { + "key": "description", + "valueType": "text", + "subItemsHeading": { + "key": "description" + }, + "label": "Description" + }, + { + "key": "severity", + "valueType": "text", + "subItemsHeading": { + "key": "severity" + }, + "label": "Severity" + } + ], + "items": [] + } + }, + "trusted-types-xss": { + "id": "trusted-types-xss", + "title": "Mitigate DOM-based XSS with Trusted Types", + "description": "The `require-trusted-types-for` directive in the `Content-Security-Policy` (CSP) header instructs user agents to control the data passed to DOM XSS sink functions. [Learn more about mitigating DOM-based XSS with Trusted Types](https://developer.chrome.com/docs/lighthouse/best-practices/trusted-types-xss).", + "score": 1, + "scoreDisplayMode": "informative", + "details": { + "type": "table", + "headings": [ + { + "key": "description", + "valueType": "text", + "subItemsHeading": { + "key": "description" + }, + "label": "Description" + }, + { + "key": "severity", + "valueType": "text", + "subItemsHeading": { + "key": "severity" + }, + "label": "Severity" + } + ], + "items": [ + { + "severity": "High", + "description": "No `Content-Security-Policy` header with Trusted Types directive found" + } + ] + } + }, + "script-treemap-data": { + "id": "script-treemap-data", + "title": "Script Treemap Data", + "description": "Used for treemap app", + "score": 1, + "scoreDisplayMode": "informative", + "details": { + "type": "treemap-data", + "nodes": [ + { + "name": "https://mim4u.org/registerSW.js", + "resourceBytes": 134, + "encodedBytes": 156, + "unusedBytes": 0 + }, + { + "name": "https://mim4u.org/assets/index-CkvCcRBa.js", + "resourceBytes": 271074, + "encodedBytes": 106057, + "children": [ + { + "name": "../..", + "resourceBytes": 269528, + "children": [ + { + "name": "node_modules", + "resourceBytes": 17948, + "children": [ + { + "name": "react-dom/client.js", + "resourceBytes": 81 + }, + { + "name": "i18next-http-backend/esm", + "resourceBytes": 10835, + "unusedBytes": 7561, + "children": [ + { + "name": "utils.js", + "resourceBytes": 453, + "unusedBytes": 307 + }, + { + "name": "request.js", + "resourceBytes": 5402, + "unusedBytes": 4756 + }, + { + "name": "index.js", + "resourceBytes": 4980, + "unusedBytes": 2498 + } + ] + }, + { + "name": "i18next-browser-languagedetector/dist/esm/i18nextBrowserLanguageDetector.js", + "resourceBytes": 7032, + "unusedBytes": 3458 + } + ], + "unusedBytes": 11019 + }, + { + "name": "src", + "resourceBytes": 251580, + "children": [ + { + "name": "i18n/config.ts", + "resourceBytes": 13108 + }, + { + "name": "ai/ProcessingPipeline.ts", + "resourceBytes": 6658, + "unusedBytes": 5908 + }, + { + "name": "components", + "resourceBytes": 77162, + "unusedBytes": 56721, + "children": [ + { + "name": "AIAssistancePortal.tsx", + "resourceBytes": 16567, + "unusedBytes": 15328 + }, + { + "name": "AdvancedAnalyticsDashboard.tsx", + "resourceBytes": 10709, + "unusedBytes": 10699 + }, + { + "name": "MobileVolunteerApp.tsx", + "resourceBytes": 11718, + "unusedBytes": 11714 + }, + { + "name": "StaffTrainingDashboard.tsx", + "resourceBytes": 18809, + "unusedBytes": 18805 + }, + { + "name": "MimChatAgent.tsx", + "resourceBytes": 722 + }, + { + "name": "ui", + "resourceBytes": 1837, + "children": [ + { + "name": "LogoMark.tsx", + "resourceBytes": 1757 + }, + { + "name": "Magnetic.tsx", + "resourceBytes": 80 + } + ] + }, + { + "name": "Navigation.tsx", + "resourceBytes": 4405, + "unusedBytes": 175 + }, + { + "name": "SiteHeader.tsx", + "resourceBytes": 207 + }, + { + "name": "Footer.tsx", + "resourceBytes": 7358 + }, + { + "name": "home", + "resourceBytes": 4830, + "children": [ + { + "name": "AwarenessCampaigns.tsx", + "resourceBytes": 1200 + }, + { + "name": "CommunityVideo.tsx", + "resourceBytes": 835 + }, + { + "name": "CommunityGallery.tsx", + "resourceBytes": 1660 + }, + { + "name": "WhoWeServe.tsx", + "resourceBytes": 1135 + } + ] + } + ] + }, + { + "name": "content/siteContent.ts", + "resourceBytes": 8313, + "unusedBytes": 16 + }, + { + "name": "utils/analytics.ts", + "resourceBytes": 1379, + "unusedBytes": 1263 + }, + { + "name": "pages", + "resourceBytes": 12352, + "unusedBytes": 12352, + "children": [ + { + "name": "BrandPage/BrandAssetsPage.tsx", + "resourceBytes": 5769, + "unusedBytes": 5769 + }, + { + "name": "foundation/FoundationPages.tsx", + "resourceBytes": 6583, + "unusedBytes": 6583 + } + ] + }, + { + "name": "App.tsx", + "resourceBytes": 132478, + "unusedBytes": 98662 + }, + { + "name": "main.tsx", + "resourceBytes": 130 + } + ], + "unusedBytes": 174922 + } + ], + "unusedBytes": 185941 + }, + { + "name": "(unmapped)", + "resourceBytes": 1546 + } + ], + "unusedBytes": 185941 + }, + { + "name": "https://mim4u.org/js/ui-Cy2Pfd4a.js", + "resourceBytes": 137589, + "encodedBytes": 63504, + "children": [ + { + "name": "../../node_modules", + "resourceBytes": 136260, + "children": [ + { + "name": "react", + "resourceBytes": 644, + "children": [ + { + "name": "jsx-runtime.js", + "resourceBytes": 73 + }, + { + "name": "cjs/react-jsx-runtime.production.min.js", + "resourceBytes": 571 + } + ] + }, + { + "name": "framer-motion/dist/es", + "resourceBytes": 116800, + "children": [ + { + "name": "context", + "resourceBytes": 522, + "children": [ + { + "name": "LayoutGroupContext.mjs", + "resourceBytes": 22 + }, + { + "name": "PresenceContext.mjs", + "resourceBytes": 30 + }, + { + "name": "MotionConfigContext.mjs", + "resourceBytes": 79, + "unusedBytes": 4 + }, + { + "name": "LazyContext.mjs", + "resourceBytes": 31 + }, + { + "name": "MotionContext", + "resourceBytes": 337, + "children": [ + { + "name": "index.mjs", + "resourceBytes": 28 + }, + { + "name": "create.mjs", + "resourceBytes": 171 + }, + { + "name": "utils.mjs", + "resourceBytes": 138 + } + ] + }, + { + "name": "SwitchLayoutGroupContext.mjs", + "resourceBytes": 23 + } + ], + "unusedBytes": 4 + }, + { + "name": "utils", + "resourceBytes": 4600, + "children": [ + { + "name": "use-constant.mjs", + "resourceBytes": 88 + }, + { + "name": "is-browser.mjs", + "resourceBytes": 35 + }, + { + "name": "use-isomorphic-effect.mjs", + "resourceBytes": 34 + }, + { + "name": "GlobalConfig.mjs", + "resourceBytes": 5 + }, + { + "name": "is-ref-object.mjs", + "resourceBytes": 95 + }, + { + "name": "resolve-value.mjs", + "resourceBytes": 87, + "unusedBytes": 27 + }, + { + "name": "clamp.mjs", + "resourceBytes": 26 + }, + { + "name": "shallow-compare.mjs", + "resourceBytes": 142 + }, + { + "name": "array.mjs", + "resourceBytes": 104 + }, + { + "name": "subscription-manager.mjs", + "resourceBytes": 353, + "unusedBytes": 36 + }, + { + "name": "velocity-per-second.mjs", + "resourceBytes": 38, + "unusedBytes": 38 + }, + { + "name": "is-zero-value-string.mjs", + "resourceBytes": 28 + }, + { + "name": "is-numerical-string.mjs", + "resourceBytes": 51, + "unusedBytes": 41 + }, + { + "name": "mix", + "resourceBytes": 1679, + "children": [ + { + "name": "number.mjs", + "resourceBytes": 28 + }, + { + "name": "immediate.mjs", + "resourceBytes": 35, + "unusedBytes": 35 + }, + { + "name": "color.mjs", + "resourceBytes": 428 + }, + { + "name": "visibility.mjs", + "resourceBytes": 85, + "unusedBytes": 55 + }, + { + "name": "complex.mjs", + "resourceBytes": 987, + "unusedBytes": 167 + }, + { + "name": "index.mjs", + "resourceBytes": 116 + } + ], + "unusedBytes": 257 + }, + { + "name": "hsla-to-rgba.mjs", + "resourceBytes": 372, + "unusedBytes": 372 + }, + { + "name": "pipe.mjs", + "resourceBytes": 45 + }, + { + "name": "interpolate.mjs", + "resourceBytes": 560, + "unusedBytes": 8 + }, + { + "name": "offsets", + "resourceBytes": 180, + "children": [ + { + "name": "default.mjs", + "resourceBytes": 51 + }, + { + "name": "fill.mjs", + "resourceBytes": 94 + }, + { + "name": "time.mjs", + "resourceBytes": 35 + } + ] + }, + { + "name": "distance.mjs", + "resourceBytes": 106, + "unusedBytes": 96 + }, + { + "name": "get-context-window.mjs", + "resourceBytes": 59, + "unusedBytes": 49 + }, + { + "name": "delay.mjs", + "resourceBytes": 113, + "unusedBytes": 113 + }, + { + "name": "reduced-motion", + "resourceBytes": 207, + "children": [ + { + "name": "state.mjs", + "resourceBytes": 34 + }, + { + "name": "index.mjs", + "resourceBytes": 173 + } + ] + }, + { + "name": "transform.mjs", + "resourceBytes": 193 + } + ], + "unusedBytes": 1037 + }, + { + "name": "components/AnimatePresence", + "resourceBytes": 3053, + "unusedBytes": 3003, + "children": [ + { + "name": "PopChild.mjs", + "resourceBytes": 1120, + "unusedBytes": 1091 + }, + { + "name": "PresenceChild.mjs", + "resourceBytes": 581, + "unusedBytes": 572 + }, + { + "name": "use-presence.mjs", + "resourceBytes": 231, + "unusedBytes": 231 + }, + { + "name": "utils.mjs", + "resourceBytes": 113, + "unusedBytes": 104 + }, + { + "name": "index.mjs", + "resourceBytes": 1008, + "unusedBytes": 1005 + } + ] + }, + { + "name": "frameloop", + "resourceBytes": 1422, + "children": [ + { + "name": "batcher.mjs", + "resourceBytes": 725 + }, + { + "name": "render-step.mjs", + "resourceBytes": 391 + }, + { + "name": "frame.mjs", + "resourceBytes": 115 + }, + { + "name": "microtask.mjs", + "resourceBytes": 34 + }, + { + "name": "sync-time.mjs", + "resourceBytes": 157 + } + ] + }, + { + "name": "motion", + "resourceBytes": 8966, + "children": [ + { + "name": "features", + "resourceBytes": 4648, + "children": [ + { + "name": "definitions.mjs", + "resourceBytes": 484 + }, + { + "name": "load-features.mjs", + "resourceBytes": 52 + }, + { + "name": "Feature.mjs", + "resourceBytes": 65 + }, + { + "name": "animation", + "resourceBytes": 962, + "unusedBytes": 533, + "children": [ + { + "name": "exit.mjs", + "resourceBytes": 456, + "unusedBytes": 426 + }, + { + "name": "index.mjs", + "resourceBytes": 506, + "unusedBytes": 107 + } + ] + }, + { + "name": "animations.mjs", + "resourceBytes": 43 + }, + { + "name": "layout/MeasureLayout.mjs", + "resourceBytes": 1580, + "unusedBytes": 1299 + }, + { + "name": "drag.mjs", + "resourceBytes": 68 + }, + { + "name": "viewport", + "resourceBytes": 1276, + "unusedBytes": 33, + "children": [ + { + "name": "observers.mjs", + "resourceBytes": 370, + "unusedBytes": 33 + }, + { + "name": "index.mjs", + "resourceBytes": 906 + } + ] + }, + { + "name": "gestures.mjs", + "resourceBytes": 69 + }, + { + "name": "layout.mjs", + "resourceBytes": 49 + } + ], + "unusedBytes": 1865 + }, + { + "name": "utils", + "resourceBytes": 3350, + "children": [ + { + "name": "valid-prop.mjs", + "resourceBytes": 629 + }, + { + "name": "symbol.mjs", + "resourceBytes": 45 + }, + { + "name": "use-motion-ref.mjs", + "resourceBytes": 159 + }, + { + "name": "use-visual-element.mjs", + "resourceBytes": 1555, + "unusedBytes": 87 + }, + { + "name": "use-visual-state.mjs", + "resourceBytes": 841, + "unusedBytes": 37 + }, + { + "name": "is-forced-motion-value.mjs", + "resourceBytes": 121 + } + ], + "unusedBytes": 124 + }, + { + "name": "index.mjs", + "resourceBytes": 968 + } + ], + "unusedBytes": 1989 + }, + { + "name": "render", + "resourceBytes": 29769, + "unusedBytes": 9600, + "children": [ + { + "name": "dom", + "resourceBytes": 11347, + "unusedBytes": 4017, + "children": [ + { + "name": "utils", + "resourceBytes": 1910, + "unusedBytes": 983, + "children": [ + { + "name": "filter-props.mjs", + "resourceBytes": 296, + "unusedBytes": 32 + }, + { + "name": "camel-to-dash.mjs", + "resourceBytes": 64 + }, + { + "name": "is-svg-component.mjs", + "resourceBytes": 98 + }, + { + "name": "is-css-variable.mjs", + "resourceBytes": 210 + }, + { + "name": "unit-conversion.mjs", + "resourceBytes": 867, + "unusedBytes": 676 + }, + { + "name": "css-variables-conversion.mjs", + "resourceBytes": 337, + "unusedBytes": 275 + }, + { + "name": "is-svg-element.mjs", + "resourceBytes": 38 + } + ] + }, + { + "name": "value-types", + "resourceBytes": 1369, + "children": [ + { + "name": "get-as-type.mjs", + "resourceBytes": 49 + }, + { + "name": "number-browser.mjs", + "resourceBytes": 489 + }, + { + "name": "transform.mjs", + "resourceBytes": 265 + }, + { + "name": "type-int.mjs", + "resourceBytes": 32 + }, + { + "name": "number.mjs", + "resourceBytes": 81 + }, + { + "name": "defaults.mjs", + "resourceBytes": 204 + }, + { + "name": "animatable-none.mjs", + "resourceBytes": 101, + "unusedBytes": 101 + }, + { + "name": "test.mjs", + "resourceBytes": 25 + }, + { + "name": "dimensions.mjs", + "resourceBytes": 43 + }, + { + "name": "type-auto.mjs", + "resourceBytes": 33, + "unusedBytes": 17 + }, + { + "name": "find.mjs", + "resourceBytes": 47 + } + ], + "unusedBytes": 118 + }, + { + "name": "use-render.mjs", + "resourceBytes": 246 + }, + { + "name": "DOMKeyframesResolver.mjs", + "resourceBytes": 1505, + "unusedBytes": 797 + }, + { + "name": "DOMVisualElement.mjs", + "resourceBytes": 520, + "unusedBytes": 196 + }, + { + "name": "create-visual-element.mjs", + "resourceBytes": 74 + }, + { + "name": "scroll", + "resourceBytes": 4690, + "unusedBytes": 989, + "children": [ + { + "name": "observe.mjs", + "resourceBytes": 134, + "unusedBytes": 134 + }, + { + "name": "info.mjs", + "resourceBytes": 665 + }, + { + "name": "offsets", + "resourceBytes": 1711, + "children": [ + { + "name": "edge.mjs", + "resourceBytes": 340 + }, + { + "name": "offset.mjs", + "resourceBytes": 217 + }, + { + "name": "presets.mjs", + "resourceBytes": 29 + }, + { + "name": "index.mjs", + "resourceBytes": 661 + }, + { + "name": "inset.mjs", + "resourceBytes": 464 + } + ] + }, + { + "name": "on-scroll-handler.mjs", + "resourceBytes": 468 + }, + { + "name": "track.mjs", + "resourceBytes": 859, + "unusedBytes": 227 + }, + { + "name": "index.mjs", + "resourceBytes": 853, + "unusedBytes": 628 + } + ] + }, + { + "name": "resize", + "resourceBytes": 1033, + "unusedBytes": 934, + "children": [ + { + "name": "handle-element.mjs", + "resourceBytes": 714, + "unusedBytes": 686 + }, + { + "name": "handle-window.mjs", + "resourceBytes": 272, + "unusedBytes": 248 + }, + { + "name": "index.mjs", + "resourceBytes": 47 + } + ] + } + ] + }, + { + "name": "components", + "resourceBytes": 381, + "unusedBytes": 15, + "children": [ + { + "name": "create-proxy.mjs", + "resourceBytes": 165, + "unusedBytes": 15 + }, + { + "name": "create-factory.mjs", + "resourceBytes": 182 + }, + { + "name": "motion", + "resourceBytes": 34, + "children": [ + { + "name": "proxy.mjs", + "resourceBytes": 5 + }, + { + "name": "create.mjs", + "resourceBytes": 29 + } + ] + } + ] + }, + { + "name": "utils", + "resourceBytes": 5746, + "children": [ + { + "name": "is-variant-label.mjs", + "resourceBytes": 57 + }, + { + "name": "variant-props.mjs", + "resourceBytes": 109 + }, + { + "name": "is-controlling-variants.mjs", + "resourceBytes": 101 + }, + { + "name": "resolve-variants.mjs", + "resourceBytes": 342, + "unusedBytes": 116 + }, + { + "name": "resolve-dynamic-variants.mjs", + "resourceBytes": 79 + }, + { + "name": "setters.mjs", + "resourceBytes": 203, + "unusedBytes": 203 + }, + { + "name": "KeyframesResolver.mjs", + "resourceBytes": 1633, + "unusedBytes": 442 + }, + { + "name": "get-variant-context.mjs", + "resourceBytes": 266 + }, + { + "name": "animation-state.mjs", + "resourceBytes": 2326, + "unusedBytes": 204 + }, + { + "name": "compare-by-depth.mjs", + "resourceBytes": 32, + "unusedBytes": 22 + }, + { + "name": "flat-tree.mjs", + "resourceBytes": 235, + "unusedBytes": 135 + }, + { + "name": "motion-values.mjs", + "resourceBytes": 363 + } + ], + "unusedBytes": 1122 + }, + { + "name": "svg", + "resourceBytes": 3132, + "children": [ + { + "name": "lowercase-elements.mjs", + "resourceBytes": 213 + }, + { + "name": "utils", + "resourceBytes": 1626, + "unusedBytes": 1139, + "children": [ + { + "name": "path.mjs", + "resourceBytes": 270, + "unusedBytes": 152 + }, + { + "name": "transform-origin.mjs", + "resourceBytes": 133, + "unusedBytes": 133 + }, + { + "name": "build-attrs.mjs", + "resourceBytes": 512, + "unusedBytes": 512 + }, + { + "name": "create-render-state.mjs", + "resourceBytes": 31, + "unusedBytes": 27 + }, + { + "name": "is-svg-tag.mjs", + "resourceBytes": 50, + "unusedBytes": 46 + }, + { + "name": "camel-case-attrs.mjs", + "resourceBytes": 361 + }, + { + "name": "render.mjs", + "resourceBytes": 106, + "unusedBytes": 106 + }, + { + "name": "scrape-motion-values.mjs", + "resourceBytes": 163, + "unusedBytes": 163 + } + ] + }, + { + "name": "config-motion.mjs", + "resourceBytes": 607, + "unusedBytes": 469 + }, + { + "name": "use-props.mjs", + "resourceBytes": 205, + "unusedBytes": 205 + }, + { + "name": "SVGVisualElement.mjs", + "resourceBytes": 481, + "unusedBytes": 460 + } + ], + "unusedBytes": 2273 + }, + { + "name": "html", + "resourceBytes": 2924, + "children": [ + { + "name": "utils", + "resourceBytes": 1822, + "children": [ + { + "name": "keys-transform.mjs", + "resourceBytes": 188 + }, + { + "name": "build-transform.mjs", + "resourceBytes": 401 + }, + { + "name": "build-styles.mjs", + "resourceBytes": 394 + }, + { + "name": "create-render-state.mjs", + "resourceBytes": 215, + "unusedBytes": 98 + }, + { + "name": "render.mjs", + "resourceBytes": 134 + }, + { + "name": "scrape-motion-values.mjs", + "resourceBytes": 214 + }, + { + "name": "keys-position.mjs", + "resourceBytes": 73 + }, + { + "name": "make-none-animatable.mjs", + "resourceBytes": 203 + } + ], + "unusedBytes": 98 + }, + { + "name": "config-motion.mjs", + "resourceBytes": 78 + }, + { + "name": "use-props.mjs", + "resourceBytes": 566 + }, + { + "name": "HTMLVisualElement.mjs", + "resourceBytes": 458, + "unusedBytes": 68 + } + ], + "unusedBytes": 166 + }, + { + "name": "store.mjs", + "resourceBytes": 15 + }, + { + "name": "VisualElement.mjs", + "resourceBytes": 6224, + "unusedBytes": 2007 + } + ] + }, + { + "name": "animation", + "resourceBytes": 17136, + "children": [ + { + "name": "utils", + "resourceBytes": 806, + "children": [ + { + "name": "is-animation-controls.mjs", + "resourceBytes": 78 + }, + { + "name": "is-keyframes-target.mjs", + "resourceBytes": 29 + }, + { + "name": "is-none.mjs", + "resourceBytes": 85 + }, + { + "name": "is-animatable.mjs", + "resourceBytes": 140 + }, + { + "name": "default-transitions.mjs", + "resourceBytes": 305, + "unusedBytes": 150 + }, + { + "name": "is-transition-defined.mjs", + "resourceBytes": 169 + } + ], + "unusedBytes": 150 + }, + { + "name": "optimized-appear", + "resourceBytes": 67, + "children": [ + { + "name": "data-id.mjs", + "resourceBytes": 33 + }, + { + "name": "get-appear-id.mjs", + "resourceBytes": 34, + "unusedBytes": 34 + } + ], + "unusedBytes": 34 + }, + { + "name": "animators", + "resourceBytes": 9960, + "children": [ + { + "name": "waapi", + "resourceBytes": 561, + "children": [ + { + "name": "utils", + "resourceBytes": 227, + "children": [ + { + "name": "get-final-keyframe.mjs", + "resourceBytes": 155 + }, + { + "name": "supports-waapi.mjs", + "resourceBytes": 72 + } + ] + }, + { + "name": "index.mjs", + "resourceBytes": 334 + } + ] + }, + { + "name": "BaseAnimation.mjs", + "resourceBytes": 1133, + "unusedBytes": 67 + }, + { + "name": "utils", + "resourceBytes": 347, + "children": [ + { + "name": "can-animate.mjs", + "resourceBytes": 285 + }, + { + "name": "accelerated-values.mjs", + "resourceBytes": 62 + } + ] + }, + { + "name": "drivers/driver-frameloop.mjs", + "resourceBytes": 135 + }, + { + "name": "MainThreadAnimation.mjs", + "resourceBytes": 4464, + "unusedBytes": 892 + }, + { + "name": "AcceleratedAnimation.mjs", + "resourceBytes": 3320, + "unusedBytes": 1899 + } + ], + "unusedBytes": 2858 + }, + { + "name": "generators", + "resourceBytes": 3482, + "unusedBytes": 2951, + "children": [ + { + "name": "utils/velocity.mjs", + "resourceBytes": 65, + "unusedBytes": 65 + }, + { + "name": "spring", + "resourceBytes": 2349, + "children": [ + { + "name": "defaults.mjs", + "resourceBytes": 131 + }, + { + "name": "find.mjs", + "resourceBytes": 687, + "unusedBytes": 667 + }, + { + "name": "index.mjs", + "resourceBytes": 1531, + "unusedBytes": 1466 + } + ], + "unusedBytes": 2133 + }, + { + "name": "inertia.mjs", + "resourceBytes": 753, + "unusedBytes": 753 + }, + { + "name": "keyframes.mjs", + "resourceBytes": 315 + } + ] + }, + { + "name": "interfaces", + "resourceBytes": 2742, + "unusedBytes": 978, + "children": [ + { + "name": "motion-value.mjs", + "resourceBytes": 763, + "unusedBytes": 34 + }, + { + "name": "visual-element-target.mjs", + "resourceBytes": 787, + "unusedBytes": 30 + }, + { + "name": "visual-element-variant.mjs", + "resourceBytes": 902, + "unusedBytes": 902 + }, + { + "name": "visual-element.mjs", + "resourceBytes": 290, + "unusedBytes": 12 + } + ] + }, + { + "name": "animate/single-value.mjs", + "resourceBytes": 79, + "unusedBytes": 79 + } + ], + "unusedBytes": 7050 + }, + { + "name": "value", + "resourceBytes": 7341, + "children": [ + { + "name": "utils", + "resourceBytes": 95, + "children": [ + { + "name": "is-motion-value.mjs", + "resourceBytes": 32 + }, + { + "name": "resolve-motion-value.mjs", + "resourceBytes": 63 + } + ] + }, + { + "name": "types", + "resourceBytes": 3598, + "children": [ + { + "name": "numbers", + "resourceBytes": 366, + "children": [ + { + "name": "index.mjs", + "resourceBytes": 119 + }, + { + "name": "units.mjs", + "resourceBytes": 247, + "unusedBytes": 101 + } + ], + "unusedBytes": 101 + }, + { + "name": "utils", + "resourceBytes": 341, + "children": [ + { + "name": "sanitize.mjs", + "resourceBytes": 34 + }, + { + "name": "float-regex.mjs", + "resourceBytes": 33 + }, + { + "name": "single-color-regex.mjs", + "resourceBytes": 127 + }, + { + "name": "is-nullish.mjs", + "resourceBytes": 27 + }, + { + "name": "color-regex.mjs", + "resourceBytes": 120 + } + ] + }, + { + "name": "color", + "resourceBytes": 1350, + "children": [ + { + "name": "utils.mjs", + "resourceBytes": 292 + }, + { + "name": "rgba.mjs", + "resourceBytes": 254 + }, + { + "name": "hex.mjs", + "resourceBytes": 375, + "unusedBytes": 321 + }, + { + "name": "hsla.mjs", + "resourceBytes": 224, + "unusedBytes": 146 + }, + { + "name": "index.mjs", + "resourceBytes": 205 + } + ], + "unusedBytes": 467 + }, + { + "name": "complex", + "resourceBytes": 1541, + "unusedBytes": 367, + "children": [ + { + "name": "index.mjs", + "resourceBytes": 1163, + "unusedBytes": 110 + }, + { + "name": "filter.mjs", + "resourceBytes": 378, + "unusedBytes": 257 + } + ] + } + ], + "unusedBytes": 935 + }, + { + "name": "index.mjs", + "resourceBytes": 2361, + "unusedBytes": 594 + }, + { + "name": "use-will-change", + "resourceBytes": 101, + "children": [ + { + "name": "add-will-change.mjs", + "resourceBytes": 72 + }, + { + "name": "is.mjs", + "resourceBytes": 29 + } + ] + }, + { + "name": "use-scroll.mjs", + "resourceBytes": 521 + }, + { + "name": "use-combine-values.mjs", + "resourceBytes": 167 + }, + { + "name": "use-motion-value.mjs", + "resourceBytes": 138, + "unusedBytes": 20 + }, + { + "name": "use-transform.mjs", + "resourceBytes": 278 + }, + { + "name": "use-computed.mjs", + "resourceBytes": 82, + "unusedBytes": 82 + } + ], + "unusedBytes": 1631 + }, + { + "name": "projection", + "resourceBytes": 30652, + "unusedBytes": 26238, + "children": [ + { + "name": "styles", + "resourceBytes": 1127, + "unusedBytes": 1081, + "children": [ + { + "name": "scale-correction.mjs", + "resourceBytes": 40, + "unusedBytes": 28 + }, + { + "name": "scale-border-radius.mjs", + "resourceBytes": 223, + "unusedBytes": 203 + }, + { + "name": "scale-box-shadow.mjs", + "resourceBytes": 315, + "unusedBytes": 301 + }, + { + "name": "transform.mjs", + "resourceBytes": 549, + "unusedBytes": 549 + } + ] + }, + { + "name": "geometry", + "resourceBytes": 4347, + "unusedBytes": 4233, + "children": [ + { + "name": "delta-calc.mjs", + "resourceBytes": 652, + "unusedBytes": 652 + }, + { + "name": "models.mjs", + "resourceBytes": 1272, + "unusedBytes": 1262 + }, + { + "name": "conversion.mjs", + "resourceBytes": 292, + "unusedBytes": 292 + }, + { + "name": "delta-apply.mjs", + "resourceBytes": 966, + "unusedBytes": 924 + }, + { + "name": "copy.mjs", + "resourceBytes": 185, + "unusedBytes": 185 + }, + { + "name": "delta-remove.mjs", + "resourceBytes": 509, + "unusedBytes": 447 + }, + { + "name": "utils.mjs", + "resourceBytes": 471, + "unusedBytes": 471 + } + ] + }, + { + "name": "utils", + "resourceBytes": 465, + "unusedBytes": 465, + "children": [ + { + "name": "each-axis.mjs", + "resourceBytes": 37, + "unusedBytes": 37 + }, + { + "name": "has-transform.mjs", + "resourceBytes": 273, + "unusedBytes": 273 + }, + { + "name": "measure.mjs", + "resourceBytes": 155, + "unusedBytes": 155 + } + ] + }, + { + "name": "node", + "resourceBytes": 22768, + "children": [ + { + "name": "state.mjs", + "resourceBytes": 55 + }, + { + "name": "create-projection-node.mjs", + "resourceBytes": 22129, + "unusedBytes": 18391 + }, + { + "name": "DocumentProjectionNode.mjs", + "resourceBytes": 233, + "unusedBytes": 139 + }, + { + "name": "HTMLProjectionNode.mjs", + "resourceBytes": 351, + "unusedBytes": 138 + } + ], + "unusedBytes": 18668 + }, + { + "name": "animation/mix-values.mjs", + "resourceBytes": 811, + "unusedBytes": 667 + }, + { + "name": "shared/stack.mjs", + "resourceBytes": 1134, + "unusedBytes": 1124 + } + ] + }, + { + "name": "easing", + "resourceBytes": 824, + "children": [ + { + "name": "cubic-bezier.mjs", + "resourceBytes": 275 + }, + { + "name": "modifiers", + "resourceBytes": 65, + "unusedBytes": 45, + "children": [ + { + "name": "mirror.mjs", + "resourceBytes": 47, + "unusedBytes": 34 + }, + { + "name": "reverse.mjs", + "resourceBytes": 18, + "unusedBytes": 11 + } + ] + }, + { + "name": "back.mjs", + "resourceBytes": 44 + }, + { + "name": "anticipate.mjs", + "resourceBytes": 53, + "unusedBytes": 49 + }, + { + "name": "circ.mjs", + "resourceBytes": 51, + "unusedBytes": 27 + }, + { + "name": "ease.mjs", + "resourceBytes": 59 + }, + { + "name": "utils", + "resourceBytes": 277, + "children": [ + { + "name": "map.mjs", + "resourceBytes": 233 + }, + { + "name": "is-easing-array.mjs", + "resourceBytes": 44 + } + ] + } + ], + "unusedBytes": 121 + }, + { + "name": "events", + "resourceBytes": 216, + "unusedBytes": 148, + "children": [ + { + "name": "add-dom-event.mjs", + "resourceBytes": 98, + "unusedBytes": 30 + }, + { + "name": "event-info.mjs", + "resourceBytes": 76, + "unusedBytes": 76 + }, + { + "name": "add-pointer-event.mjs", + "resourceBytes": 42, + "unusedBytes": 42 + } + ] + }, + { + "name": "gestures", + "resourceBytes": 12299, + "unusedBytes": 12083, + "children": [ + { + "name": "pan", + "resourceBytes": 2957, + "unusedBytes": 2917, + "children": [ + { + "name": "PanSession.mjs", + "resourceBytes": 2205, + "unusedBytes": 2195 + }, + { + "name": "index.mjs", + "resourceBytes": 752, + "unusedBytes": 722 + } + ] + }, + { + "name": "drag", + "resourceBytes": 8112, + "unusedBytes": 8055, + "children": [ + { + "name": "utils/constraints.mjs", + "resourceBytes": 916, + "unusedBytes": 903 + }, + { + "name": "VisualElementDragControls.mjs", + "resourceBytes": 6858, + "unusedBytes": 6833 + }, + { + "name": "index.mjs", + "resourceBytes": 338, + "unusedBytes": 319 + } + ] + }, + { + "name": "hover.mjs", + "resourceBytes": 319, + "unusedBytes": 240 + }, + { + "name": "press.mjs", + "resourceBytes": 404, + "unusedBytes": 384 + }, + { + "name": "focus.mjs", + "resourceBytes": 507, + "unusedBytes": 487 + } + ] + } + ], + "unusedBytes": 62904 + }, + { + "name": "motion-utils/dist/es", + "resourceBytes": 149, + "children": [ + { + "name": "noop.mjs", + "resourceBytes": 7 + }, + { + "name": "errors.mjs", + "resourceBytes": 12 + }, + { + "name": "memo.mjs", + "resourceBytes": 54 + }, + { + "name": "progress.mjs", + "resourceBytes": 54 + }, + { + "name": "time-conversion.mjs", + "resourceBytes": 22, + "unusedBytes": 8 + } + ], + "unusedBytes": 8 + }, + { + "name": "motion-dom/dist/es", + "resourceBytes": 4526, + "unusedBytes": 3047, + "children": [ + { + "name": "utils", + "resourceBytes": 514, + "unusedBytes": 34, + "children": [ + { + "name": "supports", + "resourceBytes": 302, + "unusedBytes": 34, + "children": [ + { + "name": "scroll-timeline.mjs", + "resourceBytes": 47, + "unusedBytes": 34 + }, + { + "name": "flags.mjs", + "resourceBytes": 25 + }, + { + "name": "memo.mjs", + "resourceBytes": 90 + }, + { + "name": "linear-easing.mjs", + "resourceBytes": 140 + } + ] + }, + { + "name": "is-bezier-definition.mjs", + "resourceBytes": 52 + }, + { + "name": "resolve-elements.mjs", + "resourceBytes": 160 + } + ] + }, + { + "name": "animation", + "resourceBytes": 2018, + "unusedBytes": 1362, + "children": [ + { + "name": "controls", + "resourceBytes": 1084, + "unusedBytes": 1053, + "children": [ + { + "name": "BaseGroup.mjs", + "resourceBytes": 1000, + "unusedBytes": 990 + }, + { + "name": "Group.mjs", + "resourceBytes": 84, + "unusedBytes": 63 + } + ] + }, + { + "name": "utils/get-value-transition.mjs", + "resourceBytes": 52 + }, + { + "name": "generators/utils", + "resourceBytes": 151, + "unusedBytes": 96, + "children": [ + { + "name": "calc-duration.mjs", + "resourceBytes": 109, + "unusedBytes": 96 + }, + { + "name": "is-generator.mjs", + "resourceBytes": 42 + } + ] + }, + { + "name": "waapi/utils", + "resourceBytes": 731, + "unusedBytes": 213, + "children": [ + { + "name": "attach-timeline.mjs", + "resourceBytes": 46, + "unusedBytes": 46 + }, + { + "name": "linear.mjs", + "resourceBytes": 149, + "unusedBytes": 145 + }, + { + "name": "easing.mjs", + "resourceBytes": 536, + "unusedBytes": 22 + } + ] + } + ] + }, + { + "name": "gestures", + "resourceBytes": 1994, + "unusedBytes": 1651, + "children": [ + { + "name": "drag/state", + "resourceBytes": 164, + "unusedBytes": 143, + "children": [ + { + "name": "is-active.mjs", + "resourceBytes": 53, + "unusedBytes": 32 + }, + { + "name": "set-active.mjs", + "resourceBytes": 111, + "unusedBytes": 111 + } + ] + }, + { + "name": "utils", + "resourceBytes": 249, + "unusedBytes": 137, + "children": [ + { + "name": "setup.mjs", + "resourceBytes": 111, + "unusedBytes": 13 + }, + { + "name": "is-node-or-child.mjs", + "resourceBytes": 52, + "unusedBytes": 42 + }, + { + "name": "is-primary-pointer.mjs", + "resourceBytes": 86, + "unusedBytes": 82 + } + ] + }, + { + "name": "hover.mjs", + "resourceBytes": 339, + "unusedBytes": 205 + }, + { + "name": "press", + "resourceBytes": 1242, + "unusedBytes": 1166, + "children": [ + { + "name": "utils", + "resourceBytes": 579, + "unusedBytes": 503, + "children": [ + { + "name": "is-keyboard-accessible.mjs", + "resourceBytes": 110, + "unusedBytes": 55 + }, + { + "name": "state.mjs", + "resourceBytes": 21 + }, + { + "name": "keyboard.mjs", + "resourceBytes": 448, + "unusedBytes": 448 + } + ] + }, + { + "name": "index.mjs", + "resourceBytes": 663, + "unusedBytes": 663 + } + ] + } + ] + } + ] + }, + { + "name": "lucide-react/dist/esm", + "resourceBytes": 14141, + "children": [ + { + "name": "shared/src/utils.js", + "resourceBytes": 142 + }, + { + "name": "defaultAttributes.js", + "resourceBytes": 177 + }, + { + "name": "Icon.js", + "resourceBytes": 343 + }, + { + "name": "createLucideIcon.js", + "resourceBytes": 167 + }, + { + "name": "icons", + "resourceBytes": 13312, + "children": [ + { + "name": "activity.js", + "resourceBytes": 171 + }, + { + "name": "arrow-right.js", + "resourceBytes": 101 + }, + { + "name": "award.js", + "resourceBytes": 211 + }, + { + "name": "backpack.js", + "resourceBytes": 326 + }, + { + "name": "bell.js", + "resourceBytes": 145 + }, + { + "name": "book-open-text.js", + "resourceBytes": 363 + }, + { + "name": "brain.js", + "resourceBytes": 671 + }, + { + "name": "building-2.js", + "resourceBytes": 375 + }, + { + "name": "calendar.js", + "resourceBytes": 194 + }, + { + "name": "chart-column.js", + "resourceBytes": 187 + }, + { + "name": "check.js", + "resourceBytes": 61 + }, + { + "name": "circle-alert.js", + "resourceBytes": 186 + }, + { + "name": "circle-check.js", + "resourceBytes": 114 + }, + { + "name": "clipboard-list.js", + "resourceBytes": 347 + }, + { + "name": "clock.js", + "resourceBytes": 120 + }, + { + "name": "cpu.js", + "resourceBytes": 433 + }, + { + "name": "credit-card.js", + "resourceBytes": 143 + }, + { + "name": "database.js", + "resourceBytes": 180 + }, + { + "name": "dollar-sign.js", + "resourceBytes": 155 + }, + { + "name": "download.js", + "resourceBytes": 199 + }, + { + "name": "external-link.js", + "resourceBytes": 187 + }, + { + "name": "eye.js", + "resourceBytes": 193 + }, + { + "name": "file-check.js", + "resourceBytes": 202 + }, + { + "name": "file-text.js", + "resourceBytes": 269 + }, + { + "name": "globe.js", + "resourceBytes": 179 + }, + { + "name": "heart.js", + "resourceBytes": 182 + }, + { + "name": "house.js", + "resourceBytes": 226 + }, + { + "name": "instagram.js", + "resourceBytes": 233 + }, + { + "name": "lock.js", + "resourceBytes": 143 + }, + { + "name": "mail.js", + "resourceBytes": 152 + }, + { + "name": "map-pin.js", + "resourceBytes": 195 + }, + { + "name": "menu.js", + "resourceBytes": 179 + }, + { + "name": "moon.js", + "resourceBytes": 79 + }, + { + "name": "package.js", + "resourceBytes": 296 + }, + { + "name": "palette.js", + "resourceBytes": 552 + }, + { + "name": "phone.js", + "resourceBytes": 331 + }, + { + "name": "plus.js", + "resourceBytes": 90 + }, + { + "name": "printer.js", + "resourceBytes": 256 + }, + { + "name": "quote.js", + "resourceBytes": 326 + }, + { + "name": "school.js", + "resourceBytes": 311 + }, + { + "name": "settings.js", + "resourceBytes": 662 + }, + { + "name": "shield.js", + "resourceBytes": 209 + }, + { + "name": "shirt.js", + "resourceBytes": 223 + }, + { + "name": "sparkles.js", + "resourceBytes": 445 + }, + { + "name": "star.js", + "resourceBytes": 147 + }, + { + "name": "sun-medium.js", + "resourceBytes": 417 + }, + { + "name": "target.js", + "resourceBytes": 163 + }, + { + "name": "trending-up.js", + "resourceBytes": 141 + }, + { + "name": "truck.js", + "resourceBytes": 343 + }, + { + "name": "type.js", + "resourceBytes": 181 + }, + { + "name": "user-check.js", + "resourceBytes": 190 + }, + { + "name": "users.js", + "resourceBytes": 241 + }, + { + "name": "wifi-off.js", + "resourceBytes": 396 + }, + { + "name": "x.js", + "resourceBytes": 91 + }, + { + "name": "zap.js", + "resourceBytes": 200 + } + ] + } + ] + } + ], + "unusedBytes": 65959 + }, + { + "name": "(unmapped)", + "resourceBytes": 1329 + } + ], + "unusedBytes": 65959 + }, + { + "name": "https://mim4u.org/js/vendor-eVk5PToZ.js", + "resourceBytes": 139382, + "encodedBytes": 64050, + "unusedBytes": 54262, + "children": [ + { + "name": "../../node_modules", + "resourceBytes": 138759, + "unusedBytes": 54262, + "children": [ + { + "name": "react", + "resourceBytes": 6524, + "unusedBytes": 3834, + "children": [ + { + "name": "cjs/react.production.min.js", + "resourceBytes": 6419, + "unusedBytes": 3834 + }, + { + "name": "index.js", + "resourceBytes": 105 + } + ] + }, + { + "name": "scheduler", + "resourceBytes": 3713, + "children": [ + { + "name": "index.js", + "resourceBytes": 31 + }, + { + "name": "cjs/scheduler.production.min.js", + "resourceBytes": 3682, + "unusedBytes": 707 + } + ], + "unusedBytes": 707 + }, + { + "name": "react-dom", + "resourceBytes": 128522, + "unusedBytes": 49721, + "children": [ + { + "name": "cjs/react-dom.production.min.js", + "resourceBytes": 128273, + "unusedBytes": 49721 + }, + { + "name": "index.js", + "resourceBytes": 249 + } + ] + } + ] + }, + { + "name": "(unmapped)", + "resourceBytes": 623 + } + ] + }, + { + "name": "https://mim4u.org/js/utils-Ch7f8Mnl.js", + "resourceBytes": 52180, + "encodedBytes": 23017, + "unusedBytes": 31580, + "children": [ + { + "name": "../../node_modules", + "resourceBytes": 52100, + "unusedBytes": 31580, + "children": [ + { + "name": "react-i18next/dist/es", + "resourceBytes": 834, + "unusedBytes": 24, + "children": [ + { + "name": "unescape.js", + "resourceBytes": 392, + "unusedBytes": 24 + }, + { + "name": "defaults.js", + "resourceBytes": 232 + }, + { + "name": "initReactI18next.js", + "resourceBytes": 47 + }, + { + "name": "context.js", + "resourceBytes": 20 + }, + { + "name": "I18nextProvider.js", + "resourceBytes": 143 + } + ] + }, + { + "name": "i18next/dist/esm/i18next.js", + "resourceBytes": 42016, + "unusedBytes": 27644 + }, + { + "name": "date-fns", + "resourceBytes": 9250, + "unusedBytes": 3912, + "children": [ + { + "name": "constants.js", + "resourceBytes": 59, + "unusedBytes": 11 + }, + { + "name": "constructFrom.js", + "resourceBytes": 138, + "unusedBytes": 138 + }, + { + "name": "toDate.js", + "resourceBytes": 32, + "unusedBytes": 32 + }, + { + "name": "_lib", + "resourceBytes": 352, + "unusedBytes": 342, + "children": [ + { + "name": "defaultOptions.js", + "resourceBytes": 13, + "unusedBytes": 3 + }, + { + "name": "getTimezoneOffsetInMilliseconds.js", + "resourceBytes": 202, + "unusedBytes": 202 + }, + { + "name": "normalizeDates.js", + "resourceBytes": 88, + "unusedBytes": 88 + }, + { + "name": "getRoundingMethod.js", + "resourceBytes": 49, + "unusedBytes": 49 + } + ] + }, + { + "name": "compareAsc.js", + "resourceBytes": 61, + "unusedBytes": 61 + }, + { + "name": "isLastDayOfMonth.js", + "resourceBytes": 49, + "unusedBytes": 49 + }, + { + "name": "endOfDay.js", + "resourceBytes": 60, + "unusedBytes": 60 + }, + { + "name": "endOfMonth.js", + "resourceBytes": 112, + "unusedBytes": 112 + }, + { + "name": "differenceInMonths.js", + "resourceBytes": 252, + "unusedBytes": 252 + }, + { + "name": "differenceInCalendarMonths.js", + "resourceBytes": 107, + "unusedBytes": 107 + }, + { + "name": "differenceInSeconds.js", + "resourceBytes": 47, + "unusedBytes": 47 + }, + { + "name": "differenceInMilliseconds.js", + "resourceBytes": 34, + "unusedBytes": 34 + }, + { + "name": "locale", + "resourceBytes": 6865, + "unusedBytes": 1623, + "children": [ + { + "name": "en-US/_lib", + "resourceBytes": 5390, + "unusedBytes": 358, + "children": [ + { + "name": "formatDistance.js", + "resourceBytes": 1090, + "unusedBytes": 175 + }, + { + "name": "formatLong.js", + "resourceBytes": 407 + }, + { + "name": "formatRelative.js", + "resourceBytes": 162, + "unusedBytes": 16 + }, + { + "name": "localize.js", + "resourceBytes": 1947, + "unusedBytes": 144 + }, + { + "name": "match.js", + "resourceBytes": 1784, + "unusedBytes": 23 + } + ] + }, + { + "name": "_lib", + "resourceBytes": 1343, + "unusedBytes": 1265, + "children": [ + { + "name": "buildFormatLongFn.js", + "resourceBytes": 125, + "unusedBytes": 103 + }, + { + "name": "buildLocalizeFn.js", + "resourceBytes": 394, + "unusedBytes": 372 + }, + { + "name": "buildMatchFn.js", + "resourceBytes": 562, + "unusedBytes": 540 + }, + { + "name": "buildMatchPatternFn.js", + "resourceBytes": 262, + "unusedBytes": 250 + } + ] + }, + { + "name": "en-US.js", + "resourceBytes": 132 + } + ] + }, + { + "name": "formatDistance.js", + "resourceBytes": 972, + "unusedBytes": 972 + }, + { + "name": "formatDistanceToNow.js", + "resourceBytes": 74, + "unusedBytes": 36 + }, + { + "name": "constructNow.js", + "resourceBytes": 36, + "unusedBytes": 36 + } + ] + } + ] + }, + { + "name": "(unmapped)", + "resourceBytes": 80 + } + ] + } + ] + } + }, + "accesskeys": { + "id": "accesskeys", + "title": "`[accesskey]` values are unique", + "description": "Access keys let users quickly focus a part of the page. For proper navigation, each access key must be unique. [Learn more about access keys](https://dequeuniversity.com/rules/axe/4.12/accesskeys).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "aria-allowed-attr": { + "id": "aria-allowed-attr", + "title": "`[aria-*]` attributes match their roles", + "description": "Each ARIA `role` supports a specific subset of `aria-*` attributes. Mismatching these invalidates the `aria-*` attributes. [Learn how to match ARIA attributes to their roles](https://dequeuniversity.com/rules/axe/4.12/aria-allowed-attr).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "type": "table", + "headings": [ + { + "key": "node", + "valueType": "node", + "subItemsHeading": { + "key": "relatedNode", + "valueType": "node" + }, + "label": "Failing Elements" + } + ], + "items": [] + } + }, + "aria-allowed-role": { + "id": "aria-allowed-role", + "title": "Uses ARIA roles only on compatible elements", + "description": "Many HTML elements can only be assigned certain ARIA roles. Using ARIA roles where they are not allowed can interfere with the accessibility of the web page. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.12/aria-allowed-role).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "aria-command-name": { + "id": "aria-command-name", + "title": "`button`, `link`, and `menuitem` elements have accessible names", + "description": "When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn how to make command elements more accessible](https://dequeuniversity.com/rules/axe/4.12/aria-command-name).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "aria-conditional-attr": { + "id": "aria-conditional-attr", + "title": "ARIA attributes are used as specified for the element's role", + "description": "Some ARIA attributes are only allowed on an element under certain conditions. [Learn more about conditional ARIA attributes](https://dequeuniversity.com/rules/axe/4.12/aria-conditional-attr).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "type": "table", + "headings": [ + { + "key": "node", + "valueType": "node", + "subItemsHeading": { + "key": "relatedNode", + "valueType": "node" + }, + "label": "Failing Elements" + } + ], + "items": [] + } + }, + "aria-deprecated-role": { + "id": "aria-deprecated-role", + "title": "Deprecated ARIA roles were not used", + "description": "Deprecated ARIA roles may not be processed correctly by assistive technology. [Learn more about deprecated ARIA roles](https://dequeuniversity.com/rules/axe/4.12/aria-deprecated-role).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "type": "table", + "headings": [ + { + "key": "node", + "valueType": "node", + "subItemsHeading": { + "key": "relatedNode", + "valueType": "node" + }, + "label": "Failing Elements" + } + ], + "items": [] + } + }, + "aria-dialog-name": { + "id": "aria-dialog-name", + "title": "Elements with `role=\"dialog\"` or `role=\"alertdialog\"` have accessible names.", + "description": "ARIA dialog elements without accessible names may prevent screen readers users from discerning the purpose of these elements. [Learn how to make ARIA dialog elements more accessible](https://dequeuniversity.com/rules/axe/4.12/aria-dialog-name).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "type": "table", + "headings": [ + { + "key": "node", + "valueType": "node", + "subItemsHeading": { + "key": "relatedNode", + "valueType": "node" + }, + "label": "Failing Elements" + } + ], + "items": [] + } + }, + "aria-hidden-body": { + "id": "aria-hidden-body", + "title": "`[aria-hidden=\"true\"]` is not present on the document ``", + "description": "Assistive technologies, like screen readers, work inconsistently when `aria-hidden=\"true\"` is set on the document ``. [Learn how `aria-hidden` affects the document body](https://dequeuniversity.com/rules/axe/4.12/aria-hidden-body).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "type": "table", + "headings": [ + { + "key": "node", + "valueType": "node", + "subItemsHeading": { + "key": "relatedNode", + "valueType": "node" + }, + "label": "Failing Elements" + } + ], + "items": [] + } + }, + "aria-hidden-focus": { + "id": "aria-hidden-focus", + "title": "`[aria-hidden=\"true\"]` elements do not contain focusable descendents", + "description": "Focusable descendents within an `[aria-hidden=\"true\"]` element prevent those interactive elements from being available to users of assistive technologies like screen readers. [Learn how `aria-hidden` affects focusable elements](https://dequeuniversity.com/rules/axe/4.12/aria-hidden-focus).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "type": "table", + "headings": [ + { + "key": "node", + "valueType": "node", + "subItemsHeading": { + "key": "relatedNode", + "valueType": "node" + }, + "label": "Failing Elements" + } + ], + "items": [] + } + }, + "aria-input-field-name": { + "id": "aria-input-field-name", + "title": "ARIA input fields have accessible names", + "description": "When an input field doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more about input field labels](https://dequeuniversity.com/rules/axe/4.12/aria-input-field-name).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "aria-meter-name": { + "id": "aria-meter-name", + "title": "ARIA `meter` elements have accessible names", + "description": "When a meter element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn how to name `meter` elements](https://dequeuniversity.com/rules/axe/4.12/aria-meter-name).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "aria-progressbar-name": { + "id": "aria-progressbar-name", + "title": "ARIA `progressbar` elements have accessible names", + "description": "When a `progressbar` element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn how to label `progressbar` elements](https://dequeuniversity.com/rules/axe/4.12/aria-progressbar-name).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "aria-prohibited-attr": { + "id": "aria-prohibited-attr", + "title": "Elements use only permitted ARIA attributes", + "description": "Using ARIA attributes in roles where they are prohibited can mean that important information is not communicated to users of assistive technologies. [Learn more about prohibited ARIA roles](https://dequeuniversity.com/rules/axe/4.12/aria-prohibited-attr).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "type": "table", + "headings": [ + { + "key": "node", + "valueType": "node", + "subItemsHeading": { + "key": "relatedNode", + "valueType": "node" + }, + "label": "Failing Elements" + } + ], + "items": [] + } + }, + "aria-required-attr": { + "id": "aria-required-attr", + "title": "`[role]`s have all required `[aria-*]` attributes", + "description": "Some ARIA roles have required attributes that describe the state of the element to screen readers. [Learn more about roles and required attributes](https://dequeuniversity.com/rules/axe/4.12/aria-required-attr).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "type": "table", + "headings": [ + { + "key": "node", + "valueType": "node", + "subItemsHeading": { + "key": "relatedNode", + "valueType": "node" + }, + "label": "Failing Elements" + } + ], + "items": [] + } + }, + "aria-required-children": { + "id": "aria-required-children", + "title": "Elements with an ARIA `[role]` that require children to contain a specific `[role]` have all required children.", + "description": "Some ARIA parent roles must contain specific child roles to perform their intended accessibility functions. [Learn more about roles and required children elements](https://dequeuniversity.com/rules/axe/4.12/aria-required-children).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "aria-required-parent": { + "id": "aria-required-parent", + "title": "`[role]`s are contained by their required parent element", + "description": "Some ARIA child roles must be contained by specific parent roles to properly perform their intended accessibility functions. [Learn more about ARIA roles and required parent element](https://dequeuniversity.com/rules/axe/4.12/aria-required-parent).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "aria-roles": { + "id": "aria-roles", + "title": "`[role]` values are valid", + "description": "ARIA roles must have valid values in order to perform their intended accessibility functions. [Learn more about valid ARIA roles](https://dequeuniversity.com/rules/axe/4.12/aria-roles).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "type": "table", + "headings": [ + { + "key": "node", + "valueType": "node", + "subItemsHeading": { + "key": "relatedNode", + "valueType": "node" + }, + "label": "Failing Elements" + } + ], + "items": [] + } + }, + "aria-text": { + "id": "aria-text", + "title": "Elements with the `role=text` attribute do not have focusable descendents.", + "description": "Adding `role=text` around a text node split by markup enables VoiceOver to treat it as one phrase, but the element's focusable descendents will not be announced. [Learn more about the `role=text` attribute](https://dequeuniversity.com/rules/axe/4.12/aria-text).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "aria-toggle-field-name": { + "id": "aria-toggle-field-name", + "title": "ARIA toggle fields have accessible names", + "description": "When a toggle field doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more about toggle fields](https://dequeuniversity.com/rules/axe/4.12/aria-toggle-field-name).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "aria-tooltip-name": { + "id": "aria-tooltip-name", + "title": "ARIA `tooltip` elements have accessible names", + "description": "When a tooltip element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn how to name `tooltip` elements](https://dequeuniversity.com/rules/axe/4.12/aria-tooltip-name).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "aria-treeitem-name": { + "id": "aria-treeitem-name", + "title": "ARIA `treeitem` elements have accessible names", + "description": "When a `treeitem` element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more about labeling `treeitem` elements](https://dequeuniversity.com/rules/axe/4.12/aria-treeitem-name).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "aria-valid-attr-value": { + "id": "aria-valid-attr-value", + "title": "`[aria-*]` attributes have valid values", + "description": "Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid values. [Learn more about valid values for ARIA attributes](https://dequeuniversity.com/rules/axe/4.12/aria-valid-attr-value).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "type": "table", + "headings": [ + { + "key": "node", + "valueType": "node", + "subItemsHeading": { + "key": "relatedNode", + "valueType": "node" + }, + "label": "Failing Elements" + } + ], + "items": [] + } + }, + "aria-valid-attr": { + "id": "aria-valid-attr", + "title": "`[aria-*]` attributes are valid and not misspelled", + "description": "Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid names. [Learn more about valid ARIA attributes](https://dequeuniversity.com/rules/axe/4.12/aria-valid-attr).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "type": "table", + "headings": [ + { + "key": "node", + "valueType": "node", + "subItemsHeading": { + "key": "relatedNode", + "valueType": "node" + }, + "label": "Failing Elements" + } + ], + "items": [] + } + }, + "button-name": { + "id": "button-name", + "title": "Buttons have an accessible name", + "description": "When a button doesn't have an accessible name, screen readers announce it as \"button\", making it unusable for users who rely on screen readers. [Learn how to make buttons more accessible](https://dequeuniversity.com/rules/axe/4.12/button-name).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "type": "table", + "headings": [ + { + "key": "node", + "valueType": "node", + "subItemsHeading": { + "key": "relatedNode", + "valueType": "node" + }, + "label": "Failing Elements" + } + ], + "items": [] + } + }, + "bypass": { + "id": "bypass", + "title": "The page contains a heading, skip link, or landmark region", + "description": "Adding ways to bypass repetitive content lets keyboard users navigate the page more efficiently. [Learn more about bypass blocks](https://dequeuniversity.com/rules/axe/4.12/bypass).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "color-contrast": { + "id": "color-contrast", + "title": "Background and foreground colors have a sufficient contrast ratio", + "description": "Low-contrast text is difficult or impossible for many users to read. [Learn how to provide sufficient color contrast](https://dequeuniversity.com/rules/axe/4.12/color-contrast).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "type": "table", + "headings": [ + { + "key": "node", + "valueType": "node", + "subItemsHeading": { + "key": "relatedNode", + "valueType": "node" + }, + "label": "Failing Elements" + } + ], + "items": [] + } + }, + "definition-list": { + "id": "definition-list", + "title": "`
`'s contain only properly-ordered `
` and `
` groups, `