From 05a27fc19c52c90d74c4f73475437d52a87f5154 Mon Sep 17 00:00:00 2001 From: mifi Date: Fri, 13 Feb 2026 18:09:10 -0300 Subject: [PATCH] Wire it all up... --- .devcontainer/devcontainer.json | 27 + .dockerignore | 7 + .gitignore | 6 +- .prettierignore | 3 + .prettierrc | 26 +- .vscode/settings.json | 2 +- Dockerfile | 2 +- README.md | 24 +- docker-compose.yml | 49 +- eslint.config.js | 20 + package.json | 57 +- pnpm-lock.yaml | 2283 +++++++++++++++++ scripts/build.js | 78 + src.delete/assets/css/accordion.css | 93 - src.delete/assets/css/settings.css | 106 - src.delete/assets/css/style.css | 145 -- src.delete/assets/js/accordion.js | 28 - .../assets/media/embed-badge-emailtest.svg | 1 - .../assets/media/embed-badge-websitetest.svg | 1 - src.delete/help/index.html | 146 -- src.delete/index.html | 34 - src/assets/css/site.css | 299 +++ src/assets/images/apple-touch-icon.png | Bin 0 -> 3737 bytes src/assets/images/favicon.ico | Bin 0 -> 4286 bytes src/assets/images/favicon.svg | 9 + src/assets/js/ga-init.js | 11 + src/help/index.html | 669 +++-- src/index.html | 163 +- stylelint.config.js | 8 + 29 files changed, 3219 insertions(+), 1078 deletions(-) create mode 100644 .devcontainer/devcontainer.json create mode 100644 eslint.config.js create mode 100644 pnpm-lock.yaml create mode 100644 scripts/build.js delete mode 100644 src.delete/assets/css/accordion.css delete mode 100644 src.delete/assets/css/settings.css delete mode 100644 src.delete/assets/css/style.css delete mode 100644 src.delete/assets/js/accordion.js delete mode 100644 src.delete/assets/media/embed-badge-emailtest.svg delete mode 100644 src.delete/assets/media/embed-badge-websitetest.svg delete mode 100644 src.delete/help/index.html delete mode 100644 src.delete/index.html create mode 100644 src/assets/css/site.css create mode 100644 src/assets/images/apple-touch-icon.png create mode 100644 src/assets/images/favicon.ico create mode 100644 src/assets/images/favicon.svg create mode 100644 src/assets/js/ga-init.js create mode 100644 stylelint.config.js diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..f0e3786 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,27 @@ +{ + "name": "mail-landing", + "image": "mcr.microsoft.com/devcontainers/javascript-node:1-22-bookworm", + "onCreateCommand": "npm install -g pnpm@10", + "postCreateCommand": "pnpm install", + "forwardPorts": [3000], + "portsAttributes": { + "3000": { + "label": "Preview", + "onAutoForward": "notify" + } + }, + "customizations": { + "vscode": { + "extensions": [ + "esbenp.prettier-vscode", + "stylelint.vscode-stylelint", + "dbaeumer.vscode-eslint" + ], + "settings": { + "editor.formatOnSave": true, + "editor.defaultFormatter": "esbenp.prettier-vscode" + } + } + }, + "remoteUser": "node" +} diff --git a/.dockerignore b/.dockerignore index 20b13a7..c69d732 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,9 +1,16 @@ # Avoid sending secrets or dev tooling into the build context # config/ and plugins/ are included (no secrets; PHP configs read from ENV at runtime) +.devcontainer +.pnpm-store +.vscode +.woodpecker node_modules +scripts .git .prettierrc .prettierignore *.md .env .env.* +stylelint.config.js +eslint.config.js \ No newline at end of file diff --git a/.gitignore b/.gitignore index 048d79a..7b01683 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,10 @@ +.pnpm-store + .env .env.* !.env.example node_modules -pnpm-lock.yaml +.eslintcache +.stylelintcache +dist diff --git a/.prettierignore b/.prettierignore index ee89780..1d85994 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,2 +1,5 @@ +.pnpm-store node_modules pnpm-lock.yaml + +dist diff --git a/.prettierrc b/.prettierrc index 85b0780..9358f75 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,15 +1,15 @@ { - "semi": false, - "singleQuote": true, - "tabWidth": 2, - "trailingComma": "none", - "overrides": [ - { - "files": "*.yml", - "options": { - "tabWidth": 4, - "proseWrap": "preserve" - } - } - ] + "semi": false, + "singleQuote": true, + "tabWidth": 4, + "trailingComma": "none", + "overrides": [ + { + "files": "*.yml", + "options": { + "tabWidth": 4, + "proseWrap": "preserve" + } + } + ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index 9e26dfe..0967ef4 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1 +1 @@ -{} \ No newline at end of file +{} diff --git a/Dockerfile b/Dockerfile index 675a1ed..465f3e0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ FROM nginx:alpine COPY nginx/conf.d/ /etc/nginx/conf.d/ -COPY src/ /usr/share/nginx/html/ +COPY dist/ /usr/share/nginx/html/ diff --git a/README.md b/README.md index 604ebda..1e29962 100644 --- a/README.md +++ b/README.md @@ -1 +1,23 @@ -# Simple Package (Docker) +# mail-landing + +Static landing site for mail.mifi.holdings (HTML/CSS/JS), built to `dist/` and served with nginx in production. + +## Dev Container (local development and preview) + +1. **Open in Dev Container** + In Cursor/VS Code: _Command Palette_ → **Dev Containers: Reopen in Container** (or **Clone Repository in Container Volume** when opening the repo). + The first time will build the container (Node 22 + pnpm) and run `pnpm install`. + +2. **Preview the site** + In the container terminal: + - **Quick preview** (serves `src/` as-is, no build): + `pnpm preview` + - **Production-like preview** (build then serve `dist/`): + `pnpm preview:prod` + + Port **3000** is forwarded; open **http://localhost:3000** in the host browser (or use the “Preview” port notification). + +3. **Other commands** + - `pnpm build` — build `src/` → `dist/` (minify JS/CSS, inline critical CSS) + - `pnpm lint` / `pnpm format` — lint and format + - `pnpm docker:build` — build production image diff --git a/docker-compose.yml b/docker-compose.yml index b717932..2cbf4da 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,34 +1,25 @@ services: - service: - image: git.mifi.dev/...:${IMAGE_TAG:-latest} - container_name: service - environment: - - ENV_NAME=value - healthcheck: - test: - [ - 'CMD', - '/usr/local/bin/healthcheck.sh', - '--connect', - '--innodb_initialized' - ] - retries: 10 - start_period: 20s - networks: - - network - volumes: - - volume:/var/lib/... - - other_volume:/var/lib/... - depends_on: - - other service + mail-landing: + image: git.mifi.dev/mifi-holdings/mail-landing:latest + container_name: mifi-mail-landing restart: unless-stopped + networks: + - marina-net + labels: + - 'traefik.enable=true' + - 'traefik.docker.network=marina-net' + - 'traefik.http.routers.mail-landing.rule=Host(`mail.mifi.holdings`)' + - 'traefik.http.routers.mail-landing.entrypoints=websecure' + - 'traefik.http.routers.mail-landing.middlewares=gzip@file,security-supermax-with-analytics@file' + - 'traefik.http.routers.mail-landing.tls=true' + - 'traefik.http.routers.mail-landing.tls.certresolver=letsencrypt' + - 'traefik.http.services.mail-landing.loadbalancer.server.port=80' + healthcheck: + test: ['CMD-SHELL', 'wget --spider -q http://localhost/ || exit 1'] + interval: 20s + timeout: 3s + retries: 3 networks: - network: + marina-net: external: true - -volumes: - volume: - external: true - other_volume: - external: false \ No newline at end of file diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..88e0620 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,20 @@ +import prettierConfig from 'eslint-config-prettier/flat' + +export default [ + { + files: ['src/**/*.js'], + languageOptions: { + ecmaVersion: 'latest', + sourceType: 'script', + globals: { + window: 'readonly', + document: 'readonly', + dataLayer: 'writable' + } + }, + rules: { + 'no-unused-vars': ['warn', { argsIgnorePattern: '^_' }] + } + }, + prettierConfig +] diff --git a/package.json b/package.json index e12d6bc..817f2ae 100644 --- a/package.json +++ b/package.json @@ -1,21 +1,40 @@ { - "name": "...", - "version": "1.0.0", - "private": true, - "packageManager": "pnpm@10.29.3", - "scripts": { - "format": "prettier --write .", - "format:check": "prettier --check .", - "lint": "yamllint .woodpecker/ci.yml .woodpecker/build.yml .woodpecker/deploy.yml docker-compose.yml", - "docker:build": "docker build --platform linux/amd64 -t git.mifi.dev/.../...:latest .", - "docker:push": "docker push git.mifi.dev/.../...:latest" - }, - "devDependencies": { - "prettier": "^3.4.2", - "yaml-lint": "^1.7.0" - }, - "repository": { - "type": "git", - "url": "https://github.com/.../...git" - } + "name": "mail-landing", + "type": "module", + "version": "1.0.0", + "private": true, + "packageManager": "pnpm@10.29.3", + "scripts": { + "build": "node scripts/build.js", + "docker:build": "docker build --platform linux/amd64 -t git.mifi.dev/mifi-holdings/mail-landing:latest .", + "docker:push": "docker push git.mifi.dev/mifi-holdings/mail-landing:latest", + "format": "prettier --write .", + "format:check": "prettier --check .", + "lint": "pnpm run lint:yaml && pnpm run lint:js && pnpm run lint:css", + "lint:css": "stylelint \"src/**/*.css\"", + "lint:js": "eslint src/", + "lint:yaml": "yamllint .woodpecker/ci.yml .woodpecker/build.yml .woodpecker/deploy.yml docker-compose.yml", + "lint:fix": "pnpm run lint:fix:js && pnpm run lint:fix:css && pnpm run lint:fix:yaml", + "lint:fix:js": "eslint src/ --fix", + "lint:fix:css": "stylelint \"src/**/*.css\" --fix", + "lint:fix:yaml": "yamllint .woodpecker/ci.yml .woodpecker/build.yml .woodpecker/deploy.yml docker-compose.yml --fix", + "preview": "serve src -l 3000", + "preview:prod": "pnpm build && serve dist -l 3000" + }, + "devDependencies": { + "beasties": "^0.4.1", + "clean-css": "^5.3.3", + "eslint": "^10.0.0", + "eslint-config-prettier": "^10.1.8", + "prettier": "^3.4.2", + "serve": "^14.2.4", + "stylelint": "^17.3.0", + "stylelint-config-standard": "^40.0.0", + "terser": "^5.46.0", + "yaml-lint": "^1.7.0" + }, + "repository": { + "type": "git", + "url": "https://github.com/mifi-holdings/mail-landing.git" + } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..1531b80 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,2283 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + devDependencies: + beasties: + specifier: ^0.4.1 + version: 0.4.1 + clean-css: + specifier: ^5.3.3 + version: 5.3.3 + eslint: + specifier: ^10.0.0 + version: 10.0.0 + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.0.0) + prettier: + specifier: ^3.4.2 + version: 3.8.1 + serve: + specifier: ^14.2.4 + version: 14.2.5 + stylelint: + specifier: ^17.3.0 + version: 17.3.0 + stylelint-config-standard: + specifier: ^40.0.0 + version: 40.0.0(stylelint@17.3.0) + terser: + specifier: ^5.46.0 + version: 5.46.0 + yaml-lint: + specifier: ^1.7.0 + version: 1.7.0 + +packages: + + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@cacheable/memory@2.0.7': + resolution: {integrity: sha512-RbxnxAMf89Tp1dLhXMS7ceft/PGsDl1Ip7T20z5nZ+pwIAsQ1p2izPjVG69oCLv/jfQ7HDPHTWK0c9rcAWXN3A==} + + '@cacheable/utils@2.3.4': + resolution: {integrity: sha512-knwKUJEYgIfwShABS1BX6JyJJTglAFcEU7EXqzTdiGCXur4voqkiJkdgZIQtWNFhynzDWERcTYv/sETMu3uJWA==} + + '@csstools/css-calc@3.1.1': + resolution: {integrity: sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 + + '@csstools/css-parser-algorithms@4.0.0': + resolution: {integrity: sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@csstools/css-tokenizer': ^4.0.0 + + '@csstools/css-syntax-patches-for-csstree@1.0.27': + resolution: {integrity: sha512-sxP33Jwg1bviSUXAV43cVYdmjt2TLnLXNqCWl9xmxHawWVjGz/kEbdkr7F9pxJNBN2Mh+dq0crgItbW6tQvyow==} + + '@csstools/css-tokenizer@4.0.0': + resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} + engines: {node: '>=20.19.0'} + + '@csstools/media-query-list-parser@5.0.0': + resolution: {integrity: sha512-T9lXmZOfnam3eMERPsszjY5NK0jX8RmThmmm99FZ8b7z8yMaFZWKwLWGZuTwdO3ddRY5fy13GmmEYZXB4I98Eg==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 + + '@csstools/selector-resolve-nested@4.0.0': + resolution: {integrity: sha512-9vAPxmp+Dx3wQBIUwc1v7Mdisw1kbbaGqXUM8QLTgWg7SoPGYtXBsMXvsFs/0Bn5yoFhcktzxNZGNaUt0VjgjA==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss-selector-parser: ^7.1.1 + + '@csstools/selector-specificity@6.0.0': + resolution: {integrity: sha512-4sSgl78OtOXEX/2d++8A83zHNTgwCJMaR24FvsYL7Uf/VS8HZk9PTwR51elTbGqMuwH3szLvvOXEaVnqn0Z3zA==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss-selector-parser: ^7.1.1 + + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.23.1': + resolution: {integrity: sha512-uVSdg/V4dfQmTjJzR0szNczjOH/J+FyUMMjYtr07xFRXR7EDf9i1qdxrD0VusZH9knj1/ecxzCQQxyic5NzAiA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/config-helpers@0.5.2': + resolution: {integrity: sha512-a5MxrdDXEvqnIq+LisyCX6tQMPF/dSJpCfBgBauY+pNZ28yCtSsTvyTYrMhaI+LK26bVyCJfJkT0u8KIj2i1dQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/core@1.1.0': + resolution: {integrity: sha512-/nr9K9wkr3P1EzFTdFdMoLuo1PmIxjmwvPozwoSodjNBdefGujXQUF93u1DDZpEaTuDvMsIQddsd35BwtrW9Xw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/object-schema@3.0.1': + resolution: {integrity: sha512-P9cq2dpr+LU8j3qbLygLcSZrl2/ds/pUpfnHNNuk5HW7mnngHs+6WSq5C9mO3rqRX8A1poxqLTC9cu0KOyJlBg==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/plugin-kit@0.6.0': + resolution: {integrity: sha512-bIZEUzOI1jkhviX2cp5vNyXQc6olzb2ohewQubuYlMXZ2Q/XjBO0x0XhGPvc9fjSIiUN0vw+0hq53BJ4eQSJKQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@isaacs/cliui@9.0.0': + resolution: {integrity: sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==} + engines: {node: '>=18'} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.11': + resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@keyv/bigmap@1.3.1': + resolution: {integrity: sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==} + engines: {node: '>= 18'} + peerDependencies: + keyv: ^5.6.0 + + '@keyv/serialize@1.1.1': + resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} + + '@types/esrecurse@4.3.1': + resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@zeit/schemas@2.36.0': + resolution: {integrity: sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + + arch@2.2.0: + resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + balanced-match@3.0.1: + resolution: {integrity: sha512-vjtV3hiLqYDNRoiAv0zC4QaGAMPomEoq83PRmYIofPswwZurCeWR5LByXm7SyoL0Zh5+2z0+HC7jG8gSZJUh0w==} + engines: {node: '>= 16'} + + balanced-match@4.0.2: + resolution: {integrity: sha512-x0K50QvKQ97fdEz2kPehIerj+YTeptKF9hyYkKf6egnwmMWAkADiO0QCzSp0R5xN8FTZgYaBfSaue46Ej62nMg==} + engines: {node: 20 || >=22} + + beasties@0.4.1: + resolution: {integrity: sha512-2Imdcw3LznDuxAbJM26RHniOLAzE6WgrK8OuvVXCQtNBS8rsnD9zsSEa3fHl4hHpUY7BYTlrpvtPVbvu9G6neg==} + engines: {node: '>=18.0.0'} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + boxen@7.0.0: + resolution: {integrity: sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==} + engines: {node: '>=14.16'} + + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + + brace-expansion@5.0.2: + resolution: {integrity: sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==} + engines: {node: 20 || >=22} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + cacheable@2.3.2: + resolution: {integrity: sha512-w+ZuRNmex9c1TR9RcsxbfTKCjSL0rh1WA5SABbrWprIHeNBdmyQLSYonlDy9gpD+63XT8DgZ/wNh1Smvc9WnJA==} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase@7.0.1: + resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} + engines: {node: '>=14.16'} + + chalk-template@0.4.0: + resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==} + engines: {node: '>=12'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.0.1: + resolution: {integrity: sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + clean-css@5.3.3: + resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} + engines: {node: '>= 10.0'} + + cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + + clipboardy@3.0.0: + resolution: {integrity: sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + + compression@1.8.1: + resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==} + engines: {node: '>= 0.8.0'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + consola@2.15.3: + resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==} + + content-disposition@0.5.2: + resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} + engines: {node: '>= 0.6'} + + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + css-functions-list@3.3.3: + resolution: {integrity: sha512-8HFEBPKhOpJPEPu70wJJetjKta86Gw9+CCyCnB3sui2qQfOvRyqBy4IKLKKAwdMpWb2lHXWk9Wb4Z6AmaUT1Pg==} + engines: {node: '>=12'} + + css-select@6.0.0: + resolution: {integrity: sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw==} + + css-tree@3.1.0: + resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-what@7.0.0: + resolution: {integrity: sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ==} + engines: {node: '>= 6'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-config-prettier@10.1.8: + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-scope@9.1.0: + resolution: {integrity: sha512-CkWE42hOJsNj9FJRaoMX9waUFYhqY4jmyLFdAdzZr6VaCg3ynLYx4WnOdkaIifGfH4gsUcBTn4OZbHXkpLD0FQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@5.0.0: + resolution: {integrity: sha512-A0XeIi7CXU7nPlfHS9loMYEKxUaONu/hTEzHTGba9Huu94Cq1hPivf+DE5erJozZOky0LfvXAyrV/tcswpLI0Q==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@10.0.0: + resolution: {integrity: sha512-O0piBKY36YSJhlFSG8p9VUdPV/SxxS4FYDWVpr/9GJuMaepzwlf4J8I4ov1b+ySQfDTPhc3DtLaxcT1fN0yqCg==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@11.1.0: + resolution: {integrity: sha512-WFWYhO1fV4iYkqOOvq8FbqIhr2pYfoDY0kCotMkDeNtGpiGGkZ1iov2u8ydjtgM8yF8rzK7oaTbw2NAzbAbehw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + + fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + + file-entry-cache@11.1.2: + resolution: {integrity: sha512-N2WFfK12gmrK1c1GXOqiAJ1tc5YE+R53zvQ+t5P8S5XhnmKYVB5eZEiLNZKDSmoG8wqqbF9EXYBBW/nef19log==} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flat-cache@6.1.20: + resolution: {integrity: sha512-AhHYqwvN62NVLp4lObVXGVluiABTHapoB57EyegZVmazN+hhGhLTn3uZbOofoTw4DSDvVCadzzyChXhOAvy8uQ==} + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.4.0: + resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} + engines: {node: '>=18'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + global-modules@2.0.0: + resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} + engines: {node: '>=6'} + + global-prefix@3.0.0: + resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} + engines: {node: '>=6'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + globby@16.1.0: + resolution: {integrity: sha512-+A4Hq7m7Ze592k9gZRy4gJ27DrXRNnC1vPjxTt1qQxEY8RxagBkBxivkCwg7FxSTG0iLLEMaUx13oOr0R2/qcQ==} + engines: {node: '>=20'} + + globjoin@0.1.4: + resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-flag@5.0.1: + resolution: {integrity: sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==} + engines: {node: '>=12'} + + hashery@1.4.0: + resolution: {integrity: sha512-Wn2i1In6XFxl8Az55kkgnFRiAlIAushzh26PTjL2AKtQcEfXrcLa7Hn5QOWGZEf3LU057P9TwwZjFyxfS1VuvQ==} + engines: {node: '>=20'} + + hookified@1.15.1: + resolution: {integrity: sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==} + + html-tags@5.1.0: + resolution: {integrity: sha512-n6l5uca7/y5joxZ3LUePhzmBFUJ+U2YWzhMa8XUTecSeSlQiZdF5XAd/Q3/WUl0VsXgUwWi8I7CNIwdI5WN1SQ==} + engines: {node: '>=20.10'} + + htmlparser2@10.1.0: + resolution: {integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + import-meta-resolve@4.2.0: + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + ini@2.0.0: + resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} + engines: {node: '>=10'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@4.0.0: + resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} + engines: {node: '>=12'} + + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + + is-port-reachable@4.0.0: + resolution: {integrity: sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jackspeak@4.2.3: + resolution: {integrity: sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==} + engines: {node: 20 || >=22} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + keyv@5.6.0: + resolution: {integrity: sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + known-css-properties@0.37.0: + resolution: {integrity: sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.truncate@4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + + mathml-tag-names@4.0.0: + resolution: {integrity: sha512-aa6AU2Pcx0VP/XWnh8IGL0SYSgQHDT6Ucror2j2mXeFAlN3ahaNs8EZtG1YiticMkSLj3Gt6VPFfZogt7G5iFQ==} + + mdn-data@2.12.2: + resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} + + meow@14.0.0: + resolution: {integrity: sha512-JhC3R1f6dbspVtmF3vKjAWz1EVIvwFrGGPLSdU6rK79xBwHWTuHoLnRX/t1/zHS1Ch1Y2UtIrih7DAHuH9JFJA==} + engines: {node: '>=20'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.33.0: + resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==} + engines: {node: '>= 0.6'} + + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + + mime-types@2.1.18: + resolution: {integrity: sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==} + engines: {node: '>= 0.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + minimatch@10.2.0: + resolution: {integrity: sha512-ugkC31VaVg9cF0DFVoADH12k6061zNZkZON+aX8AWsR9GhPcErkcMBceb6znR8wLERM2AkkOxy2nWRLpT9Jq5w==} + engines: {node: 20 || >=22} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + nconf@0.12.1: + resolution: {integrity: sha512-p2cfF+B3XXacQdswUYWZ0w6Vld0832A/tuqjLBu3H1sfUcby4N2oVbGhyuCkZv+t3iY3aiFEj7gZGqax9Q2c1w==} + engines: {node: '>= 0.4.0'} + + negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + on-headers@1.1.0: + resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} + engines: {node: '>= 0.8'} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-inside@1.0.2: + resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-to-regexp@3.3.0: + resolution: {integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + postcss-media-query-parser@0.2.3: + resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==} + + postcss-safe-parser@7.0.1: + resolution: {integrity: sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==} + engines: {node: '>=18.0'} + peerDependencies: + postcss: ^8.4.31 + + postcss-selector-parser@7.1.1: + resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier@3.8.1: + resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} + engines: {node: '>=14'} + hasBin: true + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + qified@0.6.0: + resolution: {integrity: sha512-tsSGN1x3h569ZSU1u6diwhltLyfUWDp3YbFHedapTmpBl0B3P6U3+Qptg7xu+v+1io1EwhdPyyRHYbEw0KN2FA==} + engines: {node: '>=20'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + range-parser@1.2.0: + resolution: {integrity: sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==} + engines: {node: '>= 0.6'} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + + registry-auth-token@3.3.2: + resolution: {integrity: sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==} + + registry-url@3.1.0: + resolution: {integrity: sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==} + engines: {node: '>=0.10.0'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + secure-keys@1.0.0: + resolution: {integrity: sha512-nZi59hW3Sl5P3+wOO89eHBAAGwmCPd2aE1+dLZV5MO+ItQctIvAqihzaAXIQhvtH4KJPxM080HsnqltR2y8cWg==} + + serve-handler@6.1.6: + resolution: {integrity: sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==} + + serve@14.2.5: + resolution: {integrity: sha512-Qn/qMkzCcMFVPb60E/hQy+iRLpiU8PamOfOSYoAHmmF+fFFmpPpqa6Oci2iWYpTdOUM3VF+TINud7CfbQnsZbA==} + engines: {node: '>= 14'} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} + + slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string-width@8.1.1: + resolution: {integrity: sha512-KpqHIdDL9KwYk22wEOg/VIqYbrnLeSApsKT/bSj6Ez7pn3CftUiLAv2Lccpq1ALcpLV9UX1Ppn92npZWu2w/aw==} + engines: {node: '>=20'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.2: + resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} + engines: {node: '>=12'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + + stylelint-config-recommended@18.0.0: + resolution: {integrity: sha512-mxgT2XY6YZ3HWWe3Di8umG6aBmWmHTblTgu/f10rqFXnyWxjKWwNdjSWkgkwCtxIKnqjSJzvFmPT5yabVIRxZg==} + engines: {node: '>=20.19.0'} + peerDependencies: + stylelint: ^17.0.0 + + stylelint-config-standard@40.0.0: + resolution: {integrity: sha512-EznGJxOUhtWck2r6dJpbgAdPATIzvpLdK9+i5qPd4Lx70es66TkBPljSg4wN3Qnc6c4h2n+WbUrUynQ3fanjHw==} + engines: {node: '>=20.19.0'} + peerDependencies: + stylelint: ^17.0.0 + + stylelint@17.3.0: + resolution: {integrity: sha512-1POV91lcEMhj6SLVaOeA0KlS9yattS+qq+cyWqP/nYzWco7K5jznpGH1ExngvPlTM9QF1Kjd2bmuzJu9TH2OcA==} + engines: {node: '>=20.19.0'} + hasBin: true + + supports-color@10.2.2: + resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} + engines: {node: '>=18'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-hyperlinks@4.4.0: + resolution: {integrity: sha512-UKbpT93hN5Nr9go5UY7bopIB9YQlMz9nm/ct4IXt/irb5YRkn9WaqrOBJGZ5Pwvsd5FQzSVeYlGdXoCAPQZrPg==} + engines: {node: '>=20'} + + svg-tags@1.0.0: + resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} + + table@6.9.0: + resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} + engines: {node: '>=10.0.0'} + + terser@5.46.0: + resolution: {integrity: sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==} + engines: {node: '>=10'} + hasBin: true + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + + unicorn-magic@0.4.0: + resolution: {integrity: sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==} + engines: {node: '>=20'} + + update-check@1.5.4: + resolution: {integrity: sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + widest-line@4.0.1: + resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} + engines: {node: '>=12'} + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + write-file-atomic@7.0.0: + resolution: {integrity: sha512-YnlPC6JqnZl6aO4uRc+dx5PHguiR9S6WeoLtpxNT9wIG+BDya7ZNE1q7KOjVgaA73hKhKLpVPgJ5QA9THQ5BRg==} + engines: {node: ^20.17.0 || >=22.9.0} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yaml-lint@1.7.0: + resolution: {integrity: sha512-zeBC/kskKQo4zuoGQ+IYjw6C9a/YILr2SXoEZA9jM0COrSwvwVbfTiFegT8qYBSBgOwLMWGL8sY137tOmFXGnQ==} + hasBin: true + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@babel/code-frame@7.29.0': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/helper-validator-identifier@7.28.5': {} + + '@cacheable/memory@2.0.7': + dependencies: + '@cacheable/utils': 2.3.4 + '@keyv/bigmap': 1.3.1(keyv@5.6.0) + hookified: 1.15.1 + keyv: 5.6.0 + + '@cacheable/utils@2.3.4': + dependencies: + hashery: 1.4.0 + keyv: 5.6.0 + + '@csstools/css-calc@3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + + '@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/css-tokenizer': 4.0.0 + + '@csstools/css-syntax-patches-for-csstree@1.0.27': {} + + '@csstools/css-tokenizer@4.0.0': {} + + '@csstools/media-query-list-parser@5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + + '@csstools/selector-resolve-nested@4.0.0(postcss-selector-parser@7.1.1)': + dependencies: + postcss-selector-parser: 7.1.1 + + '@csstools/selector-specificity@6.0.0(postcss-selector-parser@7.1.1)': + dependencies: + postcss-selector-parser: 7.1.1 + + '@eslint-community/eslint-utils@4.9.1(eslint@10.0.0)': + dependencies: + eslint: 10.0.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/config-array@0.23.1': + dependencies: + '@eslint/object-schema': 3.0.1 + debug: 4.4.3 + minimatch: 10.2.0 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.5.2': + dependencies: + '@eslint/core': 1.1.0 + + '@eslint/core@1.1.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/object-schema@3.0.1': {} + + '@eslint/plugin-kit@0.6.0': + dependencies: + '@eslint/core': 1.1.0 + levn: 0.4.1 + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.7': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.4.3 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@isaacs/cliui@9.0.0': {} + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/source-map@0.3.11': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@keyv/bigmap@1.3.1(keyv@5.6.0)': + dependencies: + hashery: 1.4.0 + hookified: 1.15.1 + keyv: 5.6.0 + + '@keyv/serialize@1.1.1': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.20.1 + + '@sindresorhus/merge-streams@4.0.0': {} + + '@types/esrecurse@4.3.1': {} + + '@types/estree@1.0.8': {} + + '@types/json-schema@7.0.15': {} + + '@zeit/schemas@2.36.0': {} + + acorn-jsx@5.3.2(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + + acorn@8.15.0: {} + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.12.0: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.0 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + + ansi-regex@5.0.1: {} + + ansi-regex@6.2.2: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.3: {} + + arch@2.2.0: {} + + arg@5.0.2: {} + + argparse@2.0.1: {} + + array-union@2.1.0: {} + + astral-regex@2.0.0: {} + + async@3.2.6: {} + + balanced-match@1.0.2: {} + + balanced-match@3.0.1: {} + + balanced-match@4.0.2: + dependencies: + jackspeak: 4.2.3 + + beasties@0.4.1: + dependencies: + css-select: 6.0.0 + css-what: 7.0.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + htmlparser2: 10.1.0 + picocolors: 1.1.1 + postcss: 8.5.6 + postcss-media-query-parser: 0.2.3 + postcss-safe-parser: 7.0.1(postcss@8.5.6) + + boolbase@1.0.0: {} + + boxen@7.0.0: + dependencies: + ansi-align: 3.0.1 + camelcase: 7.0.1 + chalk: 5.0.1 + cli-boxes: 3.0.0 + string-width: 5.1.2 + type-fest: 2.19.0 + widest-line: 4.0.1 + wrap-ansi: 8.1.0 + + brace-expansion@1.1.12: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@5.0.2: + dependencies: + balanced-match: 4.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + buffer-from@1.1.2: {} + + bytes@3.0.0: {} + + bytes@3.1.2: {} + + cacheable@2.3.2: + dependencies: + '@cacheable/memory': 2.0.7 + '@cacheable/utils': 2.3.4 + hookified: 1.15.1 + keyv: 5.6.0 + qified: 0.6.0 + + callsites@3.1.0: {} + + camelcase@7.0.1: {} + + chalk-template@0.4.0: + dependencies: + chalk: 4.1.2 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.0.1: {} + + clean-css@5.3.3: + dependencies: + source-map: 0.6.1 + + cli-boxes@3.0.0: {} + + clipboardy@3.0.0: + dependencies: + arch: 2.2.0 + execa: 5.1.1 + is-wsl: 2.2.0 + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + colord@2.9.3: {} + + commander@2.20.3: {} + + compressible@2.0.18: + dependencies: + mime-db: 1.54.0 + + compression@1.8.1: + dependencies: + bytes: 3.1.2 + compressible: 2.0.18 + debug: 2.6.9 + negotiator: 0.6.4 + on-headers: 1.1.0 + safe-buffer: 5.2.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + concat-map@0.0.1: {} + + consola@2.15.3: {} + + content-disposition@0.5.2: {} + + cosmiconfig@9.0.0: + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.1.1 + parse-json: 5.2.0 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + css-functions-list@3.3.3: {} + + css-select@6.0.0: + dependencies: + boolbase: 1.0.0 + css-what: 7.0.0 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + + css-tree@3.1.0: + dependencies: + mdn-data: 2.12.2 + source-map-js: 1.2.1 + + css-what@7.0.0: {} + + cssesc@3.0.0: {} + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + deep-extend@0.6.0: {} + + deep-is@0.1.4: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + eastasianwidth@0.2.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + entities@4.5.0: {} + + entities@7.0.1: {} + + env-paths@2.2.1: {} + + error-ex@1.3.4: + dependencies: + is-arrayish: 0.2.1 + + escalade@3.2.0: {} + + escape-string-regexp@4.0.0: {} + + eslint-config-prettier@10.1.8(eslint@10.0.0): + dependencies: + eslint: 10.0.0 + + eslint-scope@9.1.0: + dependencies: + '@types/esrecurse': 4.3.1 + '@types/estree': 1.0.8 + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@5.0.0: {} + + eslint@10.0.0: + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.0) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.23.1 + '@eslint/config-helpers': 0.5.2 + '@eslint/core': 1.1.0 + '@eslint/plugin-kit': 0.6.0 + '@humanfs/node': 0.16.7 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + ajv: 6.12.6 + cross-spawn: 7.0.6 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + eslint-scope: 9.1.0 + eslint-visitor-keys: 5.0.0 + espree: 11.1.0 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + minimatch: 10.2.0 + natural-compare: 1.4.0 + optionator: 0.9.4 + transitivePeerDependencies: + - supports-color + + espree@11.1.0: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 5.0.0 + + esquery@1.7.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fast-uri@3.1.0: {} + + fastest-levenshtein@1.0.16: {} + + fastq@1.20.1: + dependencies: + reusify: 1.1.0 + + file-entry-cache@11.1.2: + dependencies: + flat-cache: 6.1.20 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + + flat-cache@6.1.20: + dependencies: + cacheable: 2.3.2 + flatted: 3.3.3 + hookified: 1.15.1 + + flatted@3.3.3: {} + + get-caller-file@2.0.5: {} + + get-east-asian-width@1.4.0: {} + + get-stream@6.0.1: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + global-modules@2.0.0: + dependencies: + global-prefix: 3.0.0 + + global-prefix@3.0.0: + dependencies: + ini: 1.3.8 + kind-of: 6.0.3 + which: 1.3.1 + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.3 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + + globby@16.1.0: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + fast-glob: 3.3.3 + ignore: 7.0.5 + is-path-inside: 4.0.0 + slash: 5.1.0 + unicorn-magic: 0.4.0 + + globjoin@0.1.4: {} + + has-flag@4.0.0: {} + + has-flag@5.0.1: {} + + hashery@1.4.0: + dependencies: + hookified: 1.15.1 + + hookified@1.15.1: {} + + html-tags@5.1.0: {} + + htmlparser2@10.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 7.0.1 + + human-signals@2.1.0: {} + + ignore@5.3.2: {} + + ignore@7.0.5: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-meta-resolve@4.2.0: {} + + imurmurhash@0.1.4: {} + + ini@1.3.8: {} + + ini@2.0.0: {} + + is-arrayish@0.2.1: {} + + is-docker@2.2.1: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-path-inside@4.0.0: {} + + is-plain-object@5.0.0: {} + + is-port-reachable@4.0.0: {} + + is-stream@2.0.1: {} + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + isexe@2.0.0: {} + + jackspeak@4.2.3: + dependencies: + '@isaacs/cliui': 9.0.0 + + js-tokens@4.0.0: {} + + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + keyv@5.6.0: + dependencies: + '@keyv/serialize': 1.1.1 + + kind-of@6.0.3: {} + + known-css-properties@0.37.0: {} + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lines-and-columns@1.2.4: {} + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.truncate@4.4.2: {} + + mathml-tag-names@4.0.0: {} + + mdn-data@2.12.2: {} + + meow@14.0.0: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.33.0: {} + + mime-db@1.54.0: {} + + mime-types@2.1.18: + dependencies: + mime-db: 1.33.0 + + mimic-fn@2.1.0: {} + + minimatch@10.2.0: + dependencies: + brace-expansion: 5.0.2 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.12 + + minimist@1.2.8: {} + + ms@2.0.0: {} + + ms@2.1.3: {} + + nanoid@3.3.11: {} + + natural-compare@1.4.0: {} + + nconf@0.12.1: + dependencies: + async: 3.2.6 + ini: 2.0.0 + secure-keys: 1.0.0 + yargs: 16.2.0 + + negotiator@0.6.4: {} + + normalize-path@3.0.0: {} + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + on-headers@1.1.0: {} + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.29.0 + error-ex: 1.3.4 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + path-exists@4.0.0: {} + + path-is-inside@1.0.2: {} + + path-key@3.1.1: {} + + path-to-regexp@3.3.0: {} + + path-type@4.0.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + postcss-media-query-parser@0.2.3: {} + + postcss-safe-parser@7.0.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-selector-parser@7.1.1: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + prettier@3.8.1: {} + + punycode@2.3.1: {} + + qified@0.6.0: + dependencies: + hookified: 1.15.1 + + queue-microtask@1.2.3: {} + + range-parser@1.2.0: {} + + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + + registry-auth-token@3.3.2: + dependencies: + rc: 1.2.8 + safe-buffer: 5.2.1 + + registry-url@3.1.0: + dependencies: + rc: 1.2.8 + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + resolve-from@4.0.0: {} + + reusify@1.1.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-buffer@5.2.1: {} + + secure-keys@1.0.0: {} + + serve-handler@6.1.6: + dependencies: + bytes: 3.0.0 + content-disposition: 0.5.2 + mime-types: 2.1.18 + minimatch: 3.1.2 + path-is-inside: 1.0.2 + path-to-regexp: 3.3.0 + range-parser: 1.2.0 + + serve@14.2.5: + dependencies: + '@zeit/schemas': 2.36.0 + ajv: 8.12.0 + arg: 5.0.2 + boxen: 7.0.0 + chalk: 5.0.1 + chalk-template: 0.4.0 + clipboardy: 3.0.0 + compression: 1.8.1 + is-port-reachable: 4.0.0 + serve-handler: 6.1.6 + update-check: 1.5.4 + transitivePeerDependencies: + - supports-color + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + slash@3.0.0: {} + + slash@5.1.0: {} + + slice-ansi@4.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + + source-map-js@1.2.1: {} + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.2 + + string-width@8.1.1: + dependencies: + get-east-asian-width: 1.4.0 + strip-ansi: 7.1.2 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.2: + dependencies: + ansi-regex: 6.2.2 + + strip-final-newline@2.0.0: {} + + strip-json-comments@2.0.1: {} + + stylelint-config-recommended@18.0.0(stylelint@17.3.0): + dependencies: + stylelint: 17.3.0 + + stylelint-config-standard@40.0.0(stylelint@17.3.0): + dependencies: + stylelint: 17.3.0 + stylelint-config-recommended: 18.0.0(stylelint@17.3.0) + + stylelint@17.3.0: + dependencies: + '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-syntax-patches-for-csstree': 1.0.27 + '@csstools/css-tokenizer': 4.0.0 + '@csstools/media-query-list-parser': 5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/selector-resolve-nested': 4.0.0(postcss-selector-parser@7.1.1) + '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.1) + balanced-match: 3.0.1 + colord: 2.9.3 + cosmiconfig: 9.0.0 + css-functions-list: 3.3.3 + css-tree: 3.1.0 + debug: 4.4.3 + fast-glob: 3.3.3 + fastest-levenshtein: 1.0.16 + file-entry-cache: 11.1.2 + global-modules: 2.0.0 + globby: 16.1.0 + globjoin: 0.1.4 + html-tags: 5.1.0 + ignore: 7.0.5 + import-meta-resolve: 4.2.0 + imurmurhash: 0.1.4 + is-plain-object: 5.0.0 + known-css-properties: 0.37.0 + mathml-tag-names: 4.0.0 + meow: 14.0.0 + micromatch: 4.0.8 + normalize-path: 3.0.0 + picocolors: 1.1.1 + postcss: 8.5.6 + postcss-safe-parser: 7.0.1(postcss@8.5.6) + postcss-selector-parser: 7.1.1 + postcss-value-parser: 4.2.0 + string-width: 8.1.1 + supports-hyperlinks: 4.4.0 + svg-tags: 1.0.0 + table: 6.9.0 + write-file-atomic: 7.0.0 + transitivePeerDependencies: + - supports-color + - typescript + + supports-color@10.2.2: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-hyperlinks@4.4.0: + dependencies: + has-flag: 5.0.1 + supports-color: 10.2.2 + + svg-tags@1.0.0: {} + + table@6.9.0: + dependencies: + ajv: 8.17.1 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + terser@5.46.0: + dependencies: + '@jridgewell/source-map': 0.3.11 + acorn: 8.15.0 + commander: 2.20.3 + source-map-support: 0.5.21 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-fest@2.19.0: {} + + unicorn-magic@0.4.0: {} + + update-check@1.5.4: + dependencies: + registry-auth-token: 3.3.2 + registry-url: 3.1.0 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + util-deprecate@1.0.2: {} + + vary@1.1.2: {} + + which@1.3.1: + dependencies: + isexe: 2.0.0 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + widest-line@4.0.1: + dependencies: + string-width: 5.1.2 + + word-wrap@1.2.5: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 5.1.2 + strip-ansi: 7.1.2 + + write-file-atomic@7.0.0: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 4.1.0 + + y18n@5.0.8: {} + + yaml-lint@1.7.0: + dependencies: + consola: 2.15.3 + globby: 11.1.0 + js-yaml: 4.1.1 + nconf: 0.12.1 + + yargs-parser@20.2.9: {} + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + + yocto-queue@0.1.0: {} diff --git a/scripts/build.js b/scripts/build.js new file mode 100644 index 0000000..1e987cb --- /dev/null +++ b/scripts/build.js @@ -0,0 +1,78 @@ +/** + * Build script: copy src → dist, minify JS/CSS, inline critical CSS (Beasties). + * Run with: pnpm build + */ +import { + rmSync, + mkdirSync, + readFileSync, + writeFileSync, + cpSync, + readdirSync +} from 'fs' +import { join, dirname, extname } from 'path' +import { fileURLToPath } from 'url' +import Beasties from 'beasties' +import { minify as minifyJs } from 'terser' +import CleanCSS from 'clean-css' + +const __dirname = dirname(fileURLToPath(import.meta.url)) +const root = join(__dirname, '..') +const srcDir = join(root, 'src') +const distDir = join(root, 'dist') + +function getFiles(dir, files = []) { + const entries = readdirSync(dir, { withFileTypes: true }) + for (const e of entries) { + const full = join(dir, e.name) + if (e.isDirectory()) getFiles(full, files) + else files.push(full) + } + return files +} + +async function main() { + // 1. Clean and copy src → dist + rmSync(distDir, { recursive: true, force: true }) + mkdirSync(distDir, { recursive: true }) + cpSync(srcDir, distDir, { recursive: true }) + + const distFiles = getFiles(distDir) + + // 2. Minify JS + const jsFiles = distFiles.filter((f) => extname(f) === '.js') + for (const f of jsFiles) { + const code = readFileSync(f, 'utf8') + const result = await minifyJs(code, { format: { comments: false } }) + if (result.code) writeFileSync(f, result.code) + } + + // 3. Minify CSS + const cleanCss = new CleanCSS({ level: 2 }) + const cssFiles = distFiles.filter((f) => extname(f) === '.css') + for (const f of cssFiles) { + const code = readFileSync(f, 'utf8') + const result = cleanCss.minify(code) + if (!result.errors.length) writeFileSync(f, result.styles) + } + + // 4. Inline critical CSS with Beasties for all HTML files (no browser; works in CI) + const htmlFiles = distFiles.filter((f) => extname(f) === '.html') + const beasties = new Beasties({ + path: distDir, + preload: 'default', + logLevel: 'warn' + }) + for (const htmlFile of htmlFiles) { + const html = readFileSync(htmlFile, 'utf8') + const inlined = await beasties.process(html) + writeFileSync(htmlFile, inlined) + } + + console.log('Build complete: dist/') +} + +main().catch((err) => { + console.error(err) + process.exit(1) +}) diff --git a/src.delete/assets/css/accordion.css b/src.delete/assets/css/accordion.css deleted file mode 100644 index 47aed45..0000000 --- a/src.delete/assets/css/accordion.css +++ /dev/null @@ -1,93 +0,0 @@ -:root { - --accordion-bg: #fff; -} - -@media (prefers-color-scheme: dark) { - :root { - --accordion-bg: #24264a; - } -} - -.accordion { - margin: 1.5rem 0 1rem 0; - border-radius: var(--radius); - overflow: hidden; - box-shadow: 0 1px 6px 0 rgba(90,100,140,0.06); - background: var(--accordion-bg); -} - -.accordion-section { - border-top: 1px solid #eee; - background: var(--accordion-bg); -} - -@media (prefers-color-scheme: dark) { - .accordion-section { - border-top: 1px solid #28284b; - } -} - -.accordion-section:first-child { - border-top: none; -} - -.accordion-trigger { - display: flex; - align-items: center; - cursor: pointer; - width: 100%; - background: none; - border: none; - font-size: 1.12rem; - padding: 1.1rem 1.2rem; - text-align: left; - font-weight: 600; - transition: background 0.2s; - color: var(--text-main); - outline: none; - gap: 0.6em; - position: relative; -} - -.accordion-trigger:hover, .accordion-trigger:focus { - background: var(--background); -} - -.accordion-trigger .icon { - margin-right: 0.5em; - font-size: 1.3em; - opacity: 0.86; - transition: transform 0.2s; -} - -.accordion-trigger[aria-expanded="true"] .icon { - transform: rotate(90deg); -} - -.accordion-content { - max-height: 0; - overflow: hidden; - background: var(--surface); - transition: max-height 0.3s cubic-bezier(.7,0,.3,1); - font-size: 1rem; - padding: 0 1.5rem; - color: var(--text-main); - text-align: left; -} - -.accordion-section.open .accordion-content { - padding: 1.2rem 1.5rem 1.3rem 1.5rem; - max-height: 1000px; - transition: max-height 0.5s cubic-bezier(.7,0,.3,1); -} - -@media (max-width: 600px) { - .accordion-trigger { - font-size: 1rem; - padding: 0.93rem 0.8rem; - } - - .accordion-section.open .accordion-content { - padding: 0.7rem 0.8rem 0.9rem 0.8rem; - } -} diff --git a/src.delete/assets/css/settings.css b/src.delete/assets/css/settings.css deleted file mode 100644 index a0531bc..0000000 --- a/src.delete/assets/css/settings.css +++ /dev/null @@ -1,106 +0,0 @@ -:root { - --content-bg: #f8fafc; - --faq-a: #333; - --table-bg: transparent; -} - -@media (prefers-color-scheme: dark) { - :root { - --content-bg: #21223a; - --faq-a: #b7badf; - --table-bg: #252745; - } -} - -.general-settings { - background: var(--surface); - border-radius: var(--radius); - padding: 1.2rem 1.1rem 1.1rem 1.1rem; - margin-bottom: 2.1rem; - box-shadow: var(--shadow); - position: relative; - z-index: 1; -} - -.general-settings h2 { - font-size: 1.14rem; - margin: 0 0 0.6rem 0; - font-weight: 700; - letter-spacing: -0.5px; -} - -table { - width: 100%; - border-collapse: collapse; - margin-bottom: 1em; - background: var(--table-bg); -} - -td { - padding: 0.38em 0.5em; - border: none; - font-size: 1rem; -} - -td:first-child { - color: var(--text-muted); - font-weight: 500; - width: 44%; - white-space: nowrap; -} - -.tip { - background: #eef2ff; - color: var(--accent-light); - border-radius: 0.7em; - font-size: 0.98em; - padding: 0.48em 0.8em; - display: inline-block; - margin: 0.3em 0 0.2em 0; - text-align: center; -} - -@media (prefers-color-scheme: dark) { - .tip { - background: #232555; - color: #a5b4fc; - } -} - -.faq-q { - font-weight: 600; - margin-top: 0.8em; - color: var(--accent); -} - -.faq-a { - margin: 0.1em 0 0.6em 0.3em; - color: var(--faq-a); -} - -a { - color: var(--accent); - text-decoration: underline; -} - -@media (max-width: 600px) { - .container { - padding: 1.1rem 0.5rem 1rem 0.5rem; - } - - h1 { - font-size: 1.36rem; - } - - .general-settings { - padding: 0.8rem 0.6rem 0.8rem 0.6rem; - } - - .general-settings h2 { - font-size: 1rem; - } - - td { - font-size: 0.98em; - } -} diff --git a/src.delete/assets/css/style.css b/src.delete/assets/css/style.css deleted file mode 100644 index 4483d0c..0000000 --- a/src.delete/assets/css/style.css +++ /dev/null @@ -1,145 +0,0 @@ -:root { - --accent: #4f46e5; - --accent-light: #6366f1; - --background: #f7fafc; - --button-bg: #2bc4fa; - --button-hover: #22a0ca; - --button-text: #181a20; - --text-main: #23243a; - --text-muted: #64748b; - --radius: 1.25rem; - --shadow: 0 2px 12px 0 rgba(20,30,60,0.09); - --surface: rgba(255,255,255,0.94); -} - -@media (prefers-color-scheme: dark) { - :root { - --accent: #a5b4fc; - --accent-light: #818cf8; - --background: #15181c; - --button-bg: #2bc4fa; - --button-hover: #22a0ca; - --button-text: #181a20; - --shadow: 0 2px 16px 0 rgba(8,8,24,0.24); - --surface: rgba(30,34,42,0.9); - --text-main: #f6f7fa; - --text-muted: #aab2bd; - } -} - -html, body { - margin: 0; - padding: 0; - background: var(--background); - color: var(--text-main); - font-family: 'Inter', 'Segoe UI', Arial, sans-serif; - font-size: 17px; - min-height: 100vh; -} - -body { - display: flex; - flex-flow:column nowrap; - align-items: center; - justify-content: center; - min-height: 100dvh; -} - -.container { - display: flex; - flex-grow: 1; - flex-flow: column nowrap; - justify-content: center; - margin: 1rem; - max-width: 370px; - text-align: center; -} - -.card { - background: var(--surface); - border-radius: 1.5rem; - box-shadow: var(--shadow); - padding: 3rem 2rem; -} - -.container.wide { - max-width: 580px; -} - -.emoji { - font-size: 3rem; - margin-bottom: 1rem; -} - -h1 { - font-size: 2rem; - margin-bottom: 0.5rem; - font-weight: 700; - letter-spacing: -1px; -} - -.intro { - color: var(--text-muted); - margin-bottom: 1.7rem; - text-align: center; -} - -p { - color: var(--text-muted); - font-size: 1.1rem; - line-height: 1.5; - margin-bottom: 2rem; -} - -.button { - display: block; - padding: 0.75rem 1.5rem; - margin-bottom: 0.75rem; - background: var(--button-bg); - color: var(--button-text); - border-radius: 999px; - font-weight: 600; - text-decoration: none; - transition: background 0.2s; - box-shadow: 0 1px 4px 0 rgba(43,196,250,0.11); -} - -.button:hover { - background: var(--button-hover); -} - -a { - color: var(--accent); - text-decoration: underline; -} - -a:hover { - text-decoration: none; -} - -footer { - color: #bbb; - font-size: 0.94em; - letter-spacing: 0.01em; - margin-top: 2.5em; - text-align: center; -} - -footer p { - font-size: 0.8em; - margin: 0.5rem 0 1rem; -} - -.badges { - align-items: center; - display: flex; - flex-flow: row nowrap; - gap: 1rem; - justify-content: center; -} - -@media (max-width: 400px) { - .container { - padding: 2rem 0.5rem; - } -} diff --git a/src.delete/assets/js/accordion.js b/src.delete/assets/js/accordion.js deleted file mode 100644 index 2c2746c..0000000 --- a/src.delete/assets/js/accordion.js +++ /dev/null @@ -1,28 +0,0 @@ -document.querySelectorAll('.accordion-trigger').forEach((btn) => { - btn.addEventListener('click', function() { - const section = btn.closest('.accordion-section'); - const expanded = btn.getAttribute('aria-expanded') === "true"; - document.querySelectorAll('.accordion-section').forEach(s => { - if (s === section) { - s.classList.toggle('open', !expanded); - btn.setAttribute('aria-expanded', String(!expanded)); - const content = btn.nextElementSibling; - content.style.maxHeight = !expanded ? (content.scrollHeight+40) + "px" : "0px"; - } else { - s.classList.remove('open'); - s.querySelector('.accordion-trigger').setAttribute('aria-expanded', "false"); - s.querySelector('.accordion-content').style.maxHeight = "0px"; - } - }); - }); - - btn.addEventListener('keydown', function(e) { - if (e.key === "ArrowDown" || e.key === "ArrowUp") { - const triggers = Array.from(document.querySelectorAll('.accordion-trigger')); - let idx = triggers.indexOf(e.target); - if (e.key === "ArrowDown") idx = (idx + 1) % triggers.length; - else idx = (idx - 1 + triggers.length) % triggers.length; - triggers[idx].focus(); - } - }); -}); diff --git a/src.delete/assets/media/embed-badge-emailtest.svg b/src.delete/assets/media/embed-badge-emailtest.svg deleted file mode 100644 index be2fddc..0000000 --- a/src.delete/assets/media/embed-badge-emailtest.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src.delete/assets/media/embed-badge-websitetest.svg b/src.delete/assets/media/embed-badge-websitetest.svg deleted file mode 100644 index 82db1a8..0000000 --- a/src.delete/assets/media/embed-badge-websitetest.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src.delete/help/index.html b/src.delete/help/index.html deleted file mode 100644 index a171fbe..0000000 --- a/src.delete/help/index.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - Welcome to Email from mifi Ventures - - - - - - -
-

Welcome to Email from mifi Ventures

-
- Let’s get your inbox ready! 📬
-

Friendly help for setting up your email—works with Outlook, Apple Mail, Thunderbird, phones, and more.

-
- -
-

General Settings (All Clients)

- - - - - - - - - - - -
Email Addressyour.name@yourdomain.com
Usernameyour.name@yourdomain.com
Password(your email password)
Incoming Servermail.mifi.holdings
Outgoing Servermail.mifi.holdings
IMAP Port993 (SSL/TLS)
POP3 Port995 (SSL/TLS)
SMTP Port587 (STARTTLS) or 465 (SSL/TLS)
AuthenticationRequired (use same as incoming)
EncryptionSSL/TLS or STARTTLS
- Tip: Always use your full email address as your username! -
- -
- - -
- -
-
    -
  1. Go to File → Add Account
  2. -
  3. Enter your full email address
  4. -
  5. Choose Advanced options → check “Set up manually”
  6. -
  7. Select IMAP (recommended) or POP
  8. -
  9. Incoming server: mail.mifi.holdings, port 993 (SSL/TLS)
  10. -
  11. Outgoing server: mail.mifi.holdings, port 587 (STARTTLS) or 465 (SSL/TLS)
  12. -
  13. Username: full email address; Password: your password
  14. -
  15. Click Connect
  16. -
- If sending fails, make sure “Require logon using SPA” is unchecked. -
-
- - -
- -
-
    -
  1. Add Account → Other Mail Account
  2. -
  3. Enter your name, email, and password
  4. -
  5. Incoming/Outgoing server: mail.mifi.holdings
  6. -
  7. IMAP port: 993 (SSL); SMTP port: 587 (STARTTLS) or 465 (SSL)
  8. -
  9. Use full email address for username
  10. -
-
-
- - -
- -
-
    -
  1. Menu → Account Settings → Add Mail Account
  2. -
  3. Fill in your name, email, and password
  4. -
  5. Click “Configure manually” and use settings above
  6. -
-
-
- - -
- -
-
    -
  • Add Account → Other
  • -
  • Enter your email and password
  • -
  • Manual setup: mail.mifi.holdings, correct ports, SSL/TLS required
  • -
  • Gmail app: tap profile → Add account → Other, fill in details, use IMAP
  • -
-
-
- - -
- -
-
Q: My email won’t send?
-
Check that you’re using your full email address for both incoming and outgoing username, and that the port is 587 or 465.
-
Q: SSL/TLS errors?
-
Ensure SSL or STARTTLS is enabled for both incoming and outgoing mail.
-
Q: Still stuck?
-
Contact postmaster@mifi.holdings.
- Please include any error messages, your mail app, and a screenshot if you can!
-
-
- - -
- -
-
    -
  • IMAP syncs your mail everywhere—choose IMAP unless you know you want POP3.
  • -
  • Your login is always your full email address.
  • -
  • Check your Spam/Junk folder for misfiled good emails.
  • -
  • Advanced: IMAP path prefix = (leave blank); SMTP authentication is always required.
  • -
-
-
- -
-
-

- internet.nl 100% Hall of Fame - Email - internet.nl 100% Hall of Fame - Web -

-

© mifi Ventures. All rights reserved.

-
-
- - - diff --git a/src.delete/index.html b/src.delete/index.html deleted file mode 100644 index dcbdcff..0000000 --- a/src.delete/index.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - mail.mifi.holdings - - - -
-
-
-
📮
-

This is just a mailbox.

-
-

- You've reached mail.mifi.holdings.
- There's nothing exciting here—just some gears whirring and mail being sorted.
- Looking for your messages? -

- Email Setup Help - Go to Webmail - Change/Forgot Password -
-
- - - diff --git a/src/assets/css/site.css b/src/assets/css/site.css new file mode 100644 index 0000000..a209897 --- /dev/null +++ b/src/assets/css/site.css @@ -0,0 +1,299 @@ +:root { + --accent: #4f46e5; + --accent-light: #6366f1; + --background: #f7fafc; + --button-bg: var(--accent); + --button-hover: var(--accent-light); + --button-text: var(--background); + --radius: 1.25rem; + --shadow: 0 2px 12px 0 rgb(20 30 60 / 9%); + --surface: rgb(255 255 255 / 94%); + --text-main: #23243a; + --text-muted: #64748b; + --table-bg: transparent; + --accordion-bg: #fff; + --content-bg: #f8fafc; + --faq-a: #333; +} + +@media (prefers-color-scheme: dark) { + :root { + --accent: #a5b4fc; + --accent-light: #818cf8; + --background: #171923; + --shadow: 0 2px 16px 0 rgb(8 8 24 / 24%); + --surface: rgb(30 34 42 / 90%); + --text-main: #f6f7fa; + --text-muted: #aab2bd; + --table-bg: #252745; + --accordion-bg: #24264a; + --content-bg: #21223a; + --faq-a: #b7badf; + } +} + +html, +body { + margin: 0; + padding: 0; + background: var(--background); + color: var(--text-main); + font-family: Inter, 'Segoe UI', Arial, sans-serif; + font-size: 17px; + min-height: 100dvh; +} + +body { + display: flex; + align-items: center; + justify-content: center; +} + +h1 { + font-size: 2rem; + margin-bottom: 0.5rem; + font-weight: 700; + letter-spacing: -1px; +} + +a { + color: var(--accent); + text-decoration: underline; +} + +p { + color: var(--text-muted); + margin-bottom: 2rem; + font-size: 1.1rem; + line-height: 1.5; +} + +.container { + background: var(--surface); + padding: 3rem 2rem; + border-radius: var(--radius); + box-shadow: var(--shadow); + max-width: 370px; + margin: 1rem; +} + +@media (width <= 400px) { + .container { + padding: 2rem 0.5rem; + } +} + +.container.faq { + margin: 2.5rem auto 1.5rem; + max-width: 580px; + padding-bottom: 2rem; +} + +.text-center { + text-align: center; +} + +.emoji { + font-size: 3rem; + margin-bottom: 1rem; +} + +.button { + display: block; + padding: 0.75rem 1.5rem; + margin-bottom: 0.75rem; + background: var(--button-bg); + color: var(--button-text); + border-radius: 999px; + font-weight: 600; + text-decoration: none; + transition: background 0.2s; + box-shadow: 0 1px 4px 0 rgb(43 196 250 / 11%); +} + +.button:hover { + background: var(--button-hover); +} + +.intro { + text-align: center; + margin-bottom: 1.7rem; + color: var(--text-muted); +} + +.general-settings { + background: var(--content-bg); + border-radius: var(--radius); + padding: 1.2rem 1.1rem 1.1rem; + margin-bottom: 2.1rem; + box-shadow: 0 1px 6px 0 rgb(90 100 140 / 6%); + position: relative; + z-index: 1; +} + +.general-settings h2 { + font-size: 1.14rem; + margin: 0 0 0.6rem; + font-weight: 700; + letter-spacing: -0.5px; +} + +table { + width: 100%; + border-collapse: collapse; + margin-bottom: 1em; + background: var(--table-bg); +} + +td { + padding: 0.38em 0.5em; + border: none; + font-size: 1rem; +} + +td:first-child { + color: var(--text-muted); + font-weight: 500; + width: 44%; + white-space: nowrap; +} + +.tip { + background: #eef2ff; + color: var(--accent-light); + border-radius: 0.7em; + font-size: 0.98em; + padding: 0.48em 0.8em; + display: inline-block; + margin: 0.3em 0 0.2em; +} + +@media (prefers-color-scheme: dark) { + .tip { + background: #232555; + color: #a5b4fc; + } +} + +.accordion { + margin: 1.5rem 0 1rem; + border-radius: var(--radius); + overflow: hidden; + box-shadow: 0 1px 6px 0 rgb(90 100 140 / 6%); + background: var(--accordion-bg); +} + +.accordion-section { + border-top: 1px solid #eee; + background: var(--accordion-bg); +} + +@media (prefers-color-scheme: dark) { + .accordion-section { + border-top: 1px solid #28284b; + } +} + +.accordion-section:first-child { + border-top: none; +} + +.accordion-trigger { + display: flex; + align-items: center; + cursor: pointer; + width: 100%; + background: none; + border: none; + font-size: 1.12rem; + padding: 1.1rem 1.2rem; + text-align: left; + font-weight: 600; + transition: background 0.2s; + color: var(--text-main); + outline: none; + gap: 0.6em; + position: relative; +} + +.accordion-trigger:hover, +.accordion-trigger:focus { + background: var(--background); +} + +.accordion-trigger .icon { + margin-right: 0.5em; + font-size: 1.3em; + opacity: 0.86; + transition: transform 0.2s; +} + +.accordion-trigger[aria-expanded='true'] .icon { + transform: rotate(90deg); +} + +.accordion-content { + max-height: 0; + overflow: hidden; + background: var(--content-bg); + transition: max-height 0.3s cubic-bezier(0.7, 0, 0.3, 1); + font-size: 1rem; + padding: 0 1.5rem; + color: var(--text-main); +} + +.accordion-section.open .accordion-content { + padding: 1.2rem 1.5rem 1.3rem; + max-height: 1000px; + transition: max-height 0.5s cubic-bezier(0.7, 0, 0.3, 1); +} + +.faq-q { + font-weight: 600; + margin-top: 0.8em; + color: var(--accent); +} + +.faq-a { + margin: 0.1em 0 0.6em 0.3em; + color: var(--faq-a); +} + +.footer { + margin-top: 2.5em; + text-align: center; + color: #bbb; + font-size: 0.94em; + letter-spacing: 0.01em; +} + +@media (width <= 600px) { + .container { + padding: 1.1rem 0.5rem 1rem; + } + + h1 { + font-size: 1.36rem; + } + + .general-settings { + padding: 0.8rem 0.6rem; + } + + .general-settings h2 { + font-size: 1rem; + } + + .accordion-trigger { + font-size: 1rem; + padding: 0.93rem 0.8rem; + } + + .accordion-section.open .accordion-content { + padding: 0.7rem 0.8rem 0.9rem; + } + + td { + font-size: 0.98em; + } +} diff --git a/src/assets/images/apple-touch-icon.png b/src/assets/images/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b00ad45eacc7bb7dde4bb7b8a5b219c55a5725b4 GIT binary patch literal 3737 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 + + + \ No newline at end of file diff --git a/src/assets/js/ga-init.js b/src/assets/js/ga-init.js new file mode 100644 index 0000000..3820ff4 --- /dev/null +++ b/src/assets/js/ga-init.js @@ -0,0 +1,11 @@ +;(function () { + var script = document.currentScript + var id = script && script.getAttribute('data-ga-id') + if (!id) return + window.dataLayer = window.dataLayer || [] + function gtag() { + window.dataLayer.push(arguments) + } + gtag('js', new Date()) + gtag('config', id, { anonymize_ip: true }) +})() diff --git a/src/help/index.html b/src/help/index.html index a5b1e80..f7e3274 100644 --- a/src/help/index.html +++ b/src/help/index.html @@ -1,364 +1,317 @@ - + - - - - Welcome to Email from mifi Ventures - - - - -
-

Welcome to Email from mifi Ventures

-
- Let’s get your inbox ready! 📬
-

Friendly help for setting up your email—works with Outlook, Apple Mail, Thunderbird, phones, and more.

-
+ + + + -
-

General Settings (All Clients)

- - - - - - - - - - - -
Email Addressyour.name@yourdomain.com
Usernameyour.name@yourdomain.com
Password(your email password)
Incoming Servermail.mifi.holdings
Outgoing Servermail.mifi.holdings
IMAP Port993 (SSL/TLS)
POP3 Port995 (SSL/TLS)
SMTP Port587 (STARTTLS) or 465 (SSL/TLS)
AuthenticationRequired (use same as incoming)
EncryptionSSL/TLS or STARTTLS
- Tip: Always use your full email address as your username! -
+ + + mifi Holdings — Email Setup & Help + + + + -
+ + + + + + +
+

Welcome to Email from mifi Ventures

+
+ Let's get your inbox ready! 📬
+

+ Friendly help for setting up your email—works with Outlook, + Apple Mail, Thunderbird, phones, and more. +

+
- -
- -
-
    -
  1. Go to File → Add Account
  2. -
  3. Enter your full email address
  4. -
  5. Choose Advanced options → check “Set up manually”
  6. -
  7. Select IMAP (recommended) or POP
  8. -
  9. Incoming server: mail.mifi.holdings, port 993 (SSL/TLS)
  10. -
  11. Outgoing server: mail.mifi.holdings, port 587 (STARTTLS) or 465 (SSL/TLS)
  12. -
  13. Username: full email address; Password: your password
  14. -
  15. Click Connect
  16. -
- If sending fails, make sure “Require logon using SPA” is unchecked. +
+

General Settings (All Clients)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Email Addressyour.name@yourdomain.com
Usernameyour.name@yourdomain.com
Password(your email password)
Incoming Servermail.mifi.holdings
Outgoing Servermail.mifi.holdings
IMAP Port993 (SSL/TLS)
POP3 Port995 (SSL/TLS)
SMTP Port587 (STARTTLS) or 465 (SSL/TLS)
AuthenticationRequired (use same as incoming)
EncryptionSSL/TLS or STARTTLS
+ Tip: Always use your full email address as your + username! +
+ +
+ +
+ +
+
    +
  1. Go to File → Add Account
  2. +
  3. Enter your full email address
  4. +
  5. + Choose Advanced options → check “Set up + manually” +
  6. +
  7. Select IMAP (recommended) or POP
  8. +
  9. + Incoming server: + mail.mifi.holdings, port + 993 (SSL/TLS) +
  10. +
  11. + Outgoing server: + mail.mifi.holdings, port + 587 (STARTTLS) or 465 (SSL/TLS) +
  12. +
  13. + Username: full email address; Password: your + password +
  14. +
  15. Click Connect
  16. +
+ If sending fails, make sure “Require logon using + SPA” is unchecked. +
+
+ + +
+ +
+
    +
  1. + Add Account → Other Mail Account +
  2. +
  3. Enter your name, email, and password
  4. +
  5. + Incoming/Outgoing server: + mail.mifi.holdings +
  6. +
  7. + IMAP port: 993 (SSL); SMTP port: + 587 (STARTTLS) or 465 (SSL) +
  8. +
  9. Use full email address for username
  10. +
+
+
+ + +
+ +
+
    +
  1. Menu → Account Settings → Add Mail Account
  2. +
  3. Fill in your name, email, and password
  4. +
  5. + Click “Configure manually” and use settings + above +
  6. +
+
+
+ + +
+ +
+
    +
  • Add Account → Other
  • +
  • Enter your email and password
  • +
  • + Manual setup: mail.mifi.holdings, + correct ports, SSL/TLS required +
  • +
  • + Gmail app: tap profile → Add account → Other, + fill in details, use IMAP +
  • +
+
+
+ + +
+ +
+
Q: My email won’t send?
+
+ Check that you’re using your full email address for + both incoming and outgoing username, and that the + port is 587 or 465. +
+
Q: SSL/TLS errors?
+
+ Ensure SSL or STARTTLS is enabled for both incoming + and outgoing mail. +
+
Q: Still stuck?
+
+ Contact + postmaster@mifi.holdings.
+ Please include any error messages, your mail app, + and a screenshot if you can! +
+
+
+ + +
+ +
+
    +
  • + IMAP syncs your mail everywhere—choose + IMAP unless you know you want POP3. +
  • +
  • + Your login is always your + full email address. +
  • +
  • + Check your Spam/Junk folder for misfiled good + emails. +
  • +
  • + Advanced: IMAP path prefix = + (leave blank); SMTP authentication is + always required. +
  • +
+
+
+
+
-
- - -
- -
-
    -
  1. Add Account → Other Mail Account
  2. -
  3. Enter your name, email, and password
  4. -
  5. Incoming/Outgoing server: mail.mifi.holdings
  6. -
  7. IMAP port: 993 (SSL); SMTP port: 587 (STARTTLS) or 465 (SSL)
  8. -
  9. Use full email address for username
  10. -
-
-
- - -
- -
-
    -
  1. Menu → Account Settings → Add Mail Account
  2. -
  3. Fill in your name, email, and password
  4. -
  5. Click “Configure manually” and use settings above
  6. -
-
-
- - -
- -
-
    -
  • Add Account → Other
  • -
  • Enter your email and password
  • -
  • Manual setup: mail.mifi.holdings, correct ports, SSL/TLS required
  • -
  • Gmail app: tap profile → Add account → Other, fill in details, use IMAP
  • -
-
-
- - -
- -
-
Q: My email won’t send?
-
Check that you’re using your full email address for both incoming and outgoing username, and that the port is 587 or 465.
-
Q: SSL/TLS errors?
-
Ensure SSL or STARTTLS is enabled for both incoming and outgoing mail.
-
Q: Still stuck?
-
Contact postmaster@mifi.holdings.
- Please include any error messages, your mail app, and a screenshot if you can!
-
-
- - -
- -
-
    -
  • IMAP syncs your mail everywhere—choose IMAP unless you know you want POP3.
  • -
  • Your login is always your full email address.
  • -
  • Check your Spam/Junk folder for misfiled good emails.
  • -
  • Advanced: IMAP path prefix = (leave blank); SMTP authentication is always required.
  • -
-
-
- -
- -
- - + + diff --git a/src/index.html b/src/index.html index 73cc160..df42823 100644 --- a/src/index.html +++ b/src/index.html @@ -1,103 +1,64 @@ - + - - - - mail.mifi.holdings - - - -
-
📮
-

This is just a mailbox.

-

- You’ve reached mail.mifi.holdings.
- There’s nothing exciting here—just some gears whirring and mail being sorted.
- Looking for your messages? -

- Email Setup Help - Go to Webmail - Change/Forgot Password -
- + + + + + + + + mifi Holdings — Mail Services + + + + + + + + + + + +
+
📮
+

This is just a mailbox.

+

+ You've reached mail.mifi.holdings.
+ There's nothing exciting here's nothing exciting + here—just some gears whirring and mail being sorted.
+ Looking for your messages? +

+ Email Setup Help + Go to Webmail + Change/Forgot Password +
+ diff --git a/stylelint.config.js b/stylelint.config.js new file mode 100644 index 0000000..aaeff91 --- /dev/null +++ b/stylelint.config.js @@ -0,0 +1,8 @@ +export default { + extends: ['stylelint-config-standard'], + overrides: [ + { + files: ['src/**/*.css'] + } + ] +}