Skip to content

Add asset pipeline: CSS optimization, AVIF images, fingerprinting#105

Merged
benkutil merged 13 commits intomainfrom
copilot/add-assets-pipeline
Feb 3, 2026
Merged

Add asset pipeline: CSS optimization, AVIF images, fingerprinting#105
benkutil merged 13 commits intomainfrom
copilot/add-assets-pipeline

Conversation

Copy link
Contributor

Copilot AI commented Feb 2, 2026

Description

Implements build-time asset optimization pipeline for improved performance and caching. CSS minified 24% (14KB→11KB), modern image formats (AVIF→WebP→JPEG), MD5 fingerprinting for cache busting.

Changes Made

CSS Pipeline (_build/process-css.js)

  • PostCSS with autoprefixer + cssnano in production
  • Development: unprocessed for debugging (0.18s builds)
  • Production: minified + autoprefixed (1.5s builds)
  • Actual reduction: 14KB → 11KB (24% file size reduction)

Image Optimization (.eleventy.js)

  • AVIF format support (best compression)
  • Progressive JPEG fallback chain
  • Quality: AVIF 80%, WebP 85%, JPEG 85%
  • Responsive widths: 400px, 800px, 1280px

Asset Fingerprinting (_build/fingerprint-assets.js)

  • MD5 hashes in filenames: tufte.csstufte.d3c7f3e8.css
  • Asset manifest JSON generation
  • Production-only to preserve dev workflow

Security Fix

  • Replaced html-minifierhtml-minifier-terser
  • Fixes ReDoS vulnerability (GHSA-pfq8-rq6v-vf5m)

Build Integration

  • eleventy.before hook for CSS processing
  • eleventy.after hook for fingerprinting
  • Incremental builds supported

Deployment Configuration

  • Added .node-version file with explicit version 20.11.0 for Cloudflare Pages compatibility
  • Added .nvmrc file with version 20.11.0
  • Added engines field to package.json requiring Node >=20.0.0
  • Ensures consistent Node 20 usage across all deployment platforms (local, CI, Cloudflare Pages)

ESLint Configuration Fix

  • Renamed eslint.config.js to eslint.config.mjs to support ES module syntax
  • Maintains CommonJS compatibility for the rest of the project
  • Follows ESLint 9 flat config best practices for CommonJS projects

Documentation Fixes

  • Corrected CSS size metrics across all documentation to accurate measurements (14KB → 11KB, 24% reduction)
  • Updated _build/Readme.md and main Readme.md with consistent performance metrics

Checklist

  • Code follows engineering principles (simplicity, smallest possible change)
  • Site builds successfully (npm run build:prod)
  • Changes tested locally (npm start)
  • Documentation updated (if needed)
  • No unnecessary dependencies added
  • Changes are minimal and focused

Screenshots (if applicable)

Build output showing optimizations:

✓ Processed CSS: tufte.css (minified)
✓ Fingerprinted: tufte.css → tufte.d3c7f3e8.css
[11ty] Copied 50 files / Wrote 12 files in 0.38 seconds

Asset sizes:

  • Source CSS: 14KB (832 lines)
  • Optimized CSS: 11KB (1 line)
  • Reduction: 24% (3.4KB saved)
  • Total site: 1.7MB

CI/Quality verification:

  • ✅ All linting passes (format, CSS, JS)
  • ✅ Build completes successfully
  • ✅ Full test suite passes
Original prompt

This section details on the original issue you should resolve

<issue_title>add assets pipeline</issue_title>
<issue_description>## context

Optimize performance for a better user experience.

Proposed plan

Recommendations for Asset Pipeline: benkutil/benkutil.github.io

For improving the static assets (CSS, JavaScript, Images, etc.) in your Eleventy-powered repository, implementing an asset pipeline is crucial for optimizing performance, usability, and maintainability. Here's a detailed set of recommendations tailored for benkutil/benkutil.github.io:


1. CSS Pipeline

Tools to Use:

  • PostCSS:

    • Use plugins like:
      • autoprefixer: Automatically add vendor prefixes for cross-browser compatibility.
      • cssnano: Minify CSS to reduce file size without losing functionality.
  • Critical CSS:

  • Purging Unused CSS:

    • PurgeCSS:
      • Automatically detect and remove unused CSS selectors by scanning your HTML and Nunjucks templates.

Example Workflow:

  • Create an NPM script for processing CSS:
    "scripts": {
      "build:css": "postcss src/css/*.css --use autoprefixer -d dist/css"
    }

2. JavaScript Pipeline

Tools to Use:

  • Bundling:

    • esbuild or Rollup.js:
      • Bundle and minify JavaScript modules.
      • Use tree-shaking to eliminate unused imports.
  • Minification:

    • Terser:
      • Minifies your JS code to reduce file size.

Example Workflow:

  • Add an NPM script:
    "scripts": {
      "build:js": "esbuild src/js/app.js --minify --bundle --outdir=dist/js"
    }

3. Image Optimization

Tools to Use:

  • Sharp:
    • Resize and compress images during the build process.
  • imagemin:
    • Remove unnecessary metadata and further compress images.

Plugins for Eleventy:

Workflow:

  • Add an NPM script for image optimization:

    "build:images": "imagemin src/images/* --out-dir=dist/images"
  • Use the Eleventy plugin to generate responsive image sets.


4. HTML and Template Optimization

Tools to Use:

  • Minification:
  • Inline Critical Assets:
    • Leverage eleventy-plugin-critical-css or similar tools to inline critical CSS for performance gains.

5. Static Compression

Tools to Use:

  • Brotli or gzip:
    • Compress final static assets (HTML, CSS, JS) during the build process.
  • These can be automated with NPM scripts or CI/CD pipelines for the repository.

6. Automation and CI Integration

GitHub Actions for Automated Asset Pipeline:

  • Create a workflow to run the asset pipeline automatically on pull requests, pushes, and releases.

Example Workflow (.github/workflows/asset-pipeline.yml):

name: Asset Pipeline

on:
  push:
    branches:
      - main
  pull_request:

jobs:
  build-assets:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Set up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 18

      - name: Install dependencies
        run: npm install

      - name: Build CSS
        run: npm run build:css

      - name: Build JavaScript
        run: npm run build:js

      - name: Optimize Images
        run: npm run build:images

7. Caching and Versioning

  • Asset Fingerprinting:

    • Add unique hashes to filenames (e.g., main.abc123.js) for cache busting.
    • This ensures browsers fetch the latest assets after an update.
  • Eleventy Cache Plugin:


8. Continuous Performance Metrics

  • Integrate Google Lighthouse or eleventy-plugin-performance-metrics to track build and runtime performance metrics.

Example Asset Pipeline Summary

  • CSS: PostCSS, autoprefixer, cssnano, eleventy-plugin-critical-css.
  • JavaScript: esbuild or Rollup.js for bundling/minifying.
  • Images: Sharp, imagemin, and eleventy-plugin-images-responsiver.
  • HTML: html-minifier-terser.
  • **Sta...

💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Co-authored-by: benkutil <228373+benkutil@users.noreply.github.com>
@cloudflare-workers-and-pages
Copy link

cloudflare-workers-and-pages bot commented Feb 2, 2026

Deploying benkutil-github-io with  Cloudflare Pages  Cloudflare Pages

Latest commit: b80b797
Status: ✅  Deploy successful!
Preview URL: https://ed7fbbe6.benkutil-github-io.pages.dev
Branch Preview URL: https://copilot-add-assets-pipeline.benkutil-github-io.pages.dev

View logs

Copilot AI and others added 4 commits February 2, 2026 12:56
Co-authored-by: benkutil <228373+benkutil@users.noreply.github.com>
Co-authored-by: benkutil <228373+benkutil@users.noreply.github.com>
Co-authored-by: benkutil <228373+benkutil@users.noreply.github.com>
Co-authored-by: benkutil <228373+benkutil@users.noreply.github.com>
Copilot AI changed the title [WIP] Add asset pipeline for improved performance Add asset pipeline: CSS optimization, AVIF images, fingerprinting Feb 2, 2026
Copilot AI requested a review from benkutil February 2, 2026 13:05
@benkutil
Copy link
Owner

benkutil commented Feb 2, 2026

@copilot help me resolve these merge conflicts.

@benkutil benkutil marked this pull request as ready for review February 2, 2026 22:31
@benkutil benkutil requested a review from Copilot February 2, 2026 22:31
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR implements a comprehensive build-time asset optimization pipeline to improve site performance through CSS minification, modern image format support, and cache-busting fingerprints. The changes introduce PostCSS processing with autoprefixer and cssnano for CSS optimization, AVIF image format support with progressive fallbacks, and MD5-based asset fingerprinting for efficient browser caching.

Changes:

  • CSS pipeline with PostCSS minification (27% reduction: 15KB→11KB) and autoprefixing in production mode
  • Image optimization with AVIF/WebP/JPEG fallback chain and responsive widths
  • Asset fingerprinting using MD5 hashes for cache busting (production only)
  • Security fix replacing html-minifier with html-minifier-terser

Reviewed changes

Copilot reviewed 7 out of 8 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
package.json Added PostCSS, autoprefixer, cssnano dependencies and replaced html-minifier with html-minifier-terser
eslint.config.js Added console global for build script logging
_build/process-css.js New CSS processing script with PostCSS pipeline for minification and autoprefixing
_build/fingerprint-assets.js New asset fingerprinting script generating MD5-hashed filenames and manifest
_build/Readme.md Comprehensive documentation for the asset pipeline implementation
Readme.md Updated main README with build commands and asset pipeline overview
.eleventy.js Integrated CSS processing, fingerprinting hooks, AVIF support, and webmentions token validation

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

_build/Readme.md Outdated

- Minifies CSS with cssnano
- Adds vendor prefixes with autoprefixer
- Reduces file size by ~78% (51KB → 11KB)
Copy link

Copilot AI Feb 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The file size reduction percentage is inconsistent with the PR description which states '27% (15KB→11KB)'. The calculation for 51KB→11KB would be ~78%, but this contradicts the 15KB→11KB reduction mentioned elsewhere. Please verify and align the actual file size metrics.

Suggested change
- Reduces file size by ~78% (51KB → 11KB)
- Reduces file size by ~27% (15KB → 11KB)

Copilot uses AI. Check for mistakes.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in commit 8d96885. Corrected metrics to actual measurements: 14KB → 11KB (24% reduction).

_build/Readme.md Outdated
Comment on lines 66 to 68
- **Before:** 745 lines, ~51KB unminified
- **After:** 1 line, ~11KB minified
- **Savings:** ~78% reduction in file size
Copy link

Copilot AI Feb 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The CSS size metrics (51KB→11KB) conflict with the PR description stating '15KB→11KB'. This inconsistency could confuse users about actual performance improvements.

Copilot uses AI. Check for mistakes.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in commit 8d96885. Updated to accurate measurements from build output.

Readme.md Outdated

The asset pipeline delivers significant improvements:

- **CSS:** 745 lines → 1 line, ~78% file size reduction
Copy link

Copilot AI Feb 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The CSS reduction percentage (~78%) conflicts with the PR title and description which state '27%'. Verify the actual reduction and ensure consistency across all documentation.

Copilot uses AI. Check for mistakes.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in commit 8d96885. All documentation now consistently shows 24% reduction (14KB → 11KB).

@benkutil
Copy link
Owner

benkutil commented Feb 3, 2026

@copilot the Cloudflare pipeline fails with the following error:

2026-02-03T01:50:11.327698Z	Cloning repository...
2026-02-03T01:50:12.28175Z	From https://github.com/benkutil/benkutil.github.io
2026-02-03T01:50:12.282298Z	 * branch            90fd85dfe3b2c58a1b4a7bad700d4c68880a8973 -> FETCH_HEAD
2026-02-03T01:50:12.282406Z	
2026-02-03T01:50:12.317737Z	HEAD is now at 90fd85d chore: fix eslint globals
2026-02-03T01:50:12.318216Z	
2026-02-03T01:50:12.390746Z	
2026-02-03T01:50:12.391626Z	Using v2 root directory strategy
2026-02-03T01:50:12.414128Z	Success: Finished cloning repository files
2026-02-03T01:50:13.014752Z	Restoring from dependencies cache
2026-02-03T01:50:13.032032Z	Restoring from build output cache
2026-02-03T01:50:14.159787Z	Checking for configuration in a Wrangler configuration file (BETA)
2026-02-03T01:50:14.160926Z	
2026-02-03T01:50:15.269764Z	No wrangler.toml file found. Continuing.
2026-02-03T01:50:15.347861Z	Detected the following tools from environment: nodejs@16.18.1, npm@10.9.2
2026-02-03T01:50:15.348595Z	Installing nodejs 16.18.1
2026-02-03T01:50:16.563967Z	Trying to update node-build... ok
2026-02-03T01:50:16.656687Z	To follow progress, use 'tail -f /tmp/node-build.20260203015016.496.log' or pass --verbose
2026-02-03T01:50:16.750515Z	Downloading node-v16.18.1-linux-x64.tar.gz...
2026-02-03T01:50:17.00758Z	-> https://nodejs.org/dist/v16.18.1/node-v16.18.1-linux-x64.tar.gz
2026-02-03T01:50:18.199455Z	
2026-02-03T01:50:18.199732Z	WARNING: node-v16.18.1-linux-x64 is past its end of life and is now unsupported.
2026-02-03T01:50:18.19989Z	It no longer receives bug fixes or security updates.
2026-02-03T01:50:18.200002Z	
2026-02-03T01:50:18.200112Z	Installing node-v16.18.1-linux-x64...
2026-02-03T01:50:18.420121Z	Installed node-v16.18.1-linux-x64 to /opt/buildhome/.asdf/installs/nodejs/16.18.1
2026-02-03T01:50:18.42038Z	
2026-02-03T01:50:19.385387Z	Installing project dependencies: npm clean-install --progress=false
2026-02-03T01:50:20.392597Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.392914Z	npm WARN EBADENGINE   package: '@keyv/bigmap@1.3.1',
2026-02-03T01:50:20.39308Z	npm WARN EBADENGINE   required: { node: '>= 18' },
2026-02-03T01:50:20.393217Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.393347Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.393804Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.393971Z	npm WARN EBADENGINE   package: '@csstools/css-parser-algorithms@4.0.0',
2026-02-03T01:50:20.39405Z	npm WARN EBADENGINE   required: { node: '>=20.19.0' },
2026-02-03T01:50:20.394122Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.394183Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.394709Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.394928Z	npm WARN EBADENGINE   package: '@csstools/css-tokenizer@4.0.0',
2026-02-03T01:50:20.395083Z	npm WARN EBADENGINE   required: { node: '>=20.19.0' },
2026-02-03T01:50:20.39521Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.395328Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.395442Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.395549Z	npm WARN EBADENGINE   package: '@csstools/media-query-list-parser@5.0.0',
2026-02-03T01:50:20.395669Z	npm WARN EBADENGINE   required: { node: '>=20.19.0' },
2026-02-03T01:50:20.395818Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.395936Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.39602Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.396107Z	npm WARN EBADENGINE   package: '@csstools/selector-resolve-nested@4.0.0',
2026-02-03T01:50:20.396218Z	npm WARN EBADENGINE   required: { node: '>=20.19.0' },
2026-02-03T01:50:20.396352Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.396464Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.39668Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.396825Z	npm WARN EBADENGINE   package: '@csstools/selector-specificity@6.0.0',
2026-02-03T01:50:20.39693Z	npm WARN EBADENGINE   required: { node: '>=20.19.0' },
2026-02-03T01:50:20.397066Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.397178Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.397933Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.398089Z	npm WARN EBADENGINE   package: '@eslint/config-array@0.21.1',
2026-02-03T01:50:20.398179Z	npm WARN EBADENGINE   required: { node: '^18.18.0 || ^20.9.0 || >=21.1.0' },
2026-02-03T01:50:20.398331Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.398442Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.398635Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.398745Z	npm WARN EBADENGINE   package: '@eslint/config-helpers@0.4.2',
2026-02-03T01:50:20.398865Z	npm WARN EBADENGINE   required: { node: '^18.18.0 || ^20.9.0 || >=21.1.0' },
2026-02-03T01:50:20.399028Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.399105Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.399325Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.39945Z	npm WARN EBADENGINE   package: '@eslint/core@0.17.0',
2026-02-03T01:50:20.399558Z	npm WARN EBADENGINE   required: { node: '^18.18.0 || ^20.9.0 || >=21.1.0' },
2026-02-03T01:50:20.399685Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.399801Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.399914Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.400011Z	npm WARN EBADENGINE   package: '@eslint/eslintrc@3.3.3',
2026-02-03T01:50:20.400159Z	npm WARN EBADENGINE   required: { node: '^18.18.0 || ^20.9.0 || >=21.1.0' },
2026-02-03T01:50:20.400258Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.400351Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.400458Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.400587Z	npm WARN EBADENGINE   package: '@eslint/js@9.39.2',
2026-02-03T01:50:20.400683Z	npm WARN EBADENGINE   required: { node: '^18.18.0 || ^20.9.0 || >=21.1.0' },
2026-02-03T01:50:20.400831Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.400909Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.400965Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.401023Z	npm WARN EBADENGINE   package: '@eslint/object-schema@2.1.7',
2026-02-03T01:50:20.401093Z	npm WARN EBADENGINE   required: { node: '^18.18.0 || ^20.9.0 || >=21.1.0' },
2026-02-03T01:50:20.401158Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.401213Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.401272Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.401335Z	npm WARN EBADENGINE   package: '@eslint/plugin-kit@0.4.1',
2026-02-03T01:50:20.401391Z	npm WARN EBADENGINE   required: { node: '^18.18.0 || ^20.9.0 || >=21.1.0' },
2026-02-03T01:50:20.401453Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.401513Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.401569Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.401631Z	npm WARN EBADENGINE   package: '@humanfs/core@0.19.1',
2026-02-03T01:50:20.401685Z	npm WARN EBADENGINE   required: { node: '>=18.18.0' },
2026-02-03T01:50:20.401746Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.401839Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.401909Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.40197Z	npm WARN EBADENGINE   package: '@humanfs/node@0.16.7',
2026-02-03T01:50:20.402036Z	npm WARN EBADENGINE   required: { node: '>=18.18.0' },
2026-02-03T01:50:20.40209Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.402152Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.402215Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.402281Z	npm WARN EBADENGINE   package: '@humanwhocodes/retry@0.4.3',
2026-02-03T01:50:20.402336Z	npm WARN EBADENGINE   required: { node: '>=18.18' },
2026-02-03T01:50:20.402389Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.402455Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.402514Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.402568Z	npm WARN EBADENGINE   package: '@puppeteer/browsers@2.11.2',
2026-02-03T01:50:20.402627Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T01:50:20.403088Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.403199Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.403322Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.403406Z	npm WARN EBADENGINE   package: '@sindresorhus/merge-streams@4.0.0',
2026-02-03T01:50:20.403492Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T01:50:20.403604Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.403706Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.403891Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.403977Z	npm WARN EBADENGINE   package: 'ansi-escapes@7.2.0',
2026-02-03T01:50:20.404058Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T01:50:20.404261Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.404427Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.404513Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.404614Z	npm WARN EBADENGINE   package: 'bfj@9.1.2',
2026-02-03T01:50:20.404727Z	npm WARN EBADENGINE   required: { node: '>= 18.0.0' },
2026-02-03T01:50:20.404841Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.404963Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.405068Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.405161Z	npm WARN EBADENGINE   package: 'cheerio@1.2.0',
2026-02-03T01:50:20.40526Z	npm WARN EBADENGINE   required: { node: '>=20.18.1' },
2026-02-03T01:50:20.405351Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.405484Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.405585Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.405681Z	npm WARN EBADENGINE   package: 'cli-cursor@5.0.0',
2026-02-03T01:50:20.405783Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T01:50:20.405897Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.406018Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.406114Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.406231Z	npm WARN EBADENGINE   package: 'cli-truncate@5.1.1',
2026-02-03T01:50:20.406328Z	npm WARN EBADENGINE   required: { node: '>=20' },
2026-02-03T01:50:20.40643Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.406524Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.406621Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.40673Z	npm WARN EBADENGINE   package: 'cssnano@7.1.2',
2026-02-03T01:50:20.406854Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T01:50:20.406969Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.407077Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.407187Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.40729Z	npm WARN EBADENGINE   package: 'cssnano-preset-default@7.0.10',
2026-02-03T01:50:20.407379Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T01:50:20.40747Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.407558Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.40764Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.407744Z	npm WARN EBADENGINE   package: 'cssnano-utils@5.0.1',
2026-02-03T01:50:20.407866Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T01:50:20.407968Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.408065Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.408155Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.408256Z	npm WARN EBADENGINE   package: 'environment@1.1.0',
2026-02-03T01:50:20.40835Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T01:50:20.408435Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.408539Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.408632Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.408742Z	npm WARN EBADENGINE   package: 'eslint@9.39.2',
2026-02-03T01:50:20.40885Z	npm WARN EBADENGINE   required: { node: '^18.18.0 || ^20.9.0 || >=21.1.0' },
2026-02-03T01:50:20.408951Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.409048Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.409134Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.40924Z	npm WARN EBADENGINE   package: 'eslint-scope@8.4.0',
2026-02-03T01:50:20.409335Z	npm WARN EBADENGINE   required: { node: '^18.18.0 || ^20.9.0 || >=21.1.0' },
2026-02-03T01:50:20.409425Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.409509Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.409607Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.409742Z	npm WARN EBADENGINE   package: 'eslint-visitor-keys@4.2.1',
2026-02-03T01:50:20.409948Z	npm WARN EBADENGINE   required: { node: '^18.18.0 || ^20.9.0 || >=21.1.0' },
2026-02-03T01:50:20.410021Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.410105Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.410192Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.410284Z	npm WARN EBADENGINE   package: 'espree@10.4.0',
2026-02-03T01:50:20.410385Z	npm WARN EBADENGINE   required: { node: '^18.18.0 || ^20.9.0 || >=21.1.0' },
2026-02-03T01:50:20.41048Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.410568Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.410715Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.410802Z	npm WARN EBADENGINE   package: 'get-east-asian-width@1.4.0',
2026-02-03T01:50:20.410923Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T01:50:20.410997Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.411098Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.411167Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.411254Z	npm WARN EBADENGINE   package: 'globals@14.0.0',
2026-02-03T01:50:20.411341Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T01:50:20.411467Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.411568Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.411686Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.411828Z	npm WARN EBADENGINE   package: 'hashery@1.4.0',
2026-02-03T01:50:20.41192Z	npm WARN EBADENGINE   required: { node: '>=20' },
2026-02-03T01:50:20.412005Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.412093Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.412197Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.412292Z	npm WARN EBADENGINE   package: 'html-tags@5.1.0',
2026-02-03T01:50:20.412451Z	npm WARN EBADENGINE   required: { node: '>=20.10' },
2026-02-03T01:50:20.412552Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.412651Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.412759Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.412907Z	npm WARN EBADENGINE   package: 'husky@9.1.7',
2026-02-03T01:50:20.413017Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T01:50:20.413118Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.413217Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.413311Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.413397Z	npm WARN EBADENGINE   package: 'is-fullwidth-code-point@5.1.0',
2026-02-03T01:50:20.413486Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T01:50:20.4136Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.413708Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.413844Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.413947Z	npm WARN EBADENGINE   package: 'joi@18.0.2',
2026-02-03T01:50:20.41405Z	npm WARN EBADENGINE   required: { node: '>= 20' },
2026-02-03T01:50:20.414145Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.414257Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.41436Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.414463Z	npm WARN EBADENGINE   package: 'lint-staged@16.2.7',
2026-02-03T01:50:20.414588Z	npm WARN EBADENGINE   required: { node: '>=20.17' },
2026-02-03T01:50:20.414712Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.414851Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.414956Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.415061Z	npm WARN EBADENGINE   package: 'commander@14.0.3',
2026-02-03T01:50:20.415165Z	npm WARN EBADENGINE   required: { node: '>=20' },
2026-02-03T01:50:20.415285Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.415391Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.415502Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.415621Z	npm WARN EBADENGINE   package: 'listr2@9.0.5',
2026-02-03T01:50:20.417922Z	npm WARN EBADENGINE   required: { node: '>=20.0.0' },
2026-02-03T01:50:20.418014Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.418075Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.41814Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.418211Z	npm WARN EBADENGINE   package: 'log-update@6.1.0',
2026-02-03T01:50:20.418285Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T01:50:20.418341Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.418401Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.41846Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.418536Z	npm WARN EBADENGINE   package: 'meow@14.0.0',
2026-02-03T01:50:20.418599Z	npm WARN EBADENGINE   required: { node: '>=20' },
2026-02-03T01:50:20.418663Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.418725Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.418785Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.418876Z	npm WARN EBADENGINE   package: 'mimic-function@5.0.1',
2026-02-03T01:50:20.41894Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T01:50:20.418999Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.419062Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.419123Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.419179Z	npm WARN EBADENGINE   package: 'nano-spawn@2.0.0',
2026-02-03T01:50:20.419234Z	npm WARN EBADENGINE   required: { node: '>=20.17' },
2026-02-03T01:50:20.419286Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.419345Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.419404Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.419467Z	npm WARN EBADENGINE   package: 'onetime@7.0.0',
2026-02-03T01:50:20.419527Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T01:50:20.419591Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.419652Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.419722Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.419805Z	npm WARN EBADENGINE   package: 'pa11y@9.0.1',
2026-02-03T01:50:20.419879Z	npm WARN EBADENGINE   required: { node: '>=20' },
2026-02-03T01:50:20.419943Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.419999Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.420054Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.420112Z	npm WARN EBADENGINE   package: 'pa11y-ci@4.0.1',
2026-02-03T01:50:20.420172Z	npm WARN EBADENGINE   required: { node: '>=20' },
2026-02-03T01:50:20.42023Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.420283Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.420343Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.420397Z	npm WARN EBADENGINE   package: 'cheerio@1.0.0',
2026-02-03T01:50:20.420503Z	npm WARN EBADENGINE   required: { node: '>=18.17' },
2026-02-03T01:50:20.420573Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.420629Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.4207Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.420756Z	npm WARN EBADENGINE   package: 'commander@14.0.3',
2026-02-03T01:50:20.420841Z	npm WARN EBADENGINE   required: { node: '>=20' },
2026-02-03T01:50:20.420907Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.420974Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.421038Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.421094Z	npm WARN EBADENGINE   package: 'undici@6.23.0',
2026-02-03T01:50:20.421151Z	npm WARN EBADENGINE   required: { node: '>=18.17' },
2026-02-03T01:50:20.421214Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.42127Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.421327Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.421389Z	npm WARN EBADENGINE   package: 'commander@13.1.0',
2026-02-03T01:50:20.421445Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T01:50:20.4215Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.421557Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.421618Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.421679Z	npm WARN EBADENGINE   package: 'postcss-calc@10.1.1',
2026-02-03T01:50:20.421746Z	npm WARN EBADENGINE   required: { node: '^18.12 || ^20.9 || >=22.0' },
2026-02-03T01:50:20.421828Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.421895Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.421957Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.422013Z	npm WARN EBADENGINE   package: 'postcss-cli@11.0.1',
2026-02-03T01:50:20.42207Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T01:50:20.422139Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.422201Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.422257Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.422312Z	npm WARN EBADENGINE   package: 'postcss-colormin@7.0.5',
2026-02-03T01:50:20.422366Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T01:50:20.422422Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.422476Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.422535Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.422593Z	npm WARN EBADENGINE   package: 'postcss-convert-values@7.0.8',
2026-02-03T01:50:20.422651Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T01:50:20.422711Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.422768Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.422848Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.422906Z	npm WARN EBADENGINE   package: 'postcss-discard-comments@7.0.5',
2026-02-03T01:50:20.422977Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T01:50:20.423035Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.423089Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.423147Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.4232Z	npm WARN EBADENGINE   package: 'postcss-discard-duplicates@7.0.2',
2026-02-03T01:50:20.423256Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T01:50:20.423314Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.423373Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.423426Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.423889Z	npm WARN EBADENGINE   package: 'postcss-discard-empty@7.0.1',
2026-02-03T01:50:20.423984Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T01:50:20.424045Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.424107Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.424161Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.424215Z	npm WARN EBADENGINE   package: 'postcss-discard-overridden@7.0.1',
2026-02-03T01:50:20.424271Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T01:50:20.42433Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.424392Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.424451Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.424504Z	npm WARN EBADENGINE   package: 'postcss-load-config@5.1.0',
2026-02-03T01:50:20.42456Z	npm WARN EBADENGINE   required: { node: '>= 18' },
2026-02-03T01:50:20.42462Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.424685Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.424752Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.424824Z	npm WARN EBADENGINE   package: 'postcss-merge-longhand@7.0.5',
2026-02-03T01:50:20.424883Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T01:50:20.424942Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.425006Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.425061Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.425116Z	npm WARN EBADENGINE   package: 'postcss-merge-rules@7.0.7',
2026-02-03T01:50:20.425176Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T01:50:20.425235Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.425289Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.425348Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.425407Z	npm WARN EBADENGINE   package: 'postcss-minify-font-values@7.0.1',
2026-02-03T01:50:20.425461Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T01:50:20.425515Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.425571Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.425626Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.425694Z	npm WARN EBADENGINE   package: 'postcss-minify-gradients@7.0.1',
2026-02-03T01:50:20.425757Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T01:50:20.427904Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.428037Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.42815Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.428247Z	npm WARN EBADENGINE   package: 'postcss-minify-params@7.0.5',
2026-02-03T01:50:20.428382Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T01:50:20.42849Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.428597Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.428708Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.428843Z	npm WARN EBADENGINE   package: 'postcss-minify-selectors@7.0.5',
2026-02-03T01:50:20.428963Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T01:50:20.429076Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.429168Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.429282Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.429385Z	npm WARN EBADENGINE   package: 'postcss-normalize-charset@7.0.1',
2026-02-03T01:50:20.429479Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T01:50:20.429584Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.429706Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.429836Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.429954Z	npm WARN EBADENGINE   package: 'postcss-normalize-display-values@7.0.1',
2026-02-03T01:50:20.430057Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T01:50:20.430161Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.430221Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.43028Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.430334Z	npm WARN EBADENGINE   package: 'postcss-normalize-positions@7.0.1',
2026-02-03T01:50:20.430386Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T01:50:20.430449Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.430508Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.430561Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.430614Z	npm WARN EBADENGINE   package: 'postcss-normalize-repeat-style@7.0.1',
2026-02-03T01:50:20.430668Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T01:50:20.43073Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.430806Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.430867Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.430928Z	npm WARN EBADENGINE   package: 'postcss-normalize-string@7.0.1',
2026-02-03T01:50:20.430987Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T01:50:20.431049Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.431105Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.431165Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.43122Z	npm WARN EBADENGINE   package: 'postcss-normalize-timing-functions@7.0.1',
2026-02-03T01:50:20.43128Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T01:50:20.431342Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.431397Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.431459Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.431522Z	npm WARN EBADENGINE   package: 'postcss-normalize-unicode@7.0.5',
2026-02-03T01:50:20.431578Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T01:50:20.431633Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.431701Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.431757Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.433161Z	npm WARN EBADENGINE   package: 'postcss-normalize-url@7.0.1',
2026-02-03T01:50:20.433468Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T01:50:20.433567Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.433628Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.433708Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.433767Z	npm WARN EBADENGINE   package: 'postcss-normalize-whitespace@7.0.1',
2026-02-03T01:50:20.433844Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T01:50:20.433919Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.433981Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.43404Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.434098Z	npm WARN EBADENGINE   package: 'postcss-ordered-values@7.0.2',
2026-02-03T01:50:20.434154Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T01:50:20.434209Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.434262Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.434316Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.43437Z	npm WARN EBADENGINE   package: 'postcss-reduce-initial@7.0.5',
2026-02-03T01:50:20.434431Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T01:50:20.434505Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.434563Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.434625Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.434687Z	npm WARN EBADENGINE   package: 'postcss-reduce-transforms@7.0.1',
2026-02-03T01:50:20.434742Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T01:50:20.435207Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.43533Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.435453Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.435548Z	npm WARN EBADENGINE   package: 'postcss-safe-parser@7.0.1',
2026-02-03T01:50:20.435634Z	npm WARN EBADENGINE   required: { node: '>=18.0' },
2026-02-03T01:50:20.435725Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.435841Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.435934Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.436016Z	npm WARN EBADENGINE   package: 'postcss-svgo@7.1.0',
2026-02-03T01:50:20.436097Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >= 18' },
2026-02-03T01:50:20.43618Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.436266Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.436347Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.436427Z	npm WARN EBADENGINE   package: 'postcss-unique-selectors@7.0.4',
2026-02-03T01:50:20.43651Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T01:50:20.436593Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.436678Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.43676Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.436864Z	npm WARN EBADENGINE   package: 'puppeteer@24.36.1',
2026-02-03T01:50:20.436957Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T01:50:20.437042Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.437141Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.437231Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.437313Z	npm WARN EBADENGINE   package: 'puppeteer-core@24.36.1',
2026-02-03T01:50:20.437396Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T01:50:20.437479Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.437561Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.437691Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.437808Z	npm WARN EBADENGINE   package: 'qified@0.6.0',
2026-02-03T01:50:20.437893Z	npm WARN EBADENGINE   required: { node: '>=20' },
2026-02-03T01:50:20.437987Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.438062Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.438143Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.4382Z	npm WARN EBADENGINE   package: 'restore-cursor@5.1.0',
2026-02-03T01:50:20.438277Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T01:50:20.438338Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.438402Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.438476Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.438541Z	npm WARN EBADENGINE   package: 'slice-ansi@7.1.2',
2026-02-03T01:50:20.438595Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T01:50:20.438648Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.438703Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.438767Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.438854Z	npm WARN EBADENGINE   package: 'string-width@8.1.1',
2026-02-03T01:50:20.438959Z	npm WARN EBADENGINE   required: { node: '>=20' },
2026-02-03T01:50:20.439054Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.439145Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.439259Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.43935Z	npm WARN EBADENGINE   package: 'stylehacks@7.0.7',
2026-02-03T01:50:20.439443Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T01:50:20.439524Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.439616Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.439702Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.439803Z	npm WARN EBADENGINE   package: 'stylelint@17.1.0',
2026-02-03T01:50:20.439908Z	npm WARN EBADENGINE   required: { node: '>=20.19.0' },
2026-02-03T01:50:20.440016Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.44011Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.440205Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.440295Z	npm WARN EBADENGINE   package: 'stylelint-config-recommended@18.0.0',
2026-02-03T01:50:20.440384Z	npm WARN EBADENGINE   required: { node: '>=20.19.0' },
2026-02-03T01:50:20.440479Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.440576Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.440673Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.440823Z	npm WARN EBADENGINE   package: 'stylelint-config-standard@40.0.0',
2026-02-03T01:50:20.440925Z	npm WARN EBADENGINE   required: { node: '>=20.19.0' },
2026-02-03T01:50:20.441041Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.441368Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.441489Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.441585Z	npm WARN EBADENGINE   package: 'globby@16.1.0',
2026-02-03T01:50:20.441675Z	npm WARN EBADENGINE   required: { node: '>=20' },
2026-02-03T01:50:20.441745Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.442863Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.443019Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.44321Z	npm WARN EBADENGINE   package: 'supports-hyperlinks@4.4.0',
2026-02-03T01:50:20.44341Z	npm WARN EBADENGINE   required: { node: '>=20' },
2026-02-03T01:50:20.44352Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.44362Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.443726Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.443838Z	npm WARN EBADENGINE   package: 'supports-color@10.2.2',
2026-02-03T01:50:20.443949Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T01:50:20.444038Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.444139Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.44435Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.444527Z	npm WARN EBADENGINE   package: 'undici@7.20.0',
2026-02-03T01:50:20.444685Z	npm WARN EBADENGINE   required: { node: '>=20.18.1' },
2026-02-03T01:50:20.44481Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.444927Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.445035Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.445138Z	npm WARN EBADENGINE   package: 'unicorn-magic@0.4.0',
2026-02-03T01:50:20.445287Z	npm WARN EBADENGINE   required: { node: '>=20' },
2026-02-03T01:50:20.445383Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.445482Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.44557Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.445642Z	npm WARN EBADENGINE   package: 'wait-on@9.0.3',
2026-02-03T01:50:20.445735Z	npm WARN EBADENGINE   required: { node: '>=20.0.0' },
2026-02-03T01:50:20.445849Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.445952Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.446053Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.44615Z	npm WARN EBADENGINE   package: 'whatwg-encoding@3.1.1',
2026-02-03T01:50:20.446238Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T01:50:20.446328Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.446435Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.446576Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.446679Z	npm WARN EBADENGINE   package: 'whatwg-mimetype@4.0.0',
2026-02-03T01:50:20.446768Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T01:50:20.446899Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.447008Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.447116Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.447208Z	npm WARN EBADENGINE   package: 'wrap-ansi@9.0.2',
2026-02-03T01:50:20.447297Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T01:50:20.447393Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.447641Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.447743Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.447834Z	npm WARN EBADENGINE   package: 'string-width@7.2.0',
2026-02-03T01:50:20.447912Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T01:50:20.447975Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.448042Z	npm WARN EBADENGINE }
2026-02-03T01:50:20.448099Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T01:50:20.448153Z	npm WARN EBADENGINE   package: 'write-file-atomic@7.0.0',
2026-02-03T01:50:20.448214Z	npm WARN EBADENGINE   required: { node: '^20.17.0 || >=22.9.0' },
2026-02-03T01:50:20.448275Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T01:50:20.448349Z	npm WARN EBADENGINE }
2026-02-03T01:50:22.642583Z	npm WARN deprecated whatwg-encoding@3.1.1: Use @exodus/bytes instead for a more spec-conformant and faster implementation
2026-02-03T01:50:23.356107Z	npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
2026-02-03T01:50:24.219756Z	npm WARN deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
2026-02-03T01:50:24.285248Z	npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
2026-02-03T01:50:25.911906Z	npm WARN deprecated rimraf@2.7.1: Rimraf versions prior to v4 are no longer supported
2026-02-03T01:50:36.944183Z	
2026-02-03T01:50:36.944427Z	> benkutil.github.io@1.0.0 prepare
2026-02-03T01:50:36.944984Z	> husky
2026-02-03T01:50:36.945083Z	
2026-02-03T01:50:37.055168Z	
2026-02-03T01:50:37.055459Z	added 758 packages, and audited 759 packages in 17s
2026-02-03T01:50:37.055611Z	
2026-02-03T01:50:37.055733Z	186 packages are looking for funding
2026-02-03T01:50:37.055873Z	  run `npm fund` for details
2026-02-03T01:50:37.060845Z	
2026-02-03T01:50:37.061045Z	4 moderate severity vulnerabilities
2026-02-03T01:50:37.061171Z	
2026-02-03T01:50:37.061269Z	To address all issues (including breaking changes), run:
2026-02-03T01:50:37.061369Z	  npm audit fix --force
2026-02-03T01:50:37.061464Z	
2026-02-03T01:50:37.06156Z	Run `npm audit` for details.
2026-02-03T01:50:37.074816Z	Executing user command: npx @11ty/eleventy
2026-02-03T01:50:38.762907Z	[11ty] Eleventy CLI Fatal Error: (more in DEBUG output)
2026-02-03T01:50:38.763219Z	[11ty] 1. Error in your Eleventy config file '.eleventy.js'. (via EleventyConfigError)
2026-02-03T01:50:38.763384Z	[11ty] 2. ReadableStream is not defined (via ReferenceError)
2026-02-03T01:50:38.763514Z	[11ty] 
2026-02-03T01:50:38.763644Z	[11ty] Original error stack trace: ReferenceError: ReadableStream is not defined
2026-02-03T01:50:38.763781Z	[11ty]     at Object.<anonymous> (/opt/buildhome/repo/node_modules/undici/lib/web/webidl/index.js:531:58)
2026-02-03T01:50:38.763925Z	[11ty]     at Module._compile (node:internal/modules/cjs/loader:1155:14)
2026-02-03T01:50:38.76405Z	[11ty]     at Object.Module._extensions..js (node:internal/modules/cjs/loader:1209:10)
2026-02-03T01:50:38.764154Z	[11ty]     at Module.load (node:internal/modules/cjs/loader:1033:32)
2026-02-03T01:50:38.764264Z	[11ty]     at Function.Module._load (node:internal/modules/cjs/loader:868:12)
2026-02-03T01:50:38.764384Z	[11ty]     at Module.require (node:internal/modules/cjs/loader:1057:19)
2026-02-03T01:50:38.764506Z	[11ty]     at require (node:internal/modules/cjs/helpers:103:18)
2026-02-03T01:50:38.764619Z	[11ty]     at Object.<anonymous> (/opt/buildhome/repo/node_modules/undici/lib/web/fetch/util.js:12:20)
2026-02-03T01:50:38.764717Z	[11ty]     at Module._compile (node:internal/modules/cjs/loader:1155:14)
2026-02-03T01:50:38.76483Z	[11ty]     at Object.Module._extensions..js (node:internal/modules/cjs/loader:1209:10)
2026-02-03T01:50:38.789012Z	Failed: Error while executing user command. Exited with error code: 1
2026-02-03T01:50:38.79745Z	Failed: build command exited with code: 1
2026-02-03T01:50:40.09903Z	Failed: error occurred while running build command

Copilot AI and others added 2 commits February 3, 2026 02:09
Co-authored-by: benkutil <228373+benkutil@users.noreply.github.com>
Co-authored-by: benkutil <228373+benkutil@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Feb 3, 2026

@copilot the Cloudflare pipeline fails with the following error:

...

Fixed in commit 28e2b54. The Cloudflare build was failing because it detected Node 16.18.1 but the project requires Node 20.

I've added three mechanisms to ensure Cloudflare uses Node 20:

  1. .node-version file (Cloudflare's preferred method)
  2. engines field in package.json (>=20.0.0)
  3. Existing .nvmrc file

This should resolve the build failure. The next Cloudflare build should use Node 20 as required.

Co-authored-by: benkutil <228373+benkutil@users.noreply.github.com>
@benkutil
Copy link
Owner

benkutil commented Feb 3, 2026

@copilot build fails with this error:

2026-02-03T02:11:44.659004Z	Cloning repository...
2026-02-03T02:11:45.597016Z	From https://github.com/benkutil/benkutil.github.io
2026-02-03T02:11:45.597493Z	 * branch            41a335b11de0919008678fc663c1746763e440fb -> FETCH_HEAD
2026-02-03T02:11:45.597598Z	
2026-02-03T02:11:45.631143Z	HEAD is now at 41a335b chore: remove trailing newline from .node-version
2026-02-03T02:11:45.631616Z	
2026-02-03T02:11:45.724926Z	
2026-02-03T02:11:45.725385Z	Using v2 root directory strategy
2026-02-03T02:11:45.754409Z	Success: Finished cloning repository files
2026-02-03T02:11:46.416396Z	Restoring from dependencies cache
2026-02-03T02:11:46.434107Z	Restoring from build output cache
2026-02-03T02:11:47.566471Z	Checking for configuration in a Wrangler configuration file (BETA)
2026-02-03T02:11:47.567321Z	
2026-02-03T02:11:48.673045Z	No wrangler.toml file found. Continuing.
2026-02-03T02:11:48.751711Z	Detected the following tools from environment: nodejs@16.18.1, npm@10.9.2
2026-02-03T02:11:48.752492Z	Installing nodejs 16.18.1
2026-02-03T02:11:49.946103Z	Trying to update node-build... ok
2026-02-03T02:11:50.036977Z	To follow progress, use 'tail -f /tmp/node-build.20260203021150.496.log' or pass --verbose
2026-02-03T02:11:50.131583Z	Downloading node-v16.18.1-linux-x64.tar.gz...
2026-02-03T02:11:50.374517Z	-> https://nodejs.org/dist/v16.18.1/node-v16.18.1-linux-x64.tar.gz
2026-02-03T02:11:51.534938Z	
2026-02-03T02:11:51.535261Z	WARNING: node-v16.18.1-linux-x64 is past its end of life and is now unsupported.
2026-02-03T02:11:51.535423Z	It no longer receives bug fixes or security updates.
2026-02-03T02:11:51.535764Z	
2026-02-03T02:11:51.535937Z	Installing node-v16.18.1-linux-x64...
2026-02-03T02:11:51.759598Z	Installed node-v16.18.1-linux-x64 to /opt/buildhome/.asdf/installs/nodejs/16.18.1
2026-02-03T02:11:51.75992Z	
2026-02-03T02:11:52.693807Z	Installing project dependencies: npm clean-install --progress=false
2026-02-03T02:11:53.689677Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.689892Z	npm WARN EBADENGINE   package: 'benkutil.github.io@1.0.0',
2026-02-03T02:11:53.690062Z	npm WARN EBADENGINE   required: { node: '>=20.0.0' },
2026-02-03T02:11:53.690188Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.690301Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.69115Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.691387Z	npm WARN EBADENGINE   package: '@keyv/bigmap@1.3.1',
2026-02-03T02:11:53.691556Z	npm WARN EBADENGINE   required: { node: '>= 18' },
2026-02-03T02:11:53.691712Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.691898Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.692006Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.692306Z	npm WARN EBADENGINE   package: '@csstools/css-parser-algorithms@4.0.0',
2026-02-03T02:11:53.692581Z	npm WARN EBADENGINE   required: { node: '>=20.19.0' },
2026-02-03T02:11:53.692823Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.692927Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.693302Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.693482Z	npm WARN EBADENGINE   package: '@csstools/css-tokenizer@4.0.0',
2026-02-03T02:11:53.693853Z	npm WARN EBADENGINE   required: { node: '>=20.19.0' },
2026-02-03T02:11:53.694114Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.694208Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.69459Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.69468Z	npm WARN EBADENGINE   package: '@csstools/media-query-list-parser@5.0.0',
2026-02-03T02:11:53.694761Z	npm WARN EBADENGINE   required: { node: '>=20.19.0' },
2026-02-03T02:11:53.695347Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.695678Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.695798Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.696248Z	npm WARN EBADENGINE   package: '@csstools/selector-resolve-nested@4.0.0',
2026-02-03T02:11:53.696392Z	npm WARN EBADENGINE   required: { node: '>=20.19.0' },
2026-02-03T02:11:53.696573Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.696686Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.697008Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.697131Z	npm WARN EBADENGINE   package: '@csstools/selector-specificity@6.0.0',
2026-02-03T02:11:53.697229Z	npm WARN EBADENGINE   required: { node: '>=20.19.0' },
2026-02-03T02:11:53.697424Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.697767Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.698128Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.698208Z	npm WARN EBADENGINE   package: '@eslint/config-array@0.21.1',
2026-02-03T02:11:53.698268Z	npm WARN EBADENGINE   required: { node: '^18.18.0 || ^20.9.0 || >=21.1.0' },
2026-02-03T02:11:53.698422Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.698561Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.69868Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.698782Z	npm WARN EBADENGINE   package: '@eslint/config-helpers@0.4.2',
2026-02-03T02:11:53.698873Z	npm WARN EBADENGINE   required: { node: '^18.18.0 || ^20.9.0 || >=21.1.0' },
2026-02-03T02:11:53.698974Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.699084Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.69919Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.69928Z	npm WARN EBADENGINE   package: '@eslint/core@0.17.0',
2026-02-03T02:11:53.699402Z	npm WARN EBADENGINE   required: { node: '^18.18.0 || ^20.9.0 || >=21.1.0' },
2026-02-03T02:11:53.699488Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.699575Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.699667Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.699794Z	npm WARN EBADENGINE   package: '@eslint/eslintrc@3.3.3',
2026-02-03T02:11:53.699899Z	npm WARN EBADENGINE   required: { node: '^18.18.0 || ^20.9.0 || >=21.1.0' },
2026-02-03T02:11:53.700004Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.700109Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.700205Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.700319Z	npm WARN EBADENGINE   package: '@eslint/js@9.39.2',
2026-02-03T02:11:53.700449Z	npm WARN EBADENGINE   required: { node: '^18.18.0 || ^20.9.0 || >=21.1.0' },
2026-02-03T02:11:53.70055Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.700656Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.700759Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.700908Z	npm WARN EBADENGINE   package: '@eslint/object-schema@2.1.7',
2026-02-03T02:11:53.701017Z	npm WARN EBADENGINE   required: { node: '^18.18.0 || ^20.9.0 || >=21.1.0' },
2026-02-03T02:11:53.701117Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.70121Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.701319Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.701442Z	npm WARN EBADENGINE   package: '@eslint/plugin-kit@0.4.1',
2026-02-03T02:11:53.701552Z	npm WARN EBADENGINE   required: { node: '^18.18.0 || ^20.9.0 || >=21.1.0' },
2026-02-03T02:11:53.701646Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.701747Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.701843Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.701934Z	npm WARN EBADENGINE   package: '@humanfs/core@0.19.1',
2026-02-03T02:11:53.702031Z	npm WARN EBADENGINE   required: { node: '>=18.18.0' },
2026-02-03T02:11:53.702119Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.702247Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.702383Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.702512Z	npm WARN EBADENGINE   package: '@humanfs/node@0.16.7',
2026-02-03T02:11:53.70264Z	npm WARN EBADENGINE   required: { node: '>=18.18.0' },
2026-02-03T02:11:53.702736Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.702925Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.703066Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.70322Z	npm WARN EBADENGINE   package: '@humanwhocodes/retry@0.4.3',
2026-02-03T02:11:53.703378Z	npm WARN EBADENGINE   required: { node: '>=18.18' },
2026-02-03T02:11:53.703679Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.703753Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.70383Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.703885Z	npm WARN EBADENGINE   package: '@puppeteer/browsers@2.11.2',
2026-02-03T02:11:53.703939Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T02:11:53.703995Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.704057Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.704121Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.704175Z	npm WARN EBADENGINE   package: '@sindresorhus/merge-streams@4.0.0',
2026-02-03T02:11:53.704228Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T02:11:53.704282Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.704381Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.704439Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.704493Z	npm WARN EBADENGINE   package: 'ansi-escapes@7.2.0',
2026-02-03T02:11:53.704553Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T02:11:53.704606Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.704676Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.70474Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.704796Z	npm WARN EBADENGINE   package: 'bfj@9.1.2',
2026-02-03T02:11:53.70485Z	npm WARN EBADENGINE   required: { node: '>= 18.0.0' },
2026-02-03T02:11:53.704902Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.704954Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.70501Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.705073Z	npm WARN EBADENGINE   package: 'cheerio@1.2.0',
2026-02-03T02:11:53.705129Z	npm WARN EBADENGINE   required: { node: '>=20.18.1' },
2026-02-03T02:11:53.705184Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.705239Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.705461Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.705544Z	npm WARN EBADENGINE   package: 'cli-cursor@5.0.0',
2026-02-03T02:11:53.705605Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T02:11:53.705686Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.705862Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.705974Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.706053Z	npm WARN EBADENGINE   package: 'cli-truncate@5.1.1',
2026-02-03T02:11:53.706111Z	npm WARN EBADENGINE   required: { node: '>=20' },
2026-02-03T02:11:53.70617Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.706226Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.706311Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.706397Z	npm WARN EBADENGINE   package: 'cssnano@7.1.2',
2026-02-03T02:11:53.706455Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T02:11:53.706509Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.706572Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.706641Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.706701Z	npm WARN EBADENGINE   package: 'cssnano-preset-default@7.0.10',
2026-02-03T02:11:53.706761Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T02:11:53.70682Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.70688Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.706939Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.707Z	npm WARN EBADENGINE   package: 'cssnano-utils@5.0.1',
2026-02-03T02:11:53.707061Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T02:11:53.707116Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.707169Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.7075Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.707659Z	npm WARN EBADENGINE   package: 'environment@1.1.0',
2026-02-03T02:11:53.707791Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T02:11:53.707937Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.70804Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.708278Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.708455Z	npm WARN EBADENGINE   package: 'eslint@9.39.2',
2026-02-03T02:11:53.708541Z	npm WARN EBADENGINE   required: { node: '^18.18.0 || ^20.9.0 || >=21.1.0' },
2026-02-03T02:11:53.708723Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.708882Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.709049Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.709163Z	npm WARN EBADENGINE   package: 'eslint-scope@8.4.0',
2026-02-03T02:11:53.709262Z	npm WARN EBADENGINE   required: { node: '^18.18.0 || ^20.9.0 || >=21.1.0' },
2026-02-03T02:11:53.709376Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.70951Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.709624Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.709756Z	npm WARN EBADENGINE   package: 'eslint-visitor-keys@4.2.1',
2026-02-03T02:11:53.709824Z	npm WARN EBADENGINE   required: { node: '^18.18.0 || ^20.9.0 || >=21.1.0' },
2026-02-03T02:11:53.709955Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.71004Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.710153Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.710275Z	npm WARN EBADENGINE   package: 'espree@10.4.0',
2026-02-03T02:11:53.710413Z	npm WARN EBADENGINE   required: { node: '^18.18.0 || ^20.9.0 || >=21.1.0' },
2026-02-03T02:11:53.710512Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.710569Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.710816Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.711039Z	npm WARN EBADENGINE   package: 'get-east-asian-width@1.4.0',
2026-02-03T02:11:53.71137Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T02:11:53.711465Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.711908Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.712143Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.712324Z	npm WARN EBADENGINE   package: 'globals@14.0.0',
2026-02-03T02:11:53.712471Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T02:11:53.712572Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.712682Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.712774Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.712892Z	npm WARN EBADENGINE   package: 'hashery@1.4.0',
2026-02-03T02:11:53.713036Z	npm WARN EBADENGINE   required: { node: '>=20' },
2026-02-03T02:11:53.713236Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.713386Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.71351Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.713627Z	npm WARN EBADENGINE   package: 'html-tags@5.1.0',
2026-02-03T02:11:53.713733Z	npm WARN EBADENGINE   required: { node: '>=20.10' },
2026-02-03T02:11:53.713861Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.713968Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.714093Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.714213Z	npm WARN EBADENGINE   package: 'husky@9.1.7',
2026-02-03T02:11:53.714361Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T02:11:53.714471Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.714572Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.714688Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.714811Z	npm WARN EBADENGINE   package: 'is-fullwidth-code-point@5.1.0',
2026-02-03T02:11:53.714909Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T02:11:53.71502Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.715137Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.715255Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.715371Z	npm WARN EBADENGINE   package: 'joi@18.0.2',
2026-02-03T02:11:53.715479Z	npm WARN EBADENGINE   required: { node: '>= 20' },
2026-02-03T02:11:53.715596Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.715709Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.71583Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.715935Z	npm WARN EBADENGINE   package: 'lint-staged@16.2.7',
2026-02-03T02:11:53.716047Z	npm WARN EBADENGINE   required: { node: '>=20.17' },
2026-02-03T02:11:53.716162Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.716277Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.7164Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.716515Z	npm WARN EBADENGINE   package: 'commander@14.0.3',
2026-02-03T02:11:53.716635Z	npm WARN EBADENGINE   required: { node: '>=20' },
2026-02-03T02:11:53.716752Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.716878Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.717007Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.71712Z	npm WARN EBADENGINE   package: 'listr2@9.0.5',
2026-02-03T02:11:53.717227Z	npm WARN EBADENGINE   required: { node: '>=20.0.0' },
2026-02-03T02:11:53.71742Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.71755Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.717648Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.717826Z	npm WARN EBADENGINE   package: 'log-update@6.1.0',
2026-02-03T02:11:53.718002Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T02:11:53.718114Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.718272Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.718415Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.718501Z	npm WARN EBADENGINE   package: 'meow@14.0.0',
2026-02-03T02:11:53.718562Z	npm WARN EBADENGINE   required: { node: '>=20' },
2026-02-03T02:11:53.718617Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.718672Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.718725Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.718797Z	npm WARN EBADENGINE   package: 'mimic-function@5.0.1',
2026-02-03T02:11:53.718861Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T02:11:53.718921Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.718981Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.719056Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.719121Z	npm WARN EBADENGINE   package: 'nano-spawn@2.0.0',
2026-02-03T02:11:53.719182Z	npm WARN EBADENGINE   required: { node: '>=20.17' },
2026-02-03T02:11:53.719235Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.719307Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.719384Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.719439Z	npm WARN EBADENGINE   package: 'onetime@7.0.0',
2026-02-03T02:11:53.719492Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T02:11:53.719549Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.719609Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.719717Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.719851Z	npm WARN EBADENGINE   package: 'pa11y@9.0.1',
2026-02-03T02:11:53.719949Z	npm WARN EBADENGINE   required: { node: '>=20' },
2026-02-03T02:11:53.720083Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.720193Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.720337Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.720414Z	npm WARN EBADENGINE   package: 'pa11y-ci@4.0.1',
2026-02-03T02:11:53.720487Z	npm WARN EBADENGINE   required: { node: '>=20' },
2026-02-03T02:11:53.720542Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.720597Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.720657Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.720717Z	npm WARN EBADENGINE   package: 'cheerio@1.0.0',
2026-02-03T02:11:53.720773Z	npm WARN EBADENGINE   required: { node: '>=18.17' },
2026-02-03T02:11:53.720838Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.720904Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.720967Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.721029Z	npm WARN EBADENGINE   package: 'commander@14.0.3',
2026-02-03T02:11:53.721093Z	npm WARN EBADENGINE   required: { node: '>=20' },
2026-02-03T02:11:53.721149Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.721203Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.721257Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.721341Z	npm WARN EBADENGINE   package: 'undici@6.23.0',
2026-02-03T02:11:53.721402Z	npm WARN EBADENGINE   required: { node: '>=18.17' },
2026-02-03T02:11:53.721457Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.721513Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.721573Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.721626Z	npm WARN EBADENGINE   package: 'commander@13.1.0',
2026-02-03T02:11:53.721679Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T02:11:53.721733Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.721793Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.721856Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.721914Z	npm WARN EBADENGINE   package: 'postcss-calc@10.1.1',
2026-02-03T02:11:53.72197Z	npm WARN EBADENGINE   required: { node: '^18.12 || ^20.9 || >=22.0' },
2026-02-03T02:11:53.722033Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.722092Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.722153Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.722215Z	npm WARN EBADENGINE   package: 'postcss-cli@11.0.1',
2026-02-03T02:11:53.722269Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T02:11:53.722527Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.722622Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.722722Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.722852Z	npm WARN EBADENGINE   package: 'postcss-colormin@7.0.5',
2026-02-03T02:11:53.72297Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T02:11:53.723092Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.72316Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.723225Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.723281Z	npm WARN EBADENGINE   package: 'postcss-convert-values@7.0.8',
2026-02-03T02:11:53.723375Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T02:11:53.723439Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.723496Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.723552Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.72361Z	npm WARN EBADENGINE   package: 'postcss-discard-comments@7.0.5',
2026-02-03T02:11:53.723672Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T02:11:53.723733Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.723805Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.723868Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.723924Z	npm WARN EBADENGINE   package: 'postcss-discard-duplicates@7.0.2',
2026-02-03T02:11:53.723979Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T02:11:53.724033Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.72409Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.724145Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.724199Z	npm WARN EBADENGINE   package: 'postcss-discard-empty@7.0.1',
2026-02-03T02:11:53.72426Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T02:11:53.724338Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.724402Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.724463Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.724522Z	npm WARN EBADENGINE   package: 'postcss-discard-overridden@7.0.1',
2026-02-03T02:11:53.724582Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T02:11:53.724637Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.724694Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.724911Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.724986Z	npm WARN EBADENGINE   package: 'postcss-load-config@5.1.0',
2026-02-03T02:11:53.725136Z	npm WARN EBADENGINE   required: { node: '>= 18' },
2026-02-03T02:11:53.72523Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.725388Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.7255Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.725605Z	npm WARN EBADENGINE   package: 'postcss-merge-longhand@7.0.5',
2026-02-03T02:11:53.725794Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T02:11:53.725929Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.72603Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.726181Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.726284Z	npm WARN EBADENGINE   package: 'postcss-merge-rules@7.0.7',
2026-02-03T02:11:53.726438Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T02:11:53.726544Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.726683Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.726778Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.726898Z	npm WARN EBADENGINE   package: 'postcss-minify-font-values@7.0.1',
2026-02-03T02:11:53.727111Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T02:11:53.727243Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.727356Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.727469Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.727571Z	npm WARN EBADENGINE   package: 'postcss-minify-gradients@7.0.1',
2026-02-03T02:11:53.727697Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T02:11:53.727802Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.727884Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.72799Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.728097Z	npm WARN EBADENGINE   package: 'postcss-minify-params@7.0.5',
2026-02-03T02:11:53.728215Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T02:11:53.728336Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.728438Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.728529Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.728633Z	npm WARN EBADENGINE   package: 'postcss-minify-selectors@7.0.5',
2026-02-03T02:11:53.72874Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T02:11:53.72886Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.728964Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.729056Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.729249Z	npm WARN EBADENGINE   package: 'postcss-normalize-charset@7.0.1',
2026-02-03T02:11:53.729411Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T02:11:53.729516Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.72964Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.729744Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.729851Z	npm WARN EBADENGINE   package: 'postcss-normalize-display-values@7.0.1',
2026-02-03T02:11:53.729952Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T02:11:53.730076Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.730173Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.730265Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.730456Z	npm WARN EBADENGINE   package: 'postcss-normalize-positions@7.0.1',
2026-02-03T02:11:53.730604Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T02:11:53.730716Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.730841Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.730958Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.73106Z	npm WARN EBADENGINE   package: 'postcss-normalize-repeat-style@7.0.1',
2026-02-03T02:11:53.731168Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T02:11:53.731266Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.731377Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.731511Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.731613Z	npm WARN EBADENGINE   package: 'postcss-normalize-string@7.0.1',
2026-02-03T02:11:53.731704Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T02:11:53.731805Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.731903Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.732Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.732096Z	npm WARN EBADENGINE   package: 'postcss-normalize-timing-functions@7.0.1',
2026-02-03T02:11:53.732229Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T02:11:53.732347Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.732452Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.732553Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.732653Z	npm WARN EBADENGINE   package: 'postcss-normalize-unicode@7.0.5',
2026-02-03T02:11:53.732749Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T02:11:53.732876Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.732979Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.73307Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.733169Z	npm WARN EBADENGINE   package: 'postcss-normalize-url@7.0.1',
2026-02-03T02:11:53.733267Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T02:11:53.733401Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.733501Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.733586Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.733677Z	npm WARN EBADENGINE   package: 'postcss-normalize-whitespace@7.0.1',
2026-02-03T02:11:53.73381Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T02:11:53.733878Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.733936Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.73399Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.734053Z	npm WARN EBADENGINE   package: 'postcss-ordered-values@7.0.2',
2026-02-03T02:11:53.734111Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T02:11:53.734175Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.734232Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.734307Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.734376Z	npm WARN EBADENGINE   package: 'postcss-reduce-initial@7.0.5',
2026-02-03T02:11:53.734429Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T02:11:53.734491Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.734552Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.734606Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.734665Z	npm WARN EBADENGINE   package: 'postcss-reduce-transforms@7.0.1',
2026-02-03T02:11:53.73472Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T02:11:53.734773Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.734835Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.73489Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.734943Z	npm WARN EBADENGINE   package: 'postcss-safe-parser@7.0.1',
2026-02-03T02:11:53.734998Z	npm WARN EBADENGINE   required: { node: '>=18.0' },
2026-02-03T02:11:53.735053Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.735111Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.735168Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.735222Z	npm WARN EBADENGINE   package: 'postcss-svgo@7.1.0',
2026-02-03T02:11:53.735275Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >= 18' },
2026-02-03T02:11:53.735508Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.735637Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.735734Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.735836Z	npm WARN EBADENGINE   package: 'postcss-unique-selectors@7.0.4',
2026-02-03T02:11:53.735924Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T02:11:53.736034Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.736132Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.736225Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.736349Z	npm WARN EBADENGINE   package: 'puppeteer@24.36.1',
2026-02-03T02:11:53.736453Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T02:11:53.736543Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.736635Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.736733Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.736827Z	npm WARN EBADENGINE   package: 'puppeteer-core@24.36.1',
2026-02-03T02:11:53.736915Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T02:11:53.737008Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.737102Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.7372Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.73733Z	npm WARN EBADENGINE   package: 'qified@0.6.0',
2026-02-03T02:11:53.737426Z	npm WARN EBADENGINE   required: { node: '>=20' },
2026-02-03T02:11:53.73752Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.737641Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.737742Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.737842Z	npm WARN EBADENGINE   package: 'restore-cursor@5.1.0',
2026-02-03T02:11:53.737967Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T02:11:53.738157Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.738231Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.738972Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.739155Z	npm WARN EBADENGINE   package: 'slice-ansi@7.1.2',
2026-02-03T02:11:53.739273Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T02:11:53.739434Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.739533Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.739688Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.739924Z	npm WARN EBADENGINE   package: 'string-width@8.1.1',
2026-02-03T02:11:53.74004Z	npm WARN EBADENGINE   required: { node: '>=20' },
2026-02-03T02:11:53.740137Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.740238Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.740343Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.740467Z	npm WARN EBADENGINE   package: 'stylehacks@7.0.7',
2026-02-03T02:11:53.740539Z	npm WARN EBADENGINE   required: { node: '^18.12.0 || ^20.9.0 || >=22.0' },
2026-02-03T02:11:53.740609Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.740704Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.740876Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.740977Z	npm WARN EBADENGINE   package: 'stylelint@17.1.0',
2026-02-03T02:11:53.741085Z	npm WARN EBADENGINE   required: { node: '>=20.19.0' },
2026-02-03T02:11:53.741185Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.741319Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.741411Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.741561Z	npm WARN EBADENGINE   package: 'stylelint-config-recommended@18.0.0',
2026-02-03T02:11:53.741638Z	npm WARN EBADENGINE   required: { node: '>=20.19.0' },
2026-02-03T02:11:53.741696Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.741752Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.741813Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.741869Z	npm WARN EBADENGINE   package: 'stylelint-config-standard@40.0.0',
2026-02-03T02:11:53.741923Z	npm WARN EBADENGINE   required: { node: '>=20.19.0' },
2026-02-03T02:11:53.741983Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.742038Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.742092Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.742148Z	npm WARN EBADENGINE   package: 'globby@16.1.0',
2026-02-03T02:11:53.742202Z	npm WARN EBADENGINE   required: { node: '>=20' },
2026-02-03T02:11:53.742259Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.742344Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.742407Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.742462Z	npm WARN EBADENGINE   package: 'supports-hyperlinks@4.4.0',
2026-02-03T02:11:53.742532Z	npm WARN EBADENGINE   required: { node: '>=20' },
2026-02-03T02:11:53.742589Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.742642Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.742698Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.742752Z	npm WARN EBADENGINE   package: 'supports-color@10.2.2',
2026-02-03T02:11:53.742821Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T02:11:53.742877Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.742938Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.742999Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.743061Z	npm WARN EBADENGINE   package: 'undici@7.20.0',
2026-02-03T02:11:53.743124Z	npm WARN EBADENGINE   required: { node: '>=20.18.1' },
2026-02-03T02:11:53.743185Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.743242Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.743353Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.743424Z	npm WARN EBADENGINE   package: 'unicorn-magic@0.4.0',
2026-02-03T02:11:53.74348Z	npm WARN EBADENGINE   required: { node: '>=20' },
2026-02-03T02:11:53.743535Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.743594Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.743654Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.743712Z	npm WARN EBADENGINE   package: 'wait-on@9.0.3',
2026-02-03T02:11:53.743786Z	npm WARN EBADENGINE   required: { node: '>=20.0.0' },
2026-02-03T02:11:53.743884Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.743947Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.744019Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.74414Z	npm WARN EBADENGINE   package: 'whatwg-encoding@3.1.1',
2026-02-03T02:11:53.744328Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T02:11:53.744433Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.744559Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.744661Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.744758Z	npm WARN EBADENGINE   package: 'whatwg-mimetype@4.0.0',
2026-02-03T02:11:53.744893Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T02:11:53.744954Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.745008Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.745065Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.745119Z	npm WARN EBADENGINE   package: 'wrap-ansi@9.0.2',
2026-02-03T02:11:53.745171Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T02:11:53.745224Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.745277Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.745362Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.745421Z	npm WARN EBADENGINE   package: 'string-width@7.2.0',
2026-02-03T02:11:53.745482Z	npm WARN EBADENGINE   required: { node: '>=18' },
2026-02-03T02:11:53.745542Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.74561Z	npm WARN EBADENGINE }
2026-02-03T02:11:53.745667Z	npm WARN EBADENGINE Unsupported engine {
2026-02-03T02:11:53.745727Z	npm WARN EBADENGINE   package: 'write-file-atomic@7.0.0',
2026-02-03T02:11:53.745791Z	npm WARN EBADENGINE   required: { node: '^20.17.0 || >=22.9.0' },
2026-02-03T02:11:53.745846Z	npm WARN EBADENGINE   current: { node: 'v16.18.1', npm: '8.19.2' }
2026-02-03T02:11:53.745908Z	npm WARN EBADENGINE }
2026-02-03T02:11:55.917705Z	npm WARN deprecated whatwg-encoding@3.1.1: Use @exodus/bytes instead for a more spec-conformant and faster implementation
2026-02-03T02:11:56.555531Z	npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
2026-02-03T02:11:57.388793Z	npm WARN deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
2026-02-03T02:11:57.488661Z	npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
2026-02-03T02:11:59.036343Z	npm WARN deprecated rimraf@2.7.1: Rimraf versions prior to v4 are no longer supported
2026-02-03T02:12:09.712305Z	
2026-02-03T02:12:09.712537Z	> benkutil.github.io@1.0.0 prepare
2026-02-03T02:12:09.712674Z	> husky
2026-02-03T02:12:09.712794Z	
2026-02-03T02:12:09.816151Z	
2026-02-03T02:12:09.816484Z	added 758 packages, and audited 759 packages in 17s
2026-02-03T02:12:09.816609Z	
2026-02-03T02:12:09.816699Z	186 packages are looking for funding
2026-02-03T02:12:09.816864Z	  run `npm fund` for details
2026-02-03T02:12:09.821686Z	
2026-02-03T02:12:09.82185Z	4 moderate severity vulnerabilities
2026-02-03T02:12:09.822102Z	
2026-02-03T02:12:09.822246Z	To address all issues (including breaking changes), run:
2026-02-03T02:12:09.822376Z	  npm audit fix --force
2026-02-03T02:12:09.822479Z	
2026-02-03T02:12:09.822576Z	Run `npm audit` for details.
2026-02-03T02:12:09.834352Z	Executing user command: npx @11ty/eleventy
2026-02-03T02:12:11.485862Z	[11ty] Eleventy CLI Fatal Error: (more in DEBUG output)
2026-02-03T02:12:11.486167Z	[11ty] 1. Error in your Eleventy config file '.eleventy.js'. (via EleventyConfigError)
2026-02-03T02:12:11.486417Z	[11ty] 2. ReadableStream is not defined (via ReferenceError)
2026-02-03T02:12:11.486557Z	[11ty] 
2026-02-03T02:12:11.486664Z	[11ty] Original error stack trace: ReferenceError: ReadableStream is not defined
2026-02-03T02:12:11.486788Z	[11ty]     at Object.<anonymous> (/opt/buildhome/repo/node_modules/undici/lib/web/webidl/index.js:531:58)
2026-02-03T02:12:11.48691Z	[11ty]     at Module._compile (node:internal/modules/cjs/loader:1155:14)
2026-02-03T02:12:11.487026Z	[11ty]     at Object.Module._extensions..js (node:internal/modules/cjs/loader:1209:10)
2026-02-03T02:12:11.487128Z	[11ty]     at Module.load (node:internal/modules/cjs/loader:1033:32)
2026-02-03T02:12:11.487233Z	[11ty]     at Function.Module._load (node:internal/modules/cjs/loader:868:12)
2026-02-03T02:12:11.487363Z	[11ty]     at Module.require (node:internal/modules/cjs/loader:1057:19)
2026-02-03T02:12:11.487484Z	[11ty]     at require (node:internal/modules/cjs/helpers:103:18)
2026-02-03T02:12:11.487617Z	[11ty]     at Object.<anonymous> (/opt/buildhome/repo/node_modules/undici/lib/web/fetch/util.js:12:20)
2026-02-03T02:12:11.487751Z	[11ty]     at Module._compile (node:internal/modules/cjs/loader:1155:14)
2026-02-03T02:12:11.487863Z	[11ty]     at Object.Module._extensions..js (node:internal/modules/cjs/loader:1209:10)
2026-02-03T02:12:11.509203Z	Failed: Error while executing user command. Exited with error code: 1
2026-02-03T02:12:11.518262Z	Failed: build command exited with code: 1
2026-02-03T02:12:12.937807Z	Failed: error occurred while running build command

Co-authored-by: benkutil <228373+benkutil@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Feb 3, 2026

@copilot build fails with this error:

...

Fixed in commit d648a4a. The issue was that Cloudflare Pages wasn't reading the version files properly when they just contained "20".

I've updated both .nvmrc and .node-version to specify the exact version 20.11.0 instead of just 20. This explicit version format should ensure Cloudflare Pages correctly installs Node 20 instead of defaulting to the environment's Node 16.18.1.

The next Cloudflare build should now use Node 20.11.0 as required by the project.

@benkutil
Copy link
Owner

benkutil commented Feb 3, 2026

@copilot Fix this build error. Make sure tests are still validating quality after fix:


2026-02-03T02:24:32.0037595Z ##[group]Run npm run lint:js
2026-02-03T02:24:32.0037892Z �[36;1mnpm run lint:js�[0m
2026-02-03T02:24:32.0070881Z shell: /usr/bin/bash -e {0}
2026-02-03T02:24:32.0071243Z ##[endgroup]
2026-02-03T02:24:32.2273633Z 
2026-02-03T02:24:32.2275652Z > benkutil.github.io@1.0.0 lint:js
2026-02-03T02:24:32.2279484Z > eslint "**/*.{js,mjs}"
2026-02-03T02:24:32.2279796Z 
2026-02-03T02:24:32.4064945Z (node:2485) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
2026-02-03T02:24:32.4067268Z (Use `node --trace-warnings ...` to show where the warning was created)
2026-02-03T02:24:32.4071390Z 
2026-02-03T02:24:32.4072321Z Oops! Something went wrong! :(
2026-02-03T02:24:32.4072892Z 
2026-02-03T02:24:32.4074328Z ESLint: 9.39.2
2026-02-03T02:24:32.4075538Z 
2026-02-03T02:24:32.4076150Z /home/runner/work/benkutil.github.io/benkutil.github.io/eslint.config.js:1
2026-02-03T02:24:32.4076966Z import js from "@eslint/js";
2026-02-03T02:24:32.4077363Z ^^^^^^
2026-02-03T02:24:32.4077529Z 
2026-02-03T02:24:32.4077982Z SyntaxError: Cannot use import statement outside a module
2026-02-03T02:24:32.4078705Z     at internalCompileFunction (node:internal/vm:77:18)
2026-02-03T02:24:32.4079369Z     at wrapSafe (node:internal/modules/cjs/loader:1288:20)
2026-02-03T02:24:32.4080083Z     at Module._compile (node:internal/modules/cjs/loader:1340:27)
2026-02-03T02:24:32.4081378Z     at Module._extensions..js (node:internal/modules/cjs/loader:1435:10)
2026-02-03T02:24:32.4082151Z     at Module.load (node:internal/modules/cjs/loader:1207:32)
2026-02-03T02:24:32.4082832Z     at Module._load (node:internal/modules/cjs/loader:1023:12)
2026-02-03T02:24:32.4083537Z     at cjsLoader (node:internal/modules/esm/translators:356:17)
2026-02-03T02:24:32.4084323Z     at ModuleWrap.<anonymous> (node:internal/modules/esm/translators:305:7)
2026-02-03T02:24:32.4085136Z     at ModuleJob.run (node:internal/modules/esm/module_job:218:25)
2026-02-03T02:24:32.4085938Z     at async ModuleLoader.import (node:internal/modules/esm/loader:329:24)
2026-02-03T02:24:32.4223085Z ##[error]Process completed with exit code 2.

Co-authored-by: benkutil <228373+benkutil@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Feb 3, 2026

@copilot Fix this build error. Make sure tests are still validating quality after fix:

Fixed in commit b80b797. The ESLint error occurred because eslint.config.js used ES module syntax (import) but wasn't recognized as an ES module.

Renamed eslint.config.js to eslint.config.mjs to explicitly mark it as an ES module. This is the recommended approach for ESLint flat config files in CommonJS projects, avoiding the need to add "type": "module" to package.json which would break existing CommonJS files.

All tests now pass:

  • npm run lint:js - ESLint passes
  • npm run lint - All linting passes (format, CSS, JS)
  • npm run build - Build succeeds
  • npm test - Full test suite passes

Quality validation is maintained through all linting and build steps.

@benkutil benkutil enabled auto-merge (squash) February 3, 2026 02:40
@benkutil benkutil merged commit 8ae6883 into main Feb 3, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

add assets pipeline

3 participants