diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..fa8c92a
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,45 @@
+name: CI
+
+on:
+ push:
+ branches: [ main, copilot/** ]
+ pull_request:
+ branches: [ main ]
+
+jobs:
+ lint-and-build:
+ runs-on: ubuntu-latest
+
+ strategy:
+ matrix:
+ node-version: [18.x, 20.x]
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+
+ - name: Setup Node.js ${{ matrix.node-version }}
+ uses: actions/setup-node@v4
+ with:
+ node-version: ${{ matrix.node-version }}
+ cache: 'npm'
+
+ - name: Install dependencies
+ run: npm ci
+
+ - name: Run ESLint
+ run: npm run lint
+
+ - name: Check formatting
+ run: npm run format:check
+
+ - name: Build project
+ run: npm run build
+
+ - name: Upload build artifacts
+ if: matrix.node-version == '20.x'
+ uses: actions/upload-artifact@v4
+ with:
+ name: build-artifacts
+ path: dist/
+ retention-days: 7
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..ac7d600
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,26 @@
+# Dependencies
+node_modules/
+
+# Build outputs
+dist/
+build/
+
+# Logs
+*.log
+npm-debug.log*
+
+# OS files
+.DS_Store
+Thumbs.db
+
+# Editor directories
+.vscode/
+.idea/
+
+# Temporary files
+*.tmp
+.cache/
+
+# Environment files
+.env
+.env.local
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 0000000..f8052bc
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,6 @@
+node_modules
+dist
+build
+.git
+*.min.js
+*.min.css
diff --git a/.prettierrc.json b/.prettierrc.json
new file mode 100644
index 0000000..59eb508
--- /dev/null
+++ b/.prettierrc.json
@@ -0,0 +1,9 @@
+{
+ "semi": true,
+ "trailingComma": "es5",
+ "singleQuote": true,
+ "printWidth": 100,
+ "tabWidth": 2,
+ "useTabs": false,
+ "arrowParens": "always"
+}
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..f087645
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 ZaneDev
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
index 5618dee..ba196bf 100644
--- a/README.md
+++ b/README.md
@@ -1,15 +1,209 @@
# ZanePersonal
-### My personal website, (avalible on https://zane.org)
-#### Features:
-- Scrolling random character background
-- Fully static *(to be compatible with cheap hosting platforms)*
-- Open-sourced
-- Profile picture
-- Easter eggs
-- Cursor effects *(can be browser intensive)*
-- Project Links
-- Glitch effects
-- SFX
-- "(not for hire btw)" text fades in after a few seconds
-- Funny FDA unapproved text *get it? cuz the FDA is for food, not websites.*
+A modern, interactive personal website showcasing creative web development and design. Available at [https://zane.org](https://zane.org)
+
+## ๐ฏ Purpose
+
+This personal website serves as:
+
+- A creative portfolio and personal brand showcase
+- An experimental playground for modern web technologies
+- A demonstration of interactive UI/UX design principles
+- A learning platform for exploring cutting-edge web features
+
+## โจ Features
+
+### Visual Effects
+
+- **Matrix Rain Background** - Animated character rainfall effect
+- **Custom Cursor** - Interactive cursor with trailing particles
+- **Mouse Trail Effects** - Particle system following cursor movement
+- **Glitch Effects** - Periodic text glitching animations
+- **Interactive Background** - Particle network with connection lines
+
+### User Experience
+
+- **Smooth Animations** - Staggered entrance animations for all elements
+- **Sound Effects** - Audio feedback for interactions (can be browser intensive)
+- **Easter Eggs** - Hidden features and secret interactions:
+ - Konami Code activation
+ - Avatar click counter
+ - "ZANE" keyboard sequence
+ - Double-click brand name glitch
+- **Micro-interactions** - Magnetic button effects, tilt animations, ripple effects
+- **Responsive Design** - Optimized for all screen sizes
+
+### Technical Features
+
+- **Fully Static** - Compatible with cheap hosting platforms (no backend required)
+- **Modular Architecture** - Well-organized code split into logical modules
+- **Performance Optimized** - Minified assets and efficient animations
+- **SEO Enhanced** - Proper meta tags, structured data, sitemap
+- **Accessible** - Semantic HTML, ARIA labels, keyboard navigation
+- **Open Source** - MIT licensed for learning and inspiration
+
+## ๐ Tech Stack
+
+### Core Technologies
+
+- **HTML5** - Semantic markup with proper accessibility attributes
+- **CSS3** - Modern features including custom properties, animations, and grid
+- **JavaScript (ES6+)** - Modular architecture using ES modules
+
+### Development Tools
+
+- **Vite** - Fast build tool and development server
+- **ESLint** - Code quality and consistency checking
+- **Prettier** - Automated code formatting
+- **Imagemin** - Image optimization
+
+### Libraries & APIs
+
+- **Web Audio API** - For sound effect generation
+- **Canvas API** - For particle effects and visual animations
+- **Intersection Observer API** - For scroll-based animations
+
+## ๐ Project Structure
+
+```
+ZanePersonal/
+โโโ assets/
+โ โโโ css/
+โ โ โโโ styles.css # Main stylesheet with design tokens
+โ โโโ js/
+โ โ โโโ main.js # Application entry point
+โ โ โโโ modules/
+โ โ โโโ animations.js # Animation utilities
+โ โ โโโ dom.js # DOM manipulation helpers
+โ โ โโโ easter-eggs.js # Hidden features
+โ โ โโโ effects.js # Visual effects (particles, cursor, etc.)
+โ โ โโโ interactions.js # UI micro-interactions
+โ โ โโโ sound.js # Sound effects
+โ โโโ images/
+โ โโโ Zane.jpg # Profile image
+โโโ index.html # Main HTML file
+โโโ robots.txt # Search engine directives
+โโโ sitemap.xml # Site structure for SEO
+โโโ LICENSE # MIT License
+โโโ package.json # Project dependencies
+โโโ .eslintrc.json # ESLint configuration
+โโโ .prettierrc.json # Prettier configuration
+โโโ README.md # This file
+```
+
+## ๐ Getting Started
+
+### Prerequisites
+
+- Node.js 16+ and npm
+
+### Installation
+
+1. Clone the repository:
+
+```bash
+git clone https://github.com/ZaneThePython/ZanePersonal.git
+cd ZanePersonal
+```
+
+2. Install dependencies:
+
+```bash
+npm install
+```
+
+3. Start development server:
+
+```bash
+npm run dev
+```
+
+4. Open your browser to `http://localhost:5173`
+
+### Building for Production
+
+```bash
+npm run build
+```
+
+The optimized files will be in the `dist/` directory.
+
+## ๐งช Development
+
+### Code Quality
+
+- **Linting**: `npm run lint`
+- **Formatting**: `npm run format`
+- **Format Check**: `npm run format:check`
+
+### Performance Budget
+
+Target metrics:
+
+- Total page size: <150KB (compressed)
+- First Contentful Paint: <1.5s
+- Time to Interactive: <3.5s
+- Lighthouse Score: >90
+
+## ๐บ Roadmap
+
+### โ
Completed
+
+- [x] Initial website launch
+- [x] Interactive visual effects
+- [x] Easter eggs and hidden features
+- [x] Responsive design
+- [x] Code modularization
+- [x] ESLint and Prettier setup
+- [x] Accessibility improvements (ARIA labels, semantic HTML)
+- [x] SEO optimization (meta tags, structured data, sitemap)
+- [x] CSS design tokens
+- [x] Build system (Vite)
+
+### ๐ง In Progress
+
+- [ ] CI/CD pipeline with GitHub Actions
+- [ ] Unit tests with Vitest
+- [ ] Lighthouse CI integration
+- [ ] Automated accessibility checks
+
+### ๐ Planned
+
+- [ ] Blog section for writing
+- [ ] Project portfolio with detailed case studies
+- [ ] Dark/light theme toggle
+- [ ] Privacy-focused analytics
+- [ ] Automated changelog generation
+- [ ] Performance monitoring dashboard
+- [ ] Progressive Web App (PWA) features
+- [ ] Internationalization (i18n) support
+
+## ๐ค Contributing
+
+While this is a personal project, suggestions and feedback are welcome! Feel free to:
+
+- Open an issue for bugs or feature requests
+- Submit a pull request for improvements
+- Star the repository if you find it interesting
+
+## ๐ License
+
+This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
+
+## ๐ Acknowledgments
+
+- Font: [Inter](https://fonts.google.com/specimen/Inter) by Rasmus Andersson
+- Inspiration from various creative developer portfolios
+- Built with โ and countless hours of experimentation
+
+## ๐ฌ Contact
+
+- Email: [contact@zane.org](mailto:contact@zane.org)
+- GitHub: [@ZaneThePython](https://github.com/ZaneThePython)
+- Website: [https://zane.org](https://zane.org)
+
+---
+
+**Note:** This website is not FDA approved (because websites don't need FDA approval, obviously! ๐)
+
+_Last updated: November 2024_
diff --git a/assets/css/styles.css b/assets/css/styles.css
new file mode 100644
index 0000000..58b2b15
--- /dev/null
+++ b/assets/css/styles.css
@@ -0,0 +1,983 @@
+/* CSS Custom Properties (Design Tokens) */
+:root {
+ /* Colors */
+ --color-primary: #007acc;
+ --color-primary-light: #00aaff;
+ --color-primary-dark: #005a9c;
+ --color-accent: #ff6b6b;
+ --color-accent-alt: #4ecdc4;
+
+ /* Background Colors */
+ --bg-primary: #1a1a1a;
+ --bg-secondary: #2a2a2a;
+ --bg-tertiary: #333;
+
+ /* Text Colors */
+ --text-primary: #ffffff;
+ --text-secondary: #ccc;
+ --text-muted: #888;
+ --text-disabled: #666;
+
+ /* Spacing */
+ --spacing-xs: 0.5rem;
+ --spacing-sm: 1rem;
+ --spacing-md: 1.5rem;
+ --spacing-lg: 2rem;
+ --spacing-xl: 3rem;
+
+ /* Font Sizes */
+ --font-size-xs: 0.8rem;
+ --font-size-sm: 0.9rem;
+ --font-size-base: 1rem;
+ --font-size-md: 1.1rem;
+ --font-size-lg: 1.3rem;
+ --font-size-xl: 2rem;
+ --font-size-2xl: 2.5rem;
+
+ /* Border Radius */
+ --radius-sm: 8px;
+ --radius-md: 12px;
+ --radius-lg: 15px;
+ --radius-full: 50%;
+
+ /* Shadows */
+ --shadow-sm: 0 4px 15px rgba(0, 0, 0, 0.2);
+ --shadow-md: 0 8px 32px rgba(0, 0, 0, 0.3);
+ --shadow-lg: 0 15px 40px rgba(0, 0, 0, 0.4);
+
+ /* Transitions */
+ --transition-fast: 0.1s ease;
+ --transition-base: 0.3s ease;
+ --transition-slow: 0.6s ease;
+
+ /* Z-index layers */
+ --z-background: -2;
+ --z-background-effects: -1;
+ --z-content: 1;
+ --z-effects: 1000;
+ --z-modal: 10000;
+}
+
+/* Reset and base styles */
+* {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+}
+
+body {
+ font-family: 'Inter', sans-serif;
+ background-color: #1a1a1a;
+ color: #ffffff;
+ min-height: 100vh;
+ overflow-x: hidden;
+ position: relative;
+ cursor: none;
+}
+
+/* Custom Cursor */
+.custom-cursor {
+ position: fixed;
+ width: 20px;
+ height: 20px;
+ background: radial-gradient(
+ circle,
+ rgba(0, 122, 204, 0.8) 0%,
+ rgba(0, 122, 204, 0.4) 50%,
+ transparent 100%
+ );
+ border-radius: 50%;
+ pointer-events: none;
+ z-index: 9999;
+ transition: transform 0.1s ease;
+ mix-blend-mode: difference;
+}
+
+.custom-cursor-trail {
+ position: fixed;
+ width: 8px;
+ height: 8px;
+ background: rgba(0, 122, 204, 0.6);
+ border-radius: 50%;
+ pointer-events: none;
+ z-index: 9998;
+ transition: all 0.3s ease;
+}
+
+/* Grid background */
+body::before {
+ content: '';
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background-image: radial-gradient(circle, #333 1px, transparent 1px);
+ background-size: 30px 30px;
+ background-position:
+ 0 0,
+ 15px 15px;
+ opacity: 0.3;
+ z-index: -1;
+ pointer-events: none;
+ animation: gridMove 20s linear infinite;
+}
+
+@keyframes gridMove {
+ 0% {
+ transform: translate(0, 0);
+ }
+ 100% {
+ transform: translate(30px, 30px);
+ }
+}
+
+/* Animated gradient background */
+body::after {
+ content: '';
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: linear-gradient(-45deg, #1a1a1a, #2a2a2a, #1a1a1a, #333);
+ background-size: 400% 400%;
+ animation: gradientShift 15s ease infinite;
+ z-index: -2;
+ pointer-events: none;
+}
+
+@keyframes gradientShift {
+ 0% {
+ background-position: 0% 50%;
+ }
+ 50% {
+ background-position: 100% 50%;
+ }
+ 100% {
+ background-position: 0% 50%;
+ }
+}
+
+/* Main container */
+.container {
+ min-height: 100vh;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ position: relative;
+ padding: 2rem;
+}
+
+/* Avatar Section */
+.avatar-section {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ margin-bottom: 3rem;
+ position: relative;
+ filter: drop-shadow(0 0 20px rgba(0, 122, 204, 0.3));
+}
+
+.avatar {
+ width: 120px;
+ height: 120px;
+ border-radius: 50%;
+ background: linear-gradient(135deg, #2a2a2a, #1a1a1a);
+ border: 3px solid #333;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin-bottom: 1.5rem;
+ box-shadow:
+ 0 8px 32px rgba(0, 0, 0, 0.3),
+ 0 0 0 0 rgba(0, 122, 204, 0.4),
+ inset 0 0 20px rgba(0, 122, 204, 0.1);
+ position: relative;
+ overflow: hidden;
+ transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
+ cursor: pointer;
+ transform-style: preserve-3d;
+}
+
+.avatar::before {
+ content: '';
+ position: absolute;
+ top: -3px;
+ left: -3px;
+ right: -3px;
+ bottom: -3px;
+ background: linear-gradient(45deg, #007acc, #00aaff, #007acc, #00aaff);
+ border-radius: 50%;
+ z-index: -1;
+ opacity: 0;
+ transition: opacity 0.3s ease;
+ animation: rotate 3s linear infinite;
+}
+
+.avatar:hover::before {
+ opacity: 1;
+}
+
+.avatar:hover {
+ transform: scale(1.1) rotateY(10deg) rotateX(5deg);
+ box-shadow:
+ 0 15px 50px rgba(0, 0, 0, 0.4),
+ 0 0 30px rgba(0, 122, 204, 0.6),
+ inset 0 0 30px rgba(0, 122, 204, 0.2);
+ border-color: #007acc;
+}
+
+@keyframes rotate {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+
+/* Profile Image */
+.profile-image {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ border-radius: 50%;
+ animation:
+ sway 45s ease-in-out infinite,
+ pulseSlow 6s ease-in-out infinite;
+}
+
+@keyframes sway {
+ 0% {
+ transform: rotate(-10deg);
+ }
+ 50% {
+ transform: rotate(10deg);
+ }
+ 100% {
+ transform: rotate(-10deg);
+ }
+}
+
+@keyframes pulseSlow {
+ 0%,
+ 100% {
+ transform: scale(1);
+ filter: drop-shadow(0 0 0 rgba(0, 122, 204, 0));
+ }
+ 50% {
+ transform: scale(1.05);
+ filter: drop-shadow(0 0 12px rgba(0, 122, 204, 0.25));
+ }
+}
+
+/* Brand Name */
+.brand-name {
+ font-size: 2.5rem;
+ font-weight: 600;
+ background: linear-gradient(135deg, #ffffff, #007acc, #00aaff, #ff6b6b, #4ecdc4);
+ background-size: 300% 300%;
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ background-clip: text;
+ text-align: center;
+ letter-spacing: -0.02em;
+ margin-bottom: 0.5rem;
+ animation:
+ gradientText 4s ease infinite,
+ neonPulse 2s ease-in-out infinite alternate;
+ cursor: pointer;
+ transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
+ text-shadow:
+ 0 0 5px rgba(0, 122, 204, 0.5),
+ 0 0 10px rgba(0, 122, 204, 0.3),
+ 0 0 15px rgba(0, 122, 204, 0.2);
+ position: relative;
+}
+
+.brand-name:hover {
+ transform: scale(1.1) rotateX(5deg);
+ filter: drop-shadow(0 0 20px rgba(0, 122, 204, 0.8));
+ text-shadow:
+ 0 0 10px rgba(0, 122, 204, 0.8),
+ 0 0 20px rgba(0, 122, 204, 0.6),
+ 0 0 30px rgba(0, 122, 204, 0.4);
+}
+
+@keyframes gradientText {
+ 0% {
+ background-position: 0% 50%;
+ }
+ 50% {
+ background-position: 100% 50%;
+ }
+ 100% {
+ background-position: 0% 50%;
+ }
+}
+
+@keyframes neonPulse {
+ 0% {
+ filter: drop-shadow(0 0 5px rgba(0, 122, 204, 0.5));
+ text-shadow:
+ 0 0 5px rgba(0, 122, 204, 0.5),
+ 0 0 10px rgba(0, 122, 204, 0.3),
+ 0 0 15px rgba(0, 122, 204, 0.2);
+ }
+ 100% {
+ filter: drop-shadow(0 0 15px rgba(0, 122, 204, 0.8));
+ text-shadow:
+ 0 0 10px rgba(0, 122, 204, 0.8),
+ 0 0 20px rgba(0, 122, 204, 0.6),
+ 0 0 30px rgba(0, 122, 204, 0.4);
+ }
+}
+
+/* Tagline */
+.tagline {
+ font-size: 1.1rem;
+ color: #888;
+ text-align: center;
+ font-weight: 400;
+ margin-bottom: 2rem;
+ position: relative;
+ animation: fadeInUp 1s ease 0.8s both;
+}
+
+@keyframes fadeInUp {
+ from {
+ opacity: 0;
+ transform: translateY(20px);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+/* About Section */
+.about-section {
+ max-width: 600px;
+ text-align: center;
+ margin-bottom: 3rem;
+ position: relative;
+ animation: slideInLeft 1s ease 1s both;
+}
+
+@keyframes slideInLeft {
+ from {
+ opacity: 0;
+ transform: translateX(-30px);
+ }
+ to {
+ opacity: 1;
+ transform: translateX(0);
+ }
+}
+
+.about-text {
+ font-size: 1.1rem;
+ line-height: 1.7;
+ color: #ccc;
+ font-weight: 400;
+}
+
+.not-for-hire-note {
+ margin-top: 0.5rem;
+ font-size: 0.9rem;
+ color: rgba(128, 128, 128, 0.5);
+ opacity: 0;
+ animation: fadeInOpacity 0.3s ease forwards;
+ animation-delay: 10s;
+}
+
+@keyframes fadeInOpacity {
+ from {
+ opacity: 0;
+ }
+ to {
+ opacity: 1;
+ }
+}
+
+/* Navigation */
+.navigation {
+ display: flex;
+ flex-direction: column;
+ gap: 1rem;
+ position: relative;
+ align-items: center;
+ animation: slideInRight 1s ease 1.2s both;
+}
+
+@keyframes slideInRight {
+ from {
+ opacity: 0;
+ transform: translateX(30px);
+ }
+ to {
+ opacity: 1;
+ transform: translateX(0);
+ }
+}
+
+.nav-button {
+ background: linear-gradient(135deg, #2a2a2a, #1a1a1a);
+ border: 2px solid #333;
+ border-radius: 12px;
+ padding: 1rem 2rem;
+ color: #ffffff;
+ font-size: 1.1rem;
+ font-weight: 500;
+ font-family: 'Inter', sans-serif;
+ cursor: pointer;
+ transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
+ min-width: 140px;
+ text-align: center;
+ position: relative;
+ overflow: hidden;
+ text-decoration: none;
+ display: inline-block;
+ box-shadow:
+ 0 4px 15px rgba(0, 0, 0, 0.2),
+ 0 0 0 0 rgba(0, 122, 204, 0.3);
+ transform-style: preserve-3d;
+}
+
+.nav-button::after {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: -100%;
+ width: 100%;
+ height: 100%;
+ background: linear-gradient(90deg, transparent, rgba(0, 122, 204, 0.3), transparent);
+ transition: left 0.6s ease;
+}
+
+.nav-button:hover::after {
+ left: 100%;
+}
+
+.nav-button.active {
+ background: #333;
+ border-color: #444;
+}
+
+.nav-button::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: -100%;
+ width: 100%;
+ height: 100%;
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent);
+ transition: left 0.5s ease;
+}
+
+.nav-button:hover::before {
+ left: 100%;
+}
+
+.nav-button:hover {
+ background: linear-gradient(135deg, #333, #2a2a2a);
+ border-color: #007acc;
+ transform: translateY(-5px) scale(1.05) rotateX(5deg);
+ box-shadow:
+ 0 15px 40px rgba(0, 122, 204, 0.4),
+ 0 0 20px rgba(0, 122, 204, 0.6);
+ text-shadow: 0 0 10px rgba(0, 122, 204, 0.8);
+}
+
+.nav-button:active {
+ transform: translateY(0);
+}
+
+/* Disclaimer */
+.disclaimer {
+ position: fixed;
+ bottom: 2rem;
+ left: 2rem;
+ color: #666;
+ font-size: 0.9rem;
+ font-style: italic;
+}
+
+.disclaimer p {
+ margin: 0;
+}
+
+/* Content Sections */
+.content-section {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: rgba(26, 26, 26, 0.95);
+ backdrop-filter: blur(10px);
+ display: none;
+ align-items: center;
+ justify-content: center;
+ z-index: 1000;
+ opacity: 0;
+ transition: opacity 0.3s ease;
+}
+
+.content-section.active {
+ display: flex;
+ opacity: 1;
+}
+
+.content-wrapper {
+ max-width: 800px;
+ padding: 2rem;
+ text-align: center;
+}
+
+.content-wrapper h2 {
+ font-size: 2.5rem;
+ margin-bottom: 2rem;
+ color: #ffffff;
+}
+
+.project-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
+ gap: 2rem;
+ margin-top: 2rem;
+}
+
+.project-card {
+ background: #2a2a2a;
+ border: 2px solid #333;
+ border-radius: 12px;
+ padding: 2rem;
+ transition: all 0.3s ease;
+}
+
+.project-card:hover {
+ transform: translateY(-5px);
+ border-color: #444;
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
+}
+
+.project-card h3 {
+ color: #ffffff;
+ margin-bottom: 1rem;
+ font-size: 1.3rem;
+}
+
+.project-card p {
+ color: #ccc;
+ line-height: 1.6;
+}
+
+.github-link {
+ text-decoration: none;
+ display: inline-block;
+ margin-top: 2rem;
+}
+
+.github-button {
+ background: #333;
+ border: 2px solid #444;
+ border-radius: 12px;
+ padding: 1rem 2rem;
+ color: #ffffff;
+ font-size: 1.1rem;
+ font-weight: 500;
+ cursor: pointer;
+ transition: all 0.3s ease;
+ font-family: 'Inter', sans-serif;
+}
+
+.github-button:hover {
+ background: #444;
+ border-color: #555;
+ transform: translateY(-2px);
+}
+
+.contact-info {
+ margin-top: 2rem;
+}
+
+.contact-methods {
+ display: flex;
+ justify-content: center;
+ gap: 2rem;
+ margin-top: 2rem;
+ flex-wrap: wrap;
+}
+
+.contact-link {
+ color: #ffffff;
+ text-decoration: none;
+ padding: 1rem 2rem;
+ border: 2px solid #333;
+ border-radius: 12px;
+ background: #2a2a2a;
+ transition: all 0.3s ease;
+ font-weight: 500;
+}
+
+.contact-link:hover {
+ background: #333;
+ border-color: #444;
+ transform: translateY(-2px);
+}
+
+/* Projects Page Specific Styles */
+.projects-main-content {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: rgba(26, 26, 26, 0.95);
+ backdrop-filter: blur(10px);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ z-index: 1000;
+ overflow-y: auto;
+ padding: 2rem 0;
+}
+
+.projects-intro {
+ color: #ccc;
+ font-size: 1.2rem;
+ margin-bottom: 3rem;
+ text-align: center;
+}
+
+.project-tech {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.5rem;
+ margin: 1rem 0;
+}
+
+.tech-tag {
+ background: #333;
+ color: #ffffff;
+ padding: 0.3rem 0.8rem;
+ border-radius: 20px;
+ font-size: 0.8rem;
+ font-weight: 500;
+ border: 1px solid #444;
+}
+
+.project-links {
+ display: flex;
+ gap: 1rem;
+ margin-top: 1.5rem;
+}
+
+.project-link {
+ color: #ffffff;
+ text-decoration: none;
+ padding: 0.5rem 1rem;
+ border: 1px solid #333;
+ border-radius: 8px;
+ background: #2a2a2a;
+ transition: all 0.3s ease;
+ font-size: 0.9rem;
+ font-weight: 500;
+}
+
+.project-link:hover {
+ background: #333;
+ border-color: #444;
+ transform: translateY(-1px);
+}
+
+.contact-message {
+ font-size: 1.5rem;
+ color: #ffffff;
+ font-weight: 500;
+ text-align: center;
+ margin-top: 2rem;
+}
+
+/* Skills Section */
+.skills-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
+ gap: 2rem;
+ margin-top: 2rem;
+}
+
+.skill-category {
+ background: #2a2a2a;
+ border: 2px solid #333;
+ border-radius: 12px;
+ padding: 2rem;
+ transition: all 0.3s ease;
+}
+
+.skill-category:hover {
+ transform: translateY(-5px);
+ border-color: #444;
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
+}
+
+.skill-category h3 {
+ color: #ffffff;
+ margin-bottom: 1.5rem;
+ font-size: 1.3rem;
+ text-align: center;
+}
+
+.skill-tags {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.8rem;
+ justify-content: center;
+}
+
+.skill-tag {
+ background: linear-gradient(135deg, #333, #444);
+ color: #ffffff;
+ padding: 0.5rem 1rem;
+ border-radius: 25px;
+ font-size: 0.9rem;
+ font-weight: 500;
+ border: 1px solid #555;
+ transition: all 0.3s ease;
+}
+
+.skill-tag:hover {
+ background: linear-gradient(135deg, #444, #555);
+ transform: translateY(-2px);
+ box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3);
+}
+
+/* Featured Project Styles */
+.project-card.featured {
+ border: 2px solid #007acc;
+ background: linear-gradient(135deg, #2a2a2a, #1f1f1f);
+ position: relative;
+ overflow: hidden;
+}
+
+.project-card.featured::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ height: 3px;
+ background: linear-gradient(90deg, #007acc, #00aaff, #007acc);
+ animation: shimmer 2s infinite;
+}
+
+@keyframes shimmer {
+ 0% {
+ transform: translateX(-100%);
+ }
+ 100% {
+ transform: translateX(100%);
+ }
+}
+
+.project-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 1rem;
+}
+
+.featured-badge {
+ background: linear-gradient(135deg, #007acc, #00aaff);
+ color: #ffffff;
+ padding: 0.3rem 0.8rem;
+ border-radius: 15px;
+ font-size: 0.8rem;
+ font-weight: 600;
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+}
+
+/* Close button for content sections */
+.close-button {
+ position: absolute;
+ top: 2rem;
+ right: 2rem;
+ background: none;
+ border: none;
+ color: #666;
+ font-size: 2rem;
+ cursor: pointer;
+ transition: color 0.3s ease;
+ z-index: 1001;
+}
+
+.close-button:hover {
+ color: #ffffff;
+ transform: scale(1.1);
+}
+
+/* Scroll Animation Classes */
+.animate-in {
+ animation: slideInUp 0.6s ease forwards;
+}
+
+@keyframes slideInUp {
+ from {
+ opacity: 0;
+ transform: translateY(30px);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+/* Enhanced hover effects */
+.project-card {
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.project-card:hover {
+ transform: translateY(-8px) scale(1.02);
+ box-shadow: 0 15px 40px rgba(0, 0, 0, 0.4);
+}
+
+/* Improved tech tag styling */
+.tech-tag {
+ background: linear-gradient(135deg, #333, #444);
+ color: #ffffff;
+ padding: 0.4rem 0.9rem;
+ border-radius: 20px;
+ font-size: 0.85rem;
+ font-weight: 500;
+ border: 1px solid #444;
+ transition: all 0.3s ease;
+ display: inline-block;
+}
+
+.tech-tag:hover {
+ background: linear-gradient(135deg, #444, #555);
+ transform: translateY(-2px);
+ box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3);
+}
+
+/* Responsive Design */
+@media (max-width: 768px) {
+ .container {
+ padding: 1rem;
+ }
+
+ .avatar-section {
+ margin-bottom: 2rem;
+ }
+
+ .navigation {
+ align-items: center;
+ }
+
+ .brand-name {
+ font-size: 2rem;
+ }
+
+ .tagline {
+ font-size: 1rem;
+ }
+
+ .about-text {
+ font-size: 1rem;
+ }
+
+ .nav-button {
+ min-width: 120px;
+ padding: 0.8rem 1.5rem;
+ font-size: 1rem;
+ }
+
+ .content-wrapper {
+ padding: 1rem;
+ }
+
+ .content-wrapper h2 {
+ font-size: 2rem;
+ }
+
+ .project-grid {
+ grid-template-columns: 1fr;
+ gap: 1rem;
+ }
+
+ .skills-grid {
+ grid-template-columns: 1fr;
+ gap: 1rem;
+ }
+
+ .contact-methods {
+ flex-direction: column;
+ align-items: center;
+ gap: 1rem;
+ }
+
+ .disclaimer {
+ bottom: 1rem;
+ left: 1rem;
+ font-size: 0.8rem;
+ }
+
+ .close-button {
+ top: 1rem;
+ right: 1rem;
+ font-size: 1.5rem;
+ }
+}
+
+@media (max-width: 480px) {
+ .avatar {
+ width: 100px;
+ height: 100px;
+ }
+
+ .mug {
+ width: 50px;
+ height: 42px;
+ }
+
+ .mug-body {
+ width: 42px;
+ height: 34px;
+ }
+
+ .brand-name {
+ font-size: 1.8rem;
+ }
+
+ .nav-button {
+ min-width: 100px;
+ padding: 0.7rem 1.2rem;
+ font-size: 0.9rem;
+ }
+}
+/* Popup styles */
+.popup {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ background: rgba(26, 26, 26, 0.95);
+ padding: 20px 40px;
+ border-radius: 12px;
+ border: 2px solid #333;
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
+ z-index: 1000;
+ opacity: 1;
+ transition: opacity 0.3s ease;
+}
+
+.popup-content {
+ color: #ffffff;
+ font-size: 1.1rem;
+ text-align: center;
+}
diff --git a/assets/images/Zane.jpg b/assets/images/Zane.jpg
new file mode 100644
index 0000000..98d799e
Binary files /dev/null and b/assets/images/Zane.jpg differ
diff --git a/assets/js/main.js b/assets/js/main.js
new file mode 100644
index 0000000..081d339
--- /dev/null
+++ b/assets/js/main.js
@@ -0,0 +1,119 @@
+// Main application entry point
+import {
+ animateOnLoad,
+ animateSkillTags,
+ animateProjectCards,
+ addTypingAnimation,
+} from './modules/animations.js';
+import {
+ addMouseTrail,
+ addMatrixRain,
+ addCustomCursor,
+ addInteractiveBackground,
+} from './modules/effects.js';
+import { addEasterEggs, startAutoGlitch, addKeyboardInteractions } from './modules/easter-eggs.js';
+import { addSoundEffects } from './modules/sound.js';
+import {
+ addMicroInteractions,
+ addTextEffects,
+ addScrollEffects,
+ addButtonMorphing,
+} from './modules/interactions.js';
+import { getNavElements } from './modules/dom.js';
+
+// Navigation functions
+function showContentSection(sectionName) {
+ hideAllContentSections();
+
+ const targetSection = document.getElementById(`${sectionName}-content`);
+ if (targetSection) {
+ targetSection.classList.add('active');
+
+ setTimeout(() => {
+ targetSection.style.opacity = '1';
+ }, 10);
+ }
+}
+
+function hideAllContentSections() {
+ const { contentSections } = getNavElements();
+ contentSections.forEach((section) => {
+ section.classList.remove('active');
+ section.style.opacity = '0';
+ });
+}
+
+// Initialize navigation
+function initNavigation() {
+ const { navButtons, closeButtons, contentSections } = getNavElements();
+
+ navButtons.forEach((button) => {
+ button.addEventListener('click', function (e) {
+ const section = this.getAttribute('data-section');
+ if (section) {
+ e.preventDefault();
+ showContentSection(section);
+ }
+ });
+ });
+
+ closeButtons.forEach((button) => {
+ button.addEventListener('click', function (e) {
+ e.preventDefault();
+ hideAllContentSections();
+ });
+ });
+
+ contentSections.forEach((section) => {
+ section.addEventListener('click', function (e) {
+ if (e.target === this) {
+ hideAllContentSections();
+ }
+ });
+ });
+
+ document.addEventListener('keydown', function (e) {
+ if (e.key === 'Escape') {
+ hideAllContentSections();
+ }
+ });
+}
+
+// Initialize all features
+function initializeApp() {
+ // Navigation
+ initNavigation();
+
+ // Animations
+ animateOnLoad();
+ animateSkillTags();
+ animateProjectCards();
+ addTypingAnimation();
+
+ // Visual effects
+ addMouseTrail();
+ addMatrixRain();
+ addCustomCursor();
+ addInteractiveBackground();
+
+ // Easter eggs
+ addEasterEggs();
+ startAutoGlitch();
+ addKeyboardInteractions();
+
+ // Sound
+ addSoundEffects();
+
+ // Interactions
+ addMicroInteractions();
+ addTextEffects();
+ addScrollEffects();
+ addButtonMorphing();
+}
+
+// Start when DOM is ready
+if (document.readyState === 'loading') {
+ document.addEventListener('DOMContentLoaded', initializeApp);
+} else {
+ initializeApp();
+}
diff --git a/assets/js/modules/animations.js b/assets/js/modules/animations.js
new file mode 100644
index 0000000..847d138
--- /dev/null
+++ b/assets/js/modules/animations.js
@@ -0,0 +1,122 @@
+// Animation utilities and functions
+import { DOM, getMainElements } from './dom.js';
+
+// Animate elements on page load
+export function animateOnLoad() {
+ const { avatar, brandName, disclaimer } = getMainElements();
+ const navButtons = DOM.getAll('.nav-button');
+
+ // Set initial states
+ if (avatar) {
+ avatar.style.opacity = '0';
+ avatar.style.transform = 'translateY(30px)';
+ }
+ if (brandName) {
+ brandName.style.opacity = '0';
+ brandName.style.transform = 'translateY(30px)';
+ }
+
+ navButtons.forEach((button, index) => {
+ button.style.opacity = '0';
+ button.style.transform = 'translateX(30px)';
+ button.style.transitionDelay = `${index * 0.1}s`;
+ });
+
+ if (disclaimer) {
+ disclaimer.style.opacity = '0';
+ }
+
+ // Animate in sequence
+ setTimeout(() => {
+ if (avatar) {
+ avatar.style.transition = 'all 0.8s ease';
+ avatar.style.opacity = '1';
+ avatar.style.transform = 'translateY(0)';
+ }
+ }, 200);
+
+ setTimeout(() => {
+ if (brandName) {
+ brandName.style.transition = 'all 0.8s ease';
+ brandName.style.opacity = '1';
+ brandName.style.transform = 'translateY(0)';
+ }
+ }, 400);
+
+ setTimeout(() => {
+ navButtons.forEach((button) => {
+ button.style.transition = 'all 0.6s ease';
+ button.style.opacity = '1';
+ button.style.transform = 'translateX(0)';
+ });
+ }, 600);
+
+ setTimeout(() => {
+ if (disclaimer) {
+ disclaimer.style.transition = 'all 0.8s ease';
+ disclaimer.style.opacity = '1';
+ }
+ }, 800);
+}
+
+// Typing animation
+export function typeWriter(element, text, speed = 100) {
+ if (!element) return;
+ let i = 0;
+ element.innerHTML = '';
+
+ function type() {
+ if (i < text.length) {
+ element.innerHTML += text.charAt(i);
+ i++;
+ setTimeout(type, speed);
+ }
+ }
+
+ type();
+}
+
+// Animate skill tags with stagger effect
+export function animateSkillTags() {
+ const skillTags = DOM.getAll('.skill-tag');
+
+ skillTags.forEach((tag, index) => {
+ tag.style.opacity = '0';
+ tag.style.transform = 'translateY(20px)';
+
+ setTimeout(() => {
+ tag.style.transition = 'all 0.5s ease';
+ tag.style.opacity = '1';
+ tag.style.transform = 'translateY(0)';
+ }, index * 100);
+ });
+}
+
+// Animate project cards with stagger effect
+export function animateProjectCards() {
+ const projectCards = DOM.getAll('.project-card');
+
+ projectCards.forEach((card, index) => {
+ card.style.opacity = '0';
+ card.style.transform = 'translateY(30px)';
+
+ setTimeout(() => {
+ card.style.transition = 'all 0.6s ease';
+ card.style.opacity = '1';
+ card.style.transform = 'translateY(0)';
+ }, index * 150);
+ });
+}
+
+// Add typing animation for tagline
+export function addTypingAnimation() {
+ const { tagline } = getMainElements();
+ if (tagline) {
+ const originalText = tagline.textContent;
+ tagline.textContent = '';
+
+ setTimeout(() => {
+ typeWriter(tagline, originalText, 100);
+ }, 2000);
+ }
+}
diff --git a/assets/js/modules/dom.js b/assets/js/modules/dom.js
new file mode 100644
index 0000000..fde0628
--- /dev/null
+++ b/assets/js/modules/dom.js
@@ -0,0 +1,42 @@
+// DOM utility functions and element caching
+export const DOM = {
+ // Cache frequently accessed elements
+ cache: {},
+
+ // Get and cache element
+ get(selector) {
+ if (!this.cache[selector]) {
+ this.cache[selector] = document.querySelector(selector);
+ }
+ return this.cache[selector];
+ },
+
+ // Get all and cache elements
+ getAll(selector) {
+ if (!this.cache[selector]) {
+ this.cache[selector] = document.querySelectorAll(selector);
+ }
+ return this.cache[selector];
+ },
+
+ // Clear cache
+ clearCache() {
+ this.cache = {};
+ },
+};
+
+// Navigation elements
+export const getNavElements = () => ({
+ navButtons: DOM.getAll('.nav-button'),
+ contentSections: DOM.getAll('.content-section'),
+ closeButtons: DOM.getAll('.close-button'),
+});
+
+// Main UI elements
+export const getMainElements = () => ({
+ avatar: DOM.get('.avatar'),
+ brandName: DOM.get('.brand-name'),
+ tagline: DOM.get('.tagline'),
+ aboutText: DOM.get('.about-text'),
+ disclaimer: DOM.get('.disclaimer'),
+});
diff --git a/assets/js/modules/easter-eggs.js b/assets/js/modules/easter-eggs.js
new file mode 100644
index 0000000..9173bc2
--- /dev/null
+++ b/assets/js/modules/easter-eggs.js
@@ -0,0 +1,246 @@
+// Easter eggs and interactive features
+import { getMainElements } from './dom.js';
+
+// Show notification
+export function showNotification(message) {
+ const notification = document.createElement('div');
+ notification.style.position = 'fixed';
+ notification.style.top = '20px';
+ notification.style.right = '20px';
+ notification.style.background = 'linear-gradient(135deg, #007acc, #00aaff)';
+ notification.style.color = 'white';
+ notification.style.padding = '1rem 2rem';
+ notification.style.borderRadius = '10px';
+ notification.style.boxShadow = '0 10px 30px rgba(0, 122, 204, 0.3)';
+ notification.style.zIndex = '10000';
+ notification.style.transform = 'translateX(100%)';
+ notification.style.transition = 'transform 0.3s ease';
+ notification.textContent = message;
+
+ document.body.appendChild(notification);
+
+ setTimeout(() => {
+ notification.style.transform = 'translateX(0)';
+ }, 100);
+
+ setTimeout(() => {
+ notification.style.transform = 'translateX(100%)';
+ setTimeout(() => {
+ notification.remove();
+ }, 300);
+ }, 3000);
+}
+
+// Konami Code activation
+function activateKonamiCode() {
+ const body = document.body;
+ body.style.animation = 'rainbow 2s ease infinite';
+
+ const style = document.createElement('style');
+ style.textContent = `
+ @keyframes rainbow {
+ 0% { filter: hue-rotate(0deg); }
+ 100% { filter: hue-rotate(360deg); }
+ }
+ `;
+ document.head.appendChild(style);
+
+ setTimeout(() => {
+ body.style.animation = '';
+ style.remove();
+ }, 5000);
+
+ showNotification('๐ Konami Code Activated! You found the secret!');
+}
+
+// Avatar Easter Egg
+function activateAvatarEasterEgg() {
+ const { avatar } = getMainElements();
+ if (!avatar) return;
+
+ avatar.style.animation = 'spin 1s linear infinite, bounce 0.5s ease infinite';
+
+ const style = document.createElement('style');
+ style.textContent = `
+ @keyframes spin {
+ from { transform: rotate(0deg); }
+ to { transform: rotate(360deg); }
+ }
+ @keyframes bounce {
+ 0%, 100% { transform: translateY(0); }
+ 50% { transform: translateY(-20px); }
+ }
+ `;
+ document.head.appendChild(style);
+
+ setTimeout(() => {
+ avatar.style.animation = '';
+ style.remove();
+ }, 3000);
+
+ showNotification('๐ Avatar Spin Mode Activated!');
+}
+
+// Brand Easter Egg
+function activateBrandEasterEgg() {
+ const { brandName } = getMainElements();
+ if (!brandName) return;
+
+ const originalText = brandName.textContent;
+ const glitchTexts = ['Z4n3D3v', 'Z@n3D3v', 'ZaneDev', 'ZANE_DEV', 'zanedev'];
+ let glitchIndex = 0;
+
+ const glitchInterval = setInterval(() => {
+ brandName.textContent = glitchTexts[glitchIndex];
+ glitchIndex = (glitchIndex + 1) % glitchTexts.length;
+ }, 100);
+
+ setTimeout(() => {
+ clearInterval(glitchInterval);
+ brandName.textContent = originalText;
+ }, 2000);
+
+ showNotification('โก Glitch Mode Activated!');
+}
+
+// Trigger glitch effect
+export function triggerGlitch(durationMs = 1000) {
+ const { brandName } = getMainElements();
+ if (!brandName) return;
+
+ const originalText = brandName.textContent;
+ const glitchTexts = ['Z4n3D3v', 'Z@n3D3v', 'ZaneDev', 'ZANE_DEV', 'zanedev'];
+ let glitchIndex = 0;
+
+ const glitchInterval = setInterval(() => {
+ brandName.textContent = glitchTexts[glitchIndex];
+ glitchIndex = (glitchIndex + 1) % glitchTexts.length;
+ }, 100);
+
+ setTimeout(() => {
+ clearInterval(glitchInterval);
+ brandName.textContent = originalText;
+ }, durationMs);
+}
+
+// Auto Glitch Mode
+export function startAutoGlitch() {
+ setTimeout(() => triggerGlitch(1000), 100);
+ setInterval(() => triggerGlitch(1000), 20000);
+}
+
+// Add all Easter eggs
+export function addEasterEggs() {
+ let clickCount = 0;
+ const { avatar, brandName } = getMainElements();
+
+ // Konami Code
+ const konamiCode = [38, 38, 40, 40, 37, 39, 37, 39, 66, 65];
+ let konamiIndex = 0;
+
+ document.addEventListener('keydown', function (e) {
+ if (e.keyCode === konamiCode[konamiIndex]) {
+ konamiIndex++;
+ if (konamiIndex === konamiCode.length) {
+ activateKonamiCode();
+ konamiIndex = 0;
+ }
+ } else {
+ konamiIndex = 0;
+ }
+ });
+
+ // Avatar click counter
+ if (avatar) {
+ avatar.addEventListener('click', function () {
+ clickCount++;
+ if (clickCount === 5) {
+ activateAvatarEasterEgg();
+ clickCount = 0;
+ }
+ });
+ }
+
+ // Brand name secret
+ if (brandName) {
+ brandName.addEventListener('dblclick', function () {
+ activateBrandEasterEgg();
+ });
+ }
+}
+
+// Secret "ZANE" sequence
+function activateSecretMode() {
+ const body = document.body;
+ body.style.animation = 'rainbow 1s ease infinite';
+
+ const style = document.createElement('style');
+ style.textContent = `
+ @keyframes rainbow {
+ 0% { filter: hue-rotate(0deg); }
+ 100% { filter: hue-rotate(360deg); }
+ }
+ `;
+ document.head.appendChild(style);
+
+ setTimeout(() => {
+ body.style.animation = '';
+ style.remove();
+ }, 3000);
+
+ showNotification('๐ Secret "ZANE" sequence activated!');
+}
+
+// Keyboard Interactions
+export function addKeyboardInteractions() {
+ let keySequence = [];
+ const secretKeys = ['z', 'a', 'n', 'e'];
+
+ document.addEventListener('keydown', function (e) {
+ keySequence.push(e.key.toLowerCase());
+ if (keySequence.length > secretKeys.length) {
+ keySequence.shift();
+ }
+
+ // Check for secret sequence
+ if (keySequence.join('') === secretKeys.join('')) {
+ activateSecretMode();
+ keySequence = [];
+ }
+
+ // Add visual feedback for key presses
+ const keyElement = document.createElement('div');
+ keyElement.textContent = e.key.toUpperCase();
+ keyElement.style.position = 'fixed';
+ keyElement.style.left = Math.random() * window.innerWidth + 'px';
+ keyElement.style.top = Math.random() * window.innerHeight + 'px';
+ keyElement.style.color = '#007acc';
+ keyElement.style.fontSize = '2rem';
+ keyElement.style.fontWeight = 'bold';
+ keyElement.style.pointerEvents = 'none';
+ keyElement.style.zIndex = '10000';
+ keyElement.style.animation = 'keyPress 1s ease-out forwards';
+
+ document.body.appendChild(keyElement);
+
+ setTimeout(() => {
+ keyElement.remove();
+ }, 1000);
+ });
+
+ // Add CSS for key press animation
+ const style = document.createElement('style');
+ style.textContent = `
+ @keyframes keyPress {
+ 0% {
+ opacity: 1;
+ transform: scale(1) translateY(0);
+ }
+ 100% {
+ opacity: 0;
+ transform: scale(0.5) translateY(-50px);
+ }
+ }
+ `;
+ document.head.appendChild(style);
+}
diff --git a/assets/js/modules/effects.js b/assets/js/modules/effects.js
new file mode 100644
index 0000000..974da65
--- /dev/null
+++ b/assets/js/modules/effects.js
@@ -0,0 +1,275 @@
+// Visual effects: particles, cursor, matrix rain, etc.
+import { DOM } from './dom.js';
+
+// Particle class for managing individual particles
+class Particle {
+ constructor(x, y) {
+ this.x = x;
+ this.y = y;
+ this.size = Math.random() * 3 + 1;
+ this.speedY = Math.random() * 1 + 0.5;
+ this.speedX = (Math.random() - 0.5) * 0.5;
+ this.opacity = 1;
+ }
+
+ update() {
+ this.y += this.speedY;
+ this.x += this.speedX;
+ this.opacity -= 0.01;
+ }
+
+ draw(ctx) {
+ ctx.fillStyle = `rgba(0, 122, 204, ${this.opacity})`;
+ ctx.beginPath();
+ ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);
+ ctx.fill();
+ }
+}
+
+// Add mouse trail effect with falling particles
+export function addMouseTrail() {
+ const canvas = document.createElement('canvas');
+ const ctx = canvas.getContext('2d');
+ document.body.appendChild(canvas);
+
+ canvas.style.position = 'fixed';
+ canvas.style.top = '0';
+ canvas.style.left = '0';
+ canvas.style.pointerEvents = 'none';
+ canvas.style.zIndex = '1000';
+
+ function resizeCanvas() {
+ canvas.width = window.innerWidth;
+ canvas.height = window.innerHeight;
+ }
+
+ window.addEventListener('resize', resizeCanvas);
+ resizeCanvas();
+
+ let particles = [];
+ let mouseX = 0;
+ let mouseY = 0;
+
+ document.addEventListener('mousemove', (e) => {
+ mouseX = e.clientX;
+ mouseY = e.clientY;
+
+ if (Math.random() > 0.5) {
+ particles.push(new Particle(mouseX, mouseY));
+ }
+ });
+
+ function animate() {
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+
+ particles = particles.filter((particle) => {
+ particle.update();
+ particle.draw(ctx);
+ return (
+ particle.opacity > 0 &&
+ particle.y < canvas.height &&
+ particle.x > 0 &&
+ particle.x < canvas.width
+ );
+ });
+
+ requestAnimationFrame(animate);
+ }
+
+ animate();
+}
+
+// Matrix Rain Effect
+export function addMatrixRain() {
+ const canvas = document.createElement('canvas');
+ const ctx = canvas.getContext('2d');
+
+ canvas.style.position = 'fixed';
+ canvas.style.top = '0';
+ canvas.style.left = '0';
+ canvas.style.width = '100%';
+ canvas.style.height = '100%';
+ canvas.style.pointerEvents = 'none';
+ canvas.style.zIndex = '-1';
+ canvas.style.opacity = '0.1';
+
+ document.body.appendChild(canvas);
+
+ canvas.width = window.innerWidth;
+ canvas.height = window.innerHeight;
+
+ const matrix = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789@#$%^&*()*&^%+-/~{[|`]}';
+ const matrixArray = matrix.split('');
+
+ const font_size = 10;
+ const columns = canvas.width / font_size;
+
+ const drops = [];
+ for (let x = 0; x < columns; x++) {
+ drops[x] = 1;
+ }
+
+ function drawMatrix() {
+ ctx.fillStyle = 'rgba(0, 0, 0, 0.04)';
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
+
+ ctx.fillStyle = '#007acc';
+ ctx.font = font_size + 'px arial';
+
+ for (let i = 0; i < drops.length; i++) {
+ const text = matrixArray[Math.floor(Math.random() * matrixArray.length)];
+ ctx.fillText(text, i * font_size, drops[i] * font_size);
+
+ if (drops[i] * font_size > canvas.height && Math.random() > 0.975) {
+ drops[i] = 0;
+ }
+ drops[i]++;
+ }
+ }
+
+ setInterval(drawMatrix, 35);
+
+ window.addEventListener('resize', () => {
+ canvas.width = window.innerWidth;
+ canvas.height = window.innerHeight;
+ });
+}
+
+// Custom Cursor
+export function addCustomCursor() {
+ const cursor = document.createElement('div');
+ cursor.className = 'custom-cursor';
+ document.body.appendChild(cursor);
+
+ const trail = document.createElement('div');
+ trail.className = 'custom-cursor-trail';
+ document.body.appendChild(trail);
+
+ let mouseX = 0,
+ mouseY = 0;
+ let trailX = 0,
+ trailY = 0;
+
+ document.addEventListener('mousemove', (e) => {
+ mouseX = e.clientX;
+ mouseY = e.clientY;
+
+ cursor.style.left = mouseX - 10 + 'px';
+ cursor.style.top = mouseY - 10 + 'px';
+ });
+
+ function animateTrail() {
+ trailX += (mouseX - trailX) * 0.1;
+ trailY += (mouseY - trailY) * 0.1;
+
+ trail.style.left = trailX - 4 + 'px';
+ trail.style.top = trailY - 4 + 'px';
+
+ requestAnimationFrame(animateTrail);
+ }
+ animateTrail();
+
+ const interactiveElements = DOM.getAll('a, button, .avatar, .brand-name');
+
+ interactiveElements.forEach((el) => {
+ el.addEventListener('mouseenter', () => {
+ cursor.style.transform = 'scale(2)';
+ cursor.style.background =
+ 'radial-gradient(circle, rgba(255, 107, 107, 0.8) 0%, rgba(255, 107, 107, 0.4) 50%, transparent 100%)';
+ });
+
+ el.addEventListener('mouseleave', () => {
+ cursor.style.transform = 'scale(1)';
+ cursor.style.background =
+ 'radial-gradient(circle, rgba(0, 122, 204, 0.8) 0%, rgba(0, 122, 204, 0.4) 50%, transparent 100%)';
+ });
+ });
+}
+
+// Interactive Background
+export function addInteractiveBackground() {
+ const canvas = document.createElement('canvas');
+ canvas.style.position = 'fixed';
+ canvas.style.top = '0';
+ canvas.style.left = '0';
+ canvas.style.width = '100%';
+ canvas.style.height = '100%';
+ canvas.style.pointerEvents = 'none';
+ canvas.style.zIndex = '-2';
+ canvas.style.opacity = '0.3';
+
+ document.body.appendChild(canvas);
+
+ const ctx = canvas.getContext('2d');
+ canvas.width = window.innerWidth;
+ canvas.height = window.innerHeight;
+
+ const particles = [];
+ const particleCount = 50;
+
+ class BgParticle {
+ constructor() {
+ this.x = Math.random() * canvas.width;
+ this.y = Math.random() * canvas.height;
+ this.vx = (Math.random() - 0.5) * 2;
+ this.vy = (Math.random() - 0.5) * 2;
+ this.size = Math.random() * 3 + 1;
+ this.opacity = Math.random() * 0.5 + 0.2;
+ }
+
+ update() {
+ this.x += this.vx;
+ this.y += this.vy;
+
+ if (this.x < 0 || this.x > canvas.width) this.vx *= -1;
+ if (this.y < 0 || this.y > canvas.height) this.vy *= -1;
+ }
+
+ draw() {
+ ctx.beginPath();
+ ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);
+ ctx.fillStyle = `rgba(0, 122, 204, ${this.opacity})`;
+ ctx.fill();
+ }
+ }
+
+ for (let i = 0; i < particleCount; i++) {
+ particles.push(new BgParticle());
+ }
+
+ function animate() {
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+
+ particles.forEach((particle) => {
+ particle.update();
+ particle.draw();
+ });
+
+ // Draw connections
+ particles.forEach((particle, i) => {
+ particles.slice(i + 1).forEach((otherParticle) => {
+ const dx = particle.x - otherParticle.x;
+ const dy = particle.y - otherParticle.y;
+ const distance = Math.sqrt(dx * dx + dy * dy);
+
+ if (distance < 100) {
+ ctx.beginPath();
+ ctx.moveTo(particle.x, particle.y);
+ ctx.lineTo(otherParticle.x, otherParticle.y);
+ ctx.strokeStyle = `rgba(0, 122, 204, ${0.1 * (1 - distance / 100)})`;
+ ctx.lineWidth = 1;
+ ctx.stroke();
+ }
+ });
+ });
+
+ requestAnimationFrame(animate);
+ }
+
+ animate();
+
+ window.addEventListener('resize', () => {
+ canvas.width = window.innerWidth;
+ canvas.height = window.innerHeight;
+ });
+}
diff --git a/assets/js/modules/interactions.js b/assets/js/modules/interactions.js
new file mode 100644
index 0000000..cbd0dc2
--- /dev/null
+++ b/assets/js/modules/interactions.js
@@ -0,0 +1,201 @@
+// Interactive UI elements and micro-interactions
+import { DOM, getMainElements } from './dom.js';
+
+// Add ripple effect
+function createRipple(element, e) {
+ const ripple = document.createElement('span');
+ const rect = element.getBoundingClientRect();
+ const size = Math.max(rect.width, rect.height);
+ const x = e.clientX - rect.left - size / 2;
+ const y = e.clientY - rect.top - size / 2;
+
+ ripple.style.width = ripple.style.height = size + 'px';
+ ripple.style.left = x + 'px';
+ ripple.style.top = y + 'px';
+ ripple.style.position = 'absolute';
+ ripple.style.borderRadius = '50%';
+ ripple.style.background = 'rgba(0, 122, 204, 0.3)';
+ ripple.style.transform = 'scale(0)';
+ ripple.style.animation = 'ripple 0.6s linear';
+ ripple.style.pointerEvents = 'none';
+
+ element.style.position = 'relative';
+ element.style.overflow = 'hidden';
+ element.appendChild(ripple);
+
+ setTimeout(() => {
+ ripple.remove();
+ }, 600);
+}
+
+// Add micro-interactions
+export function addMicroInteractions() {
+ const buttons = DOM.getAll('.nav-button');
+
+ // Magnetic effect to buttons
+ buttons.forEach((button) => {
+ button.addEventListener('mousemove', function (e) {
+ const rect = this.getBoundingClientRect();
+ const x = e.clientX - rect.left - rect.width / 2;
+ const y = e.clientY - rect.top - rect.height / 2;
+
+ this.style.transform = `translate(${x * 0.1}px, ${y * 0.1}px) scale(1.05)`;
+ });
+
+ button.addEventListener('mouseleave', function () {
+ this.style.transform = 'translate(0, 0) scale(1)';
+ });
+ });
+
+ // Tilt effect to avatar
+ const { avatar } = getMainElements();
+ if (avatar) {
+ avatar.addEventListener('mousemove', function (e) {
+ const rect = this.getBoundingClientRect();
+ const x = e.clientX - rect.left - rect.width / 2;
+ const y = e.clientY - rect.top - rect.height / 2;
+
+ const rotateX = (y / rect.height) * 20;
+ const rotateY = (x / rect.width) * -20;
+
+ this.style.transform = `perspective(1000px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(1.1)`;
+ });
+
+ avatar.addEventListener('mouseleave', function () {
+ this.style.transform = 'perspective(1000px) rotateX(0deg) rotateY(0deg) scale(1)';
+ });
+ }
+
+ // Ripple effect to all clickable elements
+ const clickableElements = DOM.getAll('a, button, .avatar, .brand-name');
+
+ clickableElements.forEach((element) => {
+ element.addEventListener('click', function (e) {
+ createRipple(this, e);
+ });
+ });
+
+ // Add CSS for ripple animation
+ const style = document.createElement('style');
+ style.textContent = `
+ @keyframes ripple {
+ to {
+ transform: scale(4);
+ opacity: 0;
+ }
+ }
+ `;
+ document.head.appendChild(style);
+}
+
+// Add text effects
+export function addTextEffects() {
+ const { brandName, tagline } = getMainElements();
+
+ // Add letter-by-letter animation to brand name
+ if (brandName) {
+ const text = brandName.textContent;
+ brandName.innerHTML = '';
+
+ text.split('').forEach((letter, index) => {
+ const span = document.createElement('span');
+ span.textContent = letter === ' ' ? '\u00A0' : letter;
+ span.style.display = 'inline-block';
+ span.style.animation = `letterBounce 0.6s ease forwards`;
+ span.style.animationDelay = `${index * 0.1}s`;
+ span.style.opacity = '0';
+ brandName.appendChild(span);
+ });
+ }
+
+ // Add hover effect to tagline
+ if (tagline) {
+ tagline.addEventListener('mouseenter', function () {
+ this.style.transform = 'scale(1.1) rotate(1deg)';
+ this.style.textShadow = '0 0 20px rgba(0, 122, 204, 0.8)';
+ });
+
+ tagline.addEventListener('mouseleave', function () {
+ this.style.transform = 'scale(1) rotate(0deg)';
+ this.style.textShadow = 'none';
+ });
+ }
+
+ // Add CSS for letter animation
+ const style = document.createElement('style');
+ style.textContent = `
+ @keyframes letterBounce {
+ 0% {
+ opacity: 0;
+ transform: translateY(20px) rotate(10deg);
+ }
+ 50% {
+ transform: translateY(-10px) rotate(-5deg);
+ }
+ 100% {
+ opacity: 1;
+ transform: translateY(0) rotate(0deg);
+ }
+ }
+ `;
+ document.head.appendChild(style);
+}
+
+// Add scroll effects
+export function addScrollEffects() {
+ let ticking = false;
+
+ function updateScrollEffects() {
+ const scrolled = window.pageYOffset;
+ const parallax = scrolled * 0.5;
+
+ document.body.style.setProperty('--scroll', `${parallax}px`);
+
+ const { avatar } = getMainElements();
+ if (avatar) {
+ const scale = Math.max(0.8, 1 - scrolled * 0.001);
+ avatar.style.transform = `scale(${scale})`;
+ }
+
+ ticking = false;
+ }
+
+ function requestTick() {
+ if (!ticking) {
+ requestAnimationFrame(updateScrollEffects);
+ ticking = true;
+ }
+ }
+
+ window.addEventListener('scroll', requestTick);
+}
+
+// Button morphing effects
+export function addButtonMorphing() {
+ const buttons = DOM.getAll('.nav-button');
+
+ buttons.forEach((button) => {
+ // Add pulse effect on focus
+ button.addEventListener('focus', function () {
+ this.style.animation = 'pulse 1s ease-in-out infinite';
+ });
+
+ button.addEventListener('blur', function () {
+ this.style.animation = '';
+ });
+ });
+
+ // Add CSS for button effects
+ const style = document.createElement('style');
+ style.textContent = `
+ @keyframes spin {
+ from { transform: rotate(0deg); }
+ to { transform: rotate(360deg); }
+ }
+ @keyframes pulse {
+ 0%, 100% { transform: scale(1); }
+ 50% { transform: scale(1.05); }
+ }
+ `;
+ document.head.appendChild(style);
+}
diff --git a/assets/js/modules/sound.js b/assets/js/modules/sound.js
new file mode 100644
index 0000000..b4143ba
--- /dev/null
+++ b/assets/js/modules/sound.js
@@ -0,0 +1,54 @@
+// Sound effects
+import { DOM } from './dom.js';
+
+// Play sound effect
+export function playSound(type) {
+ const audioContext = new (window.AudioContext || window.webkitAudioContext)();
+
+ if (type === 'click') {
+ const oscillator = audioContext.createOscillator();
+ const gainNode = audioContext.createGain();
+
+ oscillator.connect(gainNode);
+ gainNode.connect(audioContext.destination);
+
+ oscillator.frequency.setValueAtTime(800, audioContext.currentTime);
+ oscillator.frequency.exponentialRampToValueAtTime(400, audioContext.currentTime + 0.1);
+
+ gainNode.gain.setValueAtTime(0.1, audioContext.currentTime);
+ gainNode.gain.exponentialRampToValueAtTime(0.01, audioContext.currentTime + 0.1);
+
+ oscillator.start(audioContext.currentTime);
+ oscillator.stop(audioContext.currentTime + 0.1);
+ } else if (type === 'hover') {
+ const oscillator = audioContext.createOscillator();
+ const gainNode = audioContext.createGain();
+
+ oscillator.connect(gainNode);
+ gainNode.connect(audioContext.destination);
+
+ oscillator.frequency.setValueAtTime(600, audioContext.currentTime);
+ oscillator.frequency.exponentialRampToValueAtTime(800, audioContext.currentTime + 0.05);
+
+ gainNode.gain.setValueAtTime(0.05, audioContext.currentTime);
+ gainNode.gain.exponentialRampToValueAtTime(0.01, audioContext.currentTime + 0.05);
+
+ oscillator.start(audioContext.currentTime);
+ oscillator.stop(audioContext.currentTime + 0.05);
+ }
+}
+
+// Add sound effects to buttons
+export function addSoundEffects() {
+ const buttons = DOM.getAll('.nav-button');
+
+ buttons.forEach((button) => {
+ button.addEventListener('click', function () {
+ playSound('click');
+ });
+
+ button.addEventListener('mouseenter', function () {
+ playSound('hover');
+ });
+ });
+}
diff --git a/eslint.config.js b/eslint.config.js
new file mode 100644
index 0000000..8abead6
--- /dev/null
+++ b/eslint.config.js
@@ -0,0 +1,47 @@
+import js from '@eslint/js';
+import html from 'eslint-plugin-html';
+import prettier from 'eslint-config-prettier';
+
+export default [
+ js.configs.recommended,
+ prettier,
+ {
+ files: ['**/*.js', '**/*.html'],
+ plugins: {
+ html,
+ },
+ languageOptions: {
+ ecmaVersion: 'latest',
+ sourceType: 'module',
+ globals: {
+ console: 'readonly',
+ window: 'readonly',
+ document: 'readonly',
+ navigator: 'readonly',
+ requestAnimationFrame: 'readonly',
+ setTimeout: 'readonly',
+ setInterval: 'readonly',
+ clearInterval: 'readonly',
+ IntersectionObserver: 'readonly',
+ __dirname: 'readonly',
+ },
+ },
+ rules: {
+ 'no-unused-vars': 'warn',
+ 'no-console': 'off',
+ 'prefer-const': 'warn',
+ 'no-var': 'warn',
+ },
+ },
+ {
+ ignores: [
+ 'node_modules/**',
+ 'dist/**',
+ 'build/**',
+ '*.min.js',
+ '*.min.css',
+ 'script.js',
+ 'styles.css',
+ ],
+ },
+];
diff --git a/index.html b/index.html
index 5de3b7c..6615288 100644
--- a/index.html
+++ b/index.html
@@ -1,91 +1,111 @@
-
+
-
-
-
-
-
-

-
-
ZaneDev
-
Certified Epik Guy
+
+
+
+
+
+
+
+
+
+
+
+
+ ZaneDev
+ Certified Epik Guy
+
-
-
-
Bored guy who likes to make random stuff.
-
(not for hire btw)
-
+
+
+ About
+ Bored guy who likes to make random stuff.
+ (not for hire btw)
+
-
-
+
+
-
-
-
*Note* This website is not FDA approved
-
-
+
+
+
-
-
+
+
+
+
-
+
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..4b47480
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,6131 @@
+{
+ "name": "zanepersonal",
+ "version": "2.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "zanepersonal",
+ "version": "2.0.0",
+ "license": "MIT",
+ "devDependencies": {
+ "eslint": "^9.39.1",
+ "eslint-config-prettier": "^10.1.8",
+ "eslint-plugin-html": "^8.1.3",
+ "imagemin": "^9.0.1",
+ "imagemin-mozjpeg": "^10.0.0",
+ "imagemin-pngquant": "^10.0.0",
+ "prettier": "^3.6.2",
+ "terser": "^5.44.1",
+ "vite": "^7.2.2"
+ }
+ },
+ "node_modules/@borewit/text-codec": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.1.1.tgz",
+ "integrity": "sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Borewit"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz",
+ "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz",
+ "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz",
+ "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz",
+ "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz",
+ "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz",
+ "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz",
+ "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz",
+ "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz",
+ "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz",
+ "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz",
+ "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz",
+ "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz",
+ "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz",
+ "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz",
+ "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz",
+ "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz",
+ "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz",
+ "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz",
+ "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz",
+ "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz",
+ "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz",
+ "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz",
+ "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz",
+ "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.9.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz",
+ "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eslint-visitor-keys": "^3.4.3"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.12.2",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
+ "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/config-array": {
+ "version": "0.21.1",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz",
+ "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/object-schema": "^2.1.7",
+ "debug": "^4.3.1",
+ "minimatch": "^3.1.2"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/config-helpers": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz",
+ "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/core": "^0.17.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/core": {
+ "version": "0.17.0",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz",
+ "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@types/json-schema": "^7.0.15"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
+ "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^10.0.1",
+ "globals": "^14.0.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "9.39.1",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz",
+ "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ }
+ },
+ "node_modules/@eslint/object-schema": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz",
+ "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/plugin-kit": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz",
+ "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/core": "^0.17.0",
+ "levn": "^0.4.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@humanfs/core": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
+ "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanfs/node": {
+ "version": "0.16.7",
+ "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz",
+ "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@humanfs/core": "^0.19.1",
+ "@humanwhocodes/retry": "^0.4.0"
+ },
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/retry": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
+ "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/source-map": {
+ "version": "0.3.11",
+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz",
+ "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.53.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.1.tgz",
+ "integrity": "sha512-bxZtughE4VNVJlL1RdoSE545kc4JxL7op57KKoi59/gwuU5rV6jLWFXXc8jwgFoT6vtj+ZjO+Z2C5nrY0Cl6wA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.53.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.1.tgz",
+ "integrity": "sha512-44a1hreb02cAAfAKmZfXVercPFaDjqXCK+iKeVOlJ9ltvnO6QqsBHgKVPTu+MJHSLLeMEUbeG2qiDYgbFPU48g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.53.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.1.tgz",
+ "integrity": "sha512-usmzIgD0rf1syoOZ2WZvy8YpXK5G1V3btm3QZddoGSa6mOgfXWkkv+642bfUUldomgrbiLQGrPryb7DXLovPWQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.53.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.1.tgz",
+ "integrity": "sha512-is3r/k4vig2Gt8mKtTlzzyaSQ+hd87kDxiN3uDSDwggJLUV56Umli6OoL+/YZa/KvtdrdyNfMKHzL/P4siOOmg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.53.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.1.tgz",
+ "integrity": "sha512-QJ1ksgp/bDJkZB4daldVmHaEQkG4r8PUXitCOC2WRmRaSaHx5RwPoI3DHVfXKwDkB+Sk6auFI/+JHacTekPRSw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.53.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.1.tgz",
+ "integrity": "sha512-J6ma5xgAzvqsnU6a0+jgGX/gvoGokqpkx6zY4cWizRrm0ffhHDpJKQgC8dtDb3+MqfZDIqs64REbfHDMzxLMqQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.53.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.1.tgz",
+ "integrity": "sha512-JzWRR41o2U3/KMNKRuZNsDUAcAVUYhsPuMlx5RUldw0E4lvSIXFUwejtYz1HJXohUmqs/M6BBJAUBzKXZVddbg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.53.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.1.tgz",
+ "integrity": "sha512-L8kRIrnfMrEoHLHtHn+4uYA52fiLDEDyezgxZtGUTiII/yb04Krq+vk3P2Try+Vya9LeCE9ZHU8CXD6J9EhzHQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.53.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.1.tgz",
+ "integrity": "sha512-ysAc0MFRV+WtQ8li8hi3EoFi7us6d1UzaS/+Dp7FYZfg3NdDljGMoVyiIp6Ucz7uhlYDBZ/zt6XI0YEZbUO11Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.53.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.1.tgz",
+ "integrity": "sha512-UV6l9MJpDbDZZ/fJvqNcvO1PcivGEf1AvKuTcHoLjVZVFeAMygnamCTDikCVMRnA+qJe+B3pSbgX2+lBMqgBhA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
+ "version": "4.53.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.1.tgz",
+ "integrity": "sha512-UDUtelEprkA85g95Q+nj3Xf0M4hHa4DiJ+3P3h4BuGliY4NReYYqwlc0Y8ICLjN4+uIgCEvaygYlpf0hUj90Yg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+ "version": "4.53.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.1.tgz",
+ "integrity": "sha512-vrRn+BYhEtNOte/zbc2wAUQReJXxEx2URfTol6OEfY2zFEUK92pkFBSXRylDM7aHi+YqEPJt9/ABYzmcrS4SgQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.53.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.1.tgz",
+ "integrity": "sha512-gto/1CxHyi4A7YqZZNznQYrVlPSaodOBPKM+6xcDSCMVZN/Fzb4K+AIkNz/1yAYz9h3Ng+e2fY9H6bgawVq17w==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.53.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.1.tgz",
+ "integrity": "sha512-KZ6Vx7jAw3aLNjFR8eYVcQVdFa/cvBzDNRFM3z7XhNNunWjA03eUrEwJYPk0G8V7Gs08IThFKcAPS4WY/ybIrQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.53.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.1.tgz",
+ "integrity": "sha512-HvEixy2s/rWNgpwyKpXJcHmE7om1M89hxBTBi9Fs6zVuLU4gOrEMQNbNsN/tBVIMbLyysz/iwNiGtMOpLAOlvA==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.53.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.1.tgz",
+ "integrity": "sha512-E/n8x2MSjAQgjj9IixO4UeEUeqXLtiA7pyoXCFYLuXpBA/t2hnbIdxHfA7kK9BFsYAoNU4st1rHYdldl8dTqGA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.53.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.1.tgz",
+ "integrity": "sha512-IhJ087PbLOQXCN6Ui/3FUkI9pWNZe/Z7rEIVOzMsOs1/HSAECCvSZ7PkIbkNqL/AZn6WbZvnoVZw/qwqYMo4/w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-openharmony-arm64": {
+ "version": "4.53.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.1.tgz",
+ "integrity": "sha512-0++oPNgLJHBblreu0SFM7b3mAsBJBTY0Ksrmu9N6ZVrPiTkRgda52mWR7TKhHAsUb9noCjFvAw9l6ZO1yzaVbA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.53.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.1.tgz",
+ "integrity": "sha512-VJXivz61c5uVdbmitLkDlbcTk9Or43YC2QVLRkqp86QoeFSqI81bNgjhttqhKNMKnQMWnecOCm7lZz4s+WLGpQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.53.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.1.tgz",
+ "integrity": "sha512-NmZPVTUOitCXUH6erJDzTQ/jotYw4CnkMDjCYRxNHVD9bNyfrGoIse684F9okwzKCV4AIHRbUkeTBc9F2OOH5Q==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
+ "version": "4.53.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.1.tgz",
+ "integrity": "sha512-2SNj7COIdAf6yliSpLdLG8BEsp5lgzRehgfkP0Av8zKfQFKku6JcvbobvHASPJu4f3BFxej5g+HuQPvqPhHvpQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.53.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.1.tgz",
+ "integrity": "sha512-rLarc1Ofcs3DHtgSzFO31pZsCh8g05R2azN1q3fF+H423Co87My0R+tazOEvYVKXSLh8C4LerMK41/K7wlklcg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@sec-ant/readable-stream": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz",
+ "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@sindresorhus/is": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-6.3.1.tgz",
+ "integrity": "sha512-FX4MfcifwJyFOI2lPoX7PQxCqx8BG1HCho7WdiXwpEQx1Ycij0JxkfYtGK7yqNScrZGSlt6RE6sw8QYoH7eKnQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/is?sponsor=1"
+ }
+ },
+ "node_modules/@sindresorhus/merge-streams": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
+ "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@tokenizer/token": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz",
+ "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/acorn": {
+ "version": "8.15.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/arch": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
+ "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/archive-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz",
+ "integrity": "sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "file-type": "^4.2.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/archive-type/node_modules/file-type": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz",
+ "integrity": "sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "license": "Python-2.0"
+ },
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/bin-build": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz",
+ "integrity": "sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "decompress": "^4.0.0",
+ "download": "^6.2.2",
+ "execa": "^0.7.0",
+ "p-map-series": "^1.0.0",
+ "tempfile": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/bin-build/node_modules/cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "node_modules/bin-build/node_modules/execa": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/bin-build/node_modules/get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/bin-build/node_modules/is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/bin-build/node_modules/npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/bin-build/node_modules/path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/bin-build/node_modules/shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/bin-build/node_modules/shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/bin-build/node_modules/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
+ "node_modules/bin-check": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz",
+ "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "execa": "^0.7.0",
+ "executable": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/bin-check/node_modules/cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "node_modules/bin-check/node_modules/execa": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/bin-check/node_modules/get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/bin-check/node_modules/is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/bin-check/node_modules/npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/bin-check/node_modules/path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/bin-check/node_modules/shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/bin-check/node_modules/shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/bin-check/node_modules/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
+ "node_modules/bin-version": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz",
+ "integrity": "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "execa": "^1.0.0",
+ "find-versions": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/bin-version-check": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz",
+ "integrity": "sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bin-version": "^3.0.0",
+ "semver": "^5.6.0",
+ "semver-truncate": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/bin-version/node_modules/cross-spawn": {
+ "version": "6.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz",
+ "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ },
+ "engines": {
+ "node": ">=4.8"
+ }
+ },
+ "node_modules/bin-version/node_modules/execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/bin-version/node_modules/get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pump": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/bin-version/node_modules/is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/bin-version/node_modules/npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/bin-version/node_modules/path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/bin-version/node_modules/shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/bin-version/node_modules/shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/bin-version/node_modules/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
+ "node_modules/bin-wrapper": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz",
+ "integrity": "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bin-check": "^4.1.0",
+ "bin-version-check": "^4.0.0",
+ "download": "^7.1.0",
+ "import-lazy": "^3.1.0",
+ "os-filter-obj": "^2.0.0",
+ "pify": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/bin-wrapper/node_modules/@sindresorhus/is": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz",
+ "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/bin-wrapper/node_modules/download": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz",
+ "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "archive-type": "^4.0.0",
+ "caw": "^2.0.1",
+ "content-disposition": "^0.5.2",
+ "decompress": "^4.2.0",
+ "ext-name": "^5.0.0",
+ "file-type": "^8.1.0",
+ "filenamify": "^2.0.0",
+ "get-stream": "^3.0.0",
+ "got": "^8.3.1",
+ "make-dir": "^1.2.0",
+ "p-event": "^2.1.0",
+ "pify": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/bin-wrapper/node_modules/download/node_modules/pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/bin-wrapper/node_modules/file-type": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz",
+ "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/bin-wrapper/node_modules/get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/bin-wrapper/node_modules/got": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz",
+ "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@sindresorhus/is": "^0.7.0",
+ "cacheable-request": "^2.1.1",
+ "decompress-response": "^3.3.0",
+ "duplexer3": "^0.1.4",
+ "get-stream": "^3.0.0",
+ "into-stream": "^3.1.0",
+ "is-retry-allowed": "^1.1.0",
+ "isurl": "^1.0.0-alpha5",
+ "lowercase-keys": "^1.0.0",
+ "mimic-response": "^1.0.0",
+ "p-cancelable": "^0.4.0",
+ "p-timeout": "^2.0.1",
+ "pify": "^3.0.0",
+ "safe-buffer": "^5.1.1",
+ "timed-out": "^4.0.1",
+ "url-parse-lax": "^3.0.0",
+ "url-to-options": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/bin-wrapper/node_modules/got/node_modules/pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/bin-wrapper/node_modules/p-cancelable": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz",
+ "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/bin-wrapper/node_modules/p-event": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz",
+ "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-timeout": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/bin-wrapper/node_modules/p-timeout": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz",
+ "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-finally": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/bin-wrapper/node_modules/prepend-http": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
+ "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/bin-wrapper/node_modules/url-parse-lax": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
+ "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prepend-http": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/bl": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz",
+ "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "^2.3.5",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "node_modules/buffer-alloc": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
+ "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer-alloc-unsafe": "^1.1.0",
+ "buffer-fill": "^1.0.0"
+ }
+ },
+ "node_modules/buffer-alloc-unsafe": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
+ "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/buffer-fill": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
+ "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cacheable-request": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz",
+ "integrity": "sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "clone-response": "1.0.2",
+ "get-stream": "3.0.0",
+ "http-cache-semantics": "3.8.1",
+ "keyv": "3.0.0",
+ "lowercase-keys": "1.0.0",
+ "normalize-url": "2.0.1",
+ "responselike": "1.0.2"
+ }
+ },
+ "node_modules/cacheable-request/node_modules/get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/cacheable-request/node_modules/json-buffer": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
+ "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cacheable-request/node_modules/keyv": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz",
+ "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "json-buffer": "3.0.0"
+ }
+ },
+ "node_modules/cacheable-request/node_modules/lowercase-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz",
+ "integrity": "sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
+ "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.0",
+ "es-define-property": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/call-bind-apply-helpers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/call-bound": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "get-intrinsic": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-4.2.0.tgz",
+ "integrity": "sha512-kfzR4zzQtAE9PC7CzZsjl3aBNbXWuXiSeOCdLcPpBfGW8YuCqQHcRPFDbr/BPVmd3EEPVpuFzLyuT/cUhPr4OQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/caw": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz",
+ "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-proxy": "^2.0.0",
+ "isurl": "^1.0.0-alpha5",
+ "tunnel-agent": "^0.6.0",
+ "url-to-options": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/change-file-extension": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/change-file-extension/-/change-file-extension-0.1.1.tgz",
+ "integrity": "sha512-lB0j9teu8JtDPDHRfU8pNH33w4wMu5bOaKoT4PxH+AKugBrIfpiJMTTKIm0TErNeJPkeQEgvH31YpccTwOKPRg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/clone-response": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
+ "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mimic-response": "^1.0.0"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/config-chain": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
+ "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ }
+ },
+ "node_modules/content-disposition": {
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "5.2.1"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/convert-hrtime": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/convert-hrtime/-/convert-hrtime-5.0.0.tgz",
+ "integrity": "sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decode-uri-component": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz",
+ "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/decompress": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz",
+ "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "decompress-tar": "^4.0.0",
+ "decompress-tarbz2": "^4.0.0",
+ "decompress-targz": "^4.0.0",
+ "decompress-unzip": "^4.0.1",
+ "graceful-fs": "^4.1.10",
+ "make-dir": "^1.0.0",
+ "pify": "^2.3.0",
+ "strip-dirs": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/decompress-response": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
+ "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mimic-response": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/decompress-tar": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz",
+ "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "file-type": "^5.2.0",
+ "is-stream": "^1.1.0",
+ "tar-stream": "^1.5.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/decompress-tar/node_modules/file-type": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
+ "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/decompress-tar/node_modules/is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decompress-tarbz2": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz",
+ "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "decompress-tar": "^4.1.0",
+ "file-type": "^6.1.0",
+ "is-stream": "^1.1.0",
+ "seek-bzip": "^1.0.5",
+ "unbzip2-stream": "^1.0.9"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/decompress-tarbz2/node_modules/file-type": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz",
+ "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/decompress-tarbz2/node_modules/is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decompress-targz": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz",
+ "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "decompress-tar": "^4.1.1",
+ "file-type": "^5.2.0",
+ "is-stream": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/decompress-targz/node_modules/file-type": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
+ "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/decompress-targz/node_modules/is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decompress-unzip": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz",
+ "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "file-type": "^3.8.0",
+ "get-stream": "^2.2.0",
+ "pify": "^2.3.0",
+ "yauzl": "^2.4.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/decompress-unzip/node_modules/file-type": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
+ "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decompress-unzip/node_modules/get-stream": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz",
+ "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "object-assign": "^4.0.1",
+ "pinkie-promise": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decompress-unzip/node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decompress/node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/dom-serializer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+ "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+ }
+ },
+ "node_modules/dom-serializer/node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/domelementtype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ],
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/domhandler": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+ "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "domelementtype": "^2.3.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
+ }
+ },
+ "node_modules/domutils": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
+ "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domutils?sponsor=1"
+ }
+ },
+ "node_modules/dot-prop": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-8.0.2.tgz",
+ "integrity": "sha512-xaBe6ZT4DHPkg0k4Ytbvn5xoxgpG0jOS1dYxSOwAHPuNLjP3/OzN0gH55SrLqpx8cBfSaVt91lXYkApjb+nYdQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "type-fest": "^3.8.0"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/download": {
+ "version": "6.2.5",
+ "resolved": "https://registry.npmjs.org/download/-/download-6.2.5.tgz",
+ "integrity": "sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "caw": "^2.0.0",
+ "content-disposition": "^0.5.2",
+ "decompress": "^4.0.0",
+ "ext-name": "^5.0.0",
+ "file-type": "5.2.0",
+ "filenamify": "^2.0.0",
+ "get-stream": "^3.0.0",
+ "got": "^7.0.0",
+ "make-dir": "^1.0.0",
+ "p-event": "^1.0.0",
+ "pify": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/download/node_modules/file-type": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
+ "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/download/node_modules/get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/download/node_modules/pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/duplexer3": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz",
+ "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/end-of-stream": {
+ "version": "1.4.5",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz",
+ "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
+ "node_modules/entities": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
+ "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/environment": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz",
+ "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.25.12",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz",
+ "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.25.12",
+ "@esbuild/android-arm": "0.25.12",
+ "@esbuild/android-arm64": "0.25.12",
+ "@esbuild/android-x64": "0.25.12",
+ "@esbuild/darwin-arm64": "0.25.12",
+ "@esbuild/darwin-x64": "0.25.12",
+ "@esbuild/freebsd-arm64": "0.25.12",
+ "@esbuild/freebsd-x64": "0.25.12",
+ "@esbuild/linux-arm": "0.25.12",
+ "@esbuild/linux-arm64": "0.25.12",
+ "@esbuild/linux-ia32": "0.25.12",
+ "@esbuild/linux-loong64": "0.25.12",
+ "@esbuild/linux-mips64el": "0.25.12",
+ "@esbuild/linux-ppc64": "0.25.12",
+ "@esbuild/linux-riscv64": "0.25.12",
+ "@esbuild/linux-s390x": "0.25.12",
+ "@esbuild/linux-x64": "0.25.12",
+ "@esbuild/netbsd-arm64": "0.25.12",
+ "@esbuild/netbsd-x64": "0.25.12",
+ "@esbuild/openbsd-arm64": "0.25.12",
+ "@esbuild/openbsd-x64": "0.25.12",
+ "@esbuild/openharmony-arm64": "0.25.12",
+ "@esbuild/sunos-x64": "0.25.12",
+ "@esbuild/win32-arm64": "0.25.12",
+ "@esbuild/win32-ia32": "0.25.12",
+ "@esbuild/win32-x64": "0.25.12"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "9.39.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz",
+ "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.8.0",
+ "@eslint-community/regexpp": "^4.12.1",
+ "@eslint/config-array": "^0.21.1",
+ "@eslint/config-helpers": "^0.4.2",
+ "@eslint/core": "^0.17.0",
+ "@eslint/eslintrc": "^3.3.1",
+ "@eslint/js": "9.39.1",
+ "@eslint/plugin-kit": "^0.4.1",
+ "@humanfs/node": "^0.16.6",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@humanwhocodes/retry": "^0.4.2",
+ "@types/estree": "^1.0.6",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.6",
+ "debug": "^4.3.2",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^8.4.0",
+ "eslint-visitor-keys": "^4.2.1",
+ "espree": "^10.4.0",
+ "esquery": "^1.5.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^8.0.0",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ },
+ "peerDependencies": {
+ "jiti": "*"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-config-prettier": {
+ "version": "10.1.8",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz",
+ "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "eslint-config-prettier": "bin/cli.js"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint-config-prettier"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-html": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-8.1.3.tgz",
+ "integrity": "sha512-cnCdO7yb/jrvgSJJAfRkGDOwLu1AOvNdw8WCD6nh/2C4RnxuI4tz6QjMEAmmSiHSeugq/fXcIO8yBpIBQrMZCg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "htmlparser2": "^10.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
+ "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+ "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/espree": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
+ "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^8.15.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^4.2.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/execa": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz",
+ "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.1",
+ "human-signals": "^3.0.1",
+ "is-stream": "^3.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^3.0.7",
+ "strip-final-newline": "^3.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/execa/node_modules/get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/execa/node_modules/is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/executable": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz",
+ "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pify": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/executable/node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ext-list": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz",
+ "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "^1.28.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ext-name": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz",
+ "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ext-list": "^2.0.0",
+ "sort-keys-length": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-equals": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.3.2.tgz",
+ "integrity": "sha512-6rxyATwPCkaFIL3JLqw8qXqMpIZ942pTX/tbQFkRsDGblS8tNGtlUauA/+mt6RUfqn/4MoEr+WDkYoIQbibWuQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.8"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fastq": {
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
+ "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fd-slicer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+ "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pend": "~1.2.0"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flat-cache": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/file-type": {
+ "version": "19.6.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-19.6.0.tgz",
+ "integrity": "sha512-VZR5I7k5wkD0HgFnMsq5hOsSc710MJMu5Nc5QYsbe38NN5iPV/XTObYLc/cpttRTf6lX538+5uO1ZQRhYibiZQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-stream": "^9.0.1",
+ "strtok3": "^9.0.1",
+ "token-types": "^6.0.0",
+ "uint8array-extras": "^1.3.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/file-type?sponsor=1"
+ }
+ },
+ "node_modules/filename-reserved-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz",
+ "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/filenamify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz",
+ "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "filename-reserved-regex": "^2.0.0",
+ "strip-outer": "^1.0.0",
+ "trim-repeated": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/find-versions": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz",
+ "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "semver-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
+ "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.4"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
+ "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/for-each": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
+ "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-callable": "^1.2.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/from2": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+ "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0"
+ }
+ },
+ "node_modules/fs-constants": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
+ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/function-timeout": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/function-timeout/-/function-timeout-1.0.2.tgz",
+ "integrity": "sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "function-bind": "^1.1.2",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/get-proxy": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz",
+ "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "npm-conf": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz",
+ "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@sec-ant/readable-stream": "^0.4.1",
+ "is-stream": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/globals": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+ "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globby": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz",
+ "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@sindresorhus/merge-streams": "^2.1.0",
+ "fast-glob": "^3.3.3",
+ "ignore": "^7.0.3",
+ "path-type": "^6.0.0",
+ "slash": "^5.1.0",
+ "unicorn-magic": "^0.3.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globby/node_modules/ignore": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+ "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/got": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz",
+ "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "decompress-response": "^3.2.0",
+ "duplexer3": "^0.1.4",
+ "get-stream": "^3.0.0",
+ "is-plain-obj": "^1.1.0",
+ "is-retry-allowed": "^1.0.0",
+ "is-stream": "^1.0.0",
+ "isurl": "^1.0.0-alpha5",
+ "lowercase-keys": "^1.0.0",
+ "p-cancelable": "^0.3.0",
+ "p-timeout": "^1.1.1",
+ "safe-buffer": "^5.0.1",
+ "timed-out": "^4.0.0",
+ "url-parse-lax": "^1.0.0",
+ "url-to-options": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/got/node_modules/get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/got/node_modules/is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbol-support-x": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz",
+ "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-to-string-tag-x": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz",
+ "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-symbol-support-x": "^1.4.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/htmlparser2": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz",
+ "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==",
+ "dev": true,
+ "funding": [
+ "https://github.com/fb55/htmlparser2?sponsor=1",
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.2.1",
+ "entities": "^6.0.0"
+ }
+ },
+ "node_modules/http-cache-semantics": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz",
+ "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==",
+ "dev": true,
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/human-signals": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz",
+ "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12.20.0"
+ }
+ },
+ "node_modules/identifier-regex": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/identifier-regex/-/identifier-regex-1.0.1.tgz",
+ "integrity": "sha512-ZrYyM0sozNPZlvBvE7Oq9Bn44n0qKGrYu5sQ0JzMUnjIhpgWYE2JB6aBoFwEYdPjqj7jPyxXTMJiHDOxDfd8yw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "reserved-identifiers": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/ignore": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/image-dimensions": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/image-dimensions/-/image-dimensions-2.5.0.tgz",
+ "integrity": "sha512-CKZPHjAEtSg9lBV9eER0bhNn/yrY7cFEQEhkwjLhqLY+Na8lcP1pEyWsaGMGc8t2qbKWA/tuqbhFQpOKGN72Yw==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "image-dimensions": "cli.js"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imagemin": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-9.0.1.tgz",
+ "integrity": "sha512-UoHOfynN8QeqRoUGunn6ilMnLpJ+utbmleP2ufcFqaGal8mY/PeOpV43N31uqtb+CBMFqQ7hxgKzIaAAnmcrdA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "change-file-extension": "^0.1.1",
+ "environment": "^1.0.0",
+ "file-type": "^19.0.0",
+ "globby": "^14.0.1",
+ "image-dimensions": "^2.3.0",
+ "junk": "^4.0.1",
+ "ow": "^2.0.0",
+ "p-pipe": "^4.0.0",
+ "slash": "^5.1.0",
+ "uint8array-extras": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imagemin-mozjpeg": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/imagemin-mozjpeg/-/imagemin-mozjpeg-10.0.0.tgz",
+ "integrity": "sha512-DK85QNOjS3/GzWYfNB3CACMZD10sIQgFDv1+WTOnZljgltQTEyATjdyUVyjKu5q4sCESQdwvwq7WEZzJ5fFjlg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "execa": "^6.0.0",
+ "is-jpg": "^3.0.0",
+ "mozjpeg": "^8.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ }
+ },
+ "node_modules/imagemin-pngquant": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/imagemin-pngquant/-/imagemin-pngquant-10.0.0.tgz",
+ "integrity": "sha512-kt0LFxyv7sBxUbZyvt+JXoU0HvSnmTJkEW32rZPQ9d7AQJPVh0vkz9mGkvbX0yntY2zW/3N20Yw69PBSt1UQzw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "environment": "^1.0.0",
+ "execa": "^8.0.1",
+ "is-png": "^3.0.1",
+ "ow": "^2.0.0",
+ "pngquant-bin": "^9.0.0",
+ "uint8array-extras": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/imagemin-pngquant/node_modules/execa": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
+ "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^8.0.1",
+ "human-signals": "^5.0.0",
+ "is-stream": "^3.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^4.1.0",
+ "strip-final-newline": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=16.17"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/imagemin-pngquant/node_modules/get-stream": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+ "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imagemin-pngquant/node_modules/human-signals": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
+ "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=16.17.0"
+ }
+ },
+ "node_modules/imagemin-pngquant/node_modules/is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imagemin-pngquant/node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+ "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/import-lazy": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz",
+ "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/into-stream": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz",
+ "integrity": "sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "from2": "^2.1.1",
+ "p-is-promise": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-identifier": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-identifier/-/is-identifier-1.0.1.tgz",
+ "integrity": "sha512-HQ5v4rEJ7REUV54bCd2l5FaD299SGDEn2UPoVXaTHAyGviLq2menVUD2udi3trQ32uvB6LdAh/0ck2EuizrtpA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "identifier-regex": "^1.0.0",
+ "super-regex": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-jpg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-3.0.0.tgz",
+ "integrity": "sha512-Vcd67KWHZblEKEBrtP25qLZ8wN9ICoAhl1pKUqD7SM7hf2qtuRl7loDgP5Zigh2oN/+7uj+KVyC0eRJvgOEFeQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-natural-number": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz",
+ "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-object": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz",
+ "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-png": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/is-png/-/is-png-3.0.1.tgz",
+ "integrity": "sha512-8TqC8+bdsm3YkpI2aECCDycFDl1hTB0HMVRnP3xRRa3Tqx2oVE7sBi1G6CuO9IqEyWSzbBZr1mGqdb3it9h/pg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-retry-allowed": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz",
+ "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-stream": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz",
+ "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-typed-array": {
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
+ "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "which-typed-array": "^1.1.16"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/isurl": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz",
+ "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-to-string-tag-x": "^1.2.0",
+ "is-object": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/junk": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/junk/-/junk-4.0.1.tgz",
+ "integrity": "sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lowercase-keys": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
+ "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "node_modules/make-asynchronous": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/make-asynchronous/-/make-asynchronous-1.0.1.tgz",
+ "integrity": "sha512-T9BPOmEOhp6SmV25SwLVcHK4E6JyG/coH3C6F1NjNXSziv/fd4GmsqMk8YR6qpPOswfaOCApSNkZv6fxoaYFcQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-event": "^6.0.0",
+ "type-fest": "^4.6.0",
+ "web-worker": "1.2.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/make-asynchronous/node_modules/p-event": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/p-event/-/p-event-6.0.1.tgz",
+ "integrity": "sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-timeout": "^6.1.2"
+ },
+ "engines": {
+ "node": ">=16.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/make-asynchronous/node_modules/p-timeout": {
+ "version": "6.1.4",
+ "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz",
+ "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/make-asynchronous/node_modules/type-fest": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
+ "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/make-dir": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pify": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/make-dir/node_modules/pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.54.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
+ "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mimic-response": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
+ "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/mozjpeg": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/mozjpeg/-/mozjpeg-8.0.0.tgz",
+ "integrity": "sha512-Ca2Yhah9hG0Iutgsn8MOrAl37P9ThnKsJatjXoWdUO+8X8GeG/6ahvHZrTyqvbs6leMww1SauWUCao/L9qBuFQ==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "dependencies": {
+ "bin-build": "^3.0.0",
+ "bin-wrapper": "^4.0.0"
+ },
+ "bin": {
+ "mozjpeg": "cli.js"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/normalize-url": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz",
+ "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prepend-http": "^2.0.0",
+ "query-string": "^5.0.1",
+ "sort-keys": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/normalize-url/node_modules/prepend-http": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
+ "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/normalize-url/node_modules/sort-keys": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz",
+ "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-obj": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-conf": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz",
+ "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "config-chain": "^1.1.11",
+ "pify": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-conf/node_modules/pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-run-path": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
+ "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/npm-run-path/node_modules/path-key": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mimic-fn": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/os-filter-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz",
+ "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "arch": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ow": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ow/-/ow-2.0.0.tgz",
+ "integrity": "sha512-ESUigmGrdhUZ2nQSFNkeKSl6ZRPupXzprMs3yF9DYlNVpJ8XAjM/fI9RUZxA7PI1K9HQDCCvBo1jr/GEIo9joQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@sindresorhus/is": "^6.3.0",
+ "callsites": "^4.1.0",
+ "dot-prop": "^8.0.2",
+ "environment": "^1.0.0",
+ "fast-equals": "^5.0.1",
+ "is-identifier": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-cancelable": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz",
+ "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/p-event": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz",
+ "integrity": "sha512-hV1zbA7gwqPVFcapfeATaNjQ3J0NuzorHPyG8GPL9g/Y/TplWVBVoCKCXL6Ej2zscrCEv195QNWJXuBH6XZuzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-timeout": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/p-is-promise": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz",
+ "integrity": "sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-map-series": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz",
+ "integrity": "sha512-4k9LlvY6Bo/1FcIdV33wqZQES0Py+iKISU9Uc8p8AjWoZPnFKMpVIVD3s0EYn4jzLh1I+WeUZkJ0Yoa4Qfw3Kg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-reduce": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/p-pipe": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-4.0.0.tgz",
+ "integrity": "sha512-HkPfFklpZQPUKBFXzKFB6ihLriIHxnmuQdK9WmLDwe4hf2PdhhfWT/FJa+pc3bA1ywvKXtedxIRmd4Y7BTXE4w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-reduce": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz",
+ "integrity": "sha512-3Tx1T3oM1xO/Y8Gj0sWyE78EIJZ+t+aEmXUdvQgvGmSMri7aPTHoovbXEreWKkL5j21Er60XAWLTzKbAKYOujQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/p-timeout": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz",
+ "integrity": "sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-finally": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parent-module/node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-type": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz",
+ "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/peek-readable": {
+ "version": "5.4.2",
+ "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.4.2.tgz",
+ "integrity": "sha512-peBp3qZyuS6cNIJ2akRNG1uo1WJ1d0wTxg/fxMdZ0BqCVhx242bSFHM9eNqflfJVS9SsgkzgT/1UgnsurBOTMg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Borewit"
+ }
+ },
+ "node_modules/pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pinkie": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pngquant-bin": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/pngquant-bin/-/pngquant-bin-9.0.0.tgz",
+ "integrity": "sha512-jlOKfIQBTNJwQn2JKK5xLmwrsi/NwVTmHRvbrknCjdWxfX1/c/+yP4Jmp9jRZWedft/vnhh+rGbvl/kUmesurg==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "GPL-3.0+",
+ "dependencies": {
+ "bin-build": "^3.0.0",
+ "bin-wrapper": "^4.0.1",
+ "execa": "^8.0.1"
+ },
+ "bin": {
+ "pngquant": "cli.js"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/pngquant-bin/node_modules/execa": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
+ "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^8.0.1",
+ "human-signals": "^5.0.0",
+ "is-stream": "^3.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^4.1.0",
+ "strip-final-newline": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=16.17"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/pngquant-bin/node_modules/get-stream": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+ "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/pngquant-bin/node_modules/human-signals": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
+ "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=16.17.0"
+ }
+ },
+ "node_modules/pngquant-bin/node_modules/is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/pngquant-bin/node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/possible-typed-array-names": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
+ "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.5.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
+ "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.11",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prepend-http": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+ "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/prettier": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz",
+ "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/proto-list": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+ "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/pump": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz",
+ "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/query-string": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz",
+ "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "decode-uri-component": "^0.2.0",
+ "object-assign": "^4.1.0",
+ "strict-uri-encode": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/readable-stream/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/reserved-identifiers": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/reserved-identifiers/-/reserved-identifiers-1.2.0.tgz",
+ "integrity": "sha512-yE7KUfFvaBFzGPs5H3Ops1RevfUEsDc5Iz65rOwWg4lE8HJSYtle77uul3+573457oHvBKuHYDl/xqUkKpEEdw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/responselike": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
+ "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "lowercase-keys": "^1.0.0"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.53.1",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.1.tgz",
+ "integrity": "sha512-n2I0V0lN3E9cxxMqBCT3opWOiQBzRN7UG60z/WDKqdX2zHUS/39lezBcsckZFsV6fUTSnfqI7kHf60jDAPGKug==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.8"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.53.1",
+ "@rollup/rollup-android-arm64": "4.53.1",
+ "@rollup/rollup-darwin-arm64": "4.53.1",
+ "@rollup/rollup-darwin-x64": "4.53.1",
+ "@rollup/rollup-freebsd-arm64": "4.53.1",
+ "@rollup/rollup-freebsd-x64": "4.53.1",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.53.1",
+ "@rollup/rollup-linux-arm-musleabihf": "4.53.1",
+ "@rollup/rollup-linux-arm64-gnu": "4.53.1",
+ "@rollup/rollup-linux-arm64-musl": "4.53.1",
+ "@rollup/rollup-linux-loong64-gnu": "4.53.1",
+ "@rollup/rollup-linux-ppc64-gnu": "4.53.1",
+ "@rollup/rollup-linux-riscv64-gnu": "4.53.1",
+ "@rollup/rollup-linux-riscv64-musl": "4.53.1",
+ "@rollup/rollup-linux-s390x-gnu": "4.53.1",
+ "@rollup/rollup-linux-x64-gnu": "4.53.1",
+ "@rollup/rollup-linux-x64-musl": "4.53.1",
+ "@rollup/rollup-openharmony-arm64": "4.53.1",
+ "@rollup/rollup-win32-arm64-msvc": "4.53.1",
+ "@rollup/rollup-win32-ia32-msvc": "4.53.1",
+ "@rollup/rollup-win32-x64-gnu": "4.53.1",
+ "@rollup/rollup-win32-x64-msvc": "4.53.1",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/seek-bzip": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz",
+ "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "commander": "^2.8.1"
+ },
+ "bin": {
+ "seek-bunzip": "bin/seek-bunzip",
+ "seek-table": "bin/seek-bzip-table"
+ }
+ },
+ "node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/semver-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz",
+ "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/semver-truncate": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz",
+ "integrity": "sha512-V1fGg9i4CL3qesB6U0L6XAm4xOJiHmt4QAacazumuasc03BvtFGIMCduv01JWQ69Nv+JST9TqhSCiJoxoY031w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "semver": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/slash": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
+ "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/sort-keys": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
+ "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-plain-obj": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sort-keys-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz",
+ "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "sort-keys": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/strict-uri-encode": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
+ "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/string_decoder/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/strip-dirs": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz",
+ "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-natural-number": "^4.0.1"
+ }
+ },
+ "node_modules/strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strip-final-newline": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/strip-outer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz",
+ "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "escape-string-regexp": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strip-outer/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/strtok3": {
+ "version": "9.1.1",
+ "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-9.1.1.tgz",
+ "integrity": "sha512-FhwotcEqjr241ZbjFzjlIYg6c5/L/s4yBGWSMvJ9UoExiSqL+FnFA/CaeZx17WGaZMS/4SOZp8wH18jSS4R4lw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@tokenizer/token": "^0.3.0",
+ "peek-readable": "^5.3.1"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Borewit"
+ }
+ },
+ "node_modules/super-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/super-regex/-/super-regex-1.1.0.tgz",
+ "integrity": "sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-timeout": "^1.0.1",
+ "make-asynchronous": "^1.0.1",
+ "time-span": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/tar-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz",
+ "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bl": "^1.0.0",
+ "buffer-alloc": "^1.2.0",
+ "end-of-stream": "^1.0.0",
+ "fs-constants": "^1.0.0",
+ "readable-stream": "^2.3.0",
+ "to-buffer": "^1.1.1",
+ "xtend": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/temp-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz",
+ "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/tempfile": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz",
+ "integrity": "sha512-ZOn6nJUgvgC09+doCEF3oB+r3ag7kUvlsXEGX069QRD60p+P3uP7XG9N2/at+EyIRGSN//ZY3LyEotA1YpmjuA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "temp-dir": "^1.0.0",
+ "uuid": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/terser": {
+ "version": "5.44.1",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.1.tgz",
+ "integrity": "sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "@jridgewell/source-map": "^0.3.3",
+ "acorn": "^8.15.0",
+ "commander": "^2.20.0",
+ "source-map-support": "~0.5.20"
+ },
+ "bin": {
+ "terser": "bin/terser"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/time-span": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/time-span/-/time-span-5.1.0.tgz",
+ "integrity": "sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "convert-hrtime": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/timed-out": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
+ "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.15",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
+ "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/tinyglobby/node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tinyglobby/node_modules/picomatch": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/to-buffer": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz",
+ "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "isarray": "^2.0.5",
+ "safe-buffer": "^5.2.1",
+ "typed-array-buffer": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/to-buffer/node_modules/isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/token-types": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.1.tgz",
+ "integrity": "sha512-kh9LVIWH5CnL63Ipf0jhlBIy0UsrMj/NJDfpsy1SqOXlLKEVyXXYrnFxFT1yOOYVGBSApeVnjPw/sBz5BfEjAQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@borewit/text-codec": "^0.1.0",
+ "@tokenizer/token": "^0.3.0",
+ "ieee754": "^1.2.1"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Borewit"
+ }
+ },
+ "node_modules/trim-repeated": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz",
+ "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "escape-string-regexp": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/trim-repeated/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz",
+ "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typed-array-buffer": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
+ "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "is-typed-array": "^1.1.14"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/uint8array-extras": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz",
+ "integrity": "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/unbzip2-stream": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz",
+ "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer": "^5.2.1",
+ "through": "^2.3.8"
+ }
+ },
+ "node_modules/unicorn-magic": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
+ "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/url-parse-lax": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
+ "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prepend-http": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/url-to-options": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz",
+ "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+ "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
+ "node_modules/vite": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.2.tgz",
+ "integrity": "sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "^0.25.0",
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3",
+ "postcss": "^8.5.6",
+ "rollup": "^4.43.0",
+ "tinyglobby": "^0.2.15"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^20.19.0 || >=22.12.0",
+ "jiti": ">=1.21.0",
+ "less": "^4.0.0",
+ "lightningcss": "^1.21.0",
+ "sass": "^1.70.0",
+ "sass-embedded": "^1.70.0",
+ "stylus": ">=0.54.8",
+ "sugarss": "^5.0.0",
+ "terser": "^5.16.0",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "jiti": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite/node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite/node_modules/picomatch": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/web-worker": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz",
+ "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/which-typed-array": {
+ "version": "1.1.19",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz",
+ "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.4",
+ "for-each": "^0.3.5",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/yauzl": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
+ "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer-crc32": "~0.2.3",
+ "fd-slicer": "~1.1.0"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..be5ac48
--- /dev/null
+++ b/package.json
@@ -0,0 +1,41 @@
+{
+ "name": "zanepersonal",
+ "version": "2.0.0",
+ "description": "Modern, interactive personal website with creative visual effects and animations",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "preview": "vite preview",
+ "lint": "eslint . --ext .js,.html",
+ "lint:fix": "eslint . --ext .js,.html --fix",
+ "format": "prettier --write \"**/*.{js,html,css,json,md}\"",
+ "format:check": "prettier --check \"**/*.{js,html,css,json,md}\""
+ },
+ "keywords": [
+ "personal-website",
+ "portfolio",
+ "interactive",
+ "web-animations",
+ "particle-effects",
+ "creative-coding"
+ ],
+ "author": "ZaneDev
",
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/ZaneThePython/ZanePersonal.git"
+ },
+ "homepage": "https://zane.org",
+ "devDependencies": {
+ "eslint": "^9.39.1",
+ "eslint-config-prettier": "^10.1.8",
+ "eslint-plugin-html": "^8.1.3",
+ "imagemin": "^9.0.1",
+ "imagemin-mozjpeg": "^10.0.0",
+ "imagemin-pngquant": "^10.0.0",
+ "prettier": "^3.6.2",
+ "terser": "^5.44.1",
+ "vite": "^7.2.2"
+ }
+}
diff --git a/robots.txt b/robots.txt
new file mode 100644
index 0000000..32198bf
--- /dev/null
+++ b/robots.txt
@@ -0,0 +1,8 @@
+User-agent: *
+Allow: /
+
+# Sitemap location
+Sitemap: https://zane.org/sitemap.xml
+
+# Crawl-delay (optional, adjust based on server capacity)
+Crawl-delay: 1
diff --git a/script.js b/script.js
index b7b6b90..ed0e523 100644
--- a/script.js
+++ b/script.js
@@ -4,439 +4,441 @@ const contentSections = document.querySelectorAll('.content-section');
const closeButtons = document.querySelectorAll('.close-button');
// Initialize the website
-document.addEventListener('DOMContentLoaded', function() {
- // Add click event listeners to navigation buttons
- navButtons.forEach(button => {
- button.addEventListener('click', function(e) {
- const section = this.getAttribute('data-section');
- if (section) {
- e.preventDefault();
- showContentSection(section);
- }
- // If no data-section, it's a regular link and will navigate normally
- });
+document.addEventListener('DOMContentLoaded', function () {
+ // Add click event listeners to navigation buttons
+ navButtons.forEach((button) => {
+ button.addEventListener('click', function (e) {
+ const section = this.getAttribute('data-section');
+ if (section) {
+ e.preventDefault();
+ showContentSection(section);
+ }
+ // If no data-section, it's a regular link and will navigate normally
});
+ });
- // Add click event listeners to close buttons
- closeButtons.forEach(button => {
- button.addEventListener('click', function(e) {
- e.preventDefault();
- hideAllContentSections();
- });
+ // Add click event listeners to close buttons
+ closeButtons.forEach((button) => {
+ button.addEventListener('click', function (e) {
+ e.preventDefault();
+ hideAllContentSections();
});
+ });
- // Add click event listeners to close content sections when clicking outside
- contentSections.forEach(section => {
- section.addEventListener('click', function(e) {
- if (e.target === this) {
- hideAllContentSections();
- }
- });
+ // Add click event listeners to close content sections when clicking outside
+ contentSections.forEach((section) => {
+ section.addEventListener('click', function (e) {
+ if (e.target === this) {
+ hideAllContentSections();
+ }
});
+ });
- // Add keyboard support (ESC to close)
- document.addEventListener('keydown', function(e) {
- if (e.key === 'Escape') {
- hideAllContentSections();
- }
- });
+ // Add keyboard support (ESC to close)
+ document.addEventListener('keydown', function (e) {
+ if (e.key === 'Escape') {
+ hideAllContentSections();
+ }
+ });
- // Add smooth animations on page load
- animateOnLoad();
-
- // Add skill tag animations
- animateSkillTags();
-
- // Add project card stagger animations
- animateProjectCards();
-
- // Add interactive elements
- addInteractiveElements();
-
- // Add particle effect
- createParticleEffect();
-
- // Add mouse trail effect
- addMouseTrail();
-
- // Add easter eggs
- addEasterEggs();
-
- // Add sound effects
- addSoundEffects();
-
- // Add matrix rain effect
- addMatrixRain();
-
- // Add custom cursor
- addCustomCursor();
-
- // Add typing animation for tagline
- addTypingAnimation();
-
- // Add interactive background
- addInteractiveBackground();
-
- // Add more micro-interactions
- addMicroInteractions();
-
- // Add text effects
- addTextEffects();
-
- // Add button morphing
- addButtonMorphing();
-
- // Add scroll effects
- addScrollEffects();
-
- // Add keyboard interactions
- addKeyboardInteractions();
-
- // Start automatic glitch mode: initial after 0.1s, then 1s every 20s
- startAutoGlitch();
+ // Add smooth animations on page load
+ animateOnLoad();
+
+ // Add skill tag animations
+ animateSkillTags();
+
+ // Add project card stagger animations
+ animateProjectCards();
+
+ // Add interactive elements
+ addInteractiveElements();
+
+ // Add particle effect
+ createParticleEffect();
+
+ // Add mouse trail effect
+ addMouseTrail();
+
+ // Add easter eggs
+ addEasterEggs();
+
+ // Add sound effects
+ addSoundEffects();
+
+ // Add matrix rain effect
+ addMatrixRain();
+
+ // Add custom cursor
+ addCustomCursor();
+
+ // Add typing animation for tagline
+ addTypingAnimation();
+
+ // Add interactive background
+ addInteractiveBackground();
+
+ // Add more micro-interactions
+ addMicroInteractions();
+
+ // Add text effects
+ addTextEffects();
+
+ // Add button morphing
+ addButtonMorphing();
+
+ // Add scroll effects
+ addScrollEffects();
+
+ // Add keyboard interactions
+ addKeyboardInteractions();
+
+ // Start automatic glitch mode: initial after 0.1s, then 1s every 20s
+ startAutoGlitch();
});
// Show specific content section
function showContentSection(sectionName) {
- // Hide all content sections first
- hideAllContentSections();
-
- // Show the requested section
- const targetSection = document.getElementById(`${sectionName}-content`);
- if (targetSection) {
- targetSection.classList.add('active');
-
- // Add entrance animation
- setTimeout(() => {
- targetSection.style.opacity = '1';
- }, 10);
- }
+ // Hide all content sections first
+ hideAllContentSections();
+
+ // Show the requested section
+ const targetSection = document.getElementById(`${sectionName}-content`);
+ if (targetSection) {
+ targetSection.classList.add('active');
+
+ // Add entrance animation
+ setTimeout(() => {
+ targetSection.style.opacity = '1';
+ }, 10);
+ }
}
// Hide all content sections
function hideAllContentSections() {
- contentSections.forEach(section => {
- section.classList.remove('active');
- section.style.opacity = '0';
- });
+ contentSections.forEach((section) => {
+ section.classList.remove('active');
+ section.style.opacity = '0';
+ });
}
// Animate elements on page load
function animateOnLoad() {
- const avatar = document.querySelector('.avatar');
- const brandName = document.querySelector('.brand-name');
- const navButtons = document.querySelectorAll('.nav-button');
- const disclaimer = document.querySelector('.disclaimer');
+ const avatar = document.querySelector('.avatar');
+ const brandName = document.querySelector('.brand-name');
+ const navButtons = document.querySelectorAll('.nav-button');
+ const disclaimer = document.querySelector('.disclaimer');
- // Set initial states
- avatar.style.opacity = '0';
- avatar.style.transform = 'translateY(30px)';
- brandName.style.opacity = '0';
- brandName.style.transform = 'translateY(30px)';
- navButtons.forEach((button, index) => {
- button.style.opacity = '0';
- button.style.transform = 'translateX(30px)';
- button.style.transitionDelay = `${index * 0.1}s`;
+ // Set initial states
+ avatar.style.opacity = '0';
+ avatar.style.transform = 'translateY(30px)';
+ brandName.style.opacity = '0';
+ brandName.style.transform = 'translateY(30px)';
+ navButtons.forEach((button, index) => {
+ button.style.opacity = '0';
+ button.style.transform = 'translateX(30px)';
+ button.style.transitionDelay = `${index * 0.1}s`;
+ });
+ disclaimer.style.opacity = '0';
+
+ // Animate in sequence
+ setTimeout(() => {
+ avatar.style.transition = 'all 0.8s ease';
+ avatar.style.opacity = '1';
+ avatar.style.transform = 'translateY(0)';
+ }, 200);
+
+ setTimeout(() => {
+ brandName.style.transition = 'all 0.8s ease';
+ brandName.style.opacity = '1';
+ brandName.style.transform = 'translateY(0)';
+ }, 400);
+
+ setTimeout(() => {
+ navButtons.forEach((button) => {
+ button.style.transition = 'all 0.6s ease';
+ button.style.opacity = '1';
+ button.style.transform = 'translateX(0)';
});
- disclaimer.style.opacity = '0';
+ }, 600);
- // Animate in sequence
- setTimeout(() => {
- avatar.style.transition = 'all 0.8s ease';
- avatar.style.opacity = '1';
- avatar.style.transform = 'translateY(0)';
- }, 200);
-
- setTimeout(() => {
- brandName.style.transition = 'all 0.8s ease';
- brandName.style.opacity = '1';
- brandName.style.transform = 'translateY(0)';
- }, 400);
-
- setTimeout(() => {
- navButtons.forEach(button => {
- button.style.transition = 'all 0.6s ease';
- button.style.opacity = '1';
- button.style.transform = 'translateX(0)';
- });
- }, 600);
-
- setTimeout(() => {
- disclaimer.style.transition = 'all 0.8s ease';
- disclaimer.style.opacity = '1';
- }, 800);
+ setTimeout(() => {
+ disclaimer.style.transition = 'all 0.8s ease';
+ disclaimer.style.opacity = '1';
+ }, 800);
}
// Add hover effects for interactive elements
-document.addEventListener('DOMContentLoaded', function() {
- // Enhanced button hover effects
- const buttons = document.querySelectorAll('.nav-button, .github-button, .contact-link');
-
- buttons.forEach(button => {
- button.addEventListener('mouseenter', function() {
- this.style.transform = 'translateY(-2px) scale(1.02)';
- });
-
- button.addEventListener('mouseleave', function() {
- this.style.transform = 'translateY(0) scale(1)';
- });
+document.addEventListener('DOMContentLoaded', function () {
+ // Enhanced button hover effects
+ const buttons = document.querySelectorAll('.nav-button, .github-button, .contact-link');
+
+ buttons.forEach((button) => {
+ button.addEventListener('mouseenter', function () {
+ this.style.transform = 'translateY(-2px) scale(1.02)';
});
- // Avatar hover effect
- const avatar = document.querySelector('.avatar');
- if (avatar) {
- avatar.addEventListener('mouseenter', function() {
- this.style.transform = 'scale(1.05) rotate(2deg)';
- this.style.boxShadow = '0 12px 40px rgba(220, 38, 38, 0.3)';
- });
-
- avatar.addEventListener('mouseleave', function() {
- this.style.transform = 'scale(1) rotate(0deg)';
- this.style.boxShadow = '0 8px 32px rgba(0, 0, 0, 0.3)';
- });
- }
+ button.addEventListener('mouseleave', function () {
+ this.style.transform = 'translateY(0) scale(1)';
+ });
+ });
+
+ // Avatar hover effect
+ const avatar = document.querySelector('.avatar');
+ if (avatar) {
+ avatar.addEventListener('mouseenter', function () {
+ this.style.transform = 'scale(1.05) rotate(2deg)';
+ this.style.boxShadow = '0 12px 40px rgba(220, 38, 38, 0.3)';
+ });
+
+ avatar.addEventListener('mouseleave', function () {
+ this.style.transform = 'scale(1) rotate(0deg)';
+ this.style.boxShadow = '0 8px 32px rgba(0, 0, 0, 0.3)';
+ });
+ }
});
// Add smooth scrolling for any internal links
-document.addEventListener('DOMContentLoaded', function() {
- const links = document.querySelectorAll('a[href^="#"]');
-
- links.forEach(link => {
- link.addEventListener('click', function(e) {
- e.preventDefault();
- const targetId = this.getAttribute('href').substring(1);
- const targetElement = document.getElementById(targetId);
-
- if (targetElement) {
- targetElement.scrollIntoView({
- behavior: 'smooth',
- block: 'start'
- });
- }
+document.addEventListener('DOMContentLoaded', function () {
+ const links = document.querySelectorAll('a[href^="#"]');
+
+ links.forEach((link) => {
+ link.addEventListener('click', function (e) {
+ e.preventDefault();
+ const targetId = this.getAttribute('href').substring(1);
+ const targetElement = document.getElementById(targetId);
+
+ if (targetElement) {
+ targetElement.scrollIntoView({
+ behavior: 'smooth',
+ block: 'start',
});
+ }
});
+ });
});
// Add loading animation for external links
-document.addEventListener('DOMContentLoaded', function() {
- const externalLinks = document.querySelectorAll('a[target="_blank"]');
-
- externalLinks.forEach(link => {
- link.addEventListener('click', function() {
- // Add a subtle loading effect
- this.style.opacity = '0.7';
- this.style.transform = 'scale(0.98)';
-
- setTimeout(() => {
- this.style.opacity = '1';
- this.style.transform = 'scale(1)';
- }, 200);
- });
+document.addEventListener('DOMContentLoaded', function () {
+ const externalLinks = document.querySelectorAll('a[target="_blank"]');
+
+ externalLinks.forEach((link) => {
+ link.addEventListener('click', function () {
+ // Add a subtle loading effect
+ this.style.opacity = '0.7';
+ this.style.transform = 'scale(0.98)';
+
+ setTimeout(() => {
+ this.style.opacity = '1';
+ this.style.transform = 'scale(1)';
+ }, 200);
});
+ });
});
// Add parallax effect to the grid background
-document.addEventListener('DOMContentLoaded', function() {
- const gridBackground = document.querySelector('body::before');
-
- window.addEventListener('mousemove', function(e) {
- const mouseX = e.clientX / window.innerWidth;
- const mouseY = e.clientY / window.innerHeight;
-
- // Subtle parallax effect
- document.body.style.setProperty('--mouse-x', mouseX);
- document.body.style.setProperty('--mouse-y', mouseY);
- });
+document.addEventListener('DOMContentLoaded', function () {
+ const gridBackground = document.querySelector('body::before');
+
+ window.addEventListener('mousemove', function (e) {
+ const mouseX = e.clientX / window.innerWidth;
+ const mouseY = e.clientY / window.innerHeight;
+
+ // Subtle parallax effect
+ document.body.style.setProperty('--mouse-x', mouseX);
+ document.body.style.setProperty('--mouse-y', mouseY);
+ });
});
// Add typing effect for the brand name (optional enhancement)
function typeWriter(element, text, speed = 100) {
- let i = 0;
- element.innerHTML = '';
-
- function type() {
- if (i < text.length) {
- element.innerHTML += text.charAt(i);
- i++;
- setTimeout(type, speed);
- }
+ let i = 0;
+ element.innerHTML = '';
+
+ function type() {
+ if (i < text.length) {
+ element.innerHTML += text.charAt(i);
+ i++;
+ setTimeout(type, speed);
}
-
- type();
+ }
+
+ type();
}
// Animate skill tags with stagger effect
function animateSkillTags() {
- const skillTags = document.querySelectorAll('.skill-tag');
-
- skillTags.forEach((tag, index) => {
- tag.style.opacity = '0';
- tag.style.transform = 'translateY(20px)';
-
- setTimeout(() => {
- tag.style.transition = 'all 0.5s ease';
- tag.style.opacity = '1';
- tag.style.transform = 'translateY(0)';
- }, index * 100);
- });
+ const skillTags = document.querySelectorAll('.skill-tag');
+
+ skillTags.forEach((tag, index) => {
+ tag.style.opacity = '0';
+ tag.style.transform = 'translateY(20px)';
+
+ setTimeout(() => {
+ tag.style.transition = 'all 0.5s ease';
+ tag.style.opacity = '1';
+ tag.style.transform = 'translateY(0)';
+ }, index * 100);
+ });
}
// Animate project cards with stagger effect
function animateProjectCards() {
- const projectCards = document.querySelectorAll('.project-card');
-
- projectCards.forEach((card, index) => {
- card.style.opacity = '0';
- card.style.transform = 'translateY(30px)';
-
- setTimeout(() => {
- card.style.transition = 'all 0.6s ease';
- card.style.opacity = '1';
- card.style.transform = 'translateY(0)';
- }, index * 150);
- });
+ const projectCards = document.querySelectorAll('.project-card');
+
+ projectCards.forEach((card, index) => {
+ card.style.opacity = '0';
+ card.style.transform = 'translateY(30px)';
+
+ setTimeout(() => {
+ card.style.transition = 'all 0.6s ease';
+ card.style.opacity = '1';
+ card.style.transform = 'translateY(0)';
+ }, index * 150);
+ });
}
// Add intersection observer for scroll animations
function addScrollAnimations() {
- const observerOptions = {
- threshold: 0.1,
- rootMargin: '0px 0px -50px 0px'
- };
+ const observerOptions = {
+ threshold: 0.1,
+ rootMargin: '0px 0px -50px 0px',
+ };
- const observer = new IntersectionObserver((entries) => {
- entries.forEach(entry => {
- if (entry.isIntersecting) {
- entry.target.classList.add('animate-in');
- }
- });
- }, observerOptions);
+ const observer = new IntersectionObserver((entries) => {
+ entries.forEach((entry) => {
+ if (entry.isIntersecting) {
+ entry.target.classList.add('animate-in');
+ }
+ });
+ }, observerOptions);
- // Observe all elements that should animate on scroll
- const animateElements = document.querySelectorAll('.skill-category, .project-card, .about-section');
- animateElements.forEach(el => observer.observe(el));
+ // Observe all elements that should animate on scroll
+ const animateElements = document.querySelectorAll(
+ '.skill-category, .project-card, .about-section'
+ );
+ animateElements.forEach((el) => observer.observe(el));
}
// Enhanced hover effects for project cards
function addProjectCardEffects() {
- const projectCards = document.querySelectorAll('.project-card');
-
- projectCards.forEach(card => {
- card.addEventListener('mouseenter', function() {
- this.style.transform = 'translateY(-8px) scale(1.02)';
- this.style.boxShadow = '0 15px 40px rgba(0, 0, 0, 0.4)';
- });
-
- card.addEventListener('mouseleave', function() {
- this.style.transform = 'translateY(0) scale(1)';
- this.style.boxShadow = '0 10px 30px rgba(0, 0, 0, 0.3)';
- });
+ const projectCards = document.querySelectorAll('.project-card');
+
+ projectCards.forEach((card) => {
+ card.addEventListener('mouseenter', function () {
+ this.style.transform = 'translateY(-8px) scale(1.02)';
+ this.style.boxShadow = '0 15px 40px rgba(0, 0, 0, 0.4)';
});
+
+ card.addEventListener('mouseleave', function () {
+ this.style.transform = 'translateY(0) scale(1)';
+ this.style.boxShadow = '0 10px 30px rgba(0, 0, 0, 0.3)';
+ });
+ });
}
// Add typing effect for the tagline
function addTypingEffect() {
- const tagline = document.querySelector('.tagline');
- if (tagline) {
- const originalText = tagline.textContent;
- tagline.textContent = '';
-
- setTimeout(() => {
- typeWriter(tagline, originalText, 80);
- }, 1500);
- }
+ const tagline = document.querySelector('.tagline');
+ if (tagline) {
+ const originalText = tagline.textContent;
+ tagline.textContent = '';
+
+ setTimeout(() => {
+ typeWriter(tagline, originalText, 80);
+ }, 1500);
+ }
}
// Initialize additional features
-document.addEventListener('DOMContentLoaded', function() {
- addScrollAnimations();
- addProjectCardEffects();
- addTypingEffect();
+document.addEventListener('DOMContentLoaded', function () {
+ addScrollAnimations();
+ addProjectCardEffects();
+ addTypingEffect();
});
// Add interactive elements
function addInteractiveElements() {
- // Add click effect to brand name
- const brandName = document.querySelector('.brand-name');
- if (brandName) {
- brandName.addEventListener('click', function() {
- this.style.animation = 'none';
- setTimeout(() => {
- this.style.animation = 'gradientText 3s ease infinite';
- }, 10);
- });
- }
+ // Add click effect to brand name
+ const brandName = document.querySelector('.brand-name');
+ if (brandName) {
+ brandName.addEventListener('click', function () {
+ this.style.animation = 'none';
+ setTimeout(() => {
+ this.style.animation = 'gradientText 3s ease infinite';
+ }, 10);
+ });
+ }
- // Add ripple effect to buttons
- const buttons = document.querySelectorAll('.nav-button, .contact-link, .project-link');
- buttons.forEach(button => {
- button.addEventListener('click', function(e) {
- const ripple = document.createElement('span');
- const rect = this.getBoundingClientRect();
- const size = Math.max(rect.width, rect.height);
- const x = e.clientX - rect.left - size / 2;
- const y = e.clientY - rect.top - size / 2;
-
- ripple.style.width = ripple.style.height = size + 'px';
- ripple.style.left = x + 'px';
- ripple.style.top = y + 'px';
- ripple.classList.add('ripple');
-
- this.appendChild(ripple);
-
- setTimeout(() => {
- ripple.remove();
- }, 600);
- });
+ // Add ripple effect to buttons
+ const buttons = document.querySelectorAll('.nav-button, .contact-link, .project-link');
+ buttons.forEach((button) => {
+ button.addEventListener('click', function (e) {
+ const ripple = document.createElement('span');
+ const rect = this.getBoundingClientRect();
+ const size = Math.max(rect.width, rect.height);
+ const x = e.clientX - rect.left - size / 2;
+ const y = e.clientY - rect.top - size / 2;
+
+ ripple.style.width = ripple.style.height = size + 'px';
+ ripple.style.left = x + 'px';
+ ripple.style.top = y + 'px';
+ ripple.classList.add('ripple');
+
+ this.appendChild(ripple);
+
+ setTimeout(() => {
+ ripple.remove();
+ }, 600);
+ });
+ });
+
+ // Add floating animation to skill tags
+ const skillTags = document.querySelectorAll('.skill-tag');
+ skillTags.forEach((tag, index) => {
+ tag.addEventListener('mouseenter', function () {
+ this.style.animation = `float 2s ease-in-out infinite`;
});
- // Add floating animation to skill tags
- const skillTags = document.querySelectorAll('.skill-tag');
- skillTags.forEach((tag, index) => {
- tag.addEventListener('mouseenter', function() {
- this.style.animation = `float 2s ease-in-out infinite`;
- });
-
- tag.addEventListener('mouseleave', function() {
- this.style.animation = 'none';
- });
+ tag.addEventListener('mouseleave', function () {
+ this.style.animation = 'none';
});
+ });
}
// Create particle effect
function createParticleEffect() {
- const particleContainer = document.createElement('div');
- particleContainer.style.position = 'fixed';
- particleContainer.style.top = '0';
- particleContainer.style.left = '0';
- particleContainer.style.width = '100%';
- particleContainer.style.height = '100%';
- particleContainer.style.pointerEvents = 'none';
- particleContainer.style.zIndex = '-1';
- document.body.appendChild(particleContainer);
+ const particleContainer = document.createElement('div');
+ particleContainer.style.position = 'fixed';
+ particleContainer.style.top = '0';
+ particleContainer.style.left = '0';
+ particleContainer.style.width = '100%';
+ particleContainer.style.height = '100%';
+ particleContainer.style.pointerEvents = 'none';
+ particleContainer.style.zIndex = '-1';
+ document.body.appendChild(particleContainer);
- function createParticle() {
- const particle = document.createElement('div');
- particle.style.position = 'absolute';
- particle.style.width = '2px';
- particle.style.height = '2px';
- particle.style.background = '#007acc';
- particle.style.borderRadius = '50%';
- particle.style.opacity = '0.6';
- particle.style.left = Math.random() * 100 + '%';
- particle.style.top = '100%';
- particle.style.animation = `floatUp ${3 + Math.random() * 4}s linear forwards`;
-
- particleContainer.appendChild(particle);
-
- setTimeout(() => {
- particle.remove();
- }, 7000);
- }
+ function createParticle() {
+ const particle = document.createElement('div');
+ particle.style.position = 'absolute';
+ particle.style.width = '2px';
+ particle.style.height = '2px';
+ particle.style.background = '#007acc';
+ particle.style.borderRadius = '50%';
+ particle.style.opacity = '0.6';
+ particle.style.left = Math.random() * 100 + '%';
+ particle.style.top = '100%';
+ particle.style.animation = `floatUp ${3 + Math.random() * 4}s linear forwards`;
- // Add CSS for particle animation
- const style = document.createElement('style');
- style.textContent = `
+ particleContainer.appendChild(particle);
+
+ setTimeout(() => {
+ particle.remove();
+ }, 7000);
+ }
+
+ // Add CSS for particle animation
+ const style = document.createElement('style');
+ style.textContent = `
@keyframes floatUp {
to {
transform: translateY(-100vh);
@@ -462,157 +464,159 @@ function createParticleEffect() {
}
}
`;
- document.head.appendChild(style);
+ document.head.appendChild(style);
- // Create particles periodically
- setInterval(createParticle, 2000);
+ // Create particles periodically
+ setInterval(createParticle, 2000);
}
// Add mouse trail effect with falling particles
function addMouseTrail() {
- // Particle class for managing individual particles
- class Particle {
- constructor(x, y) {
- this.x = x;
- this.y = y;
- this.size = Math.random() * 3 + 1; // Random size between 1-4
- this.speedY = Math.random() * 1 + 0.5; // Random fall speed
- this.speedX = (Math.random() - 0.5) * 0.5; // Slight horizontal movement
- this.opacity = 1;
- }
-
- update() {
- this.y += this.speedY;
- this.x += this.speedX;
- this.opacity -= 0.01;
- }
-
- draw(ctx) {
- ctx.fillStyle = `rgba(0, 122, 204, ${this.opacity})`; // Blue color (#007acc)
- ctx.beginPath();
- ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);
- ctx.fill();
- }
+ // Particle class for managing individual particles
+ class Particle {
+ constructor(x, y) {
+ this.x = x;
+ this.y = y;
+ this.size = Math.random() * 3 + 1; // Random size between 1-4
+ this.speedY = Math.random() * 1 + 0.5; // Random fall speed
+ this.speedX = (Math.random() - 0.5) * 0.5; // Slight horizontal movement
+ this.opacity = 1;
}
- const canvas = document.createElement('canvas');
- const ctx = canvas.getContext('2d');
- document.body.appendChild(canvas);
-
- canvas.style.position = 'fixed';
- canvas.style.top = '0';
- canvas.style.left = '0';
- canvas.style.pointerEvents = 'none';
- canvas.style.zIndex = '1000';
-
- function resizeCanvas() {
- canvas.width = window.innerWidth;
- canvas.height = window.innerHeight;
+ update() {
+ this.y += this.speedY;
+ this.x += this.speedX;
+ this.opacity -= 0.01;
}
- window.addEventListener('resize', resizeCanvas);
- resizeCanvas();
+ draw(ctx) {
+ ctx.fillStyle = `rgba(0, 122, 204, ${this.opacity})`; // Blue color (#007acc)
+ ctx.beginPath();
+ ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);
+ ctx.fill();
+ }
+ }
- let particles = [];
- let mouseX = 0;
- let mouseY = 0;
+ const canvas = document.createElement('canvas');
+ const ctx = canvas.getContext('2d');
+ document.body.appendChild(canvas);
- // Track mouse position
- document.addEventListener('mousemove', (e) => {
- mouseX = e.clientX;
- mouseY = e.clientY;
-
- // Create new particles at mouse position
- if (Math.random() > 0.5) { // Reduce particle creation rate
- particles.push(new Particle(mouseX, mouseY));
- }
+ canvas.style.position = 'fixed';
+ canvas.style.top = '0';
+ canvas.style.left = '0';
+ canvas.style.pointerEvents = 'none';
+ canvas.style.zIndex = '1000';
+
+ function resizeCanvas() {
+ canvas.width = window.innerWidth;
+ canvas.height = window.innerHeight;
+ }
+
+ window.addEventListener('resize', resizeCanvas);
+ resizeCanvas();
+
+ let particles = [];
+ let mouseX = 0;
+ let mouseY = 0;
+
+ // Track mouse position
+ document.addEventListener('mousemove', (e) => {
+ mouseX = e.clientX;
+ mouseY = e.clientY;
+
+ // Create new particles at mouse position
+ if (Math.random() > 0.5) {
+ // Reduce particle creation rate
+ particles.push(new Particle(mouseX, mouseY));
+ }
+ });
+
+ function animate() {
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+
+ // Update and draw particles
+ particles = particles.filter((particle) => {
+ particle.update();
+ particle.draw(ctx);
+ return (
+ particle.opacity > 0 &&
+ particle.y < canvas.height &&
+ particle.x > 0 &&
+ particle.x < canvas.width
+ );
});
- function animate() {
- ctx.clearRect(0, 0, canvas.width, canvas.height);
-
- // Update and draw particles
- particles = particles.filter(particle => {
- particle.update();
- particle.draw(ctx);
- return particle.opacity > 0 &&
- particle.y < canvas.height &&
- particle.x > 0 &&
- particle.x < canvas.width;
- });
+ requestAnimationFrame(animate);
+ }
- requestAnimationFrame(animate);
- }
-
- animate();
+ animate();
}
-
// Easter Eggs
function addEasterEggs() {
- let clickCount = 0;
- const avatar = document.querySelector('.avatar');
- const brandName = document.querySelector('.brand-name');
-
- // Konami Code
- const konamiCode = [38, 38, 40, 40, 37, 39, 37, 39, 66, 65];
- let konamiIndex = 0;
-
- document.addEventListener('keydown', function(e) {
- if (e.keyCode === konamiCode[konamiIndex]) {
- konamiIndex++;
- if (konamiIndex === konamiCode.length) {
- activateKonamiCode();
- konamiIndex = 0;
- }
- } else {
- konamiIndex = 0;
- }
- });
-
- // Avatar click counter
- avatar.addEventListener('click', function() {
- clickCount++;
- if (clickCount === 5) {
- activateAvatarEasterEgg();
- clickCount = 0;
- }
- });
-
- // Brand name secret
- brandName.addEventListener('dblclick', function() {
- activateBrandEasterEgg();
- });
+ let clickCount = 0;
+ const avatar = document.querySelector('.avatar');
+ const brandName = document.querySelector('.brand-name');
+
+ // Konami Code
+ const konamiCode = [38, 38, 40, 40, 37, 39, 37, 39, 66, 65];
+ let konamiIndex = 0;
+
+ document.addEventListener('keydown', function (e) {
+ if (e.keyCode === konamiCode[konamiIndex]) {
+ konamiIndex++;
+ if (konamiIndex === konamiCode.length) {
+ activateKonamiCode();
+ konamiIndex = 0;
+ }
+ } else {
+ konamiIndex = 0;
+ }
+ });
+
+ // Avatar click counter
+ avatar.addEventListener('click', function () {
+ clickCount++;
+ if (clickCount === 5) {
+ activateAvatarEasterEgg();
+ clickCount = 0;
+ }
+ });
+
+ // Brand name secret
+ brandName.addEventListener('dblclick', function () {
+ activateBrandEasterEgg();
+ });
}
function activateKonamiCode() {
- const body = document.body;
- body.style.animation = 'rainbow 2s ease infinite';
-
- // Add rainbow animation
- const style = document.createElement('style');
- style.textContent = `
+ const body = document.body;
+ body.style.animation = 'rainbow 2s ease infinite';
+
+ // Add rainbow animation
+ const style = document.createElement('style');
+ style.textContent = `
@keyframes rainbow {
0% { filter: hue-rotate(0deg); }
100% { filter: hue-rotate(360deg); }
}
`;
- document.head.appendChild(style);
-
- setTimeout(() => {
- body.style.animation = '';
- style.remove();
- }, 5000);
-
- showNotification('๐ Konami Code Activated! You found the secret!');
+ document.head.appendChild(style);
+
+ setTimeout(() => {
+ body.style.animation = '';
+ style.remove();
+ }, 5000);
+
+ showNotification('๐ Konami Code Activated! You found the secret!');
}
function activateAvatarEasterEgg() {
- const avatar = document.querySelector('.avatar');
- avatar.style.animation = 'spin 1s linear infinite, bounce 0.5s ease infinite';
-
- const style = document.createElement('style');
- style.textContent = `
+ const avatar = document.querySelector('.avatar');
+ avatar.style.animation = 'spin 1s linear infinite, bounce 0.5s ease infinite';
+
+ const style = document.createElement('style');
+ style.textContent = `
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
@@ -622,424 +626,427 @@ function activateAvatarEasterEgg() {
50% { transform: translateY(-20px); }
}
`;
- document.head.appendChild(style);
-
- setTimeout(() => {
- avatar.style.animation = '';
- style.remove();
- }, 3000);
-
- showNotification('๐ Avatar Spin Mode Activated!');
+ document.head.appendChild(style);
+
+ setTimeout(() => {
+ avatar.style.animation = '';
+ style.remove();
+ }, 3000);
+
+ showNotification('๐ Avatar Spin Mode Activated!');
}
function activateBrandEasterEgg() {
- const brandName = document.querySelector('.brand-name');
- const originalText = brandName.textContent;
-
- const glitchTexts = ['Z4n3D3v', 'Z@n3D3v', 'ZaneDev', 'ZANE_DEV', 'zanedev'];
- let glitchIndex = 0;
-
- const glitchInterval = setInterval(() => {
- brandName.textContent = glitchTexts[glitchIndex];
- glitchIndex = (glitchIndex + 1) % glitchTexts.length;
- }, 100);
-
- setTimeout(() => {
- clearInterval(glitchInterval);
- brandName.textContent = originalText;
- }, 2000);
-
- showNotification('โก Glitch Mode Activated!');
+ const brandName = document.querySelector('.brand-name');
+ const originalText = brandName.textContent;
+
+ const glitchTexts = ['Z4n3D3v', 'Z@n3D3v', 'ZaneDev', 'ZANE_DEV', 'zanedev'];
+ let glitchIndex = 0;
+
+ const glitchInterval = setInterval(() => {
+ brandName.textContent = glitchTexts[glitchIndex];
+ glitchIndex = (glitchIndex + 1) % glitchTexts.length;
+ }, 100);
+
+ setTimeout(() => {
+ clearInterval(glitchInterval);
+ brandName.textContent = originalText;
+ }, 2000);
+
+ showNotification('โก Glitch Mode Activated!');
}
// Auto Glitch Mode
function triggerGlitch(durationMs = 1000) {
- const brandName = document.querySelector('.brand-name');
- if (!brandName) return;
- const originalText = brandName.textContent;
- const glitchTexts = ['Z4n3D3v', 'Z@n3D3v', 'ZaneDev', 'ZANE_DEV', 'zanedev'];
- let glitchIndex = 0;
- const glitchInterval = setInterval(() => {
- brandName.textContent = glitchTexts[glitchIndex];
- glitchIndex = (glitchIndex + 1) % glitchTexts.length;
- }, 100);
- setTimeout(() => {
- clearInterval(glitchInterval);
- brandName.textContent = originalText;
- }, durationMs);
+ const brandName = document.querySelector('.brand-name');
+ if (!brandName) return;
+ const originalText = brandName.textContent;
+ const glitchTexts = ['Z4n3D3v', 'Z@n3D3v', 'ZaneDev', 'ZANE_DEV', 'zanedev'];
+ let glitchIndex = 0;
+ const glitchInterval = setInterval(() => {
+ brandName.textContent = glitchTexts[glitchIndex];
+ glitchIndex = (glitchIndex + 1) % glitchTexts.length;
+ }, 100);
+ setTimeout(() => {
+ clearInterval(glitchInterval);
+ brandName.textContent = originalText;
+ }, durationMs);
}
function startAutoGlitch() {
- // Initial trigger after 0.1s
- setTimeout(() => triggerGlitch(1000), 100);
- // Repeat every 20s
- setInterval(() => triggerGlitch(1000), 20000);
+ // Initial trigger after 0.1s
+ setTimeout(() => triggerGlitch(1000), 100);
+ // Repeat every 20s
+ setInterval(() => triggerGlitch(1000), 20000);
}
// Sound Effects
function addSoundEffects() {
- const buttons = document.querySelectorAll('.nav-button');
-
- buttons.forEach(button => {
- button.addEventListener('click', function() {
- playSound('click');
- });
-
- button.addEventListener('mouseenter', function() {
- playSound('hover');
- });
+ const buttons = document.querySelectorAll('.nav-button');
+
+ buttons.forEach((button) => {
+ button.addEventListener('click', function () {
+ playSound('click');
});
+
+ button.addEventListener('mouseenter', function () {
+ playSound('hover');
+ });
+ });
}
function playSound(type) {
- // Create audio context for sound effects
- const audioContext = new (window.AudioContext || window.webkitAudioContext)();
-
- if (type === 'click') {
- // Click sound
- const oscillator = audioContext.createOscillator();
- const gainNode = audioContext.createGain();
-
- oscillator.connect(gainNode);
- gainNode.connect(audioContext.destination);
-
- oscillator.frequency.setValueAtTime(800, audioContext.currentTime);
- oscillator.frequency.exponentialRampToValueAtTime(400, audioContext.currentTime + 0.1);
-
- gainNode.gain.setValueAtTime(0.1, audioContext.currentTime);
- gainNode.gain.exponentialRampToValueAtTime(0.01, audioContext.currentTime + 0.1);
-
- oscillator.start(audioContext.currentTime);
- oscillator.stop(audioContext.currentTime + 0.1);
- } else if (type === 'hover') {
- // Hover sound
- const oscillator = audioContext.createOscillator();
- const gainNode = audioContext.createGain();
-
- oscillator.connect(gainNode);
- gainNode.connect(audioContext.destination);
-
- oscillator.frequency.setValueAtTime(600, audioContext.currentTime);
- oscillator.frequency.exponentialRampToValueAtTime(800, audioContext.currentTime + 0.05);
-
- gainNode.gain.setValueAtTime(0.05, audioContext.currentTime);
- gainNode.gain.exponentialRampToValueAtTime(0.01, audioContext.currentTime + 0.05);
-
- oscillator.start(audioContext.currentTime);
- oscillator.stop(audioContext.currentTime + 0.05);
- }
+ // Create audio context for sound effects
+ const audioContext = new (window.AudioContext || window.webkitAudioContext)();
+
+ if (type === 'click') {
+ // Click sound
+ const oscillator = audioContext.createOscillator();
+ const gainNode = audioContext.createGain();
+
+ oscillator.connect(gainNode);
+ gainNode.connect(audioContext.destination);
+
+ oscillator.frequency.setValueAtTime(800, audioContext.currentTime);
+ oscillator.frequency.exponentialRampToValueAtTime(400, audioContext.currentTime + 0.1);
+
+ gainNode.gain.setValueAtTime(0.1, audioContext.currentTime);
+ gainNode.gain.exponentialRampToValueAtTime(0.01, audioContext.currentTime + 0.1);
+
+ oscillator.start(audioContext.currentTime);
+ oscillator.stop(audioContext.currentTime + 0.1);
+ } else if (type === 'hover') {
+ // Hover sound
+ const oscillator = audioContext.createOscillator();
+ const gainNode = audioContext.createGain();
+
+ oscillator.connect(gainNode);
+ gainNode.connect(audioContext.destination);
+
+ oscillator.frequency.setValueAtTime(600, audioContext.currentTime);
+ oscillator.frequency.exponentialRampToValueAtTime(800, audioContext.currentTime + 0.05);
+
+ gainNode.gain.setValueAtTime(0.05, audioContext.currentTime);
+ gainNode.gain.exponentialRampToValueAtTime(0.01, audioContext.currentTime + 0.05);
+
+ oscillator.start(audioContext.currentTime);
+ oscillator.stop(audioContext.currentTime + 0.05);
+ }
}
// Matrix Rain Effect
function addMatrixRain() {
- const canvas = document.createElement('canvas');
- const ctx = canvas.getContext('2d');
-
- canvas.style.position = 'fixed';
- canvas.style.top = '0';
- canvas.style.left = '0';
- canvas.style.width = '100%';
- canvas.style.height = '100%';
- canvas.style.pointerEvents = 'none';
- canvas.style.zIndex = '-1';
- canvas.style.opacity = '0.1';
-
- document.body.appendChild(canvas);
-
+ const canvas = document.createElement('canvas');
+ const ctx = canvas.getContext('2d');
+
+ canvas.style.position = 'fixed';
+ canvas.style.top = '0';
+ canvas.style.left = '0';
+ canvas.style.width = '100%';
+ canvas.style.height = '100%';
+ canvas.style.pointerEvents = 'none';
+ canvas.style.zIndex = '-1';
+ canvas.style.opacity = '0.1';
+
+ document.body.appendChild(canvas);
+
+ canvas.width = window.innerWidth;
+ canvas.height = window.innerHeight;
+
+ const matrix = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789@#$%^&*()*&^%+-/~{[|`]}';
+ const matrixArray = matrix.split('');
+
+ const font_size = 10;
+ const columns = canvas.width / font_size;
+
+ const drops = [];
+ for (let x = 0; x < columns; x++) {
+ drops[x] = 1;
+ }
+
+ function drawMatrix() {
+ ctx.fillStyle = 'rgba(0, 0, 0, 0.04)';
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
+
+ ctx.fillStyle = '#007acc';
+ ctx.font = font_size + 'px arial';
+
+ for (let i = 0; i < drops.length; i++) {
+ const text = matrixArray[Math.floor(Math.random() * matrixArray.length)];
+ ctx.fillText(text, i * font_size, drops[i] * font_size);
+
+ if (drops[i] * font_size > canvas.height && Math.random() > 0.975) {
+ drops[i] = 0;
+ }
+ drops[i]++;
+ }
+ }
+
+ setInterval(drawMatrix, 35);
+
+ // Resize handler
+ window.addEventListener('resize', () => {
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
-
- const matrix = "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789@#$%^&*()*&^%+-/~{[|`]}";
- const matrixArray = matrix.split("");
-
- const font_size = 10;
- const columns = canvas.width / font_size;
-
- const drops = [];
- for (let x = 0; x < columns; x++) {
- drops[x] = 1;
- }
-
- function drawMatrix() {
- ctx.fillStyle = 'rgba(0, 0, 0, 0.04)';
- ctx.fillRect(0, 0, canvas.width, canvas.height);
-
- ctx.fillStyle = '#007acc';
- ctx.font = font_size + 'px arial';
-
- for (let i = 0; i < drops.length; i++) {
- const text = matrixArray[Math.floor(Math.random() * matrixArray.length)];
- ctx.fillText(text, i * font_size, drops[i] * font_size);
-
- if (drops[i] * font_size > canvas.height && Math.random() > 0.975) {
- drops[i] = 0;
- }
- drops[i]++;
- }
- }
-
- setInterval(drawMatrix, 35);
-
- // Resize handler
- window.addEventListener('resize', () => {
- canvas.width = window.innerWidth;
- canvas.height = window.innerHeight;
- });
+ });
}
// Custom Cursor
function addCustomCursor() {
- const cursor = document.createElement('div');
- cursor.className = 'custom-cursor';
- document.body.appendChild(cursor);
-
- const trail = document.createElement('div');
- trail.className = 'custom-cursor-trail';
- document.body.appendChild(trail);
-
- let mouseX = 0, mouseY = 0;
- let trailX = 0, trailY = 0;
-
- document.addEventListener('mousemove', (e) => {
- mouseX = e.clientX;
- mouseY = e.clientY;
-
- cursor.style.left = mouseX - 10 + 'px';
- cursor.style.top = mouseY - 10 + 'px';
+ const cursor = document.createElement('div');
+ cursor.className = 'custom-cursor';
+ document.body.appendChild(cursor);
+
+ const trail = document.createElement('div');
+ trail.className = 'custom-cursor-trail';
+ document.body.appendChild(trail);
+
+ let mouseX = 0,
+ mouseY = 0;
+ let trailX = 0,
+ trailY = 0;
+
+ document.addEventListener('mousemove', (e) => {
+ mouseX = e.clientX;
+ mouseY = e.clientY;
+
+ cursor.style.left = mouseX - 10 + 'px';
+ cursor.style.top = mouseY - 10 + 'px';
+ });
+
+ // Smooth trail following
+ function animateTrail() {
+ trailX += (mouseX - trailX) * 0.1;
+ trailY += (mouseY - trailY) * 0.1;
+
+ trail.style.left = trailX - 4 + 'px';
+ trail.style.top = trailY - 4 + 'px';
+
+ requestAnimationFrame(animateTrail);
+ }
+ animateTrail();
+
+ // Hover effects
+ const interactiveElements = document.querySelectorAll('a, button, .avatar, .brand-name');
+
+ interactiveElements.forEach((el) => {
+ el.addEventListener('mouseenter', () => {
+ cursor.style.transform = 'scale(2)';
+ cursor.style.background =
+ 'radial-gradient(circle, rgba(255, 107, 107, 0.8) 0%, rgba(255, 107, 107, 0.4) 50%, transparent 100%)';
});
-
- // Smooth trail following
- function animateTrail() {
- trailX += (mouseX - trailX) * 0.1;
- trailY += (mouseY - trailY) * 0.1;
-
- trail.style.left = trailX - 4 + 'px';
- trail.style.top = trailY - 4 + 'px';
-
- requestAnimationFrame(animateTrail);
- }
- animateTrail();
-
- // Hover effects
- const interactiveElements = document.querySelectorAll('a, button, .avatar, .brand-name');
-
- interactiveElements.forEach(el => {
- el.addEventListener('mouseenter', () => {
- cursor.style.transform = 'scale(2)';
- cursor.style.background = 'radial-gradient(circle, rgba(255, 107, 107, 0.8) 0%, rgba(255, 107, 107, 0.4) 50%, transparent 100%)';
- });
-
- el.addEventListener('mouseleave', () => {
- cursor.style.transform = 'scale(1)';
- cursor.style.background = 'radial-gradient(circle, rgba(0, 122, 204, 0.8) 0%, rgba(0, 122, 204, 0.4) 50%, transparent 100%)';
- });
+
+ el.addEventListener('mouseleave', () => {
+ cursor.style.transform = 'scale(1)';
+ cursor.style.background =
+ 'radial-gradient(circle, rgba(0, 122, 204, 0.8) 0%, rgba(0, 122, 204, 0.4) 50%, transparent 100%)';
});
+ });
}
// Typing Animation for Tagline
function addTypingAnimation() {
- const tagline = document.querySelector('.tagline');
- if (tagline) {
- const originalText = tagline.textContent;
- tagline.textContent = '';
-
- setTimeout(() => {
- typeWriter(tagline, originalText, 100);
- }, 2000);
- }
+ const tagline = document.querySelector('.tagline');
+ if (tagline) {
+ const originalText = tagline.textContent;
+ tagline.textContent = '';
+
+ setTimeout(() => {
+ typeWriter(tagline, originalText, 100);
+ }, 2000);
+ }
}
// Interactive Background
function addInteractiveBackground() {
- const canvas = document.createElement('canvas');
- canvas.style.position = 'fixed';
- canvas.style.top = '0';
- canvas.style.left = '0';
- canvas.style.width = '100%';
- canvas.style.height = '100%';
- canvas.style.pointerEvents = 'none';
- canvas.style.zIndex = '-2';
- canvas.style.opacity = '0.3';
-
- document.body.appendChild(canvas);
-
- const ctx = canvas.getContext('2d');
+ const canvas = document.createElement('canvas');
+ canvas.style.position = 'fixed';
+ canvas.style.top = '0';
+ canvas.style.left = '0';
+ canvas.style.width = '100%';
+ canvas.style.height = '100%';
+ canvas.style.pointerEvents = 'none';
+ canvas.style.zIndex = '-2';
+ canvas.style.opacity = '0.3';
+
+ document.body.appendChild(canvas);
+
+ const ctx = canvas.getContext('2d');
+ canvas.width = window.innerWidth;
+ canvas.height = window.innerHeight;
+
+ const particles = [];
+ const particleCount = 50;
+
+ class Particle {
+ constructor() {
+ this.x = Math.random() * canvas.width;
+ this.y = Math.random() * canvas.height;
+ this.vx = (Math.random() - 0.5) * 2;
+ this.vy = (Math.random() - 0.5) * 2;
+ this.size = Math.random() * 3 + 1;
+ this.opacity = Math.random() * 0.5 + 0.2;
+ }
+
+ update() {
+ this.x += this.vx;
+ this.y += this.vy;
+
+ if (this.x < 0 || this.x > canvas.width) this.vx *= -1;
+ if (this.y < 0 || this.y > canvas.height) this.vy *= -1;
+ }
+
+ draw() {
+ ctx.beginPath();
+ ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);
+ ctx.fillStyle = `rgba(0, 122, 204, ${this.opacity})`;
+ ctx.fill();
+ }
+ }
+
+ for (let i = 0; i < particleCount; i++) {
+ particles.push(new Particle());
+ }
+
+ function animate() {
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+
+ particles.forEach((particle) => {
+ particle.update();
+ particle.draw();
+ });
+
+ // Draw connections
+ particles.forEach((particle, i) => {
+ particles.slice(i + 1).forEach((otherParticle) => {
+ const dx = particle.x - otherParticle.x;
+ const dy = particle.y - otherParticle.y;
+ const distance = Math.sqrt(dx * dx + dy * dy);
+
+ if (distance < 100) {
+ ctx.beginPath();
+ ctx.moveTo(particle.x, particle.y);
+ ctx.lineTo(otherParticle.x, otherParticle.y);
+ ctx.strokeStyle = `rgba(0, 122, 204, ${0.1 * (1 - distance / 100)})`;
+ ctx.lineWidth = 1;
+ ctx.stroke();
+ }
+ });
+ });
+
+ requestAnimationFrame(animate);
+ }
+
+ animate();
+
+ window.addEventListener('resize', () => {
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
-
- const particles = [];
- const particleCount = 50;
-
- class Particle {
- constructor() {
- this.x = Math.random() * canvas.width;
- this.y = Math.random() * canvas.height;
- this.vx = (Math.random() - 0.5) * 2;
- this.vy = (Math.random() - 0.5) * 2;
- this.size = Math.random() * 3 + 1;
- this.opacity = Math.random() * 0.5 + 0.2;
- }
-
- update() {
- this.x += this.vx;
- this.y += this.vy;
-
- if (this.x < 0 || this.x > canvas.width) this.vx *= -1;
- if (this.y < 0 || this.y > canvas.height) this.vy *= -1;
- }
-
- draw() {
- ctx.beginPath();
- ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);
- ctx.fillStyle = `rgba(0, 122, 204, ${this.opacity})`;
- ctx.fill();
- }
- }
-
- for (let i = 0; i < particleCount; i++) {
- particles.push(new Particle());
- }
-
- function animate() {
- ctx.clearRect(0, 0, canvas.width, canvas.height);
-
- particles.forEach(particle => {
- particle.update();
- particle.draw();
- });
-
- // Draw connections
- particles.forEach((particle, i) => {
- particles.slice(i + 1).forEach(otherParticle => {
- const dx = particle.x - otherParticle.x;
- const dy = particle.y - otherParticle.y;
- const distance = Math.sqrt(dx * dx + dy * dy);
-
- if (distance < 100) {
- ctx.beginPath();
- ctx.moveTo(particle.x, particle.y);
- ctx.lineTo(otherParticle.x, otherParticle.y);
- ctx.strokeStyle = `rgba(0, 122, 204, ${0.1 * (1 - distance / 100)})`;
- ctx.lineWidth = 1;
- ctx.stroke();
- }
- });
- });
-
- requestAnimationFrame(animate);
- }
-
- animate();
-
- window.addEventListener('resize', () => {
- canvas.width = window.innerWidth;
- canvas.height = window.innerHeight;
- });
+ });
}
-
// Notification System
function showNotification(message) {
- const notification = document.createElement('div');
- notification.style.position = 'fixed';
- notification.style.top = '20px';
- notification.style.right = '20px';
- notification.style.background = 'linear-gradient(135deg, #007acc, #00aaff)';
- notification.style.color = 'white';
- notification.style.padding = '1rem 2rem';
- notification.style.borderRadius = '10px';
- notification.style.boxShadow = '0 10px 30px rgba(0, 122, 204, 0.3)';
- notification.style.zIndex = '10000';
+ const notification = document.createElement('div');
+ notification.style.position = 'fixed';
+ notification.style.top = '20px';
+ notification.style.right = '20px';
+ notification.style.background = 'linear-gradient(135deg, #007acc, #00aaff)';
+ notification.style.color = 'white';
+ notification.style.padding = '1rem 2rem';
+ notification.style.borderRadius = '10px';
+ notification.style.boxShadow = '0 10px 30px rgba(0, 122, 204, 0.3)';
+ notification.style.zIndex = '10000';
+ notification.style.transform = 'translateX(100%)';
+ notification.style.transition = 'transform 0.3s ease';
+ notification.textContent = message;
+
+ document.body.appendChild(notification);
+
+ setTimeout(() => {
+ notification.style.transform = 'translateX(0)';
+ }, 100);
+
+ setTimeout(() => {
notification.style.transform = 'translateX(100%)';
- notification.style.transition = 'transform 0.3s ease';
- notification.textContent = message;
-
- document.body.appendChild(notification);
-
setTimeout(() => {
- notification.style.transform = 'translateX(0)';
- }, 100);
-
- setTimeout(() => {
- notification.style.transform = 'translateX(100%)';
- setTimeout(() => {
- notification.remove();
- }, 300);
- }, 3000);
+ notification.remove();
+ }, 300);
+ }, 3000);
}
// Micro-Interactions
function addMicroInteractions() {
- // Add magnetic effect to buttons
- const buttons = document.querySelectorAll('.nav-button');
-
- buttons.forEach(button => {
- button.addEventListener('mousemove', function(e) {
- const rect = this.getBoundingClientRect();
- const x = e.clientX - rect.left - rect.width / 2;
- const y = e.clientY - rect.top - rect.height / 2;
-
- this.style.transform = `translate(${x * 0.1}px, ${y * 0.1}px) scale(1.05)`;
- });
-
- button.addEventListener('mouseleave', function() {
- this.style.transform = 'translate(0, 0) scale(1)';
- });
+ // Add magnetic effect to buttons
+ const buttons = document.querySelectorAll('.nav-button');
+
+ buttons.forEach((button) => {
+ button.addEventListener('mousemove', function (e) {
+ const rect = this.getBoundingClientRect();
+ const x = e.clientX - rect.left - rect.width / 2;
+ const y = e.clientY - rect.top - rect.height / 2;
+
+ this.style.transform = `translate(${x * 0.1}px, ${y * 0.1}px) scale(1.05)`;
});
-
- // Add tilt effect to avatar
- const avatar = document.querySelector('.avatar');
- if (avatar) {
- avatar.addEventListener('mousemove', function(e) {
- const rect = this.getBoundingClientRect();
- const x = e.clientX - rect.left - rect.width / 2;
- const y = e.clientY - rect.top - rect.height / 2;
-
- const rotateX = (y / rect.height) * 20;
- const rotateY = (x / rect.width) * -20;
-
- this.style.transform = `perspective(1000px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(1.1)`;
- });
-
- avatar.addEventListener('mouseleave', function() {
- this.style.transform = 'perspective(1000px) rotateX(0deg) rotateY(0deg) scale(1)';
- });
- }
-
- // Add ripple effect to all clickable elements
- const clickableElements = document.querySelectorAll('a, button, .avatar, .brand-name');
-
- clickableElements.forEach(element => {
- element.addEventListener('click', function(e) {
- const ripple = document.createElement('span');
- const rect = this.getBoundingClientRect();
- const size = Math.max(rect.width, rect.height);
- const x = e.clientX - rect.left - size / 2;
- const y = e.clientY - rect.top - size / 2;
-
- ripple.style.width = ripple.style.height = size + 'px';
- ripple.style.left = x + 'px';
- ripple.style.top = y + 'px';
- ripple.style.position = 'absolute';
- ripple.style.borderRadius = '50%';
- ripple.style.background = 'rgba(0, 122, 204, 0.3)';
- ripple.style.transform = 'scale(0)';
- ripple.style.animation = 'ripple 0.6s linear';
- ripple.style.pointerEvents = 'none';
-
- this.style.position = 'relative';
- this.style.overflow = 'hidden';
- this.appendChild(ripple);
-
- setTimeout(() => {
- ripple.remove();
- }, 600);
- });
+
+ button.addEventListener('mouseleave', function () {
+ this.style.transform = 'translate(0, 0) scale(1)';
});
-
- // Add CSS for ripple animation
- const style = document.createElement('style');
- style.textContent = `
+ });
+
+ // Add tilt effect to avatar
+ const avatar = document.querySelector('.avatar');
+ if (avatar) {
+ avatar.addEventListener('mousemove', function (e) {
+ const rect = this.getBoundingClientRect();
+ const x = e.clientX - rect.left - rect.width / 2;
+ const y = e.clientY - rect.top - rect.height / 2;
+
+ const rotateX = (y / rect.height) * 20;
+ const rotateY = (x / rect.width) * -20;
+
+ this.style.transform = `perspective(1000px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(1.1)`;
+ });
+
+ avatar.addEventListener('mouseleave', function () {
+ this.style.transform = 'perspective(1000px) rotateX(0deg) rotateY(0deg) scale(1)';
+ });
+ }
+
+ // Add ripple effect to all clickable elements
+ const clickableElements = document.querySelectorAll('a, button, .avatar, .brand-name');
+
+ clickableElements.forEach((element) => {
+ element.addEventListener('click', function (e) {
+ const ripple = document.createElement('span');
+ const rect = this.getBoundingClientRect();
+ const size = Math.max(rect.width, rect.height);
+ const x = e.clientX - rect.left - size / 2;
+ const y = e.clientY - rect.top - size / 2;
+
+ ripple.style.width = ripple.style.height = size + 'px';
+ ripple.style.left = x + 'px';
+ ripple.style.top = y + 'px';
+ ripple.style.position = 'absolute';
+ ripple.style.borderRadius = '50%';
+ ripple.style.background = 'rgba(0, 122, 204, 0.3)';
+ ripple.style.transform = 'scale(0)';
+ ripple.style.animation = 'ripple 0.6s linear';
+ ripple.style.pointerEvents = 'none';
+
+ this.style.position = 'relative';
+ this.style.overflow = 'hidden';
+ this.appendChild(ripple);
+
+ setTimeout(() => {
+ ripple.remove();
+ }, 600);
+ });
+ });
+
+ // Add CSS for ripple animation
+ const style = document.createElement('style');
+ style.textContent = `
@keyframes ripple {
to {
transform: scale(4);
@@ -1047,57 +1054,57 @@ function addMicroInteractions() {
}
}
`;
- document.head.appendChild(style);
+ document.head.appendChild(style);
}
// Text Effects
function addTextEffects() {
- const brandName = document.querySelector('.brand-name');
- const tagline = document.querySelector('.tagline');
- const aboutText = document.querySelector('.about-text');
-
- // Add letter-by-letter animation to brand name
- if (brandName) {
- const text = brandName.textContent;
- brandName.innerHTML = '';
-
- text.split('').forEach((letter, index) => {
- const span = document.createElement('span');
- span.textContent = letter === ' ' ? '\u00A0' : letter;
- span.style.display = 'inline-block';
- span.style.animation = `letterBounce 0.6s ease forwards`;
- span.style.animationDelay = `${index * 0.1}s`;
- span.style.opacity = '0';
- brandName.appendChild(span);
- });
- }
-
- // Add hover effect to tagline
- if (tagline) {
- tagline.addEventListener('mouseenter', function() {
- this.style.transform = 'scale(1.1) rotate(1deg)';
- this.style.textShadow = '0 0 20px rgba(0, 122, 204, 0.8)';
- });
-
- tagline.addEventListener('mouseleave', function() {
- this.style.transform = 'scale(1) rotate(0deg)';
- this.style.textShadow = 'none';
- });
- }
-
- // Add typewriter effect to about text
- if (aboutText) {
- const originalText = aboutText.textContent;
- aboutText.textContent = '';
-
- setTimeout(() => {
- typeWriter(aboutText, originalText, 50);
- }, 3000);
- }
-
- // Add CSS for letter animation
- const style = document.createElement('style');
- style.textContent = `
+ const brandName = document.querySelector('.brand-name');
+ const tagline = document.querySelector('.tagline');
+ const aboutText = document.querySelector('.about-text');
+
+ // Add letter-by-letter animation to brand name
+ if (brandName) {
+ const text = brandName.textContent;
+ brandName.innerHTML = '';
+
+ text.split('').forEach((letter, index) => {
+ const span = document.createElement('span');
+ span.textContent = letter === ' ' ? '\u00A0' : letter;
+ span.style.display = 'inline-block';
+ span.style.animation = `letterBounce 0.6s ease forwards`;
+ span.style.animationDelay = `${index * 0.1}s`;
+ span.style.opacity = '0';
+ brandName.appendChild(span);
+ });
+ }
+
+ // Add hover effect to tagline
+ if (tagline) {
+ tagline.addEventListener('mouseenter', function () {
+ this.style.transform = 'scale(1.1) rotate(1deg)';
+ this.style.textShadow = '0 0 20px rgba(0, 122, 204, 0.8)';
+ });
+
+ tagline.addEventListener('mouseleave', function () {
+ this.style.transform = 'scale(1) rotate(0deg)';
+ this.style.textShadow = 'none';
+ });
+ }
+
+ // Add typewriter effect to about text
+ if (aboutText) {
+ const originalText = aboutText.textContent;
+ aboutText.textContent = '';
+
+ setTimeout(() => {
+ typeWriter(aboutText, originalText, 50);
+ }, 3000);
+ }
+
+ // Add CSS for letter animation
+ const style = document.createElement('style');
+ style.textContent = `
@keyframes letterBounce {
0% {
opacity: 0;
@@ -1112,42 +1119,42 @@ function addTextEffects() {
}
}
`;
- document.head.appendChild(style);
+ document.head.appendChild(style);
}
// Button Morphing
function addButtonMorphing() {
- const buttons = document.querySelectorAll('.nav-button');
-
- buttons.forEach(button => {
- // Add loading state
- button.addEventListener('click', function(e) {
- if (this.href && !this.href.includes('#')) {
- e.preventDefault();
-
- const originalText = this.textContent;
- this.innerHTML = 'โณ';
- this.style.pointerEvents = 'none';
-
- setTimeout(() => {
- window.location.href = this.href;
- }, 1000);
- }
- });
-
- // Add pulse effect on focus
- button.addEventListener('focus', function() {
- this.style.animation = 'pulse 1s ease-in-out infinite';
- });
-
- button.addEventListener('blur', function() {
- this.style.animation = '';
- });
+ const buttons = document.querySelectorAll('.nav-button');
+
+ buttons.forEach((button) => {
+ // Add loading state
+ button.addEventListener('click', function (e) {
+ if (this.href && !this.href.includes('#')) {
+ e.preventDefault();
+
+ const originalText = this.textContent;
+ this.innerHTML = 'โณ';
+ this.style.pointerEvents = 'none';
+
+ setTimeout(() => {
+ window.location.href = this.href;
+ }, 1000);
+ }
});
-
- // Add CSS for button effects
- const style = document.createElement('style');
- style.textContent = `
+
+ // Add pulse effect on focus
+ button.addEventListener('focus', function () {
+ this.style.animation = 'pulse 1s ease-in-out infinite';
+ });
+
+ button.addEventListener('blur', function () {
+ this.style.animation = '';
+ });
+ });
+
+ // Add CSS for button effects
+ const style = document.createElement('style');
+ style.textContent = `
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
@@ -1157,80 +1164,80 @@ function addButtonMorphing() {
50% { transform: scale(1.05); }
}
`;
- document.head.appendChild(style);
+ document.head.appendChild(style);
}
// Scroll Effects
function addScrollEffects() {
- let ticking = false;
-
- function updateScrollEffects() {
- const scrolled = window.pageYOffset;
- const parallax = scrolled * 0.5;
-
- // Parallax effect on background
- document.body.style.setProperty('--scroll', `${parallax}px`);
-
- // Scale effect on avatar based on scroll
- const avatar = document.querySelector('.avatar');
- if (avatar) {
- const scale = Math.max(0.8, 1 - scrolled * 0.001);
- avatar.style.transform = `scale(${scale})`;
- }
-
- ticking = false;
+ let ticking = false;
+
+ function updateScrollEffects() {
+ const scrolled = window.pageYOffset;
+ const parallax = scrolled * 0.5;
+
+ // Parallax effect on background
+ document.body.style.setProperty('--scroll', `${parallax}px`);
+
+ // Scale effect on avatar based on scroll
+ const avatar = document.querySelector('.avatar');
+ if (avatar) {
+ const scale = Math.max(0.8, 1 - scrolled * 0.001);
+ avatar.style.transform = `scale(${scale})`;
}
-
- function requestTick() {
- if (!ticking) {
- requestAnimationFrame(updateScrollEffects);
- ticking = true;
- }
+
+ ticking = false;
+ }
+
+ function requestTick() {
+ if (!ticking) {
+ requestAnimationFrame(updateScrollEffects);
+ ticking = true;
}
-
- window.addEventListener('scroll', requestTick);
+ }
+
+ window.addEventListener('scroll', requestTick);
}
// Keyboard Interactions
function addKeyboardInteractions() {
- let keySequence = [];
- const secretKeys = ['z', 'a', 'n', 'e'];
-
- document.addEventListener('keydown', function(e) {
- keySequence.push(e.key.toLowerCase());
- if (keySequence.length > secretKeys.length) {
- keySequence.shift();
- }
-
- // Check for secret sequence
- if (keySequence.join('') === secretKeys.join('')) {
- activateSecretMode();
- keySequence = [];
- }
-
- // Add visual feedback for key presses
- const keyElement = document.createElement('div');
- keyElement.textContent = e.key.toUpperCase();
- keyElement.style.position = 'fixed';
- keyElement.style.left = Math.random() * window.innerWidth + 'px';
- keyElement.style.top = Math.random() * window.innerHeight + 'px';
- keyElement.style.color = '#007acc';
- keyElement.style.fontSize = '2rem';
- keyElement.style.fontWeight = 'bold';
- keyElement.style.pointerEvents = 'none';
- keyElement.style.zIndex = '10000';
- keyElement.style.animation = 'keyPress 1s ease-out forwards';
-
- document.body.appendChild(keyElement);
-
- setTimeout(() => {
- keyElement.remove();
- }, 1000);
- });
-
- // Add CSS for key press animation
- const style = document.createElement('style');
- style.textContent = `
+ let keySequence = [];
+ const secretKeys = ['z', 'a', 'n', 'e'];
+
+ document.addEventListener('keydown', function (e) {
+ keySequence.push(e.key.toLowerCase());
+ if (keySequence.length > secretKeys.length) {
+ keySequence.shift();
+ }
+
+ // Check for secret sequence
+ if (keySequence.join('') === secretKeys.join('')) {
+ activateSecretMode();
+ keySequence = [];
+ }
+
+ // Add visual feedback for key presses
+ const keyElement = document.createElement('div');
+ keyElement.textContent = e.key.toUpperCase();
+ keyElement.style.position = 'fixed';
+ keyElement.style.left = Math.random() * window.innerWidth + 'px';
+ keyElement.style.top = Math.random() * window.innerHeight + 'px';
+ keyElement.style.color = '#007acc';
+ keyElement.style.fontSize = '2rem';
+ keyElement.style.fontWeight = 'bold';
+ keyElement.style.pointerEvents = 'none';
+ keyElement.style.zIndex = '10000';
+ keyElement.style.animation = 'keyPress 1s ease-out forwards';
+
+ document.body.appendChild(keyElement);
+
+ setTimeout(() => {
+ keyElement.remove();
+ }, 1000);
+ });
+
+ // Add CSS for key press animation
+ const style = document.createElement('style');
+ style.textContent = `
@keyframes keyPress {
0% {
opacity: 1;
@@ -1242,28 +1249,28 @@ function addKeyboardInteractions() {
}
}
`;
- document.head.appendChild(style);
+ document.head.appendChild(style);
}
function activateSecretMode() {
- const body = document.body;
- body.style.animation = 'rainbow 1s ease infinite';
-
- const style = document.createElement('style');
- style.textContent = `
+ const body = document.body;
+ body.style.animation = 'rainbow 1s ease infinite';
+
+ const style = document.createElement('style');
+ style.textContent = `
@keyframes rainbow {
0% { filter: hue-rotate(0deg); }
100% { filter: hue-rotate(360deg); }
}
`;
- document.head.appendChild(style);
-
- setTimeout(() => {
- body.style.animation = '';
- style.remove();
- }, 3000);
-
- showNotification('๐ Secret "ZANE" sequence activated!');
+ document.head.appendChild(style);
+
+ setTimeout(() => {
+ body.style.animation = '';
+ style.remove();
+ }, 3000);
+
+ showNotification('๐ Secret "ZANE" sequence activated!');
}
// Uncomment the following lines if you want a typing effect for the brand name
diff --git a/sitemap.xml b/sitemap.xml
new file mode 100644
index 0000000..8ea84c3
--- /dev/null
+++ b/sitemap.xml
@@ -0,0 +1,9 @@
+
+
+
+ https://zane.org/
+ 2024-11-08
+ monthly
+ 1.0
+
+
diff --git a/styles.css b/styles.css
index bd1dce6..9bbe5e7 100644
--- a/styles.css
+++ b/styles.css
@@ -1,886 +1,923 @@
/* Reset and base styles */
* {
- margin: 0;
- padding: 0;
- box-sizing: border-box;
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
}
body {
- font-family: 'Inter', sans-serif;
- background-color: #1a1a1a;
- color: #ffffff;
- min-height: 100vh;
- overflow-x: hidden;
- position: relative;
- cursor: none;
+ font-family: 'Inter', sans-serif;
+ background-color: #1a1a1a;
+ color: #ffffff;
+ min-height: 100vh;
+ overflow-x: hidden;
+ position: relative;
+ cursor: none;
}
/* Custom Cursor */
.custom-cursor {
- position: fixed;
- width: 20px;
- height: 20px;
- background: radial-gradient(circle, rgba(0, 122, 204, 0.8) 0%, rgba(0, 122, 204, 0.4) 50%, transparent 100%);
- border-radius: 50%;
- pointer-events: none;
- z-index: 9999;
- transition: transform 0.1s ease;
- mix-blend-mode: difference;
+ position: fixed;
+ width: 20px;
+ height: 20px;
+ background: radial-gradient(
+ circle,
+ rgba(0, 122, 204, 0.8) 0%,
+ rgba(0, 122, 204, 0.4) 50%,
+ transparent 100%
+ );
+ border-radius: 50%;
+ pointer-events: none;
+ z-index: 9999;
+ transition: transform 0.1s ease;
+ mix-blend-mode: difference;
}
.custom-cursor-trail {
- position: fixed;
- width: 8px;
- height: 8px;
- background: rgba(0, 122, 204, 0.6);
- border-radius: 50%;
- pointer-events: none;
- z-index: 9998;
- transition: all 0.3s ease;
+ position: fixed;
+ width: 8px;
+ height: 8px;
+ background: rgba(0, 122, 204, 0.6);
+ border-radius: 50%;
+ pointer-events: none;
+ z-index: 9998;
+ transition: all 0.3s ease;
}
/* Grid background */
body::before {
- content: '';
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- background-image:
- radial-gradient(circle, #333 1px, transparent 1px);
- background-size: 30px 30px;
- background-position: 0 0, 15px 15px;
- opacity: 0.3;
- z-index: -1;
- pointer-events: none;
- animation: gridMove 20s linear infinite;
+ content: '';
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background-image: radial-gradient(circle, #333 1px, transparent 1px);
+ background-size: 30px 30px;
+ background-position:
+ 0 0,
+ 15px 15px;
+ opacity: 0.3;
+ z-index: -1;
+ pointer-events: none;
+ animation: gridMove 20s linear infinite;
}
@keyframes gridMove {
- 0% { transform: translate(0, 0); }
- 100% { transform: translate(30px, 30px); }
+ 0% {
+ transform: translate(0, 0);
+ }
+ 100% {
+ transform: translate(30px, 30px);
+ }
}
/* Animated gradient background */
body::after {
- content: '';
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- background: linear-gradient(-45deg, #1a1a1a, #2a2a2a, #1a1a1a, #333);
- background-size: 400% 400%;
- animation: gradientShift 15s ease infinite;
- z-index: -2;
- pointer-events: none;
+ content: '';
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: linear-gradient(-45deg, #1a1a1a, #2a2a2a, #1a1a1a, #333);
+ background-size: 400% 400%;
+ animation: gradientShift 15s ease infinite;
+ z-index: -2;
+ pointer-events: none;
}
@keyframes gradientShift {
- 0% { background-position: 0% 50%; }
- 50% { background-position: 100% 50%; }
- 100% { background-position: 0% 50%; }
+ 0% {
+ background-position: 0% 50%;
+ }
+ 50% {
+ background-position: 100% 50%;
+ }
+ 100% {
+ background-position: 0% 50%;
+ }
}
/* Main container */
.container {
- min-height: 100vh;
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- position: relative;
- padding: 2rem;
+ min-height: 100vh;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ position: relative;
+ padding: 2rem;
}
/* Avatar Section */
.avatar-section {
- display: flex;
- flex-direction: column;
- align-items: center;
- margin-bottom: 3rem;
- position: relative;
- filter: drop-shadow(0 0 20px rgba(0, 122, 204, 0.3));
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ margin-bottom: 3rem;
+ position: relative;
+ filter: drop-shadow(0 0 20px rgba(0, 122, 204, 0.3));
}
.avatar {
- width: 120px;
- height: 120px;
- border-radius: 50%;
- background: linear-gradient(135deg, #2a2a2a, #1a1a1a);
- border: 3px solid #333;
- display: flex;
- align-items: center;
- justify-content: center;
- margin-bottom: 1.5rem;
- box-shadow:
- 0 8px 32px rgba(0, 0, 0, 0.3),
- 0 0 0 0 rgba(0, 122, 204, 0.4),
- inset 0 0 20px rgba(0, 122, 204, 0.1);
- position: relative;
- overflow: hidden;
- transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
- cursor: pointer;
- transform-style: preserve-3d;
+ width: 120px;
+ height: 120px;
+ border-radius: 50%;
+ background: linear-gradient(135deg, #2a2a2a, #1a1a1a);
+ border: 3px solid #333;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin-bottom: 1.5rem;
+ box-shadow:
+ 0 8px 32px rgba(0, 0, 0, 0.3),
+ 0 0 0 0 rgba(0, 122, 204, 0.4),
+ inset 0 0 20px rgba(0, 122, 204, 0.1);
+ position: relative;
+ overflow: hidden;
+ transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
+ cursor: pointer;
+ transform-style: preserve-3d;
}
.avatar::before {
- content: '';
- position: absolute;
- top: -3px;
- left: -3px;
- right: -3px;
- bottom: -3px;
- background: linear-gradient(45deg, #007acc, #00aaff, #007acc, #00aaff);
- border-radius: 50%;
- z-index: -1;
- opacity: 0;
- transition: opacity 0.3s ease;
- animation: rotate 3s linear infinite;
+ content: '';
+ position: absolute;
+ top: -3px;
+ left: -3px;
+ right: -3px;
+ bottom: -3px;
+ background: linear-gradient(45deg, #007acc, #00aaff, #007acc, #00aaff);
+ border-radius: 50%;
+ z-index: -1;
+ opacity: 0;
+ transition: opacity 0.3s ease;
+ animation: rotate 3s linear infinite;
}
.avatar:hover::before {
- opacity: 1;
+ opacity: 1;
}
.avatar:hover {
- transform: scale(1.1) rotateY(10deg) rotateX(5deg);
- box-shadow:
- 0 15px 50px rgba(0, 0, 0, 0.4),
- 0 0 30px rgba(0, 122, 204, 0.6),
- inset 0 0 30px rgba(0, 122, 204, 0.2);
- border-color: #007acc;
+ transform: scale(1.1) rotateY(10deg) rotateX(5deg);
+ box-shadow:
+ 0 15px 50px rgba(0, 0, 0, 0.4),
+ 0 0 30px rgba(0, 122, 204, 0.6),
+ inset 0 0 30px rgba(0, 122, 204, 0.2);
+ border-color: #007acc;
}
@keyframes rotate {
- 0% { transform: rotate(0deg); }
- 100% { transform: rotate(360deg); }
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
}
/* Profile Image */
.profile-image {
- width: 100%;
- height: 100%;
- object-fit: cover;
- border-radius: 50%;
- animation: sway 45s ease-in-out infinite, pulseSlow 6s ease-in-out infinite;
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ border-radius: 50%;
+ animation:
+ sway 45s ease-in-out infinite,
+ pulseSlow 6s ease-in-out infinite;
}
@keyframes sway {
- 0% {
- transform: rotate(-10deg);
- }
- 50% {
- transform: rotate(10deg);
- }
- 100% {
- transform: rotate(-10deg);
- }
+ 0% {
+ transform: rotate(-10deg);
+ }
+ 50% {
+ transform: rotate(10deg);
+ }
+ 100% {
+ transform: rotate(-10deg);
+ }
}
@keyframes pulseSlow {
- 0%, 100% {
- transform: scale(1);
- filter: drop-shadow(0 0 0 rgba(0, 122, 204, 0));
- }
- 50% {
- transform: scale(1.05);
- filter: drop-shadow(0 0 12px rgba(0, 122, 204, 0.25));
- }
+ 0%,
+ 100% {
+ transform: scale(1);
+ filter: drop-shadow(0 0 0 rgba(0, 122, 204, 0));
+ }
+ 50% {
+ transform: scale(1.05);
+ filter: drop-shadow(0 0 12px rgba(0, 122, 204, 0.25));
+ }
}
/* Brand Name */
.brand-name {
- font-size: 2.5rem;
- font-weight: 600;
- background: linear-gradient(135deg, #ffffff, #007acc, #00aaff, #ff6b6b, #4ecdc4);
- background-size: 300% 300%;
- -webkit-background-clip: text;
- -webkit-text-fill-color: transparent;
- background-clip: text;
- text-align: center;
- letter-spacing: -0.02em;
- margin-bottom: 0.5rem;
- animation: gradientText 4s ease infinite, neonPulse 2s ease-in-out infinite alternate;
- cursor: pointer;
- transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
- text-shadow:
- 0 0 5px rgba(0, 122, 204, 0.5),
- 0 0 10px rgba(0, 122, 204, 0.3),
- 0 0 15px rgba(0, 122, 204, 0.2);
- position: relative;
+ font-size: 2.5rem;
+ font-weight: 600;
+ background: linear-gradient(135deg, #ffffff, #007acc, #00aaff, #ff6b6b, #4ecdc4);
+ background-size: 300% 300%;
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ background-clip: text;
+ text-align: center;
+ letter-spacing: -0.02em;
+ margin-bottom: 0.5rem;
+ animation:
+ gradientText 4s ease infinite,
+ neonPulse 2s ease-in-out infinite alternate;
+ cursor: pointer;
+ transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
+ text-shadow:
+ 0 0 5px rgba(0, 122, 204, 0.5),
+ 0 0 10px rgba(0, 122, 204, 0.3),
+ 0 0 15px rgba(0, 122, 204, 0.2);
+ position: relative;
}
.brand-name:hover {
- transform: scale(1.1) rotateX(5deg);
- filter: drop-shadow(0 0 20px rgba(0, 122, 204, 0.8));
- text-shadow:
- 0 0 10px rgba(0, 122, 204, 0.8),
- 0 0 20px rgba(0, 122, 204, 0.6),
- 0 0 30px rgba(0, 122, 204, 0.4);
+ transform: scale(1.1) rotateX(5deg);
+ filter: drop-shadow(0 0 20px rgba(0, 122, 204, 0.8));
+ text-shadow:
+ 0 0 10px rgba(0, 122, 204, 0.8),
+ 0 0 20px rgba(0, 122, 204, 0.6),
+ 0 0 30px rgba(0, 122, 204, 0.4);
}
@keyframes gradientText {
- 0% { background-position: 0% 50%; }
- 50% { background-position: 100% 50%; }
- 100% { background-position: 0% 50%; }
+ 0% {
+ background-position: 0% 50%;
+ }
+ 50% {
+ background-position: 100% 50%;
+ }
+ 100% {
+ background-position: 0% 50%;
+ }
}
@keyframes neonPulse {
- 0% {
- filter: drop-shadow(0 0 5px rgba(0, 122, 204, 0.5));
- text-shadow:
- 0 0 5px rgba(0, 122, 204, 0.5),
- 0 0 10px rgba(0, 122, 204, 0.3),
- 0 0 15px rgba(0, 122, 204, 0.2);
- }
- 100% {
- filter: drop-shadow(0 0 15px rgba(0, 122, 204, 0.8));
- text-shadow:
- 0 0 10px rgba(0, 122, 204, 0.8),
- 0 0 20px rgba(0, 122, 204, 0.6),
- 0 0 30px rgba(0, 122, 204, 0.4);
- }
+ 0% {
+ filter: drop-shadow(0 0 5px rgba(0, 122, 204, 0.5));
+ text-shadow:
+ 0 0 5px rgba(0, 122, 204, 0.5),
+ 0 0 10px rgba(0, 122, 204, 0.3),
+ 0 0 15px rgba(0, 122, 204, 0.2);
+ }
+ 100% {
+ filter: drop-shadow(0 0 15px rgba(0, 122, 204, 0.8));
+ text-shadow:
+ 0 0 10px rgba(0, 122, 204, 0.8),
+ 0 0 20px rgba(0, 122, 204, 0.6),
+ 0 0 30px rgba(0, 122, 204, 0.4);
+ }
}
/* Tagline */
.tagline {
- font-size: 1.1rem;
- color: #888;
- text-align: center;
- font-weight: 400;
- margin-bottom: 2rem;
- position: relative;
- animation: fadeInUp 1s ease 0.8s both;
+ font-size: 1.1rem;
+ color: #888;
+ text-align: center;
+ font-weight: 400;
+ margin-bottom: 2rem;
+ position: relative;
+ animation: fadeInUp 1s ease 0.8s both;
}
@keyframes fadeInUp {
- from {
- opacity: 0;
- transform: translateY(20px);
- }
- to {
- opacity: 1;
- transform: translateY(0);
- }
+ from {
+ opacity: 0;
+ transform: translateY(20px);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
}
/* About Section */
.about-section {
- max-width: 600px;
- text-align: center;
- margin-bottom: 3rem;
- position: relative;
- animation: slideInLeft 1s ease 1s both;
+ max-width: 600px;
+ text-align: center;
+ margin-bottom: 3rem;
+ position: relative;
+ animation: slideInLeft 1s ease 1s both;
}
@keyframes slideInLeft {
- from {
- opacity: 0;
- transform: translateX(-30px);
- }
- to {
- opacity: 1;
- transform: translateX(0);
- }
+ from {
+ opacity: 0;
+ transform: translateX(-30px);
+ }
+ to {
+ opacity: 1;
+ transform: translateX(0);
+ }
}
.about-text {
- font-size: 1.1rem;
- line-height: 1.7;
- color: #ccc;
- font-weight: 400;
+ font-size: 1.1rem;
+ line-height: 1.7;
+ color: #ccc;
+ font-weight: 400;
}
.not-for-hire-note {
- margin-top: 0.5rem;
- font-size: 0.9rem;
- color: rgba(128, 128, 128, 0.5);
- opacity: 0;
- animation: fadeInOpacity 0.3s ease forwards;
- animation-delay: 10s;
+ margin-top: 0.5rem;
+ font-size: 0.9rem;
+ color: rgba(128, 128, 128, 0.5);
+ opacity: 0;
+ animation: fadeInOpacity 0.3s ease forwards;
+ animation-delay: 10s;
}
@keyframes fadeInOpacity {
- from { opacity: 0; }
- to { opacity: 1; }
+ from {
+ opacity: 0;
+ }
+ to {
+ opacity: 1;
+ }
}
-
/* Navigation */
.navigation {
- display: flex;
- flex-direction: column;
- gap: 1rem;
- position: relative;
- align-items: center;
- animation: slideInRight 1s ease 1.2s both;
+ display: flex;
+ flex-direction: column;
+ gap: 1rem;
+ position: relative;
+ align-items: center;
+ animation: slideInRight 1s ease 1.2s both;
}
@keyframes slideInRight {
- from {
- opacity: 0;
- transform: translateX(30px);
- }
- to {
- opacity: 1;
- transform: translateX(0);
- }
+ from {
+ opacity: 0;
+ transform: translateX(30px);
+ }
+ to {
+ opacity: 1;
+ transform: translateX(0);
+ }
}
.nav-button {
- background: linear-gradient(135deg, #2a2a2a, #1a1a1a);
- border: 2px solid #333;
- border-radius: 12px;
- padding: 1rem 2rem;
- color: #ffffff;
- font-size: 1.1rem;
- font-weight: 500;
- font-family: 'Inter', sans-serif;
- cursor: pointer;
- transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
- min-width: 140px;
- text-align: center;
- position: relative;
- overflow: hidden;
- text-decoration: none;
- display: inline-block;
- box-shadow:
- 0 4px 15px rgba(0, 0, 0, 0.2),
- 0 0 0 0 rgba(0, 122, 204, 0.3);
- transform-style: preserve-3d;
+ background: linear-gradient(135deg, #2a2a2a, #1a1a1a);
+ border: 2px solid #333;
+ border-radius: 12px;
+ padding: 1rem 2rem;
+ color: #ffffff;
+ font-size: 1.1rem;
+ font-weight: 500;
+ font-family: 'Inter', sans-serif;
+ cursor: pointer;
+ transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
+ min-width: 140px;
+ text-align: center;
+ position: relative;
+ overflow: hidden;
+ text-decoration: none;
+ display: inline-block;
+ box-shadow:
+ 0 4px 15px rgba(0, 0, 0, 0.2),
+ 0 0 0 0 rgba(0, 122, 204, 0.3);
+ transform-style: preserve-3d;
}
.nav-button::after {
- content: '';
- position: absolute;
- top: 0;
- left: -100%;
- width: 100%;
- height: 100%;
- background: linear-gradient(90deg, transparent, rgba(0, 122, 204, 0.3), transparent);
- transition: left 0.6s ease;
+ content: '';
+ position: absolute;
+ top: 0;
+ left: -100%;
+ width: 100%;
+ height: 100%;
+ background: linear-gradient(90deg, transparent, rgba(0, 122, 204, 0.3), transparent);
+ transition: left 0.6s ease;
}
.nav-button:hover::after {
- left: 100%;
+ left: 100%;
}
.nav-button.active {
- background: #333;
- border-color: #444;
+ background: #333;
+ border-color: #444;
}
.nav-button::before {
- content: '';
- position: absolute;
- top: 0;
- left: -100%;
- width: 100%;
- height: 100%;
- background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent);
- transition: left 0.5s ease;
+ content: '';
+ position: absolute;
+ top: 0;
+ left: -100%;
+ width: 100%;
+ height: 100%;
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent);
+ transition: left 0.5s ease;
}
.nav-button:hover::before {
- left: 100%;
+ left: 100%;
}
.nav-button:hover {
- background: linear-gradient(135deg, #333, #2a2a2a);
- border-color: #007acc;
- transform: translateY(-5px) scale(1.05) rotateX(5deg);
- box-shadow:
- 0 15px 40px rgba(0, 122, 204, 0.4),
- 0 0 20px rgba(0, 122, 204, 0.6);
- text-shadow: 0 0 10px rgba(0, 122, 204, 0.8);
+ background: linear-gradient(135deg, #333, #2a2a2a);
+ border-color: #007acc;
+ transform: translateY(-5px) scale(1.05) rotateX(5deg);
+ box-shadow:
+ 0 15px 40px rgba(0, 122, 204, 0.4),
+ 0 0 20px rgba(0, 122, 204, 0.6);
+ text-shadow: 0 0 10px rgba(0, 122, 204, 0.8);
}
.nav-button:active {
- transform: translateY(0);
+ transform: translateY(0);
}
/* Disclaimer */
.disclaimer {
- position: fixed;
- bottom: 2rem;
- left: 2rem;
- color: #666;
- font-size: 0.9rem;
- font-style: italic;
+ position: fixed;
+ bottom: 2rem;
+ left: 2rem;
+ color: #666;
+ font-size: 0.9rem;
+ font-style: italic;
}
.disclaimer p {
- margin: 0;
+ margin: 0;
}
/* Content Sections */
.content-section {
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- background: rgba(26, 26, 26, 0.95);
- backdrop-filter: blur(10px);
- display: none;
- align-items: center;
- justify-content: center;
- z-index: 1000;
- opacity: 0;
- transition: opacity 0.3s ease;
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: rgba(26, 26, 26, 0.95);
+ backdrop-filter: blur(10px);
+ display: none;
+ align-items: center;
+ justify-content: center;
+ z-index: 1000;
+ opacity: 0;
+ transition: opacity 0.3s ease;
}
.content-section.active {
- display: flex;
- opacity: 1;
+ display: flex;
+ opacity: 1;
}
.content-wrapper {
- max-width: 800px;
- padding: 2rem;
- text-align: center;
+ max-width: 800px;
+ padding: 2rem;
+ text-align: center;
}
.content-wrapper h2 {
- font-size: 2.5rem;
- margin-bottom: 2rem;
- color: #ffffff;
+ font-size: 2.5rem;
+ margin-bottom: 2rem;
+ color: #ffffff;
}
.project-grid {
- display: grid;
- grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
- gap: 2rem;
- margin-top: 2rem;
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
+ gap: 2rem;
+ margin-top: 2rem;
}
.project-card {
- background: #2a2a2a;
- border: 2px solid #333;
- border-radius: 12px;
- padding: 2rem;
- transition: all 0.3s ease;
+ background: #2a2a2a;
+ border: 2px solid #333;
+ border-radius: 12px;
+ padding: 2rem;
+ transition: all 0.3s ease;
}
.project-card:hover {
- transform: translateY(-5px);
- border-color: #444;
- box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
+ transform: translateY(-5px);
+ border-color: #444;
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
}
.project-card h3 {
- color: #ffffff;
- margin-bottom: 1rem;
- font-size: 1.3rem;
+ color: #ffffff;
+ margin-bottom: 1rem;
+ font-size: 1.3rem;
}
.project-card p {
- color: #ccc;
- line-height: 1.6;
+ color: #ccc;
+ line-height: 1.6;
}
.github-link {
- text-decoration: none;
- display: inline-block;
- margin-top: 2rem;
+ text-decoration: none;
+ display: inline-block;
+ margin-top: 2rem;
}
.github-button {
- background: #333;
- border: 2px solid #444;
- border-radius: 12px;
- padding: 1rem 2rem;
- color: #ffffff;
- font-size: 1.1rem;
- font-weight: 500;
- cursor: pointer;
- transition: all 0.3s ease;
- font-family: 'Inter', sans-serif;
+ background: #333;
+ border: 2px solid #444;
+ border-radius: 12px;
+ padding: 1rem 2rem;
+ color: #ffffff;
+ font-size: 1.1rem;
+ font-weight: 500;
+ cursor: pointer;
+ transition: all 0.3s ease;
+ font-family: 'Inter', sans-serif;
}
.github-button:hover {
- background: #444;
- border-color: #555;
- transform: translateY(-2px);
+ background: #444;
+ border-color: #555;
+ transform: translateY(-2px);
}
.contact-info {
- margin-top: 2rem;
+ margin-top: 2rem;
}
.contact-methods {
- display: flex;
- justify-content: center;
- gap: 2rem;
- margin-top: 2rem;
- flex-wrap: wrap;
+ display: flex;
+ justify-content: center;
+ gap: 2rem;
+ margin-top: 2rem;
+ flex-wrap: wrap;
}
.contact-link {
- color: #ffffff;
- text-decoration: none;
- padding: 1rem 2rem;
- border: 2px solid #333;
- border-radius: 12px;
- background: #2a2a2a;
- transition: all 0.3s ease;
- font-weight: 500;
+ color: #ffffff;
+ text-decoration: none;
+ padding: 1rem 2rem;
+ border: 2px solid #333;
+ border-radius: 12px;
+ background: #2a2a2a;
+ transition: all 0.3s ease;
+ font-weight: 500;
}
.contact-link:hover {
- background: #333;
- border-color: #444;
- transform: translateY(-2px);
+ background: #333;
+ border-color: #444;
+ transform: translateY(-2px);
}
/* Projects Page Specific Styles */
.projects-main-content {
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- background: rgba(26, 26, 26, 0.95);
- backdrop-filter: blur(10px);
- display: flex;
- align-items: center;
- justify-content: center;
- z-index: 1000;
- overflow-y: auto;
- padding: 2rem 0;
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: rgba(26, 26, 26, 0.95);
+ backdrop-filter: blur(10px);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ z-index: 1000;
+ overflow-y: auto;
+ padding: 2rem 0;
}
.projects-intro {
- color: #ccc;
- font-size: 1.2rem;
- margin-bottom: 3rem;
- text-align: center;
+ color: #ccc;
+ font-size: 1.2rem;
+ margin-bottom: 3rem;
+ text-align: center;
}
.project-tech {
- display: flex;
- flex-wrap: wrap;
- gap: 0.5rem;
- margin: 1rem 0;
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.5rem;
+ margin: 1rem 0;
}
.tech-tag {
- background: #333;
- color: #ffffff;
- padding: 0.3rem 0.8rem;
- border-radius: 20px;
- font-size: 0.8rem;
- font-weight: 500;
- border: 1px solid #444;
+ background: #333;
+ color: #ffffff;
+ padding: 0.3rem 0.8rem;
+ border-radius: 20px;
+ font-size: 0.8rem;
+ font-weight: 500;
+ border: 1px solid #444;
}
.project-links {
- display: flex;
- gap: 1rem;
- margin-top: 1.5rem;
+ display: flex;
+ gap: 1rem;
+ margin-top: 1.5rem;
}
.project-link {
- color: #ffffff;
- text-decoration: none;
- padding: 0.5rem 1rem;
- border: 1px solid #333;
- border-radius: 8px;
- background: #2a2a2a;
- transition: all 0.3s ease;
- font-size: 0.9rem;
- font-weight: 500;
+ color: #ffffff;
+ text-decoration: none;
+ padding: 0.5rem 1rem;
+ border: 1px solid #333;
+ border-radius: 8px;
+ background: #2a2a2a;
+ transition: all 0.3s ease;
+ font-size: 0.9rem;
+ font-weight: 500;
}
.project-link:hover {
- background: #333;
- border-color: #444;
- transform: translateY(-1px);
+ background: #333;
+ border-color: #444;
+ transform: translateY(-1px);
}
.contact-message {
- font-size: 1.5rem;
- color: #ffffff;
- font-weight: 500;
- text-align: center;
- margin-top: 2rem;
+ font-size: 1.5rem;
+ color: #ffffff;
+ font-weight: 500;
+ text-align: center;
+ margin-top: 2rem;
}
/* Skills Section */
.skills-grid {
- display: grid;
- grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
- gap: 2rem;
- margin-top: 2rem;
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
+ gap: 2rem;
+ margin-top: 2rem;
}
.skill-category {
- background: #2a2a2a;
- border: 2px solid #333;
- border-radius: 12px;
- padding: 2rem;
- transition: all 0.3s ease;
+ background: #2a2a2a;
+ border: 2px solid #333;
+ border-radius: 12px;
+ padding: 2rem;
+ transition: all 0.3s ease;
}
.skill-category:hover {
- transform: translateY(-5px);
- border-color: #444;
- box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
+ transform: translateY(-5px);
+ border-color: #444;
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
}
.skill-category h3 {
- color: #ffffff;
- margin-bottom: 1.5rem;
- font-size: 1.3rem;
- text-align: center;
+ color: #ffffff;
+ margin-bottom: 1.5rem;
+ font-size: 1.3rem;
+ text-align: center;
}
.skill-tags {
- display: flex;
- flex-wrap: wrap;
- gap: 0.8rem;
- justify-content: center;
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.8rem;
+ justify-content: center;
}
.skill-tag {
- background: linear-gradient(135deg, #333, #444);
- color: #ffffff;
- padding: 0.5rem 1rem;
- border-radius: 25px;
- font-size: 0.9rem;
- font-weight: 500;
- border: 1px solid #555;
- transition: all 0.3s ease;
+ background: linear-gradient(135deg, #333, #444);
+ color: #ffffff;
+ padding: 0.5rem 1rem;
+ border-radius: 25px;
+ font-size: 0.9rem;
+ font-weight: 500;
+ border: 1px solid #555;
+ transition: all 0.3s ease;
}
.skill-tag:hover {
- background: linear-gradient(135deg, #444, #555);
- transform: translateY(-2px);
- box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3);
+ background: linear-gradient(135deg, #444, #555);
+ transform: translateY(-2px);
+ box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3);
}
/* Featured Project Styles */
.project-card.featured {
- border: 2px solid #007acc;
- background: linear-gradient(135deg, #2a2a2a, #1f1f1f);
- position: relative;
- overflow: hidden;
+ border: 2px solid #007acc;
+ background: linear-gradient(135deg, #2a2a2a, #1f1f1f);
+ position: relative;
+ overflow: hidden;
}
.project-card.featured::before {
- content: '';
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- height: 3px;
- background: linear-gradient(90deg, #007acc, #00aaff, #007acc);
- animation: shimmer 2s infinite;
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ height: 3px;
+ background: linear-gradient(90deg, #007acc, #00aaff, #007acc);
+ animation: shimmer 2s infinite;
}
@keyframes shimmer {
- 0% { transform: translateX(-100%); }
- 100% { transform: translateX(100%); }
+ 0% {
+ transform: translateX(-100%);
+ }
+ 100% {
+ transform: translateX(100%);
+ }
}
.project-header {
- display: flex;
- justify-content: space-between;
- align-items: center;
- margin-bottom: 1rem;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 1rem;
}
.featured-badge {
- background: linear-gradient(135deg, #007acc, #00aaff);
- color: #ffffff;
- padding: 0.3rem 0.8rem;
- border-radius: 15px;
- font-size: 0.8rem;
- font-weight: 600;
- text-transform: uppercase;
- letter-spacing: 0.5px;
+ background: linear-gradient(135deg, #007acc, #00aaff);
+ color: #ffffff;
+ padding: 0.3rem 0.8rem;
+ border-radius: 15px;
+ font-size: 0.8rem;
+ font-weight: 600;
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
}
/* Close button for content sections */
.close-button {
- position: absolute;
- top: 2rem;
- right: 2rem;
- background: none;
- border: none;
- color: #666;
- font-size: 2rem;
- cursor: pointer;
- transition: color 0.3s ease;
- z-index: 1001;
+ position: absolute;
+ top: 2rem;
+ right: 2rem;
+ background: none;
+ border: none;
+ color: #666;
+ font-size: 2rem;
+ cursor: pointer;
+ transition: color 0.3s ease;
+ z-index: 1001;
}
.close-button:hover {
- color: #ffffff;
- transform: scale(1.1);
+ color: #ffffff;
+ transform: scale(1.1);
}
/* Scroll Animation Classes */
.animate-in {
- animation: slideInUp 0.6s ease forwards;
+ animation: slideInUp 0.6s ease forwards;
}
@keyframes slideInUp {
- from {
- opacity: 0;
- transform: translateY(30px);
- }
- to {
- opacity: 1;
- transform: translateY(0);
- }
+ from {
+ opacity: 0;
+ transform: translateY(30px);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
}
/* Enhanced hover effects */
.project-card {
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.project-card:hover {
- transform: translateY(-8px) scale(1.02);
- box-shadow: 0 15px 40px rgba(0, 0, 0, 0.4);
+ transform: translateY(-8px) scale(1.02);
+ box-shadow: 0 15px 40px rgba(0, 0, 0, 0.4);
}
/* Improved tech tag styling */
.tech-tag {
- background: linear-gradient(135deg, #333, #444);
- color: #ffffff;
- padding: 0.4rem 0.9rem;
- border-radius: 20px;
- font-size: 0.85rem;
- font-weight: 500;
- border: 1px solid #444;
- transition: all 0.3s ease;
- display: inline-block;
+ background: linear-gradient(135deg, #333, #444);
+ color: #ffffff;
+ padding: 0.4rem 0.9rem;
+ border-radius: 20px;
+ font-size: 0.85rem;
+ font-weight: 500;
+ border: 1px solid #444;
+ transition: all 0.3s ease;
+ display: inline-block;
}
.tech-tag:hover {
- background: linear-gradient(135deg, #444, #555);
- transform: translateY(-2px);
- box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3);
+ background: linear-gradient(135deg, #444, #555);
+ transform: translateY(-2px);
+ box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3);
}
-
/* Responsive Design */
@media (max-width: 768px) {
- .container {
- padding: 1rem;
- }
-
- .avatar-section {
- margin-bottom: 2rem;
- }
-
- .navigation {
- align-items: center;
- }
-
- .brand-name {
- font-size: 2rem;
- }
-
- .tagline {
- font-size: 1rem;
- }
-
- .about-text {
- font-size: 1rem;
- }
-
- .nav-button {
- min-width: 120px;
- padding: 0.8rem 1.5rem;
- font-size: 1rem;
- }
-
- .content-wrapper {
- padding: 1rem;
- }
-
- .content-wrapper h2 {
- font-size: 2rem;
- }
-
- .project-grid {
- grid-template-columns: 1fr;
- gap: 1rem;
- }
-
- .skills-grid {
- grid-template-columns: 1fr;
- gap: 1rem;
- }
-
- .contact-methods {
- flex-direction: column;
- align-items: center;
- gap: 1rem;
- }
-
- .disclaimer {
- bottom: 1rem;
- left: 1rem;
- font-size: 0.8rem;
- }
-
- .close-button {
- top: 1rem;
- right: 1rem;
- font-size: 1.5rem;
- }
+ .container {
+ padding: 1rem;
+ }
+
+ .avatar-section {
+ margin-bottom: 2rem;
+ }
+
+ .navigation {
+ align-items: center;
+ }
+
+ .brand-name {
+ font-size: 2rem;
+ }
+
+ .tagline {
+ font-size: 1rem;
+ }
+
+ .about-text {
+ font-size: 1rem;
+ }
+
+ .nav-button {
+ min-width: 120px;
+ padding: 0.8rem 1.5rem;
+ font-size: 1rem;
+ }
+
+ .content-wrapper {
+ padding: 1rem;
+ }
+
+ .content-wrapper h2 {
+ font-size: 2rem;
+ }
+
+ .project-grid {
+ grid-template-columns: 1fr;
+ gap: 1rem;
+ }
+
+ .skills-grid {
+ grid-template-columns: 1fr;
+ gap: 1rem;
+ }
+
+ .contact-methods {
+ flex-direction: column;
+ align-items: center;
+ gap: 1rem;
+ }
+
+ .disclaimer {
+ bottom: 1rem;
+ left: 1rem;
+ font-size: 0.8rem;
+ }
+
+ .close-button {
+ top: 1rem;
+ right: 1rem;
+ font-size: 1.5rem;
+ }
}
@media (max-width: 480px) {
- .avatar {
- width: 100px;
- height: 100px;
- }
-
- .mug {
- width: 50px;
- height: 42px;
- }
-
- .mug-body {
- width: 42px;
- height: 34px;
- }
-
- .brand-name {
- font-size: 1.8rem;
- }
-
- .nav-button {
- min-width: 100px;
- padding: 0.7rem 1.2rem;
- font-size: 0.9rem;
- }
+ .avatar {
+ width: 100px;
+ height: 100px;
+ }
+
+ .mug {
+ width: 50px;
+ height: 42px;
+ }
+
+ .mug-body {
+ width: 42px;
+ height: 34px;
+ }
+
+ .brand-name {
+ font-size: 1.8rem;
+ }
+
+ .nav-button {
+ min-width: 100px;
+ padding: 0.7rem 1.2rem;
+ font-size: 0.9rem;
+ }
}
/* Popup styles */
.popup {
- position: fixed;
- top: 50%;
- left: 50%;
- transform: translate(-50%, -50%);
- background: rgba(26, 26, 26, 0.95);
- padding: 20px 40px;
- border-radius: 12px;
- border: 2px solid #333;
- box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
- z-index: 1000;
- opacity: 1;
- transition: opacity 0.3s ease;
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ background: rgba(26, 26, 26, 0.95);
+ padding: 20px 40px;
+ border-radius: 12px;
+ border: 2px solid #333;
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
+ z-index: 1000;
+ opacity: 1;
+ transition: opacity 0.3s ease;
}
.popup-content {
- color: #ffffff;
- font-size: 1.1rem;
- text-align: center;
+ color: #ffffff;
+ font-size: 1.1rem;
+ text-align: center;
}
diff --git a/vite.config.js b/vite.config.js
new file mode 100644
index 0000000..97474bd
--- /dev/null
+++ b/vite.config.js
@@ -0,0 +1,40 @@
+import { defineConfig } from 'vite';
+import { resolve } from 'path';
+
+export default defineConfig({
+ root: '.',
+ build: {
+ outDir: 'dist',
+ assetsDir: 'assets',
+ minify: 'terser',
+ terserOptions: {
+ compress: {
+ drop_console: true,
+ drop_debugger: true,
+ },
+ },
+ rollupOptions: {
+ input: {
+ main: resolve(__dirname, 'index.html'),
+ },
+ output: {
+ assetFileNames: (assetInfo) => {
+ let extType = assetInfo.name.split('.').at(1);
+ if (/png|jpe?g|svg|gif|tiff|bmp|ico/i.test(extType)) {
+ extType = 'images';
+ }
+ if (/css/i.test(extType)) {
+ extType = 'css';
+ }
+ return `assets/${extType}/[name]-[hash][extname]`;
+ },
+ chunkFileNames: 'assets/js/[name]-[hash].js',
+ entryFileNames: 'assets/js/[name]-[hash].js',
+ },
+ },
+ },
+ server: {
+ port: 5173,
+ open: true,
+ },
+});