diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
index 5d1677a..7121463 100644
--- a/.devcontainer/devcontainer.json
+++ b/.devcontainer/devcontainer.json
@@ -18,8 +18,9 @@
// 4173: VitePress Docs (Preview)
// 5173: Web App (Must be strictly 5173 for Electron IPC compatibility)
// 3000: Landing App (Isolated from Vite's default 517x blast radius)
+ // 3001: Company Profile App
// 3005: Showcase App
- "forwardPorts": [6060, 4173, 5173, 3000, 3005],
+ "forwardPorts": [6060, 4173, 5173, 3000, 3001, 3005],
"portsAttributes": {
"6060": {
@@ -41,6 +42,10 @@
"3000": {
"label": "Landing App (Public)",
"onAutoForward": "notify"
+ },
+ "3001": {
+ "label": "Product Site App",
+ "onAutoForward": "notify"
}
},
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 16bfb9c..02c75ed 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -4,5 +4,27 @@
"mode": "auto"
}
],
- "cSpell.words": ["dtos", "mantine", "Menlo", "mgmt", "Millis", "Pandang", "Segoe", "TDTO", "Ujung", "VITE", "WITA"]
+ "cSpell.words": [
+ "bento",
+ "cemail",
+ "checkin",
+ "cmsg",
+ "Cpolyline",
+ "Csvg",
+ "dtos",
+ "janky",
+ "mantine",
+ "Menlo",
+ "mgmt",
+ "Millis",
+ "Pandang",
+ "psuedo",
+ "qrcode",
+ "rfid",
+ "Segoe",
+ "TDTO",
+ "Ujung",
+ "VITE",
+ "WITA"
+ ]
}
diff --git a/apps/landing/src/app.tsx b/apps/landing/src/app.tsx
index 6abf839..9480081 100644
--- a/apps/landing/src/app.tsx
+++ b/apps/landing/src/app.tsx
@@ -16,12 +16,9 @@ export default function App() {
- Enterprise-grade solutions for modern businesses.
- This page is served from{' '}
-
- apps/landing
- {' '}
- on port 5174 .
+ Enterprise-grade solutions for modern businesses. This page is served from{' '}
+ apps/landing on
+ port 5174 .
@@ -33,12 +30,12 @@ export default function App() {
✅ @repo/ui workspace link verified — Button component rendered successfully.
-
-
Enterprise Web App
-
+
+
Enterprise Web App
+
+
+
-
-
);
}
diff --git a/apps/product-site/.gitignore b/apps/product-site/.gitignore
new file mode 100644
index 0000000..5ef6a52
--- /dev/null
+++ b/apps/product-site/.gitignore
@@ -0,0 +1,41 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.*
+.yarn/*
+!.yarn/patches
+!.yarn/plugins
+!.yarn/releases
+!.yarn/versions
+
+# testing
+/coverage
+
+# next.js
+/.next/
+/out/
+
+# production
+/build
+
+# misc
+.DS_Store
+*.pem
+
+# debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+.pnpm-debug.log*
+
+# env files (can opt-in for committing if needed)
+.env*
+
+# vercel
+.vercel
+
+# typescript
+*.tsbuildinfo
+next-env.d.ts
diff --git a/apps/product-site/AGENTS.md b/apps/product-site/AGENTS.md
new file mode 100644
index 0000000..8bd0e39
--- /dev/null
+++ b/apps/product-site/AGENTS.md
@@ -0,0 +1,5 @@
+
+# This is NOT the Next.js you know
+
+This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` before writing any code. Heed deprecation notices.
+
diff --git a/apps/product-site/CLAUDE.md b/apps/product-site/CLAUDE.md
new file mode 100644
index 0000000..43c994c
--- /dev/null
+++ b/apps/product-site/CLAUDE.md
@@ -0,0 +1 @@
+@AGENTS.md
diff --git a/apps/product-site/README.md b/apps/product-site/README.md
new file mode 100644
index 0000000..e215bc4
--- /dev/null
+++ b/apps/product-site/README.md
@@ -0,0 +1,36 @@
+This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).
+
+## Getting Started
+
+First, run the development server:
+
+```bash
+npm run dev
+# or
+yarn dev
+# or
+pnpm dev
+# or
+bun dev
+```
+
+Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
+
+You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
+
+This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.
+
+## Learn More
+
+To learn more about Next.js, take a look at the following resources:
+
+- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
+- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
+
+You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!
+
+## Deploy on Vercel
+
+The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
+
+Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.
diff --git a/apps/product-site/eslint.config.mjs b/apps/product-site/eslint.config.mjs
new file mode 100644
index 0000000..1341e32
--- /dev/null
+++ b/apps/product-site/eslint.config.mjs
@@ -0,0 +1,3 @@
+import { nextjsConfig } from "@repo/eslint-config/nextjs.mjs";
+
+export default nextjsConfig;
diff --git a/apps/product-site/messages/en.json b/apps/product-site/messages/en.json
new file mode 100644
index 0000000..df198df
--- /dev/null
+++ b/apps/product-site/messages/en.json
@@ -0,0 +1,215 @@
+{
+ "Metadata": {
+ "title": "Pintu Masuk — Manage Visitors, From Tickets to Gates",
+ "description": "The First Integrated Ticketing and Access Platform in Indonesia"
+ },
+ "Nav": {
+ "home": "Home",
+ "solutions": "Solutions",
+ "industries": "Industries",
+ "pricing": "Pricing",
+ "contact": "Contact",
+ "demo": "Schedule Demo"
+ },
+ "Hero": {
+ "title1": "Manage Visitors.",
+ "title2": "From Tickets to Gates.",
+ "desc": "Manage the entire visitor journey in one platform, from ticket sales, access validation, queue management, to operational reporting. Keeps running even when internet connection is not always available.",
+ "subtitle": "The First Integrated Ticketing and Access Platform in Indonesia",
+ "cta": "Learn more",
+ "stats": {
+ "timeAccess": "Time access",
+ "seconds": "seconds",
+ "avgValidation": "Avg validation time",
+ "ticketsSold": "Tickets sold",
+ "todayAllChannels": "Today · all channels",
+ "sync": "Synchronization",
+ "txSynced": "transactions Successfully synced",
+ "visitorOps": "Visitor operations",
+ "activeZones": "3 active queue zones"
+ }
+ },
+ "Why": {
+ "title": "Built for non-stop operations",
+ "desc": "More than just a ticketing system, Pintu Masuk is an access infrastructure that keeps working when signals drop, queues lengthen, and when you need quick data-driven decisions.",
+ "items": {
+ "offline": {
+ "title": "Offline-first",
+ "desc": "Transactions remain recorded locally when internet drops, then sync automatically once the network returns."
+ },
+ "speed": {
+ "title": "Speed Validation",
+ "desc": "QR, RFID, and gate barriers validated in milliseconds, even during peak queue times."
+ },
+ "flexibility": {
+ "title": "Flexibility Model",
+ "desc": "Cloud, on-premise, perpetual license, or rental can be tailored to your duration and infrastructure."
+ }
+ }
+ },
+ "Ecosystem": {
+ "title": "Four steps. One ecosystem.",
+ "desc": "Each stage is integrated into one platform, allowing data to flow automatically from ticket purchase to operational reporting without manual processes or repetitive input.",
+ "ticketing": {
+ "title": "Ticketing",
+ "desc": "Sell tickets online via web, apps, or counters. Prices and quotas are always synced in one system."
+ },
+ "access": {
+ "title": "Access Management",
+ "desc": "Validate tickets using QR Code, RFID, or automated gates. Fast, accurate process completed in seconds."
+ },
+ "visitor": {
+ "title": "Visitor Operations",
+ "desc": "Manage queues, zone capacities, and visit schedules in real-time for a more orderly experience."
+ },
+ "report": {
+ "title": "Report",
+ "desc": "Monitor transactions, visitor numbers, occupancy, and operational performance through a single dashboard."
+ },
+ "stats": {
+ "qr": "QR Code",
+ "gate": "Gate Barrier",
+ "rfid": "RFID",
+ "avg": "average",
+ "queue": "124 visitors in queue",
+ "revenue": "Revenue",
+ "visitors": "Visitor",
+ "checkin": "Check-in"
+ }
+ },
+ "Destinations": {
+ "title": "One platform, designed for every type of destination",
+ "desc": "Pintu Masuk adapts to your business processes, because we believe every industry has different visitor flows and operational needs.",
+ "title21": "One platform,",
+ "title22": "Various applications for every need.",
+ "desc2": "Ticket sales, check-ins, to zone occupancies are updated in real-time without needing to wait to know what's happening.",
+ "items": {
+ "themePark": {
+ "title": "Theme Park",
+ "desc": "Manage daily rides and tickets with a more efficient queuing system."
+ },
+ "event": {
+ "title": "Event & Festival",
+ "desc": "Handle thousands of visitors with fast ticket sales and access validation."
+ },
+ "museum": {
+ "title": "Museum",
+ "desc": "Create a more organized visit experience through schedule and capacity management."
+ },
+ "stadium": {
+ "title": "Stadium & Venue",
+ "desc": "Speed up entry processes with accurate ticket validation, even when queues overflow."
+ },
+ "exhibition": {
+ "title": "Exhibition",
+ "desc": "Flexible for multi-day exhibitions with integrated ticket access settings."
+ }
+ },
+ "apps": {
+ "online": {
+ "title": "Online Booking",
+ "desc": "Manage reservations and ticket purchases from various digital channels."
+ },
+ "cashier": {
+ "title": "Buy at Cashier",
+ "desc": "Ticket sales at the cashier to serve visitors directly."
+ },
+ "pos": {
+ "title": "Offline POS (Multi Outlet)",
+ "desc": "Record transactions, redeem bookings, and operate cashiers without relying on internet."
+ },
+ "queue": {
+ "title": "Queue App",
+ "desc": "Helps manage entry queues for a more comfortable visitor experience."
+ },
+ "admin": {
+ "title": "Web Admin",
+ "desc": "Control center to manage master data, transactions, and system synchronization."
+ }
+ }
+ },
+ "Pricing": {
+ "title1": "Start according to needs,",
+ "title2": "grow without limits",
+ "desc": "No need to pay more for unused features. Choose the most suitable package, then upgrade anytime as your operations grow.",
+ "contactUs": "Contact Us",
+ "whatYouGet": "What you get",
+ "rental": {
+ "title": "Rental",
+ "tags": [
+ "Event",
+ "Festival",
+ "Concert"
+ ],
+ "desc": "Practical solution for short-duration events. Rent complete devices and systems, ready to use in days.",
+ "f1": "Ticketing & QR check-in",
+ "f2": "Gate & scanner device rental",
+ "f3": "Real-time monitoring dashboard",
+ "f4": "Visitor reports D+1",
+ "f5": "Fast setup & teardown (ready D-1)"
+ },
+ "subscription": {
+ "title": "Subscription",
+ "tags": [
+ "Tourist attraction",
+ "Waterpark"
+ ],
+ "desc": "Monthly subscription model for destinations operating daily, without initial infrastructure investment.",
+ "f1": "All Rental features",
+ "f2": "Multi outlet & multi gate",
+ "f3": "Quota & visit schedule management",
+ "f4": "Monthly operational dashboard",
+ "f5": "Automatic feature updates"
+ },
+ "onPremise": {
+ "title": "On-Premise",
+ "tags": [
+ "Enterprise",
+ "Institution"
+ ],
+ "desc": "System runs on your own servers and networks, for full control over data and security.",
+ "f1": "All Subscription features",
+ "f2": "Local server installation",
+ "f3": "Internal system integration (SSO, ERP)",
+ "f4": "Advanced access & security control",
+ "f5": "Dedicated deployment support"
+ },
+ "buyOut": {
+ "title": "Buy Out",
+ "tags": [
+ "Company",
+ "Integrator",
+ "Developer"
+ ],
+ "desc": "Solution with permanent license for organizations wanting long-term implementation and broader operational control.",
+ "f1": "Permanent License",
+ "f2": "Complete technical documentation",
+ "f3": "Internal engineering team training",
+ "f4": "Free from ongoing license fees",
+ "f5": "Priority support for first year"
+ }
+ },
+ "Contact": {
+ "eyebrow": "Contact us",
+ "title": "Let's discuss your operational needs",
+ "desc": "Our team is ready to help determine the most suitable package for the scale and type of your event or destination.",
+ "email": "Email",
+ "phone": "Phone / WhatsApp",
+ "office": "Office",
+ "form": {
+ "title": "Send a message to our team",
+ "name": "Full name",
+ "needs": "Tell us your needs",
+ "submit": "Send Message",
+ "note": "Our team responds within 1x24 hours on working days.",
+ "placeholderName": "John Doe",
+ "placeholderEmail": "name@company.com",
+ "placeholderNeeds": "Type of event or destination, estimated number of visitors, and the package you are considering."
+ }
+ },
+ "Footer": {
+ "desc": "Manage integrated ticketing and access for theme parks, events, museums, and venues across Indonesia.",
+ "links": "Quick Links",
+ "copyright": "Pintu Masuk. All rights reserved."
+ }
+}
\ No newline at end of file
diff --git a/apps/product-site/messages/id.json b/apps/product-site/messages/id.json
new file mode 100644
index 0000000..7333fba
--- /dev/null
+++ b/apps/product-site/messages/id.json
@@ -0,0 +1,215 @@
+{
+ "Metadata": {
+ "title": "Pintu Masuk — Kelola Pengunjung, Dari Tiket Hingga Gerbang",
+ "description": "Platform Tiket dan Akses Terintegrasi Pertama di Indonesia"
+ },
+ "Nav": {
+ "home": "Beranda",
+ "solutions": "Solusi",
+ "industries": "Industri",
+ "pricing": "Paket",
+ "contact": "Kontak",
+ "demo": "Jadwalkan Demo"
+ },
+ "Hero": {
+ "title1": "Kelola Pengunjung.",
+ "title2": "Dari Tiket Hingga Gerbang.",
+ "desc": "Kelola seluruh perjalanan pengunjung dalam satu platform, mulai dari penjualan tiket, validasi akses, manajemen antrean, hingga pelaporan operasional. Tetap berjalan meski koneksi internet tidak selalu tersedia.",
+ "subtitle": "Platform Tiket dan Akses Terintegrasi Pertama di Indonesia",
+ "cta": "Lihat selengkapnya",
+ "stats": {
+ "timeAccess": "Time access",
+ "seconds": "detik",
+ "avgValidation": "Rerata waktu validasi",
+ "ticketsSold": "Tiket terjual",
+ "todayAllChannels": "Hari ini · semua kanal",
+ "sync": "Sinkronisasi",
+ "txSynced": "transaksi Berhasil disinkronkan",
+ "visitorOps": "Visitor operations",
+ "activeZones": "3 zona antrean aktif"
+ }
+ },
+ "Why": {
+ "title": "Dibangun untuk operasional yang tidak boleh berhenti",
+ "desc": "Bukan hanya sekadar sistem tiket, Pintu Masuk adalah infrastruktur akses yang tetap bekerja saat sinyal hilang, saat antrean memanjang, dan saat kamu butuh keputusan cepat berbasis data.",
+ "items": {
+ "offline": {
+ "title": "Offline-first",
+ "desc": "Transaksi tetap tercatat lokal saat internet putus, lalu sinkron otomatis begitu jaringan kembali."
+ },
+ "speed": {
+ "title": "Speed Validation",
+ "desc": "QR, RFID, dan gate barrier tervalidasi dalam hitungan milidetik, bahkan saat antrean sedang padat."
+ },
+ "flexibility": {
+ "title": "Flexibility Model",
+ "desc": "Cloud, on-premise, perpetual license, atau rental dapat disesuaikan dengan durasi dan infrastruktur kamu."
+ }
+ }
+ },
+ "Ecosystem": {
+ "title": "Empat langkah. Satu ekosistem.",
+ "desc": "Setiap tahap saling terintegrasi dalam satu platform, sehingga data mengalir otomatis dari pembelian tiket hingga pelaporan operasional tanpa proses manual atau input berulang.",
+ "ticketing": {
+ "title": "Ticketing",
+ "desc": "Jual tiket online melalui web, aplikasi, atau loket. Harga dan kuota selalu tersinkron dalam satu sistem."
+ },
+ "access": {
+ "title": "Access Management",
+ "desc": "Validasi tiket menggunakan QR Code, RFID, atau gate otomatis. Proses cepat, akurat, dan selesai dalam hitungan detik."
+ },
+ "visitor": {
+ "title": "Visitor Operations",
+ "desc": "Atur antrean, kapasitas zona, dan jadwal kunjungan secara real-time untuk pengalaman yang lebih tertib."
+ },
+ "report": {
+ "title": "Report",
+ "desc": "Pantau transaksi, jumlah pengunjung, okupansi, dan performa operasional melalui satu dashboard."
+ },
+ "stats": {
+ "qr": "QR Code",
+ "gate": "Gate Barrier",
+ "rfid": "RFID",
+ "avg": "rata-rata",
+ "queue": "124 pengunjung dalam antrean",
+ "revenue": "Revenue",
+ "visitors": "Visitor",
+ "checkin": "Check-in"
+ }
+ },
+ "Destinations": {
+ "title": "Satu platform, dirancang untuk setiap jenis destinasi",
+ "desc": "Pintu Masuk beradaptasi dengan proses bisnis Anda, karena Kami percaya setiap industri memiliki alur pengunjung dan kebutuhan operasional yang berbeda.",
+ "title21": "Satu platform,",
+ "title22": "Berbagai aplikasi untuk setiap kebutuhan.",
+ "desc2": "Penjualan tiket, check-in, hingga okupansi zona diperbarui secara real-time tanpa perlu menunggu untuk tahu apa yang sedang terjadi.",
+ "items": {
+ "themePark": {
+ "title": "Theme Park",
+ "desc": "Kelola wahana dan tiket harian dengan sistem antrean yang lebih efisien."
+ },
+ "event": {
+ "title": "Event & Festival",
+ "desc": "Tangani ribuan pengunjung dengan penjualan tiket dan validasi akses yang cepat."
+ },
+ "museum": {
+ "title": "Museum",
+ "desc": "Ciptakan pengalaman kunjungan yang lebih tertata melalui pengaturan jadwal dan kapasitas."
+ },
+ "stadium": {
+ "title": "Stadium & Venue",
+ "desc": "Percepat proses masuk dengan validasi tiket yang akurat, bahkan saat antrean membludak."
+ },
+ "exhibition": {
+ "title": "Exhibition",
+ "desc": "Fleksibel untuk pameran beberapa hari dengan pengaturan akses tiket yang terintegrasi."
+ }
+ },
+ "apps": {
+ "online": {
+ "title": "Pemesanan Online",
+ "desc": "Kelola reservasi dan pembelian tiket dari berbagai kanal digital."
+ },
+ "cashier": {
+ "title": "Beli di Kasir",
+ "desc": "Penjualan tiket di kasir untuk melayani pengunjung secara langsung."
+ },
+ "pos": {
+ "title": "POS Offline (Multi Outlet)",
+ "desc": "Catat transaksi, redeem booking, dan operasikan kasir tanpa bergantung pada internet."
+ },
+ "queue": {
+ "title": "Queue App",
+ "desc": "Membantu mengatur antrean masuk agar pengalaman pengunjung lebih nyaman."
+ },
+ "admin": {
+ "title": "Web Admin",
+ "desc": "Pusat kontrol untuk mengelola data master, transaksi, dan sinkronisasi sistem."
+ }
+ }
+ },
+ "Pricing": {
+ "title1": "Mulai sesuai kebutuhan,",
+ "title2": "berkembang tanpa batas",
+ "desc": "Tidak perlu membayar lebih untuk fitur yang tidak digunakan. Pilih paket yang paling sesuai, lalu tingkatkan kapan saja seiring berkembangnya operasional Anda.",
+ "contactUs": "Hubungi Kami",
+ "whatYouGet": "Yang kamu dapatkan",
+ "rental": {
+ "title": "Rental",
+ "tags": [
+ "Event",
+ "Festival",
+ "Konser"
+ ],
+ "desc": "Solusi praktis untuk acara berdurasi pendek. Sewa perangkat dan sistem lengkap, siap pakai dalam hitungan hari.",
+ "f1": "Ticketing & QR check-in",
+ "f2": "Sewa perangkat gate & scanner",
+ "f3": "Dashboard monitoring real-time",
+ "f4": "Laporan pengunjung H+1",
+ "f5": "Setup & teardown cepat (siap H-1)"
+ },
+ "subscription": {
+ "title": "Subscription",
+ "tags": [
+ "Tempat wisata",
+ "Waterpark"
+ ],
+ "desc": "Model langganan bulanan untuk destinasi yang beroperasi setiap hari, tanpa investasi infrastruktur di awal.",
+ "f1": "Semua fitur Rental",
+ "f2": "Multi outlet & multi gate",
+ "f3": "Manajemen kuota & jadwal kunjungan",
+ "f4": "Dashboard operasional bulanan",
+ "f5": "Update fitur otomatis"
+ },
+ "onPremise": {
+ "title": "On-Premise",
+ "tags": [
+ "Enterprise",
+ "Instansi"
+ ],
+ "desc": "Sistem berjalan di server dan jaringan milik kamu sendiri, untuk kontrol penuh atas data dan keamanan.",
+ "f1": "Semua fitur Subscription",
+ "f2": "Instalasi di server lokal",
+ "f3": "Integrasi sistem internal (SSO, ERP)",
+ "f4": "Kontrol akses & keamanan lanjutan",
+ "f5": "Dukungan deployment khusus"
+ },
+ "buyOut": {
+ "title": "Buy Out",
+ "tags": [
+ "Perusahaan",
+ "Integrator",
+ "Developer"
+ ],
+ "desc": "Solusi dengan lisensi permanen untuk organisasi yang menginginkan implementasi jangka panjang dan kontrol operasional yang lebih luas.",
+ "f1": "Lisensi Permanen",
+ "f2": "Dokumentasi teknis lengkap",
+ "f3": "Pelatihan tim engineering internal",
+ "f4": "Bebas biaya lisensi berkelanjutan",
+ "f5": "Priority support 1 tahun pertama"
+ }
+ },
+ "Contact": {
+ "eyebrow": "Hubungi kami",
+ "title": "Mari diskusikan kebutuhan operasional kamu",
+ "desc": "Tim kami siap membantu menentukan paket yang paling sesuai dengan skala dan jenis acara atau destinasi kamu.",
+ "email": "Email",
+ "phone": "Telepon / WhatsApp",
+ "office": "Kantor",
+ "form": {
+ "title": "Kirim pesan ke tim kami",
+ "name": "Nama lengkap",
+ "needs": "Ceritakan kebutuhan kamu",
+ "submit": "Kirim Pesan",
+ "note": "Tim kami merespons dalam 1x24 jam pada hari kerja.",
+ "placeholderName": "John Doe",
+ "placeholderEmail": "nama@perusahaan.com",
+ "placeholderNeeds": "Jenis acara atau destinasi, estimasi jumlah pengunjung, dan paket yang kamu pertimbangkan."
+ }
+ },
+ "Footer": {
+ "desc": "Kelola tiket dan akses terintegrasi untuk taman hiburan, event, museum, dan venue di seluruh Indonesia.",
+ "links": "Quick Links",
+ "copyright": "Pintu Masuk. Seluruh hak cipta dilindungi."
+ }
+}
\ No newline at end of file
diff --git a/apps/product-site/next.config.ts b/apps/product-site/next.config.ts
new file mode 100644
index 0000000..815c259
--- /dev/null
+++ b/apps/product-site/next.config.ts
@@ -0,0 +1,10 @@
+import type { NextConfig } from "next";
+import createNextIntlPlugin from 'next-intl/plugin';
+
+const withNextIntl = createNextIntlPlugin();
+
+const nextConfig: NextConfig = {
+ /* config options here */
+};
+
+export default withNextIntl(nextConfig);
diff --git a/apps/product-site/package.json b/apps/product-site/package.json
new file mode 100644
index 0000000..c2626dd
--- /dev/null
+++ b/apps/product-site/package.json
@@ -0,0 +1,32 @@
+{
+ "name": "product-site",
+ "version": "0.1.0",
+ "private": true,
+ "scripts": {
+ "copy:brand": "node ../../packages/brand/scripts/copy-brand-assets.js",
+ "dev": "pnpm run copy:brand && next dev",
+ "build": "pnpm run copy:brand && next build",
+ "start": "next start",
+ "lint": "eslint \"src/**/*.ts*\"",
+ "typecheck": "tsc --noEmit"
+ },
+ "dependencies": {
+ "@repo/brand": "workspace:*",
+ "next": "16.2.12",
+ "next-intl": "^4.13.4",
+ "react": "19.2.4",
+ "react-dom": "19.2.4"
+ },
+ "devDependencies": {
+ "@repo/eslint-config": "workspace:*",
+ "@repo/typescript-config": "workspace:*",
+ "@tailwindcss/postcss": "^4",
+ "@types/node": "^20",
+ "@types/react": "^19",
+ "@types/react-dom": "^19",
+ "eslint": "^9",
+ "eslint-config-next": "16.2.12",
+ "tailwindcss": "^4",
+ "typescript": "^5"
+ }
+}
diff --git a/apps/product-site/postcss.config.mjs b/apps/product-site/postcss.config.mjs
new file mode 100644
index 0000000..61e3684
--- /dev/null
+++ b/apps/product-site/postcss.config.mjs
@@ -0,0 +1,7 @@
+const config = {
+ plugins: {
+ "@tailwindcss/postcss": {},
+ },
+};
+
+export default config;
diff --git a/apps/product-site/src/app/[locale]/layout.tsx b/apps/product-site/src/app/[locale]/layout.tsx
new file mode 100644
index 0000000..c072e36
--- /dev/null
+++ b/apps/product-site/src/app/[locale]/layout.tsx
@@ -0,0 +1,66 @@
+import type { Metadata } from "next";
+import { Geist, Geist_Mono, Instrument_Sans } from "next/font/google";
+import { NextIntlClientProvider } from 'next-intl';
+import { getMessages, getTranslations } from 'next-intl/server';
+import { notFound } from 'next/navigation';
+import { routing } from '@/i18n/routing';
+import "../globals.css";
+
+const geistSans = Geist({
+ variable: "--font-geist-sans",
+ subsets: ["latin"],
+});
+
+const geistMono = Geist_Mono({
+ variable: "--font-geist-mono",
+ subsets: ["latin"],
+});
+
+const instrumentSans = Instrument_Sans({
+ variable: "--font-instrument-sans",
+ subsets: ["latin"],
+});
+
+export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise {
+ const { locale } = await params;
+ const t = await getTranslations({ locale, namespace: 'Metadata' });
+ return {
+ title: t('title'),
+ description: t('description'),
+ icons: {
+ icon: "/brand/favicon.svg"
+ }
+ };
+}
+
+export default async function RootLayout({
+ children,
+ params,
+}: Readonly<{
+ children: React.ReactNode;
+ params: Promise<{ locale: string }>;
+}>) {
+ const { locale } = await params;
+ if (!routing.locales.includes(locale as any)) {
+ notFound();
+ }
+
+ const messages = await getMessages();
+
+ return (
+
+
+
+
+
+
+ {children}
+
+
+
+ );
+}
+
diff --git a/apps/product-site/src/app/[locale]/page.tsx b/apps/product-site/src/app/[locale]/page.tsx
new file mode 100644
index 0000000..1a903d8
--- /dev/null
+++ b/apps/product-site/src/app/[locale]/page.tsx
@@ -0,0 +1,42 @@
+import { Navbar } from '@/components/sections/Navbar';
+import { Hero } from '@/components/sections/Hero';
+import { Why } from '@/components/sections/Why';
+import { Ecosystem } from '@/components/sections/Ecosystem';
+import { Destinations } from '@/components/sections/Destinations';
+import { Dashboard } from '@/components/sections/Dashboard';
+import { Pricing } from '@/components/sections/Pricing';
+import { Contact } from '@/components/sections/Contact';
+import { Footer } from '@/components/sections/Footer';
+
+export default function Page() {
+ return (
+
+ {/* ============ FIXED NAV ============ */}
+
+
+ {/* ============ HERO ============ */}
+
+
+ {/* ============ WHY SECTION ============ */}
+
+
+ {/* ============ ECOSYSTEM / BENTO ============ */}
+
+
+ {/* ============ DESTINATIONS (carousel) ============ */}
+
+
+ {/* ============ DASHBOARD ============ */}
+
+
+ {/* ============ PRICING ============ */}
+
+
+ {/* ============ CONTACT ============ */}
+
+
+ {/* ============ FOOTER ============ */}
+
+
+ );
+}
diff --git a/apps/product-site/src/app/globals.css b/apps/product-site/src/app/globals.css
new file mode 100644
index 0000000..d4f1b36
--- /dev/null
+++ b/apps/product-site/src/app/globals.css
@@ -0,0 +1,2052 @@
+@import 'tailwindcss';
+
+@theme {
+ /* Orange Scale */
+ --color-orange-50: #fef0e7;
+ --color-orange-100: #fedac1;
+ --color-orange-200: #fdc39b;
+ --color-orange-300: #fcaa75;
+ --color-orange-400: #fb924f;
+ --color-orange-500: #f66b0e;
+ --color-orange-600: #d65a06;
+ --color-orange-700: #ab4804;
+ --color-orange-800: #803603;
+ --color-orange-900: #552402;
+
+ /* Lime Scale */
+ --color-lime-50: #f7fee5;
+ --color-lime-100: #ecfcbe;
+ --color-lime-200: #dff997;
+ --color-lime-300: #d2f770;
+ --color-lime-400: #c6f449;
+ --color-lime-500: #b9f001;
+ --color-lime-600: #93bf00;
+ --color-lime-700: #6d8e00;
+ --color-lime-800: #475d00;
+ --color-lime-900: #222d00;
+
+ /* Navy/Blue Scale */
+ --color-blue-50: #eef3f6;
+ --color-blue-100: #d4e1ea;
+ --color-blue-200: #b9d0dd;
+ --color-blue-300: #9fbdd1;
+ --color-blue-400: #84acc4;
+ --color-blue-500: #699ab8;
+ --color-blue-600: #205375;
+ --color-blue-700: #1a425d;
+ --color-blue-800: #15354a;
+ --color-blue-900: #112b3c;
+
+ /* Other Brand Colors */
+ --color-cream-50: #f5f6f3;
+ --color-white-10: rgba(255, 255, 255, 0.1);
+ --color-ink-900: #112b3c;
+ --color-ink-600: #51606c;
+ --color-ink-400: #8b98a2;
+ --color-line: #e1e5e3;
+ --color-line-dark: rgba(255, 255, 255, 0.14);
+
+ /* Fonts */
+ --font-display: var(--font-instrument-sans), 'Instrument Sans', sans-serif;
+ --font-body: var(--font-geist-sans), 'Geist', sans-serif;
+ --font-mono: var(--font-geist-mono), 'IBM Plex Mono', monospace;
+
+ /* Radii */
+ --radius-2xl: 28px;
+ --radius-xl: 20px;
+ --radius-lg: 16px;
+ --radius-md: 12px;
+ --radius-sm: 8px;
+ --radius-full: 999px;
+
+ /* Brand Scales */
+ --color-brand-1-50: var(--color-blue-50);
+ --color-brand-1-100: var(--color-blue-100);
+ --color-brand-1-200: var(--color-blue-200);
+ --color-brand-1-300: var(--color-blue-300);
+ --color-brand-1-400: var(--color-blue-400);
+ --color-brand-1-500: var(--color-blue-500);
+ --color-brand-1-600: var(--color-blue-600);
+ --color-brand-1-700: var(--color-blue-700);
+ --color-brand-1-800: var(--color-blue-800);
+ --color-brand-1-900: var(--color-blue-900);
+
+ --color-brand-2-50: var(--color-orange-50);
+ --color-brand-2-100: var(--color-orange-100);
+ --color-brand-2-200: var(--color-orange-200);
+ --color-brand-2-300: var(--color-orange-300);
+ --color-brand-2-400: var(--color-orange-400);
+ --color-brand-2-500: var(--color-orange-500);
+ --color-brand-2-600: var(--color-orange-600);
+ --color-brand-2-700: var(--color-orange-700);
+ --color-brand-2-800: var(--color-orange-800);
+ --color-brand-2-900: var(--color-orange-900);
+
+ --color-brand-3-50: var(--color-lime-50);
+ --color-brand-3-100: var(--color-lime-100);
+ --color-brand-3-200: var(--color-lime-200);
+ --color-brand-3-300: var(--color-lime-300);
+ --color-brand-3-400: var(--color-lime-400);
+ --color-brand-3-500: var(--color-lime-500);
+ --color-brand-3-600: var(--color-lime-600);
+ --color-brand-3-700: var(--color-lime-700);
+ --color-brand-3-800: var(--color-lime-800);
+ --color-brand-3-900: var(--color-lime-900);
+}
+
+@layer base {
+ * {
+ box-sizing: border-box;
+ }
+
+ html {
+ scroll-behavior: smooth;
+ }
+
+ body {
+ margin: 0;
+ font-family: var(--font-body);
+ color: var(--color-ink-900);
+ background: var(--color-white);
+ -webkit-font-smoothing: antialiased;
+ }
+
+ h1,
+ h2,
+ h3,
+ h4 {
+ font-family: var(--font-display);
+ margin: 0;
+ letter-spacing: -0.02em;
+ color: var(--color-ink-900);
+ font-weight: 700;
+ }
+
+ p {
+ margin: 0;
+ }
+ ul {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+ }
+ svg {
+ display: block;
+ }
+ img {
+ max-width: 100%;
+ display: block;
+ }
+ button {
+ font-family: inherit;
+ }
+
+ a:focus-visible,
+ button:focus-visible,
+ input:focus-visible,
+ textarea:focus-visible {
+ outline: 2px solid var(--color-brand-2-500);
+ outline-offset: 2px;
+ }
+}
+
+/* Animations that are hard to replicate purely via utility classes */
+@layer utilities {
+
+
+ .drift-a {
+ animation: driftA 7s ease-in-out infinite;
+ }
+
+ .drift-b {
+ animation: driftB 8s ease-in-out infinite;
+ }
+
+ @keyframes driftA {
+ 0%,
+ 100% {
+ transform: translateX(0);
+ }
+ 50% {
+ transform: translateX(-210px);
+ }
+ }
+
+ @keyframes driftB {
+ 0%,
+ 100% {
+ transform: translateX(-24px);
+ }
+ 50% {
+ transform: translateX(10px);
+ }
+ }
+
+ .chip-pulse {
+ animation: chipPulse 2.6s ease-out infinite;
+ }
+
+ @keyframes chipPulse {
+ 0% {
+ transform: scale(1);
+ }
+ 50% {
+ transform: scale(1.05);
+ }
+ 100% {
+ transform: scale(1);
+ }
+ }
+
+ /* Specific background overlays that need psuedo elements */
+ .hero-bg {
+ background-image: radial-gradient(circle, rgba(255, 255, 255, 0.09) 1.3px, transparent 1px);
+ background-size: 22px 22px;
+ }
+
+ .hero-bg::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ right: 0;
+ width: 46%;
+ height: 100%;
+ background: linear-gradient(155deg, var(--color-brand-1-600) 0%, var(--color-brand-1-900) 55%);
+ clip-path: polygon(38% 0, 100% 0, 100% 100%, 68% 100%);
+ opacity: 0.9;
+ pointer-events: none;
+ }
+
+ .why-card-decorator {
+ position: relative;
+ overflow: hidden;
+ }
+
+ .why-card-decorator::after {
+ content: '';
+ position: absolute;
+ right: -65px;
+ bottom: -85px;
+ width: 150px;
+ height: 150px;
+ border-radius: 20%;
+ background: var(--color-brand-2-500);
+ transform: rotate(-29deg);
+ }
+
+ .why-card-decorator::before {
+ content: '';
+ position: absolute;
+ top: -22px;
+ right: -106px;
+ width: 172px;
+ height: 178px;
+ border-radius: 20%;
+ background: linear-gradient(170deg, var(--color-brand-1-600) 0%, var(--color-brand-1-900) 85%);
+ transform: rotate(-16deg);
+ }
+}
+
+@media (prefers-reduced-motion: reduce) {
+ * {
+ animation: none !important;
+ transition: none !important;
+ }
+}
+
+.container {
+ width: 100%;
+ max-width: 1180px;
+ margin: 0 auto;
+ padding: 0 32px;
+}
+
+.container-lg {
+ width: 100%;
+ max-width: 1480px;
+ margin: 0 auto;
+ padding: 0 18px;
+}
+
+/* ---------- Buttons ---------- */
+.btn {
+ display: inline-flex;
+ align-items: center;
+ gap: 8px;
+ padding: 13px 22px;
+ border-radius: var(--radius-sm);
+ font-family: var(--font-body);
+ font-weight: 600;
+ font-size: 14px;
+ border: none;
+ cursor: pointer;
+ transition:
+ transform 0.15s ease,
+ background 0.15s ease;
+}
+
+.btn:hover {
+ transform: translateY(-1px);
+}
+
+.btn-orange {
+ background: var(--color-brand-2-500);
+ color: var(--color-white);
+}
+
+.btn-navy {
+ background: var(--color-brand-1-600);
+ color: var(--color-white);
+}
+
+.btn-border-orange {
+ border: 1px solid var(--color-brand-2-500);
+ color: var(--color-white);
+}
+
+.btn-orange:hover {
+ background: var(--color-brand-2-600);
+}
+
+.btn-orange svg {
+ stroke: var(--color-white);
+}
+
+.btn-icon-circle {
+ width: 20px;
+ height: 20px;
+ border-radius: 50%;
+ background: rgba(255, 255, 255, 0.25);
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ flex-shrink: 0;
+}
+
+.btn-icon-circle i {
+ font-size: 12px;
+ color: #fff;
+ line-height: 1;
+}
+
+.eyebrow {
+ display: inline-flex;
+ align-items: center;
+ gap: 8px;
+ font-size: 13px;
+ font-weight: 600;
+ letter-spacing: 0.02em;
+ font-family: var(--font-body);
+}
+
+.eyebrow-light {
+ color: var(--color-line);
+}
+
+.eyebrow-pill {
+ border: 1px solid rgba(255, 255, 255, 0.25);
+ background-color: var(--color-white-10);
+ border-radius: var(--radius-full);
+ padding: 9px 18px 9px 14px;
+}
+
+.dot {
+ width: 6px;
+ height: 6px;
+ border-radius: 50%;
+ background: var(--color-white);
+ flex-shrink: 0;
+}
+
+.dot-orange {
+ width: 6px;
+ height: 6px;
+ border-radius: 50%;
+ background: var(--color-brand-2-500);
+ flex-shrink: 0;
+}
+
+/* ---------- Nav ---------- */
+.nav-wrapper {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ z-index: 1000;
+ pointer-events: none; /* Let clicks pass through empty space */
+}
+
+.nav-wrapper .container {
+ pointer-events: auto; /* Enable clicks on the nav itself */
+}
+
+.nav {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 26px 0;
+ border-radius: var(--radius-md);
+ margin-top: 0;
+ border: 1px solid transparent;
+ transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1);
+}
+
+.nav-wrapper.floating .nav {
+ margin-top: 16px;
+ background: var(--color-brand-1-900);
+ backdrop-filter: blur(14px);
+ -webkit-backdrop-filter: blur(14px);
+ border: 1px solid rgba(255, 255, 255, 0.1);
+ padding: 12px 26px;
+ box-shadow: 0 24px 48px -20px rgba(0, 0, 0, 0.55);
+}
+
+.brand {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+}
+
+.brand-mark {
+ /* height: 34px; */
+ width: 150px;
+ border-radius: var(--radius-md);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.brand-name {
+ background-image: url('/brand/logo.png');
+ font-family: var(--font-body);
+ font-weight: 700;
+ font-size: 16.5px;
+}
+
+.nav-links {
+ display: flex;
+ align-items: center;
+ gap: 32px;
+}
+
+.nav-divider {
+ width: 1px;
+ height: 24px;
+ background-color: rgba(255, 255, 255, 0.2);
+}
+
+.nav-links a {
+ font-family: var(--font-body);
+ font-size: 14px;
+ font-weight: 500;
+ opacity: 0.85;
+}
+
+.nav-links a:hover {
+ opacity: 1;
+}
+
+.nav-toggle {
+ display: none;
+ background: none;
+ border: none;
+ cursor: pointer;
+ padding: 4px;
+}
+
+/* ---------- Hero ---------- */
+.hero {
+ position: relative;
+ background: var(--color-brand-1-900);
+ background-image: radial-gradient(circle, rgba(255, 255, 255, 0.09) 1.3px, transparent 1px);
+ background-size: 22px 22px;
+ overflow: hidden;
+}
+
+.hero::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ right: 0;
+ width: 46%;
+ height: 100%;
+ background: linear-gradient(155deg, var(--color-brand-1-600) 0%, var(--color-brand-1-900) 55%);
+ clip-path: polygon(38% 0, 100% 0, 100% 100%, 68% 100%);
+ opacity: 0.9;
+ pointer-events: none;
+}
+
+.hero-inner {
+ position: relative;
+ z-index: 2;
+ padding: 94px 0 64px;
+}
+
+.hero h1 {
+ color: var(--color-white);
+ font-size: 60px;
+ line-height: 1.08;
+ font-weight: 800;
+ margin-top: 44px;
+}
+
+.stat-row {
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ gap: 16px;
+ margin: 44px 0px;
+}
+
+.stat-card {
+ background: var(--color-white);
+ border-radius: var(--radius-lg);
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ padding: 18px 18px 16px;
+ box-shadow: 0 20px 40px -18px rgba(0, 0, 0, 0.45);
+}
+
+.stat-icon {
+ width: 42px;
+ height: 42px;
+ border-radius: var(--radius-sm);
+ background: var(--color-cream-50);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin-bottom: 14px;
+}
+
+.stat-icon svg {
+ width: 18px;
+ height: 18px;
+ stroke: var(--color-brand-1-900);
+}
+
+.stat-icon i {
+ font-size: 18px;
+ color: var(--color-brand-1-900);
+ line-height: 1;
+}
+
+.stat-label {
+ font-size: 12px;
+ color: var(--color-ink-400);
+ text-transform: uppercase;
+ font-family: var(--font-mono);
+}
+
+.stat-value {
+ font-family: var(--font-body);
+ font-weight: 800;
+ font-size: 36px;
+ margin-top: 6px;
+}
+
+.stat-value span {
+ font-size: 12px;
+ font-weight: 600;
+ color: var(--color-ink-400);
+ margin-left: 3px;
+}
+
+.stat-sub {
+ font-size: 14px;
+ color: var(--color-ink-400);
+ margin-top: 4px;
+}
+
+.stat-bars {
+ display: flex;
+ align-items: flex-end;
+ gap: 3px;
+ height: 48px;
+ margin-bottom: 12px;
+}
+
+.stat-bars span {
+ width: 16px;
+ border-radius: 2px;
+ background: var(--color-brand-3-400);
+ display: block;
+}
+
+.hero-body {
+ max-width: 720px;
+}
+
+.hero-body p {
+ color: rgba(255, 255, 255, 0.62);
+ font-size: 18px;
+ line-height: 1.7;
+ margin-top: 14px;
+}
+
+.hero-body .btn {
+ margin-top: 26px;
+}
+
+/* ---------- Why section ---------- */
+.why {
+ padding: 120px 0 100px;
+}
+
+.why-grid {
+ display: grid;
+ grid-template-columns: 0.85fr 1fr;
+ gap: 64px;
+ align-items: start;
+}
+
+.why h2 {
+ font-size: 34px;
+ line-height: 1.18;
+}
+
+.why-grid p {
+ color: var(--color-ink-600);
+ font-size: 15px;
+ line-height: 1.75;
+ margin-top: 18px;
+ max-width: 420px;
+}
+
+.why-arrow {
+ margin-top: 56px;
+ width: 58px;
+ height: 58px;
+ border-radius: var(--radius-lg);
+ background: var(--color-cream-50);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.why-arrow i.uil {
+ font-size: 24px;
+ color: var(--color-brand-1-600);
+}
+
+/* sticky headline: stays in view while the 3 point-cards scroll past on the right */
+.why-sticky {
+ position: sticky;
+ top: 168px;
+}
+
+.why-cards {
+ display: flex;
+ flex-direction: column;
+ gap: 28px;
+}
+.why-card {
+ position: relative;
+ background: var(--color-cream-50);
+ border-radius: var(--radius-xl);
+ padding: 30px 32px;
+ overflow: hidden;
+}
+
+.why-card::after {
+ content: '';
+ position: absolute;
+ right: -65px;
+ bottom: -85px;
+ width: 150px;
+ height: 150px;
+ border-radius: 20%;
+ background: var(--color-brand-2-500);
+ transform: rotate(-29deg);
+}
+
+.why-card::before {
+ content: '';
+ position: absolute;
+ top: -22px;
+ right: -106px;
+ width: 172px;
+ height: 178px;
+ border-radius: 20%;
+ background: linear-gradient(170deg, var(--color-brand-1-600) 0%, var(--color-brand-1-900) 85%);
+ transform: rotate(-16deg);
+}
+
+.why-card-icon {
+ width: 38px;
+ height: 38px;
+ border-radius: var(--radius-md);
+ background: var(--color-white);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin-bottom: 20px;
+ position: relative;
+ z-index: 1;
+}
+
+.why-card-icon svg {
+ width: 18px;
+ height: 18px;
+ stroke: var(--color-brand-1-900);
+}
+
+.why-card h3 {
+ font-size: 18px;
+ position: relative;
+ margin-top: 42px;
+ z-index: 1;
+}
+
+.why-card p {
+ font-size: 14px;
+ color: var(--color-ink-600);
+ line-height: 1.65;
+ margin-top: 8px;
+ max-width: 78%;
+ position: relative;
+ z-index: 1;
+}
+
+/* ---------- Ecosystem / bento ---------- */
+.ecosystem {
+ padding: 100px 0 120px;
+ background: var(--color-white);
+}
+
+.ecosystem-head {
+ text-align: center;
+ max-width: 640px;
+ margin: 0 auto 56px;
+}
+
+.ecosystem-head h2 {
+ font-size: 32px;
+}
+
+.ecosystem-head p {
+ color: var(--color-ink-600);
+ font-size: 15px;
+ line-height: 1.7;
+ margin-top: 14px;
+}
+
+.bento {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: 20px;
+ grid-auto-rows: 1fr;
+}
+
+.bento-card {
+ background: var(--color-cream-50);
+ border-radius: var(--radius-md);
+ padding: 32px 34px;
+ min-height: 360px;
+ min-width: 0;
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+}
+
+.bento-card h3 {
+ font-size: 20px;
+}
+
+.bento-card > p {
+ font-size: 14px;
+ color: var(--color-ink-600);
+ line-height: 1.65;
+ margin-top: 8px;
+ max-width: auto;
+}
+
+.bento-illustration {
+ margin-bottom: 24px;
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+}
+
+/* ticketing pills — ambient marquee drift */
+.ticket-rows {
+ display: flex;
+ flex-direction: column;
+ justify-content: end;
+ flex: 1;
+ gap: 18px;
+}
+
+.ticket-row {
+ position: relative;
+ overflow: hidden;
+}
+
+.ticket-row::before,
+.ticket-row::after {
+ content: '';
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ width: 26px;
+ z-index: 2;
+}
+
+.ticket-row::before {
+ left: 0;
+ background: linear-gradient(to right, var(--color-cream-50), transparent);
+}
+
+.ticket-row::after {
+ right: 0;
+ background: linear-gradient(to left, var(--color-cream-50), transparent);
+}
+
+.ticket-track {
+ display: flex;
+ gap: 8px;
+ white-space: nowrap;
+}
+
+.ticket-track.drift-a {
+ animation: driftA 7s ease-in-out infinite;
+}
+
+.ticket-track.drift-b {
+ animation: driftB 8s ease-in-out infinite;
+}
+
+@keyframes driftA {
+ 0%,
+ 100% {
+ transform: translateX(0);
+ }
+
+ 50% {
+ transform: translateX(-210px);
+ }
+}
+
+@keyframes driftB {
+ 0%,
+ 100% {
+ transform: translateX(-24px);
+ }
+
+ 50% {
+ transform: translateX(10px);
+ }
+}
+
+.pill {
+ border-radius: var(--radius-sm);
+ padding: 12px;
+ font-size: 12px;
+ font-weight: 600;
+ font-family: var(--font-mono);
+ display: inline-flex;
+ align-items: center;
+}
+.pill-navy {
+ background: var(--color-brand-1-900);
+ color: var(--color-white);
+}
+.pill-outline {
+ background: transparent;
+ border: 1px solid var(--color-line);
+ color: var(--color-ink-400);
+}
+.pill-lime {
+ background: var(--color-brand-3-400);
+ color: var(--color-brand-1-900);
+}
+.pill-orange {
+ background: var(--color-brand-2-500);
+ color: var(--color-white);
+}
+
+.ticket-track .pill {
+ position: relative;
+ padding-left: 16px;
+ padding-right: 16px;
+}
+
+.ticket-track .pill::before,
+.ticket-track .pill::after {
+ content: '';
+ position: absolute;
+ top: 50%;
+ width: 12px;
+ height: 12px;
+ border-radius: 50%;
+ background: var(--color-cream-50);
+ transform: translateY(-50%);
+}
+.ticket-track .pill::before {
+ left: -4px;
+}
+.ticket-track .pill::after {
+ right: -4px;
+}
+
+/* access management */
+.access-illustration {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ gap: 48px;
+ justify-content: left;
+}
+
+.chip-row {
+ display: flex;
+ gap: 12px;
+}
+
+.chip {
+ width: 86px;
+ height: 122px;
+ padding: 16px 0;
+ border-radius: var(--radius-lg);
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: space-between;
+ gap: 6px;
+ border: 1px solid var(--color-line);
+}
+
+.chip i {
+ font-size: 26px;
+ color: var(--color-brand-1-900);
+}
+
+.chip span {
+ font-size: 12px;
+ color: var(--color-ink-400);
+ text-align: center;
+ font-weight: 600;
+ font-family: var(--font-mono);
+}
+
+.chip.active {
+ background: var(--color-brand-3-400);
+ /* border-color: var(--color-brand-1-900); */
+ animation: chipPulse 2.6s ease-out infinite;
+}
+
+.chip.active svg {
+ stroke: var(--color-brand-1-900);
+}
+
+.chip.active span {
+ color: var(--color-brand-1-900);
+}
+
+@keyframes chipPulse {
+ 0%,
+ 100% {
+ box-shadow: 0 0 0 0 rgba(185, 240, 1, 0.55);
+ }
+
+ 50% {
+ box-shadow: 0 0 0 9px rgba(185, 240, 1, 0);
+ }
+}
+
+.ring-wrap {
+ position: relative;
+ width: 140px;
+ height: 140px;
+ flex-shrink: 0;
+}
+
+.ring-wrap .ring-text {
+ position: absolute;
+ inset: 0;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+}
+
+.ring-text b {
+ font-size: 15px;
+ font-family: var(--font-body);
+}
+
+.ring-text small {
+ font-size: 8.5px;
+ color: var(--color-ink-400);
+}
+
+.ring-progress {
+ stroke-dasharray: 0 213.6;
+ transition: stroke-dasharray 1.2s cubic-bezier(0.16, 0.8, 0.44, 1);
+}
+
+/* report bars — reveal on scroll */
+.report-bars {
+ display: flex;
+ flex-direction: column;
+ justify-content: end;
+ gap: 18px;
+ flex: 1;
+}
+
+.report-bar-row {
+ display: flex;
+ align-items: center;
+ gap: 16px;
+}
+
+.report-bar {
+ height: 42px;
+ border-radius: var(--radius-full);
+ flex-shrink: 0;
+ width: 0;
+ transition: width 1.1s cubic-bezier(0.16, 0.8, 0.44, 1);
+}
+
+.report-bar-value b {
+ display: block;
+ font-size: 14px;
+ font-family: var(--font-body);
+}
+
+.report-bar-value small {
+ font-size: 10px;
+ color: var(--color-ink-400);
+}
+
+/* visitor operations */
+.visitor-illustration {
+ margin-bottom: 22px;
+}
+
+.avatar-row {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+ margin-bottom: 16px;
+}
+
+.avatar-stack {
+ display: flex;
+}
+
+.avatar {
+ width: 28px;
+ height: 28px;
+ border-radius: 50%;
+ border: 2px solid var(--color-cream-50);
+ margin-left: -9px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.avatar:first-child {
+ margin-left: 0;
+}
+
+.avatar-row span {
+ font-size: 12px;
+ color: var(--color-ink-600);
+}
+
+.zone-grid {
+ display: grid;
+ grid-template-columns: repeat(4, 92px);
+ gap: 12px;
+}
+
+.zone-cell {
+ height: 84px;
+ border-radius: var(--radius-md);
+ animation: zonePulse 2.8s ease-in-out infinite;
+}
+
+.zone-cell:nth-child(1) {
+ animation-delay: 0s;
+}
+
+.zone-cell:nth-child(2) {
+ animation-delay: 0.15s;
+}
+
+.zone-cell:nth-child(3) {
+ animation-delay: 0.3s;
+}
+
+.zone-cell:nth-child(4) {
+ animation-delay: 0.45s;
+}
+
+.zone-cell:nth-child(5) {
+ animation-delay: 0.6s;
+}
+
+.zone-cell:nth-child(6) {
+ animation-delay: 0.75s;
+}
+
+.zone-cell:nth-child(7) {
+ animation-delay: 0.9s;
+}
+
+.zone-cell:nth-child(8) {
+ animation-delay: 1.05s;
+}
+
+@keyframes zonePulse {
+ 0%,
+ 100% {
+ opacity: 1;
+ }
+
+ 50% {
+ opacity: 0.4;
+ }
+}
+
+.bento-r1 {
+ grid-column: 1/2;
+ grid-row: 1/2;
+}
+
+.bento-r2 {
+ grid-column: 2/3;
+ grid-row: 1/2;
+}
+
+.bento-r3 {
+ grid-column: 1/2;
+ grid-row: 2/3;
+}
+
+.bento-r4 {
+ grid-column: 2/3;
+ grid-row: 2/3;
+}
+
+/* ---------- Destinations (carousel) ---------- */
+.destinations {
+ background-color: var(--color-brand-1-900);
+ background-image:
+ radial-gradient(circle, rgba(255, 255, 255, 0.07) 1px, transparent 1px),
+ linear-gradient(160deg, var(--color-brand-1-600) 0%, var(--color-brand-1-900) 70%);
+ background-size:
+ 22px 22px,
+ 100% 100%;
+ padding: 110px 0 90px;
+ height: 680px;
+}
+
+.destinations-head-row {
+ display: flex;
+ justify-content: space-between;
+ align-items: flex-end;
+ gap: 24px;
+ margin-bottom: 44px;
+ flex-wrap: wrap;
+}
+
+.destinations-head {
+ max-width: 600px;
+}
+
+.destinations-head h2 {
+ width: 420px;
+ color: var(--color-white);
+ font-size: 32px;
+ line-height: 1.2;
+}
+
+.destinations-head p {
+ color: rgba(255, 255, 255, 0.6);
+ font-size: 15px;
+ line-height: 1.7;
+ margin-top: 14px;
+}
+
+.dest-controls {
+ display: flex;
+ gap: 10px;
+ flex-shrink: 0;
+}
+
+.dest-btn {
+ width: 44px;
+ height: 44px;
+ border-radius: 50%;
+ border: 1px solid var(--color-line-dark);
+ background: transparent;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ cursor: pointer;
+ transition: background 0.15s;
+}
+
+.dest-btn:hover {
+ background: rgba(255, 255, 255, 0.08);
+}
+
+.dest-btn i {
+ font-size: 28px;
+ color: #fff;
+}
+
+.dest-viewport {
+ overflow: hidden;
+ padding: 52px 0 46px;
+ /* generous vertical room so the active card's shadow/lift never gets clipped */
+ margin: -24px 0 -46px;
+}
+
+.dest-track {
+ display: flex;
+ gap: 16px;
+ will-change: transform;
+ transition: transform 0.5s cubic-bezier(0.16, 0.8, 0.44, 1);
+}
+
+.dest-track.no-anim {
+ transition: none;
+}
+
+.dest-card {
+ flex: 0 0 auto;
+ width: 200px;
+ cursor: pointer;
+ background: var(--color-brand-1-600);
+ border: 1px solid var(--color-line-dark);
+ border-radius: var(--radius-xl);
+ padding: 30px 22px;
+ min-height: 216px;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ transition:
+ background 0.4s ease,
+ transform 0.5s cubic-bezier(0.16, 0.8, 0.44, 1),
+ box-shadow 0.4s ease,
+ width 0.5s cubic-bezier(0.16, 0.8, 0.44, 1);
+ cursor: pointer;
+}
+
+.dest-card h4 {
+ color: var(--color-white);
+ font-size: 18px;
+}
+
+.dest-card p {
+ color: rgba(255, 255, 255, 0.6);
+ font-size: 14px;
+ line-height: 1.6;
+ margin-top: 8px;
+}
+
+.dest-icon {
+ width: 40px;
+ height: 40px;
+ border-radius: var(--radius-md);
+ background: rgba(255, 255, 255, 0.1);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ order: 2;
+ margin-top: 18px;
+}
+
+.dest-icon i {
+ font-size: 24px;
+ color: var(--color-brand-1-600);
+}
+
+/* NOTE: width/padding/min-height are intentionally NOT changed here — animating those
+ forces layout reflow every frame and is what made this carousel feel janky before.
+ The "active" look is done with transform:scale (GPU-only) so width stays fixed at
+ 228px for every card, which the carousel JS's position math also depends on. */
+.dest-card.active {
+ background: var(--color-white);
+ box-shadow: 0 30px 60px -20px rgba(0, 0, 0, 0.5);
+ transform: translateY(-20px) scale(1.045);
+ width: 320px;
+}
+
+.dest-card.active h4 {
+ color: var(--color-brand-1-900);
+}
+
+.dest-card.active p {
+ color: var(--color-ink-600);
+}
+
+.dest-card.active .dest-icon {
+ background: var(--color-brand-3-400);
+}
+
+.dest-card.active .dest-icon i {
+ color: var(--color-brand-1-900);
+}
+
+.dest-dots {
+ display: flex;
+ justify-content: center;
+ gap: 8px;
+ margin-top: 36px;
+}
+
+.dest-dots button {
+ width: 7px;
+ height: 7px;
+ padding: 0;
+ border: none;
+ border-radius: 50%;
+ background: rgba(255, 255, 255, 0.25);
+ cursor: pointer;
+ transition:
+ width 0.25s,
+ background 0.25s;
+}
+
+.dest-dots button.on {
+ background: var(--color-brand-2-500);
+ width: 20px;
+ border-radius: 4px;
+}
+
+/* ---------- Dashboard Showcase ---------- */
+.dash-showcase {
+ padding: 112px 0 118px;
+ background: var(--color-white);
+}
+.dash-head {
+ max-width: 640px;
+ margin: 0 0 52px auto;
+ text-align: right;
+}
+.dash-head h2 {
+ font-size: 32px;
+ line-height: 1.25;
+}
+.dash-head p {
+ color: var(--color-ink-600);
+ font-size: 15px;
+ line-height: 1.7;
+ margin-top: 14px;
+}
+
+/* business-flow diagram: online booking / direct cashier both funnel into
+POS Offline, which registers the visitor into Queue App, syncing into
+Web Admin once online. */
+.dash-flow {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 0;
+}
+.dash-flow-row {
+ display: flex;
+ flex-direction: column;
+ gap: 16px;
+ flex-shrink: 0;
+}
+
+.dash-source-card {
+ background: var(--color-cream-50);
+ border: 1px solid var(--color-line);
+ border-radius: var(--radius-xl);
+ padding: 22px 22px;
+ text-align: left;
+ transition:
+ transform 0.2s ease,
+ box-shadow 0.2s ease,
+ border-color 0.2s ease;
+}
+/* NEW: hover effect — card lifts with a soft shadow and an accent-colored border */
+.dash-source-card:hover {
+ transform: translateY(-5px);
+ box-shadow: 0 22px 40px -22px rgba(17, 43, 60, 0.3);
+ border-color: var(--color-brand-1-600);
+}
+.dash-source-card.accent:hover {
+ border-color: var(--color-brand-3-400);
+ box-shadow: 0 22px 40px -18px rgba(0, 0, 0, 0.45);
+}
+.dash-source-card.wide {
+ max-width: 230px;
+ min-width: 180px;
+}
+.dash-source-card.accent {
+ background: var(--color-brand-1-900);
+ border-color: var(--color-brand-1-900);
+ color: var(--color-brand-3-400);
+}
+.dash-source-card.accent h4 {
+ color: var(--color-white);
+}
+.dash-source-card.accent p {
+ color: rgba(255, 255, 255, 0.62);
+}
+.dash-source-card.accent .dash-source-icon {
+ background: rgba(255, 255, 255, 0.1);
+}
+.dash-source-card.accent .dash-source-icon svg {
+ stroke: var(--color-brand-3-400);
+}
+
+.dash-source-icon {
+ width: 40px;
+ height: 40px;
+ border-radius: var(--radius-md);
+ background: var(--color-white);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin-bottom: 14px;
+ flex-shrink: 0;
+}
+.dash-source-icon i {
+ font-size: 18px;
+}
+.dash-source-card h4 {
+ font-size: 14px;
+}
+.dash-source-card p {
+ font-size: 12px;
+ color: var(--color-ink-600);
+ line-height: 1.55;
+ margin-top: 6px;
+}
+
+/* animated dashed connector between flow steps */
+/* CHANGED: connector arrows — thicker, curved, animated navy→orange gradient stroke (was a flat straight ink-400 dash) */
+.dash-flow-arrow {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-shrink: 0;
+ width: 44px;
+}
+.dash-flow-arrow svg.flow-curve {
+ width: 100%;
+ height: 20px;
+ overflow: visible;
+}
+.flow-dash {
+ fill: none;
+ stroke: url(#flowGrad);
+ stroke-width: 3;
+ stroke-linecap: round;
+ stroke-dasharray: 5 7;
+ vector-effect: non-scaling-stroke;
+ animation: flowDash 1s linear infinite;
+}
+.flow-head {
+ fill: none;
+ stroke: var(--color-brand-2-500);
+ stroke-width: 3;
+ stroke-linecap: round;
+ stroke-linejoin: round;
+ vector-effect: non-scaling-stroke;
+}
+@keyframes flowDash {
+ to {
+ stroke-dashoffset: -24;
+ }
+}
+
+/* NEW: merge connector — two separate curved arrows (Order Online + Buy at Cashier) flowing into POS Offline */
+.dash-flow-merge {
+ align-self: stretch;
+ flex-shrink: 0;
+ width: 60px;
+ min-height: 150px;
+}
+.dash-flow-merge svg.flow-curve {
+ width: 100%;
+ height: 100%;
+ overflow: visible;
+}
+
+/* NEW: plain animated arrow (uil-style chevron) shown only on mobile in place of the curved gradient connector */
+.flow-simple {
+ display: none;
+ align-items: center;
+ justify-content: center;
+ width: 100%;
+ height: 100%;
+ color: var(--color-brand-2-500);
+}
+.flow-simple i {
+ font-size: 24px;
+ margin: 12px 0px;
+ animation: flowBounce 1.2s ease-in-out infinite;
+}
+@keyframes flowBounce {
+ 0%,
+ 100% {
+ transform: translateY(-3px);
+ opacity: 0.55;
+ }
+ 50% {
+ transform: translateY(4px);
+ opacity: 1;
+ }
+}
+
+@media (max-width: 900px) {
+ .dash-head {
+ text-align: left;
+ margin: 0 0 44px;
+ }
+ .dash-flow {
+ flex-direction: column;
+ align-items: stretch;
+ }
+ .dash-flow-row {
+ flex-direction: row;
+ flex-wrap: wrap;
+ }
+
+ .dash-source-icon {
+ align-items: center;
+ }
+ .dash-source-card.wide {
+ text-align: center;
+ max-width: none;
+ flex: 1 1;
+ justify-items: center;
+ height: 100%;
+ }
+ .dash-flow-arrow {
+ width: 100%;
+ /* height: 34px; */
+ }
+ .dash-flow-merge {
+ width: 100%;
+ min-height: 34px;
+ }
+ .flow-curve {
+ display: none;
+ }
+ .flow-simple {
+ display: flex;
+ }
+}
+
+/* ---------- Pricing ---------- */
+.pricing {
+ background-color: var(--color-brand-1-900);
+ background-image:
+ radial-gradient(circle, rgba(255, 255, 255, 0.06) 2px, transparent 1px),
+ linear-gradient(160deg, var(--color-brand-1-600) 0%, var(--color-brand-1-900) 70%);
+ background-size:
+ 22px 22px,
+ 100% 100%;
+ padding: 112px 0 120px;
+}
+
+.pricing-head {
+ text-align: center;
+ max-width: 620px;
+ margin: 0 auto 52px;
+}
+
+.pricing-head h2 {
+ color: var(--color-white);
+ font-size: 32px;
+}
+
+.pricing-head p {
+ color: rgba(255, 255, 255, 0.6);
+ font-size: 15px;
+ line-height: 1.7;
+ margin-top: 14px;
+}
+
+.pricing-grid {
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ gap: 18px;
+}
+
+.price-card {
+ background: var(--color-white);
+ border-radius: var(--radius-md);
+ padding: 22px 20px 24px;
+ display: flex;
+ flex-direction: column;
+ border: 1px solid transparent;
+ transition:
+ transform 0.3s cubic-bezier(0.16, 0.8, 0.44, 1),
+ box-shadow 0.3s ease,
+ border-color 0.3s ease;
+}
+
+.price-card:hover {
+ transform: translateY(-6px);
+ box-shadow: 0 30px 60px -24px rgba(17, 43, 60, 0.35);
+ border-color: var(--color-brand-2-500);
+}
+
+.price-card:hover .btn-orange {
+ background: var(--color-brand-1-900);
+}
+
+.price-card h3 {
+ font-size: 18px;
+ margin-bottom: 14px;
+}
+
+.price-tags {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 2px;
+ margin-bottom: 18px;
+ min-height: 42px;
+}
+
+.tag {
+ font-size: 10px;
+ height: fit-content;
+ font-weight: 600;
+ color: var(--color-white);
+ border: 1px solid var(--color-line);
+ border-radius: var(--radius-full);
+ padding: 4px 10px;
+ background-color: var(--color-brand-1-600);
+ font-family: var(--font-body);
+}
+
+.price-desc {
+ min-height: 20px;
+ font-size: 13px;
+ color: var(--color-ink-600);
+ line-height: 1.6;
+ margin-bottom: 20px;
+}
+
+.price-card .btn-orange {
+ width: 100%;
+ justify-content: center;
+ margin-bottom: 22px;
+ transition:
+ transform 0.15s ease,
+ background 0.2s ease;
+}
+
+.price-card .feat-label {
+ font-size: 11.5px;
+ font-weight: 700;
+ color: var(--color-ink-400);
+ text-transform: uppercase;
+ letter-spacing: 0.03em;
+ margin-bottom: 12px;
+ display: block;
+ font-family: var(--font-body);
+}
+
+.feat-list {
+ display: flex;
+ flex-direction: column;
+ gap: 10px;
+}
+
+.feat-list li {
+ display: flex;
+ align-items: flex-start;
+ gap: 8px;
+ font-size: 13px;
+ color: var(--color-ink-600);
+ line-height: 1.5;
+}
+
+.feat-list svg {
+ width: 15px;
+ height: 15px;
+ stroke: var(--color-brand-2-500);
+ flex-shrink: 0;
+ margin-top: 2px;
+}
+
+/* ---------- Contact ---------- */
+.contact {
+ background: var(--color-cream-50);
+ padding: 110px 0;
+}
+
+.contact-card {
+ display: grid;
+ grid-template-columns: 0.9fr 1.1fr;
+ border-radius: var(--radius-2xl);
+ overflow: hidden;
+ box-shadow: 0 30px 60px -32px rgba(17, 43, 60, 0.3);
+}
+
+.contact-info {
+ background-color: var(--color-brand-1-900);
+ background-image:
+ radial-gradient(circle, rgba(255, 255, 255, 0.07) 1.8px, transparent 1px),
+ linear-gradient(160deg, var(--color-brand-1-600) 0%, var(--color-brand-1-900) 75%);
+ background-size:
+ 28px 28px,
+ 100% 100%;
+ padding: 52px 46px;
+ position: relative;
+ overflow: hidden;
+}
+
+.contact-info h2 {
+ color: var(--color-white);
+ font-size: 27px;
+ line-height: 1.25;
+ position: relative;
+ z-index: 1;
+}
+
+.contact-info > p {
+ color: rgba(255, 255, 255, 0.62);
+ margin-top: 14px;
+ font-size: 14px;
+ line-height: 1.7;
+ max-width: 394px;
+ position: relative;
+ z-index: 1;
+}
+
+.contact-list {
+ margin-top: 36px;
+ display: flex;
+ flex-direction: column;
+ gap: 20px;
+ position: relative;
+ z-index: 1;
+}
+
+.contact-item {
+ display: flex;
+ gap: 14px;
+ align-items: flex-start;
+}
+
+.contact-item .ci-icon {
+ width: 38px;
+ height: 38px;
+ border-radius: var(--radius-md);
+ background: rgba(255, 255, 255, 0.08);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-shrink: 0;
+}
+
+.contact-item i {
+ font-size: 14px;
+ color: white;
+}
+
+.contact-item b {
+ display: block;
+ font-size: 14px;
+ color: var(--color-white);
+ font-family: var(--font-body);
+ font-weight: 600;
+}
+
+.contact-item span {
+ font-size: 12px;
+ color: rgba(255, 255, 255, 0.58);
+}
+
+.contact-form {
+ background: var(--color-white);
+ padding: 52px 46px;
+}
+
+.contact-form h3 {
+ font-size: 16px;
+ margin-bottom: 22px;
+}
+
+.field-row {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: 16px;
+}
+
+.field {
+ margin-bottom: 16px;
+}
+
+.field label {
+ font-size: 12px;
+ font-weight: 600;
+ color: var(--color-ink-900);
+ margin-bottom: 6px;
+ display: block;
+ font-family: var(--font-body);
+}
+
+.field input,
+.field textarea {
+ width: 100%;
+ border: 1px solid var(--color-line);
+ border-radius: var(--radius-md);
+ padding: 12px 14px;
+ font-family: var(--font-body);
+ font-size: 14px;
+ color: var(--color-ink-900);
+ background: var(--color-cream-50);
+ transition:
+ border-color 0.15s ease,
+ background 0.15s ease;
+}
+
+.field input:hover,
+.field textarea:hover {
+ border-color: #c7cdc9;
+}
+
+.field input:focus,
+.field textarea:focus {
+ outline: none;
+ border-color: var(--color-brand-2-500);
+ background: var(--color-white);
+ box-shadow: 0 0 0 3px rgba(246, 107, 14, 0.12);
+}
+
+.field textarea {
+ min-height: 110px;
+ resize: vertical;
+}
+
+.contact-form .btn-orange {
+ width: 100%;
+ justify-content: center;
+ margin-top: 4px;
+}
+
+.form-note {
+ font-size: 11.5px;
+ color: var(--color-ink-400);
+ margin-top: 12px;
+ text-align: center;
+}
+
+@media (max-width: 520px) {
+ .field-row {
+ grid-template-columns: 1fr;
+ }
+}
+
+/* ---------- Footer ---------- */
+.footer {
+ background-color: var(--color-brand-1-900);
+ background-image: linear-gradient(160deg, var(--color-brand-1-600) 0%, var(--color-brand-1-900) 65%);
+ border-top: 1px solid var(--color-line-dark);
+ padding: 56px 0 28px;
+}
+
+.footer-top {
+ display: flex;
+ justify-content: space-between;
+ gap: 40px;
+ flex-wrap: wrap;
+ margin-bottom: 44px;
+}
+
+.footer-brand p {
+ color: rgba(255, 255, 255, 0.5);
+ font-size: 14px;
+ line-height: 1.7;
+ margin-top: 14px;
+ max-width: 360px;
+}
+
+.footer-brand p.address {
+ margin-top: 54px;
+}
+
+.footer-cols {
+ display: flex;
+ gap: 64px;
+ flex-wrap: wrap;
+}
+
+.footer-col {
+ width: 180px;
+}
+
+.footer-col h5 {
+ color: var(--color-white);
+ font-size: 13px;
+ font-family: var(--font-body);
+ margin-bottom: 14px;
+}
+
+.footer-col a {
+ display: block;
+ color: rgba(255, 255, 255, 0.55);
+ font-size: 14px;
+ margin-bottom: 10px;
+}
+
+.footer-col a:hover {
+ color: var(--color-white);
+}
+
+.footer-bottom {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ flex-wrap: wrap;
+ gap: 12px;
+ padding-top: 24px;
+ border-top: 1px solid var(--color-line-dark);
+}
+
+.footer-bottom p {
+ color: rgba(255, 255, 255, 0.4);
+ font-size: 12px;
+}
+
+.footer-social {
+ display: flex;
+ gap: 10px;
+}
+
+.footer-social a {
+ width: 34px;
+ height: 34px;
+ border-radius: 50%;
+ border: 1px solid var(--color-line-dark);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.footer-social i {
+ font-size: 12px;
+ color: white;
+ stroke: rgba(255, 255, 255, 0.7);
+}
+
+/* ---------- Responsive ---------- */
+@media (max-width: 980px) {
+ .hero h1 {
+ font-size: 38px;
+ }
+
+ .stat-row {
+ grid-template-columns: repeat(2, 1fr);
+ }
+
+ .why-grid {
+ grid-template-columns: 1fr;
+ gap: 36px;
+ }
+
+ .why-sticky {
+ position: static;
+ }
+
+ .bento {
+ grid-template-columns: 1fr;
+ }
+
+ .bento-r1,
+ .bento-r2,
+ .bento-r3,
+ .bento-r4 {
+ grid-column: auto;
+ grid-row: auto;
+ }
+
+ .pricing-grid {
+ grid-template-columns: repeat(2, 1fr);
+ }
+
+ .contact-card {
+ grid-template-columns: 1fr;
+ }
+}
+
+@media (max-width: 680px) {
+ .container {
+ padding: 0 20px;
+ }
+
+ .nav-links {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ right: 0;
+ background: rgba(253, 253, 253, 1);
+ border-radius: var(--radius-md);
+ flex-direction: column;
+ align-items: flex-start;
+ padding: 20px 20px 26px;
+ gap: 32px;
+ box-shadow: 0 20px 30px -20px rgba(0, 0, 0, 0.2);
+ display: none;
+ }
+
+ .nav-links.open {
+ display: flex;
+ }
+
+ .nav-divider {
+ width: 100%;
+ height: 1px;
+ background-color: rgba(0, 0, 0, 0.1);
+ }
+
+ .nav-links a {
+ width: 100% !important;
+ align-items: center;
+ text-align: center;
+ justify-content: center;
+ color: var(--color-ink-900) !important;
+ }
+
+ .nav-links .btn {
+ color: var(--color-white) !important;
+ width: 100% !important;
+ justify-content: center;
+ }
+
+ .nav-toggle {
+ display: block;
+ }
+
+ .stat-row {
+ grid-template-columns: 1fr 1fr;
+ }
+
+ .access-illustration {
+ flex-direction: column;
+ align-items: flex-start;
+ }
+
+ .pricing-grid {
+ grid-template-columns: 1fr;
+ }
+
+ .footer-top {
+ flex-direction: column;
+ }
+
+ .destinations-head-row {
+ align-items: flex-start;
+ }
+
+ .contact-info,
+ .contact-form {
+ padding: 36px 26px;
+ }
+}
diff --git a/apps/product-site/src/components/DestinationsCarousel.tsx b/apps/product-site/src/components/DestinationsCarousel.tsx
new file mode 100644
index 0000000..07c8269
--- /dev/null
+++ b/apps/product-site/src/components/DestinationsCarousel.tsx
@@ -0,0 +1,227 @@
+"use client";
+
+import { useEffect, useRef } from "react";
+
+export function DestinationsCarousel({
+ header,
+ children
+}: {
+ header: React.ReactNode;
+ children: React.ReactNode;
+}) {
+ const viewportRef = useRef(null);
+ const trackRef = useRef(null);
+ const dotsRef = useRef(null);
+ const prevBtnRef = useRef(null);
+ const nextBtnRef = useRef(null);
+
+ useEffect(() => {
+ const viewport = viewportRef.current;
+ const track = trackRef.current;
+ const dotsWrap = dotsRef.current;
+ if (!track || !viewport || !dotsWrap) return;
+
+ const realCards = Array.from(track.children) as HTMLElement[];
+ const n = realCards.length;
+ if (n === 0) return;
+
+ const CARD_WIDTH = 200;
+ const ACTIVE_WIDTH = 320;
+ const GAP = 16;
+ let isAnimating = false;
+
+ function realIndexOf(pos: number) {
+ return ((pos % n) + n) % n;
+ }
+
+ function widthOfSlot(i: number, activeReal: number) {
+ return realIndexOf(i) === activeReal ? ACTIVE_WIDTH : CARD_WIDTH;
+ }
+
+ dotsWrap.innerHTML = "";
+ const dots: HTMLButtonElement[] = [];
+ realCards.forEach((c, i) => {
+ const d = document.createElement("button");
+ d.setAttribute("aria-label", "Ke slide " + (i + 1));
+ d.addEventListener("click", () => {
+ goTo(i);
+ resetAutoplay();
+ });
+ dotsWrap.appendChild(d);
+ dots.push(d);
+ });
+
+ const beforeClones = realCards.map((c) => {
+ const cl = c.cloneNode(true) as HTMLElement;
+ cl.setAttribute("aria-hidden", "true");
+ return cl;
+ });
+ const afterClones = realCards.map((c) => {
+ const cl = c.cloneNode(true) as HTMLElement;
+ cl.setAttribute("aria-hidden", "true");
+ return cl;
+ });
+
+ track.innerHTML = "";
+ beforeClones.concat(realCards, afterClones).forEach((el) => {
+ track.appendChild(el);
+ });
+
+ const slots = Array.from(track.children) as HTMLElement[];
+ let position = n + 2;
+
+ function render(instant: boolean) {
+ if (instant) track!.classList.add("no-anim");
+ else track!.classList.remove("no-anim");
+
+ const activeReal = realIndexOf(position);
+
+ let offset = 0;
+ for (let i = 0; i < position; i++) {
+ offset += widthOfSlot(i, activeReal) + GAP;
+ }
+ offset += widthOfSlot(position, activeReal) / 2;
+
+ const viewportRect = viewport!.getBoundingClientRect();
+ const translate = viewportRect.width / 2 - offset;
+ track!.style.transform = "translateX(" + translate + "px)";
+
+ slots.forEach((s, i) => {
+ const isActive = realIndexOf(i) === activeReal;
+ s.classList.toggle("active", isActive);
+ });
+ dots.forEach((d, i) => {
+ d.classList.toggle("on", i === activeReal);
+ });
+
+ if (instant) {
+ void track!.offsetWidth;
+ track!.classList.remove("no-anim");
+ }
+ }
+
+ function goToPosition(pos: number) {
+ position = pos;
+ isAnimating = true;
+ render(false);
+ }
+
+ function next() {
+ if (isAnimating) return;
+ goToPosition(position + 1);
+ }
+
+ function prev() {
+ if (isAnimating) return;
+ goToPosition(position - 1);
+ }
+
+ function goTo(realIndex: number) {
+ if (isAnimating) return;
+ goToPosition(n + realIndex);
+ }
+
+ const onTransitionEnd = (e: TransitionEvent) => {
+ if (e.target !== track || e.propertyName !== "transform") return;
+ if (position >= 2 * n) {
+ position -= n;
+ render(true);
+ } else if (position < n) {
+ position += n;
+ render(true);
+ }
+ isAnimating = false;
+ };
+ track.addEventListener("transitionend", onTransitionEnd);
+
+ const onPrevClick = () => { prev(); resetAutoplay(); };
+ const onNextClick = () => { next(); resetAutoplay(); };
+
+ const prevBtn = prevBtnRef.current;
+ const nextBtn = nextBtnRef.current;
+ if (prevBtn) prevBtn.addEventListener("click", onPrevClick);
+ if (nextBtn) nextBtn.addEventListener("click", onNextClick);
+
+ const onTrackClick = (e: MouseEvent) => {
+ const target = e.target as HTMLElement;
+ const card = target.closest('.dest-card') as HTMLElement;
+ if (!card || isAnimating) return;
+
+ const slotsArray = Array.from(track.children) as HTMLElement[];
+ const slotIndex = slotsArray.indexOf(card);
+
+ if (slotIndex !== -1) {
+ goToPosition(slotIndex);
+ resetAutoplay();
+ }
+ };
+ track.addEventListener("click", onTrackClick);
+
+ let autoplayTimer: ReturnType;
+ function startAutoplay() {
+ autoplayTimer = setInterval(next, 5000);
+ }
+ function stopAutoplay() {
+ clearInterval(autoplayTimer);
+ }
+ function resetAutoplay() {
+ stopAutoplay();
+ startAutoplay();
+ }
+ viewport.addEventListener("mouseenter", stopAutoplay);
+ viewport.addEventListener("mouseleave", startAutoplay);
+
+ const onResize = () => render(true);
+ window.addEventListener("resize", onResize);
+
+ render(true);
+ startAutoplay();
+
+ return () => {
+ stopAutoplay();
+ window.removeEventListener("resize", onResize);
+ track.removeEventListener("transitionend", onTransitionEnd);
+ track.removeEventListener("click", onTrackClick);
+ viewport.removeEventListener("mouseenter", stopAutoplay);
+ viewport.removeEventListener("mouseleave", startAutoplay);
+ if (prevBtn) prevBtn.removeEventListener("click", onPrevClick);
+ if (nextBtn) nextBtn.removeEventListener("click", onNextClick);
+
+ track.innerHTML = "";
+ realCards.forEach((c) => track.appendChild(c));
+ dotsWrap.innerHTML = "";
+ };
+ }, [header, children]);
+
+ return (
+ <>
+
+ {header}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/apps/product-site/src/components/LanguageSwitcher.tsx b/apps/product-site/src/components/LanguageSwitcher.tsx
new file mode 100644
index 0000000..ea426c5
--- /dev/null
+++ b/apps/product-site/src/components/LanguageSwitcher.tsx
@@ -0,0 +1,39 @@
+'use client';
+
+import { usePathname, useRouter } from '@/i18n/routing';
+import { useLocale } from 'next-intl';
+import { ChangeEvent } from 'react';
+
+export function LanguageSwitcher() {
+ const locale = useLocale();
+ const router = useRouter();
+ const pathname = usePathname();
+
+ function onSelectChange(event: ChangeEvent) {
+ const nextLocale = event.target.value;
+ router.replace(pathname, { locale: nextLocale });
+ }
+
+ return (
+
+
+ ID
+
+
+ EN
+
+
+ );
+}
diff --git a/apps/product-site/src/components/sections/Contact.tsx b/apps/product-site/src/components/sections/Contact.tsx
new file mode 100644
index 0000000..f4a78d5
--- /dev/null
+++ b/apps/product-site/src/components/sections/Contact.tsx
@@ -0,0 +1,82 @@
+'use client';
+
+import { useTranslations, useLocale } from 'next-intl';
+import { brandInfo } from '@repo/brand';
+
+export function Contact() {
+ const t = useTranslations();
+ const locale = useLocale() as 'id' | 'en';
+
+ const contactList = [
+ {
+ icon: 'uil-envelope-alt',
+ titleKey: 'Contact.email',
+ value: brandInfo.email,
+ },
+ {
+ icon: 'uil-phone',
+ titleKey: 'Contact.phone',
+ value: brandInfo.phone,
+ },
+ {
+ icon: 'uil-map-marker',
+ titleKey: 'Contact.office',
+ value: brandInfo.address[locale] || brandInfo.address.id,
+ },
+ ];
+
+ return (
+
+ );
+}
diff --git a/apps/product-site/src/components/sections/Dashboard.tsx b/apps/product-site/src/components/sections/Dashboard.tsx
new file mode 100644
index 0000000..cb09344
--- /dev/null
+++ b/apps/product-site/src/components/sections/Dashboard.tsx
@@ -0,0 +1,101 @@
+import { useTranslations } from 'next-intl';
+
+export function Dashboard() {
+ const t = useTranslations();
+
+ return (
+
+
+
+
+ {t('Destinations.title21')}
+
+ {t('Destinations.title22')}
+
+
{t('Destinations.desc2')}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{t('Destinations.apps.online.title')}
+
{t('Destinations.apps.online.desc')}
+
+
+
+
+
+
+
{t('Destinations.apps.cashier.title')}
+
{t('Destinations.apps.cashier.desc')}
+
+
+
+
+
+
+
+
+
+
{t('Destinations.apps.pos.title')}
+
{t('Destinations.apps.pos.desc')}
+
+
+
+
+
+
+
+
+
{t('Destinations.apps.queue.title')}
+
{t('Destinations.apps.queue.desc')}
+
+
+
+
+
+
+
+
+
{t('Destinations.apps.admin.title')}
+
{t('Destinations.apps.admin.desc')}
+
+
+
+
+ );
+}
diff --git a/apps/product-site/src/components/sections/Destinations.tsx b/apps/product-site/src/components/sections/Destinations.tsx
new file mode 100644
index 0000000..ec7a04b
--- /dev/null
+++ b/apps/product-site/src/components/sections/Destinations.tsx
@@ -0,0 +1,59 @@
+import { useTranslations } from 'next-intl';
+import { DestinationsCarousel } from '@/components/DestinationsCarousel';
+
+export function Destinations() {
+ const t = useTranslations();
+
+ const destinationsData = [
+ {
+ icon: 'uil-trees',
+ titleKey: 'Destinations.items.themePark.title',
+ descKey: 'Destinations.items.themePark.desc',
+ },
+ {
+ icon: 'uil-ticket',
+ titleKey: 'Destinations.items.event.title',
+ descKey: 'Destinations.items.event.desc',
+ },
+ {
+ icon: 'uil-archway',
+ titleKey: 'Destinations.items.museum.title',
+ descKey: 'Destinations.items.museum.desc',
+ },
+ {
+ icon: 'uil-basketball',
+ titleKey: 'Destinations.items.stadium.title',
+ descKey: 'Destinations.items.stadium.desc',
+ },
+ {
+ icon: 'uil-scenery',
+ titleKey: 'Destinations.items.exhibition.title',
+ descKey: 'Destinations.items.exhibition.desc',
+ },
+ ];
+
+ return (
+
+
+
+ {t('Destinations.title')}
+ {t('Destinations.desc')}
+
+ }
+ >
+ {destinationsData.map((item, i) => (
+
+
{(t as any)(item.titleKey)}
+
{(t as any)(item.descKey)}
+
+
+
+
+ ))}
+
+
+
+ );
+}
diff --git a/apps/product-site/src/components/sections/Ecosystem.tsx b/apps/product-site/src/components/sections/Ecosystem.tsx
new file mode 100644
index 0000000..47b0595
--- /dev/null
+++ b/apps/product-site/src/components/sections/Ecosystem.tsx
@@ -0,0 +1,208 @@
+'use client';
+
+import { useTranslations } from 'next-intl';
+import { useEffect } from 'react';
+
+export function Ecosystem() {
+ const t = useTranslations();
+
+ useEffect(() => {
+ const grid = document.getElementById('bentoGrid');
+ let obs: IntersectionObserver;
+
+ if (grid) {
+ const bars = grid.querySelectorAll('.report-bar');
+ const ring = grid.querySelector('.ring-progress');
+ const timeouts: ReturnType[] = [];
+
+ obs = new IntersectionObserver(
+ (entries) => {
+ entries.forEach((entry) => {
+ if (entry.isIntersecting) {
+ bars.forEach((bar, i) => {
+ timeouts.push(
+ setTimeout(() => {
+ if (bar.dataset.w) bar.style.width = bar.dataset.w;
+ }, i * 150)
+ );
+ });
+ if (ring && ring.dataset.dash) {
+ timeouts.push(
+ setTimeout(() => {
+ ring.style.strokeDasharray = ring.dataset.dash!;
+ }, 200)
+ );
+ }
+ } else {
+ // Clear pending timeouts
+ timeouts.forEach(clearTimeout);
+ timeouts.length = 0;
+
+ // Reset elements to trigger transition again on next enter
+ bars.forEach((bar) => {
+ bar.style.width = '0';
+ });
+ if (ring) {
+ ring.style.strokeDasharray = '0 213.6';
+ }
+ }
+ });
+ },
+ { threshold: 0.35 },
+ );
+ obs.observe(grid);
+ }
+
+ return () => {
+ if (obs) obs.disconnect();
+ };
+ }, []);
+
+ return (
+
+
+
+
{t('Ecosystem.title')}
+
{t('Ecosystem.desc')}
+
+
+
+ {/* Ticketing */}
+
+
{t('Ecosystem.ticketing.title')}
+
{t('Ecosystem.ticketing.desc')}
+
+
+
+
+ TX24409198-8798
+ TX24409198-8797
+ TX24409198-8798
+ TX24409198-8901
+ TX24409198-8811
+
+
+
+
+ TX24409198-8801
+ TX24409198-8787
+ TX24409198-8786
+ TX24409198-8901
+ TX24409198-8881
+
+
+
+
+ TX24409198-8902
+ TX24409198-8788
+ TX24409198-8790
+ TX24409198-8905
+ TX24409198-8812
+
+
+
+
+
+
+ {/* Access Management */}
+
+
+
+
+ {t('Ecosystem.stats.qr')}
+
+
+
+ {t('Ecosystem.stats.gate')}
+
+
+
+ {t('Ecosystem.stats.rfid')}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0.4s
+ {t('Ecosystem.stats.avg')}
+
+
+
+
{t('Ecosystem.access.title')}
+
{t('Ecosystem.access.desc')}
+
+
+ {/* Visitor Operations */}
+
+
+
+
+
{t('Ecosystem.stats.queue')}
+
+
+
+
{t('Ecosystem.visitor.title')}
+
{t('Ecosystem.visitor.desc')}
+
+
+ {/* Report */}
+
+
{t('Ecosystem.report.title')}
+
{t('Ecosystem.report.desc')}
+
+ {[
+ { w: '150px', bg: '#b9f001', val: 'Rp32.5M', key: 'Ecosystem.stats.revenue' },
+ { w: '220px', bg: '#f66b0e', val: '1,284', key: 'Ecosystem.stats.visitors' },
+ { w: '300px', bg: '#112b3c', val: '1,120,240', key: 'Ecosystem.stats.checkin' },
+ ].map((item, idx) => (
+
+
+
+ {item.val}
+ {(t as any)(item.key)}
+
+
+ ))}
+
+
+
+
+
+ );
+}
diff --git a/apps/product-site/src/components/sections/Footer.tsx b/apps/product-site/src/components/sections/Footer.tsx
new file mode 100644
index 0000000..7ef8ec3
--- /dev/null
+++ b/apps/product-site/src/components/sections/Footer.tsx
@@ -0,0 +1,69 @@
+import { useTranslations, useLocale } from 'next-intl';
+import { brandInfo } from '@repo/brand';
+
+export function Footer() {
+ const t = useTranslations();
+ const locale = useLocale() as 'id' | 'en';
+
+ const footerLinks = [
+ { labelKey: 'Nav.home', href: '#' },
+ { labelKey: 'Nav.solutions', href: '#ecosystem' },
+ { labelKey: 'Nav.industries', href: '#destinations' },
+ { labelKey: 'Nav.pricing', href: '#pricing' },
+ { labelKey: 'Nav.contact', href: '#contact' },
+ ];
+
+ const socialLinks = [
+ { icon: 'uil-envelope-alt', href: brandInfo.socialLinks.email },
+ { icon: 'uil-phone', href: brandInfo.socialLinks.phone },
+ { icon: 'uil-youtube', href: brandInfo.socialLinks.youtube },
+ ];
+
+ return (
+
+
+
+
+
+
{t('Footer.desc')}
+
{brandInfo.address[locale] || brandInfo.address.id}
+
+
+
+
+
+ © {new Date().getFullYear()} {t('Footer.copyright')}
+
+
+ {socialLinks.map((social, i) => (
+
+
+
+ ))}
+
+
+
+
+ );
+}
diff --git a/apps/product-site/src/components/sections/Hero.tsx b/apps/product-site/src/components/sections/Hero.tsx
new file mode 100644
index 0000000..432e4fe
--- /dev/null
+++ b/apps/product-site/src/components/sections/Hero.tsx
@@ -0,0 +1,85 @@
+import { useTranslations } from 'next-intl';
+
+export function Hero() {
+ const t = useTranslations();
+
+ const statsData = [
+ {
+ icon: 'uil-clock-eight',
+ labelKey: 'Hero.stats.timeAccess',
+ value: (
+ <>
+ 0.4{t('Hero.stats.seconds')}
+ >
+ ),
+ subKey: 'Hero.stats.avgValidation',
+ },
+ {
+ icon: 'uil-ticket',
+ labelKey: 'Hero.stats.ticketsSold',
+ value: '1.249',
+ subKey: 'Hero.stats.todayAllChannels',
+ },
+ {
+ icon: 'uil-sync',
+ labelKey: 'Hero.stats.sync',
+ value: '12',
+ subKey: 'Hero.stats.txSynced',
+ },
+ {
+ icon: 'uil-sliders-v',
+ labelKey: 'Hero.stats.visitorOps',
+ bars: [40, 70, 55, 90],
+ subKey: 'Hero.stats.activeZones',
+ },
+ ];
+
+ return (
+
+
+
+
+ {t('Hero.title1')}
+
+ {t('Hero.title2')}
+
+
+
+ {statsData.map((stat, i) => (
+
+
+
+
+
{(t as any)(stat.labelKey)}
+
+ {stat.bars ? (
+
+ {stat.bars.map((h, j) => (
+
+ ))}
+
+ ) : (
+
{stat.value}
+ )}
+
+
{(t as any)(stat.subKey)}
+
+ ))}
+
+
+
+
+
+
+ );
+}
diff --git a/apps/product-site/src/components/sections/Navbar.tsx b/apps/product-site/src/components/sections/Navbar.tsx
new file mode 100644
index 0000000..d7c8591
--- /dev/null
+++ b/apps/product-site/src/components/sections/Navbar.tsx
@@ -0,0 +1,70 @@
+'use client';
+
+import { useTranslations } from 'next-intl';
+import { LanguageSwitcher } from '@/components/LanguageSwitcher';
+import { useEffect, useState } from 'react';
+
+export function Navbar() {
+ const t = useTranslations();
+ const [isScrolled, setIsScrolled] = useState(false);
+ const [isMenuOpen, setIsMenuOpen] = useState(false);
+
+ useEffect(() => {
+ const handleScroll = () => {
+ const floating = window.scrollY > 60;
+ setIsScrolled(floating);
+ document.body.classList.toggle('nav-is-floating', floating);
+ };
+ window.addEventListener('scroll', handleScroll, { passive: true });
+ handleScroll();
+
+ return () => {
+ window.removeEventListener('scroll', handleScroll);
+ };
+ }, []);
+
+ return (
+
+
+
+
+ setIsMenuOpen(!isMenuOpen)}>
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/apps/product-site/src/components/sections/Pricing.tsx b/apps/product-site/src/components/sections/Pricing.tsx
new file mode 100644
index 0000000..a084d6b
--- /dev/null
+++ b/apps/product-site/src/components/sections/Pricing.tsx
@@ -0,0 +1,71 @@
+import { useTranslations } from 'next-intl';
+
+export function Pricing() {
+ const t = useTranslations();
+
+ const pricingPlans = [
+ {
+ key: 'rental',
+ tags: [0, 1, 2],
+ features: ['f1', 'f2', 'f3', 'f4', 'f5'],
+ },
+ {
+ key: 'subscription',
+ tags: [0, 1],
+ features: ['f1', 'f2', 'f3', 'f4', 'f5'],
+ },
+ {
+ key: 'onPremise',
+ tags: [0, 1],
+ features: ['f1', 'f2', 'f3', 'f4', 'f5'],
+ },
+ {
+ key: 'buyOut',
+ tags: [0, 1, 2],
+ features: ['f1', 'f2', 'f3', 'f4', 'f5'],
+ },
+ ];
+
+ return (
+
+
+
+
+ {t('Pricing.title1')}
+
+ {t('Pricing.title2')}
+
+
{t('Pricing.desc')}
+
+
+
+ {pricingPlans.map((plan) => (
+
+
{(t as any)(`Pricing.${plan.key}.title`)}
+
+ {plan.tags.map((tagIndex) => (
+
+ {(t as any)(`Pricing.${plan.key}.tags.${tagIndex}`)}
+
+ ))}
+
+
{(t as any)(`Pricing.${plan.key}.desc`)}
+
+ {t('Pricing.contactUs')}
+
+
{t('Pricing.whatYouGet')}
+
+ {plan.features.map((featKey) => (
+
+
+ {(t as any)(`Pricing.${plan.key}.${featKey}`)}
+
+ ))}
+
+
+ ))}
+
+
+
+ );
+}
diff --git a/apps/product-site/src/components/sections/Why.tsx b/apps/product-site/src/components/sections/Why.tsx
new file mode 100644
index 0000000..b06e418
--- /dev/null
+++ b/apps/product-site/src/components/sections/Why.tsx
@@ -0,0 +1,49 @@
+import { useTranslations } from 'next-intl';
+
+export function Why() {
+ const t = useTranslations();
+
+ const reasonsData = [
+ {
+ icon: 'uil-wifi-slash',
+ titleKey: 'Why.items.offline.title',
+ descKey: 'Why.items.offline.desc',
+ },
+ {
+ icon: 'uil-bolt',
+ titleKey: 'Why.items.speed.title',
+ descKey: 'Why.items.speed.desc',
+ },
+ {
+ icon: 'uil-expand-arrows-alt',
+ titleKey: 'Why.items.flexibility.title',
+ descKey: 'Why.items.flexibility.desc',
+ },
+ ];
+
+ return (
+
+
+
+
{t('Why.title')}
+
{t('Why.desc')}
+
+
+
+
+
+
+ {reasonsData.map((reason, i) => (
+
+
+
+
+
{(t as any)(reason.titleKey)}
+
{(t as any)(reason.descKey)}
+
+ ))}
+
+
+
+ );
+}
diff --git a/apps/product-site/src/i18n/request.ts b/apps/product-site/src/i18n/request.ts
new file mode 100644
index 0000000..678a2a2
--- /dev/null
+++ b/apps/product-site/src/i18n/request.ts
@@ -0,0 +1,15 @@
+import {getRequestConfig} from 'next-intl/server';
+import {routing} from './routing';
+
+export default getRequestConfig(async ({requestLocale}) => {
+ let locale = await requestLocale;
+
+ if (!locale || !routing.locales.includes(locale as any)) {
+ locale = routing.defaultLocale;
+ }
+
+ return {
+ locale,
+ messages: (await import(`../../messages/${locale}.json`)).default
+ };
+});
diff --git a/apps/product-site/src/i18n/routing.ts b/apps/product-site/src/i18n/routing.ts
new file mode 100644
index 0000000..220cfc4
--- /dev/null
+++ b/apps/product-site/src/i18n/routing.ts
@@ -0,0 +1,10 @@
+import {defineRouting} from 'next-intl/routing';
+import {createNavigation} from 'next-intl/navigation';
+
+export const routing = defineRouting({
+ locales: ['en', 'id'],
+ defaultLocale: 'en'
+});
+
+export const {Link, redirect, usePathname, useRouter} =
+ createNavigation(routing);
diff --git a/apps/product-site/src/middleware.ts b/apps/product-site/src/middleware.ts
new file mode 100644
index 0000000..84283db
--- /dev/null
+++ b/apps/product-site/src/middleware.ts
@@ -0,0 +1,8 @@
+import createMiddleware from 'next-intl/middleware';
+import {routing} from './i18n/routing';
+
+export default createMiddleware(routing);
+
+export const config = {
+ matcher: ['/', '/(id|en)/:path*']
+};
diff --git a/apps/product-site/tsconfig.json b/apps/product-site/tsconfig.json
new file mode 100644
index 0000000..d1a5693
--- /dev/null
+++ b/apps/product-site/tsconfig.json
@@ -0,0 +1,22 @@
+{
+ "extends": "@repo/typescript-config/nextjs.json",
+ "compilerOptions": {
+ "plugins": [
+ {
+ "name": "next"
+ }
+ ],
+ "paths": {
+ "@/*": ["./src/*"]
+ }
+ },
+ "include": [
+ "next-env.d.ts",
+ "**/*.ts",
+ "**/*.tsx",
+ ".next/types/**/*.ts",
+ ".next/dev/types/**/*.ts",
+ "**/*.mts"
+ ],
+ "exclude": ["node_modules"]
+}
diff --git a/package.json b/package.json
index c04febc..f63c84f 100644
--- a/package.json
+++ b/package.json
@@ -9,12 +9,14 @@
"build:docs-dev": "turbo run build --filter=docs-dev",
"build:desktop": "turbo run build --filter=desktop",
"build:showcase": "turbo run build --filter=showcase",
+ "build:product-site": "turbo run build --filter=product-site",
"dev": "turbo run dev",
"dev:web": "turbo run dev --filter=web",
"dev:landing": "turbo run dev --filter=landing",
"dev:docs-dev": "turbo run dev --filter=docs-dev",
"dev:desktop": "turbo run dev --filter=web --filter=desktop --parallel",
"dev:showcase": "turbo run dev --filter=showcase",
+ "dev:product-site": "turbo run dev --filter=product-site",
"package:desktop": "pnpm run build:desktop && pnpm --filter desktop run package",
"package:mac": "pnpm run build:desktop && pnpm --filter desktop run package:mac",
"package:win": "pnpm run build:desktop && pnpm --filter desktop run package:win",
@@ -27,6 +29,7 @@
"typecheck:landing": "turbo run typecheck --filter=landing",
"typecheck:desktop": "turbo run typecheck --filter=desktop",
"typecheck:showcase": "turbo run typecheck --filter=showcase",
+ "typecheck:product-site": "turbo run typecheck --filter=product-site",
"check:all": "turbo run lint typecheck test",
"clean:workspaces": "rm -rf node_modules **/*/node_modules .turbo **/*/.turbo dist **/*/dist out **/*/out web-dist **/*/web-dist release **/*/release",
"nuke": "pnpm run clean:workspaces && pnpm install && pnpm build"
diff --git a/packages/brand/public/favicon.svg b/packages/brand/public/favicon.svg
index 7abbacf..d73eeaf 100644
--- a/packages/brand/public/favicon.svg
+++ b/packages/brand/public/favicon.svg
@@ -1,6 +1,4 @@
-
-
-
-
-
+
+
+
diff --git a/packages/brand/public/logo-primary.png b/packages/brand/public/logo-primary.png
new file mode 100644
index 0000000..3715f38
Binary files /dev/null and b/packages/brand/public/logo-primary.png differ
diff --git a/packages/brand/public/logo-primary.svg b/packages/brand/public/logo-primary.svg
new file mode 100644
index 0000000..245f7cf
--- /dev/null
+++ b/packages/brand/public/logo-primary.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/packages/brand/src/data/info.json b/packages/brand/src/data/info.json
index b72a7be..cf7dcd6 100644
--- a/packages/brand/src/data/info.json
+++ b/packages/brand/src/data/info.json
@@ -1,10 +1,14 @@
{
- "name": "My Brand",
- "description": "A short description of your brand or product.",
- "tagline": "Building the future, one pixel at a time.",
+ "name": "Pintu Masuk",
+ "email": "hello@pintumasuk.id",
+ "phone": "+62 812-3456-7890",
+ "address": {
+ "id": "Jl. Soekarno-Hatta No.409, Karasak, Kec. Astanaanyar, Kota Bandung, Jawa Barat 40243",
+ "en": "Jl. Soekarno-Hatta No.409, Karasak, Kec. Astanaanyar, Bandung City, West Java 40243"
+ },
"socialLinks": {
- "twitter": "https://twitter.com/mybrand",
- "github": "https://github.com/mybrand",
- "website": "https://mybrand.com"
+ "email": "mailto:hello@pintumasuk.id",
+ "phone": "tel:+6281234567890",
+ "youtube": "https://youtube.com/"
}
}
diff --git a/packages/brand/src/index.ts b/packages/brand/src/index.ts
index fb17fae..2712030 100644
--- a/packages/brand/src/index.ts
+++ b/packages/brand/src/index.ts
@@ -1,3 +1,4 @@
import brandInfo from './data/info.json';
export type BrandInfo = typeof brandInfo;
+export { brandInfo };
diff --git a/packages/configs/eslint/nextjs.js b/packages/configs/eslint/nextjs.js
new file mode 100644
index 0000000..095a24e
--- /dev/null
+++ b/packages/configs/eslint/nextjs.js
@@ -0,0 +1,61 @@
+const { resolve } = require("node:path");
+
+const project = resolve(process.cwd(), "tsconfig.json");
+
+/*
+ * This is a custom ESLint configuration for use with
+ * Next.js apps.
+ *
+ * This config extends the Vercel Engineering Style Guide.
+ * For more information, see https://github.com/vercel/style-guide
+ *
+ */
+
+module.exports = {
+ extends: [
+ ...[
+ "@vercel/style-guide/eslint/node",
+ "@vercel/style-guide/eslint/typescript",
+ "@vercel/style-guide/eslint/browser",
+ "@vercel/style-guide/eslint/react",
+ "@vercel/style-guide/eslint/next",
+ ].map(require.resolve),
+ "turbo",
+ ],
+ parserOptions: {
+ project,
+ },
+ globals: {
+ React: true,
+ JSX: true,
+ },
+ settings: {
+ "import/resolver": {
+ typescript: {
+ project,
+ },
+ node: {
+ extensions: [".mjs", ".js", ".jsx", ".ts", ".tsx"],
+ },
+ },
+ },
+ ignorePatterns: ["node_modules/", "dist/"],
+ // add rules configurations here
+ rules: {
+ "import/no-default-export": "off",
+ "unicorn/filename-case": "off",
+ "react/jsx-sort-props": "off",
+ "import/order": "off",
+ "@typescript-eslint/explicit-function-return-type": "off",
+ "@typescript-eslint/no-unsafe-assignment": "off",
+ "@typescript-eslint/no-unsafe-member-access": "off",
+ "@typescript-eslint/no-unsafe-call": "off",
+ "@typescript-eslint/no-unsafe-argument": "off",
+ "@typescript-eslint/no-explicit-any": "off",
+ "@typescript-eslint/require-await": "off",
+ "react/no-unescaped-entities": "off",
+ "react/display-name": "off",
+ "@next/next/no-img-element": "off",
+ "@typescript-eslint/no-misused-promises": "off"
+ },
+};
diff --git a/packages/configs/eslint/nextjs.mjs b/packages/configs/eslint/nextjs.mjs
new file mode 100644
index 0000000..42877cd
--- /dev/null
+++ b/packages/configs/eslint/nextjs.mjs
@@ -0,0 +1,21 @@
+import nextVitals from "eslint-config-next/core-web-vitals";
+import nextTs from "eslint-config-next/typescript";
+
+export const nextjsConfig = [
+ ...nextVitals,
+ ...nextTs,
+ {
+ ignores: [
+ ".next/**",
+ "out/**",
+ "build/**",
+ "next-env.d.ts",
+ ]
+ },
+ {
+ rules: {
+ "@typescript-eslint/no-explicit-any": "off",
+ "@next/next/no-img-element": "off"
+ }
+ }
+];
diff --git a/packages/configs/eslint/package.json b/packages/configs/eslint/package.json
index 621ae82..709ee6b 100644
--- a/packages/configs/eslint/package.json
+++ b/packages/configs/eslint/package.json
@@ -6,7 +6,9 @@
"index.js",
"library.js",
"react.js",
- "storybook.js"
+ "storybook.js",
+ "nextjs.js",
+ "nextjs.mjs"
],
"dependencies": {
"@typescript-eslint/eslint-plugin": "^7.1.0",
diff --git a/packages/configs/typescript/nextjs.json b/packages/configs/typescript/nextjs.json
new file mode 100644
index 0000000..2bcbdf1
--- /dev/null
+++ b/packages/configs/typescript/nextjs.json
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://json.schemastore.org/tsconfig",
+ "extends": "./base.json",
+ "compilerOptions": {
+ "target": "es5",
+ "lib": ["dom", "dom.iterable", "esnext"],
+ "allowJs": true,
+ "skipLibCheck": true,
+ "strict": false,
+ "forceConsistentCasingInFileNames": true,
+ "noEmit": true,
+ "esModuleInterop": true,
+ "module": "esnext",
+ "moduleResolution": "bundler",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "jsx": "preserve",
+ "incremental": true,
+ "plugins": [
+ {
+ "name": "next"
+ }
+ ]
+ },
+ "exclude": ["node_modules"]
+}
diff --git a/packages/core-api/package.json b/packages/core-api/package.json
index 3ba255d..54baa2e 100644
--- a/packages/core-api/package.json
+++ b/packages/core-api/package.json
@@ -16,6 +16,9 @@
"test:watch": "vitest --watch",
"typecheck": "tsc --noEmit"
},
+ "peerDependencies": {
+ "react": ">=18.0.0"
+ },
"dependencies": {
"@grafana/faro-react": "^2.1.0",
"@grafana/faro-web-sdk": "^2.1.0",
@@ -29,6 +32,8 @@
"@repo/eslint-config": "workspace:*",
"@repo/typescript-config": "workspace:*",
"eslint": "^8.57.1",
+ "react": "^19.2.3",
+ "react-dom": "^19.2.3",
"typescript": "5.5.4",
"vitest": "^4.0.17"
}
diff --git a/packages/core-i18n/package.json b/packages/core-i18n/package.json
index c9e1650..1e86b8b 100644
--- a/packages/core-i18n/package.json
+++ b/packages/core-i18n/package.json
@@ -11,15 +11,21 @@
"lint": "eslint \"src/**/*.ts\"",
"typecheck": "tsc --noEmit"
},
+ "peerDependencies": {
+ "react": ">=18.0.0",
+ "react-i18next": ">=15.0.0"
+ },
"dependencies": {
"@repo/utils": "workspace:*",
- "i18next": "^24.2.2",
- "react-i18next": "^15.4.0"
+ "i18next": "^24.2.2"
},
"devDependencies": {
"@repo/eslint-config": "workspace:*",
"@repo/typescript-config": "workspace:*",
"@types/react": "^19.0.8",
+ "react": "^19.2.3",
+ "react-dom": "^19.2.3",
+ "react-i18next": "^15.4.0",
"typescript": "5.5.4"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 68c45b1..83fe5d0 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -150,6 +150,55 @@ importers:
specifier: ^5.1.4
version: 5.4.17(@types/node@22.19.3)
+ apps/product-site:
+ dependencies:
+ '@repo/brand':
+ specifier: workspace:*
+ version: link:../../packages/brand
+ next:
+ specifier: 16.2.12
+ version: 16.2.12(@babel/core@7.28.5)(react-dom@19.2.4)(react@19.2.4)
+ next-intl:
+ specifier: ^4.13.4
+ version: 4.13.4(next@16.2.12)(react@19.2.4)(typescript@5.5.4)
+ react:
+ specifier: 19.2.4
+ version: 19.2.4
+ react-dom:
+ specifier: 19.2.4
+ version: 19.2.4(react@19.2.4)
+ devDependencies:
+ '@repo/eslint-config':
+ specifier: workspace:*
+ version: link:../../packages/configs/eslint
+ '@repo/typescript-config':
+ specifier: workspace:*
+ version: link:../../packages/configs/typescript
+ '@tailwindcss/postcss':
+ specifier: ^4
+ version: 4.3.3
+ '@types/node':
+ specifier: ^20
+ version: 20.19.39
+ '@types/react':
+ specifier: ^19
+ version: 19.2.7
+ '@types/react-dom':
+ specifier: ^19
+ version: 19.2.3(@types/react@19.2.7)
+ eslint:
+ specifier: ^9
+ version: 9.39.5
+ eslint-config-next:
+ specifier: 16.2.12
+ version: 16.2.12(@typescript-eslint/parser@8.65.0)(eslint@9.39.5)(typescript@5.5.4)
+ tailwindcss:
+ specifier: ^4
+ version: 4.3.3
+ typescript:
+ specifier: ^5
+ version: 5.5.4
+
apps/showcase:
dependencies:
'@hookform/resolvers':
@@ -385,7 +434,7 @@ importers:
dependencies:
'@grafana/faro-react':
specifier: ^2.1.0
- version: 2.7.0(react@19.2.3)
+ version: 2.7.0(react-dom@19.2.3)(react@19.2.3)
'@grafana/faro-web-sdk':
specifier: ^2.1.0
version: 2.7.0
@@ -414,6 +463,12 @@ importers:
eslint:
specifier: ^8.57.1
version: 8.57.1
+ react:
+ specifier: ^19.2.3
+ version: 19.2.3
+ react-dom:
+ specifier: ^19.2.3
+ version: 19.2.3(react@19.2.3)
typescript:
specifier: 5.5.4
version: 5.5.4
@@ -469,9 +524,6 @@ importers:
i18next:
specifier: ^24.2.2
version: 24.2.3(typescript@5.5.4)
- react-i18next:
- specifier: ^15.4.0
- version: 15.7.4(i18next@24.2.3)(react-dom@19.2.3)(react@19.2.3)(typescript@5.5.4)
devDependencies:
'@repo/eslint-config':
specifier: workspace:*
@@ -482,6 +534,15 @@ importers:
'@types/react':
specifier: ^19.0.8
version: 19.2.7
+ react:
+ specifier: ^19.2.3
+ version: 19.2.3
+ react-dom:
+ specifier: ^19.2.3
+ version: 19.2.3(react@19.2.3)
+ react-i18next:
+ specifier: ^15.4.0
+ version: 15.7.4(i18next@24.2.3)(react-dom@19.2.3)(react@19.2.3)(typescript@5.5.4)
typescript:
specifier: 5.5.4
version: 5.5.4
@@ -891,6 +952,11 @@ packages:
'@algolia/client-common': 5.55.1
dev: true
+ /@alloc/quick-lru@5.2.0:
+ resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
+ engines: {node: '>=10'}
+ dev: true
+
/@antfu/install-pkg@1.1.0:
resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==}
dependencies:
@@ -1255,7 +1321,7 @@ packages:
dependencies:
commander: 5.1.0
glob: 7.2.3
- minimatch: 3.1.2
+ minimatch: 3.1.5
dev: true
/@electron/get@2.0.3:
@@ -1346,7 +1412,6 @@ packages:
dependencies:
'@emnapi/wasi-threads': 1.1.0
tslib: 2.8.1
- dev: false
optional: true
/@emnapi/runtime@1.8.1:
@@ -1354,7 +1419,6 @@ packages:
requiresBuild: true
dependencies:
tslib: 2.8.1
- dev: false
optional: true
/@emnapi/wasi-threads@1.1.0:
@@ -1362,7 +1426,6 @@ packages:
requiresBuild: true
dependencies:
tslib: 2.8.1
- dev: false
optional: true
/@esbuild/aix-ppc64@0.21.5:
@@ -1783,6 +1846,16 @@ packages:
dev: true
optional: true
+ /@eslint-community/eslint-utils@4.10.1(eslint@9.39.5):
+ resolution: {integrity: sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+ dependencies:
+ eslint: 9.39.5
+ eslint-visitor-keys: 3.4.3
+ dev: true
+
/@eslint-community/eslint-utils@4.5.1(eslint@8.57.1):
resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -1796,6 +1869,36 @@ packages:
resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+ /@eslint-community/regexpp@4.12.2:
+ resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+ dev: true
+
+ /@eslint/config-array@0.21.2:
+ resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ dependencies:
+ '@eslint/object-schema': 2.1.7
+ debug: 4.4.3
+ minimatch: 3.1.5
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@eslint/config-helpers@0.4.2:
+ resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ dependencies:
+ '@eslint/core': 0.17.0
+ dev: true
+
+ /@eslint/core@0.17.0:
+ resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ dependencies:
+ '@types/json-schema': 7.0.15
+ dev: true
+
/@eslint/eslintrc@2.1.4:
resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -1812,10 +1915,45 @@ packages:
transitivePeerDependencies:
- supports-color
+ /@eslint/eslintrc@3.3.6:
+ resolution: {integrity: sha512-l2Ul9PrHsPCKcEY/ac7VgFj9D80C7S68sOKc618SyHDPK36s1XcFebXY0iTzUVn4Yq+YbwvSnDmCz9yxjX+QrA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ dependencies:
+ ajv: 6.15.0
+ debug: 4.4.3
+ espree: 10.4.0
+ globals: 14.0.0
+ ignore: 5.3.2
+ import-fresh: 3.3.1
+ js-yaml: 4.3.0
+ minimatch: 3.1.5
+ strip-json-comments: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/@eslint/js@8.57.1:
resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ /@eslint/js@9.39.5:
+ resolution: {integrity: sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ dev: true
+
+ /@eslint/object-schema@2.1.7:
+ resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ dev: true
+
+ /@eslint/plugin-kit@0.4.1:
+ resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ dependencies:
+ '@eslint/core': 0.17.0
+ levn: 0.4.1
+ dev: true
+
/@floating-ui/core@1.7.4:
resolution: {integrity: sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==}
requiresBuild: true
@@ -1858,6 +1996,26 @@ packages:
resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==}
dev: false
+ /@formatjs/fast-memoize@3.1.7:
+ resolution: {integrity: sha512-zXfhLpvA6T7+efdt9JLbBwZ00tT7NsBMDVnDu8rpHeNNv8KfRZAMo2gkG0k9lK/Nzc//3kJ9pImsfuJxk3KhUA==}
+ dev: false
+
+ /@formatjs/icu-messageformat-parser@3.5.15:
+ resolution: {integrity: sha512-5o4grXKotAB3JqQuisLApHG43g17N+paoRTa92Jiz35Zvfemq0cVf4EDvuxyHAzmsJji7igaEowicLO/VmfJ8Q==}
+ dependencies:
+ '@formatjs/icu-skeleton-parser': 2.1.11
+ dev: false
+
+ /@formatjs/icu-skeleton-parser@2.1.11:
+ resolution: {integrity: sha512-j8cUmOJzVgkHuS0QiQ6ga76UIoLOFSAMWhs7aZJztH3aAdCOAE6vpC8KVvFB4cU10ON0y2/5oOVmPJ43s2lTwA==}
+ dev: false
+
+ /@formatjs/intl-localematcher@0.8.13:
+ resolution: {integrity: sha512-kHEAFOkeJSPNi7c5PaKaRjxcBrJwzzt81ifUu+8uve1EDW/VJl83KsxmqgqNZLzcFEhSliZGvx3+pk/RH0IOmg==}
+ dependencies:
+ '@formatjs/fast-memoize': 3.1.7
+ dev: false
+
/@gar/promisify@1.1.3:
resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==}
dev: true
@@ -1869,7 +2027,7 @@ packages:
'@opentelemetry/otlp-transformer': 0.218.0(@opentelemetry/api@1.9.1)
dev: false
- /@grafana/faro-react@2.7.0(react@19.2.3):
+ /@grafana/faro-react@2.7.0(react-dom@19.2.3)(react@19.2.3):
resolution: {integrity: sha512-95wmypcDjHdGe64TCivq3DKLut9q3RRANgKoSLSQhGHmXdKTwE2Ov0+UdUkVQ9uu3KsGGQJRuXkldP0YMIEMiw==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
@@ -1888,6 +2046,7 @@ packages:
'@grafana/faro-web-tracing': 2.7.0
hoist-non-react-statics: 3.3.2
react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
transitivePeerDependencies:
- supports-color
dev: false
@@ -1927,6 +2086,27 @@ packages:
react-hook-form: 7.79.0(react@19.2.3)
dev: false
+ /@humanfs/core@0.19.2:
+ resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==}
+ engines: {node: '>=18.18.0'}
+ dependencies:
+ '@humanfs/types': 0.15.0
+ dev: true
+
+ /@humanfs/node@0.16.8:
+ resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==}
+ engines: {node: '>=18.18.0'}
+ dependencies:
+ '@humanfs/core': 0.19.2
+ '@humanfs/types': 0.15.0
+ '@humanwhocodes/retry': 0.4.3
+ dev: true
+
+ /@humanfs/types@0.15.0:
+ resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==}
+ engines: {node: '>=18.18.0'}
+ dev: true
+
/@humanwhocodes/config-array@0.13.0:
resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==}
engines: {node: '>=10.10.0'}
@@ -1944,6 +2124,11 @@ packages:
/@humanwhocodes/object-schema@2.0.3:
resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
+ /@humanwhocodes/retry@0.4.3:
+ resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
+ engines: {node: '>=18.18'}
+ dev: true
+
/@iconify-json/simple-icons@1.2.87:
resolution: {integrity: sha512-8YciStObhSji3OZFmWAWK6kBujyqO5bLCxeDwLxf3CR3F4PVelq7keC2LBvgTqviWzSTysj5/g4PCFLiAMVGsw==}
dependencies:
@@ -1962,6 +2147,240 @@ packages:
import-meta-resolve: 4.2.0
dev: true
+ /@img/colour@1.1.0:
+ resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==}
+ engines: {node: '>=18'}
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-darwin-arm64@0.34.5:
+ resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ optionalDependencies:
+ '@img/sharp-libvips-darwin-arm64': 1.2.4
+ dev: false
+ optional: true
+
+ /@img/sharp-darwin-x64@0.34.5:
+ resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ optionalDependencies:
+ '@img/sharp-libvips-darwin-x64': 1.2.4
+ dev: false
+ optional: true
+
+ /@img/sharp-libvips-darwin-arm64@1.2.4:
+ resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-libvips-darwin-x64@1.2.4:
+ resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-libvips-linux-arm64@1.2.4:
+ resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-libvips-linux-arm@1.2.4:
+ resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-libvips-linux-ppc64@1.2.4:
+ resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==}
+ cpu: [ppc64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-libvips-linux-riscv64@1.2.4:
+ resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==}
+ cpu: [riscv64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-libvips-linux-s390x@1.2.4:
+ resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==}
+ cpu: [s390x]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-libvips-linux-x64@1.2.4:
+ resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-libvips-linuxmusl-arm64@1.2.4:
+ resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-libvips-linuxmusl-x64@1.2.4:
+ resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-linux-arm64@0.34.5:
+ resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ optionalDependencies:
+ '@img/sharp-libvips-linux-arm64': 1.2.4
+ dev: false
+ optional: true
+
+ /@img/sharp-linux-arm@0.34.5:
+ resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ optionalDependencies:
+ '@img/sharp-libvips-linux-arm': 1.2.4
+ dev: false
+ optional: true
+
+ /@img/sharp-linux-ppc64@0.34.5:
+ resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [ppc64]
+ os: [linux]
+ requiresBuild: true
+ optionalDependencies:
+ '@img/sharp-libvips-linux-ppc64': 1.2.4
+ dev: false
+ optional: true
+
+ /@img/sharp-linux-riscv64@0.34.5:
+ resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [riscv64]
+ os: [linux]
+ requiresBuild: true
+ optionalDependencies:
+ '@img/sharp-libvips-linux-riscv64': 1.2.4
+ dev: false
+ optional: true
+
+ /@img/sharp-linux-s390x@0.34.5:
+ resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [s390x]
+ os: [linux]
+ requiresBuild: true
+ optionalDependencies:
+ '@img/sharp-libvips-linux-s390x': 1.2.4
+ dev: false
+ optional: true
+
+ /@img/sharp-linux-x64@0.34.5:
+ resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ optionalDependencies:
+ '@img/sharp-libvips-linux-x64': 1.2.4
+ dev: false
+ optional: true
+
+ /@img/sharp-linuxmusl-arm64@0.34.5:
+ resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ optionalDependencies:
+ '@img/sharp-libvips-linuxmusl-arm64': 1.2.4
+ dev: false
+ optional: true
+
+ /@img/sharp-linuxmusl-x64@0.34.5:
+ resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ optionalDependencies:
+ '@img/sharp-libvips-linuxmusl-x64': 1.2.4
+ dev: false
+ optional: true
+
+ /@img/sharp-wasm32@0.34.5:
+ resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [wasm32]
+ requiresBuild: true
+ dependencies:
+ '@emnapi/runtime': 1.8.1
+ dev: false
+ optional: true
+
+ /@img/sharp-win32-arm64@0.34.5:
+ resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-win32-ia32@0.34.5:
+ resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-win32-x64@0.34.5:
+ resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: false
+ optional: true
+
/@isaacs/cliui@8.0.2:
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'}
@@ -2162,6 +2581,87 @@ packages:
'@emnapi/core': 1.8.1
'@emnapi/runtime': 1.8.1
'@tybys/wasm-util': 0.10.1
+ optional: true
+
+ /@next/env@16.2.12:
+ resolution: {integrity: sha512-d0Z5Bc13Fa4nR8pFAKx2jay2yhJM16vlfHbTzYnUQAxlNb6B6lmn4hjt69lYNt4kRtyYP6gEM49lPRHNbIyneg==}
+ dev: false
+
+ /@next/eslint-plugin-next@16.2.12:
+ resolution: {integrity: sha512-uF2z/qAK2q7B5/6CpnFcBRX6jOq5iCO+Uqh1UkJhXljX1JwLarLYhhoJadO6dPb6moTprOKewMXheBcbIoSbug==}
+ dependencies:
+ fast-glob: 3.3.1
+ dev: true
+
+ /@next/swc-darwin-arm64@16.2.12:
+ resolution: {integrity: sha512-0W1R0teHWJrqKX0FH20IzzIWAOuGtBxPGuObrxy1lE8hQvCFj49KE8a3WUg0D7sq6rn6zkM4c7YGUnhudBS6oA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@next/swc-darwin-x64@16.2.12:
+ resolution: {integrity: sha512-Hy5Ls099+aFUmOLmIgPfLqNi6iCwhL3uQCssz5rWk+5Nkc6TUKCE83DY5BbNylfm3+mfwcSFnLRfrZDJhVxdtw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@next/swc-linux-arm64-gnu@16.2.12:
+ resolution: {integrity: sha512-+YqU2h1cQkHsGfvjAsrSmst8UIFBibBGm5x3Xgel8NLMiDQtNOM4sM2GOEMvG5YiOBNeN/Ykk8cQC2S0Xrqljg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@next/swc-linux-arm64-musl@16.2.12:
+ resolution: {integrity: sha512-0qjhiYBaKAqF63LA1ZWAAnKTzFUguAaZiRa5etMLGGPj/B6uEVjtIZldIzFEp3wHlB0koK6aTzqPtSdplTCjoA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@next/swc-linux-x64-gnu@16.2.12:
+ resolution: {integrity: sha512-7A3q26W+h7gnA15uqBToNuDqBEFZZcqh0mW2mn4AJh/G5pdg2RVE3n4slzLEliASZFG3NmsbEzng/x2Sh09mBg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@next/swc-linux-x64-musl@16.2.12:
+ resolution: {integrity: sha512-qSjL/uppm+cbh21s72Ss8gkiOhQ4dExWHNGOWy6eZV7STj5WsKehgxT61beSsOj+YYQuTplL376lOCdMQU5T8w==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@next/swc-win32-arm64-msvc@16.2.12:
+ resolution: {integrity: sha512-X6hzsOUJac/e7AWSbn9gQ9nzHld1xWP5iyjHpYWvud8pufB679O1xg4JDyKr8Xd69Jvd+kM2Der6uftiZCmjYA==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@next/swc-win32-x64-msvc@16.2.12:
+ resolution: {integrity: sha512-F6fakeHuFTLOPt0bslQJdf+xtT+WIP9DVn/m4y1w1mRnVPyh3D/cNvzlRkxM444xfm+IvvYNSOrKiA2CDJ0Uxw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
dev: false
optional: true
@@ -2192,7 +2692,6 @@ packages:
/@nolyfill/is-core-module@1.0.39:
resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==}
engines: {node: '>=12.4.0'}
- dev: false
/@npmcli/config@8.3.4:
resolution: {integrity: sha512-01rtHedemDNhUXdicU7s+QYz/3JyV5Naj84cvdXGH4mgCdL+agmSYaLF4LUG4vMCLzhBO8YtS0gPpH1FGvbgAw==}
@@ -2204,7 +2703,7 @@ packages:
ini: 4.1.3
nopt: 7.2.1
proc-log: 4.2.0
- semver: 7.7.1
+ semver: 7.7.4
walk-up-path: 3.0.1
transitivePeerDependencies:
- bluebird
@@ -2229,7 +2728,7 @@ packages:
proc-log: 4.2.0
promise-inflight: 1.0.1
promise-retry: 2.0.1
- semver: 7.7.1
+ semver: 7.7.4
which: 4.0.0
transitivePeerDependencies:
- bluebird
@@ -2269,7 +2768,7 @@ packages:
json-parse-even-better-errors: 3.0.2
normalize-package-data: 6.0.2
proc-log: 4.2.0
- semver: 7.7.1
+ semver: 7.7.4
transitivePeerDependencies:
- bluebird
dev: false
@@ -2554,6 +3053,138 @@ packages:
engines: {node: '>=14'}
dev: false
+ /@parcel/watcher-android-arm64@2.6.0:
+ resolution: {integrity: sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [android]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@parcel/watcher-darwin-arm64@2.6.0:
+ resolution: {integrity: sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@parcel/watcher-darwin-x64@2.6.0:
+ resolution: {integrity: sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@parcel/watcher-freebsd-x64@2.6.0:
+ resolution: {integrity: sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@parcel/watcher-linux-arm-glibc@2.6.0:
+ resolution: {integrity: sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@parcel/watcher-linux-arm-musl@2.6.0:
+ resolution: {integrity: sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@parcel/watcher-linux-arm64-glibc@2.6.0:
+ resolution: {integrity: sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@parcel/watcher-linux-arm64-musl@2.6.0:
+ resolution: {integrity: sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@parcel/watcher-linux-x64-glibc@2.6.0:
+ resolution: {integrity: sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@parcel/watcher-linux-x64-musl@2.6.0:
+ resolution: {integrity: sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@parcel/watcher-win32-arm64@2.6.0:
+ resolution: {integrity: sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@parcel/watcher-win32-x64@2.6.0:
+ resolution: {integrity: sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@parcel/watcher@2.6.0:
+ resolution: {integrity: sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==}
+ engines: {node: '>= 10.0.0'}
+ requiresBuild: true
+ dependencies:
+ detect-libc: 2.1.2
+ is-glob: 4.0.3
+ node-addon-api: 7.1.1
+ picomatch: 4.0.5
+ optionalDependencies:
+ '@parcel/watcher-android-arm64': 2.6.0
+ '@parcel/watcher-darwin-arm64': 2.6.0
+ '@parcel/watcher-darwin-x64': 2.6.0
+ '@parcel/watcher-freebsd-x64': 2.6.0
+ '@parcel/watcher-linux-arm-glibc': 2.6.0
+ '@parcel/watcher-linux-arm-musl': 2.6.0
+ '@parcel/watcher-linux-arm64-glibc': 2.6.0
+ '@parcel/watcher-linux-arm64-musl': 2.6.0
+ '@parcel/watcher-linux-x64-glibc': 2.6.0
+ '@parcel/watcher-linux-x64-musl': 2.6.0
+ '@parcel/watcher-win32-arm64': 2.6.0
+ '@parcel/watcher-win32-x64': 2.6.0
+ dev: false
+
/@pkgjs/parseargs@0.11.0:
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
@@ -2953,12 +3584,15 @@ packages:
/@rtsao/scc@1.1.0:
resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
- dev: false
/@rushstack/eslint-patch@1.15.0:
resolution: {integrity: sha512-ojSshQPKwVvSMR8yT2L/QtUkV5SXi/IfDiJ4/8d6UbTPjiHVmxZzUAzGD8Tzks1b9+qQkZa0isUOvYObedITaw==}
dev: false
+ /@schummar/icu-type-parser@1.21.5:
+ resolution: {integrity: sha512-bXHSaW5jRTmke9Vd0h5P7BtWZG9Znqb8gSDxZnxaGSJnGwPLDPfS+3g0BKzeWqzgZPsIVZkM7m2tbo18cm5HBw==}
+ dev: false
+
/@shikijs/core@2.5.0:
resolution: {integrity: sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==}
dependencies:
@@ -3034,6 +3668,157 @@ packages:
lodash: 4.17.21
dev: false
+ /@swc/core-darwin-arm64@1.15.46:
+ resolution: {integrity: sha512-IsISIT22EfktVJrlvIpnAxG2u/A9aob9l99HMlx80x72WlFmFPk1V3UhkEzx86eJP8hw049KTFv/RISho2cq2Q==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@swc/core-darwin-x64@1.15.46:
+ resolution: {integrity: sha512-4Tj4ppVIPCmUMpmGFiGtyEriwLyJ+yi/US4WfBrP/ok8COGddDZXLEzQETnKyK46mjvr1v0jevrS23zjoff7vA==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@swc/core-linux-arm-gnueabihf@1.15.46:
+ resolution: {integrity: sha512-i8tUGnNjyOgMmfmgFSg4aeJLQoFyfpIHK5FjpQAwpRyQIqEUB2w1e8zIDQzY1WhOxx8NoS1S5iUL813Un4Sf5A==}
+ engines: {node: '>=10'}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@swc/core-linux-arm64-gnu@1.15.46:
+ resolution: {integrity: sha512-c0OnhqzdhfOvv6qhNCcByepB+sNYOGZyhtr2Qa6ZCHvAWTYhSRw4j/u92Stue9PbZ/6q74b9nHzi76+kVzqQHQ==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@swc/core-linux-arm64-musl@1.15.46:
+ resolution: {integrity: sha512-imyRpNEcUzFQFV2LE4jL68ErvmKEuZCbvZru77iQREunJ+bR4i658cupTgtG1mLYM3F1Tzy3Sb9xYb02KghWTg==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@swc/core-linux-ppc64-gnu@1.15.46:
+ resolution: {integrity: sha512-ctEfcl/HcUeomK33cbySiHZm98GEDIxTm1EkpBsYCiHxElYBzvTXVeuQT2YwbUXn9XCrjiw4ipyUNk33k26qRg==}
+ engines: {node: '>=10'}
+ cpu: [ppc64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@swc/core-linux-s390x-gnu@1.15.46:
+ resolution: {integrity: sha512-DxlMdnt84TtRVTv7WL/thWyz9+QU8QZNNoAP9rrk0P68LziuhfePp8MjQ44zIprpTHTsEwyziIuGUUN5iSC1bQ==}
+ engines: {node: '>=10'}
+ cpu: [s390x]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@swc/core-linux-x64-gnu@1.15.46:
+ resolution: {integrity: sha512-SKxI7J6t90XPl8hRUqtJi9NfGdunN/E/vZMc7Bc0figeRdOPDBT+Tm8g7cx9xM0T0mewh2l+8dewa3Am27/P+A==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@swc/core-linux-x64-musl@1.15.46:
+ resolution: {integrity: sha512-qj9T6B7bosI0VEsrWOVXZN1OXxS8Tp63ywyrLxNdOycnUtLdkgYcoBsN5y8ImnDDsnwrEWZOy1e+J4xSe7mA3Q==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@swc/core-win32-arm64-msvc@1.15.46:
+ resolution: {integrity: sha512-8p7l4c3LU+eA5g9Et1JPhNeMC1oQwXTGU+uah8DPIBX7YXzqswvaBtyKVmXefVGi/DJU1x3YJsc3mbAp9aWzSQ==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@swc/core-win32-ia32-msvc@1.15.46:
+ resolution: {integrity: sha512-tUEnfr3Bn9u6FOjUb3PN9p+09qZC2j+wNDLKHzXXZn22rqGcUqR/ohCRSS+nG9B9+X+U+3FewNEHJkTmdIvMjQ==}
+ engines: {node: '>=10'}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@swc/core-win32-x64-msvc@1.15.46:
+ resolution: {integrity: sha512-Vux7UDzBJYQggSuPfcl2w9iu+IJpgpRCxHzgCaVkELnAXAE4XZMOTX9HNcaNiwfeIDqdu2rkr69RuDm6wY8neA==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@swc/core@1.15.46:
+ resolution: {integrity: sha512-Ri3em2mBpq3h2zSPliCYl63otDGqek8PPEfv2nWgRQEbZ/VBCNyypVTVQ6cEbTCXBhy+WE2T3fQb08moIyuYaw==}
+ engines: {node: '>=10'}
+ requiresBuild: true
+ peerDependencies:
+ '@swc/helpers': '>=0.5.17'
+ peerDependenciesMeta:
+ '@swc/helpers':
+ optional: true
+ dependencies:
+ '@swc/counter': 0.1.3
+ '@swc/types': 0.1.27
+ optionalDependencies:
+ '@swc/core-darwin-arm64': 1.15.46
+ '@swc/core-darwin-x64': 1.15.46
+ '@swc/core-linux-arm-gnueabihf': 1.15.46
+ '@swc/core-linux-arm64-gnu': 1.15.46
+ '@swc/core-linux-arm64-musl': 1.15.46
+ '@swc/core-linux-ppc64-gnu': 1.15.46
+ '@swc/core-linux-s390x-gnu': 1.15.46
+ '@swc/core-linux-x64-gnu': 1.15.46
+ '@swc/core-linux-x64-musl': 1.15.46
+ '@swc/core-win32-arm64-msvc': 1.15.46
+ '@swc/core-win32-ia32-msvc': 1.15.46
+ '@swc/core-win32-x64-msvc': 1.15.46
+ dev: false
+
+ /@swc/counter@0.1.3:
+ resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
+ dev: false
+
+ /@swc/helpers@0.5.15:
+ resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
+ dependencies:
+ tslib: 2.8.1
+ dev: false
+
+ /@swc/types@0.1.27:
+ resolution: {integrity: sha512-K6h3iUlqeM946U4sXFYeahefR1YBbXJvko+hv8WS8/0BNJ4OHiHRywMnQUJCqkR7Y9+hqQ1TvEpiKqUhz7NEFg==}
+ dependencies:
+ '@swc/counter': 0.1.3
+ dev: false
+
/@szmarczak/http-timer@4.0.6:
resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==}
engines: {node: '>=10'}
@@ -3052,6 +3837,18 @@ packages:
source-map-js: 1.2.1
tailwindcss: 4.1.18
+ /@tailwindcss/node@4.3.3:
+ resolution: {integrity: sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==}
+ dependencies:
+ '@jridgewell/remapping': 2.3.5
+ enhanced-resolve: 5.24.4
+ jiti: 2.7.0
+ lightningcss: 1.32.0
+ magic-string: 0.30.21
+ source-map-js: 1.2.1
+ tailwindcss: 4.3.3
+ dev: true
+
/@tailwindcss/oxide-android-arm64@4.1.18:
resolution: {integrity: sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==}
engines: {node: '>= 10'}
@@ -3060,6 +3857,15 @@ packages:
requiresBuild: true
optional: true
+ /@tailwindcss/oxide-android-arm64@4.3.3:
+ resolution: {integrity: sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@tailwindcss/oxide-darwin-arm64@4.1.18:
resolution: {integrity: sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==}
engines: {node: '>= 10'}
@@ -3068,6 +3874,15 @@ packages:
requiresBuild: true
optional: true
+ /@tailwindcss/oxide-darwin-arm64@4.3.3:
+ resolution: {integrity: sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@tailwindcss/oxide-darwin-x64@4.1.18:
resolution: {integrity: sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==}
engines: {node: '>= 10'}
@@ -3076,6 +3891,15 @@ packages:
requiresBuild: true
optional: true
+ /@tailwindcss/oxide-darwin-x64@4.3.3:
+ resolution: {integrity: sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@tailwindcss/oxide-freebsd-x64@4.1.18:
resolution: {integrity: sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==}
engines: {node: '>= 10'}
@@ -3084,6 +3908,15 @@ packages:
requiresBuild: true
optional: true
+ /@tailwindcss/oxide-freebsd-x64@4.3.3:
+ resolution: {integrity: sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18:
resolution: {integrity: sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==}
engines: {node: '>= 10'}
@@ -3092,6 +3925,15 @@ packages:
requiresBuild: true
optional: true
+ /@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3:
+ resolution: {integrity: sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==}
+ engines: {node: '>= 20'}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@tailwindcss/oxide-linux-arm64-gnu@4.1.18:
resolution: {integrity: sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==}
engines: {node: '>= 10'}
@@ -3100,6 +3942,15 @@ packages:
requiresBuild: true
optional: true
+ /@tailwindcss/oxide-linux-arm64-gnu@4.3.3:
+ resolution: {integrity: sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@tailwindcss/oxide-linux-arm64-musl@4.1.18:
resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==}
engines: {node: '>= 10'}
@@ -3108,6 +3959,15 @@ packages:
requiresBuild: true
optional: true
+ /@tailwindcss/oxide-linux-arm64-musl@4.3.3:
+ resolution: {integrity: sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@tailwindcss/oxide-linux-x64-gnu@4.1.18:
resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==}
engines: {node: '>= 10'}
@@ -3116,6 +3976,15 @@ packages:
requiresBuild: true
optional: true
+ /@tailwindcss/oxide-linux-x64-gnu@4.3.3:
+ resolution: {integrity: sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@tailwindcss/oxide-linux-x64-musl@4.1.18:
resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==}
engines: {node: '>= 10'}
@@ -3124,6 +3993,15 @@ packages:
requiresBuild: true
optional: true
+ /@tailwindcss/oxide-linux-x64-musl@4.3.3:
+ resolution: {integrity: sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@tailwindcss/oxide-wasm32-wasi@4.1.18:
resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==}
engines: {node: '>=14.0.0'}
@@ -3138,6 +4016,21 @@ packages:
- '@emnapi/wasi-threads'
- tslib
+ /@tailwindcss/oxide-wasm32-wasi@4.3.3:
+ resolution: {integrity: sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+ requiresBuild: true
+ dev: true
+ optional: true
+ bundledDependencies:
+ - '@napi-rs/wasm-runtime'
+ - '@emnapi/core'
+ - '@emnapi/runtime'
+ - '@tybys/wasm-util'
+ - '@emnapi/wasi-threads'
+ - tslib
+
/@tailwindcss/oxide-win32-arm64-msvc@4.1.18:
resolution: {integrity: sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==}
engines: {node: '>= 10'}
@@ -3146,6 +4039,15 @@ packages:
requiresBuild: true
optional: true
+ /@tailwindcss/oxide-win32-arm64-msvc@4.3.3:
+ resolution: {integrity: sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@tailwindcss/oxide-win32-x64-msvc@4.1.18:
resolution: {integrity: sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==}
engines: {node: '>= 10'}
@@ -3154,6 +4056,15 @@ packages:
requiresBuild: true
optional: true
+ /@tailwindcss/oxide-win32-x64-msvc@4.3.3:
+ resolution: {integrity: sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@tailwindcss/oxide@4.1.18:
resolution: {integrity: sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==}
engines: {node: '>= 10'}
@@ -3171,6 +4082,34 @@ packages:
'@tailwindcss/oxide-win32-arm64-msvc': 4.1.18
'@tailwindcss/oxide-win32-x64-msvc': 4.1.18
+ /@tailwindcss/oxide@4.3.3:
+ resolution: {integrity: sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==}
+ engines: {node: '>= 20'}
+ optionalDependencies:
+ '@tailwindcss/oxide-android-arm64': 4.3.3
+ '@tailwindcss/oxide-darwin-arm64': 4.3.3
+ '@tailwindcss/oxide-darwin-x64': 4.3.3
+ '@tailwindcss/oxide-freebsd-x64': 4.3.3
+ '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.3
+ '@tailwindcss/oxide-linux-arm64-gnu': 4.3.3
+ '@tailwindcss/oxide-linux-arm64-musl': 4.3.3
+ '@tailwindcss/oxide-linux-x64-gnu': 4.3.3
+ '@tailwindcss/oxide-linux-x64-musl': 4.3.3
+ '@tailwindcss/oxide-wasm32-wasi': 4.3.3
+ '@tailwindcss/oxide-win32-arm64-msvc': 4.3.3
+ '@tailwindcss/oxide-win32-x64-msvc': 4.3.3
+ dev: true
+
+ /@tailwindcss/postcss@4.3.3:
+ resolution: {integrity: sha512-JTSZZGQi1AyKirbLN3azmjVzef92tcX7h+iSqPdaeStyFpGpDlKvvpxeOE8njhbUanbRwr3z8DyzhICWnMtQeg==}
+ dependencies:
+ '@alloc/quick-lru': 5.2.0
+ '@tailwindcss/node': 4.3.3
+ '@tailwindcss/oxide': 4.3.3
+ postcss: 8.5.24
+ tailwindcss: 4.3.3
+ dev: true
+
/@tailwindcss/vite@4.1.18(vite@5.4.17):
resolution: {integrity: sha512-jVA+/UpKL1vRLg6Hkao5jldawNmRo7mQYrZtNHMIVpLfLhDml5nMRUo/8MwoX2vNXvnaXNNMedrMfMugAVX1nA==}
peerDependencies:
@@ -3552,7 +4491,6 @@ packages:
requiresBuild: true
dependencies:
tslib: 2.8.1
- dev: false
optional: true
/@types/aria-query@5.0.4:
@@ -3805,7 +4743,7 @@ packages:
/@types/estree-jsx@1.0.5:
resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==}
dependencies:
- '@types/estree': 1.0.7
+ '@types/estree': 1.0.8
dev: false
/@types/estree@1.0.7:
@@ -3813,7 +4751,6 @@ packages:
/@types/estree@1.0.8:
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
- dev: true
/@types/fs-extra@9.0.13:
resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==}
@@ -3840,11 +4777,9 @@ packages:
/@types/json-schema@7.0.15:
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
- dev: false
/@types/json5@0.0.29:
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
- dev: false
/@types/keyv@3.1.4:
resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==}
@@ -4149,6 +5084,29 @@ packages:
- supports-color
dev: false
+ /@typescript-eslint/eslint-plugin@8.65.0(@typescript-eslint/parser@8.65.0)(eslint@9.39.5)(typescript@5.5.4):
+ resolution: {integrity: sha512-IEgob78X12rHpUmtcwFsXhZdVGJtwTVP8FiCLZkR6GlYVrl2PcuB+KhCE5BlVC/eQpQnu8WXRtkHZuPar+gCRA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ '@typescript-eslint/parser': ^8.65.0
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: '>=4.8.4 <6.1.0'
+ dependencies:
+ '@eslint-community/regexpp': 4.12.2
+ '@typescript-eslint/parser': 8.65.0(eslint@9.39.5)(typescript@5.5.4)
+ '@typescript-eslint/scope-manager': 8.65.0
+ '@typescript-eslint/type-utils': 8.65.0(eslint@9.39.5)(typescript@5.5.4)
+ '@typescript-eslint/utils': 8.65.0(eslint@9.39.5)(typescript@5.5.4)
+ '@typescript-eslint/visitor-keys': 8.65.0
+ eslint: 9.39.5
+ ignore: 7.0.6
+ natural-compare: 1.4.0
+ ts-api-utils: 2.5.0(typescript@5.5.4)
+ typescript: 5.5.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.5.4):
resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==}
engines: {node: ^16.0.0 || >=18.0.0}
@@ -4191,6 +5149,38 @@ packages:
- supports-color
dev: false
+ /@typescript-eslint/parser@8.65.0(eslint@9.39.5)(typescript@5.5.4):
+ resolution: {integrity: sha512-CZ4nMxWwgu1HEEFNkeaCptra9QCtkmKdgf3sWh1rl1trIhmxLilgTV4cwcbQ4wemnT4sWQN8CaKOmdYx+g2gMA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: '>=4.8.4 <6.1.0'
+ dependencies:
+ '@typescript-eslint/scope-manager': 8.65.0
+ '@typescript-eslint/types': 8.65.0
+ '@typescript-eslint/typescript-estree': 8.65.0(typescript@5.5.4)
+ '@typescript-eslint/visitor-keys': 8.65.0
+ debug: 4.4.3
+ eslint: 9.39.5
+ typescript: 5.5.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/project-service@8.65.0(typescript@5.5.4):
+ resolution: {integrity: sha512-SxnPhbTsGahizDgbu7oqFH/xVtzIqMd/s+WtnSxNxJZJpLbdT5IPdzg8EZxO3+PoKahXmwJLeNQOpKJb3/bi7Q==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <6.1.0'
+ dependencies:
+ '@typescript-eslint/tsconfig-utils': 8.65.0(typescript@5.5.4)
+ '@typescript-eslint/types': 8.65.0
+ debug: 4.4.3
+ typescript: 5.5.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/@typescript-eslint/scope-manager@5.62.0:
resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -4215,6 +5205,23 @@ packages:
'@typescript-eslint/visitor-keys': 7.18.0
dev: false
+ /@typescript-eslint/scope-manager@8.65.0:
+ resolution: {integrity: sha512-Esbl8OSYiVxBokYgWPf7VVWg/BE798wXhimnn9ML9Pt5qoDf8bfQlgjlKXR/k98+AcNzlLKYrpCcrcuZ9DZLgg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ dependencies:
+ '@typescript-eslint/types': 8.65.0
+ '@typescript-eslint/visitor-keys': 8.65.0
+ dev: true
+
+ /@typescript-eslint/tsconfig-utils@8.65.0(typescript@5.5.4):
+ resolution: {integrity: sha512-j6GzGqCiRdA7Qhur2VVmKZAkBLfnHFQfx4TaJGL9RMveZqCo48jSHHO0DTgizEnGhtWnqmbtCUSrqSkdiY/0Hg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <6.1.0'
+ dependencies:
+ typescript: 5.5.4
+ dev: true
+
/@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.5.4):
resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==}
engines: {node: ^16.0.0 || >=18.0.0}
@@ -4255,6 +5262,24 @@ packages:
- supports-color
dev: false
+ /@typescript-eslint/type-utils@8.65.0(eslint@9.39.5)(typescript@5.5.4):
+ resolution: {integrity: sha512-YjaZ7PRI5qY7ax2L3PbvX0rRyGtipAReCWs0mhhDBHjH/vl0g0BonaGXrKdKpMbIIsMIwDgbk/xzkBTyAltS5g==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: '>=4.8.4 <6.1.0'
+ dependencies:
+ '@typescript-eslint/types': 8.65.0
+ '@typescript-eslint/typescript-estree': 8.65.0(typescript@5.5.4)
+ '@typescript-eslint/utils': 8.65.0(eslint@9.39.5)(typescript@5.5.4)
+ debug: 4.4.3
+ eslint: 9.39.5
+ ts-api-utils: 2.5.0(typescript@5.5.4)
+ typescript: 5.5.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/@typescript-eslint/types@5.62.0:
resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -4270,6 +5295,11 @@ packages:
engines: {node: ^18.18.0 || >=20.0.0}
dev: false
+ /@typescript-eslint/types@8.65.0:
+ resolution: {integrity: sha512-JSSwWNy+H0E/01jJEM+hrX6N0OFDzFzeIhHFSAS01tlVaevpG8cFyYRPhS5yjGOvBUx3sqQHVMjCL1CAZZMxBg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ dev: true
+
/@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.4):
resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -4335,6 +5365,26 @@ packages:
- supports-color
dev: false
+ /@typescript-eslint/typescript-estree@8.65.0(typescript@5.5.4):
+ resolution: {integrity: sha512-JboAE2swaYt4tb1fHhHTABE2K+OLy09XfcTbhnk4Pw96f9dd2e9iYsJ28gBggHlo5z5x1rkyWvcPoTuNTd4oGg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <6.1.0'
+ dependencies:
+ '@typescript-eslint/project-service': 8.65.0(typescript@5.5.4)
+ '@typescript-eslint/tsconfig-utils': 8.65.0(typescript@5.5.4)
+ '@typescript-eslint/types': 8.65.0
+ '@typescript-eslint/visitor-keys': 8.65.0
+ debug: 4.4.3
+ minimatch: 10.2.5
+ semver: 7.7.4
+ tinyglobby: 0.2.17
+ ts-api-utils: 2.5.0(typescript@5.5.4)
+ typescript: 5.5.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.5.4):
resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -4390,6 +5440,23 @@ packages:
- typescript
dev: false
+ /@typescript-eslint/utils@8.65.0(eslint@9.39.5)(typescript@5.5.4):
+ resolution: {integrity: sha512-gXiwIHsYreboxeJucHKPvgwl7dXt50mF8s1/c00cP/WoVTyWKFdtfhRWwZiXYFU5H2O8vVoSLNrexFZjYS/SGA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: '>=4.8.4 <6.1.0'
+ dependencies:
+ '@eslint-community/eslint-utils': 4.10.1(eslint@9.39.5)
+ '@typescript-eslint/scope-manager': 8.65.0
+ '@typescript-eslint/types': 8.65.0
+ '@typescript-eslint/typescript-estree': 8.65.0(typescript@5.5.4)
+ eslint: 9.39.5
+ typescript: 5.5.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/@typescript-eslint/visitor-keys@5.62.0:
resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -4414,6 +5481,14 @@ packages:
eslint-visitor-keys: 3.4.3
dev: false
+ /@typescript-eslint/visitor-keys@8.65.0:
+ resolution: {integrity: sha512-8C71BQkGjiMmXtop7pHVJu1l2NNShFdkCyD6a2ezzs5vU/L3LRtb69EtcteFwz0mYMPzIgOw0n6OV4VBUWZd7A==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ dependencies:
+ '@typescript-eslint/types': 8.65.0
+ eslint-visitor-keys: 5.0.1
+ dev: true
+
/@ungap/structured-clone@1.3.0:
resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
@@ -4422,7 +5497,6 @@ packages:
cpu: [arm]
os: [android]
requiresBuild: true
- dev: false
optional: true
/@unrs/resolver-binding-android-arm64@1.11.1:
@@ -4430,7 +5504,6 @@ packages:
cpu: [arm64]
os: [android]
requiresBuild: true
- dev: false
optional: true
/@unrs/resolver-binding-darwin-arm64@1.11.1:
@@ -4438,7 +5511,6 @@ packages:
cpu: [arm64]
os: [darwin]
requiresBuild: true
- dev: false
optional: true
/@unrs/resolver-binding-darwin-x64@1.11.1:
@@ -4446,7 +5518,6 @@ packages:
cpu: [x64]
os: [darwin]
requiresBuild: true
- dev: false
optional: true
/@unrs/resolver-binding-freebsd-x64@1.11.1:
@@ -4454,7 +5525,6 @@ packages:
cpu: [x64]
os: [freebsd]
requiresBuild: true
- dev: false
optional: true
/@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1:
@@ -4462,7 +5532,6 @@ packages:
cpu: [arm]
os: [linux]
requiresBuild: true
- dev: false
optional: true
/@unrs/resolver-binding-linux-arm-musleabihf@1.11.1:
@@ -4470,7 +5539,6 @@ packages:
cpu: [arm]
os: [linux]
requiresBuild: true
- dev: false
optional: true
/@unrs/resolver-binding-linux-arm64-gnu@1.11.1:
@@ -4478,7 +5546,6 @@ packages:
cpu: [arm64]
os: [linux]
requiresBuild: true
- dev: false
optional: true
/@unrs/resolver-binding-linux-arm64-musl@1.11.1:
@@ -4486,7 +5553,6 @@ packages:
cpu: [arm64]
os: [linux]
requiresBuild: true
- dev: false
optional: true
/@unrs/resolver-binding-linux-ppc64-gnu@1.11.1:
@@ -4494,7 +5560,6 @@ packages:
cpu: [ppc64]
os: [linux]
requiresBuild: true
- dev: false
optional: true
/@unrs/resolver-binding-linux-riscv64-gnu@1.11.1:
@@ -4502,7 +5567,6 @@ packages:
cpu: [riscv64]
os: [linux]
requiresBuild: true
- dev: false
optional: true
/@unrs/resolver-binding-linux-riscv64-musl@1.11.1:
@@ -4510,7 +5574,6 @@ packages:
cpu: [riscv64]
os: [linux]
requiresBuild: true
- dev: false
optional: true
/@unrs/resolver-binding-linux-s390x-gnu@1.11.1:
@@ -4518,7 +5581,6 @@ packages:
cpu: [s390x]
os: [linux]
requiresBuild: true
- dev: false
optional: true
/@unrs/resolver-binding-linux-x64-gnu@1.11.1:
@@ -4526,7 +5588,6 @@ packages:
cpu: [x64]
os: [linux]
requiresBuild: true
- dev: false
optional: true
/@unrs/resolver-binding-linux-x64-musl@1.11.1:
@@ -4534,7 +5595,6 @@ packages:
cpu: [x64]
os: [linux]
requiresBuild: true
- dev: false
optional: true
/@unrs/resolver-binding-wasm32-wasi@1.11.1:
@@ -4544,7 +5604,6 @@ packages:
requiresBuild: true
dependencies:
'@napi-rs/wasm-runtime': 0.2.12
- dev: false
optional: true
/@unrs/resolver-binding-win32-arm64-msvc@1.11.1:
@@ -4552,7 +5611,6 @@ packages:
cpu: [arm64]
os: [win32]
requiresBuild: true
- dev: false
optional: true
/@unrs/resolver-binding-win32-ia32-msvc@1.11.1:
@@ -4560,7 +5618,6 @@ packages:
cpu: [ia32]
os: [win32]
requiresBuild: true
- dev: false
optional: true
/@unrs/resolver-binding-win32-x64-msvc@1.11.1:
@@ -4568,7 +5625,6 @@ packages:
cpu: [x64]
os: [win32]
requiresBuild: true
- dev: false
optional: true
/@upsetjs/venn.js@2.0.0:
@@ -4938,7 +5994,6 @@ packages:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
dependencies:
acorn: 8.15.0
- dev: false
/acorn@8.14.1:
resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==}
@@ -4948,7 +6003,6 @@ packages:
resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
engines: {node: '>=0.4.0'}
hasBin: true
- dev: false
/ag-charts-community@14.0.1:
resolution: {integrity: sha512-XHYdDRtEz4OYyZZuut9BiHSDy6KjXoVXNom2Zvq8EEO6HN67x73xLZNlo/9Vxwoch/3mNGkQkVTzi0zqdKFQ4w==}
@@ -5064,6 +6118,15 @@ packages:
json-schema-traverse: 0.4.1
uri-js: 4.4.1
+ /ajv@6.15.0:
+ resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==}
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
+ dev: true
+
/algoliasearch@5.55.1:
resolution: {integrity: sha512-FyaFnnsbVPtevQwqSj/SdxE3jAsSsY0BEH8IVLf9rXxEBdAhAmT6VKCVSMWoaPIHVN1Eufh/1w8q6k8URpIkWw==}
engines: {node: '>= 14.0.0'}
@@ -5234,7 +6297,6 @@ packages:
dependencies:
call-bound: 1.0.4
is-array-buffer: 3.0.5
- dev: false
/array-includes@3.1.9:
resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==}
@@ -5248,7 +6310,6 @@ packages:
get-intrinsic: 1.3.0
is-string: 1.1.1
math-intrinsics: 1.1.0
- dev: false
/array-union@2.1.0:
resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
@@ -5265,7 +6326,6 @@ packages:
es-errors: 1.3.0
es-object-atoms: 1.1.1
es-shim-unscopables: 1.1.0
- dev: false
/array.prototype.findlastindex@1.2.6:
resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==}
@@ -5278,7 +6338,6 @@ packages:
es-errors: 1.3.0
es-object-atoms: 1.1.1
es-shim-unscopables: 1.1.0
- dev: false
/array.prototype.flat@1.3.3:
resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==}
@@ -5288,7 +6347,6 @@ packages:
define-properties: 1.2.1
es-abstract: 1.24.1
es-shim-unscopables: 1.1.0
- dev: false
/array.prototype.flatmap@1.3.3:
resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==}
@@ -5298,7 +6356,6 @@ packages:
define-properties: 1.2.1
es-abstract: 1.24.1
es-shim-unscopables: 1.1.0
- dev: false
/array.prototype.tosorted@1.1.4:
resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==}
@@ -5309,7 +6366,6 @@ packages:
es-abstract: 1.24.1
es-errors: 1.3.0
es-shim-unscopables: 1.1.0
- dev: false
/arraybuffer.prototype.slice@1.0.4:
resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
@@ -5322,7 +6378,6 @@ packages:
es-errors: 1.3.0
get-intrinsic: 1.3.0
is-array-buffer: 3.0.5
- dev: false
/assert-plus@1.0.0:
resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==}
@@ -5338,7 +6393,6 @@ packages:
/ast-types-flow@0.0.8:
resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==}
- dev: false
/astral-regex@2.0.0:
resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==}
@@ -5355,7 +6409,6 @@ packages:
/async-function@1.0.0:
resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
engines: {node: '>= 0.4'}
- dev: false
/async@3.2.6:
resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
@@ -5374,12 +6427,10 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
possible-typed-array-names: 1.1.0
- dev: false
/axe-core@4.11.1:
resolution: {integrity: sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==}
engines: {node: '>=4'}
- dev: false
/axios@1.16.1:
resolution: {integrity: sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A==}
@@ -5396,7 +6447,6 @@ packages:
/axobject-query@4.1.0:
resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
engines: {node: '>= 0.4'}
- dev: false
/bail@2.0.2:
resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
@@ -5415,6 +6465,12 @@ packages:
requiresBuild: true
dev: true
+ /baseline-browser-mapping@2.11.6:
+ resolution: {integrity: sha512-69D/imtToCsIcAl8WBS2YaRwA4jO/j0HhU+hELqMEu9f54MoUtI6+XH5mrKU8rEFNEk/Ui1I2MK4/JkWacclGw==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+ dev: false
+
/baseline-browser-mapping@2.9.11:
resolution: {integrity: sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==}
hasBin: true
@@ -5471,7 +6527,6 @@ packages:
engines: {node: '>=8'}
dependencies:
fill-range: 7.1.1
- dev: false
/browserslist@4.28.1:
resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==}
@@ -5610,7 +6665,6 @@ packages:
es-define-property: 1.0.1
get-intrinsic: 1.3.0
set-function-length: 1.2.2
- dev: false
/call-bound@1.0.4:
resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
@@ -5618,7 +6672,6 @@ packages:
dependencies:
call-bind-apply-helpers: 1.0.2
get-intrinsic: 1.3.0
- dev: false
/callsites@3.1.0:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
@@ -5712,6 +6765,10 @@ packages:
dev: true
optional: true
+ /client-only@0.0.1:
+ resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
+ dev: false
+
/cliui@8.0.1:
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
engines: {node: '>=12'}
@@ -6204,7 +7261,6 @@ packages:
/damerau-levenshtein@1.0.8:
resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
- dev: false
/data-urls@5.0.0:
resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==}
@@ -6221,7 +7277,6 @@ packages:
call-bound: 1.0.4
es-errors: 1.3.0
is-data-view: 1.0.2
- dev: false
/data-view-byte-length@1.0.2:
resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==}
@@ -6230,7 +7285,6 @@ packages:
call-bound: 1.0.4
es-errors: 1.3.0
is-data-view: 1.0.2
- dev: false
/data-view-byte-offset@1.0.1:
resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==}
@@ -6239,7 +7293,6 @@ packages:
call-bound: 1.0.4
es-errors: 1.3.0
is-data-view: 1.0.2
- dev: false
/dayjs@1.11.19:
resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==}
@@ -6253,7 +7306,6 @@ packages:
optional: true
dependencies:
ms: 2.1.3
- dev: false
/debug@4.4.0:
resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
@@ -6388,7 +7440,7 @@ packages:
/dir-compare@4.2.0:
resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==}
dependencies:
- minimatch: 3.1.2
+ minimatch: 3.1.5
p-limit: 3.1.0
dev: true
@@ -6425,7 +7477,7 @@ packages:
dependencies:
'@types/plist': 3.0.5
'@types/verror': 1.10.11
- ajv: 6.12.6
+ ajv: 6.15.0
crc: 3.8.0
iconv-corefoundation: 1.1.7
plist: 3.1.0
@@ -6439,7 +7491,6 @@ packages:
engines: {node: '>=0.10.0'}
dependencies:
esutils: 2.0.3
- dev: false
/doctrine@3.0.0:
resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
@@ -6644,6 +7695,14 @@ packages:
graceful-fs: 4.2.11
tapable: 2.3.0
+ /enhanced-resolve@5.24.4:
+ resolution: {integrity: sha512-GVoi+ICHocoOIU7qVVM48wOJziRsqrsyqlI0Ce0LdowRn6v3bcH2zUa9kp85ncx0nwIb9/HOCOLS3fdThDG/XQ==}
+ engines: {node: '>=10.13.0'}
+ dependencies:
+ graceful-fs: 4.2.11
+ tapable: 2.3.3
+ dev: true
+
/entities@6.0.1:
resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
engines: {node: '>=0.12'}
@@ -6733,7 +7792,6 @@ packages:
typed-array-length: 1.0.7
unbox-primitive: 1.1.0
which-typed-array: 1.1.19
- dev: false
/es-define-property@1.0.1:
resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
@@ -6763,7 +7821,6 @@ packages:
internal-slot: 1.1.0
iterator.prototype: 1.1.5
safe-array-concat: 1.1.3
- dev: false
/es-module-lexer@1.7.0:
resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
@@ -6789,7 +7846,6 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
hasown: 2.0.2
- dev: false
/es-to-primitive@1.3.0:
resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
@@ -6798,7 +7854,6 @@ packages:
is-callable: 1.2.7
is-date-object: 1.1.0
is-symbol: 1.1.1
- dev: false
/es-toolkit@1.48.1:
resolution: {integrity: sha512-wfnXlwd5I75eXRtdD2vuEs50xHHESECDsGD7yiQnfFVNoa5522NwXEbmgo98LfiukSQHs+mBM7/YG3qKJB9/mQ==}
@@ -6886,6 +7941,33 @@ packages:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
+ /eslint-config-next@16.2.12(@typescript-eslint/parser@8.65.0)(eslint@9.39.5)(typescript@5.5.4):
+ resolution: {integrity: sha512-iaaf4vvKo5h2LBdGt0JuRv7t0Ysqr9FMCiFxbptDg8LqOE//mIKR80DdpOnSVM7qjLH3jT8P0aFiwXxBEGZRXw==}
+ peerDependencies:
+ eslint: '>=9.0.0'
+ typescript: '>=3.3.1'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@next/eslint-plugin-next': 16.2.12
+ eslint: 9.39.5
+ eslint-import-resolver-node: 0.3.9
+ eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.5)
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.65.0)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.5)
+ eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.5)
+ eslint-plugin-react: 7.37.5(eslint@9.39.5)
+ eslint-plugin-react-hooks: 7.1.1(eslint@9.39.5)
+ globals: 16.4.0
+ typescript: 5.5.4
+ typescript-eslint: 8.65.0(eslint@9.39.5)(typescript@5.5.4)
+ transitivePeerDependencies:
+ - '@typescript-eslint/parser'
+ - eslint-import-resolver-webpack
+ - eslint-plugin-import-x
+ - supports-color
+ dev: true
+
/eslint-config-prettier@9.1.0(eslint@8.57.1):
resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==}
hasBin: true
@@ -6923,7 +8005,6 @@ packages:
resolve: 1.22.11
transitivePeerDependencies:
- supports-color
- dev: false
/eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@8.57.1):
resolution: {integrity: sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==}
@@ -6951,6 +8032,32 @@ packages:
- supports-color
dev: false
+ /eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.5):
+ resolution: {integrity: sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ eslint: '*'
+ eslint-plugin-import: '*'
+ eslint-plugin-import-x: '*'
+ peerDependenciesMeta:
+ eslint-plugin-import:
+ optional: true
+ eslint-plugin-import-x:
+ optional: true
+ dependencies:
+ '@nolyfill/is-core-module': 1.0.39
+ debug: 4.4.3
+ eslint: 9.39.5
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.65.0)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.5)
+ get-tsconfig: 4.13.0
+ is-bun-module: 2.0.0
+ stable-hash: 0.0.5
+ tinyglobby: 0.2.15
+ unrs-resolver: 1.11.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/eslint-mdx@3.6.2(eslint@8.57.1):
resolution: {integrity: sha512-5hczn5iSSEcwtNtVXFwCKIk6iLEDaZpwc3vjYDl/B779OzaAAK/ou16J2xVdO6ecOLEO1WZqp7MRCQ/WsKDUig==}
engines: {node: '>=18.0.0'}
@@ -7009,6 +8116,36 @@ packages:
- supports-color
dev: false
+ /eslint-module-utils@2.12.1(@typescript-eslint/parser@8.65.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.5):
+ resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ '@typescript-eslint/parser': '*'
+ eslint: '*'
+ eslint-import-resolver-node: '*'
+ eslint-import-resolver-typescript: '*'
+ eslint-import-resolver-webpack: '*'
+ peerDependenciesMeta:
+ '@typescript-eslint/parser':
+ optional: true
+ eslint:
+ optional: true
+ eslint-import-resolver-node:
+ optional: true
+ eslint-import-resolver-typescript:
+ optional: true
+ eslint-import-resolver-webpack:
+ optional: true
+ dependencies:
+ '@typescript-eslint/parser': 8.65.0(eslint@9.39.5)(typescript@5.5.4)
+ debug: 3.2.7
+ eslint: 9.39.5
+ eslint-import-resolver-node: 0.3.9
+ eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.5)
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/eslint-plugin-eslint-comments@3.2.0(eslint@8.57.1):
resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==}
engines: {node: '>=6.5.0'}
@@ -7057,6 +8194,43 @@ packages:
- supports-color
dev: false
+ /eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.65.0)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.5):
+ resolution: {integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ '@typescript-eslint/parser': '*'
+ eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9
+ peerDependenciesMeta:
+ '@typescript-eslint/parser':
+ optional: true
+ dependencies:
+ '@rtsao/scc': 1.1.0
+ '@typescript-eslint/parser': 8.65.0(eslint@9.39.5)(typescript@5.5.4)
+ array-includes: 3.1.9
+ array.prototype.findlastindex: 1.2.6
+ array.prototype.flat: 1.3.3
+ array.prototype.flatmap: 1.3.3
+ debug: 3.2.7
+ doctrine: 2.1.0
+ eslint: 9.39.5
+ eslint-import-resolver-node: 0.3.9
+ eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.65.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.5)
+ hasown: 2.0.2
+ is-core-module: 2.16.1
+ is-glob: 4.0.3
+ minimatch: 3.1.5
+ object.fromentries: 2.0.8
+ object.groupby: 1.0.3
+ object.values: 1.2.1
+ semver: 6.3.1
+ string.prototype.trimend: 1.0.9
+ tsconfig-paths: 3.15.0
+ transitivePeerDependencies:
+ - eslint-import-resolver-typescript
+ - eslint-import-resolver-webpack
+ - supports-color
+ dev: true
+
/eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.5.4):
resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -7096,12 +8270,36 @@ packages:
hasown: 2.0.2
jsx-ast-utils: 3.3.5
language-tags: 1.0.9
- minimatch: 3.1.2
+ minimatch: 3.1.5
object.fromentries: 2.0.8
safe-regex-test: 1.1.0
string.prototype.includes: 2.0.1
dev: false
+ /eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.5):
+ resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9
+ dependencies:
+ aria-query: 5.3.2
+ array-includes: 3.1.9
+ array.prototype.flatmap: 1.3.3
+ ast-types-flow: 0.0.8
+ axe-core: 4.11.1
+ axobject-query: 4.1.0
+ damerau-levenshtein: 1.0.8
+ emoji-regex: 9.2.2
+ eslint: 9.39.5
+ hasown: 2.0.2
+ jsx-ast-utils: 3.3.5
+ language-tags: 1.0.9
+ minimatch: 3.1.5
+ object.fromentries: 2.0.8
+ safe-regex-test: 1.1.0
+ string.prototype.includes: 2.0.1
+ dev: true
+
/eslint-plugin-mdx@3.6.2(eslint@8.57.1):
resolution: {integrity: sha512-RfMd5HYD/9+cqANhVWJbuBRg3huWUsAoGJNGmPsyiRD2X6BaG6bvt1omyk1ORlg81GK8ST7Ojt5fNAuwWhWU8A==}
engines: {node: '>=18.0.0'}
@@ -7152,6 +8350,22 @@ packages:
eslint: 8.57.1
dev: false
+ /eslint-plugin-react-hooks@7.1.1(eslint@9.39.5):
+ resolution: {integrity: sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/parser': 7.29.7
+ eslint: 9.39.5
+ hermes-parser: 0.25.1
+ zod: 3.25.76
+ zod-validation-error: 4.0.2(zod@3.25.76)
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/eslint-plugin-react@7.37.5(eslint@8.57.1):
resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==}
engines: {node: '>=4'}
@@ -7168,7 +8382,7 @@ packages:
estraverse: 5.3.0
hasown: 2.0.2
jsx-ast-utils: 3.3.5
- minimatch: 3.1.2
+ minimatch: 3.1.5
object.entries: 1.1.9
object.fromentries: 2.0.8
object.values: 1.2.1
@@ -7179,6 +8393,33 @@ packages:
string.prototype.repeat: 1.0.0
dev: false
+ /eslint-plugin-react@7.37.5(eslint@9.39.5):
+ resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7
+ dependencies:
+ array-includes: 3.1.9
+ array.prototype.findlast: 1.2.5
+ array.prototype.flatmap: 1.3.3
+ array.prototype.tosorted: 1.1.4
+ doctrine: 2.1.0
+ es-iterator-helpers: 1.2.2
+ eslint: 9.39.5
+ estraverse: 5.3.0
+ hasown: 2.0.2
+ jsx-ast-utils: 3.3.5
+ minimatch: 3.1.5
+ object.entries: 1.1.9
+ object.fromentries: 2.0.8
+ object.values: 1.2.1
+ prop-types: 15.8.1
+ resolve: 2.0.0-next.5
+ semver: 6.3.1
+ string.prototype.matchall: 4.0.12
+ string.prototype.repeat: 1.0.0
+ dev: true
+
/eslint-plugin-storybook@0.8.0(eslint@8.57.1)(typescript@5.5.4):
resolution: {integrity: sha512-CZeVO5EzmPY7qghO2t64oaFM+8FTaD4uzOEjHKp516exyTKo+skKAL9GI3QALS2BXhyALJjNtwbmr1XinGE8bA==}
engines: {node: '>= 18'}
@@ -7265,6 +8506,14 @@ packages:
esrecurse: 4.3.0
estraverse: 5.3.0
+ /eslint-scope@8.4.0:
+ resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
+ dev: true
+
/eslint-visitor-keys@2.1.0:
resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
engines: {node: '>=10'}
@@ -7274,6 +8523,16 @@ packages:
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ /eslint-visitor-keys@4.2.1:
+ resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ dev: true
+
+ /eslint-visitor-keys@5.0.1:
+ resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ dev: true
+
/eslint@8.57.1:
resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -7319,6 +8578,63 @@ packages:
transitivePeerDependencies:
- supports-color
+ /eslint@9.39.5:
+ resolution: {integrity: sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ hasBin: true
+ peerDependencies:
+ jiti: '*'
+ peerDependenciesMeta:
+ jiti:
+ optional: true
+ dependencies:
+ '@eslint-community/eslint-utils': 4.10.1(eslint@9.39.5)
+ '@eslint-community/regexpp': 4.12.2
+ '@eslint/config-array': 0.21.2
+ '@eslint/config-helpers': 0.4.2
+ '@eslint/core': 0.17.0
+ '@eslint/eslintrc': 3.3.6
+ '@eslint/js': 9.39.5
+ '@eslint/plugin-kit': 0.4.1
+ '@humanfs/node': 0.16.8
+ '@humanwhocodes/module-importer': 1.0.1
+ '@humanwhocodes/retry': 0.4.3
+ '@types/estree': 1.0.8
+ ajv: 6.15.0
+ chalk: 4.1.2
+ cross-spawn: 7.0.6
+ debug: 4.4.3
+ escape-string-regexp: 4.0.0
+ eslint-scope: 8.4.0
+ eslint-visitor-keys: 4.2.1
+ espree: 10.4.0
+ esquery: 1.6.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 8.0.0
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ ignore: 5.3.2
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ json-stable-stringify-without-jsonify: 1.0.1
+ lodash.merge: 4.6.2
+ minimatch: 3.1.5
+ natural-compare: 1.4.0
+ optionator: 0.9.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /espree@10.4.0:
+ resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ dependencies:
+ acorn: 8.15.0
+ acorn-jsx: 5.3.2(acorn@8.15.0)
+ eslint-visitor-keys: 4.2.1
+ dev: true
+
/espree@9.6.1:
resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -7420,6 +8736,17 @@ packages:
engines: {node: '>=6.0.0'}
dev: false
+ /fast-glob@3.3.1:
+ resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==}
+ engines: {node: '>=8.6.0'}
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.8
+ dev: true
+
/fast-glob@3.3.3:
resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
engines: {node: '>=8.6.0'}
@@ -7469,7 +8796,6 @@ packages:
optional: true
dependencies:
picomatch: 4.0.5
- dev: false
/fetch-cookie@2.2.0:
resolution: {integrity: sha512-h9AgfjURuCgA2+2ISl8GbavpUdR+WGAM2McW/ovn4tVccegp8ZqCKWSBR8uRdM8dDNlx5WdKRWxBYUwteLDCNQ==}
@@ -7483,6 +8809,13 @@ packages:
dependencies:
flat-cache: 3.2.0
+ /file-entry-cache@8.0.0:
+ resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
+ engines: {node: '>=16.0.0'}
+ dependencies:
+ flat-cache: 4.0.1
+ dev: true
+
/filelist@1.0.6:
resolution: {integrity: sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==}
dependencies:
@@ -7494,7 +8827,6 @@ packages:
engines: {node: '>=8'}
dependencies:
to-regex-range: 5.0.1
- dev: false
/find-up@4.1.0:
resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
@@ -7519,6 +8851,14 @@ packages:
keyv: 4.5.4
rimraf: 3.0.2
+ /flat-cache@4.0.1:
+ resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
+ engines: {node: '>=16'}
+ dependencies:
+ flatted: 3.3.3
+ keyv: 4.5.4
+ dev: true
+
/flatted@3.3.3:
resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
@@ -7543,7 +8883,6 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
is-callable: 1.2.7
- dev: false
/foreground-child@3.3.1:
resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
@@ -7632,7 +8971,6 @@ packages:
functions-have-names: 1.2.3
hasown: 2.0.2
is-callable: 1.2.7
- dev: false
/functional-red-black-tree@1.0.1:
resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==}
@@ -7640,7 +8978,6 @@ packages:
/functions-have-names@1.2.3:
resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
- dev: false
/gauge@4.0.4:
resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==}
@@ -7660,7 +8997,6 @@ packages:
/generator-function@2.0.1:
resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==}
engines: {node: '>= 0.4'}
- dev: false
/gensync@1.0.0-beta.2:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
@@ -7712,7 +9048,6 @@ packages:
call-bound: 1.0.4
es-errors: 1.3.0
get-intrinsic: 1.3.0
- dev: false
/get-tsconfig@4.13.0:
resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==}
@@ -7728,7 +9063,6 @@ packages:
engines: {node: '>= 6'}
dependencies:
is-glob: 4.0.3
- dev: false
/glob-parent@6.0.2:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
@@ -7753,7 +9087,7 @@ packages:
fs.realpath: 1.0.0
inflight: 1.0.6
inherits: 2.0.4
- minimatch: 3.1.2
+ minimatch: 3.1.5
once: 1.4.0
path-is-absolute: 1.0.1
@@ -7789,6 +9123,16 @@ packages:
dependencies:
type-fest: 0.20.2
+ /globals@14.0.0:
+ resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
+ engines: {node: '>=18'}
+ dev: true
+
+ /globals@16.4.0:
+ resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==}
+ engines: {node: '>=18'}
+ dev: true
+
/globalthis@1.0.4:
resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
engines: {node: '>= 0.4'}
@@ -7842,7 +9186,6 @@ packages:
/has-bigints@1.1.0:
resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
engines: {node: '>= 0.4'}
- dev: false
/has-flag@4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
@@ -7858,7 +9201,6 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
dunder-proto: 1.0.1
- dev: false
/has-symbols@1.1.0:
resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
@@ -7902,6 +9244,16 @@ packages:
'@types/hast': 3.0.4
dev: true
+ /hermes-estree@0.25.1:
+ resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==}
+ dev: true
+
+ /hermes-parser@0.25.1:
+ resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==}
+ dependencies:
+ hermes-estree: 0.25.1
+ dev: true
+
/hoist-non-react-statics@3.3.2:
resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
dependencies:
@@ -7941,7 +9293,6 @@ packages:
resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==}
dependencies:
void-elements: 3.1.0
- dev: false
/html-void-elements@3.0.0:
resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
@@ -8015,7 +9366,6 @@ packages:
dependencies:
'@babel/runtime': 7.28.4
typescript: 5.5.4
- dev: false
/iconv-corefoundation@1.1.7:
resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==}
@@ -8035,6 +9385,12 @@ packages:
safer-buffer: 2.1.2
dev: true
+ /icu-minify@4.13.4:
+ resolution: {integrity: sha512-yK6HyPLGlQjqm8fTKtnBpM77z7vl7JdDBN2EXLvmgAu/b7XaOHWZb73M3ISl9ahBTehBv7RYeqqWSHfk1v2YcA==}
+ dependencies:
+ '@formatjs/icu-messageformat-parser': 3.5.15
+ dev: false
+
/ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
requiresBuild: true
@@ -8049,6 +9405,11 @@ packages:
engines: {node: '>= 4'}
dev: false
+ /ignore@7.0.6:
+ resolution: {integrity: sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==}
+ engines: {node: '>= 4'}
+ dev: true
+
/immediate@3.3.0:
resolution: {integrity: sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==}
dev: true
@@ -8106,7 +9467,6 @@ packages:
es-errors: 1.3.0
hasown: 2.0.2
side-channel: 1.1.0
- dev: false
/internmap@1.0.1:
resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==}
@@ -8117,6 +9477,13 @@ packages:
engines: {node: '>=12'}
dev: true
+ /intl-messageformat@11.2.12:
+ resolution: {integrity: sha512-KW70Xxfcvy7vV3qODfvShWkFDPMqKDAa4N+hSyVBWGNtVhTUFYaqlD/l88DaYPKiVcPP4rPQ3qnH7i5K82Mg7g==}
+ dependencies:
+ '@formatjs/fast-memoize': 3.1.7
+ '@formatjs/icu-messageformat-parser': 3.5.15
+ dev: false
+
/ip-address@10.1.0:
resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==}
engines: {node: '>= 12'}
@@ -8140,7 +9507,6 @@ packages:
call-bind: 1.0.8
call-bound: 1.0.4
get-intrinsic: 1.3.0
- dev: false
/is-arrayish@0.2.1:
resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
@@ -8155,14 +9521,12 @@ packages:
get-proto: 1.0.1
has-tostringtag: 1.0.2
safe-regex-test: 1.1.0
- dev: false
/is-bigint@1.1.0:
resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==}
engines: {node: '>= 0.4'}
dependencies:
has-bigints: 1.1.0
- dev: false
/is-boolean-object@1.2.2:
resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
@@ -8170,7 +9534,6 @@ packages:
dependencies:
call-bound: 1.0.4
has-tostringtag: 1.0.2
- dev: false
/is-builtin-module@3.2.1:
resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==}
@@ -8183,12 +9546,10 @@ packages:
resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==}
dependencies:
semver: 7.7.1
- dev: false
/is-callable@1.2.7:
resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
engines: {node: '>= 0.4'}
- dev: false
/is-ci@3.0.1:
resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==}
@@ -8202,7 +9563,6 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
hasown: 2.0.2
- dev: false
/is-data-view@1.0.2:
resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==}
@@ -8211,7 +9571,6 @@ packages:
call-bound: 1.0.4
get-intrinsic: 1.3.0
is-typed-array: 1.1.15
- dev: false
/is-date-object@1.1.0:
resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
@@ -8219,7 +9578,6 @@ packages:
dependencies:
call-bound: 1.0.4
has-tostringtag: 1.0.2
- dev: false
/is-decimal@2.0.1:
resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
@@ -8238,7 +9596,6 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
call-bound: 1.0.4
- dev: false
/is-fullwidth-code-point@3.0.0:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
@@ -8253,7 +9610,6 @@ packages:
get-proto: 1.0.1
has-tostringtag: 1.0.2
safe-regex-test: 1.1.0
- dev: false
/is-glob@4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
@@ -8277,12 +9633,10 @@ packages:
/is-map@2.0.3:
resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
engines: {node: '>= 0.4'}
- dev: false
/is-negative-zero@2.0.3:
resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==}
engines: {node: '>= 0.4'}
- dev: false
/is-number-object@1.1.1:
resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==}
@@ -8290,12 +9644,10 @@ packages:
dependencies:
call-bound: 1.0.4
has-tostringtag: 1.0.2
- dev: false
/is-number@7.0.0:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
- dev: false
/is-path-inside@3.0.3:
resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
@@ -8318,19 +9670,16 @@ packages:
gopd: 1.2.0
has-tostringtag: 1.0.2
hasown: 2.0.2
- dev: false
/is-set@2.0.3:
resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==}
engines: {node: '>= 0.4'}
- dev: false
/is-shared-array-buffer@1.0.4:
resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==}
engines: {node: '>= 0.4'}
dependencies:
call-bound: 1.0.4
- dev: false
/is-string@1.1.1:
resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==}
@@ -8338,7 +9687,6 @@ packages:
dependencies:
call-bound: 1.0.4
has-tostringtag: 1.0.2
- dev: false
/is-symbol@1.1.1:
resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==}
@@ -8347,14 +9695,12 @@ packages:
call-bound: 1.0.4
has-symbols: 1.1.0
safe-regex-test: 1.1.0
- dev: false
/is-typed-array@1.1.15:
resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
engines: {node: '>= 0.4'}
dependencies:
which-typed-array: 1.1.19
- dev: false
/is-unicode-supported@0.1.0:
resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
@@ -8364,14 +9710,12 @@ packages:
/is-weakmap@2.0.2:
resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
engines: {node: '>= 0.4'}
- dev: false
/is-weakref@1.1.1:
resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==}
engines: {node: '>= 0.4'}
dependencies:
call-bound: 1.0.4
- dev: false
/is-weakset@2.0.4:
resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
@@ -8379,7 +9723,6 @@ packages:
dependencies:
call-bound: 1.0.4
get-intrinsic: 1.3.0
- dev: false
/is-what@5.5.0:
resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==}
@@ -8396,7 +9739,6 @@ packages:
/isarray@2.0.5:
resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
- dev: false
/isbinaryfile@4.0.10:
resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==}
@@ -8426,7 +9768,6 @@ packages:
get-proto: 1.0.1
has-symbols: 1.1.0
set-function-name: 2.0.2
- dev: false
/jackspeak@3.4.3:
resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
@@ -8449,6 +9790,11 @@ packages:
resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
hasBin: true
+ /jiti@2.7.0:
+ resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==}
+ hasBin: true
+ dev: true
+
/jju@1.4.0:
resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==}
dev: false
@@ -8461,6 +9807,13 @@ packages:
dependencies:
argparse: 2.0.1
+ /js-yaml@4.3.0:
+ resolution: {integrity: sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==}
+ hasBin: true
+ dependencies:
+ argparse: 2.0.1
+ dev: true
+
/jsdom@26.1.0:
resolution: {integrity: sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==}
engines: {node: '>=18'}
@@ -8535,7 +9888,6 @@ packages:
hasBin: true
dependencies:
minimist: 1.2.8
- dev: false
/json5@2.2.3:
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
@@ -8563,7 +9915,6 @@ packages:
array.prototype.flat: 1.3.3
object.assign: 4.1.7
object.values: 1.2.1
- dev: false
/katex@0.16.47:
resolution: {integrity: sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==}
@@ -8588,14 +9939,12 @@ packages:
/language-subtag-registry@0.3.23:
resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==}
- dev: false
/language-tags@1.0.9:
resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==}
engines: {node: '>=0.10'}
dependencies:
language-subtag-registry: 0.3.23
- dev: false
/layout-base@1.0.2:
resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==}
@@ -8680,6 +10029,15 @@ packages:
requiresBuild: true
optional: true
+ /lightningcss-android-arm64@1.32.0:
+ resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/lightningcss-darwin-arm64@1.30.2:
resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==}
engines: {node: '>= 12.0.0'}
@@ -8688,6 +10046,15 @@ packages:
requiresBuild: true
optional: true
+ /lightningcss-darwin-arm64@1.32.0:
+ resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/lightningcss-darwin-x64@1.30.2:
resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==}
engines: {node: '>= 12.0.0'}
@@ -8696,6 +10063,15 @@ packages:
requiresBuild: true
optional: true
+ /lightningcss-darwin-x64@1.32.0:
+ resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/lightningcss-freebsd-x64@1.30.2:
resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==}
engines: {node: '>= 12.0.0'}
@@ -8704,6 +10080,15 @@ packages:
requiresBuild: true
optional: true
+ /lightningcss-freebsd-x64@1.32.0:
+ resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/lightningcss-linux-arm-gnueabihf@1.30.2:
resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==}
engines: {node: '>= 12.0.0'}
@@ -8712,6 +10097,15 @@ packages:
requiresBuild: true
optional: true
+ /lightningcss-linux-arm-gnueabihf@1.32.0:
+ resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/lightningcss-linux-arm64-gnu@1.30.2:
resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==}
engines: {node: '>= 12.0.0'}
@@ -8720,6 +10114,15 @@ packages:
requiresBuild: true
optional: true
+ /lightningcss-linux-arm64-gnu@1.32.0:
+ resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/lightningcss-linux-arm64-musl@1.30.2:
resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==}
engines: {node: '>= 12.0.0'}
@@ -8728,6 +10131,15 @@ packages:
requiresBuild: true
optional: true
+ /lightningcss-linux-arm64-musl@1.32.0:
+ resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/lightningcss-linux-x64-gnu@1.30.2:
resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==}
engines: {node: '>= 12.0.0'}
@@ -8736,6 +10148,15 @@ packages:
requiresBuild: true
optional: true
+ /lightningcss-linux-x64-gnu@1.32.0:
+ resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/lightningcss-linux-x64-musl@1.30.2:
resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==}
engines: {node: '>= 12.0.0'}
@@ -8744,6 +10165,15 @@ packages:
requiresBuild: true
optional: true
+ /lightningcss-linux-x64-musl@1.32.0:
+ resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/lightningcss-win32-arm64-msvc@1.30.2:
resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==}
engines: {node: '>= 12.0.0'}
@@ -8752,6 +10182,15 @@ packages:
requiresBuild: true
optional: true
+ /lightningcss-win32-arm64-msvc@1.32.0:
+ resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/lightningcss-win32-x64-msvc@1.30.2:
resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==}
engines: {node: '>= 12.0.0'}
@@ -8760,6 +10199,15 @@ packages:
requiresBuild: true
optional: true
+ /lightningcss-win32-x64-msvc@1.32.0:
+ resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/lightningcss@1.30.2:
resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==}
engines: {node: '>= 12.0.0'}
@@ -8778,6 +10226,25 @@ packages:
lightningcss-win32-arm64-msvc: 1.30.2
lightningcss-win32-x64-msvc: 1.30.2
+ /lightningcss@1.32.0:
+ resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==}
+ engines: {node: '>= 12.0.0'}
+ dependencies:
+ detect-libc: 2.1.2
+ optionalDependencies:
+ lightningcss-android-arm64: 1.32.0
+ lightningcss-darwin-arm64: 1.32.0
+ lightningcss-darwin-x64: 1.32.0
+ lightningcss-freebsd-x64: 1.32.0
+ lightningcss-linux-arm-gnueabihf: 1.32.0
+ lightningcss-linux-arm64-gnu: 1.32.0
+ lightningcss-linux-arm64-musl: 1.32.0
+ lightningcss-linux-x64-gnu: 1.32.0
+ lightningcss-linux-x64-musl: 1.32.0
+ lightningcss-win32-arm64-msvc: 1.32.0
+ lightningcss-win32-x64-msvc: 1.32.0
+ dev: true
+
/lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
dev: false
@@ -8877,7 +10344,6 @@ packages:
hasBin: true
dependencies:
js-tokens: 4.0.0
- dev: false
/lowercase-keys@2.0.0:
resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==}
@@ -9106,7 +10572,6 @@ packages:
/merge2@1.4.1:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
- dev: false
/mermaid@11.15.0:
resolution: {integrity: sha512-pTMbcf3rWdtLiYGpmoTjHEpeY8seiy6sR+9nD7LOs8KfUbHE4lOUAprTRqRAcWSQ6MQpdX+YEsxShtGsINtPtw==}
@@ -9236,7 +10701,7 @@ packages:
/micromark-factory-mdx-expression@2.0.3:
resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==}
dependencies:
- '@types/estree': 1.0.7
+ '@types/estree': 1.0.8
devlop: 1.1.0
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
@@ -9320,7 +10785,7 @@ packages:
/micromark-util-events-to-acorn@2.0.3:
resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==}
dependencies:
- '@types/estree': 1.0.7
+ '@types/estree': 1.0.8
'@types/unist': 3.0.3
devlop: 1.1.0
estree-util-visit: 2.0.0
@@ -9397,7 +10862,6 @@ packages:
dependencies:
braces: 3.0.3
picomatch: 2.3.1
- dev: false
/mime-db@1.33.0:
resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==}
@@ -9446,6 +10910,11 @@ packages:
dependencies:
brace-expansion: 1.1.11
+ /minimatch@3.1.5:
+ resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==}
+ dependencies:
+ brace-expansion: 1.1.11
+
/minimatch@5.1.9:
resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==}
engines: {node: '>=10'}
@@ -9567,11 +11036,15 @@ packages:
hasBin: true
dev: true
+ /nanoid@3.3.16:
+ resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
/napi-postinstall@0.3.4:
resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==}
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
hasBin: true
- dev: false
/natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
@@ -9581,6 +11054,84 @@ packages:
engines: {node: '>= 0.6'}
dev: true
+ /negotiator@1.0.0:
+ resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
+ engines: {node: '>= 0.6'}
+ dev: false
+
+ /next-intl-swc-plugin-extractor@4.13.4:
+ resolution: {integrity: sha512-uN1+NMUYbG6YkO3q+rjc2bvAPX9nQ23owemvHJAyW0pRbQjVDwvNhmrV5qaak0oQc/9okbK17KLT49AoMGhVEQ==}
+ dev: false
+
+ /next-intl@4.13.4(next@16.2.12)(react@19.2.4)(typescript@5.5.4):
+ resolution: {integrity: sha512-jhPAT0u0lahIK6E4gVdZAehugWCosBhLG8sV7xMzgSVoJpxHObP+Fiu+z2FfkEW0XPPtr7uEXoUlLEfhxhNMTg==}
+ peerDependencies:
+ next: ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@formatjs/intl-localematcher': 0.8.13
+ '@parcel/watcher': 2.6.0
+ '@swc/core': 1.15.46
+ icu-minify: 4.13.4
+ negotiator: 1.0.0
+ next: 16.2.12(@babel/core@7.28.5)(react-dom@19.2.4)(react@19.2.4)
+ next-intl-swc-plugin-extractor: 4.13.4
+ po-parser: 2.1.1
+ react: 19.2.4
+ typescript: 5.5.4
+ use-intl: 4.13.4(react@19.2.4)
+ transitivePeerDependencies:
+ - '@swc/helpers'
+ dev: false
+
+ /next@16.2.12(@babel/core@7.28.5)(react-dom@19.2.4)(react@19.2.4):
+ resolution: {integrity: sha512-iD59eYQWmbFcEbX7v/acG5DRym9iw1DdaPoD0WTA920naWsE25wShzJW4+UvAs8MK9EC2kBfIH6vtto1H1PHGw==}
+ engines: {node: '>=20.9.0'}
+ hasBin: true
+ peerDependencies:
+ '@opentelemetry/api': ^1.1.0
+ '@playwright/test': ^1.51.1
+ babel-plugin-react-compiler: '*'
+ react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
+ react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
+ sass: ^1.3.0
+ peerDependenciesMeta:
+ '@opentelemetry/api':
+ optional: true
+ '@playwright/test':
+ optional: true
+ babel-plugin-react-compiler:
+ optional: true
+ sass:
+ optional: true
+ dependencies:
+ '@next/env': 16.2.12
+ '@swc/helpers': 0.5.15
+ baseline-browser-mapping: 2.11.6
+ caniuse-lite: 1.0.30001762
+ postcss: 8.4.31
+ react: 19.2.4
+ react-dom: 19.2.4(react@19.2.4)
+ styled-jsx: 5.1.6(@babel/core@7.28.5)(react@19.2.4)
+ optionalDependencies:
+ '@next/swc-darwin-arm64': 16.2.12
+ '@next/swc-darwin-x64': 16.2.12
+ '@next/swc-linux-arm64-gnu': 16.2.12
+ '@next/swc-linux-arm64-musl': 16.2.12
+ '@next/swc-linux-x64-gnu': 16.2.12
+ '@next/swc-linux-x64-musl': 16.2.12
+ '@next/swc-win32-arm64-msvc': 16.2.12
+ '@next/swc-win32-x64-msvc': 16.2.12
+ sharp: 0.34.5
+ transitivePeerDependencies:
+ - '@babel/core'
+ - babel-plugin-macros
+ dev: false
+
/node-abi@3.89.0:
resolution: {integrity: sha512-6u9UwL0HlAl21+agMN3YAMXcKByMqwGx+pq+P76vii5f7hTPtKDp08/H9py6DY+cfDw7kQNTGEj/rly3IgbNQA==}
engines: {node: '>=10'}
@@ -9594,6 +11145,10 @@ packages:
dev: true
optional: true
+ /node-addon-api@7.1.1:
+ resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
+ dev: false
+
/node-api-version@0.2.1:
resolution: {integrity: sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==}
dependencies:
@@ -9671,7 +11226,7 @@ packages:
engines: {node: ^16.14.0 || >=18.0.0}
dependencies:
hosted-git-info: 7.0.2
- semver: 7.7.1
+ semver: 7.7.4
validate-npm-package-license: 3.0.4
dev: false
@@ -9735,12 +11290,10 @@ packages:
/object-assign@4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
- dev: false
/object-inspect@1.13.4:
resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
engines: {node: '>= 0.4'}
- dev: false
/object-keys@1.1.1:
resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
@@ -9756,7 +11309,6 @@ packages:
es-object-atoms: 1.1.1
has-symbols: 1.1.0
object-keys: 1.1.1
- dev: false
/object.entries@1.1.9:
resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==}
@@ -9766,7 +11318,6 @@ packages:
call-bound: 1.0.4
define-properties: 1.2.1
es-object-atoms: 1.1.1
- dev: false
/object.fromentries@2.0.8:
resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==}
@@ -9776,7 +11327,6 @@ packages:
define-properties: 1.2.1
es-abstract: 1.24.1
es-object-atoms: 1.1.1
- dev: false
/object.groupby@1.0.3:
resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==}
@@ -9785,7 +11335,6 @@ packages:
call-bind: 1.0.8
define-properties: 1.2.1
es-abstract: 1.24.1
- dev: false
/object.values@1.2.1:
resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==}
@@ -9795,7 +11344,6 @@ packages:
call-bound: 1.0.4
define-properties: 1.2.1
es-object-atoms: 1.1.1
- dev: false
/obug@2.1.1:
resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==}
@@ -9858,7 +11406,6 @@ packages:
get-intrinsic: 1.3.0
object-keys: 1.1.1
safe-push-apply: 1.0.0
- dev: false
/p-cancelable@2.1.1:
resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==}
@@ -9973,7 +11520,6 @@ packages:
/path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
- dev: false
/path-scurry@1.11.1:
resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
@@ -10010,7 +11556,6 @@ packages:
/picomatch@2.3.1:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
- dev: false
/picomatch@4.0.3:
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
@@ -10019,7 +11564,6 @@ packages:
/picomatch@4.0.5:
resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==}
engines: {node: '>=12'}
- dev: false
/plist@3.1.0:
resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==}
@@ -10035,6 +11579,10 @@ packages:
engines: {node: '>=4'}
dev: false
+ /po-parser@2.1.1:
+ resolution: {integrity: sha512-ECF4zHLbUItpUgE3OTtLKlPjeBN+fKEczj2zYjDfCGOzicNs0GK3Vg2IoAYwx7LH/XYw43fZQP6xnZ4TkNxSLQ==}
+ dev: false
+
/points-on-curve@0.2.0:
resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==}
dev: true
@@ -10049,6 +11597,14 @@ packages:
/possible-typed-array-names@1.1.0:
resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
engines: {node: '>= 0.4'}
+
+ /postcss@8.4.31:
+ resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
+ engines: {node: ^10 || ^12 || >=14}
+ dependencies:
+ nanoid: 3.3.16
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
dev: false
/postcss@8.5.15:
@@ -10060,6 +11616,15 @@ packages:
source-map-js: 1.2.1
dev: true
+ /postcss@8.5.24:
+ resolution: {integrity: sha512-8RyVklq0owXUTa4xlpzu4l9AaVKIdQvAcOHZWaMh98HgySsUtxRVf/chRe3dsSLqb6i40BzGRzEUddRaI+9TSw==}
+ engines: {node: ^10 || ^12 || >=14}
+ dependencies:
+ nanoid: 3.3.16
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+ dev: true
+
/postcss@8.5.3:
resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
engines: {node: ^10 || ^12 || >=14}
@@ -10303,7 +11868,6 @@ packages:
loose-envify: 1.4.0
object-assign: 4.1.1
react-is: 16.13.1
- dev: false
/property-information@7.2.0:
resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==}
@@ -10472,6 +12036,15 @@ packages:
react: 19.2.3
scheduler: 0.27.0
+ /react-dom@19.2.4(react@19.2.4):
+ resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==}
+ peerDependencies:
+ react: ^19.2.4
+ dependencies:
+ react: 19.2.4
+ scheduler: 0.27.0
+ dev: false
+
/react-hook-form@7.79.0(react@19.2.3):
resolution: {integrity: sha512-mhYp/MTmXvzYX6AJcJVko0rktoIhhmRnEouObj4wF5i/tCttgJvnp1+9wRkpITZjDTqpo4IOSJqu0dBlPlV/Lw==}
engines: {node: '>=18.0.0'}
@@ -10503,11 +12076,9 @@ packages:
react: 19.2.3
react-dom: 19.2.3(react@19.2.3)
typescript: 5.5.4
- dev: false
/react-is@16.13.1:
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
- dev: false
/react-is@17.0.2:
resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
@@ -10639,6 +12210,11 @@ packages:
resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==}
engines: {node: '>=0.10.0'}
+ /react@19.2.4:
+ resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
/read-binary-file-arch@1.0.6:
resolution: {integrity: sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==}
hasBin: true
@@ -10730,7 +12306,6 @@ packages:
get-intrinsic: 1.3.0
get-proto: 1.0.1
which-builtin-type: 1.2.1
- dev: false
/regex-recursion@6.0.2:
resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==}
@@ -10763,7 +12338,6 @@ packages:
get-proto: 1.0.1
gopd: 1.2.0
set-function-name: 2.0.2
- dev: false
/regjsparser@0.10.0:
resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==}
@@ -10856,7 +12430,6 @@ packages:
is-core-module: 2.16.1
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
- dev: false
/resolve@2.0.0-next.5:
resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
@@ -10865,7 +12438,6 @@ packages:
is-core-module: 2.16.1
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
- dev: false
/responselike@2.0.1:
resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==}
@@ -11021,7 +12593,6 @@ packages:
get-intrinsic: 1.3.0
has-symbols: 1.1.0
isarray: 2.0.5
- dev: false
/safe-buffer@5.1.2:
resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
@@ -11036,7 +12607,6 @@ packages:
dependencies:
es-errors: 1.3.0
isarray: 2.0.5
- dev: false
/safe-regex-test@1.1.0:
resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
@@ -11045,7 +12615,6 @@ packages:
call-bound: 1.0.4
es-errors: 1.3.0
is-regex: 1.2.1
- dev: false
/safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
@@ -11126,7 +12695,6 @@ packages:
get-intrinsic: 1.3.0
gopd: 1.2.0
has-property-descriptors: 1.0.2
- dev: false
/set-function-name@2.0.2:
resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
@@ -11136,7 +12704,6 @@ packages:
es-errors: 1.3.0
functions-have-names: 1.2.3
has-property-descriptors: 1.0.2
- dev: false
/set-proto@1.0.0:
resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==}
@@ -11145,7 +12712,42 @@ packages:
dunder-proto: 1.0.1
es-errors: 1.3.0
es-object-atoms: 1.1.1
+
+ /sharp@0.34.5:
+ resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ requiresBuild: true
+ dependencies:
+ '@img/colour': 1.1.0
+ detect-libc: 2.1.2
+ semver: 7.7.4
+ optionalDependencies:
+ '@img/sharp-darwin-arm64': 0.34.5
+ '@img/sharp-darwin-x64': 0.34.5
+ '@img/sharp-libvips-darwin-arm64': 1.2.4
+ '@img/sharp-libvips-darwin-x64': 1.2.4
+ '@img/sharp-libvips-linux-arm': 1.2.4
+ '@img/sharp-libvips-linux-arm64': 1.2.4
+ '@img/sharp-libvips-linux-ppc64': 1.2.4
+ '@img/sharp-libvips-linux-riscv64': 1.2.4
+ '@img/sharp-libvips-linux-s390x': 1.2.4
+ '@img/sharp-libvips-linux-x64': 1.2.4
+ '@img/sharp-libvips-linuxmusl-arm64': 1.2.4
+ '@img/sharp-libvips-linuxmusl-x64': 1.2.4
+ '@img/sharp-linux-arm': 0.34.5
+ '@img/sharp-linux-arm64': 0.34.5
+ '@img/sharp-linux-ppc64': 0.34.5
+ '@img/sharp-linux-riscv64': 0.34.5
+ '@img/sharp-linux-s390x': 0.34.5
+ '@img/sharp-linux-x64': 0.34.5
+ '@img/sharp-linuxmusl-arm64': 0.34.5
+ '@img/sharp-linuxmusl-x64': 0.34.5
+ '@img/sharp-wasm32': 0.34.5
+ '@img/sharp-win32-arm64': 0.34.5
+ '@img/sharp-win32-ia32': 0.34.5
+ '@img/sharp-win32-x64': 0.34.5
dev: false
+ optional: true
/shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
@@ -11176,7 +12778,6 @@ packages:
dependencies:
es-errors: 1.3.0
object-inspect: 1.13.4
- dev: false
/side-channel-map@1.0.1:
resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
@@ -11186,7 +12787,6 @@ packages:
es-errors: 1.3.0
get-intrinsic: 1.3.0
object-inspect: 1.13.4
- dev: false
/side-channel-weakmap@1.0.2:
resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
@@ -11197,7 +12797,6 @@ packages:
get-intrinsic: 1.3.0
object-inspect: 1.13.4
side-channel-map: 1.0.1
- dev: false
/side-channel@1.1.0:
resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
@@ -11208,7 +12807,6 @@ packages:
side-channel-list: 1.0.0
side-channel-map: 1.0.1
side-channel-weakmap: 1.0.2
- dev: false
/siginfo@2.0.0:
resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
@@ -11352,7 +12950,6 @@ packages:
/stable-hash@0.0.5:
resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==}
- dev: false
/stackback@0.0.2:
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
@@ -11373,7 +12970,6 @@ packages:
dependencies:
es-errors: 1.3.0
internal-slot: 1.1.0
- dev: false
/string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
@@ -11407,7 +13003,6 @@ packages:
call-bind: 1.0.8
define-properties: 1.2.1
es-abstract: 1.24.1
- dev: false
/string.prototype.matchall@4.0.12:
resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==}
@@ -11426,14 +13021,12 @@ packages:
regexp.prototype.flags: 1.5.4
set-function-name: 2.0.2
side-channel: 1.1.0
- dev: false
/string.prototype.repeat@1.0.0:
resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==}
dependencies:
define-properties: 1.2.1
es-abstract: 1.24.1
- dev: false
/string.prototype.trim@1.2.10:
resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==}
@@ -11446,7 +13039,6 @@ packages:
es-abstract: 1.24.1
es-object-atoms: 1.1.1
has-property-descriptors: 1.0.2
- dev: false
/string.prototype.trimend@1.0.9:
resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==}
@@ -11456,7 +13048,6 @@ packages:
call-bound: 1.0.4
define-properties: 1.2.1
es-object-atoms: 1.1.1
- dev: false
/string.prototype.trimstart@1.0.8:
resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
@@ -11465,7 +13056,6 @@ packages:
call-bind: 1.0.8
define-properties: 1.2.1
es-object-atoms: 1.1.1
- dev: false
/string_decoder@0.10.31:
resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==}
@@ -11503,7 +13093,6 @@ packages:
/strip-bom@3.0.0:
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
engines: {node: '>=4'}
- dev: false
/strip-indent@3.0.0:
resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
@@ -11515,6 +13104,24 @@ packages:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
+ /styled-jsx@5.1.6(@babel/core@7.28.5)(react@19.2.4):
+ resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==}
+ engines: {node: '>= 12.0.0'}
+ peerDependencies:
+ '@babel/core': '*'
+ babel-plugin-macros: '*'
+ react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0'
+ peerDependenciesMeta:
+ '@babel/core':
+ optional: true
+ babel-plugin-macros:
+ optional: true
+ dependencies:
+ '@babel/core': 7.28.5
+ client-only: 0.0.1
+ react: 19.2.4
+ dev: false
+
/stylis@4.4.0:
resolution: {integrity: sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==}
dev: true
@@ -11557,7 +13164,6 @@ packages:
/supports-preserve-symlinks-flag@1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
- dev: false
/symbol-tree@3.2.4:
resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
@@ -11594,10 +13200,19 @@ packages:
/tailwindcss@4.1.18:
resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==}
+ /tailwindcss@4.3.3:
+ resolution: {integrity: sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==}
+ dev: true
+
/tapable@2.3.0:
resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
engines: {node: '>=6'}
+ /tapable@2.3.3:
+ resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==}
+ engines: {node: '>=6'}
+ dev: true
+
/tar-stream@2.2.0:
resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
engines: {node: '>=6'}
@@ -11665,7 +13280,6 @@ packages:
dependencies:
fdir: 6.5.0(picomatch@4.0.5)
picomatch: 4.0.5
- dev: false
/tinyrainbow@3.0.3:
resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==}
@@ -11699,7 +13313,6 @@ packages:
engines: {node: '>=8.0'}
dependencies:
is-number: 7.0.0
- dev: false
/tough-cookie@4.1.4:
resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==}
@@ -11750,6 +13363,15 @@ packages:
typescript: 5.5.4
dev: false
+ /ts-api-utils@2.5.0(typescript@5.5.4):
+ resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==}
+ engines: {node: '>=18.12'}
+ peerDependencies:
+ typescript: '>=4.8.4'
+ dependencies:
+ typescript: 5.5.4
+ dev: true
+
/ts-dedent@2.2.0:
resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==}
engines: {node: '>=6.10'}
@@ -11761,7 +13383,6 @@ packages:
json5: 1.0.2
minimist: 1.2.8
strip-bom: 3.0.0
- dev: false
/tslib@1.14.1:
resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
@@ -11770,7 +13391,6 @@ packages:
/tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
requiresBuild: true
- dev: false
/tsutils@3.21.0(typescript@5.5.4):
resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
@@ -11890,7 +13510,6 @@ packages:
call-bound: 1.0.4
es-errors: 1.3.0
is-typed-array: 1.1.15
- dev: false
/typed-array-byte-length@1.0.3:
resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==}
@@ -11901,7 +13520,6 @@ packages:
gopd: 1.2.0
has-proto: 1.2.0
is-typed-array: 1.1.15
- dev: false
/typed-array-byte-offset@1.0.4:
resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==}
@@ -11914,7 +13532,6 @@ packages:
has-proto: 1.2.0
is-typed-array: 1.1.15
reflect.getprototypeof: 1.0.10
- dev: false
/typed-array-length@1.0.7:
resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
@@ -11926,12 +13543,28 @@ packages:
is-typed-array: 1.1.15
possible-typed-array-names: 1.1.0
reflect.getprototypeof: 1.0.10
- dev: false
/typedarray@0.0.6:
resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
dev: false
+ /typescript-eslint@8.65.0(eslint@9.39.5)(typescript@5.5.4):
+ resolution: {integrity: sha512-/ggrHAwyjENDusvyxbuqxAC2dTnZg/Z8F+fgQtYIz+L6n/9HfSlEZcFGV/NsMNa6CkGk0xUjUAFwC0vHOflvIA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: '>=4.8.4 <6.1.0'
+ dependencies:
+ '@typescript-eslint/eslint-plugin': 8.65.0(@typescript-eslint/parser@8.65.0)(eslint@9.39.5)(typescript@5.5.4)
+ '@typescript-eslint/parser': 8.65.0(eslint@9.39.5)(typescript@5.5.4)
+ '@typescript-eslint/typescript-estree': 8.65.0(typescript@5.5.4)
+ '@typescript-eslint/utils': 8.65.0(eslint@9.39.5)(typescript@5.5.4)
+ eslint: 9.39.5
+ typescript: 5.5.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/typescript@5.5.4:
resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==}
engines: {node: '>=14.17'}
@@ -11950,7 +13583,6 @@ packages:
has-bigints: 1.1.0
has-symbols: 1.1.0
which-boxed-primitive: 1.1.1
- dev: false
/undici-types@6.21.0:
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
@@ -12089,7 +13721,6 @@ packages:
'@unrs/resolver-binding-win32-arm64-msvc': 1.11.1
'@unrs/resolver-binding-win32-ia32-msvc': 1.11.1
'@unrs/resolver-binding-win32-x64-msvc': 1.11.1
- dev: false
/update-browserslist-db@1.2.3(browserslist@4.28.1):
resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
@@ -12140,6 +13771,18 @@ packages:
react: 19.2.3
dev: false
+ /use-intl@4.13.4(react@19.2.4):
+ resolution: {integrity: sha512-wRhU5zyPNgu845++EJ8ckQsi89b22QUop7NlGxNXpsnKSwEJr7WErAkdAYeVQgFTmDWsa8e2NI1e14XbWz9Ecw==}
+ peerDependencies:
+ react: ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0
+ dependencies:
+ '@formatjs/fast-memoize': 3.1.7
+ '@schummar/icu-type-parser': 1.21.5
+ icu-minify: 4.13.4
+ intl-messageformat: 11.2.12
+ react: 19.2.4
+ dev: false
+
/use-isomorphic-layout-effect@1.2.1(@types/react@19.2.7)(react@19.2.3):
resolution: {integrity: sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA==}
peerDependencies:
@@ -12579,7 +14222,6 @@ packages:
/void-elements@3.1.0:
resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==}
engines: {node: '>=0.10.0'}
- dev: false
/vue@3.5.38(typescript@5.5.4):
resolution: {integrity: sha512-vAMKHfImQlYSy0C+PBue4s3ERZ2xGKfgZg5GXAsLInq1dyh2H78ILVP5sK0KPFPVW4kv+OGCIvBEondcjpZp7A==}
@@ -12669,7 +14311,6 @@ packages:
is-number-object: 1.1.1
is-string: 1.1.1
is-symbol: 1.1.1
- dev: false
/which-builtin-type@1.2.1:
resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==}
@@ -12688,7 +14329,6 @@ packages:
which-boxed-primitive: 1.1.1
which-collection: 1.0.2
which-typed-array: 1.1.19
- dev: false
/which-collection@1.0.2:
resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
@@ -12698,7 +14338,6 @@ packages:
is-set: 2.0.3
is-weakmap: 2.0.2
is-weakset: 2.0.4
- dev: false
/which-typed-array@1.1.19:
resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==}
@@ -12711,7 +14350,6 @@ packages:
get-proto: 1.0.1
gopd: 1.2.0
has-tostringtag: 1.0.2
- dev: false
/which@2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
@@ -12854,9 +14492,17 @@ packages:
readable-stream: 3.6.2
dev: true
+ /zod-validation-error@4.0.2(zod@3.25.76):
+ resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ zod: ^3.25.0 || ^4.0.0
+ dependencies:
+ zod: 3.25.76
+ dev: true
+
/zod@3.25.76:
resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
- dev: false
/zustand@5.0.14(@types/react@19.2.7)(react@19.2.3):
resolution: {integrity: sha512-/8tAspM5LMPr28b3fwLYrtdj77ECpfZviaP75CMTnwO8ISyaE4GDIG/9rDDYq/cH9D2Xw2A2RXglLInmVBQB/g==}