diff --git a/TODO.md b/TODO.md index 083bb12..7fd3d3d 100644 --- a/TODO.md +++ b/TODO.md @@ -1,22 +1,26 @@ -# TODO — Post v0 Launch - -Items to revisit after the initial site launch. Nothing here is blocking v0. +# TODO — WE3 Agency Website --- -## Session Summary (4 Feb 2026) +## Session Context + +**Last Updated**: 2026-02-04 + +**Current Focus**: Restructuring TODO.md for AI collaboration and consolidating all tasks from investigation findings. -### Where we landed +### Session Summary (4 Feb 2026) + +#### Where we landed v0 of the WE3 agency website is built and pushed to `gp-02-02-2026`. The site is a single Astro build (no variant system) with 12 pages, a design token pipeline (Style Dictionary), and a config-driven logo variant system. -### What was done this session +#### What was done this session - **Logo variant system** — SVG logos in `public/images/logos/` (`warm.svg`, `claude.svg`). Active variant controlled by `SITE.logo` in `src/lib/site.ts`. Layout.astro derives the path dynamically for nav and footer. One-line swap. - **Velvet hover effect** — CSS filter on both logo `` tags transitions to velvet (`#720A63`) on hover, using `var(--sys-motion-fast)`. - **Archived dead files** — Old logo files (`we3-logo-claude.svg`, `we3-logo.svg`, `logo-placeholder.svg`) moved to `_archive/images/`. Old multi-variant `content/` directory moved to `_archive/content/`. - **READMEs rewritten** — Root `README.md` updated (Vercel, page inventory, key systems). `website/README.md` replaced old A/B variant docs with current single-site architecture. - **This TODO file** created to capture everything for the next phase. -### Key context for next session +#### Key context for next session - **Site config**: `website/src/lib/site.ts` — single source of truth, currently just `logo: 'warm'` - **Layout**: `website/src/layouts/Layout.astro` — shell for all pages (nav, footer, floating dock, scripts, cursor) - **Tokens**: Generated via `pnpm run tokens:build` → `src/styles/tokens.generated.css`. 15 derived tokens are hand-written in `global.css` (stripes, glows, shadows). 17 bonus tokens exist in JSON but aren't consumed yet. @@ -27,110 +31,268 @@ v0 of the WE3 agency website is built and pushed to `gp-02-02-2026`. The site is --- -## Pre-Deploy (do before first production deploy) - -### Fix Vercel install command -`vercel.json` uses `npm install` but the project uses pnpm. Update `installCommand` to `pnpm install` or remove it entirely so Vercel auto-detects from `pnpm-lock.yaml`. **This could break the production build.** - -### Set production site URL -`astro.config.mjs` line 4 is `site: "http://localhost:4321"`. Change to the real production domain before deploy. Affects canonical URLs and any future sitemap/RSS generation. +## Current Focus -### Dependabot vulnerabilities -GitHub flagged 16 vulnerabilities (3 high, 11 moderate, 2 low) on the default branch. Run `pnpm audit` and address the high-severity ones before launch. +*No items currently in focus. Move tasks here when starting work.* --- -## Design Tokens +## Critical Priority -### Hand-written derived tokens (15 "missing" from JSON) -The 15 variables not in `tokens/tokens.json` are **intentionally hand-authored** in `global.css`: stripe gradients (`--s1`..`--s5`), the stacked/repeating stripe backgrounds, warm glow, gold glow, and shadow values. These are compositional — they combine primitives in ways that don't map cleanly to a flat token file. Decide later whether to: -- Leave them hand-written (current, works fine) -- Promote them to a second token file (e.g. `tokens/derived.json`) with a custom Style Dictionary transform -- Accept the split as a feature, not a bug +### Pre-Deploy -### Bonus tokens (17 extras from JSON) -The token JSON introduced z-index, breakpoint, and additional spacing/radius values that aren't yet consumed in CSS. They're harmless (generated but unused). Decide whether to: -- Wire them into components as the design evolves -- Prune unused ones from the JSON to keep the token file honest +- [ ] Fix Vercel install command #task[id:task_01HQABCD1234EFGH5678IJKL status:to-do priority:critical created:2026-02-04] + - **Location**: `vercel.json` + - **Issue**: Uses `npm install` but project uses pnpm. Could break production build. + - **Fix**: Update `installCommand` to `pnpm install` or remove to auto-detect from `pnpm-lock.yaml` + - **Est**: 5 min ---- - -## Site Config & Variant System +- [ ] **🔴 Human Input Required**: Set production site URL #task[id:task_01HQABCD1234EFGH5678IJKM status:to-do priority:critical created:2026-02-04] + - **Location**: `website/astro.config.mjs` line 4 + - **Issue**: Hardcoded to `"http://localhost:4321"`. Affects canonical URLs and sitemap generation. + - **Fix**: Change to production domain name + - **Est**: 2 min (after domain provided) + - **Human Input**: Decision - Requires actual production domain name -### `variant-claude` body class is hardcoded -`Layout.astro:51` has ``. This controls the custom magnetic cursor and any variant-specific CSS in `global.css`. It doesn't track `SITE.logo`. Decide: -- Make it dynamic (`variant-${SITE.logo}`) so cursor and other variant styles follow the logo choice -- Or keep it pinned to `claude` if the cursor behaviour is meant to persist regardless of logo +- [ ] Fix Dependabot vulnerabilities #task[id:task_01HQABCD1234EFGH5678IJKN status:to-do priority:critical created:2026-02-04] + - **Location**: GitHub flagged 16 vulnerabilities (3 high, 11 moderate, 2 low) + - **Issue**: Security vulnerabilities on default branch + - **Fix**: Run `pnpm audit` and address high-severity ones before launch + - **Est**: 30-60 min -### Favicon not tied to logo variant system -`public/favicon.svg` is its own thing — a simplified WE3 mark. It could stay independent or eventually be generated per-variant. Low priority. +- [ ] **🔴 Human Input Required**: Contact form backend API #task[id:task_01HQABCD1234EFGH5678IJKO status:to-do priority:critical created:2026-02-04] + - **Location**: `website/src/pages/contact.astro` line 72 + - **Issue**: Form has no `action` attribute or submission handler. Comment says "in production, this would submit to an API" + - **Fix**: Implement backend API endpoint + form submission handler + - **Est**: 4-8 hours (after service selected) + - **Human Input**: Decision - Choose service (Vercel serverless, Formspree, Netlify Forms, custom API) --- -## SEO & Meta +## High Priority -### Open Graph / Twitter Card tags -No `og:title`, `og:description`, `og:image`, or Twitter Card meta tags. Social shares will render with defaults. Add to `Layout.astro` props and head. +### UX Fixes -### Astro site URL hardcoded to localhost -`astro.config.mjs` line 4: `site: "http://localhost:4321"`. Should be the production domain. Affects canonical URLs, sitemap generation, and any absolute URL helpers. +- [ ] Mobile floating nav rendering #task[id:task_01HQABCD1234EFGH5678IJKP status:to-do priority:high created:2026-02-04] + - **Location**: `website/src/layouts/Layout.astro` lines 935-942 + - **Issue**: Floating nav may overflow or break layout on mobile + - **Fix**: Improve mobile responsive styles for floating nav + - **Est**: 2-4 hours -### Sitemap and robots.txt -Neither exists. Astro has a `@astrojs/sitemap` integration that generates both at build time. +- [ ] Contact form client-side handler #task[id:task_01HQABCD1234EFGH5678IJKQ status:to-do priority:high created:2026-02-04] + - **Location**: `website/src/pages/contact.astro` line 72 + - **Issue**: Form has no client-side validation or submission handler + - **Fix**: Add form submission handler with client-side validation + - **Est**: 2-4 hours ---- +- [ ] Safari cursor performance #task[id:task_01HQABCD1234EFGH5678IJKR status:to-do priority:high created:2026-02-04] + - **Location**: `website/src/layouts/Layout.astro` lines 512, 539-550; `website/src/styles/global.css` lines 861-877 + - **Issue**: Cursor feels laggy/dragging on Safari. RAF + `translate3d` causes performance issues. Low LERP (0.15) makes cursor feel laggy. + - **Fix**: Increase LERP to 0.25-0.3, add Safari detection and use `translate()` instead of `translate3d()`, add `will-change: transform` to cursor CSS, consider throttling RAF updates + - **Est**: 2-4 hours -## Build & Deploy +- [ ] Engagement fit cards links #task[id:task_01HQABCD1234EFGH5678IJKS status:to-do priority:high created:2026-02-04] + - **Location**: `website/src/pages/engagements.astro` lines 275-297 + - **Issue**: Fit cards in "NOT SURE WHICH IS RIGHT FOR YOU?" section have no links - just badges + - **Fix**: Add links to fit cards (likely to `/brief` or engagement sections) + - **Est**: 2-4 hours -### Vercel config uses npm instead of pnpm -`vercel.json` specifies `npm install` but the project uses pnpm. May cause issues. Update `installCommand` to `pnpm install` or remove it and let Vercel auto-detect from the lockfile. +### Content -### Token build not in CI pipeline -`pnpm run tokens:build` is manual. Generated CSS is committed. If tokens change, someone has to remember to regenerate. Consider chaining it before `astro build` or adding a pre-build script. +- [ ] British English spelling fixes #task[id:task_01HQABCD1234EFGH5678IJKT status:to-do priority:high created:2026-02-04] + - **Location**: `website/src/pages/story.astro` lines 31, 262; `website/src/pages/model.astro` lines 278, 279 + - **Issue**: "organizations" → "organisations" (2 instances), "recognize/recognized" → "recognise/recognised" (2 instances) + - **Fix**: Simple find/replace to British English spelling + - **Est**: 5 min --- -## Content & Structure +## Medium Priority + +### UX/Polish + +- [ ] Button active state obfuscates text #task[id:task_01HQABCD1234EFGH5678IJKU status:to-do priority:medium created:2026-02-04] + - **Location**: `website/src/styles/global.css` lines 290-327 + - **Issue**: `:active` pseudo-class likely uses a dark background that hides text + - **Fix**: Adjust `:active` state colors or add text color override + - **Est**: 1-2 hours + +- [ ] Content reveal timing sync #task[id:task_01HQABCD1234EFGH5678IJKV status:to-do priority:medium created:2026-02-04] + - **Location**: `website/src/layouts/Layout.astro` line 467; `website/src/styles/global.css` line 476 + - **Issue**: Content reveal starts when stripe finishes (2.6s), but reveal takes 2.1s (longest stagger), so content finishes ~2.1s after stripe. They should finish together. + - **Fix**: Start reveal earlier (~1.2s when stripe is ~50% done) or reduce transform duration to 1.0s and start at 1.6s + - **Est**: 1-2 hours + +- [ ] Floating nav icons #task[id:task_01HQABCD1234EFGH5678IJKW status:to-do priority:medium created:2026-02-04] + - **Location**: `website/src/layouts/Layout.astro` lines 168-200 + - **Issue**: Floating nav is text-only, top nav has icons. Layout doesn't match. + - **Fix**: Add icons to floating nav items (same structure as top nav) + - **Est**: 2-4 hours + +- [ ] Tool card buttons cursor #task[id:task_01HQABCD1234EFGH5678IJKX status:to-do priority:medium created:2026-02-04] + - **Location**: `website/src/layouts/Layout.astro` line 555 + - **Issue**: Cursor selector may not include nested buttons properly. Buttons within tools cards don't work with magnetic pointer. + - **Fix**: Update selector to properly target buttons inside `.tool-card` + - **Est**: 1-2 hours + +- [ ] View Source buttons #task[id:task_01HQABCD1234EFGH5678IJKY status:to-do priority:medium created:2026-02-04] + - **Location**: `website/src/pages/tools.astro` lines 47, 65 + - **Issue**: `href="#"` - placeholders, buttons don't work + - **Fix**: Update hrefs to actual GitHub/source URLs + - **Est**: 5 min + +### Content + +- [ ] **🔴 Human Input Required**: Replace placeholder case studies #task[id:task_01HQABCD1234EFGH5678IJKZ status:to-do priority:medium created:2026-02-04] + - **Location**: `website/src/pages/work/index.astro` lines 5-46 + - **Issue**: All 4 case studies are placeholder data. Comment says "Placeholder case studies - these would typically come from content collections" + - **Fix**: Replace with real case study content. Consider Signals, AI-assisted builds, EdTech project. + - **Est**: 4-8 hours (after content provided) + - **Human Input**: Content - Requires writing/creating real case study content + +- [ ] **🔴 Human Input Required**: Replace placeholder testimonial #task[id:task_01HQABCD1234EFGH5678IJL0 status:to-do priority:medium created:2026-02-04] + - **Location**: `website/src/pages/work/index.astro` line 239 + - **Issue**: "Sarah Chen, CTO, Fintech Startup (Series B)" — placeholder name + - **Fix**: Replace with real testimonial or remove if not available + - **Est**: 30 min (after content provided) + - **Human Input**: Content/Approval - Requires real testimonial or decision to remove + +- [ ] **🔴 Human Input Required**: Verify/update stats accuracy #task[id:task_01HQABCD1234EFGH5678IJL1 status:to-do priority:medium created:2026-02-04] + - **Location**: `website/src/pages/work/index.astro` lines 179-194 + - **Issue**: "50+ Projects", "12 Ventures", "95% Satisfaction", "3 Exits" — may be placeholders + - **Fix**: Verify accuracy and update if needed + - **Est**: 30 min (after verification) + - **Human Input**: Verification - Requires human to verify stats are accurate + +- [ ] **🔴 Human Input Required**: Currency decision #task[id:task_01HQABCD1234EFGH5678IJL2 status:to-do priority:medium created:2026-02-04] + - **Location**: `website/src/pages/contact.astro` lines 63-66, 192; `website/src/pages/brief.astro` lines 71, 574-578, 790-794 + - **Issue**: Uses $ instead of £ for British context. Examples: "$25k", "$75k", "$200k", "$500k" + - **Fix**: Choose $ (international) or £ (British) and update all instances + - **Est**: 30 min (after decision) + - **Human Input**: Decision - Choose $ (international) or £ (British) and update all instances + +### Infrastructure + +- [ ] Token build in CI pipeline #task[id:task_01HQABCD1234EFGH5678IJL3 status:to-do priority:medium created:2026-02-04] + - **Location**: Build pipeline + - **Issue**: `pnpm run tokens:build` is manual. Generated CSS is committed. If tokens change, someone has to remember to regenerate. + - **Fix**: Add `pnpm run tokens:build` before `astro build` or add pre-build script + - **Est**: 30 min + +- [ ] Open Graph/Twitter Card tags #task[id:task_01HQABCD1234EFGH5678IJL4 status:to-do priority:medium created:2026-02-04] + - **Location**: `website/src/layouts/Layout.astro` + - **Issue**: No `og:title`, `og:description`, `og:image`, or Twitter Card meta tags. Social shares will render with defaults. + - **Fix**: Add to `Layout.astro` props and head + - **Est**: 2-4 hours + +- [ ] Sitemap and robots.txt #task[id:task_01HQABCD1234EFGH5678IJL5 status:to-do priority:medium created:2026-02-04] + - **Location**: Build output + - **Issue**: Neither exists. Astro has a `@astrojs/sitemap` integration that generates both at build time. + - **Fix**: Add `@astrojs/sitemap` integration to `astro.config.mjs` + - **Est**: 1-2 hours -### Wire up Astro content collections as a lightweight CMS -`src/content/config.ts` already defines `pages` and `posts` collections with schemas. The old markdown files have been archived to `_archive/content/` — they were from the multi-variant era and don't match the current site structure. The goal is to: -- Create fresh markdown files in `src/content/pages/` matching the current page inventory (story, model, engagements, work, contact, etc.) -- Refactor `.astro` pages to pull copy from `getCollection()` / `getEntry()` instead of hardcoding it -- This turns the site into a markdown-driven CMS: update copy by editing `.md` files, no need to touch component code -- The `work/index.astro` page is the best candidate to start with — it already has a comment noting case studies "would typically come from content collections" -- Posts collection could power a blog/insights section later +--- -### Populate Work page with real portfolio content -The Work page currently shows placeholder case studies and a WIP overlay. Replace with real content. Remove the overlay once portfolio is populated. +## Low Priority + +### Polish + +- [ ] Nav items equal width #task[id:task_01HQABCD1234EFGH5678IJL6 status:to-do priority:low created:2026-02-04] + - **Location**: `website/src/layouts/Layout.astro` lines 64-123 + - **Issue**: Nav links have variable widths based on text content + - **Fix**: Add `min-width` or `width` to `.nav__link` or use flexbox with equal distribution + - **Est**: 1-2 hours + +- [ ] Duplicate path check #task[id:task_01HQABCD1234EFGH5678IJL7 status:to-do priority:low created:2026-02-04] + - **Location**: `website/src/layouts/Layout.astro` line 30 + - **Issue**: `currentPath === "/" || currentPath === "/"` — redundant check + - **Fix**: Remove duplicate condition + - **Est**: 1 min + +### Architecture + +- [ ] Iframe cursor handling #task[id:task_01HQABCD1234EFGH5678IJL8 status:to-do priority:low created:2026-02-04] + - **Location**: `website/src/layouts/Layout.astro` cursor script lines 500-587 + - **Issue**: Cursor script can't detect mouse events inside iframes (cross-origin limitation). Magnetic pointer doesn't work on iframes. + - **Fix**: Detect iframe hover, disable cursor inside iframes, or use overlay approach + - **Est**: 4-8 hours + +- [ ] Iframe modal UX improvement #task[id:task_01HQABCD1234EFGH5678IJL9 status:to-do priority:low created:2026-02-04] + - **Location**: `website/src/pages/tools.astro` lines 180-201 + - **Issue**: Tools page uses iframes in modals - not ideal UX. Modal with iframe loading `/style-guide` and `/logo-iterator`. + - **Fix**: Consider replacing with direct navigation (no modal), use embed/component approach instead of iframe, or keep modal but improve mobile experience + - **Est**: 4-8 hours + +- [ ] View transitions #task[id:task_01HQABCD1234EFGH5678IJLA status:to-do priority:low created:2026-02-04] + - **Location**: `website/src/layouts/Layout.astro`, `website/astro.config.mjs` + - **Issue**: No view transition API usage found in codebase. Not implemented correctly. + - **Fix**: Implement View Transitions API for smooth page transitions. Add `@astrojs/view-transitions` integration. + - **Est**: 4-8 hours + +### Future + +- [ ] Self-host fonts #task[id:task_01HQABCD1234EFGH5678IJLB status:to-do priority:low created:2026-02-04] + - **Location**: Font loading + - **Issue**: Currently loading Inter, IBM Plex Mono, and League Gothic from Google Fonts. Self-hosting would eliminate external dependency and improve first-paint. + - **Fix**: Download fonts and serve locally. Fonts are already preconnected, so this is a nice-to-have. + - **Est**: 2-4 hours + +- [ ] Environment variables setup #task[id:task_01HQABCD1234EFGH5678IJLC status:to-do priority:low created:2026-02-04] + - **Location**: Project root + - **Issue**: No `.env` or `.env.example`. Will need one before adding analytics, API keys, or per-environment config. + - **Fix**: Create `.env.example` with template variables and document usage + - **Est**: 30 min + +- [ ] **🔴 Human Input Required**: Design token decisions - hand-written tokens #task[id:task_01HQABCD1234EFGH5678IJLD status:to-do priority:low created:2026-02-04] + - **Location**: `website/src/styles/global.css`, `tokens/tokens.json` + - **Issue**: 15 variables not in `tokens/tokens.json` are intentionally hand-authored in `global.css`: stripe gradients (`--s1`..`--s5`), stacked/repeating stripe backgrounds, warm glow, gold glow, shadow values. These are compositional — they combine primitives in ways that don't map cleanly to a flat token file. + - **Fix**: Decide whether to leave them hand-written (current, works fine), promote them to a second token file (e.g. `tokens/derived.json`) with a custom Style Dictionary transform, or accept the split as a feature + - **Est**: 1 hour (after decision) + - **Human Input**: Decision - Hand-written tokens approach: leave as-is, promote to token file, or accept split + +- [ ] **🔴 Human Input Required**: Design token decisions - unused tokens #task[id:task_01HQABCD1234EFGH5678IJLE status:to-do priority:low created:2026-02-04] + - **Location**: `tokens/tokens.json` + - **Issue**: Token JSON introduced z-index, breakpoint, and additional spacing/radius values that aren't yet consumed in CSS. They're harmless (generated but unused). + - **Fix**: Decide whether to wire them into components as the design evolves or prune unused ones from the JSON to keep the token file honest + - **Est**: 1 hour (after decision) + - **Human Input**: Decision - Unused tokens approach: wire into components or prune from JSON + +- [ ] **🔴 Human Input Required**: Site config decisions #task[id:task_01HQABCD1234EFGH5678IJLF status:to-do priority:low created:2026-02-04] + - **Location**: `website/src/layouts/Layout.astro` line 51, `public/favicon.svg` + - **Issue**: `variant-claude` body class is hardcoded on `` — controls the magnetic cursor. Doesn't track `SITE.logo`. Favicon not tied to logo variant system. + - **Fix**: Decide whether to make body class dynamic (`variant-${SITE.logo}`) so cursor and other variant styles follow the logo choice, or keep it pinned to `claude` if cursor behaviour is meant to persist regardless of logo. Decide favicon variant system approach. + - **Est**: 2-4 hours (after decision) + - **Human Input**: Decision - Make body class dynamic vs keep pinned to `claude`; favicon variant system approach + +- [ ] Wire up Astro content collections as lightweight CMS #task[id:task_01HQABCD1234EFGH5678IJLG status:to-do priority:low created:2026-02-04] + - **Location**: `website/src/content/config.ts`, `.astro` pages + - **Issue**: `src/content/config.ts` already defines `pages` and `posts` collections with schemas but nothing uses them yet. Old markdown files archived to `_archive/content/` — they were from multi-variant era and don't match current site structure. + - **Fix**: Create fresh markdown files in `src/content/pages/` matching current page inventory (story, model, engagements, work, contact, etc.). Refactor `.astro` pages to pull copy from `getCollection()` / `getEntry()` instead of hardcoding it. This turns the site into a markdown-driven CMS: update copy by editing `.md` files, no need to touch component code. The `work/index.astro` page is the best candidate to start with. + - **Est**: 8-16 hours + +- [ ] **🔴 Human Input Required**: Future ideas prioritization #task[id:task_01HQABCD1234EFGH5678IJLH status:to-do priority:low created:2026-02-04] + - **Location**: Various + - **Issue**: Multiple future ideas identified: logo variant dark-mode alternative, error pages (404/500) inline SVGs pulling colours from tokens, brief engine results in modal or dedicated page rather than just export + - **Fix**: Prioritize which ideas to pursue + - **Est**: Variable (after prioritization) + - **Human Input**: Prioritization - Requires human to prioritize which future ideas to pursue -**Live projects to feature:** -- **Signals** — Add as a featured case study (real engagement, real outcomes) -- **Assisted work / AI-assisted builds** — Showcase the Claude-assisted development workflow itself as a case study or methodology highlight +--- -**Pipeline / upcoming projects to queue up:** -- **EdTech project** — Early-stage, could be a "Coming Soon" or teaser card -- Other venture studio projects as they land +## Blocked/Waiting -**Implementation notes:** -- Currently hardcoded as a JS array in `work/index.astro` (lines 5–46) -- Ideal path: wire up content collections first (see above), then each case study is a markdown file -- Case study schema could include: title, client, category, description, tags, impact metrics, featured flag, status (live / in-progress / coming-soon) -- Consider adding individual case study pages (`/work/[slug]`) once there's enough depth per project +*Tasks blocked by dependencies or awaiting human input. Move here when blocked.* --- -## Performance & Polish - -### Self-host fonts -Currently loading Inter, IBM Plex Mono, and League Gothic from Google Fonts. Self-hosting would eliminate the external dependency and improve first-paint. Fonts are already preconnected, so this is a nice-to-have. +## Completed -### Environment variables -No `.env` or `.env.example`. Will need one before adding analytics, API keys, or per-environment config. +*Completed tasks will be archived monthly to `TODO-archive-YYYY-MM.md`* --- -## Future Ideas (not urgent) +## Reference -- Logo variant could include a dark-mode alternative -- Error pages (404/500) inline SVGs could optionally pull colours from tokens for consistency, though their bespoke art direction is part of the charm -- Brief engine could surface results in a modal or dedicated results page rather than just export +- [Investigation Notes](cursor_branch_commit_comparison.md) - Detailed findings from branch comparison investigation +- [Issue Templates](.github/ISSUE_TEMPLATE/) - Bug and content request templates +- [Tracking System](.claude/commands/track.md) - Inline tracker syntax documentation diff --git a/website/astro.config.mjs b/website/astro.config.mjs index 54f5732..bcd0dda 100644 --- a/website/astro.config.mjs +++ b/website/astro.config.mjs @@ -1,8 +1,10 @@ import { defineConfig } from "astro/config"; +import icon from "astro-icon"; export default defineConfig({ site: "http://localhost:4321", publicDir: "../public", + integrations: [icon()], vite: { server: { port: 4321, diff --git a/website/package.json b/website/package.json index e43fbf8..6cf1738 100644 --- a/website/package.json +++ b/website/package.json @@ -12,7 +12,9 @@ "tokens:build": "style-dictionary build --config sd.config.js" }, "dependencies": { + "@iconify-json/heroicons": "^1.2.3", "astro": "^4.16.0", + "astro-icon": "^1.1.5", "gray-matter": "^4.0.3", "markdown-it": "^14.1.0" }, diff --git a/website/pnpm-lock.yaml b/website/pnpm-lock.yaml index 48a69ee..f74eb6a 100644 --- a/website/pnpm-lock.yaml +++ b/website/pnpm-lock.yaml @@ -8,9 +8,15 @@ importers: .: dependencies: + '@iconify-json/heroicons': + specifier: ^1.2.3 + version: 1.2.3 astro: specifier: ^4.16.0 - version: 4.16.19(rollup@4.57.0)(typescript@5.9.3) + version: 4.16.19(@types/node@25.2.0)(rollup@4.57.0)(typescript@5.9.3) + astro-icon: + specifier: ^1.1.5 + version: 1.1.5 gray-matter: specifier: ^4.0.3 version: 4.0.3 @@ -24,6 +30,12 @@ importers: packages: + '@antfu/install-pkg@1.1.0': + resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} + + '@antfu/utils@8.1.1': + resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==} + '@astrojs/compiler@2.13.0': resolution: {integrity: sha512-mqVORhUJViA28fwHYaWmsXSzLO9osbdZ5ImUfxBarqsYdMlPbqAqGJCxsNzvppp1BEzc1mJNjOVvQqeDN8Vspw==} @@ -278,6 +290,18 @@ packages: cpu: [x64] os: [win32] + '@iconify-json/heroicons@1.2.3': + resolution: {integrity: sha512-n+vmCEgTesRsOpp5AB5ILB6srsgsYK+bieoQBNlafvoEhjVXLq8nIGN4B0v/s4DUfa0dOrjwE/cKJgIKdJXOEg==} + + '@iconify/tools@4.2.0': + resolution: {integrity: sha512-WRxPva/ipxYkqZd1+CkEAQmd86dQmrwH0vwK89gmp2Kh2WyyVw57XbPng0NehP3x4V1LzLsXUneP1uMfTMZmUA==} + + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@iconify/utils@2.3.0': + resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==} + '@img/sharp-darwin-arm64@0.33.5': resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -395,6 +419,10 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} + '@isaacs/fs-minipass@4.0.1': + resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} + engines: {node: '>=18.0.0'} + '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -701,6 +729,10 @@ packages: '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + '@trysound/sax@0.2.0': + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -734,9 +766,15 @@ packages: '@types/nlcst@2.0.3': resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} + '@types/node@25.2.0': + resolution: {integrity: sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==} + '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + '@types/yauzl@2.10.3': + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -784,6 +822,9 @@ packages: assert@2.1.0: resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} + astro-icon@1.1.5: + resolution: {integrity: sha512-CJYS5nWOw9jz4RpGWmzNQY7D0y2ZZacH7atL2K9DeJXJVaz7/5WrxeyIxO8KASk1jCM96Q4LjRx/F3R+InjJrw==} + astro@4.16.19: resolution: {integrity: sha512-baeSswPC5ZYvhGDoj25L2FuzKRWMgx105FetOPQVJFMCAp0o08OonYC7AhwsFdhvp7GapqjnC1Fe3lKb2lupYw==} engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} @@ -810,6 +851,9 @@ packages: resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==} hasBin: true + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + boxen@8.0.1: resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} engines: {node: '>=18'} @@ -823,6 +867,9 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} @@ -864,6 +911,17 @@ packages: character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + cheerio-select@2.1.0: + resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} + + cheerio@1.2.0: + resolution: {integrity: sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==} + engines: {node: '>=20.18.1'} + + chownr@3.0.0: + resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} + engines: {node: '>=18'} + ci-info@4.4.0: resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} engines: {node: '>=8'} @@ -905,6 +963,10 @@ packages: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + common-ancestor-path@1.0.1: resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} @@ -912,6 +974,12 @@ packages: resolution: {integrity: sha512-4m5s3Me2xxlVKG9PkZpQqHQR7bgpnN7joDMJ4yvVkVXngjoITG76IaZmzmywSeRTeTpc6N6r3H3+KyUurV8OYw==} engines: {node: '>=18'} + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + confbox@0.2.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -923,11 +991,30 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} + css-select@5.2.2: + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} + + css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} + engines: {node: '>= 6'} + cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} hasBin: true + csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -977,6 +1064,19 @@ packages: dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + dset@3.1.4: resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} engines: {node: '>=4'} @@ -1003,6 +1103,12 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + encoding-sniffer@0.2.1: + resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==} + + end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -1011,6 +1117,10 @@ packages: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -1057,6 +1167,9 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} + exsolve@1.0.8: + resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} + extend-shallow@2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} engines: {node: '>=0.10.0'} @@ -1064,6 +1177,11 @@ packages: extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + fast-glob@3.3.3: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} @@ -1071,6 +1189,9 @@ packages: fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -1126,6 +1247,10 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + github-slugger@2.0.0: resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} @@ -1144,6 +1269,10 @@ packages: engines: {node: 20 || >=22} hasBin: true + globals@15.15.0: + resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} + engines: {node: '>=18'} + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -1206,6 +1335,9 @@ packages: html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + htmlparser2@10.1.0: + resolution: {integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==} + http-cache-semantics@4.2.0: resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} @@ -1213,6 +1345,10 @@ packages: resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} engines: {node: '>=10.18'} + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -1342,6 +1478,9 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} + kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + linkify-it@5.0.0: resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} @@ -1349,6 +1488,10 @@ packages: resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} engines: {node: '>=6'} + local-pkg@1.1.2: + resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} + engines: {node: '>=14'} + locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -1423,6 +1566,12 @@ packages: mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + + mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + mdurl@2.0.0: resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} @@ -1535,6 +1684,13 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} + minizlib@3.1.0: + resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} + engines: {node: '>= 18'} + + mlly@1.8.0: + resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} + mrmime@2.0.1: resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} engines: {node: '>=10'} @@ -1557,6 +1713,9 @@ packages: node-releases@2.0.27: resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} @@ -1573,6 +1732,9 @@ packages: resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + onetime@7.0.0: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} @@ -1611,9 +1773,18 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + package-manager-detector@1.6.0: + resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} + parse-latin@7.0.0: resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==} + parse5-htmlparser2-tree-adapter@7.1.0: + resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} + + parse5-parser-stream@7.1.2: + resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} + parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} @@ -1635,6 +1806,12 @@ packages: path@0.12.7: resolution: {integrity: sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -1654,6 +1831,12 @@ packages: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pkg-types@2.3.0: + resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + possible-typed-array-names@1.1.0: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} @@ -1686,6 +1869,9 @@ packages: property-information@7.1.0: resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + pump@3.0.3: + resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} + punycode.js@2.3.1: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} engines: {node: '>=6'} @@ -1697,6 +1883,9 @@ packages: resolution: {integrity: sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==} engines: {node: '>=0.6'} + quansync@0.2.11: + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -1772,6 +1961,9 @@ packages: resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + section-matter@1.0.0: resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} engines: {node: '>=4'} @@ -1886,6 +2078,15 @@ packages: engines: {node: '>=22.0.0'} hasBin: true + svgo@3.3.2: + resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==} + engines: {node: '>=14.0.0'} + hasBin: true + + tar@7.5.7: + resolution: {integrity: sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==} + engines: {node: '>=18'} + thingies@2.5.0: resolution: {integrity: sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==} engines: {node: '>=10.18'} @@ -1898,6 +2099,10 @@ packages: tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + tinyexec@1.0.2: + resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} + engines: {node: '>=18'} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -1939,6 +2144,16 @@ packages: uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + ufo@1.6.3: + resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} + + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + + undici@7.20.0: + resolution: {integrity: sha512-MJZrkjyd7DeC+uPZh+5/YaMDxFiiEEaDgbUSVMXayofAkDWF1088CDo+2RPg7B1BuS1qf1vgNE7xqwPxE0DuSQ==} + engines: {node: '>=20.18.1'} + unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -2036,6 +2251,15 @@ packages: web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation + + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + which-pm-runs@1.1.0: resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==} engines: {node: '>=4'} @@ -2069,16 +2293,26 @@ packages: resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} engines: {node: '>=18'} + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + xxhash-wasm@1.1.0: resolution: {integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==} yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yallist@5.0.0: + resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} + engines: {node: '>=18'} + yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + yocto-queue@1.2.2: resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} engines: {node: '>=12.20'} @@ -2102,6 +2336,13 @@ packages: snapshots: + '@antfu/install-pkg@1.1.0': + dependencies: + package-manager-detector: 1.6.0 + tinyexec: 1.0.2 + + '@antfu/utils@8.1.1': {} + '@astrojs/compiler@2.13.0': {} '@astrojs/internal-helpers@0.4.1': {} @@ -2367,6 +2608,39 @@ snapshots: '@esbuild/win32-x64@0.21.5': optional: true + '@iconify-json/heroicons@1.2.3': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify/tools@4.2.0': + dependencies: + '@iconify/types': 2.0.0 + '@iconify/utils': 2.3.0 + cheerio: 1.2.0 + domhandler: 5.0.3 + extract-zip: 2.0.1 + local-pkg: 1.1.2 + pathe: 2.0.3 + svgo: 3.3.2 + tar: 7.5.7 + transitivePeerDependencies: + - supports-color + + '@iconify/types@2.0.0': {} + + '@iconify/utils@2.3.0': + dependencies: + '@antfu/install-pkg': 1.1.0 + '@antfu/utils': 8.1.1 + '@iconify/types': 2.0.0 + debug: 4.4.3 + globals: 15.15.0 + kolorist: 1.8.0 + local-pkg: 1.1.2 + mlly: 1.8.0 + transitivePeerDependencies: + - supports-color + '@img/sharp-darwin-arm64@0.33.5': optionalDependencies: '@img/sharp-libvips-darwin-arm64': 1.0.4 @@ -2457,6 +2731,10 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 + '@isaacs/fs-minipass@4.0.1': + dependencies: + minipass: 7.1.2 + '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -2735,6 +3013,8 @@ snapshots: '@shikijs/vscode-textmate@10.0.2': {} + '@trysound/sax@0.2.0': {} + '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.28.6 @@ -2778,8 +3058,18 @@ snapshots: dependencies: '@types/unist': 3.0.3 + '@types/node@25.2.0': + dependencies: + undici-types: 7.16.0 + optional: true + '@types/unist@3.0.3': {} + '@types/yauzl@2.10.3': + dependencies: + '@types/node': 25.2.0 + optional: true + '@ungap/structured-clone@1.3.0': {} '@zip.js/zip.js@2.8.16': {} @@ -2818,7 +3108,15 @@ snapshots: object.assign: 4.1.7 util: 0.12.5 - astro@4.16.19(rollup@4.57.0)(typescript@5.9.3): + astro-icon@1.1.5: + dependencies: + '@iconify/tools': 4.2.0 + '@iconify/types': 2.0.0 + '@iconify/utils': 2.3.0 + transitivePeerDependencies: + - supports-color + + astro@4.16.19(@types/node@25.2.0)(rollup@4.57.0)(typescript@5.9.3): dependencies: '@astrojs/compiler': 2.13.0 '@astrojs/internal-helpers': 0.4.1 @@ -2874,8 +3172,8 @@ snapshots: tsconfck: 3.1.6(typescript@5.9.3) unist-util-visit: 5.1.0 vfile: 6.0.3 - vite: 5.4.21 - vitefu: 1.1.1(vite@5.4.21) + vite: 5.4.21(@types/node@25.2.0) + vitefu: 1.1.1(vite@5.4.21(@types/node@25.2.0)) which-pm: 3.0.1 xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 @@ -2911,6 +3209,8 @@ snapshots: baseline-browser-mapping@2.9.19: {} + boolbase@1.0.0: {} + boxen@8.0.1: dependencies: ansi-align: 3.0.1 @@ -2934,6 +3234,8 @@ snapshots: node-releases: 2.0.27 update-browserslist-db: 1.2.3(browserslist@4.28.1) + buffer-crc32@0.2.13: {} + buffer@6.0.3: dependencies: base64-js: 1.5.1 @@ -2972,6 +3274,31 @@ snapshots: character-entities@2.0.2: {} + cheerio-select@2.1.0: + dependencies: + boolbase: 1.0.0 + css-select: 5.2.2 + css-what: 6.2.2 + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + + cheerio@1.2.0: + dependencies: + cheerio-select: 2.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + domutils: 3.2.2 + encoding-sniffer: 0.2.1 + htmlparser2: 10.1.0 + parse5: 7.3.0 + parse5-htmlparser2-tree-adapter: 7.1.0 + parse5-parser-stream: 7.1.2 + undici: 7.20.0 + whatwg-mimetype: 4.0.0 + + chownr@3.0.0: {} + ci-info@4.4.0: {} cli-boxes@3.0.0: {} @@ -3006,10 +3333,16 @@ snapshots: commander@12.1.0: {} + commander@7.2.0: {} + common-ancestor-path@1.0.1: {} component-emitter@2.0.0: {} + confbox@0.1.8: {} + + confbox@0.2.2: {} + convert-source-map@2.0.0: {} cookie@0.7.2: {} @@ -3020,8 +3353,32 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + css-select@5.2.2: + dependencies: + boolbase: 1.0.0 + css-what: 6.2.2 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + + css-tree@2.2.1: + dependencies: + mdn-data: 2.0.28 + source-map-js: 1.2.1 + + css-tree@2.3.1: + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.2.1 + + css-what@6.2.2: {} + cssesc@3.0.0: {} + csso@5.0.5: + dependencies: + css-tree: 2.2.1 + debug@4.4.3: dependencies: ms: 2.1.3 @@ -3063,6 +3420,24 @@ snapshots: dlv@1.1.3: {} + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + dset@3.1.4: {} dunder-proto@1.0.1: @@ -3083,10 +3458,21 @@ snapshots: emoji-regex@9.2.2: {} + encoding-sniffer@0.2.1: + dependencies: + iconv-lite: 0.6.3 + whatwg-encoding: 3.1.1 + + end-of-stream@1.4.5: + dependencies: + once: 1.4.0 + entities@4.5.0: {} entities@6.0.1: {} + entities@7.0.1: {} + es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -3139,12 +3525,24 @@ snapshots: events@3.3.0: {} + exsolve@1.0.8: {} + extend-shallow@2.0.1: dependencies: is-extendable: 0.1.1 extend@3.0.2: {} + extract-zip@2.0.1: + dependencies: + debug: 4.4.3 + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.3 + transitivePeerDependencies: + - supports-color + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -3157,6 +3555,10 @@ snapshots: dependencies: reusify: 1.1.0 + fd-slicer@1.1.0: + dependencies: + pend: 1.2.0 + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -3213,6 +3615,10 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 + get-stream@5.2.0: + dependencies: + pump: 3.0.3 + github-slugger@2.0.0: {} glob-parent@5.1.2: @@ -3232,6 +3638,8 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 2.0.1 + globals@15.15.0: {} + gopd@1.2.0: {} graceful-fs@4.2.11: {} @@ -3348,10 +3756,21 @@ snapshots: html-void-elements@3.0.0: {} + htmlparser2@10.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 7.0.1 + http-cache-semantics@4.2.0: {} hyperdyperid@1.2.0: {} + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + ieee754@1.2.1: {} import-meta-resolve@4.2.0: {} @@ -3451,6 +3870,8 @@ snapshots: kleur@4.1.5: {} + kolorist@1.8.0: {} + linkify-it@5.0.0: dependencies: uc.micro: 2.1.0 @@ -3462,6 +3883,12 @@ snapshots: pify: 4.0.1 strip-bom: 3.0.0 + local-pkg@1.1.2: + dependencies: + mlly: 1.8.0 + pkg-types: 2.3.0 + quansync: 0.2.11 + locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -3622,6 +4049,10 @@ snapshots: dependencies: '@types/mdast': 4.0.4 + mdn-data@2.0.28: {} + + mdn-data@2.0.30: {} + mdurl@2.0.0: {} memfs@4.56.10(tslib@2.8.1): @@ -3847,6 +4278,17 @@ snapshots: minipass@7.1.2: {} + minizlib@3.1.0: + dependencies: + minipass: 7.1.2 + + mlly@1.8.0: + dependencies: + acorn: 8.15.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.3 + mrmime@2.0.1: {} ms@2.1.3: {} @@ -3861,6 +4303,10 @@ snapshots: node-releases@2.0.27: {} + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + object-inspect@1.13.4: {} object-is@1.1.6: @@ -3879,6 +4325,10 @@ snapshots: has-symbols: 1.1.0 object-keys: 1.1.1 + once@1.4.0: + dependencies: + wrappy: 1.0.2 + onetime@7.0.0: dependencies: mimic-function: 5.0.1 @@ -3924,6 +4374,8 @@ snapshots: package-json-from-dist@1.0.1: {} + package-manager-detector@1.6.0: {} + parse-latin@7.0.0: dependencies: '@types/nlcst': 2.0.3 @@ -3933,6 +4385,15 @@ snapshots: unist-util-visit-children: 3.0.0 vfile: 6.0.3 + parse5-htmlparser2-tree-adapter@7.1.0: + dependencies: + domhandler: 5.0.3 + parse5: 7.3.0 + + parse5-parser-stream@7.1.2: + dependencies: + parse5: 7.3.0 + parse5@7.3.0: dependencies: entities: 6.0.1 @@ -3953,6 +4414,10 @@ snapshots: process: 0.11.10 util: 0.10.4 + pathe@2.0.3: {} + + pend@1.2.0: {} + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -3965,6 +4430,18 @@ snapshots: dependencies: find-up: 4.1.0 + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.8.0 + pathe: 2.0.3 + + pkg-types@2.3.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.8 + pathe: 2.0.3 + possible-typed-array-names@1.1.0: {} postcss@8.5.6: @@ -3992,6 +4469,11 @@ snapshots: property-information@7.1.0: {} + pump@3.0.3: + dependencies: + end-of-stream: 1.4.5 + once: 1.4.0 + punycode.js@2.3.1: {} punycode@1.4.1: {} @@ -4000,6 +4482,8 @@ snapshots: dependencies: side-channel: 1.1.0 + quansync@0.2.11: {} + queue-microtask@1.2.3: {} regex-recursion@5.1.1: @@ -4154,6 +4638,8 @@ snapshots: es-errors: 1.3.0 is-regex: 1.2.1 + safer-buffer@2.1.2: {} + section-matter@1.0.0: dependencies: extend-shallow: 2.0.1 @@ -4321,6 +4807,24 @@ snapshots: transitivePeerDependencies: - tslib + svgo@3.3.2: + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 5.2.2 + css-tree: 2.3.1 + css-what: 6.2.2 + csso: 5.0.5 + picocolors: 1.1.1 + + tar@7.5.7: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.2 + minizlib: 3.1.0 + yallist: 5.0.0 + thingies@2.5.0(tslib@2.8.1): dependencies: tslib: 2.8.1 @@ -4329,6 +4833,8 @@ snapshots: tinyexec@0.3.2: {} + tinyexec@1.0.2: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -4353,6 +4859,13 @@ snapshots: uc.micro@2.1.0: {} + ufo@1.6.3: {} + + undici-types@7.16.0: + optional: true + + undici@7.20.0: {} + unified@11.0.5: dependencies: '@types/unist': 3.0.3 @@ -4443,20 +4956,27 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite@5.4.21: + vite@5.4.21(@types/node@25.2.0): dependencies: esbuild: 0.21.5 postcss: 8.5.6 rollup: 4.57.0 optionalDependencies: + '@types/node': 25.2.0 fsevents: 2.3.3 - vitefu@1.1.1(vite@5.4.21): + vitefu@1.1.1(vite@5.4.21(@types/node@25.2.0)): optionalDependencies: - vite: 5.4.21 + vite: 5.4.21(@types/node@25.2.0) web-namespaces@2.0.1: {} + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + + whatwg-mimetype@4.0.0: {} + which-pm-runs@1.1.0: {} which-pm@3.0.1: @@ -4499,12 +5019,21 @@ snapshots: string-width: 7.2.0 strip-ansi: 7.1.2 + wrappy@1.0.2: {} + xxhash-wasm@1.1.0: {} yallist@3.1.1: {} + yallist@5.0.0: {} + yargs-parser@21.1.1: {} + yauzl@2.10.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + yocto-queue@1.2.2: {} zod-to-json-schema@3.25.1(zod@3.25.76): diff --git a/website/src/layouts/Layout.astro b/website/src/layouts/Layout.astro index b12621f..1f7a60f 100644 --- a/website/src/layouts/Layout.astro +++ b/website/src/layouts/Layout.astro @@ -1,25 +1,27 @@ --- import "../styles/global.css"; import { SITE } from "../lib/site"; +import { Icon } from "astro-icon/components"; interface Props { title?: string; description?: string; } -const { title = "WE3", description = "Small teams for big challenges" } = Astro.props; +const { title = "WE3", description = "Small teams for big challenges" } = + Astro.props; const currentPath = Astro.url.pathname; const logoSrc = `/images/logos/${SITE.logo}.svg`; const navLeft = [ - { href: "/story", label: "Our Story" }, - { href: "/model", label: "The Model" }, - { href: "/engagements", label: "Engagements" }, + { href: "/story", label: "Our Story", icon: "heroicons:book-open" }, + { href: "/model", label: "The Model", icon: "heroicons:squares-plus" }, + { href: "/engagements", label: "Engagements", icon: "heroicons:user-group" }, ]; const navRight = [ - { href: "/work", label: "Work" }, - { href: "/tools", label: "Tools" }, - { href: "/contact", label: "Contact" }, + { href: "/work", label: "Work", icon: "heroicons:briefcase" }, + { href: "/tools", label: "Tools", icon: "heroicons:wrench" }, + { href: "/contact", label: "Contact", icon: "heroicons:envelope" }, ]; const navAll = [...navLeft, ...navRight]; @@ -31,495 +33,608 @@ function isActive(href: string): boolean { } --- - + - - - - - {title} | WE3 - - - - - - - - - - - - - - - - + + + - - -
- -
- - -